@objectstack/console 17.5.0 → 17.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (282) hide show
  1. package/CHANGELOG.md +806 -0
  2. package/dist/.objectstack-injection.json +2 -2
  3. package/dist/.objectui-sha +1 -1
  4. package/dist/assets/{ActionResultDialog-CLdIyOW6.js → ActionResultDialog-ChYnuROr.js} +3 -3
  5. package/dist/assets/{AiPendingActionsPage-OKYz66yR.js → AiPendingActionsPage-Dh3-i4BB.js} +1 -1
  6. package/dist/assets/{ApiConsolePage-CcrKovu8.js → ApiConsolePage-CKYEqlMs.js} +1 -1
  7. package/dist/assets/AppDocsIndex-B5Tky2xg.js +1 -0
  8. package/dist/assets/{AppManagementPage-D_xz8cTZ.js → AppManagementPage-ZwyvnHpM.js} +1 -1
  9. package/dist/assets/ApprovalsInboxPage-DD4fe0Em.js +1 -0
  10. package/dist/assets/{AuditLogPage-CoghqsZb.js → AuditLogPage-Sed6iMqP.js} +1 -1
  11. package/dist/assets/BookPage-DYjUsQIc.js +1 -0
  12. package/dist/assets/{ComponentNavView-BxsixSU9.js → ComponentNavView-DrlxM4SY.js} +1 -1
  13. package/dist/assets/CreateViewDialog-Cp72x_O7.js +1 -0
  14. package/dist/assets/DashboardView-juicRxcP.js +1 -0
  15. package/dist/assets/DocPage-CxJaQ-pC.js +1 -0
  16. package/dist/assets/{DocsIndex-B2zw_HAp.js → DocsIndex-LALVtIVR.js} +1 -1
  17. package/dist/assets/{DocsLayout-DezZ8x7_.js → DocsLayout-BAwlJQQf.js} +1 -1
  18. package/dist/assets/DocsSlug-CkF1E-Zs.js +1 -0
  19. package/dist/assets/ExpressionProvider-Dr0e99r1.js +1 -0
  20. package/dist/assets/FlowRunsPage-R3W3t2s4.js +1 -0
  21. package/dist/assets/{IntegrationsPage-2leVkVDH.js → IntegrationsPage-DIuFLEbF.js} +2 -2
  22. package/dist/assets/InterfaceListPage-BfoCldGu.js +1 -0
  23. package/dist/assets/{MarketplaceInstalledPage-EPPHSitW.js → MarketplaceInstalledPage-DyjhcUNB.js} +1 -1
  24. package/dist/assets/MarketplacePackagePage-BbO27Pgs.js +4 -0
  25. package/dist/assets/{MarketplacePage-BnQKykgv.js → MarketplacePage-DO2_b64U.js} +1 -1
  26. package/dist/assets/{MetadataInspector-BWxLkr0O.js → MetadataInspector-BQyu9pOE.js} +1 -1
  27. package/dist/assets/ObjectDataPage-DIY-yefK.js +1 -0
  28. package/dist/assets/PageView-C-qWu3Jw.js +1 -0
  29. package/dist/assets/ProfilePage-Qp8DL8CF.js +1 -0
  30. package/dist/assets/{PublicFormsPage-DlE6tck_.js → PublicFormsPage-D3AT2EH9.js} +1 -1
  31. package/dist/assets/RecordDetailView-B3XBEgk2.js +3 -0
  32. package/dist/assets/RecordFormPage-CcoZfUJ3.js +1 -0
  33. package/dist/assets/ReportDefaultInspector-DVcWM6sh.js +1 -0
  34. package/dist/assets/ReportView-pJCFptzp.js +2 -0
  35. package/dist/assets/RuntimeDraftBar-DObTyFu2.js +1 -0
  36. package/dist/assets/SchemaForm-BWSWYMLE.js +3 -0
  37. package/dist/assets/SearchResultsPage-ChVIzFob.js +1 -0
  38. package/dist/assets/{SettingsHub-BGKIj-Zq.js → SettingsHub-CPP9FDe8.js} +1 -1
  39. package/dist/assets/SettingsView-CrHAROu9.js +1 -0
  40. package/dist/assets/{SkeletonDetail-C8fMI-Mu.js → SkeletonDetail-CP-35B8x.js} +1 -1
  41. package/dist/assets/{af-BfSmLD34.js → af-Bhbso4Pg.js} +1 -1
  42. package/dist/assets/ai-BAPiCsNk.js +3 -0
  43. package/dist/assets/app-shell-eager-leaves-D9tgfJOe.js +1 -0
  44. package/dist/assets/{ar-B9ttrM75.js → ar-DG8TAFtm.js} +1 -1
  45. package/dist/assets/{ar-DZ-C1rn-cyl.js → ar-DZ-BtSien-d.js} +1 -1
  46. package/dist/assets/{ar-EG-BaDxKP_o.js → ar-EG-DpXC0zoY.js} +1 -1
  47. package/dist/assets/{ar-MA-DbxNEcmd.js → ar-MA-D1qVJLyE.js} +1 -1
  48. package/dist/assets/{ar-SA-DeC5LXcX.js → ar-SA-BIYKNgv8.js} +1 -1
  49. package/dist/assets/{ar-TN-C9KpTFJz.js → ar-TN-mUR5Mq3s.js} +1 -1
  50. package/dist/assets/{az-cMerDwRO.js → az-B7IqwHGK.js} +1 -1
  51. package/dist/assets/{be-ZTSbszQh.js → be-CnZyPaSX.js} +1 -1
  52. package/dist/assets/{be-tarask-BXZEUrgX.js → be-tarask--uMMCC7l.js} +1 -1
  53. package/dist/assets/{bg-BDogpmn5.js → bg-CZwuirtY.js} +1 -1
  54. package/dist/assets/{bn-Cz04uxmh.js → bn-BbOX0r-z.js} +1 -1
  55. package/dist/assets/{bs-CpFnCl-j.js → bs-B5W75cYR.js} +1 -1
  56. package/dist/assets/{ca-CHC4M52Z.js → ca-Be69LdIM.js} +1 -1
  57. package/dist/assets/{ckb-Dxw-RNm8.js → ckb-B-nKM1Vn.js} +1 -1
  58. package/dist/assets/contracts-DieHW666.js +1 -0
  59. package/dist/assets/{createDerive-DvA_JGNq.js → createDerive-CynsXU-B.js} +1 -1
  60. package/dist/assets/{cs-DsFaJ5Z7.js → cs-qHngxH7l.js} +1 -1
  61. package/dist/assets/{cy-FH4JFDTs.js → cy-DscO2Pgf.js} +1 -1
  62. package/dist/assets/{da-D1pVjaAq.js → da-vibkaLMF.js} +1 -1
  63. package/dist/assets/data-adapter-BDsrq0TX.js +2 -0
  64. package/dist/assets/{de-AT-DUMQCisj.js → de-AT--JneEuBw.js} +1 -1
  65. package/dist/assets/{de-DKrxSvnP.js → de-BCT78XYW.js} +1 -1
  66. package/dist/assets/default-inspector-registry-Dktr6x_q.js +1 -0
  67. package/dist/assets/dist-yh3dYtHt.js +14 -0
  68. package/dist/assets/drillUrlFilters-N0RngQg6.js +1 -0
  69. package/dist/assets/{el-l3-bHySV.js → el-Cl0y9T2b.js} +1 -1
  70. package/dist/assets/en-AU-By42tTB7.js +1 -0
  71. package/dist/assets/{en-CA-DGH5NF0a.js → en-CA-BqEEoj-Y.js} +1 -1
  72. package/dist/assets/en-GB-Cx8B9nkB.js +1 -0
  73. package/dist/assets/en-IE-CX9nv6uO.js +1 -0
  74. package/dist/assets/en-IN-ByGSBHa4.js +1 -0
  75. package/dist/assets/en-NZ-BPMwa2ZN.js +1 -0
  76. package/dist/assets/en-ZA-lj_N4R6c.js +1 -0
  77. package/dist/assets/{eo-CL6CXHZx.js → eo-oOXROuhF.js} +1 -1
  78. package/dist/assets/{es-BIJ0rksI.js → es-EudscwjH.js} +1 -1
  79. package/dist/assets/{et-BGgMzjm1.js → et-CB-5LLh6.js} +1 -1
  80. package/dist/assets/{eu-CqvAoRrX.js → eu-B4-hcseX.js} +1 -1
  81. package/dist/assets/{fa-IR-DNz3oA1-.js → fa-IR-CogavcMJ.js} +1 -1
  82. package/dist/assets/{fi-DNSfKWuW.js → fi-CIBE0mYa.js} +1 -1
  83. package/dist/assets/{formatLong-CHb9WA3O.js → formatLong-qqgm7lV1.js} +1 -1
  84. package/dist/assets/{fr-CA-CotiswPx.js → fr-CA-BugXMutW.js} +1 -1
  85. package/dist/assets/{fr-DYRJCirJ.js → fr-CDReXYWW.js} +1 -1
  86. package/dist/assets/{fr-CH-CpiEYWpc.js → fr-CH-fiTiB6X1.js} +1 -1
  87. package/dist/assets/framework-CAuH4h0L.js +35 -0
  88. package/dist/assets/{fy-B69yM3FE.js → fy-t_GzIAg_.js} +1 -1
  89. package/dist/assets/{gd-BAy8AsX6.js → gd-CSncIxtN.js} +1 -1
  90. package/dist/assets/{getIcon-BEVyC4y3.js → getIcon-BDkBRQFw.js} +1 -1
  91. package/dist/assets/{gl-soLn_weL.js → gl-_138Mj2S.js} +1 -1
  92. package/dist/assets/{gu-B19Yo9yC.js → gu-COfH-YUT.js} +1 -1
  93. package/dist/assets/{he-DYTPo33p.js → he-BXL4lOKY.js} +1 -1
  94. package/dist/assets/{hi-D2dIK7Oy.js → hi-kXuYI0TJ.js} +1 -1
  95. package/dist/assets/{highlighted-body-OFNGDK62-CExufvVt.js → highlighted-body-OFNGDK62-CK7x7Gzm.js} +1 -1
  96. package/dist/assets/{hr-BV-VOPMu.js → hr-DAOsQWzI.js} +1 -1
  97. package/dist/assets/{ht-C7MM4qkS.js → ht-Ch8SKz8p.js} +1 -1
  98. package/dist/assets/{hu-Rha1m2Ym.js → hu-q6W_rWPT.js} +1 -1
  99. package/dist/assets/{hy-CiTNgbdV.js → hy-0M8OmwnM.js} +1 -1
  100. package/dist/assets/i18n-DTfZonAM.js +17 -0
  101. package/dist/assets/i18n-locale-ar-O6rs-Cir.js +4 -0
  102. package/dist/assets/i18n-locale-de-CMc1jk4a.js +4 -0
  103. package/dist/assets/i18n-locale-en-CbRQO81h.js +4 -0
  104. package/dist/assets/i18n-locale-es-t47nyoCX.js +4 -0
  105. package/dist/assets/i18n-locale-fr-E425EqJM.js +4 -0
  106. package/dist/assets/i18n-locale-ja-y_fk77fz.js +4 -0
  107. package/dist/assets/i18n-locale-ko-CdnY2uCg.js +4 -0
  108. package/dist/assets/i18n-locale-pt-BaUOXS6y.js +4 -0
  109. package/dist/assets/i18n-locale-ru-pFlhX9wg.js +4 -0
  110. package/dist/assets/i18n-locale-zh-Dkj4ROTN.js +4 -0
  111. package/dist/assets/i18n-runtime-CdWyaiOD.js +1 -0
  112. package/dist/assets/{id-Cijsfjt-.js → id-BM_H1_jv.js} +1 -1
  113. package/dist/assets/index-ocmkyCt6.js +19 -0
  114. package/dist/assets/index-v2Ijn9Gr.css +2 -0
  115. package/dist/assets/{infrastructure-BHSync5f.js → infrastructure-CSnL6ntj.js} +2 -2
  116. package/dist/assets/integration-7NqwVHuJ.js +1 -0
  117. package/dist/assets/{is-xS1WTyeC.js → is-B_7jXZfS.js} +1 -1
  118. package/dist/assets/isSameWeek-D90tBsli.js +1 -0
  119. package/dist/assets/{it-C2i_c9sd.js → it-CBM0J9cD.js} +1 -1
  120. package/dist/assets/{it-CH-l516ZNXj.js → it-CH-BQltCNsR.js} +1 -1
  121. package/dist/assets/{ja-D9_ewLny.js → ja-DBjnsx21.js} +1 -1
  122. package/dist/assets/{ja-Hira-D_6ExgHw.js → ja-Hira-BZfSmj1i.js} +1 -1
  123. package/dist/assets/{ka-BYHGyees.js → ka-HwpuKgUY.js} +1 -1
  124. package/dist/assets/{kk-CbTFtuqb.js → kk-DLKA9paj.js} +1 -1
  125. package/dist/assets/{km-Dr2gwhIn.js → km-BU5kermq.js} +1 -1
  126. package/dist/assets/{kn-CprH8JD7.js → kn-BNFqbCoi.js} +1 -1
  127. package/dist/assets/{ko-CsFS2u5i.js → ko-D8n4uMqQ.js} +1 -1
  128. package/dist/assets/{lb-CbFKN7Ob.js → lb-B1empQ7m.js} +1 -1
  129. package/dist/assets/{lt-Bq0xkLp0.js → lt-gMukpK3G.js} +1 -1
  130. package/dist/assets/{lv-Cj6vg6Qo.js → lv-D2O5AnsZ.js} +1 -1
  131. package/dist/assets/{match-CiPp9BME.js → match-BTF6WqJh.js} +1 -1
  132. package/dist/assets/{match-C_jFGO9e.js → match-Cyum2eeW.js} +1 -1
  133. package/dist/assets/{match-Co4ivumx.js → match-ScHH8kYk.js} +1 -1
  134. package/dist/assets/mermaid-GHXKKRXX-D4H6EVJQ.js +1 -0
  135. package/dist/assets/metadata-admin-CEhVmXFv.js +9 -0
  136. package/dist/assets/{mk-MXFM99YL.js → mk-D-Zl0xVN.js} +1 -1
  137. package/dist/assets/{mn-D5Q9B6Jt.js → mn-jJbTslgD.js} +1 -1
  138. package/dist/assets/{ms-CCzPRldx.js → ms-CUuJHLA4.js} +1 -1
  139. package/dist/assets/{mt-mjJpN6xW.js → mt-yIcbfxKY.js} +1 -1
  140. package/dist/assets/{nb-BIlNqdEb.js → nb-D9WNypoj.js} +1 -1
  141. package/dist/assets/{nl-BE-FwXjQsmV.js → nl-BE-B1vKiw2h.js} +1 -1
  142. package/dist/assets/{nl-D2uBtIxG.js → nl-DC7b5e90.js} +1 -1
  143. package/dist/assets/{nn-B0loJ7SV.js → nn-uP4yJ9s0.js} +1 -1
  144. package/dist/assets/{oc-U7-yH1sO.js → oc-DHTqadJI.js} +1 -1
  145. package/dist/assets/{pl-mTy0JYgi.js → pl-Bxnnizf5.js} +1 -1
  146. package/dist/assets/plugin-calendar-b7C35ANT.js +1 -0
  147. package/dist/assets/plugin-charts-b-yVtmdI.js +7 -0
  148. package/dist/assets/plugin-chatbot-D1KW_oIO.js +122 -0
  149. package/dist/assets/plugin-dashboard-DTkPoPEb.js +6 -0
  150. package/dist/assets/plugin-form-UIRm-FpQ.js +1 -0
  151. package/dist/assets/plugin-gantt-9dtc8zzX.js +63 -0
  152. package/dist/assets/plugin-grid-Cp4RKtMJ.js +10 -0
  153. package/dist/assets/plugin-kanban-B2JOPZIJ.js +1 -0
  154. package/dist/assets/plugin-map-CBJcVJYk.js +1 -0
  155. package/dist/assets/{plugin-markdown-D1nTQc1T.js → plugin-markdown-CNlDzqP-.js} +1 -1
  156. package/dist/assets/plugin-report-IZzgQb-Q.js +59 -0
  157. package/dist/assets/plugin-timeline-DsmtjcJ3.js +1 -0
  158. package/dist/assets/plugin-tree-DTRPBdhe.js +1 -0
  159. package/dist/assets/plugin-view-D9ixsNDG.js +1 -0
  160. package/dist/assets/plugins-views-CnvkdSJK.js +3 -0
  161. package/dist/assets/{pt-BR-2KtO5Js1.js → pt-BR-D416seHT.js} +1 -1
  162. package/dist/assets/{pt-Bet5OOQf.js → pt-DwHBy9_c.js} +1 -1
  163. package/dist/assets/{ro-37U6sgzi.js → ro-DDf1X3Np.js} +1 -1
  164. package/dist/assets/{ru-CyuAY-5E.js → ru-8eM3mcgK.js} +1 -1
  165. package/dist/assets/{runtime-metadata-persistence-afAW-MeD.js → runtime-metadata-persistence-DX29lQ62.js} +1 -1
  166. package/dist/assets/{se-DeJabuC6.js → se-D4JvQeRX.js} +1 -1
  167. package/dist/assets/{sk-DWEpjfkR.js → sk-DvpgttGI.js} +1 -1
  168. package/dist/assets/{sl-4oSvNhIR.js → sl-B3gCZ-_a.js} +1 -1
  169. package/dist/assets/{sq-BjkBCaXW.js → sq-CVaTmL0V.js} +1 -1
  170. package/dist/assets/{sr-Dxm1DsRS.js → sr-CnH5Ffyz.js} +1 -1
  171. package/dist/assets/{sr-Latn-Dawg6oP2.js → sr-Latn-Dw9w61q6.js} +1 -1
  172. package/dist/assets/src-BUry7633.js +2 -0
  173. package/dist/assets/{src-C8NYjdVm.js → src-DMDT5a27.js} +1 -1
  174. package/dist/assets/src-ZxH3AOCu.js +16 -0
  175. package/dist/assets/{studioEntry-nXQP3iL0.js → studioEntry-DAqcBFtr.js} +1 -1
  176. package/dist/assets/{submitRedirect-jK-cEIbP.js → submitRedirect-iy0oOi7I.js} +1 -1
  177. package/dist/assets/{sv-CROOGJGz.js → sv-CU7wdxyK.js} +1 -1
  178. package/dist/assets/{ta-BZnTmFI_.js → ta-DPH6q0HR.js} +1 -1
  179. package/dist/assets/{te-BN0v0x5t.js → te-BSaThkGV.js} +1 -1
  180. package/dist/assets/{th-CBjKhp_U.js → th-NXP8_Qb8.js} +1 -1
  181. package/dist/assets/{tr-x0Ne4N4H.js → tr-DDXoH663.js} +1 -1
  182. package/dist/assets/types-zod-ChJ30y25.js +1 -0
  183. package/dist/assets/{ug-sgzNhsKo.js → ug-Guus6pPe.js} +1 -1
  184. package/dist/assets/ui-components-D8wcRNrt.js +37 -0
  185. package/dist/assets/ui-layout-BYO3rRIl.js +1 -0
  186. package/dist/assets/{uk-o_DQ5VHJ.js → uk-uiy4vsp8.js} +1 -1
  187. package/dist/assets/use-book-data-DFTswcKm.js +1 -0
  188. package/dist/assets/{useActionModal-CSvbHkQ7.js → useActionModal-h52Z5Pkl.js} +1 -1
  189. package/dist/assets/useCanAuthorMetadata-TDrVrYGB.js +1 -0
  190. package/dist/assets/useDatasetCatalog-BOd0Ybr1.js +1 -0
  191. package/dist/assets/useNavSelDeepLink-67Y4qCNO.js +1 -0
  192. package/dist/assets/useNavTargetLabel-D8lRdb6O.js +1 -0
  193. package/dist/assets/useOpenRecordList-C7oqUD3F.js +1 -0
  194. package/dist/assets/{usePackageL10n-CMx66am-.js → usePackageL10n-Jl2XiF2F.js} +1 -1
  195. package/dist/assets/{useSettingsLabel-Kkr2q0Oo.js → useSettingsLabel-CSpBDTdy.js} +1 -1
  196. package/dist/assets/{uz-Cyrl-DbtkQtz_.js → uz-Cyrl-Cmb5bvbf.js} +1 -1
  197. package/dist/assets/{uz-Be41d4jl.js → uz-DJWxoTz4.js} +1 -1
  198. package/dist/assets/vendor-objectstack-C4eD5dbT.js +139 -0
  199. package/dist/assets/{vi-84mZmklk.js → vi-Bb3QoIJC.js} +1 -1
  200. package/dist/assets/{zh-CN-DD1reegJ.js → zh-CN-C-Hts1ZR.js} +1 -1
  201. package/dist/assets/{zh-HK-B05u30WI.js → zh-HK-CtBAZ_ZS.js} +1 -1
  202. package/dist/assets/{zh-TW-Bb-WimPD.js → zh-TW-B7DDahD-.js} +1 -1
  203. package/dist/chunk-membership.json +116 -104
  204. package/dist/eager-closure.json +126 -120
  205. package/dist/index.html +4 -4
  206. package/dist/sdui.manifest.json +998 -115
  207. package/package.json +1 -1
  208. package/dist/assets/AppDocsIndex-F4zDq2zz.js +0 -1
  209. package/dist/assets/ApprovalsInboxPage-DrEUmaDb.js +0 -1
  210. package/dist/assets/CreateViewDialog-xyKlpLEW.js +0 -1
  211. package/dist/assets/DashboardView-CGC-_Om8.js +0 -1
  212. package/dist/assets/DocPage-CIZE5kdj.js +0 -1
  213. package/dist/assets/DocsSlug-DXdFdwlS.js +0 -1
  214. package/dist/assets/ExpressionProvider-DZfMwyMs.js +0 -1
  215. package/dist/assets/FlowRunsPage-CvY3nJMF.js +0 -1
  216. package/dist/assets/InterfaceListPage-BdECC_i3.js +0 -1
  217. package/dist/assets/MarketplacePackagePage-C7NOu2Ir.js +0 -4
  218. package/dist/assets/ObjectDataPage-BIzp65Mo.js +0 -1
  219. package/dist/assets/PageView-CVLgCRSF.js +0 -1
  220. package/dist/assets/ProfilePage-D2qGgxPK.js +0 -1
  221. package/dist/assets/RecordDetailView-DQKydU7X.js +0 -3
  222. package/dist/assets/RecordFormPage-BTjwxJIA.js +0 -1
  223. package/dist/assets/ReportDefaultInspector-DdsQAkd7.js +0 -1
  224. package/dist/assets/ReportView-GIdKJdOt.js +0 -2
  225. package/dist/assets/RuntimeDraftBar-BbMdi3Kp.js +0 -1
  226. package/dist/assets/SchemaForm-C8X1ve4p.js +0 -3
  227. package/dist/assets/SearchResultsPage-Jwhqsdyo.js +0 -1
  228. package/dist/assets/SettingsView-D8SMKdrc.js +0 -1
  229. package/dist/assets/app-shell-eager-leaves-CDVclng4.js +0 -1
  230. package/dist/assets/appRoute-DbnWDEa1.js +0 -1
  231. package/dist/assets/data-adapter-DMbe6Njk.js +0 -1
  232. package/dist/assets/default-inspector-registry-CpL3fFhl.js +0 -1
  233. package/dist/assets/dist-BXrEV1ag.js +0 -13
  234. package/dist/assets/drillUrlFilters-hi-2d3DW.js +0 -1
  235. package/dist/assets/en-AU-C6x7mDhH.js +0 -1
  236. package/dist/assets/en-GB-0-nho2eK.js +0 -1
  237. package/dist/assets/en-IE-2fC3BkfV.js +0 -1
  238. package/dist/assets/en-IN-C1QcFhxn.js +0 -1
  239. package/dist/assets/en-NZ-C80ptZT7.js +0 -1
  240. package/dist/assets/en-ZA-ByZDrjeb.js +0 -1
  241. package/dist/assets/framework-DcWkeiND.js +0 -35
  242. package/dist/assets/i18n-CEKxYdmD.js +0 -9
  243. package/dist/assets/i18n-locale-ar-DN7sl3GF.js +0 -4
  244. package/dist/assets/i18n-locale-de-C40JErvb.js +0 -4
  245. package/dist/assets/i18n-locale-en-CITPDIHy.js +0 -4
  246. package/dist/assets/i18n-locale-es-C8DdWN6c.js +0 -4
  247. package/dist/assets/i18n-locale-fr-COIdEZZl.js +0 -4
  248. package/dist/assets/i18n-locale-ja-DYF_rU_s.js +0 -4
  249. package/dist/assets/i18n-locale-ko-B-ODYAtX.js +0 -4
  250. package/dist/assets/i18n-locale-pt-CK1SyBIm.js +0 -4
  251. package/dist/assets/i18n-locale-ru-jLzvShMO.js +0 -4
  252. package/dist/assets/i18n-locale-zh-Bf9Gbbvl.js +0 -4
  253. package/dist/assets/i18n-runtime-CTgAQF4N.js +0 -1
  254. package/dist/assets/index-CLyvpiGc.css +0 -2
  255. package/dist/assets/index-CfnfGw5W.js +0 -20
  256. package/dist/assets/isSameWeek-DWYeNyh8.js +0 -1
  257. package/dist/assets/mermaid-GHXKKRXX-DVLc_uym.js +0 -1
  258. package/dist/assets/metadata-admin-CybaOCdO.js +0 -9
  259. package/dist/assets/nav-selection-Dzm_mA3C.js +0 -1
  260. package/dist/assets/plugin-calendar-CKRBcML7.js +0 -1
  261. package/dist/assets/plugin-charts-DGTJxXCB.js +0 -7
  262. package/dist/assets/plugin-chatbot-DwtwNA-y.js +0 -122
  263. package/dist/assets/plugin-dashboard-C1AYKmGX.js +0 -6
  264. package/dist/assets/plugin-form-CV8ZY04-.js +0 -1
  265. package/dist/assets/plugin-gantt-BRIb2_8G.js +0 -63
  266. package/dist/assets/plugin-grid-C9h7mRVv.js +0 -11
  267. package/dist/assets/plugin-kanban-BcJ0Dhys.js +0 -1
  268. package/dist/assets/plugin-map-D24ZUOUj.js +0 -1
  269. package/dist/assets/plugin-report-BfGintAq.js +0 -59
  270. package/dist/assets/plugin-timeline-CbBRq_qt.js +0 -1
  271. package/dist/assets/plugin-tree-BNX2A5J5.js +0 -1
  272. package/dist/assets/plugin-view-DzWQWYyH.js +0 -1
  273. package/dist/assets/plugins-views-DraK4xz0.js +0 -3
  274. package/dist/assets/src-B8lv0plz.js +0 -18
  275. package/dist/assets/src-DoDvT77T.js +0 -1
  276. package/dist/assets/types-zod-Y2RwUUeJ.js +0 -1
  277. package/dist/assets/ui-components-BTB1NkUW.js +0 -37
  278. package/dist/assets/ui-layout-bZfafwJa.js +0 -1
  279. package/dist/assets/use-book-data-C3eyZJSG.js +0 -1
  280. package/dist/assets/useOpenRecordList-B5-qaFUx.js +0 -1
  281. package/dist/assets/vendor-objectstack-XuWC71M9.js +0 -266
  282. package/dist/assets/vendor-zod-CHLW1iCr.js +0 -64
@@ -1,11 +0,0 @@
1
- import{o as e,r as t}from"./rolldown-runtime-C0FnF6B9.js";import{h as n,p as r,r as i,t as a,v as o}from"./vendor-react-BggL7APJ.js";import{$t as s,At as c,Ft as l,Nr as u,Sr as d,Tn as f,dn as p,gn as m,kt as h,rn as g,wr as _,xr as v}from"./vendor-objectstack-XuWC71M9.js";import{$ as y,$n as b,$t as x,A as S,Ar as C,B as w,Bn as T,Br as E,C as D,Cn as O,Dn as k,En as A,F as j,Fn as M,Fr as ee,G as N,Gn as te,Gt as P,H as ne,Hr as F,Ht as I,I as L,In as R,Ir as z,J as B,K as V,Kn as re,Kt as H,L as ie,Ln as ae,Lr as oe,M as se,Mr as ce,N as le,Nr as ue,O as U,On as de,P as fe,Pr as pe,Q as me,Qn as he,Qt as ge,R as _e,Rn as ve,Rr as ye,Si as be,Tn as xe,U as W,Un as Se,Ur as Ce,V as we,W as G,Wn as Te,Xt as Ee,Z as De,Zn as Oe,Zt as ke,_ as Ae,ai as K,an as je,b as Me,bi as q,bt as Ne,ci as Pe,d as Fe,di as Ie,dt as Le,en as Re,f as ze,fi as Be,gi as Ve,hi as He,i as Ue,ii as We,in as J,j as Ge,jr as Ke,k as qe,kr as Y,kt as Je,li as Ye,m as Xe,mi as Ze,n as Qe,ni as $e,nn as X,o as et,oi as tt,p as nt,pi as rt,pt as it,qn as at,r as ot,ri as st,rn as ct,s as lt,si as ut,sr as dt,tn as ft,tr as pt,u as mt,ui as ht,ut as gt,v as _t,vi as Z,vt,w as yt,wn as bt,x as xt,xt as St,y as Ct,yi as wt,yt as Tt,z as Et,zn as Dt,zr as Ot}from"./ui-components-BTB1NkUW.js";import{$t as kt,Ar as At,At as jt,B as Mt,Ci as Nt,Di as Pt,Dr as Ft,Dt as It,E as Lt,Ei as Rt,Et as zt,Fr as Bt,Ft as Vt,Gt as Ht,H as Ut,Ir as Wt,Jt as Gt,Kt,Lr as qt,Lt as Jt,Mi as Yt,Mr as Xt,Mt as Zt,Ni as Qt,Nr as $t,Nt as en,Oi as tn,Or as nn,P as rn,Pi as an,Pr as on,Pt as sn,Qi as cn,Qt as ln,Ri as un,Rt as dn,Si as fn,Sr as pn,T as mn,Ti as hn,Tt as gn,Ui as _n,V as vn,Vt as yn,Wi as bn,Xi as xn,Xt as Sn,Yi as Cn,Yn as wn,Yr as Tn,Yt as En,Zi as Dn,Zt as On,_i as kn,_t as An,a as jn,bi as Mn,br as Nn,ci as Pn,cn as Fn,ct as In,d as Ln,f as Rn,fr as zn,ft as Bn,g as Vn,gi as Hn,gr as Un,h as Wn,hi as Gn,ht as Kn,ii as qn,it as Jn,jr as Yn,kr as Xn,kt as Zn,l as Qn,mt as $n,nn as er,o as tr,p as nr,pn as rr,pt as ir,q as ar,qi as or,qt as sr,ri as cr,ti as lr,tn as ur,ui as dr,ut as fr,v as pr,vn as mr,w as hr,wi as gr,wt as _r,xi as vr,xr as yr,yi as br,zi as xr,zt as Sr}from"./framework-DcWkeiND.js";import{g as Cr,h as wr,i as Tr,n as Er,o as Dr,p as Or,t as kr,w as Ar}from"./i18n-runtime-CTgAQF4N.js";import{t as jr}from"./vendor-icon-activity-CkniytwY.js";import{t as Mr}from"./vendor-icon-arrow-left-DmGEbpkA.js";import{t as Nr}from"./vendor-icon-arrow-right-left-BH_jvt4r.js";import{t as Pr}from"./vendor-icon-arrow-right-RqsZZ458.js";import{t as Fr}from"./vendor-icon-arrow-up-down-DdDqplfV.js";import{t as Ir}from"./vendor-icon-at-sign-B71HJHhC.js";import{t as Lr}from"./vendor-icon-badge-check-SLEl_RQq.js";import{t as Rr}from"./vendor-icon-bell-off-BnernHBj.js";import{t as zr}from"./vendor-icon-bell-6t8He8Wt.js";import{t as Br}from"./vendor-icon-bold-C_J_IVlW.js";import{t as Vr}from"./vendor-icon-calendar-BsoUBIef.js";import{t as Hr}from"./vendor-icon-check-vpu9Zukp.js";import{t as Ur}from"./vendor-icon-chevron-down-BEf_jTEE.js";import{t as Wr}from"./vendor-icon-chevron-left-KnDcuFH1.js";import{t as Gr}from"./vendor-icon-chevron-right-DbnKwHYQ.js";import{t as Kr}from"./vendor-icon-chevrons-left-gvlDgS8M.js";import{t as qr}from"./vendor-icon-chevrons-right-lic1nOWF.js";import{t as Jr}from"./vendor-icon-circle-alert-D1XTr_X9.js";import{t as Yr}from"./vendor-icon-circle-check-Bq3OcFQN.js";import{t as Xr}from"./vendor-icon-circle-plus-4gej-PPk.js";import{t as Zr}from"./vendor-icon-circle-x-Nkh1Yr7N.js";import{t as Qr}from"./vendor-icon-circle-5-gUQbxi.js";import{t as $r}from"./vendor-icon-clipboard-paste-DxLRapVV.js";import{t as ei}from"./vendor-icon-clock-CTLnah0r.js";import{t as ti}from"./vendor-icon-code-C7LFGCxG.js";import{t as ni}from"./vendor-icon-copy-B5M-KdZo.js";import{t as ri}from"./vendor-icon-download-C3csYSaD.js";import{t as ii}from"./vendor-icon-ellipsis-vertical-DwMP57JC.js";import{t as ai}from"./vendor-icon-external-link-SBKz5x6R.js";import{t as oi}from"./vendor-icon-eye-off-Dy3GIcvl.js";import{t as si}from"./vendor-icon-eye-C3HaEGOo.js";import{t as ci}from"./vendor-icon-face-slightly-smiling-plus-BYluVacK.js";import{t as li}from"./vendor-icon-file-archive-ruJEbEgu.js";import{t as ui}from"./vendor-icon-file-spreadsheet-LZ3f9xT3.js";import{t as di}from"./vendor-icon-file-text-7BKAVNof.js";import{t as fi}from"./vendor-icon-file-CTChzdTZ.js";import{t as pi}from"./vendor-icon-hash-Lkwzb5Ny.js";import{t as mi}from"./vendor-icon-image-D2YAsa8l.js";import{t as hi}from"./vendor-icon-inbox-ByVQ4l4S.js";import{t as gi}from"./vendor-icon-italic-Dt0-MsYM.js";import{t as _i}from"./vendor-icon-list-TLz-7vfa.js";import{t as vi}from"./vendor-icon-loader-circle-D3PsuVaD.js";import{t as yi}from"./vendor-icon-lock-B_psRnly.js";import{t as bi}from"./vendor-icon-mail-BfkRvgNr.js";import{t as xi}from"./vendor-icon-message-square-BObk9Jes.js";import{t as Si}from"./vendor-icon-panel-right-close-B1IgPiA5.js";import{t as Ci}from"./vendor-icon-panel-right-open-DRcsA0VE.js";import{t as wi}from"./vendor-icon-paperclip-zxZDBuvr.js";import{t as Ti}from"./vendor-icon-pencil-CMubUBjW.js";import{t as Ei}from"./vendor-icon-phone-H1S8HSi1.js";import{t as Di}from"./vendor-icon-pin-BWwVcO2t.js";import{t as Oi}from"./vendor-icon-plus-BlfcDDsa.js";import{t as ki}from"./vendor-icon-rows-2-CyEMxks5.js";import{t as Ai}from"./vendor-icon-rows-3-Bl0iGPg_.js";import{t as ji}from"./vendor-icon-rows-4-DVXDgm1n.js";import{t as Mi}from"./vendor-icon-save-CuavGNuU.js";import{t as Ni}from"./vendor-icon-search-B2Uqtp_W.js";import{t as Pi}from"./vendor-icon-send-BlZYLCTK.js";import{t as Fi}from"./vendor-icon-share-2-D3bdPyHy.js";import{t as Ii}from"./vendor-icon-square-check-big-B4UVzWzR.js";import{t as Li}from"./vendor-icon-square-pen-CrYOuw6J.js";import{t as Ri}from"./vendor-icon-star-DfusowFE.js";import{t as zi}from"./vendor-icon-sticky-note-Bp3ZFMbg.js";import{t as Bi}from"./vendor-icon-tag-iKhUiq-2.js";import{t as Vi}from"./vendor-icon-text-align-justify-BknwtpxF.js";import{t as Hi}from"./vendor-icon-trash-BLsWkwB9.js";import{t as Ui}from"./vendor-icon-triangle-alert-D5n0T3q_.js";import{t as Wi}from"./vendor-icon-type-DudTuHpS.js";import{t as Gi}from"./vendor-icon-undo-2-C9MbW2Vb.js";import{t as Ki}from"./vendor-icon-upload-BZ3rElxe.js";import{t as qi}from"./vendor-icon-user-IWwlLQut.js";import{t as Ji}from"./vendor-icon-x-CcLtgRNL.js";import{t as Yi}from"./vendor-icon-zap-3ulAPCbu.js";var Q=e(o(),1);g();function Xi(e){let t=e?.type||null,n=t===null?null:_t({type:t,format:e?.format??void 0});return{declaredType:t,rendererType:n,Renderer:nt(n??``)}}function Zi(e){return nt(e)}var Qi=`select`;function $i(e,t,n){return ta(e)||ta(t)||ea(e,n)}function ea(e,t){return t&&!(typeof e==`string`&&e.length>0)}function ta(e){return typeof e==`string`&&Ae(e)}function na(e,t,n){let r=e?.validations;if(!Array.isArray(r))return null;let i=r.find(e=>!!e&&typeof e==`object`&&e.type===`state_machine`&&e.field===t&&!!e.transitions);if(!i)return null;let a=n==null?``:String(n),o=i.transitions[a];return Array.isArray(o)?new Set([a,...o.map(e=>String(e))]):null}var ra=new Set([`formula`,`summary`,`rollup`,`autonumber`,`auto_number`,`file`,`image`,`avatar`,`video`,`audio`,`signature`]);function ia(e){return e?e.readonly===!0?!1:typeof e.type!=`string`||!ra.has(e.type)&&!se(e.type):!0}var aa={xs:0,sm:640,md:768,lg:1024,xl:1280,"2xl":1536},oa=[`xs`,`sm`,`md`,`lg`,`xl`,`2xl`];function sa(e){for(let t=oa.length-1;t>=0;t--){let n=oa[t];if(e>=aa[n])return n}return`xs`}function ca(){let[e,t]=(0,Q.useState)(()=>typeof window<`u`?window.innerWidth:1024);(0,Q.useEffect)(()=>{if(typeof window>`u`)return;let e,n=()=>{clearTimeout(e),e=setTimeout(()=>{t(window.innerWidth)},100)};return window.addEventListener(`resize`,n),()=>{clearTimeout(e),window.removeEventListener(`resize`,n)}},[]);let n=sa(e),r=oa.indexOf(n);return{breakpoint:n,width:e,isMobile:r<oa.indexOf(`md`),isTablet:r>=oa.indexOf(`md`)&&r<oa.indexOf(`lg`),isDesktop:r>=oa.indexOf(`lg`),isAbove:t=>e>=aa[t],isBelow:t=>e<aa[t]}}function la(e){let{onRefresh:t,threshold:n=80,enabled:r=!0}=e,i=(0,Q.useRef)(null),[a,o]=(0,Q.useState)(!1),[s,c]=(0,Q.useState)(0),l=(0,Q.useRef)(0),u=(0,Q.useCallback)(e=>{if(!r||a)return;let t=i.current;t&&t.scrollTop===0&&(l.current=e.touches[0].clientY)},[r,a]),d=(0,Q.useCallback)(e=>{if(!r||a||!l.current)return;let t=e.touches[0].clientY-l.current;t>0&&c(Math.min(t,n*1.5))},[r,a,n]),f=(0,Q.useCallback)(async()=>{if(!r||a)return;let e=s;if(c(0),l.current=0,e>=n){o(!0);try{await t()}finally{o(!1)}}},[r,a,s,n,t]),p=(0,Q.useRef)({handleTouchStart:u,handleTouchMove:d,handleTouchEnd:f});(0,Q.useEffect)(()=>{p.current={handleTouchStart:u,handleTouchMove:d,handleTouchEnd:f}});let m=(0,Q.useRef)(null);return(0,Q.useEffect)(()=>{let e=r?i.current:null,t=m.current;(t?t.el:null)!==e&&(t&&pa(t),m.current=e?fa(e,p):null)}),(0,Q.useEffect)(()=>()=>{let e=m.current;e&&pa(e),m.current=null},[]),{ref:i,isRefreshing:a,pullDistance:s}}var ua=`data-pull-to-refresh-host`;function da(e){let t=e.parentElement;return t!==null&&t.closest(`[${ua}]`)!==null}function fa(e,t){let n={el:e,start:n=>{da(e)||t.current.handleTouchStart(n)},move:e=>t.current.handleTouchMove(e),end:()=>{t.current.handleTouchEnd()}};return e.setAttribute(ua,``),e.addEventListener(`touchstart`,n.start,{passive:!0}),e.addEventListener(`touchmove`,n.move,{passive:!0}),e.addEventListener(`touchend`,n.end,{passive:!0}),n}function pa(e){e.el.removeAttribute(ua),e.el.removeEventListener(`touchstart`,e.start),e.el.removeEventListener(`touchmove`,e.move),e.el.removeEventListener(`touchend`,e.end)}var $=a(),ma=(0,Q.createContext)(null);ma.displayName=`MobileContext`;function ha({pwa:e,offline:t,children:n}){let r=ca(),i=(0,Q.useMemo)(()=>({...r,pwa:e,offline:t}),[r,e,t]);return(0,$.jsx)(ma.Provider,{value:i,children:n})}function ga(e){return{name:e.name,short_name:e.shortName,description:e.description,theme_color:e.themeColor??`#3b82f6`,background_color:e.backgroundColor??`#ffffff`,display:e.display??`standalone`,start_url:e.startUrl??`/`,scope:e.scope??`/`,orientation:e.orientation??`any`,icons:e.icons?.map(e=>({src:e.src,sizes:e.sizes,type:e.type??`image/png`,purpose:e.purpose??`any`}))??[]}}var _a=new Set([`textarea`,`markdown`,`html`,`grid`,`richtext`,`field:textarea`,`field:markdown`,`field:html`,`field:grid`,`field:richtext`]);function va(e){return _a.has(e)}function ya(e,t){let n;return n=e<=3?1:e<=8?2:e<=15?3:4,t!==void 0&&t<640?Math.min(n,1):n}function ba(e,t){return t<=1?e:e.map(e=>e.span===void 0&&e.type&&va(e.type)?{...e,span:t}:e)}function xa(e,t,n){if(t!==void 0)return{fields:ba(e,t),columns:t};let r=ya(e.length,n);return{fields:ba(e,r),columns:r}}var Sa=wr({"common.resizeDrawer":`Resize drawer`,"detail.back":`Back`,"detail.edit":`Edit`,"detail.editInline":`Edit`,"detail.save":`Save`,"detail.saveChanges":`Save changes`,"detail.saving":`Saving…`,"detail.editFieldsInline":`Edit fields`,"detail.editInlineHint":`Double-click to edit`,"detail.cancel":`Cancel`,"detail.cancelEdit":`Discard changes`,"detail.openInNewTab":`Open in new tab`,"detail.share":`Share`,"detail.duplicate":`Duplicate`,"detail.export":`Export`,"detail.viewHistory":`View history`,"detail.delete":`Delete`,"detail.moreActions":`More actions`,"detail.addReaction":`Add reaction`,"detail.emojiPicker":`Emoji picker`,"detail.reactionCount":`{{emoji}} {{count}} reactions`,"detail.reactionCountOne":`{{emoji}} {{count}} reaction`,"detail.addToFavorites":`Add to favorites`,"detail.removeFromFavorites":`Remove from favorites`,"detail.previousRecord":`Previous record`,"detail.nextRecord":`Next record`,"detail.recordOf":`{{current}} of {{total}}`,"detail.recordNotFound":`Record not found`,"detail.recordNotFoundDescription":`The record you are looking for does not exist or may have been deleted.`,"detail.goBack":`Go back`,"detail.details":`Details`,"detail.relatedRecords":`{{count}} records`,"detail.relatedRecordOne":`{{count}} record`,"detail.noRelatedRecords":`No related records found`,"detail.loading":`Loading…`,"detail.copyToClipboard":`Copy to clipboard`,"detail.copied":`Copied!`,"detail.deleteConfirmation":`Are you sure you want to delete this record?`,"detail.editRecord":`Edit record`,"detail.viewAll":`View All`,"detail.new":`New`,"detail.noValue":`No value`,"detail.activity":`Activity`,"detail.copyRecordId":`Copy record ID`,"detail.showEmptyFields":`Show {{count}} empty fields`,"detail.hideEmptyFields":`Hide empty fields`,"detail.editRow":`Edit`,"detail.deleteRow":`Delete`,"detail.deleteRowConfirmation":`Are you sure you want to delete this record?`,"detail.actions":`Actions`,"detail.previousPage":`Previous`,"detail.nextPage":`Next`,"detail.pageOf":`Page {{current}} of {{total}}`,"detail.sortBy":`Sort by`,"detail.filterPlaceholder":`Filter…`,"detail.highlightFields":`Key Fields`,"detail.highlightsLabel":`Record highlights`,"detail.comments":`Comments`,"detail.searchComments":`Search comments…`,"detail.addCommentPlaceholder":`Add a comment… (Ctrl+Enter to submit)`,"detail.noMatchingComments":`No matching comments`,"detail.noCommentsYet":`No comments yet`,"detail.pinned":`Pinned`,"detail.pin":`Pin`,"detail.unpin":`Unpin`,"detail.justNow":`just now`,"detail.minutesAgo":`{{count}}m ago`,"detail.hoursAgo":`{{count}}h ago`,"detail.daysAgo":`{{count}}d ago`,"detail.createdBy":`Created by`,"detail.updatedBy":`Updated by`,"detail.created":`Created`,"detail.updated":`Updated`,"detail.dropFilesToUpload":`Drop files here or click to upload`,"detail.attachmentCount":`{{count}} attachment`,"detail.attachmentCountPlural":`{{count}} attachments`,"detail.removeAttachment":`Remove attachment`,"detail.discussion":`Discussion`,"detail.showDiscussion":`Show Discussion ({{count}})`,"detail.hideDiscussion":`Hide discussion`,"detail.bold":`Bold (Ctrl+B)`,"detail.italic":`Italic (Ctrl+I)`,"detail.listFormat":`List`,"detail.inlineCode":`Inline code`,"detail.mentionSomeone":`Mention someone`,"detail.preview":`Preview`,"detail.submitComment":`Submit (Ctrl+Enter)`,"detail.sendComment":`Send`,"detail.writeComment":`Write a comment…`,"detail.subscribedTooltip":`Subscribed — click to unsubscribe`,"detail.unsubscribedTooltip":`Subscribe to notifications`,"detail.noRecords":`No records`,"detail.showEmptyRelated":`+ {{count}} empty`,"detail.showEmptyRelated_one":`+ {{count}} empty`,"detail.showEmptyRelated_other":`+ {{count}} empty`,"detail.allActivity":`All Activity`,"detail.commentsOnly":`Comments Only`,"detail.fieldChangesFilter":`Field Changes`,"detail.tasksOnly":`Tasks Only`,"detail.leaveCommentPlaceholder":`Leave a comment… (Ctrl+Enter to submit)`,"detail.noActivity":`No activity recorded`,"detail.allFilter":`All`,"detail.createsFilter":`Creates`,"detail.deletesFilter":`Deletes`,"detail.statusChangesFilter":`Status Changes`,"detail.activityEmptyValue":`(empty)`,"detail.activityFieldChanged":`Changed {{field}} from "{{old}}" to "{{new}}"`,"detail.activityCreated":`Created this record`,"detail.activityDeleted":`Deleted this record`,"detail.activityStatusChanged":`Changed status to "{{value}}"`,"detail.activityUpdated":`Updated record`,"detail.loadMore":`Load more`,"detail.edited":`(edited)`,"detail.via":`via {{source}}`,"detail.viewSource":`View source`,"detail.replyCount":`{{count}} reply`,"detail.replyCountPlural":`{{count}} replies`,"detail.replyPlaceholder":`Reply…`,"detail.filterActivity":`Filter activity`,"detail.openDiscussion":`Open discussion panel`,"detail.closeDiscussion":`Close discussion panel`,"detail.subscribeAriaLabel":`Subscribe to notifications`,"detail.unsubscribeAriaLabel":`Unsubscribe from notifications`,"detail.clearSearch":`Clear search`,"detail.concurrentUpdateTitle":`This record was modified by someone else`,"detail.concurrentUpdateDescription":`Another user saved a newer version of {{field}} while you were editing. To prevent silently overwriting their change, please choose how to resolve the conflict.`,"detail.concurrentUpdateYourEdit":`Your edit`,"detail.concurrentUpdateCurrentValue":`Current value`,"detail.concurrentUpdateUpdatedBy":`Updated by {{name}}`,"detail.concurrentUpdateUpdatedAt":`Updated at {{when}}`,"detail.concurrentUpdateReload":`Reload latest`,"detail.concurrentUpdateOverwrite":`Overwrite anyway`,"detail.concurrentUpdateCancel":`Cancel`,"detail.lockedByApproval":`Locked for approval`,"detail.lockedTooltip":`This record has a pending approval request; editing is locked`,"detail.approvalPendingEditable":`In approval · editable`,"detail.approvalPendingTooltip":`This record has a pending approval request; this step still allows editing`,"detail.approvalProgress":`Approvals — {{got}} of {{need}}`,"detail.approvalProgressGroups":`Sign-off — {{got}} of {{need}} groups`,"detail.approvalProgressLabel":`Approval progress`,"detail.cancelApproval":`Recall approval`,"detail.cancelApprovalInFlight":`Recalling…`,"detail.cancelApprovalTooltip":`Recall the pending approval request to unlock this record`,"detail.cancelApprovalTooltipUnlocked":`Recall the pending approval request`,"detail.cancelApprovalFailed":`Failed to recall approval`,"detail.cancelApprovalUnavailable":`Recalling approvals is not supported on this data source`,"detail.pathLabel":`Record path`,"detail.pathStageCompleted":`{{stage}}, completed`,"detail.pathStageCurrent":`{{stage}}, current stage`,"detail.pathStageUpcoming":`{{stage}}, upcoming`,"detail.pathStageLostCurrent":`{{stage}}, closed lost, current stage`,"detail.pathStageLostUpcoming":`{{stage}}, closed lost, not reached`,"detail.pathStageWonUpcoming":`{{stage}}, goal stage, not reached`,"view.malformedFilter":`This view’s filter is malformed, so no records are shown: the {{subject}} condition cannot be applied.`},`detail.back`);function Ca(e){if(typeof e==`string`){let t=e.trim();if(!t)return null;try{return JSON.parse(t)}catch{return t}}return e??null}function wa(e){let t=Ca(e);return t==null||t===``?0:Array.isArray(t)?t.length:typeof t==`object`?Object.keys(t).length:1}function Ta({value:e,field:t}){let{t:n}=Sa(),a=gn(),{appName:o}=r(),s=t?.name||``,c=a?.data?.name,l=o&&c?`/apps/${o}/metadata/permission/${encodeURIComponent(String(c))}`:null,u=wa(e),d=u===0,f=(()=>{if(d)return(0,$.jsx)(`span`,{className:`text-muted-foreground`,children:n(`perm.facet.none`,{defaultValue:`None`})});if(s===`system_permissions`){let t=U(e),r=t.slice(0,6),i=t.length-r.length;return(0,$.jsxs)(`span`,{className:`inline-flex flex-wrap items-center gap-1`,children:[r.map(e=>(0,$.jsx)($e,{variant:`outline`,children:e},e)),i>0&&(0,$.jsx)(`span`,{className:`text-muted-foreground text-xs`,children:n(`perm.facet.more`,{count:i,defaultValue:`+${i} more`})})]})}let t=(()=>{switch(s){case`object_permissions`:return n(`perm.facet.objects`,{count:u,defaultValue:`${u} object${u===1?``:`s`}`});case`field_permissions`:return n(`perm.facet.fields`,{count:u,defaultValue:`${u} field rule${u===1?``:`s`}`});case`row_level_security`:return n(`perm.facet.rls`,{count:u,defaultValue:`${u} RLS polic${u===1?`y`:`ies`}`});case`tab_permissions`:return n(`perm.facet.tabs`,{count:u,defaultValue:`${u} tab rule${u===1?``:`s`}`});case`admin_scope`:return n(`perm.facet.adminScope`,{defaultValue:`Delegated admin configured`});default:return String(u)}})();return(0,$.jsx)(`span`,{className:`text-foreground`,children:t})})();return(0,$.jsxs)(`span`,{className:`inline-flex flex-wrap items-center gap-x-2 gap-y-1 text-sm`,children:[f,l?(0,$.jsx)(i,{to:l,className:`text-primary hover:underline whitespace-nowrap`,children:n(`perm.facet.designInStudio`,{defaultValue:`Design in Studio →`})}):(0,$.jsx)(`span`,{className:`text-muted-foreground/60 whitespace-nowrap`,children:n(`perm.facet.designInStudioHint`,{defaultValue:`Design in Studio`})})]})}var Ea=new Set([`id`,`_id`,`__v`,`created`,`created_at`,`createdAt`,`created_by`,`modified`,`modified_by`,`updated_at`,`updatedAt`,`updated_by`,`deleted_at`,`is_deleted`,`deleted`,`instance_state`]),Da=new Set([`formula`,`summary`,`rollup`,`autonumber`,`auto_number`]);function Oa(e,t){return Da.has(e)||Da.has(t)}var ka=new Set([`image`,`avatar`,`signature`,`file`,`video`,`audio`]);function Aa(e,t){return ja(e)||ja(t)}function ja(e){return typeof e!=`string`||ka.has(e)?!1:se(e)}function Ma(e,t){return Na(e)||Na(t)}function Na(e){return typeof e==`string`&&Ae(e)}var Pa=`options.currency.currencyConfig.precision.scale.min.max.step.format.widget.dueLike.multiple.reference_field.displayField.descriptionField.idField.allow_create.allowCreate.lookup_columns.lookupColumns.lookup_page_size.lookupPageSize.lookupFilters.picker.subtitle.avatar_field.avatarField.depends_on.dependsOn`.split(`.`);function Fa(e,t){let n={...e};if(!t)return n;!n.type&&t.type&&(n.type=t.type);for(let e of Pa){let r=t[e];r!==void 0&&n[e]===void 0&&(n[e]=r)}let r=t.reference;return r&&n.reference_to===void 0&&(n.reference_to=r),n}var Ia=`inline-plain-text-input`,La=new Set([`text`,`textarea`,`email`,`phone`,`url`]);function Ra(e){return e?Qe.includes(e)||V(e)!==`field:text`:!1}function za(e){let t=e?.type;return!t||La.has(t)?!0:t===`select`&&!e.multiple}var Ba=({field:e,value:t,onChange:n,dataSource:r,autoFocus:i,error:a,dependentValues:o})=>{let s=e.type;if(e.widget===`permission-facet-link`)return(0,$.jsx)(Ta,{value:t,field:e});if(typeof s==`string`&&Mn[s])return(0,$.jsx)(Ue,{field:e});let c=s===`multiselect`||!!e.multiple;if((s===`select`||s===`multiselect`)&&Array.isArray(e.options)&&e.options.length>0)return c?(0,$.jsx)(we,{field:{...e,multiple:!0},value:Array.isArray(t)?t:t==null||t===``?[]:[t],onChange:e=>n(e),error:a,dependentValues:o}):(0,$.jsx)(we,{field:e,value:t==null?``:String(t),onChange:e=>n(e),error:a,dependentValues:o});if(s===`boolean`)return(0,$.jsx)(ne,{field:e,value:!!t,onChange:e=>n(e),error:a});if(s===`image`)return(0,$.jsx)(D,{field:e,value:t,onChange:e=>n(e),error:a});if(s===`avatar`)return(0,$.jsx)(xt,{field:e,value:t,onChange:e=>n(e),error:a});if(s===`signature`)return(0,$.jsx)(Me,{field:e,value:t,onChange:e=>n(e),error:a});if(s===`file`||s===`video`||s===`audio`)return(0,$.jsx)(yt,{field:e,value:t,onChange:e=>n(e),error:a});let l=s===`user`,u=s===`lookup`||s===`master_detail`||s===`tree`||!!e.reference_to&&!Da.has(s);if(l||u)return(0,$.jsx)(l?L:ie,{field:e,value:t,onChange:e=>n(e),dataSource:r,error:a,dependentValues:o});if(s===`number`)return(0,$.jsx)(N,{field:e,value:t,onChange:e=>n(e),autoFocus:i,error:a});if(s===`currency`)return(0,$.jsx)(G,{field:e,value:t,onChange:e=>n(e),autoFocus:i,error:a});if(s===`percent`)return(0,$.jsx)(W,{field:e,value:t,onChange:e=>n(e),autoFocus:i,error:a});if(s===`address`)return(0,$.jsx)(j,{field:e,value:t,onChange:e=>n(e),autoFocus:i,error:a});if(s===`location`)return(0,$.jsx)(fe,{field:e,value:t,onChange:e=>n(e),autoFocus:i,error:a});if(s===`geolocation`)return(0,$.jsx)(le,{field:e,value:t,onChange:e=>n(e),autoFocus:i,error:a});let d=s===`date`||s===`datetime`;if(!d&&!za(e)&&Ra(s)&&Ge(s))return(0,$.jsx)(S,{field:e,value:t,onChange:e=>n(e),autoFocus:i,error:a,dependentValues:o});if(d)return(0,$.jsx)(w,{field:e,value:t,onChange:e=>n(e&&new Date(e+`T00:00:00`).toISOString()),autoFocus:i,error:a});let f=t==null?``:String(typeof t==`object`?B(t)??``:t);return(0,$.jsx)(`input`,{type:`text`,"data-testid":Ia,autoFocus:i,"aria-invalid":a?!0:void 0,className:`w-full px-2 py-1.5 text-sm border rounded-md bg-background focus:outline-none focus:ring-2 focus:ring-ring`,value:f,onChange:e=>n(e.target.value)})},Va=Object.freeze({muted:`bg-muted`,"muted/50":`bg-muted/50`,accent:`bg-accent`,"primary/10":`bg-primary/10`,"secondary/10":`bg-secondary/10`,"destructive/10":`bg-destructive/10`}),Ha=Va;function Ua(e){if(!e)return;let t=e.trim();if(t)return t.startsWith(`bg-`)?t:Object.prototype.hasOwnProperty.call(Va,t)?Va[t]:void 0}function Wa(e){return tn(e)?!1:typeof e==`object`&&e?!0:Wt({value:e},`value`)!==void 0}var Ga=({name:e})=>/^[a-z0-9][a-z0-9-]*$/i.test(e)?(0,$.jsx)(I,{name:e,className:`h-4 w-4 shrink-0 text-muted-foreground`,"aria-hidden":!0}):(0,$.jsx)(`span`,{className:`text-muted-foreground`,children:e});function Ka(e,t){return!e||e<=1||t<=1?``:t===2?e>=2?`md:col-span-2`:``:t===3?e===2?`md:col-span-2`:e>=3?`md:col-span-2 lg:col-span-3`:``:e===2?`md:col-span-2`:e===3?`md:col-span-2 lg:col-span-3`:e>=4?`md:col-span-2 lg:col-span-3 xl:col-span-4`:``}var qa=({section:e,data:t,className:n,objectSchema:r,objectName:i,isEditing:a=!1,onFieldChange:o,onEnterInlineEdit:s,autoFocusField:c,dataSource:l,virtualScroll:u})=>{let[d,f]=Q.useState(e.defaultCollapsed??!1),[p,m]=Q.useState(null),[h,g]=Q.useState(void 0),[_,v]=Q.useState(!1),{t:y}=Sa(),{fieldLabel:b,translateOptions:x}=Or(),S=Ut()?.fieldErrors??null,C=Q.useCallback((e,t)=>{let n;if(t==null)n=``;else if(typeof t==`object`)try{n=JSON.stringify(t)}catch{n=String(t)}else n=String(t);navigator.clipboard.writeText(n).then(()=>{m(e),setTimeout(()=>m(null),2e3)})},[]),w=Q.useCallback(e=>!Wa(t?.[e.name]??e.value),[t]),T=Q.useMemo(()=>e.fields.filter(w).length,[e.fields,w]),D=de(),k=D?3:4,j=D?.2:.25,M=e.fields.length-T,N=!a&&e.fields.length>=k&&T/e.fields.length>=j&&M>0,te=e.fields.length>0&&M===0,P=e.hideEmpty===!0&&te&&!a,ne=!_&&(N||P)?e.fields.filter(e=>!w(e)):e.fields,{fields:I,columns:L}=xa(ne,e.columns),R=Math.min(L,Math.max(1,ne.length)),B=e=>{let n=t?.[e.name]??e.value;if(e.render)return(0,$.jsx)(Kn,{schema:ir(e.render),data:{...t,value:n}});let u=Ka(e.span,R),d=r?.fields?.[e.name],f=Fa(e,d);i&&Array.isArray(f.options)&&f.options.length>0&&(f.options=x(i,e.name,f.options));let m=Oa(e.type,d?.type),h=e.readonly===!0||d?.readonly===!0,g=Ea.has(e.name),_=Aa(e.type,d?.type),v=Ma(e.type,d?.type),w=!h&&!m&&!g&&!_,T=w&&!!s,E=(()=>{if((f.widget||e.widget)===`permission-facet-link`)return(0,$.jsx)(Ta,{value:n,field:f});if(!Wa(n))return(0,$.jsx)(Je,{className:`pointer-events-auto`,title:y(`detail.noValue`,{defaultValue:`No value`})});let t=_t(f)||e.type;if(t){let e=nt(t);if(e)return(0,$.jsx)(e,{value:n,field:f})}return String(n)})(),k=Wa(n)&&!v,j=k&&!T,M=p===e.name,ee=b(i||``,e.name,e.label||e.name);return D&&!(a&&w)?(0,$.jsxs)(`div`,{className:q(`flex items-baseline justify-between gap-4 py-2.5 min-h-[44px] group`,k&&`cursor-pointer active:bg-muted/40 transition-colors`),onClick:k?()=>C(e.name,n):void 0,onKeyDown:k?t=>{(t.key===`Enter`||t.key===` `)&&(t.preventDefault(),C(e.name,n))}:void 0,role:k?`button`:void 0,tabIndex:k?0:void 0,children:[(0,$.jsx)(`span`,{className:`text-[15px] text-muted-foreground shrink-0`,children:ee}),(0,$.jsx)(`span`,{className:`text-[15px] text-foreground text-right break-words min-w-0 leading-snug`,children:E})]},e.name):(0,$.jsxs)(`div`,{className:q(`space-y-1.5 group min-w-0`,u),children:[(0,$.jsx)(`div`,{className:`text-xs font-medium text-muted-foreground uppercase tracking-wide`,children:b(i||``,e.name,e.label||e.name)}),a&&w?(0,$.jsxs)(`div`,{className:`min-h-[44px] sm:min-h-0`,children:[(0,$.jsx)(Ba,{field:f,value:n,onChange:t=>o?.(e.name,t),dataSource:l,autoFocus:c===e.name,error:S?.[e.name],dependentValues:t}),S?.[e.name]&&(0,$.jsx)(`p`,{role:`alert`,"data-inline-field-hint":e.name,className:`mt-1 text-xs text-destructive`,children:S[e.name]})]}):(0,$.jsxs)(`div`,{className:q(`flex items-start justify-between gap-2 min-h-[44px] sm:min-h-0 rounded-md`,j&&`cursor-pointer active:bg-muted/60 transition-colors`,T&&`cursor-pointer hover:bg-muted/40 transition-colors -mx-1.5 px-1.5`),onClick:j?()=>C(e.name,n):void 0,onDoubleClick:T?()=>s?.(e.name):void 0,onKeyDown:j?t=>{(t.key===`Enter`||t.key===` `)&&(t.preventDefault(),C(e.name,n))}:void 0,role:j?`button`:void 0,tabIndex:j?0:void 0,title:T?y(`detail.editInlineHint`):void 0,children:[(0,$.jsx)(`div`,{className:`text-sm flex-1 min-w-0 break-words py-1`,children:E}),T?(0,$.jsx)(xe,{children:(0,$.jsxs)(O,{children:[(0,$.jsx)(A,{asChild:!0,children:(0,$.jsx)(Z,{variant:`ghost`,size:`icon`,className:`h-6 w-6 opacity-0 group-hover:opacity-100 transition-opacity shrink-0`,"aria-label":y(`detail.editInlineHint`),onClick:t=>{t.stopPropagation(),s?.(e.name)},children:(0,$.jsx)(Ti,{className:`h-3 w-3`})})}),(0,$.jsx)(bt,{children:y(`detail.editInlineHint`)})]})}):k?(0,$.jsx)(xe,{children:(0,$.jsxs)(O,{children:[(0,$.jsx)(A,{asChild:!0,children:(0,$.jsx)(Z,{variant:`ghost`,size:`icon`,className:`h-6 w-6 opacity-0 group-hover:opacity-100 transition-opacity shrink-0`,onClick:t=>{t.stopPropagation(),C(e.name,n)},children:M?(0,$.jsx)(Hr,{className:`h-3 w-3 text-green-600`}):(0,$.jsx)(ni,{className:`h-3 w-3`})})}),(0,$.jsx)(bt,{children:y(M?`detail.copied`:`detail.copyToClipboard`)})]})}):null]})]},e.name)},V=u?.enabled===!0,re=u?.batchSize??20;if(Q.useEffect(()=>{if(!V){g(void 0);return}if(I.length<=re){g(void 0);return}g(re);let e=setTimeout(()=>g(void 0),100);return()=>clearTimeout(e)},[V,I.length,re]),ne.length===0&&T===e.fields.length)return null;let H=h===void 0?I:I.slice(0,h),ie=T>0&&N,ae=(0,$.jsxs)($.Fragment,{children:[D?(0,$.jsx)(`div`,{className:`flex flex-col divide-y divide-border/60`,children:H.map(B)}):(0,$.jsx)(`div`,{className:q(`grid gap-3 sm:gap-4`,R===1?`grid-cols-1`:R===2?`grid-cols-1 md:grid-cols-2`:R===3?`grid-cols-1 md:grid-cols-2 lg:grid-cols-3`:`grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4`),children:H.map(B)}),ie&&(0,$.jsx)(`div`,{className:`mt-3 -ml-2`,children:(0,$.jsxs)(Z,{type:`button`,variant:`ghost`,size:`sm`,onClick:()=>v(e=>!e),className:`h-7 px-2 text-xs text-muted-foreground hover:text-foreground`,children:[_?(0,$.jsx)(oi,{className:`h-3.5 w-3.5 mr-1.5`}):(0,$.jsx)(si,{className:`h-3.5 w-3.5 mr-1.5`}),_?y(`detail.hideEmptyFields`,{defaultValue:`Hide empty fields`}):y(`detail.showEmptyFields`,{count:T,defaultValue:`Show {{count}} empty fields`})]})})]});return!e.title&&!e.collapsible&&e.showBorder===!1?(0,$.jsx)(`div`,{className:q(n),children:ae}):e.collapsible?(0,$.jsx)(ee,{open:!d,onOpenChange:e=>f(!e),className:n,children:(0,$.jsxs)(Ot,{className:q(e.showBorder===!1?`border-none shadow-none`:``),children:[(0,$.jsx)(oe,{asChild:!0,children:(0,$.jsxs)(F,{className:q(`py-3 px-4 sm:py-4 sm:px-6 cursor-pointer hover:bg-muted/50 transition-colors`,Ua(e.headerColor)),children:[(0,$.jsxs)(Ce,{className:`flex items-center justify-between text-base font-semibold tracking-tight`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2`,children:[e.icon&&(0,$.jsx)(Ga,{name:e.icon}),(0,$.jsx)(`span`,{children:e.title})]}),(0,$.jsx)(`div`,{className:`flex items-center gap-2`,children:d?(0,$.jsx)(Gr,{className:`h-4 w-4 text-muted-foreground`}):(0,$.jsx)(Ur,{className:`h-4 w-4 text-muted-foreground`})})]}),e.description&&!d&&(0,$.jsx)(`p`,{className:`text-xs text-muted-foreground mt-1`,children:e.description})]})}),(0,$.jsx)(z,{children:(0,$.jsx)(E,{className:`pt-3 sm:pt-4 px-3 sm:px-6 pb-4 sm:pb-5`,children:ae})})]})}):(0,$.jsxs)(Ot,{className:q(e.showBorder===!1?`border-none shadow-none`:``,n),children:[e.title&&(0,$.jsxs)(F,{className:q(`py-3 px-4 sm:py-4 sm:px-6`,Ua(e.headerColor)),children:[(0,$.jsx)(Ce,{className:`flex items-center justify-between text-base font-semibold tracking-tight`,children:(0,$.jsxs)(`div`,{className:`flex items-center gap-2`,children:[e.icon&&(0,$.jsx)(Ga,{name:e.icon}),(0,$.jsx)(`span`,{children:e.title})]})}),e.description&&(0,$.jsx)(`p`,{className:`text-xs text-muted-foreground mt-1`,children:e.description})]}),(0,$.jsx)(E,{className:`pt-3 sm:pt-4 px-3 sm:px-6 pb-4 sm:pb-5`,children:ae})]})},Ja=({tabs:e,data:t,className:n})=>{let[r,i]=Q.useState(e[0]?.key),a=e.filter(e=>typeof e.visible==`boolean`?e.visible:(e.visible,!0));return(0,$.jsxs)(Ee,{value:r,onValueChange:i,className:n,children:[(0,$.jsx)(ge,{className:`w-full justify-start border-b rounded-none bg-transparent p-0`,children:a.map(e=>(0,$.jsx)(x,{value:e.key,className:`relative rounded-none border-b-2 border-transparent data-[state=active]:border-primary data-[state=active]:bg-transparent`,children:(0,$.jsxs)(`div`,{className:`flex items-center gap-2`,children:[e.icon&&(0,$.jsx)(`span`,{children:e.icon}),(0,$.jsx)(`span`,{children:e.label}),e.badge&&(0,$.jsx)($e,{variant:`secondary`,className:`ml-1`,children:e.badge})]})},e.key))}),a.map(e=>(0,$.jsx)(ke,{value:e.key,className:`mt-4 motion-safe:data-[state=active]:animate-in motion-safe:data-[state=active]:fade-in-0 motion-safe:duration-150`,children:(0,$.jsx)(Q.Suspense,{fallback:null,children:Array.isArray(e.content)?(0,$.jsx)(`div`,{className:`space-y-4`,children:e.content.map((e,n)=>(0,$.jsx)(Kn,{schema:ir(e),data:t},n))}):(0,$.jsx)(Kn,{schema:ir(e.content),data:t})})},e.key))]})},Ya=({group:e,data:t,className:n,objectSchema:r,objectName:i,isEditing:a=!1,onFieldChange:o,onEnterInlineEdit:s,autoFocusField:c,dataSource:l})=>{let u=e.collapsible??!0,[d,f]=Q.useState(e.defaultCollapsed??!1),p=(0,$.jsx)(`div`,{className:`space-y-3 sm:space-y-4`,children:e.sections.map((e,n)=>(0,$.jsx)(qa,{section:e,data:t,objectSchema:r,objectName:i,isEditing:a,onFieldChange:o,onEnterInlineEdit:s,autoFocusField:c,dataSource:l},n))});return u?(0,$.jsxs)(ee,{open:!d,onOpenChange:e=>f(!e),className:n,children:[(0,$.jsx)(oe,{asChild:!0,children:(0,$.jsxs)(`div`,{className:`flex items-center gap-2 pb-2 border-b cursor-pointer hover:bg-muted/50 transition-colors rounded-t-md px-2 py-1.5`,children:[d?(0,$.jsx)(Gr,{className:`h-4 w-4 text-muted-foreground shrink-0`}):(0,$.jsx)(Ur,{className:`h-4 w-4 text-muted-foreground shrink-0`}),e.icon&&(0,$.jsx)(`span`,{className:`text-muted-foreground`,children:e.icon}),(0,$.jsx)(`h3`,{className:`text-lg font-semibold`,children:e.title})]})}),e.description&&!d&&(0,$.jsx)(`p`,{className:`text-sm text-muted-foreground mt-1`,children:e.description}),(0,$.jsx)(z,{children:(0,$.jsx)(`div`,{className:`mt-3`,children:p})})]}):(0,$.jsxs)(`div`,{className:q(`space-y-3`,n),children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2 pb-2 border-b`,children:[e.icon&&(0,$.jsx)(`span`,{className:`text-muted-foreground`,children:e.icon}),(0,$.jsx)(`h3`,{className:`text-lg font-semibold`,children:e.title})]}),e.description&&(0,$.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:e.description}),p]})},Xa=({fields:e,data:t,className:n,objectName:r,objectSchema:i,dataSource:a})=>{let{fieldLabel:o}=Or(),{t:s}=Sa(),c=Ut(),l=c?.editing??!1,u=c?.canEdit??!1,d=c?.draft,f=Q.useMemo(()=>t&&d?{...t,...d}:t,[t,d]);if(!e.length||!t)return null;let p=l?e:e.filter(e=>{let n=t?.[e.name];return n!=null&&n!==``});return p.length===0?null:(0,$.jsx)(xe,{children:(0,$.jsx)(`section`,{className:q(`@container border-b border-border/60 pb-4`,n),"aria-label":s(`detail.highlightsLabel`),children:(0,$.jsx)(`div`,{className:q(`flex flex-wrap gap-y-4`),children:p.map(e=>{let n=t[e.name],d=i?.fields?.[e.name],p=e.type||d?.type,m=Fa({name:e.name,label:e.label,type:p||`text`},d),h=f?f[e.name]:n,g=Oa(e.type,d?.type),_=e.readonly===!0||d?.readonly===!0,v=Ea.has(e.name),y=Aa(e.type,d?.type),b=u&&!g&&!_&&!v&&!y,x=l&&b,S=nt(_t(m)||p||`text`),C=p===`number`||p===`integer`||p===`currency`||p===`percent`||p===`decimal`,w=p===`email`||p===`url`||p===`textarea`||!!p&&Nt.has(p),T=p===`boolean`,E=!Wa(h);return(0,$.jsxs)(`div`,{className:q(`group flex flex-col gap-1 min-w-[7rem] px-5 border-l border-border/60 first:border-l-0 first:pl-0`,w||x?`basis-[16rem] max-w-[24rem]`:`basis-[9rem] max-w-[16rem]`),children:[(0,$.jsx)(`span`,{className:`text-xs font-medium text-muted-foreground`,children:o(r||``,e.name,e.label)}),x?(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(Ba,{field:m,value:h,onChange:t=>c.setField(e.name,t),dataSource:a,autoFocus:c.autoFocusField===e.name,error:c.fieldErrors?.[e.name],dependentValues:f}),c.fieldErrors?.[e.name]&&(0,$.jsx)(`p`,{role:`alert`,"data-inline-field-hint":e.name,className:`mt-1 text-xs text-destructive`,children:c.fieldErrors[e.name]})]}):(0,$.jsxs)(`div`,{className:q(`flex items-start justify-between gap-1`,b&&`cursor-pointer rounded-md -mx-1.5 px-1.5 hover:bg-muted/40 transition-colors`),onDoubleClick:b?()=>c.enter(e.name):void 0,title:b?s(`detail.editInlineHint`):void 0,children:[(0,$.jsx)(`div`,{className:`min-w-0 flex-1`,children:T?h?(0,$.jsxs)(`span`,{className:`inline-flex items-center gap-1 self-start rounded-full bg-emerald-500/10 px-2 py-0.5 text-xs font-medium text-emerald-600 ring-1 ring-inset ring-emerald-500/30 dark:text-emerald-400`,children:[(0,$.jsx)(Hr,{className:`h-3 w-3`,"aria-hidden":!0}),`Yes`]}):(0,$.jsxs)(`span`,{className:`inline-flex items-center gap-1 self-start rounded-full bg-amber-500/10 px-2 py-0.5 text-xs font-medium text-amber-700 ring-1 ring-inset ring-amber-500/30 dark:text-amber-400`,children:[(0,$.jsx)(Ji,{className:`h-3 w-3`,"aria-hidden":!0}),`No`]}):E?(0,$.jsx)(Je,{className:`block`}):(0,$.jsx)(`span`,{title:(Array.isArray(m.options)?m.options.find(e=>e?.value===h)?.label:void 0)??(typeof h==`string`||typeof h==`number`?String(h):void 0),className:q(`block min-w-0 truncate text-sm font-semibold`,C&&`tabular-nums tracking-tight`),children:(0,$.jsx)(S,{value:h,field:m})})}),b&&(0,$.jsxs)(O,{children:[(0,$.jsx)(A,{asChild:!0,children:(0,$.jsx)(Z,{variant:`ghost`,size:`icon`,className:`h-5 w-5 shrink-0 opacity-0 group-hover:opacity-100 transition-opacity`,"aria-label":s(`detail.editInlineHint`),onClick:t=>{t.stopPropagation(),c.enter(e.name)},children:(0,$.jsx)(Ti,{className:`h-3 w-3`})})}),(0,$.jsx)(bt,{children:s(`detail.editInlineHint`)})]})]})]},e.name)})})})})};function Za(e,t,n){try{let r=new Date(e),i=new Date().getTime()-r.getTime(),a=Math.floor(i/6e4);if(a<1)return t(`detail.justNow`);if(a<60)return t(`detail.minutesAgo`,{count:a});let o=Math.floor(a/60);if(o<24)return t(`detail.hoursAgo`,{count:o});let s=Math.floor(o/24);return s<7?t(`detail.daysAgo`,{count:s}):r.toLocaleDateString(n)}catch{return e}}var Qa=({comments:e,onAddComment:t,onTogglePin:n,searchable:r=!1,className:i})=>{let{t:a}=Sa(),o=kr(),[s,c]=Q.useState(``),[l,u]=Q.useState(!1),[d,f]=Q.useState(``),p=Q.useCallback(async()=>{let e=s.trim();if(e&&t){u(!0);try{await t(e),c(``)}finally{u(!1)}}},[s,t]),m=Q.useCallback(e=>{e.key===`Enter`&&(e.ctrlKey||e.metaKey)&&(e.preventDefault(),p())},[p]),h=Q.useMemo(()=>[...d.trim()?e.filter(e=>{let t=d.trim().toLowerCase();return e.text.toLowerCase().includes(t)||e.author.toLowerCase().includes(t)}):e].sort((e,t)=>e.pinned&&!t.pinned?-1:!e.pinned&&t.pinned?1:0),[e,d]);return(0,$.jsxs)(Ot,{className:q(``,i),children:[(0,$.jsx)(F,{children:(0,$.jsxs)(Ce,{className:`flex items-center gap-2 text-base`,children:[(0,$.jsx)(xi,{className:`h-4 w-4`}),a(`detail.comments`),(0,$.jsxs)(`span`,{className:`text-sm font-normal text-muted-foreground`,children:[`(`,e.length,`)`]})]})}),(0,$.jsxs)(E,{className:`space-y-4`,children:[r&&(0,$.jsx)(`div`,{className:`flex items-center gap-2`,children:(0,$.jsxs)(`div`,{className:`relative flex-1`,children:[(0,$.jsx)(Ni,{className:`absolute left-2.5 top-1/2 -translate-y-1/2 h-3.5 w-3.5 text-muted-foreground`}),(0,$.jsx)(`input`,{className:`w-full rounded-md border border-input bg-background pl-8 pr-8 py-1.5 text-sm placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring`,placeholder:a(`detail.searchComments`),value:d,onChange:e=>f(e.target.value),"aria-label":a(`detail.searchComments`)}),d&&(0,$.jsx)(`button`,{className:`absolute right-2 top-1/2 -translate-y-1/2 text-muted-foreground hover:text-foreground`,onClick:()=>f(``),"aria-label":a(`detail.clearSearch`),type:`button`,children:(0,$.jsx)(Ji,{className:`h-3.5 w-3.5`})})]})}),t&&(0,$.jsxs)(`div`,{className:`flex gap-2`,children:[(0,$.jsx)(`textarea`,{className:`flex-1 min-h-[60px] rounded-md border border-input bg-background px-3 py-2 text-sm placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring resize-none`,placeholder:a(`detail.addCommentPlaceholder`),value:s,onChange:e=>c(e.target.value),onKeyDown:m,disabled:l}),(0,$.jsx)(Z,{size:`icon`,variant:`default`,onClick:p,disabled:!s.trim()||l,className:`shrink-0 self-end`,children:(0,$.jsx)(Pi,{className:`h-4 w-4`})})]}),h.length===0?(0,$.jsx)(`p`,{className:`text-sm text-muted-foreground text-center py-4`,children:d.trim()?a(`detail.noMatchingComments`):a(`detail.noCommentsYet`)}):(0,$.jsx)(`div`,{className:`space-y-3`,children:h.map(e=>(0,$.jsxs)(`div`,{className:q(`flex gap-3`,e.pinned&&`bg-muted/40 rounded-md p-2 -mx-2`),children:[(0,$.jsx)(`div`,{className:`shrink-0`,children:e.avatarUrl?(0,$.jsx)(`img`,{src:e.avatarUrl,alt:e.author,className:`h-8 w-8 rounded-full object-cover`}):(0,$.jsx)(`div`,{className:`h-8 w-8 rounded-full bg-muted flex items-center justify-center text-xs font-medium text-muted-foreground`,children:e.author.charAt(0).toUpperCase()})}),(0,$.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2 mb-0.5`,children:[(0,$.jsx)(`span`,{className:`text-sm font-medium truncate`,children:e.author}),(0,$.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:Za(e.createdAt,a,o)}),e.pinned&&(0,$.jsxs)(`span`,{className:`text-xs text-amber-600 flex items-center gap-0.5`,children:[(0,$.jsx)(Di,{className:`h-3 w-3`}),a(`detail.pinned`)]})]}),(0,$.jsx)(`p`,{className:`text-sm whitespace-pre-wrap break-words`,children:e.text}),n&&(0,$.jsxs)(`button`,{type:`button`,className:`mt-1 text-xs text-muted-foreground hover:text-foreground flex items-center gap-1`,onClick:()=>n(e.id),"aria-label":e.pinned?a(`detail.unpin`):a(`detail.pin`),children:[(0,$.jsx)(Di,{className:`h-3 w-3`}),e.pinned?a(`detail.unpin`):a(`detail.pin`)]})]})]},e.id))})]})]})},$a={field_change:Li,create:Xr,delete:Hi,comment:xi,status_change:Nr},eo={field_change:`bg-blue-100 text-blue-600`,create:`bg-green-100 text-green-600`,delete:`bg-red-100 text-red-600`,comment:`bg-purple-100 text-purple-600`,status_change:`bg-amber-100 text-amber-600`};function to(e,t,n){try{let r=new Date(e),i=new Date().getTime()-r.getTime(),a=Math.floor(i/6e4);if(a<1)return t(`detail.justNow`);if(a<60)return t(`detail.minutesAgo`,{count:a});let o=Math.floor(a/60);if(o<24)return t(`detail.hoursAgo`,{count:o});let s=Math.floor(o/24);return s<7?t(`detail.daysAgo`,{count:s}):r.toLocaleDateString(n)}catch{return e}}function no(e,t){if(e.description)return e.description;let n=t(`detail.activityEmptyValue`);return e.type===`field_change`&&e.field?t(`detail.activityFieldChanged`,{field:e.field.charAt(0).toUpperCase()+e.field.slice(1).replace(/_/g,` `),old:e.oldValue==null?n:String(e.oldValue),new:e.newValue==null?n:String(e.newValue)}):e.type===`create`?t(`detail.activityCreated`):e.type===`delete`?t(`detail.activityDeleted`):e.type===`status_change`&&e.field?t(`detail.activityStatusChanged`,{value:e.newValue==null?n:String(e.newValue)}):t(`detail.activityUpdated`)}var ro=[`all`,`field_change`,`create`,`delete`,`comment`,`status_change`];function io(e,t){switch(e){case`field_change`:return t(`detail.fieldChangesFilter`);case`create`:return t(`detail.createsFilter`);case`delete`:return t(`detail.deletesFilter`);case`comment`:return t(`detail.comments`);case`status_change`:return t(`detail.statusChangesFilter`);default:return t(`detail.allFilter`)}}var ao=({activities:e,filterable:t=!1,defaultFilter:n=`all`,className:r})=>{let{t:i}=Sa(),a=kr(),[o,s]=Q.useState(n),c=Q.useMemo(()=>o===`all`?e:e.filter(e=>e.type===o),[e,o]);return(0,$.jsxs)(Ot,{className:q(``,r),children:[(0,$.jsx)(F,{children:(0,$.jsxs)(Ce,{className:`flex items-center gap-2 text-base`,children:[(0,$.jsx)(jr,{className:`h-4 w-4`}),i(`detail.activity`),(0,$.jsxs)(`span`,{className:`text-sm font-normal text-muted-foreground`,children:[`(`,c.length,`)`]})]})}),(0,$.jsxs)(E,{children:[t&&(0,$.jsx)(`div`,{className:`flex flex-wrap gap-1.5 mb-4`,role:`group`,"aria-label":i(`detail.filterActivity`),children:ro.map(e=>(0,$.jsxs)(`button`,{type:`button`,className:q(`inline-flex items-center gap-1 rounded-full px-2.5 py-0.5 text-xs font-medium transition-colors`,o===e?`bg-primary text-primary-foreground`:`bg-muted text-muted-foreground hover:bg-muted/80`),onClick:()=>s(e),"aria-pressed":o===e,children:[e!==`all`&&Q.createElement($a[e]||Li,{className:`h-3 w-3`}),io(e,i)]},e))}),c.length===0?(0,$.jsx)(Le,{title:i(`detail.noActivity`),className:`py-6`}):(0,$.jsxs)(`div`,{className:`relative`,children:[(0,$.jsx)(`div`,{className:`absolute left-4 top-2 bottom-2 w-px bg-border`}),(0,$.jsx)(`div`,{className:`space-y-4`,children:c.map(e=>{let t=$a[e.type]||Li,n=eo[e.type]||`bg-gray-100 text-gray-600`;return(0,$.jsxs)(`div`,{className:`flex gap-3 relative`,children:[(0,$.jsx)(`div`,{className:q(`shrink-0 h-8 w-8 rounded-full flex items-center justify-center z-10`,n),children:(0,$.jsx)(t,{className:`h-3.5 w-3.5`})}),(0,$.jsxs)(`div`,{className:`flex-1 min-w-0 pt-1`,children:[(0,$.jsxs)(`p`,{className:`text-sm`,children:[(0,$.jsx)(`span`,{className:`font-medium`,children:e.user}),` `,(0,$.jsx)(`span`,{className:`text-muted-foreground`,children:no(e,i)})]}),(0,$.jsx)(`p`,{className:`text-xs text-muted-foreground mt-0.5`,children:to(e.timestamp,i,a)})]})]},e.id)})})]})]})]})},oo={create:`default`,update:`secondary`,delete:`destructive`,login:`outline`,logout:`outline`,config_change:`secondary`,import:`outline`};function so(e,t){if(!e)return``;let n=e instanceof Date?e:new Date(e);return Number.isNaN(n.getTime())?String(e):n.toLocaleString(t)}var co=[[60,`second`],[60,`minute`],[24,`hour`],[7,`day`],[4.34524,`week`],[12,`month`],[1/0,`year`]];function lo(e,t){if(!e)return``;let n=e instanceof Date?e:new Date(e);if(Number.isNaN(n.getTime()))return String(e);let r=(n.getTime()-Date.now())/1e3;for(let[n,i]of co){if(Math.abs(r)<n)try{return new Intl.RelativeTimeFormat(t,{numeric:`auto`}).format(Math.round(r),i)}catch{return so(e,t)}r/=n}return so(e,t)}function uo(e){if(!e)return`?`;let t=e.trim().split(/\s+/).filter(Boolean).slice(0,2);return t.length===0?`?`:t.map(e=>e.charAt(0).toUpperCase()).join(``)}function fo(e){if(!Wa(e))return`—`;if(typeof e==`string`)return e;if(typeof e==`number`||typeof e==`boolean`)return String(e);try{return JSON.stringify(e)}catch{return String(e)}}function po({entries:e,loading:t,emptyText:n,unknownUserText:r,className:i,locale:a}){let o=kr(),s=a??o;return t?(0,$.jsx)(`div`,{className:q(`space-y-3`,i),children:Array.from({length:4}).map((e,t)=>(0,$.jsxs)(`div`,{className:`flex items-start gap-3`,children:[(0,$.jsx)(k,{className:`h-8 w-8 rounded-full`}),(0,$.jsxs)(`div`,{className:`flex-1 space-y-2`,children:[(0,$.jsx)(k,{className:`h-4 w-1/3`}),(0,$.jsx)(k,{className:`h-3 w-1/2`})]})]},t))}):!e||e.length===0?(0,$.jsx)(`div`,{className:q(`flex items-center justify-center rounded-md border border-dashed py-10 text-sm text-muted-foreground`,i),children:n??`No history yet`}):(0,$.jsx)(xe,{delayDuration:150,children:(0,$.jsx)(`ol`,{className:q(`space-y-4`,i),children:e.map((e,t)=>{let n=(e.action??``).toLowerCase(),i=oo[n]??`outline`,a=typeof e.user_name==`string`&&e.user_name.trim()||r||`Unknown user`,o=so(e.created_at,s),c=lo(e.created_at,s),l=typeof e.user_avatar==`string`?e.user_avatar:void 0;return(0,$.jsxs)(`li`,{className:`flex items-start gap-3`,children:[(0,$.jsxs)(st,{className:`h-8 w-8 mt-0.5 shrink-0`,children:[l?(0,$.jsx)(K,{src:l,alt:a}):null,(0,$.jsx)(We,{className:`text-[10px] font-medium`,children:uo(e.user_name)})]}),(0,$.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,$.jsxs)(`div`,{className:`flex flex-wrap items-baseline gap-x-2 gap-y-1`,children:[(0,$.jsx)(`span`,{className:`text-sm font-medium text-foreground`,children:a}),e.action&&(0,$.jsx)($e,{variant:i,className:`text-[10px] uppercase tracking-wide`,children:e.action}),o&&(0,$.jsxs)(O,{children:[(0,$.jsx)(A,{asChild:!0,children:(0,$.jsx)(`span`,{className:`text-xs text-muted-foreground cursor-help`,"aria-label":o,children:c||o})}),(0,$.jsx)(bt,{children:o})]})]}),e.summary&&(0,$.jsx)(`p`,{className:`mt-1 text-sm text-muted-foreground`,children:e.summary}),e.changes&&e.changes.length>0&&(n===`create`?(0,$.jsxs)(`details`,{className:`mt-1 group`,children:[(0,$.jsxs)(`summary`,{className:`cursor-pointer list-none text-xs text-muted-foreground hover:text-foreground inline-flex items-center gap-1 select-none`,children:[(0,$.jsx)(`span`,{className:`transition-transform group-open:rotate-90`,children:`▸`}),(0,$.jsx)(`span`,{children:e.changes.length===1?`1 field populated`:`${e.changes.length} fields populated`})]}),(0,$.jsx)(`ul`,{className:`mt-1.5 space-y-0.5 text-xs text-muted-foreground pl-4`,children:e.changes.map(e=>(0,$.jsxs)(`li`,{className:`leading-relaxed`,children:[(0,$.jsx)(`span`,{className:`font-medium text-foreground`,children:e.label||e.field}),`: `,(0,$.jsx)(`span`,{className:`text-foreground`,children:fo(e.to)})]},e.field))})]}):(0,$.jsx)(`ul`,{className:`mt-1.5 space-y-0.5 text-xs text-muted-foreground`,children:e.changes.map(e=>(0,$.jsxs)(`li`,{className:`leading-relaxed`,children:[(0,$.jsx)(`span`,{className:`font-medium text-foreground`,children:e.label||e.field}),`: `,(0,$.jsx)(`span`,{className:`line-through opacity-70`,children:fo(e.from)}),` → `,(0,$.jsx)(`span`,{className:`text-foreground`,children:fo(e.to)})]},e.field))}))]})]},e.id??t)})})})}var mo=lr;function ho(e){if(!e)return null;if(e instanceof Date)return isNaN(e.getTime())?null:e;if(typeof e==`string`||typeof e==`number`){let t=new Date(e);return isNaN(t.getTime())?null:t}return null}function go(e){return Wa(e)?e:void 0}function _o(e,t){let n=Date.now()-e.getTime(),r=Math.max(0,Math.floor(n/1e3));if(r<60)return t(`detail.justNow`);let i=Math.floor(r/60);if(i<60)return t(`detail.minutesAgo`,{count:i});let a=Math.floor(i/60);return a<24?t(`detail.hoursAgo`,{count:a}):t(`detail.daysAgo`,{count:Math.floor(a/24)})}function vo(e,t){try{return new Intl.DateTimeFormat(t,{dateStyle:`medium`,timeStyle:`short`}).format(e)}catch{return e.toISOString()}}var yo=({value:e,objectSchema:t,fieldName:n})=>{if(!Wa(e))return null;let r=t?.fields?.[n],i=r?.reference||`sys_user`,a={name:n,type:r?.type||`lookup`,reference_to:i,...r?.reference_field&&{reference_field:r.reference_field}},o=_t(a)||a.type;if(o){let t=nt(o);if(t)return(0,$.jsx)(`span`,{className:`inline-flex items-center [&_a]:text-inherit [&_a]:hover:underline`,children:Q.createElement(t,{value:e,field:a})})}return(0,$.jsx)(`span`,{children:String(e)})},bo=({label:e,user:t,date:n,objectSchema:r,userField:i,t:a,locale:o})=>{if(!t&&!n)return null;let s=n?(0,$.jsx)(xe,{delayDuration:200,children:(0,$.jsxs)(O,{children:[(0,$.jsx)(A,{asChild:!0,children:(0,$.jsx)(`time`,{dateTime:n.toISOString(),className:`cursor-default underline decoration-dotted decoration-muted-foreground/40 underline-offset-2`,children:_o(n,a)})}),(0,$.jsx)(bt,{side:`top`,children:vo(n,o)})]})}):null;return(0,$.jsxs)(`span`,{className:`inline-flex items-center gap-1.5`,children:[(0,$.jsx)(`span`,{className:`text-muted-foreground/70`,children:e}),t?(0,$.jsx)(yo,{value:t,objectSchema:r,fieldName:i}):null,t&&s?(0,$.jsx)(`span`,{className:`text-muted-foreground/40`,children:`·`}):null,s]})},xo=({data:e,objectSchema:t,objectName:n,className:r})=>{let{t:i}=Sa(),a=kr();if(!e)return null;let o=ho(e[mo.createdAt]),s=ho(e[mo.updatedAt]),c=go(e[mo.createdBy]),l=go(e[mo.updatedBy]),u=!!(o||c),d=o&&s&&Math.abs(s.getTime()-o.getTime())<2e3,f=!!(s||l)&&!(d&&(c!=null&&l!=null&&String(c)===String(l)||!l));return!u&&!f?null:(0,$.jsxs)(`div`,{className:q(`mt-6 pt-3 border-t border-border/40`,`flex flex-wrap items-center gap-x-4 gap-y-1`,`text-xs text-muted-foreground`,r),"data-testid":`record-meta-footer`,children:[u&&(0,$.jsx)(bo,{label:i(c?`detail.createdBy`:`detail.created`),user:c,date:o,objectSchema:t,userField:mo.createdBy,t:i,locale:a}),f&&(0,$.jsx)(bo,{label:i(l?`detail.updatedBy`:`detail.updated`),user:l,date:s,objectSchema:t,userField:mo.updatedBy,t:i,locale:a})]})},So=new Map,Co=new Set;function wo(e){for(let t of Array.from(So.keys())){let[,n,r]=JSON.parse(t);nr(e,n,r)&&So.delete(t)}for(let t of Co)for(let n of t.recordIds)nr(e,t.object,n)&&t.staled.add(n)}Wn(wo);var To;function Eo(e){To!==void 0&&To!==e&&So.clear(),To=e}function Do(e,t,n=`update`,r=!0){let i=y().userId,a=e&&t?JSON.stringify([i,e,t,n]):``,o=Vn(e,t),[s,c]=Q.useState(()=>a&&So.has(a)?So.get(a):!0),l=Q.useContext(It)?.apiFetch;return Q.useEffect(()=>{if(Eo(i),!r||!e||!t){c(!0);return}if(So.has(a)){c(So.get(a));return}c(!0);let o=!1,s={object:e,recordIds:[t],staled:new Set};return Co.add(s),(async()=>{try{let r=await(l??fetch)(`/api/v1/security/explain`,{method:`POST`,headers:{"Content-Type":`application/json`},credentials:`include`,body:JSON.stringify({object:e,operation:n,recordId:t})});if(!r.ok)return;let i=(await r.json())?.record?.visible;if(typeof i!=`boolean`||s.staled.size>0)return;So.set(a,i),o||c(i)}catch{}finally{Co.delete(s)}})(),()=>{o=!0}},[a,i,e,t,n,r,l,o]),s}var Oo=new Set([`select`,`status`,`multiselect`,`radio`,`checkboxes`,`tags`,`user`,`image`,`avatar`,`signature`,`boolean`,`toggle`,`date`,`datetime`,`repeater`,`file`,`video`,`audio`]);function ko(e){return!Oo.has(e)}function Ao(e){let t=Fn(e);return t===e?t:Number(t.toPrecision(12))}var jo={};function Mo(e,t,n,r){if(e&&typeof e==`object`){if(t.primaryField){let n=e[t.primaryField];if(n!=null&&n!==``)return String(n)}let r=Wt(e,Yn(n));if(r){let t=e.id??e._id;if(!(r===`Untitled`||t!=null&&r===`Record #${t}`))return r}let i=$t(n?.titleFormat,e);if(i)return i}if(e&&typeof e==`object`){let t=e.id??e._id,r=on(n,e,{deriveFromRecordKeys:!1});if(!(r===`Untitled`||t!=null&&r===`Record #${t}`))return r}if(t.title)return t.title;if(e&&typeof e==`object`){let t=e.id??e._id,r=on(n,e);if(!(r===`Untitled`||t!=null&&r===`Record #${t}`))return r}if(e&&typeof e==`object`){let t=e.id??e._id;if(t!=null&&String(t).trim()!==``)return`Record #${t}`}return r}var No=e=>(e||[]).flatMap(e=>Array.isArray(e?.fields)?e.fields:[]),Po=({section:e,index:t,children:n})=>(0,$.jsx)($n,{componentType:`record:details section ${e?.name??e?.group??e?.title??e?.label??`#${t+1}`}`,children:n}),Fo=({schema:e,dataSource:t,className:n,onEdit:r,onDelete:i,onBack:a,inlineEdit:o=!1,discussionSlot:s,rightRail:c,objectLabel:l,onDataLoaded:u,isFavorite:d,onToggleFavorite:f})=>{let[p,m]=Q.useState(e.data),[h,g]=Q.useState(!e.data&&!!(e.api&&e.resourceId||t&&e.objectName&&e.resourceId)),[_,v]=Q.useState(!1),b=d??_,S=Ut(),C=S?.editing??!1,w=S?.draft??jo,T=S?.autoFocusField??null,[E,D]=Q.useState(null),[j,M]=Q.useState(null),[ee,N]=Q.useState(!1),[te,P]=Q.useState(0),ne=Vn(e.objectName||void 0,e.resourceId==null?void 0:String(e.resourceId)),[F,I]=Q.useState(!1),{t:L}=Sa(),{currency:R}=Tr(),z=kr(),{fieldOptionLabel:V,fieldLabel:re}=Or(),H=y(),ie=Q.useMemo(()=>{if(!H?.isLoaded||!e.objectName)return e;let t=t=>H.checkField(e.objectName,t,`read`),n=e=>e&&e.filter(e=>{let n=typeof e==`string`?e:e?.name;return!n||t(n)});return{...e,fields:n(e.fields),sections:e.sections?.map(e=>({...e,fields:n(e.fields)})),summaryFields:n(e.summaryFields)}},[e,H]),ae=Q.useMemo(()=>kt(p,H,e.objectName),[p,H,e.objectName]),oe=Q.useMemo(()=>!H?.isLoaded||!e.objectName||H.can(e.objectName,`update`),[H,e.objectName]),se=Q.useMemo(()=>!H?.isLoaded||!e.objectName||H.can(e.objectName,`delete`),[H,e.objectName]),ce=e.resourceId==null?void 0:String(e.resourceId),le=Do(e.objectName,ce,`update`,oe),ue=Do(e.objectName,ce,`delete`,se),U=Q.useMemo(()=>an(j?.userActions?.edit),[j]),de=Q.useMemo(()=>an(j?.userActions?.delete),[j]),fe=j?.fields,pe=Vt(U?.visibleWhen??!0,p,{fallback:!1,warnOnError:!0,label:`builtin:edit:visibleWhen`,fields:fe}),me=Vt(de?.visibleWhen??!0,p,{fallback:!1,warnOnError:!0,label:`builtin:delete:visibleWhen`,fields:fe}),he=Vt(U?.disabledWhen,p,{fallback:!1,warnOnError:!0,label:`builtin:edit:disabledWhen`,fields:fe}),_e=Vt(de?.disabledWhen,p,{fallback:!1,warnOnError:!0,label:`builtin:delete:disabledWhen`,fields:fe}),ve=U?.disabledWhen!=null&&he,ye=de?.disabledWhen!=null&&_e,W=Q.useMemo(()=>({...ie,showEdit:ie.showEdit&&oe&&le&&pe,showDelete:ie.showDelete&&se&&ue&&me}),[ie,oe,le,pe,se,ue,me]);Q.useEffect(()=>{p&&u&&u(p)},[p,u]);let Se=Q.useMemo(()=>{if(W.summaryFields&&W.summaryFields.length>0)return[];let e=[...No(W.sections),...W.fields||[]],t={};for(let n of e)t[n.name]||(t[n.name]=n);if(j?.fields)for(let[e,n]of Object.entries(j.fields))t[e]={...t[e]||{},...n,name:e};let n=e=>Wa(p?.[e]),r=[],i=[`status`,`stage`,`state`,`phase`].find(e=>t[e]&&n(e))||Object.keys(t).find(e=>t[e]?.type===`select`&&n(e));i&&r.push(i);let a=Object.keys(t).find(e=>(t[e]?.type===`currency`||/amount|revenue|value|total|price/i.test(e))&&n(e));a&&!r.includes(a)&&r.push(a);let o=Object.keys(t).find(e=>(t[e]?.type===`date`||t[e]?.type===`datetime`)&&/close|due|start|end|expected/i.test(e)&&n(e));return o&&!r.includes(o)&&r.push(o),r},[W.summaryFields,W.sections,W.fields,j,p]),Ce=W.summaryFields&&W.summaryFields.length>0?W.summaryFields:Se,we=Q.useCallback(()=>{W.resourceId&&navigator.clipboard.writeText(String(W.resourceId)).then(()=>{N(!0),setTimeout(()=>N(!1),1500)})},[W.resourceId]);Q.useEffect(()=>{let e=!0;if(W.data)return m(W.data),g(!1),t?.getObjectSchema&&W.objectName&&t.getObjectSchema(W.objectName).then(t=>{e&&M(t)}).catch(()=>{}),()=>{e=!1};if(t&&W.objectName&&W.resourceId){g(!0),M(null),m(null);let n=W.objectName,r=W.resourceId,i=`${n}-`,a=[...No(W.sections),...W.fields||[]];(t.getObjectSchema?t.getObjectSchema(n).catch(()=>null):Promise.resolve(null)).then(o=>{if(!e)return;M(o);let s=gr(o?.fields,a),c=H?.isLoaded?s.filter(e=>H.checkField(n,e,`read`)):s,l=c.length>0?{$expand:c}:void 0,u=l?t.findOne(n,r,l):t.findOne(n,r),d=()=>{let a=String(r),o=a.startsWith(i)?a.slice(i.length):`${i}${a}`;return(l?t.findOne(n,o,l):t.findOne(n,o)).then(t=>{e&&(m(t),g(!1))}).catch(()=>{e&&(m(null),g(!1))})};return u.catch(()=>null).then(t=>{if(e){if(t){m(t),g(!1);return}return d()}})}).catch(t=>{e&&(console.error(`Failed to fetch detail data:`,t),g(!1))})}else W.api&&W.resourceId&&(g(!0),fetch(`${W.api}/${W.resourceId}`).then(e=>e.json()).then(t=>{e&&m(t?.data||t)}).catch(e=>{console.error(`Failed to fetch detail data:`,e)}).finally(()=>{e&&g(!1)}));return()=>{e=!1}},[W.api,W.resourceId,W.objectName,t,W.sections,W.fields,te,ne,H]);let G=Q.useCallback(()=>{if(a)a();else if(W.onNavigate){let e=W.backUrl||(W.objectName?`/${W.objectName}`:`/`);W.onNavigate(e,{replace:!0})}else W.backUrl?window.location.href=W.backUrl:window.history.back()},[a,W]),Te=Q.useCallback(()=>{r?r():W.onNavigate&&W.editUrl?W.onNavigate(W.editUrl):W.onNavigate&&W.objectName&&W.resourceId?W.onNavigate(`/${W.objectName}/${W.resourceId}/edit`):W.editUrl&&(window.location.href=W.editUrl)},[r,W]),De=Q.useCallback(async()=>{if(!t?.cancelPendingApproval||!W.objectName||!W.resourceId){D(L(`detail.cancelApprovalUnavailable`));return}I(!0),D(null);try{if(await t.cancelPendingApproval(String(W.objectName),String(W.resourceId)),t.findOne)try{let e=await t.findOne(String(W.objectName),String(W.resourceId));e&&m(e)}catch{}P(e=>e+1);try{window.dispatchEvent(new CustomEvent(`objectui:record-changed`,{detail:{objectName:String(W.objectName),recordId:String(W.resourceId),reason:`approval-recalled`}}))}catch{}}catch(e){let t=(e?.message||e?.error||String(e??`Cancel failed`)).replace(/^\[[^\]]+\]\s*/,``).replace(/^[A-Z][A-Z0-9_]+:\s*/,``);D(`${L(`detail.cancelApprovalFailed`)}: ${t}`)}finally{I(!1)}},[t,W.objectName,W.resourceId,L]),Oe=Q.useCallback(()=>{let e=W.deleteConfirmation||L(`detail.deleteConfirmation`);window.confirm(e)&&(i?.(),W.onNavigate&&W.objectName&&W.onNavigate(`/${W.objectName}`,{replace:!0}))},[i,W]),Ae=Q.useCallback(()=>{navigator.share&&W.objectName&&W.resourceId?navigator.share({title:W.title||L(`detail.details`),text:`${W.objectName} #${W.resourceId}`,url:window.location.href}).catch(e=>{console.error(`Share failed:`,e)}):navigator.clipboard.writeText(window.location.href)},[W]),K=Q.useCallback(()=>{let e=!b;f&&f(e),d===void 0&&v(e)},[b,d,f]),je=S?.setField,Me=S&&S.canEdit?S.enter:void 0;Q.useEffect(()=>{if(!W.recordNavigation)return;let e=W.recordNavigation,t=t=>{let n=t.target?.tagName;n===`INPUT`||n===`TEXTAREA`||t.target?.isContentEditable||(t.key===`ArrowLeft`&&e.currentIndex>0?(t.preventDefault(),e.onNavigate(e.recordIds[e.currentIndex-1])):t.key===`ArrowRight`&&e.currentIndex<e.recordIds.length-1&&(t.preventDefault(),e.onNavigate(e.recordIds[e.currentIndex+1])))};return document.addEventListener(`keydown`,t),()=>document.removeEventListener(`keydown`,t)},[W.recordNavigation]);let Ne=Q.useMemo(()=>{let e=[];return e.push({name:`sys_share`,label:L(`detail.share`),icon:`share-2`,type:`script`,onClick:Ae}),W.showEdit&&e.push({name:`sys_edit_mobile`,label:L(`detail.edit`),icon:`square-pen`,type:`script`,className:`sm:hidden`,...ve?{disabled:!0}:null,onClick:Te}),W.showDelete&&e.push({name:`sys_delete`,label:L(`detail.delete`),icon:`trash`,type:`script`,variant:`destructive`,tags:[`separator-before`],...ye?{disabled:!0}:null,onClick:Oe}),e},[L,W.showEdit,W.showDelete,ve,ye,Ae,Te,Oe]),Pe=Q.useMemo(()=>{let e=W.actions??[];if(Ne.length===0)return e;let t=!1,n=e.map(e=>{let n=e;if(n&&typeof n==`object`&&n.type===`action:bar`&&(!n.location||n.location===`record_header`)){t=!0;let e=Array.isArray(n.systemActions)?n.systemActions:[];return{...n,systemActions:[...e,...Ne]}}return e});return t||n.push({type:`action:bar`,location:`record_header`,systemActions:Ne}),n},[W.actions,Ne]);return h||W.loading?(0,$.jsxs)(`div`,{className:q(`space-y-4`,n),children:[(0,$.jsx)(k,{className:`h-10 w-full`}),(0,$.jsx)(k,{className:`h-64 w-full`}),(0,$.jsx)(k,{className:`h-48 w-full`})]}):!p&&!W.data?(0,$.jsxs)(`div`,{className:q(`flex flex-col items-center justify-center py-16 text-center`,n),children:[(0,$.jsx)(`p`,{className:`text-lg font-semibold`,children:L(`detail.recordNotFound`)}),(0,$.jsx)(`p`,{className:`text-sm text-muted-foreground mt-1`,children:L(`detail.recordNotFoundDescription`)}),(W.showBack??!0)&&(0,$.jsxs)(Z,{variant:`outline`,size:`sm`,onClick:G,className:`mt-4 gap-2`,children:[(0,$.jsx)(Mr,{className:`h-4 w-4`}),L(`detail.goBack`)]})]}):(0,$.jsx)(xe,{children:(0,$.jsxs)(`div`,{className:q(`space-y-6`,n),children:[W.showHeader!==!1&&(0,$.jsxs)(`div`,{className:`flex flex-col sm:flex-row sm:flex-wrap items-start justify-between gap-3 sm:gap-4 pb-4 border-b`,children:[(0,$.jsxs)(`div`,{className:`flex items-start gap-2 sm:gap-3 flex-1 min-w-0 sm:min-w-64 w-full sm:w-auto`,children:[(W.showBack??!0)&&(0,$.jsxs)(O,{children:[(0,$.jsx)(A,{asChild:!0,children:(0,$.jsx)(Z,{variant:`ghost`,size:`icon`,onClick:G,className:`shrink-0 mt-1`,children:(0,$.jsx)(Mr,{className:`h-4 w-4`})})}),(0,$.jsx)(bt,{children:L(`detail.back`)})]}),(0,$.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2 flex-wrap`,children:[(0,$.jsx)(`h1`,{className:`text-xl sm:text-2xl font-bold truncate`,children:Mo(ae,W,j,L(`detail.details`))}),Ce.map(e=>{let t=p?.[e];if(!Wa(t))return null;let n=No(W.sections).concat(W.fields||[]).find(t=>t.name===e),r=j?.fields?.[e],i=n?.type||r?.type,a=re(W.objectName||``,e,n?.label||r?.label||e),o=String(t),s=null;try{if(i===`currency`){let e=Number(t);if(!Number.isNaN(e)){let t=Er({...r,...n},R);o=t?new Intl.NumberFormat(z,{style:`currency`,currency:t,maximumFractionDigits:0}).format(e):new Intl.NumberFormat(z,{maximumFractionDigits:0}).format(e)}}else if(i===`date`||i===`datetime`){let e=mr(t);Number.isNaN(e.getTime())||(o=i===`datetime`?e.toLocaleString(z,{dateStyle:`medium`,timeStyle:`short`}):e.toLocaleDateString(z,{dateStyle:`medium`}))}else if(i===`percent`){let e=Number(t);if(!Number.isNaN(e)){let t={...r,...n}.scale??0;o=mt(e,t,z);let i=Ao(e);s=Math.max(0,Math.min(100,i))}}else if(i===`select`||i===`status`||i===`multiselect`){let i=n?.options||r?.options,a=String(t);if(Array.isArray(i)){let e=i.find(e=>String(e?.value??e)===String(t));e?.label&&(a=e.label)}else if(i&&typeof i==`object`){let e=i[String(t)];e?.label&&(a=e.label)}o=W.objectName?V(W.objectName,e,String(t),a):a}}catch{}let c=Fa({name:e,label:n?.label,type:i||`text`},r),l=_t(c)||i||`text`,u=o.includes(`[object Object]`),d=u&&ko(l)?nt(l):null;return u&&!d&&(o=String(B(t)??``)),d?(0,$.jsxs)($e,{variant:`secondary`,className:`text-xs bg-primary/10 text-primary border-transparent hover:bg-primary/15`,"data-summary-chip":e,children:[(0,$.jsx)(`span`,{className:`sr-only`,children:`${a}: `}),(0,$.jsx)(d,{value:t,field:c})]},e):s===null?(0,$.jsx)($e,{variant:`secondary`,className:`text-xs bg-primary/10 text-primary border-transparent hover:bg-primary/15`,"aria-label":`${a}: ${o}`,"data-summary-chip":e,children:o},e):(0,$.jsxs)($e,{variant:`secondary`,className:`text-xs bg-primary/10 text-primary border-transparent hover:bg-primary/15 gap-1.5 pl-2 pr-2`,"aria-label":`${a}: ${o}`,"data-summary-chip":e,children:[(0,$.jsx)(`span`,{className:`relative inline-block h-1.5 w-12 rounded-full bg-primary/20 overflow-hidden`,"aria-hidden":!0,children:(0,$.jsx)(`span`,{className:`absolute inset-y-0 left-0 rounded-full bg-primary`,style:{width:`${s}%`}})}),o]},e)}),(0,$.jsxs)(O,{children:[(0,$.jsx)(A,{asChild:!0,children:(0,$.jsx)(Z,{variant:`ghost`,size:`icon`,className:`h-6 w-6 shrink-0`,onClick:K,"aria-label":L(b?`detail.removeFromFavorites`:`detail.addToFavorites`),children:b?(0,$.jsx)(Ri,{className:`h-4 w-4 fill-yellow-400 text-yellow-400`}):(0,$.jsx)(Ri,{className:`h-4 w-4 text-muted-foreground`})})}),(0,$.jsx)(bt,{children:L(b?`detail.removeFromFavorites`:`detail.addToFavorites`)})]})]}),W.objectName&&(0,$.jsxs)(`p`,{className:`text-sm text-muted-foreground mt-1 flex items-center gap-1`,children:[(0,$.jsx)(`span`,{className:`font-medium`,children:l||W.objectName}),W.resourceId&&(0,$.jsxs)(O,{children:[(0,$.jsx)(A,{asChild:!0,children:(0,$.jsx)(Z,{variant:`ghost`,size:`icon`,className:`h-5 w-5 shrink-0 text-muted-foreground/60 hover:text-foreground`,onClick:we,"aria-label":L(`detail.copyRecordId`,{defaultValue:`Copy record ID`}),children:ee?(0,$.jsx)(Hr,{className:`h-3 w-3 text-green-600`}):(0,$.jsx)(ni,{className:`h-3 w-3`})})}),(0,$.jsx)(bt,{children:ee?L(`detail.copied`,{defaultValue:`Copied!`}):L(`detail.copyRecordId`,{defaultValue:`Copy record ID`})})]})]})]})]}),(0,$.jsxs)(`div`,{className:`flex flex-wrap items-center gap-1.5 shrink-0 w-full sm:w-auto`,children:[W.recordNavigation&&(0,$.jsxs)(`div`,{className:`flex items-center gap-1 mr-2`,children:[(0,$.jsxs)(O,{children:[(0,$.jsx)(A,{asChild:!0,children:(0,$.jsx)(Z,{variant:`outline`,size:`icon`,className:`h-8 w-8`,disabled:W.recordNavigation.currentIndex<=0,onClick:()=>{let e=W.recordNavigation;e.currentIndex>0&&e.onNavigate(e.recordIds[e.currentIndex-1])},children:(0,$.jsx)(Wr,{className:`h-4 w-4`})})}),(0,$.jsx)(bt,{children:L(`detail.previousRecord`)})]}),(0,$.jsx)(`span`,{className:`text-xs text-muted-foreground whitespace-nowrap px-1`,children:L(`detail.recordOf`,{current:W.recordNavigation.currentIndex+1,total:W.recordNavigation.recordIds.length})}),(0,$.jsxs)(O,{children:[(0,$.jsx)(A,{asChild:!0,children:(0,$.jsx)(Z,{variant:`outline`,size:`icon`,className:`h-8 w-8`,disabled:W.recordNavigation.currentIndex>=W.recordNavigation.recordIds.length-1,onClick:()=>{let e=W.recordNavigation;e.currentIndex<e.recordIds.length-1&&e.onNavigate(e.recordIds[e.currentIndex+1])},children:(0,$.jsx)(Gr,{className:`h-4 w-4`})})}),(0,$.jsx)(bt,{children:L(`detail.nextRecord`)})]})]}),W.showEdit&&(0,$.jsxs)(O,{children:[(0,$.jsx)(A,{asChild:!0,children:(0,$.jsxs)(Z,{variant:`default`,disabled:ve,onClick:()=>{ve||Te()},className:`gap-2 hidden sm:inline-flex`,children:[(0,$.jsx)(Li,{className:`h-4 w-4`}),(0,$.jsx)(`span`,{className:`hidden sm:inline`,children:L(`detail.edit`)})]})}),(0,$.jsx)(bt,{children:L(`detail.editRecord`)})]}),Pe.map((e,t)=>(0,$.jsx)(Kn,{schema:ir(e),data:p},`header-action-${t}`))]})]}),be(W.header,e=>(0,$.jsx)(`div`,{children:(0,$.jsx)(Kn,{schema:ir(e),data:p})})),W.highlightFields&&W.highlightFields.length>0&&(0,$.jsx)(Xa,{fields:W.highlightFields,data:p,objectName:W.objectName,objectSchema:j}),o&&W.showHeader===!1&&(()=>{let e=p?.approval_status,n=e===`pending`||e===`in_approval`,r=S?.approvalPending??!1,i=r&&!(S?.locked??!1)?!1:(S?.locked??!1)||n,a=i||r||n,o=a?S?.approvalProgress:void 0,s=!!o&&o.need>0&&o.need<=12;return!a&&!E?null:(0,$.jsxs)(`div`,{className:`flex flex-col items-end gap-1`,children:[a&&(0,$.jsxs)(`div`,{className:`flex items-center justify-end gap-2`,children:[(0,$.jsxs)(`span`,{role:`status`,className:i?`inline-flex items-center gap-1 rounded-md border border-amber-300 bg-amber-50 px-2 py-1 text-xs text-amber-800`:`inline-flex items-center gap-1 rounded-md border border-sky-300 bg-sky-50 px-2 py-1 text-xs text-sky-800`,title:i?S?.lockedReason??L(`detail.lockedTooltip`):L(`detail.approvalPendingTooltip`),children:[i?(0,$.jsx)(yi,{className:`h-3 w-3`}):(0,$.jsx)(ei,{className:`h-3 w-3`}),(0,$.jsx)(`span`,{children:L(i?`detail.lockedByApproval`:`detail.approvalPendingEditable`)})]}),t?.cancelPendingApproval&&S?.approvalIsSubmitter!==!1&&(0,$.jsxs)(Z,{variant:`outline`,size:`sm`,onClick:De,disabled:F,className:i?`gap-2 border-amber-300 text-amber-800 hover:bg-amber-50`:`gap-2 border-sky-300 text-sky-800 hover:bg-sky-50`,title:L(i?`detail.cancelApprovalTooltip`:`detail.cancelApprovalTooltipUnlocked`),children:[(0,$.jsx)(Ji,{className:`h-4 w-4`}),(0,$.jsx)(`span`,{children:L(F?`detail.cancelApprovalInFlight`:`detail.cancelApproval`)})]})]}),o&&(0,$.jsxs)(`div`,{className:`flex flex-col items-end gap-1 max-w-[16rem]`,children:[(0,$.jsxs)(`div`,{role:`progressbar`,"aria-valuemin":0,"aria-valuemax":o.need,"aria-valuenow":Math.min(o.got,o.need),"aria-label":L(`detail.approvalProgressLabel`),className:`flex items-center gap-2 w-full justify-end`,children:[(0,$.jsx)(`span`,{className:`text-[11px] text-muted-foreground whitespace-nowrap`,children:o.behavior===`per_group`?L(`detail.approvalProgressGroups`,{got:o.got,need:o.need}):L(`detail.approvalProgress`,{got:o.got,need:o.need})}),s&&(0,$.jsx)(`span`,{className:`flex items-center gap-1 w-20 shrink-0`,children:Array.from({length:o.need}).map((e,t)=>(0,$.jsx)(`span`,{"aria-hidden":`true`,className:q(`h-1.5 flex-1 rounded-full`,t<o.got?`bg-emerald-500`:`bg-muted`)},t))})]}),o.groups&&o.groups.length>0&&(0,$.jsx)(`div`,{className:`flex flex-wrap justify-end gap-1`,children:o.groups.map(e=>(0,$.jsxs)(`span`,{title:`${e.got}/${e.need}`,className:q(`inline-flex items-center gap-1 rounded-md border px-1.5 py-0.5 text-[11px]`,e.satisfied?`border-emerald-300 text-emerald-700`:`border-border text-muted-foreground`),children:[e.satisfied?(0,$.jsx)(Hr,{className:`h-3 w-3`}):(0,$.jsx)(Qr,{className:`h-2.5 w-2.5`}),(0,$.jsx)(`span`,{children:`${e.group} ${e.got}/${e.need}`})]},e.group))})]}),E&&(0,$.jsx)(`div`,{role:`alert`,className:`text-xs text-destructive bg-destructive/10 border border-destructive/20 rounded-md px-2 py-1 max-w-md text-right`,children:E})]})})(),W.autoTabs&&!W.tabs?.length?(()=>{let e=!!W.activities&&W.activities.length>0,n=!!s,r=!!W.history,i=[`details`,...e?[`activity`]:[],...n?[`discussion`]:[],...r?[`history`]:[]],a=W.defaultTab,c=a&&i.includes(a)?a:`details`,l=W.onTabChange,u=(0,$.jsxs)(`div`,{className:`space-y-3 sm:space-y-4`,children:[W.sectionGroups&&W.sectionGroups.length>0&&W.sectionGroups.map((e,n)=>(0,$.jsx)(Ya,{group:e,data:{...p,...w},objectSchema:j,objectName:W.objectName,isEditing:C,onFieldChange:je,onEnterInlineEdit:o?Me:void 0,autoFocusField:T,dataSource:t},n)),W.sections&&W.sections.length>0&&W.sections.map((e,n)=>(0,$.jsx)(Po,{section:e,index:n,children:(0,$.jsx)(qa,{section:e,data:{...p,...w},objectSchema:j,objectName:W.objectName,isEditing:C,onFieldChange:je,onEnterInlineEdit:o?Me:void 0,autoFocusField:T,dataSource:t})},n)),W.fields&&W.fields.length>0&&!W.sections?.length&&(0,$.jsx)(qa,{section:{fields:W.fields,columns:W.columns},data:{...p,...w},objectSchema:j,objectName:W.objectName,isEditing:C,onFieldChange:je,onEnterInlineEdit:o?Me:void 0,autoFocusField:T,dataSource:t}),W.comments&&(0,$.jsx)(Qa,{comments:W.comments,onAddComment:W.onAddComment})]});return!e&&!n&&!r?(0,$.jsx)(`div`,{className:`mt-2`,children:u}):(0,$.jsxs)(Ee,{defaultValue:c,onValueChange:l,className:`w-full`,children:[(0,$.jsxs)(ge,{className:`w-full justify-start border-b rounded-none bg-transparent p-0`,children:[(0,$.jsx)(x,{value:`details`,className:`relative rounded-none border-b-2 border-transparent data-[state=active]:border-primary data-[state=active]:bg-transparent`,children:L(`detail.details`)}),e&&(0,$.jsx)(x,{value:`activity`,className:`relative rounded-none border-b-2 border-transparent data-[state=active]:border-primary data-[state=active]:bg-transparent`,children:(0,$.jsxs)(`span`,{className:`flex items-center gap-1.5`,children:[L(`detail.activity`),(0,$.jsx)($e,{variant:`secondary`,className:`text-xs bg-primary/10 text-primary border-transparent`,children:W.activities.length})]})}),n&&(0,$.jsx)(x,{value:`discussion`,className:`relative rounded-none border-b-2 border-transparent data-[state=active]:border-primary data-[state=active]:bg-transparent`,children:L(`detail.discussion`,{defaultValue:`Discussion`})}),r&&(0,$.jsx)(x,{value:`history`,className:`relative rounded-none border-b-2 border-transparent data-[state=active]:border-primary data-[state=active]:bg-transparent`,children:(0,$.jsxs)(`span`,{className:`flex items-center gap-1.5`,children:[L(`detail.history`,{defaultValue:`History`}),!W.history.loading&&W.history.entries.length>0&&(0,$.jsx)($e,{variant:`secondary`,className:`text-xs bg-primary/10 text-primary border-transparent`,children:W.history.entries.length})]})})]}),(0,$.jsx)(ke,{value:`details`,className:`mt-4 motion-safe:data-[state=active]:animate-in motion-safe:data-[state=active]:fade-in-0 motion-safe:duration-150`,children:u}),e&&(0,$.jsx)(ke,{value:`activity`,className:`mt-4 motion-safe:data-[state=active]:animate-in motion-safe:data-[state=active]:fade-in-0 motion-safe:duration-150`,children:(0,$.jsx)(ao,{activities:W.activities})}),n&&(0,$.jsx)(ke,{value:`discussion`,className:`mt-4 motion-safe:data-[state=active]:animate-in motion-safe:data-[state=active]:fade-in-0 motion-safe:duration-150`,children:s}),r&&(0,$.jsx)(ke,{value:`history`,className:`mt-4 motion-safe:data-[state=active]:animate-in motion-safe:data-[state=active]:fade-in-0 motion-safe:duration-150`,children:(0,$.jsx)(po,{entries:W.history.entries,loading:W.history.loading,emptyText:W.history.emptyText??L(`detail.historyEmpty`,{defaultValue:`No history yet`})})})]})})():(0,$.jsxs)($.Fragment,{children:[W.sectionGroups&&W.sectionGroups.length>0&&(0,$.jsx)(`div`,{className:`space-y-3 sm:space-y-4`,children:W.sectionGroups.map((e,n)=>(0,$.jsx)(Ya,{group:e,data:{...p,...w},objectSchema:j,objectName:W.objectName,isEditing:C,onFieldChange:je,onEnterInlineEdit:o?Me:void 0,autoFocusField:T,dataSource:t},n))}),W.sections&&W.sections.length>0&&(0,$.jsx)(`div`,{className:`space-y-3 sm:space-y-4`,children:W.sections.map((e,n)=>(0,$.jsx)(Po,{section:e,index:n,children:(0,$.jsx)(qa,{section:e,data:{...p,...w},objectSchema:j,objectName:W.objectName,isEditing:C,onFieldChange:je,onEnterInlineEdit:o?Me:void 0,autoFocusField:T,dataSource:t})},n))}),W.fields&&W.fields.length>0&&!W.sections?.length&&(0,$.jsx)(qa,{section:{fields:W.fields,columns:W.columns},data:{...p,...w},objectSchema:j,objectName:W.objectName,isEditing:C,onFieldChange:je,onEnterInlineEdit:o?Me:void 0,autoFocusField:T,dataSource:t}),W.tabs&&W.tabs.length>0&&(0,$.jsx)(Ja,{tabs:W.tabs,data:p}),W.comments&&(0,$.jsx)(Qa,{comments:W.comments,onAddComment:W.onAddComment}),W.activities&&W.activities.length>0&&(0,$.jsx)(ao,{activities:W.activities})]}),(0,$.jsx)(xo,{data:{...p,...w},objectSchema:j,objectName:W.objectName}),be(W.footer,e=>(0,$.jsx)(`div`,{children:(0,$.jsx)(Kn,{schema:ir(e),data:p})}))]})})},Io=new Set([`title`,`description`,`icon`,`fields`,`collapsible`,`defaultCollapsed`,`columns`,`showBorder`,`headerColor`,`hideEmpty`]),Lo=e=>{let t={},n={};for(let[r,i]of Object.entries(e))(Io.has(r)?t:n)[r]=i;return(0,$.jsx)(qa,{...n,section:t})};Lo.displayName=`DetailSectionNode(DetailSection)`;function Ro(e){return H(e)??hi}function zo(e,t){let n=e?.id??e?._id;if(t){let r=on(t,e),i=r===`Untitled`||n!=null&&r===`Record #${n}`;if(r&&!i)return r}return e?.full_name||e?.fullname||e?.display_name||e?.name||e?.subject||e?.title||e?.label||e?.code||e?.email||(n==null?void 0:String(n))}function Bo(e){if(!e)return[];if(typeof e==`string`){let t=e.trim();return t?t.startsWith(`-`)?[{field:t.slice(1),order:`desc`}]:[{field:t,order:`asc`}]:[]}return e.filter(e=>!!e?.field)}var Vo=`image`;function Ho(e){return Q.createElement(ot,{value:e})}function Uo(e){let t=e?.accessorKey||Pt(e);return t?String(t):void 0}function Wo(e){return JSON.parse(e)}function Go(e,t,n){return!t?.isLoaded||!n?e:e.filter(e=>{let r=Uo(e);return!r||t.checkField(n,r,`read`)})}function Ko(e,t){return t?e.filter(e=>Uo(e)!==t):e}function qo(e,t){return t.size===0?e:e.filter(e=>{let n=Uo(e);return!(n&&t.has(n))})}var Jo=({action:e,onToolbarAction:t})=>{let n=e.visible,r=Zt(xr(n));if(n&&!r)return null;let i=e.icon?Ro(e.icon):null;return(0,$.jsxs)(Z,{variant:e.variant===`primary`?`default`:`outline`,size:`sm`,onClick:n=>{n.stopPropagation(),t(e)},className:`gap-1 h-9 sm:h-7 text-xs shadow-none`,"data-testid":`related-toolbar-action-${e.name}`,children:[i&&(0,$.jsx)(i,{className:`h-3.5 w-3.5`}),e.label||e.name]})},Yo=({title:e,type:t,api:n,data:r,schema:i,columns:a,className:o,dataSource:s,objectName:c,onNew:l,newDisabled:u,onViewAll:d,onRowEdit:f,onRowDelete:p,onRowClick:m,rowActions:h,onRowAction:g,toolbarActions:_,onToolbarAction:v,add:b,redactFields:x,maxColumns:S=6,pageSize:C,defaultSort:w,sortable:T=!1,filter:D,filterable:O=!1,collapsible:k=!1,defaultCollapsed:A=!1,referenceField:j,parentId:M,icon:ee})=>{let N=r!==void 0,te=r??[],[P,ne]=Q.useState(te),[I,L]=Q.useState(()=>!!n&&!N),[R,z]=Q.useState(0),[B,V]=Q.useState(null),[re,H]=Q.useState(`asc`),[ie,ae]=Q.useState(``),[oe,se]=Q.useState(null),[ce,le]=Q.useState(!1),{ready:ue,def:U}=pr(n??``,s),[fe,pe]=Q.useState(A),[me,he]=Q.useState(!1),[ge,ve]=Q.useState(!1),[ye,be]=Q.useState(null),[xe,W]=Q.useState(0),[Se,we]=Q.useState({}),{t:G}=Sa(),{fieldLabel:Te}=Or(),Ee=y(),De=hr(),Oe=Q.useMemo(()=>(_??[]).filter(e=>De(e?.requiredPermissions)),[_,De]),ke=C&&C>0?C:0,Ae=O&&ie!==``,K=!N&&!!n&&ke>0&&!!s&&typeof s.find==`function`&&!Ae,je=K?R:0,Me=K?B:null,Ne=K?re:`asc`,Pe=JSON.stringify(w??null),Fe=Q.useMemo(()=>Bo(w),[Pe]),Le=Bn(),Re=fr(D,Le),ze=JSON.stringify(Re??null),Ue=Q.useMemo(()=>cn(Re),[ze]),We=Ue.ok?void 0:Ue.refusal,J=Ue.ok?Ue.node:void 0,Ge=Q.useMemo(()=>{let e=Array.isArray(a)?a.map(e=>typeof e==`string`?e:e?.accessorKey||Pt(e)).filter(e=>typeof e==`string`&&e.length>0):[],t=gr(U?.fields,e.length>0?e:void 0).filter(e=>e!==j),r=c||n||``;return!Ee?.isLoaded||!r?t:t.filter(e=>Ee.checkField(r,e,`read`))},[a,U,j,c,n,Ee]),Ke=Ge.join(`,`),qe=Q.useMemo(()=>new Set((Array.isArray(x)?x:[]).filter(e=>typeof e==`string`&&e.length>0)),[x]),Y=Q.useMemo(()=>{let e=qo(Array.isArray(a)?a:[],qe);if(e.length===0)return;let t=c||n||``,r=new Set([`id`]);for(let n of Go(Ko(e,j),Ee,t)){let e=Uo(n);e&&r.add(e)}for(let e of Ge)r.add(e);let i=U?.fields;if(i&&typeof i==`object`){let e=e=>!Ee?.isLoaded||!t||Ee.checkField(t,e,`read`),n=sr(En({rowActionDefs:h,objectActions:U?.actions,userActions:U?.userActions}));for(let t of n){let n=ln(i,t)!==void 0;(n||Kt.has(t))&&(!n||e(t))&&r.add(t)}ln(i,Vo)!==void 0&&e(Vo)&&r.add(Vo)}return Array.from(r)},[a,qe,j,c,n,Ee,Ge,U,h]),Xe=Y?Y.join(`,`):``;Q.useEffect(()=>{N&&ne(r??[])},[r,N]);let Qe=Q.useMemo(()=>On(U?.fields,j),[U,j]),X=b?.picker?.object,[et,tt]=Q.useState(null);Q.useEffect(()=>{if(!me||!X||et||!s?.getObjectSchema)return;let e=!1;return s.getObjectSchema(X).then(t=>{e||tt(t)}).catch(e=>{console.warn(`[RelatedList] Failed to fetch schema for ${X}:`,e)}),()=>{e=!0}},[me,X,et,s]);let it=b?.picker?.labelField||`name`,ot=Q.useMemo(()=>{let e=_e(et,{displayField:it});return e.length>0?e:void 0},[et,it]);Q.useEffect(()=>{b&&!X&&console.warn(`[RelatedList] "${n||c||`related list`}" declares add without add.picker.object — the Add affordance is not rendered. add.picker is required by the spec (RecordRelatedListProps.add): set add.picker.object to the object the picker should list.`)},[b,X,n,c]),Q.useEffect(()=>{let e=!1;if(We){L(!1);return}if(n&&!N){if(!(j&&M!=null&&M!==``)){n&&(M==null||M===``)&&!j&&console.warn(`[RelatedList] "${n}" has no referenceField/parentId — refusing to fetch all rows. Pass relationshipField + parentId to scope the query.`),ne([]),se(null),le(!1),L(!1);return}if(L(!0),!ue)return;let t=Sn(j,M,U?.fields),r=J===void 0?t:xn(t,J);if(s&&typeof s.find==`function`){let t={$filter:r};if(Ge.length>0&&(t.$expand=Ge),Y&&(t.$select=Y),K){t.$top=ke,t.$skip=je*ke;let e=Me?[{field:Me,order:Ne}]:Fe;e.length>0&&(t.$orderby=e)}s.find(n,t).then(t=>{if(e)return;let n=Array.isArray(t),r=n?t:Array.isArray(t?.data)?t.data:[];if(ne(r),K){let e=!n&&typeof t?.total==`number`?t.total:null;se(e),le(!n&&typeof t?.hasMore==`boolean`?t.hasMore:r.length===ke)}else se(null),le(!1);L(!1)}).catch(t=>{console.error(`Failed to fetch related data:`,t),e||L(!1)})}else if(J!==void 0)console.warn(`[RelatedList] "${n}" declares a filter but has no dataSource adapter — the raw-URL fallback cannot express it, so no rows are fetched. Pass a dataSource (RecordContext) to use a filtered related list.`),ne([]),se(null),le(!1),L(!1);else if(Qe)console.warn(`[RelatedList] "${n}" relates through the multi-value field "${j}" but has no dataSource adapter — the raw-URL fallback's \`filter[<field>]=<value>\` grammar has no membership operator, so no rows are fetched. Pass a dataSource (RecordContext) to use a related list on a multi-value relationship field.`),ne([]),se(null),le(!1),L(!1);else{let t=new URLSearchParams({[`filter[${j}]`]:String(M)}).toString();fetch(`${n}?${t}`).then(e=>e.json()).then(t=>{if(e)return;let n=Array.isArray(t)?t:t?.data||[];ne(n),se(null),le(!1)}).catch(e=>{console.error(`Failed to fetch related data:`,e)}).finally(()=>{e||L(!1)})}}return()=>{e=!0}},[n,N,s,j,Qe,M,xe,K,ke,je,Me,Ne,Pe,ze,Ke,Xe,ue]),Q.useEffect(()=>{K&&!I&&R>0&&P.length===0&&z(e=>Math.max(0,e-1))},[K,I,P,R]),Q.useEffect(()=>{z(0)},[n,j,M,ze]),Q.useEffect(()=>{if(!n||N)return;let e=e=>{let t=e.detail||{};t.objectName&&t.objectName!==`*`&&t.objectName!==n||W(e=>e+1)};return window.addEventListener(`objectui:related-changed`,e),()=>window.removeEventListener(`objectui:related-changed`,e)},[n,N]),Q.useEffect(()=>{if(!s?.find||!U?.fields||!P.length)return;let e=U.fields,t=[];for(let[n,r]of Object.entries(e)){if(!hn(r))continue;let e=r.reference;if(!e)continue;let i=new Set;for(let e of P){let t=e?.[n];t!=null&&(typeof t==`string`&&t?i.add(t):typeof t==`number`&&i.add(String(t)))}let a=Se[n]||{},o=Array.from(i).filter(e=>!(e in a));o.length>0&&t.push({fieldName:n,target:e,ids:o})}if(t.length===0)return;let n=!1;return Promise.all(t.map(({fieldName:e,target:t,ids:n})=>Promise.all([s.find(t,{$filter:{id:{$in:n}},$top:n.length}),typeof s.getObjectSchema==`function`?s.getObjectSchema(t).catch(()=>void 0):Promise.resolve(void 0)]).then(([t,n])=>{let r=Array.isArray(t)?t:t?.data||[],i={};for(let e of r){let t=e?.id||e?._id;t&&(i[String(t)]=zo(e,n)??String(t))}return{fieldName:e,map:i}}).catch(t=>(console.warn(`[RelatedList] Failed to resolve lookups for ${e}:`,t),{fieldName:e,map:{}})))).then(e=>{n||we(t=>{let n={...t};for(let{fieldName:t,map:r}of e)n[t]={...n[t]||{},...r};return n})}),()=>{n=!0}},[s,U,P]);let[st,ct]=Q.useState(null),lt=Q.useCallback(e=>{ct(e)},[]),ut=Q.useCallback(async()=>{if(st)try{await p?.(st),W(e=>e+1)}catch(e){console.error(`[RelatedList] remove failed`,e)}ct(null)},[st,p]),dt=Q.useCallback(async e=>{if(!b||!s||!n||j==null||M==null)return;let t=b.picker.valueField||`id`;ve(!0),be(null);try{for(let r of e||[]){let e=r?.[t]??r?.id;e!=null&&(b.linkField?await s.create?.(n,{[j]:M,[b.linkField]:e}):await s.update?.(b.picker.object,String(e),{[j]:M}))}W(e=>e+1)}catch(e){let t=e?.body?.error??e?.error??e?.message??String(e);be(typeof t==`string`?t:`Failed to add`)}finally{ve(!1),he(!1)}},[b,s,n,j,M]),ft=Q.useMemo(()=>{let e=c||n||``,t=t=>Go(t,Ee,e),r=e=>Ko(e,j),i=e=>qe.size>0&&!!e&&qe.has(String(e)),o=e=>qo(e,qe),s=e=>tn(e)||typeof e==`string`&&e.trim()===``,l=e=>P.length?e.filter(e=>{let t=e?.accessorKey||Pt(e);return!t||P.some(e=>!s(e?.[t]))}):e,u=(e,t)=>{if(!t?.type)return;let n=_t({type:t.type,format:t.format})||t.type,r=nt(n);if(!r)return;let i=t.type===`lookup`||t.type===`master_detail`,a=hn(t)?Se[e]:void 0,o=i&&a&&Object.keys(a).length>0?Object.entries(a).map(([e,t])=>({value:e,label:t})):void 0,c=e=>{if(t.type!==`user`||!a||typeof e!=`string`&&typeof e!=`number`)return e;let n=a[String(e)];return n?{name:n}:e},l={name:e,label:t.label||e,type:t.type,...(o||t.options)&&{options:o||t.options},...t.currency&&{currency:t.currency},...t.precision!==void 0&&{precision:t.precision},...t.scale!==void 0&&{scale:t.scale},...t.format&&{format:t.format},...t.reference&&{reference_to:t.reference},...t.reference_field&&{reference_field:t.reference_field}};return e=>s(e)?Q.createElement(Je):Q.createElement(r,{value:c(e),field:l})},d=t=>{if(typeof t!=`string`){let e=t?.accessorKey||Pt(t);if(!t||!e)return t;let n={};if(t.accessorKey||(n.accessorKey=e),!t.header){let e=Rt(t);e&&(n.header=e)}if(!t.cell&&!t.render){let t=U?.fields?.[e],r=t?u(String(e),t):void 0;r&&(n.cell=r)}return Object.keys(n).length>0?{...t,...n}:t}let n=U?.fields?.[t],r={accessorKey:t,header:n?.label||Te(e,t,n)||t,fieldDef:n,fieldType:n?.type},i=n?u(t,n):void 0;return i&&(r.cell=i),r};if(a&&a.length>0){let e=o(a.map(d));if(e.length>0)return l(t(r(e)))}if(!U?.fields)return[];let f=Array.isArray(U.highlightFields)?U.highlightFields.filter(e=>typeof e==`string`&&e.length>0):[];if(f.length>0){let e=l(t(r(o(f.map(d)))));if(e.length>0)return e.slice(0,Math.max(1,S))}let p=e,m=new Set([`richtext`,`markdown`,`html`,`json`]),h=[`name`,`full_name`,`fullname`,`title`,`subject`,`label`,`code`,`number`],g=Object.entries(U.fields).filter(([e,t])=>!(e.startsWith(`_`)||e===`id`||e===j||t?.hidden||t?.type&&m.has(t.type)||i(e)||Ee?.isLoaded&&p&&!Ee.checkField(p,e,`read`))),_=new Set([`created_at`,`updated_at`,`created_by`,`updated_by`,`owner_id`,`organization_id`]);return g.sort(([e,t],[n,r])=>{let i=_.has(e);if(i!==_.has(n))return i?1:-1;let a=h.indexOf(e),o=h.indexOf(n),s=a>=0?a:100,c=o>=0?o:100;if(s!==c)return s-c;let l=t?.type===`select`||e.includes(`status`);return l===(r?.type===`select`||n.includes(`status`))?0:l?-1:1}),l(g.map(([e,t])=>{let n={accessorKey:e,header:Te(p,e,t.label||e)};if(t.type){let r=u(e,t);r&&(n.cell=r)}return n})).slice(0,Math.max(1,S))},[a,U,c,n,Te,j,P,S,Se,Ee,qe]),pt=kn(U),mt=Q.useCallback((e,t)=>hn(t)?!0:pt?!Hn(pt,e):br(t),[pt]),gt=Q.useMemo(()=>K?ft.map(e=>{let t=e.accessorKey||Pt(e),n=t?U?.fields?.[t]:void 0;return mt(t,n)?{...e,sortable:!1}:e}):ft,[ft,K,U,mt]),vt=!!n&&typeof s?.getObjectSchema==`function`&&!U?.fields,yt=Q.useMemo(()=>{let e=gt.map(e=>{if(!e||typeof e!=`object`)return e;let t=e.accessorKey||Pt(e),n=t?U?.fields?.[t]:void 0,r=vt||Ma(e.type,n?.type);return vt&&typeof e.cell!=`function`?{...e,masked:!0,cell:Ho}:r&&e.masked!==!0?{...e,masked:!0}:e});return e.every((e,t)=>e===gt[t])?gt:e},[gt,U,vt]),bt=Q.useMemo(()=>JSON.stringify(yt.flatMap(e=>{if(!e||typeof e!=`object`||e.masked===!0)return[];let t=Uo(e);return t?[t]:[]})),[yt]),xt=Wo(bt),St=Q.useMemo(()=>{if(K||!ie)return P;let e=ie.toLowerCase(),t=Wo(bt);return P.filter(n=>t.some(t=>{let r=n?.[t];return r!=null&&String(r).toLowerCase().includes(e)}))},[P,ie,K,bt]),Ct=Q.useMemo(()=>{if(K||!B||!Wo(bt).includes(B))return St;let e=Se[B],t=St.map(t=>({row:t,key:At(t[B],{labels:e})}));return t.sort((e,t)=>{let n=Xn(e.key,t.key);return re===`asc`?n:-n}),t.map(e=>e.row)},[St,B,re,K,Se,bt]),wt=ke&&!K?Ct.slice(R*ke,(R+1)*ke):Ct,Tt=ke?K?oe==null?R+(ce?2:1):Math.max(1,Math.ceil(oe/ke)):Math.max(1,Math.ceil(Ct.length/ke)):1,Dt=K?oe==null?ce:(R+1)*ke<oe:R<Tt-1,kt=ke>0&&(K?R>0||Dt:Ct.length>ke);Q.useEffect(()=>{z(0)},[ie,B,re]);let jt=Q.useCallback(e=>{Wo(bt).includes(e)&&(z(0),B===e?H(e=>e===`asc`?`desc`:`asc`):(V(e),H(`asc`)))},[B,bt]),Mt=Q.useMemo(()=>B?[{field:B,order:re}]:Fe,[B,re,Fe]),Nt=Q.useCallback(e=>{let t=e[0];t&&Wo(bt).includes(t.field)&&(z(0),V(t.field),H(t.order))},[bt]),Ft=!i&&(t===`grid`||t===`table`),It=Array.isArray(h)&&h.length>0,Lt=!!f||!!p||It,zt=de(),Bt=Q.useMemo(()=>{if(i)return i;if(zt&&(t===`grid`||t===`table`)){let e=ft[0]?.accessorKey||Pt(ft[0]),t=ft.slice(1,4).map(e=>e.accessorKey||Pt(e)).filter(Boolean);return{type:`object-gallery`,data:wt,objectName:n,gallery:{titleField:e||`name`,visibleFields:t,coverField:Vo,cardSize:`medium`},onRowClick:m}}let e=an(U?.userActions?.edit),r=an(U?.userActions?.delete);switch(t){case`grid`:case`table`:return{type:`data-table`,data:wt,columns:yt,pagination:!1,pageSize:ke||10,searchable:!1,exportable:!1,manualSorting:!0,sort:Mt,onSortChange:Nt,rowActions:Lt,onRowEdit:f,onRowDelete:p?lt:void 0,rowEditPredicates:e,rowDeletePredicates:r,onRowClick:m,rowActionDefs:It?h:void 0,onRowActionDef:It?g:void 0};case`list`:return{type:`data-list`,data:wt};default:return{type:`div`,children:`No view configured`}}},[t,wt,yt,ft,i,ke,Lt,It,h,g,f,p,lt,m,zt,n,U,Mt,Nt]),Vt=k?`cursor-pointer select-none`:void 0,Ht=k?()=>pe(e=>!e):void 0,Ut=Ro(ee),Wt=K&&oe!=null?oe:P.length,Gt=!I&&P.length===0&&(!K||R===0),qt=O;return We?(0,$.jsxs)(Ot,{className:q(`shadow-none border-border/60 bg-transparent`,o),children:[(0,$.jsx)(F,{className:`py-3 px-4 sm:py-3 min-h-12 sm:min-h-0`,children:(0,$.jsxs)(Ce,{className:`flex items-center gap-2 text-sm font-semibold`,children:[(0,$.jsx)(Ut,{className:`h-4 w-4 text-muted-foreground shrink-0`,"aria-hidden":!0}),(0,$.jsx)(`span`,{className:`truncate`,children:e})]})}),(0,$.jsx)(E,{className:`pt-0 pb-4 px-4`,children:(0,$.jsxs)(`div`,{role:`alert`,className:`rounded-md border border-amber-300 bg-amber-50 p-3 text-sm text-amber-800`,"data-testid":`related-list-malformed-filter`,children:[(0,$.jsx)(`p`,{className:`font-medium`,"data-testid":`related-list-malformed-filter-subject`,children:G(`view.malformedFilter`,{subject:Cn(We)??``})}),(0,$.jsx)(`p`,{className:`mt-1 text-xs opacity-80`,children:We.message})]})})]}):(0,$.jsxs)(Ot,{className:q(`shadow-none border-border/60 bg-transparent`,Gt&&`bg-muted/10`,o),children:[(0,$.jsx)(F,{className:q(`py-3 px-4 sm:py-3 min-h-12 sm:min-h-0`,Vt),onClick:Ht,children:(0,$.jsxs)(Ce,{className:`flex items-center justify-between gap-2 text-sm font-semibold`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2 min-w-0`,children:[k&&(fe?(0,$.jsx)(Gr,{className:`h-3.5 w-3.5 text-muted-foreground shrink-0`}):(0,$.jsx)(Ur,{className:`h-3.5 w-3.5 text-muted-foreground shrink-0`})),(0,$.jsx)(Ut,{className:`h-4 w-4 text-muted-foreground shrink-0`,"aria-hidden":!0}),(0,$.jsx)(`span`,{className:q(`truncate`,Gt&&`text-muted-foreground font-medium`),children:e}),(0,$.jsx)($e,{variant:`secondary`,className:q(`text-xs font-normal h-5 px-1.5`,Wt===0&&`bg-muted text-muted-foreground`),"aria-label":`${Wt} records`,children:Wt}),Gt&&(0,$.jsx)(`span`,{className:`text-xs text-muted-foreground/70 italic ml-1 truncate`,children:G(`detail.noRelatedRecords`)})]}),(0,$.jsxs)(`div`,{className:`flex items-center gap-1 shrink-0`,children:[v&&Oe.map(e=>(0,$.jsx)(Jo,{action:e,onToolbarAction:v},e.name)),b&&X&&s&&(0,$.jsxs)(Z,{variant:Gt?`ghost`:`outline`,size:`sm`,disabled:ge,onClick:e=>{e.stopPropagation(),be(null),he(!0)},className:`gap-1 h-9 sm:h-7 text-xs shadow-none`,children:[(0,$.jsx)(Oi,{className:`h-3.5 w-3.5`}),b.label||G(`detail.add`,{defaultValue:`Add`})]}),l&&(0,$.jsxs)(Z,{variant:Gt?`ghost`:`outline`,size:`sm`,disabled:u,"data-testid":`related-list-new`,onClick:e=>{e.stopPropagation(),l()},className:`gap-1 h-9 sm:h-7 text-xs shadow-none`,children:[(0,$.jsx)(Oi,{className:`h-3.5 w-3.5`}),G(`detail.new`)]})]})]})}),!fe&&!Gt&&(0,$.jsxs)(E,{className:q(`pt-0 pb-4 px-4`),children:[qt&&(0,$.jsx)(`div`,{className:`mb-3`,children:(0,$.jsx)(at,{placeholder:G(`detail.filterPlaceholder`),value:ie,onChange:e=>ae(e.target.value),className:`h-8 text-sm`})}),T&&!Ft&&ft&&ft.length>0&&P.length>0&&(0,$.jsx)(`div`,{className:`flex flex-wrap gap-1 mb-3`,children:ft.map(e=>{let t=e.accessorKey||Pt(e);if(!t)return null;let n=U?.fields?.[t];if(K&&mt(t,n)||!xt.includes(t))return null;let r=e.header||e.label||t,i=B===t;return(0,$.jsxs)(Z,{variant:i?`secondary`:`ghost`,size:`sm`,className:`gap-1 h-7 text-xs`,onClick:()=>jt(t),children:[(0,$.jsx)(Fr,{className:`h-3 w-3`}),r,i&&(re===`asc`?` ↑`:` ↓`)]},t)})}),I&&P.length===0?(0,$.jsx)(`div`,{className:`flex items-center justify-center py-6 text-muted-foreground text-sm`,children:G(`detail.loading`)}):(0,$.jsx)(`div`,{className:q(I&&`opacity-60 pointer-events-none transition-opacity`),children:(0,$.jsx)(Kn,{schema:Bt})}),kt&&(0,$.jsxs)(`div`,{className:`flex items-center justify-between mt-3 pt-3 border-t`,children:[(0,$.jsxs)(Z,{variant:`outline`,size:`sm`,className:`h-7 text-xs gap-1`,disabled:R===0,onClick:()=>z(e=>Math.max(0,e-1)),children:[(0,$.jsx)(Wr,{className:`h-3 w-3`}),G(`detail.previousPage`)]}),(0,$.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:G(`detail.pageOf`,{current:R+1,total:Tt})}),(0,$.jsxs)(Z,{variant:`outline`,size:`sm`,className:`h-7 text-xs gap-1`,disabled:!Dt,onClick:()=>z(e=>Dt?e+1:e),children:[G(`detail.nextPage`),(0,$.jsx)(Gr,{className:`h-3 w-3`})]})]}),d&&!Gt&&kt&&(0,$.jsx)(`div`,{className:`mt-3 pt-3 border-t flex justify-center`,children:(0,$.jsxs)(`button`,{type:`button`,onClick:e=>{e.stopPropagation(),d()},className:`text-xs text-muted-foreground hover:text-foreground inline-flex items-center gap-1 transition-colors`,children:[G(`detail.viewAll`),(0,$.jsx)(ai,{className:`h-3 w-3`})]})})]}),(0,$.jsx)(Ye,{open:st!==null,onOpenChange:e=>{e||ct(null)},children:(0,$.jsxs)(Be,{children:[(0,$.jsxs)(He,{children:[(0,$.jsx)(Ve,{children:G(`detail.deleteRowTitle`,{defaultValue:`Delete record`})}),(0,$.jsx)(rt,{children:G(`detail.deleteRowConfirmation`)})]}),(0,$.jsxs)(Ze,{children:[(0,$.jsx)(Ie,{children:G(`detail.cancel`,{defaultValue:`Cancel`})}),(0,$.jsx)(ht,{onClick:ut,className:`bg-destructive text-destructive-foreground hover:bg-destructive/90`,children:G(`detail.delete`,{defaultValue:`Delete`})})]})]})}),ye&&(0,$.jsx)(`div`,{className:`mx-4 mb-3 rounded-md border border-destructive/40 bg-destructive/10 px-3 py-2 text-xs text-destructive`,role:`alert`,children:ye}),b&&X&&s&&(0,$.jsx)(Et,{open:me,onOpenChange:e=>he(e),multiple:!0,dataSource:s,objectName:X,title:b.label||G(`detail.add`,{defaultValue:`Add`}),displayField:it,columns:ot,cellRenderer:nt,fieldsMeta:et?.fields,baseFilter:b.picker.filter,onSelect:()=>{},onSelectRecords:e=>{dt(e)}})]})};function Xo(e){return e==null?[]:Array.isArray(e)?e.filter(e=>e!=null):[e]}function Zo(e,t={}){let n={};for(let e of Object.keys(t))t[e]!==void 0&&(n[e]=t[e]);return Object.keys(n).length>0?{type:e,properties:n}:{type:e}}function Qo(e,t){if(!e||!t)return null;let n=e.fields?.[t]?.options;return!Array.isArray(n)||n.length===0?null:n.map(e=>({value:e.value,label:e.label}))}function $o(e){return qt(e)??null}function es(e,t,n=4){if(!e)return[];let r=Array.isArray(e.highlightFields)&&e.highlightFields.length>0?e.highlightFields:null;if(r){let t=$o(e);return r.filter(e=>typeof e==`string`&&e.length>0&&e!==t).slice(0,n)}let i=new Set([`id`,`_id`,`created_at`,`updated_at`,`deleted_at`,`created_by`,`updated_by`,`deleted_by`,`organization_id`,`workspace_id`,`tenant_id`,`org_id`]);t&&i.add(t);for(let t of[`name`,`full_name`,`title`,`subject`,`display_name`])t in(e.fields||{})&&i.add(t);let a=[`owner`,`owner_id`,`amount`,`rating`,`source`,`priority`,`industry`,`phone`,`email`,`close_date`,`due_date`,`start_date`,`expected_close_date`,`account`,`account_id`,`contact`,`contact_id`],o=new Set([`currency`,`number`,`integer`,`decimal`,`percent`,`date`,`datetime`,`time`,`reference`,`lookup`,`user`,`select`,`enum`,`multiselect`,`status`,`email`,`phone`,`url`,`text`,`string`]),s=[],c=e.fields||{},l=e=>{let t=c[e]?.type;return typeof t!=`string`||!vr(t)?!1:(fn(t),!0)},u=$o(e);u&&(l(u),i.add(u));for(let e of a)if(e in c&&!i.has(e)&&!l(e)&&s.push(e),s.length>=n)return s;for(let e of Object.keys(c)){if(s.includes(e)||i.has(e)||l(e))continue;let t=c[e]?.type;if((!t||o.has(t))&&(s.push(e),s.length>=n))break}return s}function ts(e,t={}){return Zo(`page:header`,{recordChrome:t.recordChrome!==!1,...Array.isArray(t.actions)&&t.actions.length>0?{actions:t.actions}:{}})}function ns(e,t={}){let n=t.statusField??dr(e),r=t.stages??(n?Qo(e,n):null),i=t.highlightFields??es(e,n),a=[];return!t.hideHighlights&&i.length>0&&a.push(Zo(`record:highlights`,{fields:i})),!t.hidePath&&n&&r&&r.length>0&&a.push(Zo(`record:path`,{statusField:n,stages:r})),a}function rs(e){if(!e)return null;let t=s(e);if(!t)return null;let n=e.fields||{},r=e=>{let t=n[e]||{};return{name:e,label:t.label||e,type:t.type||`text`,...t.options?{options:t.options}:{},...t.reference?{reference_to:t.reference}:{},...t.reference_field?{reference_field:t.reference_field}:{},...t.currency?{currency:t.currency}:{},...t.currencyConfig?{currencyConfig:t.currencyConfig}:{}}},i=ya(t.reduce((e,t)=>e+t.fields.length,0));return t.map(e=>({...e.key===void 0?{}:{name:e.key,label:e.label??e.key},...e.icon?{icon:e.icon}:{},...e.description?{description:e.description}:{},...e.collapse===`none`?{}:{collapsible:!0},...e.collapse===`collapsed`?{defaultCollapsed:!0}:{},columns:i,fields:e.fields.map(r)}))}function is(e,t){return Array.isArray(t)&&t.length>0?t:rs(e)??void 0}function as(e,t,n){return Zo(`record:details`,{sections:is(e,t),...n&&n.length>0?{hideFields:n}:{}})}function os(e,t={}){let n=t.statusField??dr(e),r=t.highlightFields??es(e,n),i=[{label:`Details`,value:`details`,children:[as(e,t.sections,r)]}];if(!t.hideRelatedTab&&Array.isArray(t.related)&&t.related.length>0){let e=e=>Zo(`record:related_list`,{title:e.title,objectName:e.objectName,relationshipField:e.relationshipField,...e.columns?{columns:e.columns}:{},...e.limit?{limit:e.limit}:{},...e.icon?{icon:e.icon}:{},...e.sort?{sort:e.sort}:{},...e.filter?{filter:e.filter}:{}}),n=t=>({label:t.title||t.objectName,value:`related:${t.objectName}`,...t.icon?{icon:t.icon}:{},children:[e(t)]});if(t.relatedLayout===`tabs`)for(let e of t.related)i.push(n(e));else if(t.relatedLayout===`stack`)i.push({label:`Related`,value:`related`,children:t.related.map(e)});else{let r=t.related.filter(e=>e.isPrimary),a=t.related.filter(e=>!e.isPrimary);for(let e of r)i.push(n(e));a.length>0&&i.push({label:`Related`,value:`related`,children:a.map(e)})}}return t.approvals&&i.push({label:`Approvals`,value:`approvals`,...t.approvals.count==null?{}:{count:t.approvals.count},children:[Zo(`record:approvals`,{...t.approvals.node||{}})]}),e?.enable?.files===!0&&!t.hideAttachments&&i.push({label:`Attachments`,value:`attachments`,children:[cs()]}),t.showActivity&&i.push({label:`Activity`,value:`activity`,children:[Zo(`record:activity`)]}),t.history&&i.push({label:`History`,value:`history`,children:[Zo(`record:history`,{entries:t.history.entries,loading:t.history.loading,emptyText:t.history.emptyText,unknownUserText:t.history.unknownUserText})]}),Zo(`page:tabs`,{items:i})}function ss(){return Zo(`record:discussion`)}function cs(){return Zo(`record:attachments`)}function ls(e,t={}){let n=t.slots||{},r=[];`header`in n&&n.header!==void 0?r.push(...Xo(n.header)):r.push(ts(e,{recordChrome:t.recordChrome,actions:t.headerActions})),`actions`in n&&n.actions!==void 0&&r.push(...Xo(n.actions)),`alerts`in n&&n.alerts!==void 0&&r.push(...Xo(n.alerts)),`highlights`in n&&n.highlights!==void 0?r.push(...Xo(n.highlights)):r.push(...ns(e,{highlightFields:t.highlightFields,statusField:t.statusField,stages:t.stages,hideHighlights:t.hideHighlights,hidePath:t.hidePath}));let i=t.showReferenceRail===!0&&!t.hideReferenceRail&&Array.isArray(t.related)&&t.related.length>=2,a=t.hideRelatedTab??i;if(`tabs`in n&&n.tabs!==void 0)r.push(...Xo(n.tabs));else if(`details`in n&&n.details!==void 0){let i=Xo(n.details),o=os(e,{sections:t.sections,related:t.related,showActivity:t.showActivity,history:t.history,approvals:t.approvals,highlightFields:t.highlightFields,statusField:t.statusField,hideRelatedTab:a,relatedLayout:t.relatedLayout,hideAttachments:t.hideAttachments}),s=o.properties?.items;Array.isArray(s)&&s.length>0&&(s[0]={...s[0],children:i}),r.push(o)}else r.push(os(e,{sections:t.sections,related:t.related,showActivity:t.showActivity,history:t.history,approvals:t.approvals,highlightFields:t.highlightFields,statusField:t.statusField,hideRelatedTab:a,relatedLayout:t.relatedLayout,hideAttachments:t.hideAttachments}));`discussion`in n&&n.discussion!==void 0?r.push(...Xo(n.discussion)):t.hideDiscussion||r.push(ss());let o=[{name:`main`,width:`full`,components:r}],s=Xo(n.rightRail);if(i||s.length>0){let e=[];i&&e.push(Zo(`record:reference_rail`,{entries:t.related.map(e=>({objectName:e.objectName,relationshipField:e.relationshipField,title:e.title,displayField:e.displayField,limit:3}))})),s.length>0&&e.push(...s),o.push({name:`aside`,width:`small`,className:`hidden xl:flex flex-col gap-4`,components:e})}return{type:`record`,pageType:`record`,object:e?.name,template:`full-width`,regions:o}}function us(e,t){return!e||t?.label===void 0?null:`[ObjectUI] ${e} accessible name: \`aria.label\` is not read. The spec's AriaPropsSchema refuses that spelling (it is the alias of \`aria.ariaLabel\`), so this block announces its \`aria.ariaLabel\` when one is declared and its default name otherwise. Declare the name as \`aria.ariaLabel\`.`}function ds(e,{block:t}={}){let n=kr(),r=us(t,e);return(0,Q.useEffect)(()=>{r&&console.warn(r)},[r]),u(e?.ariaLabel,n)}function fs(e,{defaultRole:t,defaultLabel:n,block:r}={}){let i=ds(e,{block:r})||n,a=e?.ariaDescribedBy||void 0,o=e?.role||t||(i||a?`region`:void 0);return{...i?{"aria-label":i}:{},...a?{"aria-describedby":a}:{},...o?{role:o}:{}}}var ps=e=>Pt(e)??null;function ms(e){return e===void 0?void 0:Number(e)}var hs=e=>{let{"data-obj-id":t,"data-obj-type":n,style:r,...i}=e||{};return{designer:{"data-obj-id":t,"data-obj-type":n,style:r},rest:i}},gs=new Set;function _s(e,t){let n=`${e}.${t}`;gs.has(n)||(gs.add(n),console.error(`[record:details] section group "${t}" is not declared in fieldGroups on object "${e}" — the section renders nothing. Declare the group on the object, or enumerate \`fields\` on the section. (\`@objectstack/lint\` reports this as \`page-section-group-unknown\`.)`))}var vs=({schema:e={},className:t,...n})=>{let r=gn(),{designer:i}=hs(n),a=fs(e.aria),o=r?.objectName||``,s=y(),{readableFields:c}=me(o),{sectionLabel:l}=Or(),{language:u}=Ar(),d=_r();if(!r)return(0,$.jsx)(`div`,{className:t,"data-record-details-placeholder":!0,...i,children:(0,$.jsx)(`div`,{className:`text-xs text-muted-foreground italic px-3 py-2 border border-dashed rounded`,children:`record:details — bind a record to preview`})});let f=Array.isArray(e.requiredPermissions)?e.requiredPermissions:[];if(f.length>0&&!s.hasCapabilities(f))return(0,$.jsx)(`div`,{className:t,...i,role:`status`,"aria-live":`polite`,children:(0,$.jsx)(`p`,{className:`text-sm text-muted-foreground italic`,children:`Insufficient permissions to view details.`})});let p=e.enforceFieldSecurity===!0,m=Array.isArray(e.redactFields)?e.redactFields:[],h=e=>{if(!e||!p&&m.length===0)return e;let t=e.map(ps).filter(e=>!!e),n=new Set((p&&o?c(t):t).filter(e=>!m.includes(e)));return e.filter(e=>{let t=ps(e);return t?n.has(t):!1})},g=r.objectSchema,_=g?.fields,v=e=>{if(!e||typeof e!=`object`||typeof e.name!=`string`||e.label!==void 0)return e;let t=_?.[e.name]?.label;if(t==null)return e;let n=Dr(t,u);return n?{...e,label:n}:e},b=e=>typeof e==`string`?v({name:e}):e&&typeof e==`object`&&!e.name&&e.field?v({...e,name:e.field}):v(e),x=e=>Array.isArray(e)?e.map(b):e,S=new Set((Array.isArray(e.hideFields)?e.hideFields:[]).map(e=>typeof e==`string`?e:ps(e)).filter(e=>!!e));for(let e of d)S.add(e);let C=kt(r.data??{},s,o),w=[qt(g),Xt(g),`name`,`full_name`,`title`,`subject`,`display_name`,`label`].filter(e=>typeof e==`string`&&e.length>0),T=Yn(g);if(Wt(C,T)!==void 0)S.add(T);else{let e=g?.titleFormat,t=$t(e,C);if(t){let n=e=>Wt(C,e)===t,r=w.find(n)??Object.keys(C).find(r=>n(r)&&$t(e,{...C,[r]:void 0})!==t);r&&S.add(r)}else for(let e of w)if(Wt(C,e)!==void 0){S.add(e);break}}let E=e=>!e||S.size===0?e:e.filter(e=>{let t=ps(e);return!t||!S.has(t)}),D=E(x(h(e.fields))),O=Array.isArray(e.sections)?e.sections:[],k=new Map;if(O.some(e=>e&&typeof e==`object`&&typeof e.group==`string`))for(let e of rs(g)??[])typeof e.name==`string`&&k.set(e.name,e);let A=Array.isArray(e.sections)?e.sections.map(e=>{if(!e||typeof e!=`object`||typeof e.group!=`string`)return e;let t=k.get(e.group);if(!t)return _s(o,e.group),null;let{group:n,...r}=e;return{...t,...r}}).filter(e=>e!=null).map(e=>{let t=e.label,n=t==null?void 0:Dr(t,u),r=e.name&&o?l(o,e.name,n??e.name):n;return{...e,title:r,showBorder:e.showBorder??!!r,hideEmpty:e.hideEmpty??!0,fields:E(x(h(e.fields)))}}):e.sections,j=Yt(g,s?.getObjectApiOperations?.(o)),M=(e.inlineEdit??!0)&&j,ee={type:`detail-view`,objectName:r.objectName,resourceId:r.recordId,data:r.data,layout:`vertical`,columns:ms(e.columns),sections:A,fields:D,showBack:!1,showHeader:e.showHeader??!1,inlineEdit:M};return(0,$.jsx)(`div`,{className:t,...i,...a,children:(0,$.jsx)(Fo,{schema:ee,dataSource:r.dataSource,inlineEdit:M})})},ys=e=>Pt(e)||(e&&typeof e==`object`?e.key:null)||null,bs=e=>e?.id??e?._id??null,xs=5,Ss=e=>{let{"data-obj-id":t,"data-obj-type":n,style:r,...i}=e||{};return{designer:{"data-obj-id":t,"data-obj-type":n,style:r},rest:i}},Cs=({schema:e={},className:t,...n})=>{let r=gn(),{designer:i}=Ss(n),a=fs(e.aria),o=Or(),{language:s}=Ar(),c=e.objectName,l=c&&o.objectLabel?o.objectLabel({name:c,label:Jt(c)}):c?Jt(c):``,u=Dr(e.title,s)||l||`Related`,d=y(),{readableFields:f}=me(c||``),p=e.relationshipValueField||`id`,m=p===`id`?r?.recordId??null:r?.data?.[p]??null,h=rn(),g=Q.useMemo(()=>c?h?.resolve({objectName:c,relationshipField:e.relationshipField,parentId:m})??null:null,[h,c,e.relationshipField,m]);if(!c)return(0,$.jsx)(`div`,{className:t,...i,children:(0,$.jsx)(`div`,{className:`text-xs text-muted-foreground italic px-3 py-2 border border-dashed rounded`,children:`record:related_list — missing objectName`})});if(d.isLoaded&&!d.can(c,`read`))return null;let _=Array.isArray(e.requiredPermissions)?e.requiredPermissions:[];if(_.length>0&&!d.hasCapabilities(_))return(0,$.jsx)(`div`,{className:t,...i,role:`status`,"aria-live":`polite`,children:(0,$.jsx)(`p`,{className:`text-sm text-muted-foreground italic`,children:`Insufficient permissions to view related list.`})});let v=e.enforceFieldSecurity===!0,b=Array.isArray(e.redactFields)?e.redactFields:[],x=Array.isArray(e.columns)?e.columns:[],S=x;if(v||b.length>0){let e=x.map(ys).filter(e=>!!e),t=new Set((v?f(e):e).filter(e=>!b.includes(e)));S=x.filter(e=>{let n=ys(e);return n?t.has(n):!1})}return(0,$.jsx)(`div`,{className:t,...i,...a,children:(0,$.jsx)(Yo,{title:u,type:`table`,api:c,objectName:c,referenceField:e.relationshipField,parentId:m,columns:S,redactFields:b.length>0?b:void 0,pageSize:typeof e.limit==`number`&&e.limit>0?e.limit:xs,defaultSort:e.sort,filter:e.filter,dataSource:r?.dataSource,add:e.add?{...e.add,label:Dr(e.add.label,s)||void 0}:void 0,rowActions:g?.rowActions,onRowAction:g?.onRowAction,toolbarActions:g?.toolbarActions,onToolbarAction:g?.onToolbarAction,onNew:g?.onCreate,newDisabled:g?.createDisabled,onRowClick:g?.onView?e=>{let t=bs(e);t!=null&&g.onView(t,e)}:void 0,onRowEdit:g?.onEdit?e=>{let t=bs(e);t!=null&&g.onEdit(t,e)}:void 0,onRowDelete:g?.onDelete?e=>{let t=bs(e);if(t!=null)return g.onDelete(t,e)}:e.add&&r?.dataSource?async e=>{let t=e?.id??e?._id;t!=null&&await r?.dataSource?.delete?.(c,String(t))}:void 0})})},ws={columns:!0,filter:!0,sort:!0,limit:`limit`},Ts={},Es=bn(e=>{let t=gn();return(0,$.jsx)(Qn,{schema:e.schema??Ts,mapping:ws,dataSource:t?.dataSource,testId:`record-related-list`,errorTitle:`This related list’s data source could not be resolved`,children:t=>(0,$.jsx)(Cs,{...e,schema:t})})}),Ds=e=>{let{"data-obj-id":t,"data-obj-type":n,style:r,...i}=e||{};return{designer:{"data-obj-id":t,"data-obj-type":n,style:r},rest:i}},Os=({schema:e={},className:t,...n})=>{let r=gn(),{designer:i}=Ds(n),a=fs(e.aria),o=r?.objectName||``,s=y(),{readableFields:c}=me(o),l=Array.isArray(e.requiredPermissions)?e.requiredPermissions:[],u=l.length===0||s.hasCapabilities(l),d=(Array.isArray(e.fields)?e.fields:[]).map(e=>typeof e==`string`?{name:e}:{name:e?.name,label:e?.label,type:e?.type,readonly:e?.readonly===!0}).filter(e=>typeof e.name==`string`&&e.name.length>0),f=e.enforceFieldSecurity===!0,p=Array.isArray(e.redactFields)?e.redactFields:[],m=f&&o?new Set(c(d.map(e=>e.name))):null,h=d.filter(e=>!(p.includes(e.name)||m&&!m.has(e.name))),g=Q.useId();return zt(g,u?h.map(e=>e.name):[]),u?(0,$.jsx)(`div`,{className:t,...i,...a,children:(0,$.jsx)(Xa,{fields:h,data:r?.data,objectName:r?.objectName,objectSchema:r?.objectSchema,dataSource:r?.dataSource})}):(0,$.jsx)(`div`,{className:t,...i,role:`status`,"aria-live":`polite`,children:(0,$.jsx)(`p`,{className:`text-sm text-muted-foreground italic`,children:`Insufficient permissions to view highlights.`})})},ks=({change:e,className:t})=>{let n=e.fieldLabel??e.field.charAt(0).toUpperCase()+e.field.slice(1).replace(/_/g,` `),r=e.oldDisplayValue??(e.oldValue==null?`(empty)`:String(e.oldValue)),i=e.newDisplayValue??(e.newValue==null?`(empty)`:String(e.newValue));return(0,$.jsxs)(`div`,{className:q(`flex items-center gap-1.5 text-sm flex-wrap`,t),children:[(0,$.jsx)(`span`,{className:`font-medium text-foreground`,children:n}),(0,$.jsx)(`span`,{className:`text-muted-foreground line-through`,children:r}),(0,$.jsx)(Pr,{className:`h-3 w-3 text-muted-foreground shrink-0`}),(0,$.jsx)(`span`,{className:`text-foreground`,children:i})]})},As=[`👍`,`❤️`,`🎉`,`😂`,`😮`,`😢`],js=({reactions:e,onToggleReaction:t,emojiOptions:n=As,className:r})=>{let[i,a]=Q.useState(!1),{t:o}=Sa(),s=Q.useCallback(e=>{t?.(e),a(!1)},[t]);return(0,$.jsxs)(`div`,{className:q(`flex items-center gap-1 flex-wrap`,r),children:[e.map(e=>{let n=o(e.count===1?`detail.reactionCountOne`:`detail.reactionCount`,{emoji:e.emoji,count:e.count});return(0,$.jsxs)(`button`,{type:`button`,className:q(`inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-xs border transition-colors`,e.reacted?`bg-primary/10 border-primary/30 text-primary`:`bg-muted border-border text-muted-foreground hover:bg-muted/80`),onClick:()=>s(e.emoji),disabled:!t,"aria-label":n,children:[(0,$.jsx)(`span`,{children:e.emoji}),(0,$.jsx)(`span`,{children:e.count})]},e.emoji)}),t&&(0,$.jsxs)(`div`,{className:`relative`,children:[(0,$.jsx)(Z,{variant:`ghost`,size:`icon`,className:`h-6 w-6`,onClick:()=>a(!i),"aria-label":o(`detail.addReaction`),children:(0,$.jsx)(ci,{className:`h-3.5 w-3.5`})}),i&&(0,$.jsx)(`div`,{className:`absolute bottom-full mb-1 left-0 bg-popover border rounded-md shadow-md z-50 p-1.5 flex gap-1`,role:`listbox`,"aria-label":o(`detail.emojiPicker`),children:n.map(t=>(0,$.jsx)(`button`,{type:`button`,className:`hover:bg-accent rounded p-1 text-base transition-colors`,onClick:()=>s(t),role:`option`,"aria-selected":e.some(e=>e.emoji===t&&e.reacted),children:t},t))})]})]})};function Ms(e,t,n){try{let r=new Date(e),i=new Date().getTime()-r.getTime(),a=Math.floor(i/6e4);if(a<1)return t(`detail.justNow`);if(a<60)return t(`detail.minutesAgo`,{count:a});let o=Math.floor(a/60);if(o<24)return t(`detail.hoursAgo`,{count:o});let s=Math.floor(o/24);return s<7?t(`detail.daysAgo`,{count:s}):r.toLocaleDateString(n)}catch{return e}}var Ns=({parentItem:e,replies:t,onAddReply:n,showReplyInput:r=!0,className:i})=>{let{t:a}=Sa(),o=kr(),[s,c]=Q.useState(!1),[l,u]=Q.useState(``),[d,f]=Q.useState(!1),p=Q.useCallback(async()=>{let t=l.trim();if(t&&n){f(!0);try{await n(e.id,t),u(``)}finally{f(!1)}}},[l,n,e.id]),m=Q.useCallback(e=>{e.key===`Enter`&&(e.ctrlKey||e.metaKey)&&(e.preventDefault(),p())},[p]);return t.length===0&&!r?null:(0,$.jsxs)(`div`,{className:q(`ml-10 mt-1`,i),children:[t.length>0&&(0,$.jsxs)(`button`,{type:`button`,className:`flex items-center gap-1 text-xs text-muted-foreground hover:text-foreground transition-colors mb-1`,onClick:()=>c(!s),"aria-expanded":s,children:[s?(0,$.jsx)(Ur,{className:`h-3 w-3`}):(0,$.jsx)(Gr,{className:`h-3 w-3`}),(0,$.jsx)(xi,{className:`h-3 w-3`}),(0,$.jsx)(`span`,{children:t.length===1?a(`detail.replyCount`,{count:t.length}):a(`detail.replyCountPlural`,{count:t.length})})]}),s&&(0,$.jsx)(`div`,{className:`space-y-2 border-l-2 border-border pl-3`,children:t.map(e=>(0,$.jsxs)(`div`,{className:`flex gap-2`,children:[(0,$.jsx)(`div`,{className:`shrink-0`,children:e.actorAvatarUrl?(0,$.jsx)(`img`,{src:e.actorAvatarUrl,alt:e.actor,className:`h-6 w-6 rounded-full object-cover`}):(0,$.jsx)(`div`,{className:`h-6 w-6 rounded-full bg-muted flex items-center justify-center text-[10px] font-medium text-muted-foreground`,children:e.actor.charAt(0).toUpperCase()})}),(0,$.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,$.jsx)(`span`,{className:`text-xs font-medium`,children:e.actor}),(0,$.jsx)(`span`,{className:`text-[10px] text-muted-foreground`,children:Ms(e.createdAt,a,o)})]}),(0,$.jsx)(`p`,{className:`text-xs whitespace-pre-wrap break-words`,children:e.body})]})]},e.id))}),r&&n&&(0,$.jsxs)(`div`,{className:`flex gap-1.5 mt-1.5`,children:[(0,$.jsx)(`input`,{className:`flex-1 rounded-md border border-input bg-background px-2 py-1 text-xs placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring`,placeholder:a(`detail.replyPlaceholder`),value:l,onChange:e=>u(e.target.value),onKeyDown:m,disabled:d}),(0,$.jsx)(Z,{variant:`ghost`,size:`icon`,className:`h-6 w-6 shrink-0`,onClick:p,disabled:!l.trim()||d,"aria-label":`Send reply`,children:(0,$.jsx)(Pi,{className:`h-3 w-3`})})]})]})},Ps=({subscription:e,onToggle:t,className:n})=>{let{t:r}=Sa(),[i,a]=Q.useState(!1),o=Q.useCallback(async()=>{if(t){a(!0);try{await t(!e.subscribed)}finally{a(!1)}}},[t,e.subscribed]);return(0,$.jsx)(Z,{variant:`ghost`,size:`icon`,className:q(`h-8 w-8`,n),onClick:o,disabled:i||!t,"aria-label":e.subscribed?r(`detail.unsubscribeAriaLabel`):r(`detail.subscribeAriaLabel`),title:e.subscribed?r(`detail.subscribedTooltip`):r(`detail.unsubscribedTooltip`),children:e.subscribed?(0,$.jsx)(zr,{className:`h-4 w-4 text-primary`}):(0,$.jsx)(Rr,{className:`h-4 w-4 text-muted-foreground`})})};function Fs(e){let t=e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/```([\s\S]*?)```/g,`<pre class="bg-muted rounded p-2 text-xs font-mono my-1 overflow-x-auto">$1</pre>`).replace(/`([^`]+)`/g,`<code class="bg-muted rounded px-1 py-0.5 text-xs font-mono">$1</code>`).replace(/\*\*(.+?)\*\*/g,`<strong>$1</strong>`).replace(/\*(.+?)\*/g,`<em>$1</em>`).replace(/@(\w+)/g,`<span class="text-primary font-medium">@$1</span>`).replace(/^- (.+)$/gm,`<li class="ml-4 list-disc">$1</li>`).replace(/\n/g,`<br/>`);return t=t.replace(/(<li[^>]*>.*?<\/li>(?:<br\/>)?)+/g,e=>`<ul class="my-1">${e.replace(/<br\/>/g,``)}</ul>`),t}var Is=({value:e,onChange:t,onSubmit:n,mentionSuggestions:r=[],placeholder:i,className:a,disabled:o=!1,extraSlot:s,canSubmitEmpty:c=!1})=>{let{t:l}=Sa(),[u,d]=Q.useState(!1),[f,p]=Q.useState(!1),[m,h]=Q.useState(``),[g,_]=Q.useState(0),v=Q.useRef(null),y=Q.useMemo(()=>{if(!m)return r;let e=m.toLowerCase();return r.filter(t=>t.label.toLowerCase().includes(e))},[m,r]),b=Q.useCallback((n,r=``)=>{let i=v.current;if(!i)return;let a=i.selectionStart,o=i.selectionEnd,s=e.slice(a,o);t(e.slice(0,a)+n+s+r+e.slice(o)),requestAnimationFrame(()=>{i.focus();let e=a+n.length+s.length;i.setSelectionRange(e,e)})},[e,t]),x=Q.useCallback(()=>b(`**`,`**`),[b]),S=Q.useCallback(()=>b(`*`,`*`),[b]),C=Q.useCallback(()=>b(`
2
- - `,``),[b]),w=Q.useCallback(()=>b("`","`"),[b]),T=Q.useCallback(()=>{b(`@`,``),p(!0),h(``),_(0)},[b]),E=Q.useCallback(n=>{let r=v.current;if(!r)return;let i=r.selectionStart,a=e.slice(0,i).lastIndexOf(`@`);a!==-1&&t(e.slice(0,a)+`@${n.label} `+e.slice(i)),p(!1),h(``),requestAnimationFrame(()=>r.focus())},[e,t]),D=Q.useCallback(e=>{let n=e.target.value;t(n);let r=e.target.selectionStart,i=n.slice(0,r),a=i.lastIndexOf(`@`);if(a!==-1){let e=i.slice(a+1),t=a>0?i[a-1]:` `;if(/\s/.test(t)&&!/\s/.test(e)){p(!0),h(e),_(0);return}}p(!1)},[t]),O=Q.useCallback(e=>{if(f&&y.length>0){if(e.key===`ArrowDown`){e.preventDefault(),_(e=>e<y.length-1?e+1:0);return}if(e.key===`ArrowUp`){e.preventDefault(),_(e=>e>0?e-1:y.length-1);return}if(e.key===`Enter`||e.key===`Tab`){e.preventDefault(),E(y[g]);return}if(e.key===`Escape`){p(!1);return}}e.key===`Enter`&&(e.ctrlKey||e.metaKey)&&(e.preventDefault(),n?.())},[f,y,g,E,n]);return(0,$.jsxs)(`div`,{className:q(`border rounded-md`,a),children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-0.5 px-2 py-1.5 border-b bg-muted/30`,children:[(0,$.jsx)(Z,{variant:`ghost`,size:`icon`,className:`h-7 w-7`,onClick:x,disabled:o||u,title:l(`detail.bold`),children:(0,$.jsx)(Br,{className:`h-3.5 w-3.5`})}),(0,$.jsx)(Z,{variant:`ghost`,size:`icon`,className:`h-7 w-7`,onClick:S,disabled:o||u,title:l(`detail.italic`),children:(0,$.jsx)(gi,{className:`h-3.5 w-3.5`})}),(0,$.jsx)(Z,{variant:`ghost`,size:`icon`,className:`h-7 w-7`,onClick:C,disabled:o||u,title:l(`detail.listFormat`),children:(0,$.jsx)(_i,{className:`h-3.5 w-3.5`})}),(0,$.jsx)(Z,{variant:`ghost`,size:`icon`,className:`h-7 w-7`,onClick:w,disabled:o||u,title:l(`detail.inlineCode`),children:(0,$.jsx)(ti,{className:`h-3.5 w-3.5`})}),(0,$.jsx)(Z,{variant:`ghost`,size:`icon`,className:`h-7 w-7`,onClick:T,disabled:o||u,title:l(`detail.mentionSomeone`),children:(0,$.jsx)(Ir,{className:`h-3.5 w-3.5`})}),(0,$.jsx)(`div`,{className:`flex-1`}),(0,$.jsx)(Z,{variant:`ghost`,size:`icon`,className:`h-7 w-7`,onClick:()=>d(!u),title:l(u?`detail.edit`:`detail.preview`),children:u?(0,$.jsx)(Li,{className:`h-3.5 w-3.5`}):(0,$.jsx)(si,{className:`h-3.5 w-3.5`})}),n&&(0,$.jsx)(Z,{variant:`ghost`,size:`icon`,className:`h-7 w-7`,onClick:n,disabled:o||!c&&!e.trim(),title:l(`detail.submitComment`),children:(0,$.jsx)(Pi,{className:`h-3.5 w-3.5`})})]}),(0,$.jsx)(`div`,{className:`relative`,children:u?(0,$.jsx)(`div`,{className:`min-h-[80px] px-3 py-2 text-sm prose prose-sm max-w-none`,dangerouslySetInnerHTML:{__html:Fs(e)}}):(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`textarea`,{ref:v,className:`w-full min-h-[80px] px-3 py-2 text-sm bg-transparent resize-none focus:outline-none placeholder:text-muted-foreground`,placeholder:i??l(`detail.writeComment`),value:e,onChange:D,onKeyDown:O,disabled:o}),f&&y.length>0&&(0,$.jsx)(`div`,{className:`absolute left-2 bottom-full mb-1 w-56 bg-popover border rounded-md shadow-md z-50 max-h-40 overflow-y-auto`,children:y.map((e,t)=>(0,$.jsxs)(`button`,{type:`button`,className:q(`w-full text-left px-3 py-1.5 text-sm flex items-center gap-2 hover:bg-accent transition-colors`,t===g&&`bg-accent`),onMouseDown:t=>{t.preventDefault(),E(e)},children:[e.avatarUrl?(0,$.jsx)(`img`,{src:e.avatarUrl,alt:e.label,className:`h-5 w-5 rounded-full object-cover`}):(0,$.jsx)(`div`,{className:`h-5 w-5 rounded-full bg-muted flex items-center justify-center text-[10px] font-medium`,children:e.label.charAt(0).toUpperCase()}),(0,$.jsx)(`span`,{children:e.label})]},e.id))})]})}),s&&(0,$.jsx)(`div`,{className:`border-t px-2 py-2 bg-muted/20`,children:s})]})};function Ls(e){return e<1024?`${e} B`:e<1048576?`${(e/1024).toFixed(1)} KB`:`${(e/1048576).toFixed(1)} MB`}function Rs(e){return e.startsWith(`image/`)}function zs(e){return Rs(e)?mi:e.includes(`pdf`)||e.includes(`document`)||e.includes(`text`)?di:e.includes(`zip`)||e.includes(`archive`)||e.includes(`compressed`)?li:fi}var Bs=({attachments:e,onUpload:t,onRemove:n,className:r,readOnly:i=!1})=>{let{t:a}=Sa(),[o,s]=Q.useState(!1),c=Q.useRef(null),l=Q.useCallback(e=>{e.preventDefault(),e.stopPropagation(),s(!0)},[]),u=Q.useCallback(e=>{e.preventDefault(),e.stopPropagation(),s(!1)},[]),d=Q.useCallback(e=>{e.preventDefault(),e.stopPropagation(),s(!1),t&&e.dataTransfer.files.length>0&&t(e.dataTransfer.files)},[t]),f=Q.useCallback(e=>{t&&e.target.files&&e.target.files.length>0&&(t(e.target.files),e.target.value=``)},[t]);return(0,$.jsxs)(`div`,{className:q(`space-y-2`,r),children:[t&&!i&&(0,$.jsxs)(`div`,{className:q(`border-2 border-dashed rounded-md px-4 py-3 text-center transition-colors cursor-pointer`,o?`border-primary bg-primary/5`:`border-muted-foreground/25 hover:border-muted-foreground/40`),onDragOver:l,onDragLeave:u,onDrop:d,onClick:()=>c.current?.click(),role:`button`,tabIndex:0,onKeyDown:e=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),c.current?.click())},children:[(0,$.jsx)(Ki,{className:`h-5 w-5 mx-auto text-muted-foreground mb-1`}),(0,$.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:a(`detail.dropFilesToUpload`)}),(0,$.jsx)(`input`,{ref:c,type:`file`,multiple:!0,className:`hidden`,onChange:f})]}),e.length>0&&(0,$.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-1.5 text-xs text-muted-foreground`,children:[(0,$.jsx)(wi,{className:`h-3 w-3`}),(0,$.jsx)(`span`,{children:e.length===1?a(`detail.attachmentCount`,{count:e.length}):a(`detail.attachmentCountPlural`,{count:e.length})})]}),(0,$.jsx)(`div`,{className:`grid grid-cols-1 sm:grid-cols-2 gap-2`,children:e.map(e=>{let t=Rs(e.type),r=zs(e.type);return(0,$.jsxs)(`div`,{className:`flex items-center gap-2 rounded-md border px-2.5 py-2 bg-muted/30 group`,children:[t&&(e.thumbnailUrl||e.url)?(0,$.jsx)(`img`,{src:e.thumbnailUrl||e.url,alt:e.name,className:`h-10 w-10 rounded object-cover shrink-0`}):(0,$.jsx)(`div`,{className:`h-10 w-10 rounded bg-muted flex items-center justify-center shrink-0`,children:(0,$.jsx)(r,{className:`h-5 w-5 text-muted-foreground`})}),(0,$.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,$.jsx)(`p`,{className:`text-xs font-medium truncate`,children:e.name}),(0,$.jsx)(`p`,{className:`text-[10px] text-muted-foreground`,children:Ls(e.size)})]}),n&&!i&&(0,$.jsx)(Z,{variant:`ghost`,size:`icon`,className:`h-6 w-6 shrink-0 opacity-0 group-hover:opacity-100 transition-opacity`,onClick:()=>n(e.id),title:a(`detail.removeAttachment`),children:(0,$.jsx)(Ji,{className:`h-3.5 w-3.5`})})]},e.id)})})]})]})},Vs={comment:xi,field_change:Li,task:Ii,event:Vr,system:Yi,email:bi,call:Ei,note:zi,file:di,sharing:Fi,record_create:Xr,record_delete:Hi,approval:Lr},Hs={comment:`bg-purple-100 text-purple-600`,field_change:`bg-blue-100 text-blue-600`,task:`bg-green-100 text-green-600`,event:`bg-amber-100 text-amber-600`,system:`bg-gray-100 text-gray-600`,email:`bg-indigo-100 text-indigo-600`,call:`bg-teal-100 text-teal-600`,note:`bg-yellow-100 text-yellow-700`,file:`bg-slate-100 text-slate-600`,sharing:`bg-sky-100 text-sky-600`,record_create:`bg-emerald-100 text-emerald-600`,record_delete:`bg-red-100 text-red-600`,approval:`bg-violet-100 text-violet-600`};function Us(e){return[{value:`all`,label:e(`detail.allActivity`)},{value:`comments_only`,label:e(`detail.commentsOnly`)},{value:`changes_only`,label:e(`detail.fieldChangesFilter`)},{value:`tasks_only`,label:e(`detail.tasksOnly`)}]}function Ws(e,t,n){try{let r=new Date(e),i=new Date().getTime()-r.getTime(),a=Math.floor(i/6e4);if(a<1)return t(`detail.justNow`);if(a<60)return t(`detail.minutesAgo`,{count:a});let o=Math.floor(a/60);if(o<24)return t(`detail.hoursAgo`,{count:o});let s=Math.floor(o/24);return s<7?t(`detail.daysAgo`,{count:s}):r.toLocaleDateString(n)}catch{return e}}function Gs(e,t){switch(t){case`comments_only`:return e.filter(e=>e.type===`comment`);case`changes_only`:return e.filter(e=>e.type===`field_change`);case`tasks_only`:return e.filter(e=>e.type===`task`);default:return e}}var Ks=({items:e,config:t,filterMode:n,onFilterChange:r,hasMore:i=!1,onLoadMore:a,loading:o=!1,onAddComment:s,onAddReply:c,onToggleReaction:l,subscription:u,onToggleSubscription:d,collapseWhenEmpty:f=!1,mentionSuggestions:p,onUploadAttachments:m,titleLabel:h,emptyLabel:g,className:_})=>{let{t:v}=Sa(),y=kr(),[b,x]=Q.useState(`all`),[S,C]=Q.useState(``),[w,T]=Q.useState(!1),[E,D]=Q.useState(!1),[O,k]=Q.useState([]),[A,j]=Q.useState(!1),ee=h??v(`detail.activity`),N=n??b,te=t?.showFilterToggle!==!1,P=t?.showCommentInput!==!1&&!!s,ne=t?.enableReactions??!1,F=t?.enableThreading??!1,I=t?.showSubscriptionToggle??!1,L=Q.useMemo(()=>Gs(e,N),[e,N]),z=Q.useMemo(()=>F?L.filter(e=>!e.parentId):L,[L,F]),B=Q.useMemo(()=>{if(!F)return new Map;let e=new Map;for(let t of L)if(t.parentId){let n=e.get(t.parentId)??[];n.push(t),e.set(t.parentId,n)}return e},[L,F]),V=Q.useCallback(e=>{r?r(e):x(e)},[r]),re=Q.useCallback(async()=>{let e=S.trim();if(s&&(e||O.length!==0)){T(!0);try{await s(e,O.length>0?O:void 0),C(``),k([])}finally{T(!1)}}},[S,O,s]),H=Q.useCallback(async e=>{if(m&&e.length!==0){j(!0);try{let t=await m(e);Array.isArray(t)&&t.length>0&&k(e=>[...e,...t])}finally{j(!1)}}},[m]),ie=Q.useCallback(e=>{k(t=>t.filter(t=>t.id!==e))},[]),oe=Q.useCallback(async()=>{if(a){D(!0);try{await a()}finally{D(!1)}}},[a]);return(0,$.jsxs)(`section`,{className:q(`border-t border-border/60 pt-5`,_),"aria-label":ee,children:[(0,$.jsx)(`header`,{className:`mb-4`,children:(0,$.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,$.jsxs)(`h2`,{className:`flex items-center gap-2 text-base font-semibold leading-none tracking-tight`,children:[(0,$.jsx)(jr,{className:`h-4 w-4`}),ee,(0,$.jsxs)(`span`,{className:`text-sm font-normal text-muted-foreground`,children:[`(`,L.length,`)`]})]}),(0,$.jsx)(`div`,{className:`flex items-center gap-1`,children:I&&u&&(0,$.jsx)(Ps,{subscription:u,onToggle:d})})]})}),(0,$.jsxs)(`div`,{className:`space-y-4`,children:[te&&(0,$.jsx)(`div`,{className:`flex items-center gap-2`,children:(0,$.jsxs)(M,{value:N,onValueChange:e=>V(e),children:[(0,$.jsx)(ve,{"aria-label":v(`detail.filterActivity`),className:`h-8 w-auto min-w-[140px] py-1 text-sm`,children:(0,$.jsx)(Dt,{})}),(0,$.jsx)(R,{children:Us(v).map(e=>(0,$.jsx)(ae,{value:e.value,children:e.label},e.value))})]})}),P&&(0,$.jsx)(Is,{value:S,onChange:C,onSubmit:re,mentionSuggestions:p,placeholder:v(`detail.leaveCommentPlaceholder`),disabled:w,canSubmitEmpty:O.length>0,extraSlot:m?(0,$.jsx)(Bs,{attachments:O,onUpload:H,onRemove:ie,readOnly:w||A}):O.length>0?(0,$.jsx)(Bs,{attachments:O,onRemove:ie,readOnly:w}):void 0}),o&&L.length===0?(0,$.jsxs)(`div`,{role:`status`,"aria-live":`polite`,"data-testid":`activity-loading`,className:`flex items-center justify-center gap-2 py-6 text-sm text-muted-foreground`,children:[(0,$.jsx)(vi,{className:`h-4 w-4 animate-spin`}),(0,$.jsx)(`span`,{children:v(`detail.loading`)})]}):L.length===0?f?null:(0,$.jsx)(Le,{title:g??v(`detail.noActivity`),className:`py-6`}):(0,$.jsxs)(`div`,{className:`relative`,children:[(0,$.jsx)(`div`,{className:`absolute left-4 top-2 bottom-2 w-px bg-border`}),(0,$.jsx)(`div`,{className:`space-y-4`,children:z.map(e=>{let t=Vs[e.type]||Yi,n=Hs[e.type]||`bg-gray-100 text-gray-600`,r=B.get(e.id)??[];return(0,$.jsxs)(`div`,{children:[(0,$.jsxs)(`div`,{className:`flex gap-3 relative`,children:[(0,$.jsx)(`div`,{className:q(`shrink-0 h-8 w-8 rounded-full flex items-center justify-center z-10`,n),children:e.actorAvatarUrl?(0,$.jsx)(`img`,{src:e.actorAvatarUrl,alt:e.actor,className:`h-8 w-8 rounded-full object-cover`}):(0,$.jsx)(t,{className:`h-3.5 w-3.5`})}),(0,$.jsxs)(`div`,{className:`flex-1 min-w-0 pt-1`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2 mb-0.5`,children:[(0,$.jsx)(`span`,{className:`text-sm font-medium`,children:e.actor}),e.source&&(0,$.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:v(`detail.via`,{source:e.source})}),(0,$.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:Ws(e.createdAt,v,y)}),e.edited&&(0,$.jsx)(`span`,{className:`text-xs text-muted-foreground italic`,children:v(`detail.edited`)}),e.pinned&&(0,$.jsxs)(`span`,{className:`text-xs text-amber-600`,children:[`📌 `,v(`detail.pinned`)]})]}),e.body&&(0,$.jsx)(`p`,{className:`text-sm whitespace-pre-wrap break-words text-muted-foreground`,children:e.body}),e.sourceObject&&e.sourceId!=null&&(0,$.jsxs)(`a`,{href:`/objects/${e.sourceObject}/${e.sourceId}`,className:`mt-1 inline-flex items-center gap-1 text-xs text-primary hover:underline`,"data-testid":`activity-source-link`,children:[v(`detail.viewSource`),(0,$.jsx)(`span`,{"aria-hidden":!0,children:`→`})]}),e.type===`field_change`&&e.fieldChanges&&(0,$.jsx)(`div`,{className:`space-y-1 mt-1`,children:e.fieldChanges.map((e,t)=>(0,$.jsx)(ks,{change:e},t))}),ne&&e.reactions&&e.reactions.length>0&&(0,$.jsx)(`div`,{className:`mt-1.5`,children:(0,$.jsx)(js,{reactions:e.reactions,onToggleReaction:l?t=>l(e.id,t):void 0})}),ne&&(!e.reactions||e.reactions.length===0)&&l&&(0,$.jsx)(`div`,{className:`mt-1.5`,children:(0,$.jsx)(js,{reactions:[],onToggleReaction:t=>l(e.id,t)})})]})]}),F&&(e.replyCount??0)>0&&(0,$.jsx)(Ns,{parentItem:e,replies:r,onAddReply:c,showReplyInput:!!c})]},e.id)})})]}),i&&(0,$.jsx)(`div`,{className:`text-center pt-2`,children:(0,$.jsxs)(Z,{variant:`ghost`,size:`sm`,onClick:oe,disabled:E,"aria-label":v(`detail.loadMore`),children:[E?(0,$.jsx)(vi,{className:`h-4 w-4 animate-spin mr-1`}):(0,$.jsx)(Ur,{className:`h-4 w-4 mr-1`}),v(`detail.loadMore`)]})})]})]})};g();var qs=h.options,Js=c.options,Ys={created:`field_change`,updated:`field_change`,deleted:`field_change`,assigned:`field_change`,shared:`field_change`,system:`system`,completed:`task`,scheduled:`event`,commented:void 0,mentioned:void 0,login:void 0,logout:void 0},Xs=`system`,Zs=[`comment`],Qs=[`record_create`,`record_delete`,`sharing`],$s=new Set([...Object.values(Ys).filter(e=>!!e),Xs,...Zs]),ec=new Set([`task`]);function tc(e,t,n,r){let i=n.filter(n=>!e.has(JSON.stringify([t,n])));if(i.length!==0){for(let n of i)e.add(JSON.stringify([t,n]));console.warn(r(i))}}var nc=new Set,rc=new Set,ic=new Set;function ac(e,t){if(typeof e==`string`&&qs.includes(e))return e;if(e!=null){let n=typeof e==`string`?`"${e}"`:typeof e;tc(ic,t,[typeof e==`string`?e:`non-string ${n}`],()=>`[${t}] ignoring an unrecognised \`filterMode\` (${n}) and opening on "all" instead — the WIDEST mode, which shows EVERY activity rather than the slice that was asked for. No declared filter mode matches it. The fallback is kept rather than passing the value through because a dropdown handed a value with no matching item renders blank (objectui#3151), so this is a diagnostic, not a refusal. Declared filter modes: ${qs.join(`, `)}.`)}return`all`}function oc(e,t){let n=e.filter(e=>!$s.has(e));n.length!==0&&tc(rc,t,n,e=>{let n=e=>e.map(e=>`"${e}"`).join(`, `),r=e.filter(e=>Qs.includes(e)),i=e.filter(e=>!Qs.includes(e)),a=`[${t}] \`types\` names ${e.length} declared feed item type${e.length===1?``:`s`} that NO ObjectUI producer emits, so ${e.length===1?`it selects`:`they select`} nothing: ${n(e)}. The entr${e.length===1?`y is`:`ies are`} honoured as authored — nothing is dropped or widened — but a timeline filtered to ${e.length===1?`it`:`them`} alone renders permanently empty, which is the thing that used to happen with no diagnostic at all.`;return r.length>0&&(a+=` DELIBERATELY NOT ADOPTED, a decision rather than a gap: ${n(r)} — \`created\` / \`deleted\` / \`shared\` activity is mapped to \`field_change\` on purpose, because the record page and this block have to agree about what a \`created\` row IS before either can move to the richer kind. Adopting them is a change to that shared map (ACTIVITY_TYPE_TO_FEED_TYPE, @object-ui/plugin-detail), not to one block.`),i.length>0&&(a+=` NO PRODUCER on any ObjectUI surface: ${n(i)} — @objectstack/spec declares the kind and nothing here emits it. Whether that is a gap or a decision nobody wrote down is not recorded anywhere this diagnostic can read, so it reports the measurement and stops there.`),a+=` Feed item types ObjectUI produces today: ${[...$s].sort().join(`, `)}. If your HOST supplies the feed — \`items\` on the node, or a DiscussionContext it mounts — it may produce kinds this census cannot see, and this warning does not apply to them.`,a})}function sc(e,t){if(e==null)return;if(!Array.isArray(e)){let n=typeof e==`string`?`"${e}"`:typeof e;return tc(nc,t,[`non-array ${n}`],()=>`[${t}] ignoring an authored \`types\` that is not an array (${n}). \`types\` must be a LIST of feed item types. The timeline renders empty rather than falling back to every kind, because a filter that cannot be read is not a request to remove the filter. Declared feed item types: ${Js.join(`, `)}.`),[]}let n=[],r=[];for(let t of e)typeof t==`string`&&Js.includes(t)?n.push(t):r.push(typeof t==`string`?t:String(t));return r.length>0&&tc(nc,t,r,e=>`[${t}] ignoring ${e.length} unrecognised \`types\` entr${e.length===1?`y`:`ies`}: ${e.map(e=>`"${e}"`).join(`, `)}. No declared feed item type matches, so they select nothing; only the recognised entries narrow the timeline, and a list with NO recognised entry renders an EMPTY timeline rather than every kind. Declared feed item types: ${Js.join(`, `)}.`),oc(n,t),n}function cc(e){return typeof e==`number`&&Number.isInteger(e)&&e>0}function lc(e){return cc(e)?e:20}function uc(e){if(typeof e==`number`)return String(e);if(typeof e==`string`)return JSON.stringify(e);try{let t=JSON.stringify(e);if(t!==void 0)return t}catch{}return String(e)}function dc(e,t){return t==null||cc(t)?null:`[ObjectUI] ${e} row cap: declared limit: ${uc(t)} (${Array.isArray(t)?`array`:typeof t}), which is not a positive integer number. The spec declares \`limit\` as z.number().int().positive() and refuses strings, booleans, fractions, zero and negatives, so it was ignored and this block fell back to its default row cap (20).`}function fc(e){let t=e.timestamp;return String(!t||t===`NOW()`||Number.isNaN(Date.parse(String(t)))?e.created_at??``:t)}var pc=new Set;function mc(e){tc(pc,``,[e],()=>`[record:activity] rendered a sys_activity row with type "${e}" through the generic "${Xs}" presentation: no feed item type is mapped for it. \`sys_activity.type\` is author-extensible (objectstack#11507, ruled 2026-08-24) and is not validated on write, so a producer can store a value the platform never declared — the row is shown rather than dropped. Map it in ACTIVITY_TYPE_TO_FEED_TYPE (@object-ui/plugin-detail) to give it its own presentation.`)}function hc(e,t){let n=String(e?.type),r=Object.prototype.hasOwnProperty.call(Ys,n);r||mc(n);let i=r?Ys[n]:Xs;return i?{id:e.id,type:i,actor:e.actor_name??t,actorAvatarUrl:e.actor_avatar_url??void 0,body:e.summary??``,createdAt:fc(e),sourceObject:e.source_object??void 0,sourceId:e.source_id??void 0}:null}function gc(e,t,n,r){let i=e.slice();t.unifiedTimeline===!1&&(i=i.filter(e=>e.type!==`field_change`)),t.showCompleted!==!0&&(i=i.filter(e=>!ec.has(e.type)));let a=sc(t.types,r);if(a!==void 0){let e=new Set(a);i=i.filter(t=>e.has(t.type))}let o=i.length,s=Math.max(1,Math.floor(n)||20);return{items:o>s?i.slice(o-s):i,total:o,hasMore:o>s}}function _c(...e){let t=new Map;for(let n of e)for(let e of n)t.set(String(e.id),e);return Array.from(t.values()).sort((e,t)=>{let n=e.createdAt?Date.parse(e.createdAt):0,r=t.createdAt?Date.parse(t.createdAt):0;return(Number.isNaN(n)?0:n)-(Number.isNaN(r)?0:r)})}var vc=e=>{let{"data-obj-id":t,"data-obj-type":n,style:r,...i}=e||{};return{designer:{"data-obj-id":t,"data-obj-type":n,style:r},rest:i}},yc=`record:activity`,bc=({schema:e={},className:t,...n})=>{let{designer:r}=vc(n),i=fs(e.aria),a=gn(),o=Mt(),s=Cr(),c=e.properties??{},l=t=>e[t]??c[t],u=l(`limit`),d=lc(u),f=dc(yc,u);Q.useEffect(()=>{f&&console.warn(f)},[f]);let p=ac(l(`filterMode`),yc),m=l(`types`),h=l(`showCompleted`),g=l(`unifiedTimeline`),_={types:m,filterMode:p,showFilterToggle:l(`showFilterToggle`),limit:d,showCompleted:h,unifiedTimeline:g,showCommentInput:l(`showCommentInput`),enableMentions:l(`enableMentions`),enableReactions:l(`enableReactions`),enableThreading:l(`enableThreading`),showSubscriptionToggle:l(`showSubscriptionToggle`)},v=Array.isArray(e.items)?e.items:Array.isArray(c.items)?c.items:void 0,y=e.loading??c.loading,b=a?.objectName,x=a?.data?.id??a?.data?._id??a?.recordId,S=a?.dataSource,C=v===void 0&&!o&&typeof S?.find==`function`&&!!b&&x!=null,[w,T]=Q.useState(0),E=d*(w+1),[D,O]=Q.useState(null),[k,A]=Q.useState(!1),[j,M]=Q.useState(!1),ee=s(`detail.systemActor`,`System`);Q.useEffect(()=>{if(!C)return;let e=!1;return M(!0),Promise.resolve(S.find(`sys_activity`,{$filter:{object_name:b,record_id:x},$orderby:{timestamp:`desc`},$top:Math.max(1,E)+1})).then(t=>{if(e)return;let n=t?.data??[],r=Array.isArray(n)?n:[],i=[];for(let e of r){let t=hc(e,ee);t&&i.push(t)}A(r.length>Math.max(1,E)),O(_c(i))}).catch(()=>{e||(O([]),A(!1))}).finally(()=>{e||M(!1)}),()=>{e=!0}},[C,S,b,x,E,ee]);let N=o?.items,te=Q.useMemo(()=>gc(v??N??D??[],{types:m,showCompleted:h,unifiedTimeline:g},E,yc),[v,N,D,m,h,g,E]),P=te.items,ne=te.hasMore||C&&k,F=y??o?.loading??(C&&D===null?!0:j),[I,L]=Q.useState(p);Q.useEffect(()=>{L(p)},[p]);let R=Q.useCallback(()=>{T(e=>e+1)},[]),z=_.enableMentions!==!1;return(0,$.jsx)(`div`,{className:t,...r,...i,children:(0,$.jsx)(Ks,{items:P,config:_,loading:F,filterMode:I,onFilterChange:L,hasMore:ne,onLoadMore:R,onAddComment:o?.onAddComment,onAddReply:o?.onAddReply,onToggleReaction:o?.onToggleReaction,mentionSuggestions:z?o?.mentionSuggestions:void 0,onUploadAttachments:o?.onUploadAttachments})})},xc=({config:e,items:t,hasMore:n,onLoadMore:r,loading:i,onAddComment:a,onAddReply:o,onToggleReaction:s,subscription:c,onToggleSubscription:l,filterMode:u,onFilterChange:d,collapseWhenEmpty:f=!1,mentionSuggestions:p,onUploadAttachments:m,className:h})=>{let g=e?.position??`right`,_=e?.width??`360px`,v=e?.collapsible??!0,y=f&&t.length===0||(e?.defaultCollapsed??!1),{t:b}=Sa(),[x,S]=Q.useState(y);return g===`right`||g===`left`?x&&v?(0,$.jsx)(`div`,{className:q(`flex items-start pt-4`,g===`right`?`border-l`:`border-r`,h),children:(0,$.jsx)(Z,{variant:`ghost`,size:`icon`,className:`h-8 w-8 mx-1`,onClick:()=>S(!1),"aria-label":b(`detail.openDiscussion`),children:(0,$.jsx)(Ci,{className:`h-4 w-4`})})}):(0,$.jsxs)(`div`,{className:q(`flex flex-col overflow-hidden`,g===`right`?`border-l`:`border-r`,h),style:{width:_,minWidth:_},children:[(0,$.jsxs)(`div`,{className:`flex items-center justify-between px-4 py-3 border-b`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,$.jsx)(xi,{className:`h-4 w-4`}),(0,$.jsx)(`span`,{className:`text-sm font-medium`,children:b(`detail.discussion`)})]}),v&&(0,$.jsx)(Z,{variant:`ghost`,size:`icon`,className:`h-7 w-7`,onClick:()=>S(!0),"aria-label":b(`detail.closeDiscussion`),children:(0,$.jsx)(Ji,{className:`h-3.5 w-3.5`})})]}),(0,$.jsx)(`div`,{className:`flex-1 overflow-y-auto`,children:(0,$.jsx)(Ks,{items:t,config:e?.feed,hasMore:n,onLoadMore:r,loading:i,onAddComment:a,onAddReply:o,onToggleReaction:s,subscription:c,onToggleSubscription:l,filterMode:u,onFilterChange:d,collapseWhenEmpty:f,mentionSuggestions:p,onUploadAttachments:m,titleLabel:b(`detail.discussion`),emptyLabel:b(`detail.noCommentsYet`),className:`border-0 shadow-none`})})]}):(0,$.jsx)(`div`,{className:q(``,h),children:v&&x?(0,$.jsxs)(Z,{variant:`ghost`,className:`w-full justify-start gap-2 text-muted-foreground`,onClick:()=>S(!1),"aria-label":b(`detail.showDiscussion`,{count:t.length}),children:[(0,$.jsx)(xi,{className:`h-4 w-4`}),(0,$.jsx)(`span`,{children:b(`detail.showDiscussion`,{count:t.length})})]}):(0,$.jsxs)(`div`,{children:[v&&(0,$.jsxs)(`div`,{className:`flex items-center justify-between mb-2`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2 text-sm font-medium`,children:[(0,$.jsx)(xi,{className:`h-4 w-4`}),b(`detail.discussion`)]}),(0,$.jsx)(Z,{variant:`ghost`,size:`icon`,className:`h-7 w-7`,onClick:()=>S(!0),"aria-label":b(`detail.hideDiscussion`),children:(0,$.jsx)(Si,{className:`h-3.5 w-3.5`})})]}),(0,$.jsx)(Ks,{items:t,config:e?.feed,hasMore:n,onLoadMore:r,loading:i,onAddComment:a,onAddReply:o,onToggleReaction:s,subscription:c,onToggleSubscription:l,filterMode:u,onFilterChange:d,collapseWhenEmpty:f,mentionSuggestions:p,onUploadAttachments:m,titleLabel:b(`detail.discussion`),emptyLabel:b(`detail.noCommentsYet`)})]})})},Sc=e=>{let{"data-obj-id":t,"data-obj-type":n,style:r,...i}=e||{};return{designer:{"data-obj-id":t,"data-obj-type":n,style:r},rest:i}},Cc=({schema:e={},className:t,...n})=>{gn();let r=Mt(),{designer:i}=Sc(n),a=fs(e.aria),o={position:`bottom`,collapsible:!1,feed:{enableReactions:!0,enableThreading:!0,showCommentInput:!0},...e},s=o.feed,[c,l]=Q.useState(0),u=lc(s?.limit),d=typeof e.type==`string`&&e.type?e.type:`record:chatter`,f=dc(`${d} feed`,s?.limit);Q.useEffect(()=>{f&&console.warn(f)},[f]);let p=u*(c+1),m=ac(s?.filterMode,d),[h,g]=Q.useState(m);Q.useEffect(()=>{g(m)},[m]);let _=r?.items,v=Q.useMemo(()=>gc(_??[],{types:s?.types,showCompleted:s?.showCompleted,unifiedTimeline:s?.unifiedTimeline},p,d),[_,s?.types,s?.showCompleted,s?.unifiedTimeline,p,d]),y=Q.useCallback(()=>{l(e=>e+1)},[l]),b=s?.enableMentions!==!1;return(0,$.jsx)(`div`,{className:t,...i,...a,children:(0,$.jsx)(xc,{items:v.items,config:o,hasMore:v.hasMore,onLoadMore:y,loading:r?.loading,filterMode:h,onFilterChange:g,onAddComment:r?.onAddComment,onAddReply:r?.onAddReply,onToggleReaction:r?.onToggleReaction,mentionSuggestions:b?r?.mentionSuggestions:void 0,onUploadAttachments:r?.onUploadAttachments})})},wc=e=>{let{"data-obj-id":t,"data-obj-type":n,style:r,...i}=e||{};return{designer:{"data-obj-id":t,"data-obj-type":n,style:r},rest:i}},Tc=({schema:e={},className:t,...n})=>{let r=gn(),{translateOptions:i}=Or(),{t:a}=Sa(),{designer:o}=wc(n),s=fs(e.aria,{defaultRole:`list`,defaultLabel:a(`detail.pathLabel`),block:`record:path`}),c=Array.isArray(e.stages)?e.stages:[],l=e.statusField,u=Q.useMemo(()=>{if(c.length===0||!l||!r?.objectName)return c;let e=i(r.objectName,l,c);return Array.isArray(e)&&e.length===c.length?c.map((t,n)=>({...t,label:e[n]?.label??t.label})):c},[c,l,r?.objectName,i]),d=l&&r?.data?r.data[l]:void 0,f=/(^|[_-\s])(closed_)?(lost|failed?|cancell?ed|失败|流失|丢单|败)([_-\s]|$)/i,p=/(^|[_-\s])(closed_)?(won|success|成交|赢|完成)([_-\s]|$)/i,m=u.map(e=>{if(e.terminal)return e.terminal;let t=`${String(e.value??``)} ${String(e.label??``)}`;if(f.test(t))return`lost`;if(p.test(t))return`won`}),h=m.findIndex(e=>e===`lost`),g=h===-1?u:u.slice(0,h),_=h===-1?[]:u.slice(h),v=g.length-1,y=m.map((e,t)=>e===`won`?t===v?`won`:void 0:e),b=u.findIndex(e=>e.value===d);b<0&&(b=-1);let x=h!==-1&&b>=h;if(u.length===0)return(0,$.jsx)(`div`,{className:t,...o,children:(0,$.jsx)(`div`,{className:`text-xs text-muted-foreground italic px-3 py-2 border border-dashed rounded`,children:`record:path — no stages configured`})});let S=(e,t)=>q(`h-1.5 w-full rounded-full`,t===`lost`&&(e===`current`?`bg-destructive`:`bg-destructive/25`),t!==`lost`&&e===`current`&&`bg-primary`,t!==`lost`&&e===`completed`&&`bg-emerald-500`,t!==`lost`&&e===`upcoming`&&(t===`won`?`bg-emerald-500/30`:`bg-muted`)),C=(e,t)=>q(`block min-w-0 text-xs`,e===`current`&&(t===`lost`?`font-semibold text-destructive`:`font-semibold text-foreground`),e===`completed`&&`font-normal text-muted-foreground`,e===`upcoming`&&`font-normal text-muted-foreground`),w=(e,t,n)=>a(n===`lost`?t===`current`?`detail.pathStageLostCurrent`:`detail.pathStageLostUpcoming`:n===`won`&&t===`upcoming`?`detail.pathStageWonUpcoming`:t===`current`?`detail.pathStageCurrent`:t===`completed`?`detail.pathStageCompleted`:`detail.pathStageUpcoming`,{stage:e}),T=e=>(0,$.jsxs)(`div`,{role:`listitem`,"data-stage-state":e.state,"data-stage-terminal":e.terminal,"aria-current":e.state===`current`?`step`:void 0,"aria-label":w(e.stage.label,e.state,e.terminal),className:q(`flex flex-col gap-1.5`,e.className),children:[(0,$.jsx)(`span`,{"aria-hidden":`true`,"data-stage-rail":``,className:S(e.state,e.terminal)}),(0,$.jsxs)(`span`,{className:q(C(e.state,e.terminal),e.labelClassName),children:[e.terminal===`lost`&&(0,$.jsx)(`span`,{"aria-hidden":`true`,className:`mr-1 opacity-70`,children:`✗`}),e.terminal!==`lost`&&e.state===`completed`&&(0,$.jsx)(`span`,{"aria-hidden":`true`,className:`mr-1 text-emerald-600 dark:text-emerald-400 font-semibold`,children:`✓`}),e.stage.label]})]},e.key);return(0,$.jsxs)(`div`,{className:q(`w-full`,t),...o,children:[(0,$.jsxs)(`div`,{className:`hidden sm:flex w-full items-start gap-2`,...s,children:[(0,$.jsx)(`div`,{className:`flex flex-1 items-start gap-1.5`,children:g.map((e,t)=>{let n=!x&&b>=0&&t<b,r=!x&&t===b;return T({key:`${e.value}-${t}`,stage:e,state:r?`current`:n?`completed`:`upcoming`,terminal:y[t],className:`flex-1 min-w-0`,labelClassName:`text-center truncate`})})}),_.length>0&&(0,$.jsx)(`div`,{className:`flex items-start gap-1.5 pl-2 border-l border-border/40`,children:_.map((e,t)=>{let n=h+t;return T({key:`${e.value}-lost-${t}`,stage:e,state:n===b?`current`:`upcoming`,terminal:y[n],className:`shrink-0`,labelClassName:`text-center whitespace-nowrap`})})})]}),(0,$.jsx)(`div`,{className:`flex sm:hidden w-full items-start gap-2 overflow-x-auto pb-1 -mx-1 px-1 [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden`,...s,children:u.map((e,t)=>{let n=y[t],r=n!==`lost`&&!x&&b>=0&&t<b,i=t===b;return T({key:`${e.value}-${t}-m`,stage:e,state:i?`current`:r?`completed`:`upcoming`,terminal:n,className:`shrink-0`,labelClassName:`whitespace-nowrap`})})})]})},Ec=e=>{let{"data-obj-id":t,"data-obj-type":n,style:r,...i}=e||{};return{designer:{"data-obj-id":t,"data-obj-type":n,style:r},rest:i}},Dc=Object.freeze([]),Oc=new Set;function kc(e,t,n){let r=`${e}::${t}::${n.index}::${n.message}`;Oc.has(r)||(Oc.add(r),console.error(`[record:quick_actions] ${t} refused at index ${n.index} — ${n.message}. None of the authored actions is rendered. \`actionNames\` is a list of ACTION IDS resolved from the object's own \`actions\`; an inline action object is the host's runtime channel and must not share an array with ids.`))}var Ac=({schema:e={},className:t,...n})=>{let r=gn(),{designer:i}=Ec(n),a=fs(e.aria,{defaultRole:`toolbar`,defaultLabel:`Quick actions`,block:`record:quick_actions`}),o=y(),s=mn(),c=Array.isArray(e.actions)?e.actions:Array.isArray(e.properties?.actions)?e.properties.actions:Dc,l=Array.isArray(e.actionNames)?e.actionNames:Array.isArray(e.properties?.actionNames)?e.properties.actionNames:Dc,u=r?.objectName||``,d=l.length>0?`actionNames`:`actions`,f=l.length>0?l:c,p=Tn(f,void 0),m=p.kind===`ids`&&p.ids.length>0&&!!u,{item:h}=ar(`object`,m?u:null),g=Tn(f,Array.isArray(h?.actions)?h.actions:[]);g.kind===`refused`&&kc(u,d,g);let _=(g.kind===`refused`?[]:g.actions).map((e,t)=>s(u||void 0,e,{fallbackLabel:`Action ${t+1}`})),v=Array.isArray(e.requiredPermissions)?e.requiredPermissions:[],b=e.location||`record_header`,{getActionsForLocation:x,executeAction:S}=Lt({actions:_,context:{record:r?.data,recordId:r?.recordId,objectName:r?.objectName}});if(v.length>0&&!o.hasCapabilities(v))return(0,$.jsx)(`div`,{className:t,...i,role:`status`,"aria-live":`polite`,children:(0,$.jsx)(`p`,{className:`text-sm text-muted-foreground italic`,children:`Insufficient permissions to view quick actions.`})});let C=_.length>0?x(b):[];if(C.length===0)return(0,$.jsx)(`div`,{className:t,...i,children:(0,$.jsx)(`div`,{className:`text-xs text-muted-foreground italic px-3 py-2 border border-dashed rounded`,children:g.kind===`refused`?`record:quick_actions — ${d} refused at index ${g.index} (see console)`:`record:quick_actions — no actions configured`})});let w=e.align||`end`,T=w===`start`?`justify-start`:w===`center`?`justify-center`:`justify-end`,E=b===`record_header`&&!e.inline;return(0,$.jsx)(`div`,{className:q(`flex flex-wrap items-center gap-2`,E&&`-mt-12 sm:-mt-14 mb-2 relative z-10`,T,t),...a,...i,children:C.map((t,n)=>(0,$.jsx)(jc,{action:t,record:r?.data,variant:t.variant||e.variant||`default`,size:t.size||e.size||`sm`,label:t.label||`Action ${n+1}`,onRun:async()=>{typeof t.onClick==`function`?await t.onClick():t.name&&await S(t.name)}},t.name||`qa-${n}`))})};function jc({action:e,record:t,variant:n,size:r,label:i,onRun:a}){let[o,s]=Q.useState(!1),c=Q.useMemo(()=>({record:t||{}}),[t]),l=Zt(xr(e.disabled),c),u=(un(e.disabled)?l:!1)||o;return(0,$.jsxs)(Z,{variant:n,size:r,disabled:u,onClick:async()=>{s(!0);try{await a()}finally{s(!1)}},children:[o&&(0,$.jsx)(vi,{className:`mr-2 h-4 w-4 animate-spin`}),i]})}var Mc=e=>{let{"data-obj-id":t,"data-obj-type":n,style:r,...i}=e||{};return{designer:{"data-obj-id":t,"data-obj-type":n,style:r},rest:i}},Nc=new Set([`created`,`updated`,`assigned`,`shared`,`deleted`]),Pc=50;function Fc(e){return typeof e==`number`&&Number.isInteger(e)&&e>0}function Ic(e){return Fc(e)?e:Pc}function Lc(e){if(typeof e==`number`)return String(e);if(typeof e==`string`)return JSON.stringify(e);try{let t=JSON.stringify(e);if(t!==void 0)return t}catch{}return String(e)}function Rc(e){return e==null||Fc(e)?null:`[ObjectUI] record:history row cap: declared limit: ${Lc(e)} (${Array.isArray(e)?`array`:typeof e}), which is not a positive integer number. The spec declares \`limit\` as z.number().int().positive() and refuses strings, booleans, fractions, zero and negatives, so it was ignored and this block fell back to its default row cap (${Pc}).`}var zc=({schema:e={},className:t,...n})=>{let{designer:r}=Mc(n),i=gn(),a=Array.isArray(e.entries)?e.entries:Array.isArray(e.properties?.entries)?e.properties.entries:void 0,o=e.loading??e.properties?.loading,s=e.emptyText??e.properties?.emptyText,c=e.unknownUserText??e.properties?.unknownUserText,l=e.limit??e.properties?.limit,u=Ic(l),d=Rc(l);Q.useEffect(()=>{d&&console.warn(d)},[d]);let f=i?.objectName,p=i?.data?.id??i?.data?._id??i?.recordId,m=i?.dataSource,h=a===void 0&&!!m?.find&&!!f&&p!=null,[g,_]=Q.useState(null),[v,y]=Q.useState(!1);Q.useEffect(()=>{if(!h)return;let e=!1;return y(!0),Promise.resolve(m.find(`sys_activity`,{$filter:{object_name:f,record_id:p},$orderby:{timestamp:`desc`},$top:u})).then(t=>{if(e)return;let n=(t?.data??[]).filter(e=>Nc.has(e?.type)).map(e=>{let t=e.timestamp;return(!t||t===`NOW()`||Number.isNaN(Date.parse(t)))&&(t=e.created_at),{id:e.id,created_at:t,action:e.type,user_name:e.actor_name??null,user_avatar:e.actor_avatar_url??null,summary:e.summary??null}});_(n)}).catch(()=>{e||_([])}).finally(()=>{e||y(!1)}),()=>{e=!0}},[h,m,f,p,u]);let b=a??g??[],x=o??(h&&g===null?v||!0:!1);return(0,$.jsx)(`div`,{className:t,...r,children:(0,$.jsx)(po,{entries:b,loading:x,emptyText:s,unknownUserText:c})})},Bc=e=>{let{"data-obj-id":t,"data-obj-type":n,style:r,...i}=e||{};return{designer:{"data-obj-id":t,"data-obj-type":n,style:r},rest:i}};function Vc(e){return typeof e==`number`&&Number.isInteger(e)&&e>0}function Hc(e,t){return Vc(e)?e:t}function Uc(e,t){return e==null||Vc(e)?null:`[ObjectUI] RecordReferenceRail row cap: ${typeof t==`string`&&t?`record:reference_rail entry for ${t}`:`record:reference_rail entry`} declared limit: ${String(e)}, which is not a positive integer. A row cap must be a positive integer (the spec refuses zero and negative values), so it was ignored and this entry fell back to its default preview-row cap (3).`}var Wc=e=>e.replace(/[_-]+/g,` `).replace(/\b\w/g,e=>e.toUpperCase()).trim(),Gc=(e,t)=>t&&e?.[t]!=null&&e[t]!==``?String(e[t]):e?.name||e?.title||e?.subject||e?.label||e?.email||e?.username||e?.code||e?.slug||e?.provider_id||e?.user_agent||e?.ip_address||e?.id||`—`,Kc=({schema:e={},className:t,...n})=>{let a=gn(),o=Or(),{t:s}=Sa(),{designer:c}=Bc(n),l=r().appName,u=Array.isArray(e.entries)?e.entries:Array.isArray(e.properties?.entries)?e.properties.entries:[],d=a?.recordId,f=a?.dataSource,[p,m]=Q.useState({}),h=Q.useRef(null),[g,_]=Q.useState(!1),v=Q.useRef(!0);Q.useEffect(()=>(v.current=!0,()=>{v.current=!1}),[]);let y=Q.useRef(``);Q.useEffect(()=>{if(g)return;let e=h.current;if(!e||typeof IntersectionObserver>`u`){_(!0);return}let t=new IntersectionObserver(e=>{e.some(e=>e.isIntersecting)&&_(!0)},{rootMargin:`200px`});return t.observe(e),()=>t.disconnect()},[g]);let[b,x]=Q.useState({}),S=Q.useRef(new Set),C=Q.useRef(new Set),w=JSON.stringify(u.map(e=>`${e.objectName}:${e.relationshipField}:${Hc(e.limit,3)}`)),T=JSON.stringify(u.map(e=>[e.objectName,e.limit??null]));Q.useEffect(()=>{for(let e of u){let t=Uc(e.limit,e.objectName);if(!t)continue;let n=`${e.objectName}:${String(e.limit)}`;C.current.has(n)||(C.current.add(n),console.warn(t))}},[T]),Q.useEffect(()=>{if(!g||!f?.find||!d||u.length===0)return;let e=`${d}::${w}`;if(y.current===e)return;y.current=e;let t=()=>v.current&&y.current===e;m(e=>{let t={...e};for(let n of u)t[n.objectName]={loading:!0,total:0,items:e[n.objectName]?.items||[]};return t});let n=async(e,n)=>{let r=e.objectName;try{let i=await f.find(e.objectName,{$filter:Sn(e.relationshipField,d,n),$top:Hc(e.limit,3),$count:!0});if(!t())return;let a=Array.isArray(i)?i:i?.data||[],o=typeof i?.total==`number`?i.total:a.length;m(e=>({...e,[r]:{loading:!1,total:o,items:a}}))}catch(e){if(!t())return;m(t=>({...t,[r]:{loading:!1,total:0,items:[],error:String(e?.message||e)}}))}};(async()=>{let e=new Map;if(typeof f.getObjectSchema==`function`&&await Promise.all(Array.from(new Set(u.map(e=>e.objectName))).map(async t=>{try{e.set(t,(await f.getObjectSchema(t))?.fields)}catch{}})),!t())return;x(Object.fromEntries(e));for(let t of u){if(!On(e.get(t.objectName),t.relationshipField))continue;let n=`${t.objectName}.${t.relationshipField}`;S.current.has(n)||(S.current.add(n),console.warn(`[RecordReferenceRail] "${t.objectName}" relates through the multi-value field "${t.relationshipField}", so the "View All" link is suppressed for it. The console list URL's \`filter[<field>]=<value>\` grammar has no membership operator and no unrecognised suffix narrows it, so the link would open the entire child table dressed as this parent's related records. The rail's own rows are still scoped correctly.`))}let r=[...u],i=async()=>{for(;v.current;){let t=r.shift();if(!t)return;await n(t,e.get(t.objectName))}};await Promise.all(Array.from({length:Math.min(3,r.length)},()=>i()))})()},[g,f,d,w]);let[D,O]=Q.useState(!1);if(u.length===0)return null;let A=e.hideEmpty!==!1,j=new Set(u.filter(e=>{let t=p[e.objectName];return A&&t&&!t.loading&&!t.error&&t.total===0}).map(e=>e.objectName)),M=u.filter(e=>D||!j.has(e.objectName)),ee=u.filter(e=>j.has(e.objectName)).map(e=>e.title||(o?.objectLabel?o.objectLabel({name:e.objectName,label:Wc(e.objectName)}):Wc(e.objectName)));return(0,$.jsxs)(`div`,{ref:h,className:q(`flex flex-col gap-3`,e.className,t),...c,children:[M.map(e=>{let t=e.objectName,n=p[t]||{loading:!0,total:0,items:[]},r=On(b[t],e.relationshipField),a=e.title||(o?.objectLabel?o.objectLabel({name:e.objectName,label:Wc(e.objectName)}):Wc(e.objectName));return(0,$.jsxs)(Ot,{className:`overflow-hidden`,children:[(0,$.jsxs)(F,{className:`flex flex-row items-center justify-between gap-2 py-3 px-4 space-y-0 border-b`,children:[(0,$.jsx)(Ce,{className:`text-sm font-semibold tracking-tight truncate`,children:a}),(0,$.jsxs)(`div`,{className:`flex items-center gap-2 shrink-0`,children:[!n.loading&&(0,$.jsx)($e,{variant:`secondary`,className:`tabular-nums`,children:n.total}),l&&d&&!r&&(0,$.jsx)(i,{to:`/apps/${l}/${e.objectName}?filter%5B${e.relationshipField}%5D=${encodeURIComponent(String(d))}`,className:`text-[11px] font-medium text-muted-foreground hover:text-foreground transition-colors`,title:s(`detail.viewAll`,{defaultValue:`View All`}),children:s(`detail.viewAll`,{defaultValue:`View All`})})]})]}),(0,$.jsx)(E,{className:`p-0`,children:n.loading?(0,$.jsxs)(`div`,{className:`space-y-1.5 p-3`,children:[(0,$.jsx)(k,{className:`h-3.5 w-4/5`}),(0,$.jsx)(k,{className:`h-3.5 w-3/5`}),(0,$.jsx)(k,{className:`h-3.5 w-2/3`})]}):n.items.length===0?(0,$.jsx)(`p`,{className:`px-4 py-3 text-xs text-muted-foreground`,children:s(`detail.noRecords`)}):(0,$.jsx)(`ul`,{className:`divide-y`,children:n.items.map(t=>{let n=t.id||t._id,r=Gc(t,e.displayField),a=n?`../${e.objectName}/record/${encodeURIComponent(String(n))}`:void 0;return(0,$.jsx)(`li`,{className:`px-4 py-2`,children:a?(0,$.jsxs)(i,{to:a,className:`group flex items-center justify-between gap-2 text-xs hover:text-foreground text-muted-foreground transition-colors`,children:[(0,$.jsx)(`span`,{className:`truncate`,children:r}),(0,$.jsx)(Gr,{className:`h-3 w-3 shrink-0 opacity-0 group-hover:opacity-100 transition-opacity`})]}):(0,$.jsx)(`span`,{className:`block truncate text-xs text-muted-foreground`,children:r})},String(n||r))})})})]},t)}),!D&&ee.length>0&&(0,$.jsxs)(`button`,{type:`button`,onClick:()=>O(!0),className:`self-start inline-flex items-center gap-1.5 text-[11px] text-muted-foreground hover:text-foreground transition-colors px-2.5 py-1 rounded-md border border-dashed border-border/60 hover:border-border bg-background`,title:ee.join(` · `),children:[(0,$.jsx)(`span`,{children:s(`detail.showEmptyRelated`,{defaultValue:`+ {{count}} empty`,count:ee.length})}),(0,$.jsxs)(`span`,{className:`truncate max-w-[180px] text-muted-foreground/70`,children:[`(`,ee.join(` · `),`)`]})]})]})};function qc(e){let t=An(e?.properties)?e.properties:{};return{...e,...t}}var Jc={info:{wrap:`border-blue-300/60 bg-blue-50 text-blue-900 dark:border-blue-700/40 dark:bg-blue-950/30 dark:text-blue-100 [&>svg]:text-blue-600 dark:[&>svg]:text-blue-300`,icon:`Info`},warning:{wrap:`border-amber-300/60 bg-amber-50 text-amber-900 dark:border-amber-700/40 dark:bg-amber-950/30 dark:text-amber-100 [&>svg]:text-amber-600 dark:[&>svg]:text-amber-300`,icon:`AlertTriangle`},error:{wrap:`border-destructive/60 bg-destructive/10 text-destructive dark:bg-destructive/20 [&>svg]:text-destructive`,icon:`AlertCircle`},success:{wrap:`border-emerald-300/60 bg-emerald-50 text-emerald-900 dark:border-emerald-700/40 dark:bg-emerald-950/30 dark:text-emerald-100 [&>svg]:text-emerald-600 dark:[&>svg]:text-emerald-300`,icon:`circle-check`}},Yc=({schema:e={},className:t})=>{let n=qc(e),r=gn(),i=r?.data,a=r?.objectName||``,o=r?.recordId??i?.id,{language:s}=Ar(),c=Dr(n.title,s),l=Dr(n.body,s),u=Dr(n.action?.label,s),d=[`info`,`warning`,`error`,`success`].includes(n.severity)?n.severity:`info`,f=Jc[d],p=n.icon||f.icon,m=en(i),h=xr(n.visible),g=!!i&&Object.keys(i).length>0,_=Zt(g?h:void 0,m),v=Q.useMemo(()=>{if(!n.dismissible)return null;let e=n.dismissKey||Dr(n.title,`en`)||d;return`os.record-alert:${a}:${o??`_`}:${e}`},[n.dismissible,n.dismissKey,n.title,d,a,o]),[y,b]=Q.useState(()=>{if(!v||typeof window>`u`)return!1;try{return window.localStorage.getItem(v)===`1`}catch{return!1}}),x=n.action?.actionName,{item:S}=ar(`object`,x&&a?a:null),C=Q.useMemo(()=>{let e=Tn(x?[x]:[],Array.isArray(S?.actions)?S.actions:void 0);return e.kind===`ids`?e.actions[0]:void 0},[x,S]),w=Q.useMemo(()=>C?[C]:[],[C]),{executeAction:T}=Lt({actions:w,context:{record:i,recordId:o,objectName:a}});return y||!g||h!==void 0&&!_?null:(0,$.jsxs)(tt,{className:q(`relative pr-12`,f.wrap,t),role:d===`error`?`alert`:`status`,"aria-live":d===`error`?`assertive`:`polite`,children:[(0,$.jsx)(I,{name:p,className:`h-4 w-4`,"aria-hidden":`true`}),c?(0,$.jsx)(Pe,{children:c}):null,l||C?(0,$.jsxs)(ut,{children:[l?(0,$.jsx)(`p`,{className:`mb-2 last:mb-0`,children:l}):null,C?(0,$.jsx)(Z,{size:`sm`,variant:n.action?.variant||(d===`error`?`destructive`:`default`),onClick:()=>{C?.name&&T(C.name)},children:u||C.label||C.name}):null]}):null,n.dismissible?(0,$.jsx)(`button`,{type:`button`,onClick:()=>{if(b(!0),v)try{window.localStorage.setItem(v,`1`)}catch{}},"aria-label":`Dismiss`,className:`absolute right-3 top-3 inline-flex h-6 w-6 items-center justify-center rounded-md text-muted-foreground/80 hover:bg-foreground/5 hover:text-foreground focus:outline-none focus:ring-2 focus:ring-ring`,children:(0,$.jsx)(I,{name:`X`,className:`h-4 w-4`,"aria-hidden":`true`})}):null]})},Xc=e=>{if(e==null)return`—`;if(typeof e==`string`)return e.length>0?e:`""`;if(typeof e==`number`||typeof e==`boolean`)return String(e);try{return JSON.stringify(e)}catch{return String(e)}},Zc=(e,t)=>{if(typeof e!=`string`||e.length===0)return null;let n=/\d{4}-\d{2}-\d{2}[ T]/.test(e)?e.replace(` `,`T`):e,r=new Date(n);if(Number.isNaN(r.getTime()))return null;try{return r.toLocaleString(t)}catch{return r.toISOString()}},Qc=({open:e,conflict:t,onReload:n,onOverwrite:r,onCancel:i,busy:a=!1})=>{let{t:o}=Sa(),s=kr(),c=t?.label||t?.field||``,l=t?Xc(t.pendingValue):``,u=t?Xc(t.currentValue):``,d=t?.currentRecord??{},f=(()=>{let e=[d.updated_by_name,d.updated_by_label];for(let t of e)if(typeof t==`string`&&t.length>0)return t;let t=d.updated_by;return typeof t!=`string`||t.length===0||t.length>=16&&!/\s/.test(t)&&/^[A-Za-z0-9_-]+$/.test(t)?null:t})(),p=Zc(d.updated_at??t?.currentVersion,s),[m,h]=o(`detail.concurrentUpdateDescription`,{field:`{{field}}`}).split(`{{field}}`);return(0,$.jsx)(Ye,{open:e,onOpenChange:e=>{!e&&!a&&i()},children:(0,$.jsxs)(Be,{className:`max-w-lg`,children:[(0,$.jsx)(He,{children:(0,$.jsxs)(`div`,{className:`flex items-start gap-3`,children:[(0,$.jsx)(`span`,{className:`inline-flex h-9 w-9 flex-none items-center justify-center rounded-full bg-amber-100 text-amber-700 dark:bg-amber-500/20 dark:text-amber-300`,"aria-hidden":`true`,children:(0,$.jsx)(Ui,{className:`h-5 w-5`})}),(0,$.jsxs)(`div`,{className:`flex-1`,children:[(0,$.jsx)(Ve,{children:o(`detail.concurrentUpdateTitle`)}),(0,$.jsxs)(rt,{className:`mt-1`,children:[m,(0,$.jsx)(`strong`,{className:`font-semibold`,children:c}),h]})]})]})}),(0,$.jsxs)(`div`,{className:`space-y-2 text-sm`,children:[(0,$.jsxs)(`div`,{className:`rounded-md border border-amber-200/70 bg-amber-50/60 p-3 dark:border-amber-500/30 dark:bg-amber-500/10`,children:[(0,$.jsx)(`div`,{className:`text-xs font-medium uppercase tracking-wide text-amber-800 dark:text-amber-300`,children:o(`detail.concurrentUpdateYourEdit`)}),(0,$.jsx)(`div`,{className:`mt-1 break-all font-mono text-foreground`,children:l})]}),(0,$.jsxs)(`div`,{className:`rounded-md border border-sky-200/70 bg-sky-50/60 p-3 dark:border-sky-500/30 dark:bg-sky-500/10`,children:[(0,$.jsxs)(`div`,{className:`flex items-baseline justify-between gap-2`,children:[(0,$.jsx)(`div`,{className:`text-xs font-medium uppercase tracking-wide text-sky-800 dark:text-sky-300`,children:o(`detail.concurrentUpdateCurrentValue`)}),(f||p)&&(0,$.jsxs)(`div`,{className:`text-[11px] text-muted-foreground`,children:[f&&(0,$.jsx)(`span`,{children:o(`detail.concurrentUpdateUpdatedBy`,{name:f})}),f&&p&&(0,$.jsx)(`span`,{children:` · `}),p&&(0,$.jsx)(`span`,{children:o(`detail.concurrentUpdateUpdatedAt`,{when:p})})]})]}),(0,$.jsx)(`div`,{className:`mt-1 break-all font-mono text-foreground`,children:u})]})]}),(0,$.jsxs)(Ze,{className:`gap-2 sm:gap-2`,children:[(0,$.jsx)(`button`,{type:`button`,disabled:a,onClick:i,className:q(wt({variant:`ghost`}),`mt-2 sm:mt-0`),children:o(`detail.concurrentUpdateCancel`)}),(0,$.jsx)(`button`,{type:`button`,disabled:a,onClick:r,className:q(wt({variant:`outline`}),`mt-2 sm:mt-0 text-destructive border-destructive/40 hover:bg-destructive/10 hover:text-destructive`),children:o(`detail.concurrentUpdateOverwrite`)}),(0,$.jsx)(`button`,{type:`button`,disabled:a,onClick:n,autoFocus:!0,className:q(wt({variant:`default`}),`mt-2 sm:mt-0`),children:o(`detail.concurrentUpdateReload`)})]})]})})};function $c(e){if(!e||typeof e!=`object`)return!1;let t=e;return t.code===`CONCURRENT_UPDATE`||t.name===`ConcurrentUpdateError`}function el(e){let t=e?.message||e?.error||String(e??`Save failed`);return String(t).replace(/^\[[^\]]+\]\s*/,``).replace(/^[A-Z][A-Z0-9_]+:\s*/,``)}function tl(e,t){return jn(e)||(t?[{field:t,message:tr(e)||el(e)}]:null)}async function nl(e,t,n,r,i){if(typeof e?.update==`function`)await e.update(t,n,r,i);else if(typeof e?.updateOne==`function`)await e.updateOne(t,n,r,i);else if(typeof e?.patch==`function`)await e.patch(t,n,r,i);else throw Error(`[InlineEditSaveBar] DataSource exposes no update/updateOne/patch method; cannot persist inline edit`)}var rl=({dataSource:e,objectName:t,recordId:n,data:r,refresh:i,fieldLabelFor:a,onFieldSave:o,locked:s=!1,lockedHint:c,className:l})=>{let{t:u}=Sa(),d=Ut(),[f,p]=Q.useState(null),[m,h]=Q.useState(!1),g=Q.useCallback(e=>a?.(e)||e,[a]),_=!!e&&!!t&&n!=null,v=Q.useCallback((e,t)=>{if(!d)return;let n=tl(e,t);if(!n){d.setFieldErrors(null),d.setError(el(e));return}let r=e=>a?.(e)||e;d.setFieldErrors(Object.fromEntries(n.map(e=>[e.field,e.message]))),d.setError(n.map(e=>`${r(e.field)}: ${e.message}`).join(`; `))},[d,a]),y=Q.useCallback((e,t)=>{let n=Object.keys(e),r=t?.currentRecord??null;if(n.length===1){let i=n[0];return{field:i,label:a?.(i),pendingValue:e[i],currentValue:r?r[i]:void 0,currentVersion:t?.currentVersion,currentRecord:r}}let i=r?Object.fromEntries(n.map(e=>[e,r[e]])):void 0;return{field:n.join(`, `),label:u(`detail.concurrentUpdateRecordLabel`,{defaultValue:`this record`}),pendingValue:e,currentValue:i,currentVersion:t?.currentVersion,currentRecord:r}},[a,u]),b=Q.useCallback(async()=>{if(!d)return;let a=d.draft,s=Object.entries(a);if(s.length===0){d.reset();return}d.setSaving(!0),d.setError(null),d.setFieldErrors(null);let c;try{if(o){for(let[e,t]of s)c=e,await o(e,t);c=void 0}else if(_){let o=typeof r?.updated_at==`string`?r.updated_at:void 0;await nl(e,t,n,a,o?{ifMatch:o}:void 0),await i?.()}d.reset()}catch(e){$c(e)&&_?p(y(a,e)):v(e,c)}finally{d.setSaving(!1)}},[d,o,_,r,e,t,n,i,y,v]),x=Q.useCallback(()=>{p(null),h(!1)},[]),S=Q.useCallback(async()=>{h(!0);try{await i?.()}finally{d?.reset(),x()}},[i,d,x]),C=Q.useCallback(async()=>{if(!f||!_){x();return}h(!0);try{await nl(e,t,n,d?.draft??{},f.currentVersion?{ifMatch:f.currentVersion}:void 0),await i?.(),d?.reset()}catch(e){v(e)}finally{x()}},[f,_,d,e,t,n,i,x,v]),w=!!d?.editing,T=!!d?.saving,E=d?.cancel,D=!!f;return Q.useEffect(()=>{if(!w)return;let e=e=>{if(e.key===`Enter`&&(e.metaKey||e.ctrlKey)){if(T||s||D)return;e.preventDefault(),b();return}if(e.key===`Escape`){if(e.defaultPrevented||T||D||document.querySelector(`[data-radix-popper-content-wrapper], [role="dialog"][data-state="open"], [role="alertdialog"][data-state="open"]`))return;e.preventDefault(),E?.()}};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[w,T,s,D,b,E]),!d||!d.editing?null:(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(`div`,{className:q(`sticky bottom-0 z-30 mt-4 flex flex-wrap items-center justify-end gap-2 rounded-md border bg-background/95 px-3 py-2 shadow-sm backdrop-blur supports-[backdrop-filter]:bg-background/80`,l),role:`region`,"aria-label":u(`detail.editFieldsInline`),children:[d.error&&(0,$.jsx)(`div`,{role:`alert`,className:`mr-auto max-w-md rounded-md border border-destructive/20 bg-destructive/10 px-2 py-1 text-xs text-destructive`,children:d.fieldErrors?(0,$.jsx)(`ul`,{className:`space-y-0.5`,children:Object.entries(d.fieldErrors).map(([e,t])=>(0,$.jsxs)(`li`,{"data-inline-field-error":e,children:[(0,$.jsx)(`span`,{className:`font-medium`,children:g(e)}),`: `,t]},e))}):d.error}),(0,$.jsxs)(Z,{variant:`ghost`,size:`sm`,onClick:d.cancel,disabled:d.saving,className:`gap-2`,children:[(0,$.jsx)(Ji,{className:`h-4 w-4`}),(0,$.jsx)(`span`,{children:u(`detail.cancel`)})]}),(0,$.jsxs)(Z,{variant:`default`,size:`sm`,onClick:b,disabled:d.saving||s,className:`gap-2`,title:s?c:void 0,children:[d.saving?(0,$.jsx)(vi,{className:`h-4 w-4 animate-spin`}):(0,$.jsx)(Hr,{className:`h-4 w-4`}),(0,$.jsx)(`span`,{children:d.saving?u(`detail.saving`):u(`detail.save`)})]})]}),(0,$.jsx)(Qc,{open:!!f,conflict:f,busy:m,onCancel:x,onReload:S,onOverwrite:C})]})},il=new Set(cr);function al(e,t,n){let r=t?.fields??{};return(Object.keys(r).length?Object.keys(r):Object.keys(e)).filter(e=>!n.has(e)&&!e.startsWith(`__`)).filter(t=>t in e).filter(e=>!r[e]?.hidden).map(e=>{let t=r[e]||{},n=hn(t);return{name:e,label:t.label,type:t.type,readonly:!!t.readonly||n,options:t.options,currency:t.currency,precision:t.precision,scale:t.scale,format:t.format,reference_to:t.reference,reference_field:t.reference_field??t.referenceField,required:t.required,validation:t.validation,placeholder:t.placeholder,description:t.description}})}var ol=`min(960px, 60vw)`;function sl({record:e,objectName:t,recordId:n,dataSource:r,objectSchema:i,columns:a=2,systemFields:o=il,onFieldSave:s,onDelete:c,onClose:l,fullPageHref:u}){let{t:d}=Sa(),f=al(e,i,o);return(0,$.jsxs)(vn,{canEdit:!!s,children:[(0,$.jsx)(Fo,{dataSource:r,inlineEdit:!!s,schema:{type:`detail-view`,objectName:t,resourceId:String(n),data:e,showDelete:!!c,columns:a,fields:f,actions:u?[{type:`action:bar`,location:`record_header`,systemActions:[{name:`sys_open_new_tab`,label:d(`detail.openInNewTab`),icon:`external-link`,type:`script`,onClick:()=>window.open(u,`_blank`,`noopener`)}]}]:void 0},onDelete:c?async()=>{try{await c(),l?.()}catch(e){console.error(`[RecordDetailPanel] delete failed:`,e)}}:void 0}),(0,$.jsx)(rl,{onFieldSave:s?async(e,t)=>{try{await s(e,t)}catch(e){throw console.error(`[RecordDetailPanel] inline field save failed:`,e),e}}:void 0})]})}function cl(e,t){if(typeof window>`u`)return null;let n=window.location.pathname,r=`/${e}`,i=n.indexOf(r);return`${i>=0?n.slice(0,i):n.replace(/\/$/,``)}/${e}/record/${encodeURIComponent(String(t))}`}function ll(e,t){if(!e||!t.length)return[];let n=[...t].sort((e,t)=>t.label.length-e.label.length),r=e,i=new Set;for(let e of n){if(!e.label)continue;let t=e.label.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`),n=RegExp(`@${t}(?![\\p{L}\\p{N}_])`,`gu`);n.test(r)&&(i.add(e.id),r=r.replace(n,e=>` `.repeat(e.length)))}return[...i]}var ul=t({DetailView:()=>Fo,DetailViewRenderer:()=>dl,RECORD_OVERLAY_DEFAULT_WIDTH:()=>ol,RecordActivityRenderer:()=>bc,RecordAlertRenderer:()=>Yc,RecordChatterRenderer:()=>Cc,RecordDetailsRenderer:()=>vs,RecordHighlightsRenderer:()=>Os,RecordHistoryRenderer:()=>zc,RecordPathRenderer:()=>Tc,RecordQuickActionsRenderer:()=>Ac,RecordReferenceRailRenderer:()=>Kc,RecordRelatedListRenderer:()=>Es,RelatedList:()=>Yo,UNMAPPED_ACTIVITY_FEED_TYPE:()=>Xs,buildDefaultPageSchema:()=>ls}),dl=bn(({schema:e,dataSource:t,...n})=>{let r=Rn(t);return(0,$.jsx)(Qn,{schema:e,dataSource:r,testId:`detail-view`,errorTitle:`This detail view’s data source could not be resolved`,requiresDataSource:e?.data==null&&e?.api==null&&typeof e?.objectName==`string`&&e.objectName.length>0,noDataSourceMessage:Ln(`detail-view`,e?.objectName),children:e=>(0,$.jsx)(Fo,{schema:e,dataSource:r,...n})})});_n.register(`detail-view`,dl,{namespace:`plugin-detail`,label:`Detail View`,category:`Views`,icon:`FileText`,inputs:[{name:`title`,type:`string`},{name:`objectName`,type:`string`},{name:`resourceId`,type:`string`},{name:`api`,type:`string`},{name:`data`,type:`object`},{name:`layout`,type:`enum`,enum:[`vertical`,`horizontal`,`grid`]},{name:`columns`,type:`number`},{name:`sections`,type:`array`},{name:`fields`,type:`array`},{name:`tabs`,type:`array`},{name:`actions`,type:`array`},{name:`showBack`,type:`boolean`},{name:`backUrl`,type:`string`},{name:`showEdit`,type:`boolean`},{name:`editUrl`,type:`string`},{name:`showDelete`,type:`boolean`},{name:`deleteConfirmation`,type:`string`},{name:`loading`,type:`boolean`},{name:`header`,type:`object`},{name:`footer`,type:`object`}],defaultProps:{title:`Detail View`,showBack:!0,showEdit:!1,showDelete:!1,sections:[],fields:[],tabs:[]}}),_n.register(`detail-section`,Lo,{namespace:`plugin-detail`,label:`Detail Section`,category:`Detail Components`,inputs:[{name:`title`,type:`string`},{name:`description`,type:`string`},{name:`icon`,type:`string`,description:"Section header icon, drawn before the title: a Lucide icon name such as `map-pin`."},{name:`fields`,type:`array`,required:!0},{name:`collapsible`,type:`boolean`},{name:`defaultCollapsed`,type:`boolean`},{name:`columns`,type:`number`},{name:`showBorder`,type:`boolean`},{name:`headerColor`,type:`enum`,enum:Object.keys(Ha),description:"Header tint, from the design system's closed palette: one of `muted`, `muted/50`, `accent`, `primary/10`, `secondary/10`, `destructive/10`. Any other value is refused — `@object-ui/types` parses this key as that same six-member enum (objectui#6594), matching @objectstack/spec's strict `record:details` section schema. Omit the key for no tint."},{name:`hideEmpty`,type:`boolean`,description:"When every field in the section is empty, `true` hides the whole section (no heading, no skeleton). Omitted or `false`, an all-empty section keeps its heading and label skeleton. Empty fields in a section that still has a filled one are not governed by this key."}]}),_n.register(`related-list`,Yo,{namespace:`plugin-detail`,label:`Related List`,category:`Detail Components`,inputs:[{name:`title`,type:`string`,required:!0},{name:`type`,type:`enum`,enum:[{label:`List`,value:`list`},{label:`Grid`,value:`grid`},{label:`Table`,value:`table`}]},{name:`api`,type:`string`},{name:`data`,type:`array`},{name:`columns`,type:`array`}]}),_n.register(`detail`,Fo,{namespace:`view`,category:`view`,label:`Detail`,icon:`FileText`,inputs:[{name:`objectName`,type:`string`,required:!0},{name:`recordId`,type:`string`},{name:`fields`,type:`array`}]}),_n.register(`details`,vs,{namespace:`record`,skipFallback:!0,category:`record`,label:`Record Details`,icon:`FileText`,inputs:[{name:`columns`,type:`enum`,enum:[`1`,`2`,`3`,`4`],description:`Number of columns for field layout (1-4)`},{name:`sections`,type:`array`,of:`object`,description:"Field groups rendered as the detail body, in order. Every entry is an OBJECT — `{ name?, label?, columns?, fields }` — a bare section-id string is NOT accepted (the spec retired that spelling in objectstack#5611, and the renderer reads name/label/fields off each entry, so a string entry renders no fields at all). `fields` are the field names shown in this section, in order — required unless `group` supplies the members instead (the spec refuses a section carrying neither, and refuses one carrying both). `label` is the section heading; omit it for an untitled, borderless section. `name` is a stable snake_case identifier and the i18n anchor — the heading resolves through objects.<object>._sections.<name>.label, so a section without a name shows its authored label in every locale. `columns` (1-4) is THIS section's field-grid width; omit it and the renderer derives the width. Authoring `sections` at all makes it the only source of the detail body; omit it and the body falls back to the object's highlightFields. @objectstack/spec 17.3.0 declares eight more member keys on an entry, and this renderer honours all eight: `icon` (a Lucide name on the section header), `description` (sub-heading copy under the heading), `collapsible` and `defaultCollapsed` (a foldable section and its initial state), `showBorder` (force the Card wrapper on or off, overriding the heading-derived default) and `headerColor` (a header tint from the shared palette) through DetailSection, plus `group` — the ADR-0085 §5 REFERENCE form, the alternative to enumerating `fields`. `{ group: 'contact_info' }` inherits the object's `fieldGroups` entry with that key: its members (every visible field pointing at it, in declaration order) and its presentation (label, icon, description, collapse) all come from the group, so the section restates none of it and the spec refuses those keys beside `group`; `columns`, `showBorder` and `headerColor` stay yours because they are how THIS page lays the section out. A `group` naming no declared group renders nothing and is reported to the console (`@objectstack/lint` flags it as `page-section-group-unknown`). `hideEmpty` is the eighth, and it decides whether an ALL-empty section exists: it defaults to on, so a section whose fields are every one of them empty renders nothing at all — no heading, no skeleton — and `hideEmpty: false` is the spelling that keeps that heading and its label skeleton on a brand-new record. It decides ONLY the all-empty case; the empty rows of a section that still has a filled one belong to DetailSection's auto-hide heuristic plus the reader's show-empty toggle, which no authored value overrides in either polarity (objectui#7129 Q2-C), and inline-edit mode renders the section either way so its fields stay reachable. Restored under objectui#8603 (maintainer 2026-09-15) after objectui#7129 retired it on the premise, since falsified upstream, that the spec refused the key. None of the eight has a designer control yet; they are authorable in source mode only, tracked as a deferred feature."},{name:`fields`,type:`array`,of:`string`,description:`Explicit field list (overrides highlightFields)`},{name:`hideFields`,type:`array`,of:`string`,description:"Field names to omit from the body — applied to the top-level `fields` list AND to every section's `fields`. Bare field names only. Authors rarely need it: the synth pipeline fills it with the fields already shown in `record:highlights`, and hand-authored pages get the same dedup live from HighlightFieldsContext, so its purpose is suppressing a field you do not want repeated (the page H1 title field is dropped for you too). Hiding every field of a section leaves that section out entirely."},{name:`inlineEdit`,type:`boolean`,description:"Offer the per-field double-click / pencil inline-edit affordances in the detail body. On by default, and an OPT-OUT only: the value is combined with the object's own editability (system, engine-owned, append-only and better-auth objects are not user-editable unless they opened userActions.edit) and with the server's effective API operation set for the object, so `false` always wins while `true` cannot open editing the platform refuses. The edit session and the atomic Save bar are hosted by the page, so one draft spans the highlights strip and this body."},{name:`showHeader`,type:`boolean`,description:"Render the detail body's own title / follow-star / copy-id chip above the fields. Off by default because this block is normally composed under a `page:header` that already draws that chrome, and turning it on there shows the record title twice. Set it true only when this block is the whole page."}]}),_n.register(`related_list`,Es,{namespace:`record`,skipFallback:!0,category:`record`,label:`Related List`,icon:`List`,inputs:[{name:`objectName`,type:`string`,required:!0,description:`Related object name (e.g. "task")`},{name:`relationshipField`,type:`string`,required:!0,description:`Field on the related object pointing back to this record`},{name:`relationshipValueField`,type:`string`,description:'Which field OF THIS PARENT record `relationshipField` stores. Defaults to "id"; set it to the field a name-keyed junction points at (e.g. "name" when sys_user_position.position holds sys_position.name). The resolved value drives three things at once — the list filter, the Add-picker link value, and the pre-filled create form — so they cannot drift apart. While the parent record is still loading, a non-"id" field resolves to null and the list holds its fetch rather than querying on an empty value.'},{name:`columns`,type:`array`,of:`string`,required:!0,description:`Fields to display in the related list`},{name:`sort`,type:`array`},{name:`limit`,type:`number`,description:`Records to display initially`},{name:`filter`,type:`array`,of:`object`,description:"Additional filter criteria, as spec `ViewFilterRule` entries (`[{ field, operator, value }]`). AND-combined with the parent relationship condition, never a replacement for it: it can only narrow this record's children. Also the key a per-element `dataSource` binding's composed filter lands on."},{name:`title`,type:`string`},{name:`showViewAll`,type:`boolean`},{name:`actions`,type:`array`,of:`string`,description:`Action IDs available for related records`},{name:`add`,type:`object`,description:'Adds an "Add" button that assigns EXISTING records instead of creating one — the m2m/junction case. Shape: `{ picker: { object, valueField?, labelField?, filter? }, linkField?, label? }`. `picker.object` (required) is the object whose records the dialog offers. `picker.valueField` is the field of the picked record used as the link value (default "id"); `picker.labelField` is the column shown in the picker rows (default "name", and the other columns are derived from that object\'s schema). With `linkField` set, selecting records CREATES rows in this list\'s own object as `{ [relationshipField]: parentValue, [linkField]: pickedId }` — the junction case; omit `linkField` and the picked child is RE-PARENTED instead, by setting its own `relationshipField` to this parent. `label` is the button text (default "Add", localizable inline). Setting `add` also enables generic link removal on rows when no host delete handler is wired. `picker.filter` restricts which records the dialog offers — a list of `{ field, operator, value }` rules in the same vocabulary as this list\'s own `filter`, applied as a hard constraint the user cannot widen (it never appears as an editable filter row).'}]}),_n.register(`highlights`,Os,{namespace:`record`,skipFallback:!0,category:`record`,label:`Highlights Panel`,icon:`Star`,inputs:[{name:`fields`,type:`array`,required:!0,description:`Key fields to highlight (1-7), bare names or {name,label?,type?,readonly?}. Set readonly: true on an entry to render that chip read-only — it suppresses the inline-edit affordance and the HeaderHighlight editability gate enforces it. Use it for hook/automation-maintained columns that must not be hand-edited from the record header; marking the OBJECT field readonly instead would also strip the hook's own write-back.`},{name:`layout`,type:`enum`,enum:[`horizontal`,`vertical`],description:`Layout orientation for highlight fields`}]}),_n.register(`activity`,bc,{namespace:`record`,skipFallback:!0,category:`record`,label:`Activity Timeline`,icon:`Activity`,inputs:[{name:`types`,type:`array`,of:`string`,description:`Allow-list of feed item types to show (comment, field_change, task, event, email, call, note, file, record_create, record_delete, approval, sharing, system). Omit for all; unrecognised entries are ignored.`},{name:`filterMode`,type:`enum`,enum:[`all`,`comments_only`,`changes_only`,`tasks_only`],description:`Filter the timeline dropdown starts on. The user can still change it; an unrecognised value falls back to "all".`},{name:`showFilterToggle`,type:`boolean`,description:`Expose the activity-type filter dropdown in the panel header`},{name:`limit`,type:`number`,description:`Items per page. Also caps the scoped sys_activity read; "Load more" grows the window by this much.`},{name:`showCompleted`,type:`boolean`,description:`Include completed activities (sys_activity type "completed", which surfaces as a task item). Off by default.`},{name:`unifiedTimeline`,type:`boolean`,description:`Mix field changes and comments in one timeline (Airtable style). Off keeps the panel a discussion stream — field changes stay in record:history.`},{name:`showCommentInput`,type:`boolean`,description:`Show the composer. Requires a host discussion context to persist the comment (record detail pages provide one); without it the feed is read-only.`},{name:`enableMentions`,type:`boolean`,description:`Offer @-mention autocomplete in the composer, from the host discussion context's user list. Off withholds the suggestions.`},{name:`enableReactions`,type:`boolean`,description:`Show emoji reactions on feed items. Toggling one requires a host discussion context; without it existing reactions still render, read-only.`},{name:`enableThreading`,type:`boolean`,description:`Group replies under their parent comment. Posting a reply requires a host discussion context.`},{name:`showSubscriptionToggle`,type:`boolean`,description:`NOT IMPLEMENTED — no record-subscription backend exists yet, so this renders nothing whatever it is set to. Declared for spec parity only (objectui#3165).`}]});var fl=[{name:`position`,type:`enum`,enum:[`bottom`,`right`,`left`],description:`Where the panel docks relative to the record body`},{name:`width`,type:`string`,description:`Panel width as a CSS value (side positions only)`},{name:`collapsible`,type:`boolean`},{name:`defaultCollapsed`,type:`boolean`},{name:`feed`,type:`object`,description:`Activity-feed configuration nested inside the panel — the same shape as record:activity. The spec declares this key as RecordActivityProps (RecordChatterProps.feed), so its members are the inputs record:activity declares; see that block for what each one does.`}];_n.register(`chatter`,Cc,{namespace:`record`,skipFallback:!0,category:`record`,label:`Chatter Feed`,icon:`MessageSquare`,inputs:fl}),_n.register(`discussion`,Cc,{namespace:`record`,skipFallback:!0,category:`record`,label:`Discussion`,icon:`MessageSquare`,inputs:fl}),_n.register(`path`,Tc,{namespace:`record`,skipFallback:!0,category:`record`,label:`Path / Stepper`,icon:`GitBranch`,inputs:[{name:`statusField`,type:`string`,required:!0,description:`Field representing the current status/stage`},{name:`stages`,type:`array`,of:`object`,description:`Explicit stage definitions [{ value, label }] (else derived from field metadata)`}]}),_n.register(`quick_actions`,Ac,{namespace:`record`,skipFallback:!0,category:`record`,label:`Quick Actions`,icon:`Zap`,inputs:[{name:`actionNames`,type:`array`,of:`string`,description:`Action names to expose, in order — resolved from the actions declared on the object. With no names (and no host-supplied actions) nothing is looked up and the bar renders its empty placeholder`},{name:`requiredPermissions`,type:`array`,of:`string`,description:`Hide the whole bar unless the user holds these permissions`},{name:`location`,type:`enum`,enum:[...f],description:`Which declared action location this bar renders`},{name:`align`,type:`enum`,enum:[`start`,`center`,`end`]},{name:`inline`,type:`boolean`,description:`Render in the flow instead of folding into the record header`},{name:`variant`,type:`string`,description:`Passed to the Button primitive; a per-action variant overrides it`},{name:`size`,type:`string`,description:`Passed to the Button primitive; a per-action size overrides it`}]}),_n.register(`history`,zc,{namespace:`record`,skipFallback:!0,category:`record`,label:`History Timeline`,icon:`Clock`,inputs:[{name:`limit`,type:`number`,description:`Maximum history entries to display`},{name:`emptyText`,type:`string`,description:`Copy shown when the record has no history`},{name:`unknownUserText`,type:`string`,description:`Copy substituted when an entry has no resolvable actor`}]}),_n.register(`reference_rail`,Kc,{namespace:`record`,skipFallback:!0,category:`record`,label:`Reference Rail`,icon:`PanelRight`,inputs:[{name:`hideEmpty`,type:`boolean`,description:`Drop the rail entirely when no entries resolve`}]}),_n.register(`alert`,Yc,{namespace:`record`,skipFallback:!0,category:`record`,label:`Alert Banner`,icon:`triangle-alert`,inputs:[{name:`severity`,type:`enum`,enum:[`info`,`warning`,`error`,`success`]},{name:`title`,type:[`string`,`object`],description:`Accepts an inline translation map ({ en, "zh-CN", … })`},{name:`body`,type:[`string`,`object`],description:`Accepts an inline translation map ({ en, "zh-CN", … })`},{name:`visible`,type:[`boolean`,`string`,`object`],description:"Gates the banner against the current record: `true`/`false`, a bare CEL expression, or the `{ dialect: 'cel', source }` envelope"},{name:`icon`,type:`string`,description:`Lucide icon name; defaults to the severity icon`},{name:`action`,type:`object`,description:`{ actionName, label?, variant? } — the action the banner offers`},{name:`dismissible`,type:`boolean`},{name:`dismissKey`,type:`string`,description:`Stable key the dismissal is remembered under`}]}),_n.register(`permission-facet-link`,De(Ta),{namespace:`field`,skipFallback:!0});var pl={red:`bg-red-100`,green:`bg-green-100`,blue:`bg-blue-100`,yellow:`bg-yellow-100`,orange:`bg-orange-100`,purple:`bg-purple-100`,pink:`bg-pink-100`,gray:`bg-gray-100`,grey:`bg-gray-100`,indigo:`bg-indigo-100`,teal:`bg-teal-100`,cyan:`bg-cyan-100`,amber:`bg-amber-100`,lime:`bg-lime-100`,emerald:`bg-emerald-100`,rose:`bg-rose-100`,sky:`bg-sky-100`,violet:`bg-violet-100`,fuchsia:`bg-fuchsia-100`,slate:`bg-slate-100`,zinc:`bg-zinc-100`,stone:`bg-stone-100`,neutral:`bg-neutral-100`};function ml(e){if(e.startsWith(`bg-`))return e;let t=e.toLowerCase().trim();return Object.prototype.hasOwnProperty.call(pl,t)?pl[t]:void 0}function hl(e){return(0,Q.useCallback)(t=>{if(!e?.field||!e.colors)return;let n=String(t[e.field]??``),r=Object.prototype.hasOwnProperty.call(e.colors,n)?e.colors[n]:void 0;if(r)return ml(r)},[e?.field,e?.colors])}function gl(e){if(e==null||e===``)return``;if(Array.isArray(e))return e.map(e=>gl(e)).join(`|`);if(typeof e==`object`){let t=e.id??e._id??e.pk??e.value;if(t!=null&&t!==``)return String(t);let n=e.name??e.label??e.title;if(n!=null&&n!==``)return String(n);try{return JSON.stringify(e)}catch{return``}}return String(e)}function _l(e,t){return gl(e[t])}function vl(e,t,n){if(e==null||e===``)return`(empty)`;if(n){let r=n(t,e);if(r!==void 0&&r!==``)return r}if(Array.isArray(e))return e.map(e=>{if(n){let r=n(t,e);if(r!==void 0&&r!==``)return r}return vl(e,t)}).join(`, `)||`(empty)`;if(typeof e==`object`){let t=e.name??e.label??e.title??e.display_name??e.displayName??e.fullName??e.full_name;if(t!=null&&t!==``)return String(t);let n=e.id??e._id??e.pk;return n!=null&&n!==``?String(n):`(empty)`}return String(e)}function yl(e,t){return t.map(({field:t,type:n})=>{if(n===`count_distinct`){let r=new Set;for(let n of e){let e=n[t];e!=null&&e!==``&&r.add(e)}return{field:t,type:n,value:r.size}}if(n===`count`)return{field:t,type:n,value:e.length};let r=e.map(e=>Number(e[t])).filter(e=>Number.isFinite(e)),i;switch(n){case`sum`:i=r.reduce((e,t)=>e+t,0);break;case`avg`:i=r.length>0?r.reduce((e,t)=>e+t,0)/r.length:0;break;case`min`:i=r.length>0?Math.min(...r):0;break;case`max`:i=r.length>0?Math.max(...r):0;break;default:i=0}return{field:t,type:n,value:i}})}function bl(e,t,n){let r=e.localeCompare(t,void 0,{numeric:!0,sensitivity:`base`});return n===`desc`?-r:r}function xl(e){return Array.isArray(e)?e.filter(e=>{if(typeof e!=`object`||!e)return!1;let t=e.field;return typeof t==`string`&&t.trim()!==``}):[]}var Sl={sum:`sum`,count:`count`,avg:`avg`,min:`min`,max:`max`,count_distinct:`count_unique`};function Cl(e){return Object.prototype.hasOwnProperty.call(Sl,e)?Sl[e]:void 0}function wl(e,t){if(!t||t.length===0)return[];let n=[];for(let{field:r,type:i}of t){let t=Cl(i);if(!t||typeof r!=`string`||r===``)continue;let a=_(e,t,r);a!==void 0&&n.push({field:r,type:i,value:a===null?null:Number(a)})}return n}function Tl(e,t){let n=e==null,r=t==null;return n||r?n&&r:e===t||String(e)===String(t)}function El(e,t,n,r,i){let a=e?.fields,o=(0,Q.useMemo)(()=>xl(a),[a]),s=o.length>0,[c,l]=(0,Q.useState)({});return{groups:(0,Q.useMemo)(()=>{if(!s)return[];if(i){let e=(t,a,s)=>{if(t>=o.length)return[];let l=o[t],u=o.slice(0,t),d=(i.headers[t]??[]).filter(e=>u.every(t=>Tl(e[t.field],s[t.field]))).map(e=>{let t=e[l.field]??null,n=t===null?void 0:i.keyLabels?.[l.field]?.[String(t)];return{row:e,raw:t,segment:gl(t),label:n??vl(t,l.field,r)}}),f=l.order??`asc`;return d.sort((e,t)=>bl(e.label,t.label,f)),d.map(({row:r,raw:i,segment:u,label:d})=>{let f=a?`${a}__${t}:${u}`:`${t}:${u}`,p=!!l.collapsed,m=f in c?c[f]:p,h={...s,[l.field]:i},g=t+1>=o.length,_=Number(r.count);return{key:f,label:d,field:l.field,depth:t,rows:[],count:Number.isFinite(_)?_:0,keyValues:h,collapsed:m,aggregations:wl(r,n),subgroups:g?[]:e(t+1,f,h)}})};return e(0,``,{})}let e=(t,i,a,s)=>{if(i>=o.length)return[];let l=o[i],u=new Map,d=[];for(let e of t){let t=_l(e,l.field);u.has(t)||(u.set(t,{label:vl(e[l.field],l.field,r),rows:[]}),d.push(t)),u.get(t).rows.push(e)}let f=l.order??`asc`;return d.sort((e,t)=>bl(u.get(e)?.label??e,u.get(t)?.label??t,f)),d.map(t=>{let r=u.get(t),d=a?`${a}__${i}:${t}`:`${i}:${t}`,f=!!l.collapsed,p=d in c?c[d]:f,m=n&&n.length>0?yl(r.rows,n):[],h={...s,[l.field]:r.rows[0]?.[l.field]??null},g=i+1<o.length?e(r.rows,i+1,d,h):[];return{key:d,label:r.label,field:l.field,depth:i,rows:r.rows,count:r.rows.length,keyValues:h,collapsed:p,aggregations:m,subgroups:g}})};return e(t,0,``,{})},[t,o,s,c,n,r,i]),isGrouped:s,toggleGroup:(0,Q.useCallback)(e=>{l(t=>{let n=e.split(`__`).pop()||``,r=/^(\d+):/.exec(n),i=r?Number(r[1]):0,a=!!o[i]?.collapsed;return{...t,[e]:t[e]===void 0?!a:!t[e]}})},[o])}}function Dl(e){let t=[];for(let n of e??[]){if(!n||typeof n.field!=`string`||n.field===``)continue;let e=Cl(n.type);e&&t.push({field:n.field,summary:e})}return t}function Ol(e){return{fields:e.map(e=>({field:e.field}))}}var kl={headers:void 0,keyLabels:{},loading:!1,error:null};function Al(e){let{enabled:t,dataSource:n,objectName:r,fields:i,where:a,aggregations:o,objectFields:s,reloadKey:c}=e,[l,u]=(0,Q.useState)(kl),d=JSON.stringify(i.map(e=>e.field)),f=JSON.stringify(a??null),p=JSON.stringify(Dl(o)),m=JSON.stringify(i.map(e=>{let t=s?.[e.field];return hn(t)&&typeof t?.reference==`string`&&t.reference?[t.reference,typeof t.displayField==`string`?t.displayField:null]:null})),h=t&&!!r&&typeof n?.queryGroupHeaders==`function`&&i.length>0;return(0,Q.useEffect)(()=>{if(!h||!n||!r){u(e=>e===kl?e:kl);return}let e=!1;u(e=>({...e,loading:!0,error:null}));let t=JSON.parse(d),i=JSON.parse(m),a=Ol(t.map(e=>({field:e}))),o=JSON.parse(p),s=JSON.parse(f);return(async()=>{try{let c=await Promise.all(t.map((e,t)=>n.queryGroupHeaders(r,v({grouping:a,columns:o},{...s?{where:s}:{},depth:t+1})))),l={},d=c[c.length-1]??[];await Promise.all(t.map(async(e,t)=>{let r=i[t];if(!r)return;let[a,o]=r,s=[...new Set(d.map(t=>t[e]).filter(e=>e!=null&&e!==``))];if(s.length!==0)try{let t=await n.find(a,{$filter:{id:{$in:s}},$top:s.length}),r={};for(let e of t?.data??[]){let t=e?.id;if(t==null)continue;let n=(o?e[o]:void 0)??e.name??e.label??e.title;n!=null&&n!==``&&(r[String(t)]=String(n))}l[e]=r}catch(t){console.warn(`[ObjectGrid] Failed to resolve group labels for '${e}' (${a}):`,t)}})),e||u({headers:c,keyLabels:l,loading:!1,error:null})}catch(t){e||u({headers:void 0,keyLabels:{},loading:!1,error:t instanceof Error?t:Error(String(t))})}})(),()=>{e=!0}},[h,n,r,d,f,p,m,c]),l}function jl(e){let{enabled:t,dataSource:n,objectName:r,fields:i,where:a,baseParams:o,pageSize:s,leaves:c,reloadKey:l}=e,[u,f]=(0,Q.useState)({}),p=JSON.stringify(i.map(e=>e.field)),m=JSON.stringify(a??null),h=JSON.stringify(o??null),g=JSON.stringify(c.map(e=>[e.key,e.keyValues])),_=JSON.stringify([p,m,h,s,l]),[v,y]=(0,Q.useState)({queryKey:_,pages:{}}),b=v.queryKey===_?v.pages:{},x=t&&!!r&&!!n&&o!==null&&i.length>0,S=JSON.stringify(b);return(0,Q.useEffect)(()=>{if(!x||!n||!r||!o)return;let e=Ol(JSON.parse(p).map(e=>({field:e}))),t=JSON.parse(m),i=JSON.parse(g);for(let[a,c]of i){let i=JSON.parse(S)[a]??1,l=JSON.stringify([_,a,i]);if(u[a]?.signature===l)continue;f(e=>({...e,[a]:{rows:e[a]?.rows??[],page:i,loading:!0,error:null,signature:l}}));let p=d({grouping:e},c,{...t?{where:t}:{},limit:s,offset:(i-1)*s}),{$search:m,$searchFields:h,$filter:g,...v}=o,y={...v,$filter:p.where,$top:p.limit,$skip:p.offset};n.find(r,y).then(e=>{f(t=>t[a]?.signature===l?{...t,[a]:{rows:e?.data??[],page:i,loading:!1,error:null,signature:l}}:t)}).catch(e=>{f(t=>t[a]?.signature===l?{...t,[a]:{rows:[],page:i,loading:!1,error:e instanceof Error?e:Error(String(e)),signature:l}}:t)})}},[x,n,r,p,m,g,S,_,s]),{pages:u,setPage:(0,Q.useCallback)((e,t)=>{y(n=>{let r=n.queryKey===_?n.pages:{};return r[e]===t&&n.queryKey===_?n:{queryKey:_,pages:{...r,[e]:t}}})},[_])}}var Ml=({groupKey:e,label:t,count:n,collapsed:r,aggregations:i,fieldLabel:a,labelColorClass:o,labelColorStyle:s,onToggle:c,children:l})=>{let u=o?q(`inline-flex items-center rounded-md border px-2 py-0.5 text-xs font-medium`,o):`inline-flex items-center rounded-md bg-muted px-2 py-0.5 text-xs font-medium text-foreground`;return(0,$.jsxs)(`div`,{"data-testid":`group-row-${e}`,className:`group/grouprow`,children:[a&&(0,$.jsx)(`div`,{className:`px-1 pb-1 text-[11px] font-medium text-muted-foreground tracking-wide group-label-caption`,children:a}),(0,$.jsxs)(`button`,{type:`button`,className:`flex w-full items-center gap-2 px-1 py-1 text-sm text-left rounded-md hover:bg-muted/40 transition-colors`,onClick:()=>c(e),"aria-expanded":!r,children:[r?(0,$.jsx)(Gr,{className:`h-3.5 w-3.5 shrink-0 text-muted-foreground`}):(0,$.jsx)(Ur,{className:`h-3.5 w-3.5 shrink-0 text-muted-foreground`}),(0,$.jsx)(`span`,{className:q(u,`group-label`),style:s,children:t}),(0,$.jsx)(`span`,{className:`text-xs text-muted-foreground tabular-nums group-count`,children:n}),i&&i.length>0&&(0,$.jsx)(`span`,{className:`ml-2 text-xs text-muted-foreground group-aggregations`,children:i.map(e=>(0,$.jsxs)(`span`,{className:`mr-2`,children:[e.type,`: `,e.value===null?`—`:Number.isInteger(e.value)?e.value:e.value.toFixed(2)]},`${e.field}-${e.type}`))})]}),!r&&(0,$.jsx)(`div`,{className:`mt-1 ml-1.5 pl-3 border-l border-border/60`,children:l})]})},Nl=new Set([`count`,`count_empty`,`count_filled`,`count_unique`,`percent_empty`,`percent_filled`]),Pl=new Set([`percent_empty`,`percent_filled`]),Fl={none:``,count:`grid.summary.count`,count_empty:`grid.summary.countEmpty`,count_filled:`grid.summary.countFilled`,count_unique:`grid.summary.countUnique`,percent_empty:`grid.summary.percentEmpty`,percent_filled:`grid.summary.percentFilled`,sum:`grid.summary.sum`,avg:`grid.summary.avg`,min:`grid.summary.min`,max:`grid.summary.max`},Il=wr({"grid.summary.pattern":`{{label}}: {{value}}`,"grid.summary.count":`Count`,"grid.summary.countEmpty":`Empty`,"grid.summary.countFilled":`Filled`,"grid.summary.countUnique":`Unique`,"grid.summary.percentEmpty":`Empty`,"grid.summary.percentFilled":`Filled`,"grid.summary.sum":`Sum`,"grid.summary.avg":`Avg`,"grid.summary.min":`Min`,"grid.summary.max":`Max`},`grid.summary.sum`),Ll=new Set(Object.keys(Fl)),Rl=e=>e==null||e===``||Array.isArray(e)&&e.length===0;function zl(e){if(typeof e==`object`)try{return JSON.stringify(e)??String(e)}catch{return String(e)}return e}function Bl(e){return typeof e==`string`?{type:e}:e}function Vl(e,t){let n=[];for(let r of e){let e=r[t];if(typeof e==`number`&&!isNaN(e))n.push(e);else if(typeof e==`string`){let t=parseFloat(e);isNaN(t)||n.push(t)}}return n}function Hl(e,t,n){if(Nl.has(e)){let r=t.length;if(r===0)return null;switch(e){case`count`:return r;case`count_filled`:return t.filter(e=>!Rl(e[n])).length;case`count_empty`:return t.filter(e=>Rl(e[n])).length;case`count_unique`:{let e=new Set;for(let r of t){let t=r[n];Rl(t)||e.add(zl(t))}return e.size}case`percent_filled`:return t.filter(e=>!Rl(e[n])).length/r*100;case`percent_empty`:return t.filter(e=>Rl(e[n])).length/r*100;default:return null}}let r=Vl(t,n);if(r.length===0)return null;switch(e){case`sum`:return r.reduce((e,t)=>e+t,0);case`avg`:return r.reduce((e,t)=>e+t,0)/r.length;case`min`:return Math.min(...r);case`max`:return Math.max(...r);default:return null}}var Ul=/^[A-Za-z]{3}$/;function Wl(e,t,n,r,i,a){if(t===null)return``;let o=Fl[e],s=o?n(o):e,c=e=>n(`grid.summary.pattern`,{label:s,value:e});if(Pl.has(e))return c(`${t.toLocaleString(a,{maximumFractionDigits:1})}%`);if(Nl.has(e))return c(t.toLocaleString(a));let l=r?.type,u;if(l===`currency`){let e=Er(r,i);u=e&&!Ul.test(e)?t.toLocaleString(a):lt(t,e,a)}else if(l===`percent`){let e=r?.scale??0;u=mt(t,e,a)}else u=e===`avg`?t.toLocaleString(a,{maximumFractionDigits:2}):t.toLocaleString(a);return c(u)}function Gl(e,t,n){let{currency:r}=Tr(),i=kr(),{t:a}=Il();return(0,Q.useMemo)(()=>{let o=new Map;if(!e||e.length===0||t.length===0)return{summaries:o,hasSummary:!1};for(let s of e){if(!s.summary)continue;let e=Bl(s.summary);if(e.type===`none`||!Ll.has(e.type))continue;let c=e.field||s.field,l=Hl(e.type,t,c),u=n?.[c],d={type:s.type??u?.type,currency:s.currency??u?.currency,defaultCurrency:s.defaultCurrency??u?.defaultCurrency,currencyConfig:u?.currencyConfig,precision:s.precision??u?.precision,scale:s.scale??u?.scale};o.set(s.field,{field:s.field,value:l,label:Wl(e.type,l,a,d,r,i)})}return{summaries:o,hasSummary:o.size>0}},[e,t,n,r,i,a])}function Kl(e){let t=Qt({managedBy:e.managedBy,userActions:e.userActions},e.effectiveApiOperations),n=t.edit&&e.permissionUpdate!==!1,r=t.delete&&e.permissionDelete!==!1,i=!e.rowActionsDeclared||!!e.wantEditAction,a=!e.rowActionsDeclared||!!e.wantDeleteAction,o=!!(e.operationsUpdate&&i&&e.hasOnEdit)&&n,s=!!(e.operationsDelete&&a&&e.hasOnDelete)&&r;return{canEdit:o,canDelete:s,objectCanDelete:r,editPredicates:o?t.editPredicates:void 0,deletePredicates:s?t.deletePredicates:void 0,objectDeletePredicates:r?t.deletePredicates:void 0}}function ql(e,t){return!!e&&t!==!1}var Jl=new Map,Yl=(e,t,n,r)=>JSON.stringify([e,t,n,r]),Xl;function Zl(e){Xl!==void 0&&Xl!==e&&Jl.clear(),Xl=e}var Ql=new Set;function $l(e){for(let t of Array.from(Jl.keys())){let[,n,r]=JSON.parse(t);nr(e,n,r)&&Jl.delete(t)}for(let t of Ql)for(let n of t.recordIds)nr(e,t.object,n)&&t.staled.add(n)}Wn($l);var eu=()=>void 0;function tu(e){let{objectName:t,recordIds:n,update:r,delete:i}=e,a=Q.useContext(It)?.apiFetch,o=y().userId,s=Vn(t),c=JSON.stringify(n),l=Q.useMemo(()=>JSON.parse(c),[c]),[u,d]=Q.useState(()=>new Map);return Q.useEffect(()=>{Zl(o);let e=[];if(r&&e.push(`update`),i&&e.push(`delete`),!t||l.length===0||e.length===0){d(new Map);return}let n=!1,s=a??fetch,c=()=>{let n=new Map;for(let r of e)for(let e of l){let i=Jl.get(Yl(o,t,e,r));typeof i==`boolean`&&n.set(`${r}:${e}`,i)}d(n)};return(async()=>{await Promise.all(e.map(async e=>{let n=l.filter(n=>!Jl.has(Yl(o,t,n,e)));for(let r=0;r<n.length;r+=200){let i=n.slice(r,r+200),a={object:t,operation:e,recordIds:i},c={object:t,recordIds:i,staled:new Set};Ql.add(c);try{let n=await s(`/api/v1/security/explain`,{method:`POST`,headers:{"Content-Type":`application/json`},credentials:`include`,body:JSON.stringify(a)});if(!n.ok)continue;let r=(await n.json())?.records;if(!Array.isArray(r))continue;i.forEach((n,i)=>{let a=r[i];a&&typeof a.visible==`boolean`&&(typeof a.recordId!=`string`||a.recordId===n)&&(c.staled.has(n)||Jl.set(Yl(o,t,n,e),a.visible))})}catch{}finally{Ql.delete(c)}}})),n||c()})(),c(),()=>{n=!0}},[t,l,r,i,a,o,s]),Q.useMemo(()=>u.size===0?eu:(e,t)=>e==null?void 0:u.get(`${t}:${String(e)}`),[u])}function nu(e){let t=Array.isArray(e.rowActionDefs)?e.rowActionDefs:[],n=Array.isArray(e.rowActions)?e.rowActions:[];if(n.length===0)return{defs:t,unresolved:[]};let r=Array.isArray(e.objectActions)?e.objectActions:[],i=new Set(t.map(e=>e?.name).filter(e=>typeof e==`string`&&e!==``)),a=[],o=[];for(let e of n){if(typeof e!=`string`||e===``||i.has(e))continue;let t=r.find(t=>t?.name===e);t?(i.add(e),a.push(t)):o.push(e)}return{defs:a.length>0?[...t,...a]:t,unresolved:o}}var ru=Object.freeze([`cell`]),iu=Object.freeze([`cell`,`lookup-editor`,`user-editor`]),au=Object.freeze([`cell`,`lookup-editor`]),ou=Object.freeze([`lookup-editor`,`user-editor`]),su=Object.freeze([`lookup-editor`]),cu=new Set([`spec`,`adapter-stamped`,`widget-contract`]),lu={reference:{verdict:`spec`,readers:iu,note:`FieldSchema.reference — the served spelling for a lookup's target object.`},reference_to:{verdict:`adapter-stamped`,readers:iu,note:"normalizeSchemaReferenceKeys stamps it from `reference` at the getObjectSchema choke point."},reference_field:{verdict:`no-producer`,readers:iu,note:"Third leg of the display-field chain. Not on FieldSchema; zero occurrences in the producer repo (control: `displayField`, 68 files). objectui#6875."},displayField:{verdict:`spec`,readers:iu,note:"FieldSchema.displayField. ⭐ Added by objectui#6875 as the only display spelling a spec-compliant producer can emit; objectui#7155 made it the ONLY one read, retiring the `display_field` leg that used to outrank it."},descriptionField:{verdict:`spec`,readers:su,note:`FieldSchema.descriptionField. Added by objectui#6875, RETIRED from the copy set by objectui#7166: its only reader is LookupField, which the inline editor feeds from the schema def, so the copy reached nothing. Measured by rendering — the picker's secondary line still appears with this table unchanged.`},lookupColumns:{verdict:`spec`,readers:su,note:"FieldSchema.lookupColumns. Added by objectui#6875, RETIRED from the copy set by objectui#7166 on the same measurement as `descriptionField`. Measured by rendering — the declared columns still shape the picker with this table unchanged."},lookup_columns:{verdict:`no-producer`,readers:su,note:"Runtime twin of `lookupColumns`, read but never producible. Not on FieldSchema. objectui#6875."},lookupFilters:{verdict:`spec`,readers:ou,note:`FieldSchema.lookupFilters. RETIRED from the copy set by objectui#7166: read off a field meta only by LookupField and UserField, both fed by the editor's schema spread. Measured by rendering — the declared filter still scopes the picker's candidates with this table unchanged.`},idField:{verdict:`widget-contract`,readers:su,note:"LookupFieldMetadata.idField — the picker's id column. Absent from FieldSchema, and `id_field` was too: this is a widget-contract key by construction, not a spelling gap. Read only by LookupField, which the inline editor feeds from the schema def, so it stays off the copy set (objectui#7166's measurement, unchanged by the rename)."},multiple:{verdict:`spec`,readers:su,note:`FieldSchema.multiple — picker cardinality. Read only by LookupField, which the grid feeds from the schema def, not from this bag: measured accumulating two picks in the inline picker with this table unchanged (objectui#7154).`},allowCreate:{verdict:`spec`,readers:su,note:"FieldSchema.allowCreate — picker quick-create affordance. Same route as `multiple`: `allowCreate: false` measured removing the create entry the control column offers (objectui#7154)."},lookupPageSize:{verdict:`spec`,readers:su,note:`FieldSchema.lookupPageSize — picker page size. Same route: a declared 3 measured scoping the picker dialog to 3 rows against a control of 10 (objectui#7154).`},dependsOn:{verdict:`spec`,readers:su,note:"FieldSchema.dependsOn — cascading picker filter. Same route, and it ARRIVES: the declared column renders the trigger, gated while a named parent is empty. Whether that gate can LIFT here is re-derived by `__tests__/gridDependentValues-7165.test.tsx`, not asserted in this sentence — the grid’s inline editor has supplied the dependent record since objectui#7165/#7188, closing objectui#2215’s grid-side residue (objectui#7154). The bulk action dialog’s half of that residue is objectui#8755."},allow_create:{verdict:`no-producer`,readers:su,note:"Runtime twin of `allowCreate`. Not on FieldSchema."},lookup_page_size:{verdict:`no-producer`,readers:su,note:"Runtime twin of `lookupPageSize`. Not on FieldSchema."},picker:{verdict:`no-producer`,readers:ou,note:`PeoplePicker variant opt-in. Not on FieldSchema.`},subtitle:{verdict:`no-producer`,readers:ou,note:`PeoplePicker subtitle fields. Not on FieldSchema.`},avatarField:{verdict:`no-producer`,readers:ou,note:`PeoplePicker avatar field. Not on FieldSchema.`},avatar_field:{verdict:`no-producer`,readers:ou,note:"Runtime twin of `avatarField`. Not on FieldSchema."},options:{verdict:`handled-elsewhere`,readers:au,note:"Written by generateColumns as `translateOptions(...)`, which localises the labels; a raw copy would undo that."},dataSource:{verdict:`handled-elsewhere`,readers:su,note:"Not a schema key — LookupField reads its own `props.dataSource` fallback off the meta bag."}};function uu(e){return e.readers.some(e=>ru.includes(e))}var du=Object.freeze(Object.entries(lu).filter(([,e])=>cu.has(e.verdict)&&(uu(e)||e.copiedWithoutCellReader!==void 0)).map(([e])=>e));function fu(e,t){if(t)for(let n of du)t[n]!==void 0&&(e[n]=t[n])}var pu=new Set([`primary`,`secondary`,`danger`,`ghost`]);function mu(e){let t=typeof e.name==`string`&&e.name||typeof e.field==`string`&&e.field||``;if(!t)return null;let n={...e,name:t,type:typeof e.type==`string`?e.type:`text`};return typeof e.label==`string`&&(n.label=e.label),typeof e.helpText==`string`&&(n.help=e.helpText),e.defaultValue!==void 0&&(n.default=e.defaultValue),typeof e.reference==`string`&&(n.object=e.reference),n}function hu(e,t){let n=String(e.name),r=(Array.isArray(e.params)?e.params:[]).map(e=>e&&typeof e==`object`?mu(e):null).filter(e=>e!==null),i=typeof e.variant==`string`&&pu.has(e.variant)?e.variant:void 0,a=typeof e.confirmText==`string`?e.confirmText:void 0,o=typeof e.label==`string`?e.label:void 0,s=t?t(n,o??n):o;return{name:n,...s!==void 0&&{label:s},...typeof e.icon==`string`&&{icon:e.icon},...i&&{variant:i},operation:`custom`,...r.length>0&&{params:r},...a!==void 0&&{confirmText:a},...e.visible!=null&&{visible:e.visible},...Array.isArray(e.requiredPermissions)&&{requiredPermissions:e.requiredPermissions},batchSize:25,actionDef:e}}function gu(e){if(!e||typeof e!=`object`)return!1;let t=e.name;return typeof t==`string`&&t.length>0}function _u(e){return typeof e==`string`?`'${e}'`:String(e)}function vu({blockType:e,objectName:t,label:n}){let r=typeof e==`string`&&e.length>0?e:`object-grid`,i=[];return typeof t==`string`&&t.length>0?i.push(`objectName: '${t}'`):i.push(`no objectName`),typeof n==`string`&&n.length>0&&i.push(`label: '${n}'`),`${r} (${i.join(`, `)})`}function yu(e){if(e==null)return`the entry is ${String(e)}, not a def object`;if(typeof e!=`object`){let t=typeof e==`string`&&e.length>0?` Write \`{ name: '${e}', operation: 'custom' }\` here, or move the bare name to \`bulkActions\`, which resolves it against the object's declared actions and promotes the match.`:``;return`the entry is a ${typeof e} (${_u(e)}), not a def object — this key's members are full \`BulkActionDef\` objects, used as authored.${t}`}let t=e,n=Object.keys(t),r=n.length>0?`keys seen: ${n.map(e=>`\`${e}\``).join(`, `)}`:"the entry is empty `{}`";if(!(`name`in t))return`${r} — no \`name\` key, so the def has no identity.`;let i=t.name;return typeof i==`string`?`${r} — \`name\` is an empty string, so the button would carry no key and no label.`:`${r} — \`name\` is a ${i===null?`null`:typeof i} (${_u(i)}), and only a non-empty string names an action.`}function bu(e,t){if(!Array.isArray(e)||e.length===0)return null;let n=e.map((e,t)=>({index:t,member:e})).filter(({member:e})=>!gu(e));if(n.length===0)return null;let r=e.length-n.length,i=`${n.length} of ${e.length} authored bulk-action def${e.length===1?``:`s`} cannot be rendered and ${n.length===1?`is`:`are`} skipped`,a=r===0?`${i}, so this selection bar offers NO bulk-action buttons`:`${i} (${r} still render)`,o=n.map(({index:e,member:t})=>` • bulkActionDefs[${e}]: ${yu(t)}`);return`[ObjectUI] ObjectGrid bulkActionDefs: ${vu(t)} — ${a}.\n${o.join(`
3
- `)}\n A \`bulkActionDefs\` member must be an object with a non-empty string \`name\`: the selection bar uses it as the button's React key AND as the source of its label.`}function xu(e){let t=Array.isArray(e.bulkActionDefs)?e.bulkActionDefs:[],n=t.every(gu)?t:t.filter(gu),r=Array.isArray(e.bulkActions)?e.bulkActions:[],i=Array.isArray(e.objectActions)?e.objectActions:[],a=e=>!!e&&e.execution===`aggregate`&&e.operation===`custom`&&!e.actionDef&&typeof e.name==`string`&&e.name!==``,o=n.some(a)?n.map(t=>{if(!a(t))return t;let n=i.find(e=>e?.name===t.name);if(!n)return t;let{batchSize:r,...o}=hu(n,e.localizeLabel);return{...o,...t}}):n,s=new Set(o.map(e=>e?.name).filter(e=>typeof e==`string`&&e!==``)),c=[],l=[];for(let t of r){if(typeof t!=`string`||t===``||s.has(t))continue;s.add(t);let n=i.find(e=>e?.name===t);n?c.push(hu(n,e.localizeLabel)):l.push(t)}return{defs:c.length>0?[...o,...c]:o,unresolved:l}}function Su(e){let t=e?.visible;return t!=null&&t!==``}function Cu(e,t,n={}){return yr(e?.visible,t,{scope:n.scope,fields:n.fields,warnOnError:!0,label:e?.name})}var wu=`field`,Tu=`label`,Eu=[`accessorKey`,`header`];function Du(e){if(!e||typeof e!=`object`)return!1;let t=e;return!t.hidden&&typeof t.field==`string`&&t.field.length>0}function Ou(e){return!!e&&typeof e==`object`&&!!e.hidden}function ku(e){return typeof e==`string`?`'${e}'`:String(e)}function Au(e){if(e==null)return`the entry is ${String(e)}, not a column object`;if(typeof e!=`object`)return`the entry is a ${typeof e} (${ku(e)}), not a column object — a bare field name only works when EVERY entry is a string (\`columns: ['name', 'amount']\`)`;let t=e,n=Object.keys(t),r=Eu.filter(e=>e in t),i=n.length>0?`keys seen: ${n.map(e=>`\`${e}\``).join(`, `)}`:"the entry is empty `{}`";if(r.length>0){let e=t.accessorKey,n=t.header,a=typeof e==`string`&&e.length>0?` Write \`{ ${wu}: '${e}'${typeof n==`string`&&n.length>0?`, ${Tu}: '${n}'`:``} }\` instead.`:``;return`${i} — ${r.map(e=>`\`${e}\``).join(` / `)} ${r.length>1?`are`:`is`} refused by name and not read here.${a}`}if(!(`field`in t))return`${i} — no \`${wu}\` key, so the column names no field.`;let a=t[wu];return typeof a==`string`?a.length===0?`${i} — \`${wu}\` is an empty string, so the column names no field.`:`${i} — \`${wu}\` is '${a}', and the column still did not resolve.`:`${i} — \`${wu}\` is a ${a===null?`null`:typeof a} (${ku(a)}), and only a non-empty string names a field.`}function ju(e){if(!Array.isArray(e)||e.length===0||typeof e[0]!=`object`||e[0]===null)return null;let t={resolved:0,hidden:0,unresolved:[]};return e.forEach((e,n)=>{Du(e)?t.resolved+=1:Ou(e)?t.hidden+=1:t.unresolved.push({index:n,detail:Au(e)})}),t}function Mu({blockType:e,objectName:t,label:n}){let r=typeof e==`string`&&e.length>0?e:`object-grid`,i=[];return typeof t==`string`&&t.length>0?i.push(`objectName: '${t}'`):i.push(`no objectName`),typeof n==`string`&&n.length>0&&i.push(`label: '${n}'`),`${r} (${i.join(`, `)})`}function Nu(e,t){let n=ju(e);if(!n||n.unresolved.length===0)return null;let r=Array.isArray(e)?e.length:0,i=n.unresolved.length,a=n.resolved===0?`${i} of ${r} authored columns resolve to nothing, so this grid renders its row-number column and NO data columns`:`${i} of ${r} authored columns resolve to nothing and are dropped (${n.resolved} still render)`,o=n.unresolved.map(e=>` • columns[${e.index}]: ${e.detail}`);return`[ObjectUI] ObjectGrid columns: ${Mu(t)} — ${a}.\n${o.join(`
4
- `)}\n \`ListColumnSchema\` (@objectstack/spec/ui) declares ONE column spelling: \`${wu}\` (required — the field name) and \`${Tu}\` (the header). A plain \`string[]\` of field names works too. (objectui#5349)`}var Pu={"grid.openMenu":`Open menu`,"grid.edit":`Edit`,"grid.delete":`Delete`};function Fu(){let{t:e}=Ar();return t=>{let n=e(t);return n===t?Pu[t]??t:n}}function Iu(e){return e.replace(/_/g,` `).replace(/\b\w/g,e=>e.toUpperCase())}function Lu(e,t,n,r,i){return typeof e==`boolean`?e:e==null||e===``?!1:Nn(e,t??{},{fallback:!1,scope:n,warnOnError:!0,label:r,fields:i})}function Ru(e,t,n,r,i){let a=e?.visibleWhen;return a==null||Lu(a,n,r,`builtin:${t}:visibleWhen`,i)}function zu(e,t,n,r){let i=e?.visible;return i==null||i===``||Lu(i,t,n,e?.name??`row-action`,r)}function Bu(e){let{row:t,scope:n,objectFields:r}=e,i=!!(e.canEdit&&e.onEdit)&&Ru(e.editPredicates,`edit`,t,n,r),a=!!(e.canDelete&&e.onDelete)&&Ru(e.deletePredicates,`delete`,t,n,r),o=(e.actionDefs??[]).filter(e=>zu(e,t,n,r)),s=o.filter(e=>e.variant===`primary`),c=Math.max(0,e.maxInlineActions??1),l=s.slice(0,c),u=[...s.slice(c),...o.filter(e=>e.variant!==`primary`)],d=[...e.rowActions??[]];return{inline:l,edit:i,remove:a,custom:u,legacy:d,menuCount:+!!i+ +!!a+u.length+d.length}}var Vu=({def:e,row:t,objectFields:n,onActionDef:r})=>{let i=sn(),a=Q.useMemo(()=>zu(e,t,i,n),[e,t,i,n]),o=Vt(e.disabled,t,{fallback:!1,warnOnError:!0,label:`${e.name}:disabled`,fields:n});return a?(0,$.jsx)(pt,{disabled:o,onClick:()=>{o||r?.(e,t)},"data-testid":`row-action-${e.name}`,className:e.variant===`danger`?`text-destructive focus:text-destructive`:void 0,children:e.label??Iu(e.name)}):null},Hu=({name:e,predicates:t,row:n,icon:r,label:i,className:a,objectFields:o,onSelect:s})=>{let c=sn(),l=Q.useMemo(()=>Ru(t,e,n,c,o),[t,e,n,c,o]),u=Vt(t?.disabledWhen,n,{fallback:!1,warnOnError:!0,label:`builtin:${e}:disabledWhen`,fields:o});if(!l)return null;let d=t?.disabledWhen!=null&&u;return(0,$.jsxs)(pt,{disabled:d,onClick:()=>{d||s(n)},"data-testid":`row-action-builtin-${e}`,className:a,children:[r,i]})};function Uu(e){switch(e){case`danger`:return`destructive`;case`secondary`:return`secondary`;case`ghost`:return`ghost`;case`link`:return`link`;default:return`default`}}var Wu=({def:e,row:t,objectFields:n,onActionDef:r})=>{let i=sn();return Q.useMemo(()=>zu(e,t,i,n),[e,t,i,n])?(0,$.jsx)(Z,{variant:Uu(e.variant),size:`sm`,className:`h-8`,"data-testid":`row-action-inline-${e.name}`,onClick:n=>{n.stopPropagation(),r?.(e,t)},children:e.label??Iu(e.name)}):null},Gu=({row:e,rowActions:t,rowActionDefs:n,canEdit:r,canDelete:i,editPredicates:a,deletePredicates:o,onEdit:s,onDelete:c,onAction:l,onActionDef:u,maxInlineActions:d=1,objectFields:f})=>{let p=Fu(),m=hr(),h=Q.useMemo(()=>(n??[]).filter(e=>m(e?.requiredPermissions)),[n,m]),g=sn(),_=Q.useMemo(()=>Bu({row:e,scope:g,actionDefs:h,maxInlineActions:d,rowActions:t,canEdit:r,canDelete:i,onEdit:s,onDelete:c,editPredicates:a,deletePredicates:o,objectFields:f}),[e,g,h,d,t,r,i,s,c,a,o,f]),v=_.menuCount>0;return(0,$.jsxs)(`div`,{className:`flex items-center justify-end gap-1 whitespace-nowrap`,onClick:e=>e.stopPropagation(),children:[_.inline.map(t=>(0,$.jsx)(Wu,{def:t,row:e,objectFields:f,onActionDef:u},t.name)),v&&(0,$.jsxs)(he,{children:[(0,$.jsx)(dt,{asChild:!0,children:(0,$.jsxs)(Z,{variant:`ghost`,size:`icon`,className:`h-8 w-8 min-h-[44px] min-w-[44px] sm:min-h-0 sm:min-w-0`,"data-testid":`row-action-trigger`,children:[(0,$.jsx)(ii,{className:`h-4 w-4`}),(0,$.jsx)(`span`,{className:`sr-only`,children:p(`grid.openMenu`)})]})}),(0,$.jsxs)(b,{align:`end`,onClick:e=>e.stopPropagation(),children:[_.edit&&(0,$.jsx)(Hu,{name:`edit`,predicates:a,row:e,icon:(0,$.jsx)(Li,{className:`mr-2 h-4 w-4`}),label:p(`grid.edit`),objectFields:f,onSelect:e=>s?.(e)}),_.remove&&(0,$.jsx)(Hu,{name:`delete`,predicates:o,row:e,icon:(0,$.jsx)(Hi,{className:`mr-2 h-4 w-4`}),label:p(`grid.delete`),objectFields:f,onSelect:e=>c?.(e)}),_.custom.map(t=>(0,$.jsx)(Vu,{def:t,row:e,objectFields:f,onActionDef:u},t.name)),_.legacy.map(t=>(0,$.jsx)(pt,{onClick:()=>l?.(t,e),"data-testid":`row-action-${t}`,children:Iu(t)},t))]})]})]})},Ku=({def:e,selectedRows:t,objectFields:n,onActionDef:r})=>{let i=sn(),{eligible:a}=Q.useMemo(()=>Cu(e,t,{scope:i,fields:n}),[e,t,i,n]);if(Su(e)&&a.length===0)return null;let o=e.variant===`danger`||e.operation===`delete`,s=e.icon?P(e.icon):null;return(0,$.jsxs)(Z,{variant:o?`destructive`:`outline`,size:`sm`,className:`h-7 px-2.5 text-xs gap-1.5`,onClick:()=>r?.(e,t),"data-testid":`bulk-action-${e.name}`,children:[s?(0,$.jsx)(I,{name:s,className:`h-3 w-3`}):o?(0,$.jsx)(Hi,{className:`h-3 w-3`}):null,e.label??Iu(e.name)]})},qu=({selectedRows:e,actions:t,actionDefs:n,objectFields:r,onAction:i,onActionDef:a,onClearSelection:o,pageSize:s,totalMatching:c,allMatchingSelected:l,onSelectAllMatching:u})=>{let{t:d}=Ar(),f=hr(),p=Q.useMemo(()=>(n??[]).filter(e=>f(e?.requiredPermissions)),[n,f]),m=p.length>0,h=Array.isArray(t)&&t.length>0;if(e.length===0)return null;let g=!l&&typeof c==`number`&&typeof s==`number`&&s>0&&e.length>=s&&c>s;return(0,$.jsxs)(`div`,{className:`border-t border-primary/30 px-4 py-2 flex flex-col gap-1.5 text-xs bg-primary/10 text-foreground shrink-0 shadow-sm motion-safe:animate-in motion-safe:slide-in-from-bottom-2 motion-safe:fade-in-0 motion-safe:duration-200`,role:`region`,"aria-label":`Bulk actions`,"data-testid":`bulk-actions-bar`,children:[(g||l)&&(0,$.jsx)(`div`,{className:`flex items-center gap-2 text-[11px] text-muted-foreground`,"data-testid":`bulk-cross-page-banner`,children:l?(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(Ii,{className:`h-3 w-3 text-primary shrink-0`}),(0,$.jsx)(`span`,{children:d(`grid.bulkAllMatchingSelected`,{count:c,defaultValue:`All {{count}} matching records are selected.`})})]}):(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`span`,{children:d(`grid.bulkAllOnPage`,{count:s,defaultValue:`All {{count}} on this page are selected.`})}),(0,$.jsx)(`button`,{type:`button`,className:`font-medium text-primary underline-offset-2 hover:underline`,onClick:u,"data-testid":`bulk-select-all-matching`,children:d(`grid.bulkSelectAllMatching`,{count:c,defaultValue:`Select all {{count}} matching`})})]})}),(0,$.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,$.jsx)(Ii,{className:`h-3.5 w-3.5 text-primary shrink-0`}),(0,$.jsx)(`span`,{className:`font-medium tabular-nums`,children:(0,$.jsx)(`span`,{className:`inline-block motion-safe:animate-in motion-safe:zoom-in-90 motion-safe:duration-150`,children:l?d(`grid.bulkSelectedAllMatches`,{count:c,defaultValue:`{{count}} selected (all matches)`}):d(`grid.bulkSelected`,{count:e.length,defaultValue:`{{count}} selected`})},l?`all-${c}`:e.length)}),(0,$.jsxs)(`div`,{className:`flex items-center gap-1.5 ml-3`,children:[m&&p.map(t=>(0,$.jsx)(Ku,{def:t,selectedRows:e,objectFields:r,onActionDef:a},t.name)),h&&t.map(t=>{let n=String(t).toLowerCase(),r=n.includes(`delete`)||n.includes(`remove`)||n.includes(`destroy`),a=r?Hi:null;return(0,$.jsxs)(Z,{variant:r?`destructive`:`outline`,size:`sm`,className:`h-7 px-2.5 text-xs gap-1.5`,onClick:()=>i?.(t,e),"data-testid":`bulk-action-${t}`,children:[a&&(0,$.jsx)(a,{className:`h-3 w-3`}),Iu(t)]},t)})]}),(0,$.jsxs)(Z,{variant:`ghost`,size:`sm`,className:`h-7 px-2 text-xs ml-auto gap-1`,onClick:o,children:[(0,$.jsx)(Ji,{className:`h-3 w-3`}),d(`grid.bulkClear`,{defaultValue:`Clear`})]})]})]})};g();function Ju(e){return typeof e?.type==`string`&&p(e)}function Yu(e,t){if(!t)return e;let n=null;for(let[r,i]of Object.entries(e)){if(i==null||Array.isArray(i)||!Ju(t[r]))continue;let a=typeof i;(a===`string`||a===`number`||a===`boolean`)&&(n||={...e},n[r]=[i])}return n??e}function Xu({resource:e,dataSource:t,objectFields:n,runAction:r,runAggregate:i}){let[a,o]=(0,Q.useState)({total:0,done:0,failed:0,inFlight:!1}),[s,c]=(0,Q.useState)(null),l=(0,Q.useRef)([]),u=(0,Q.useRef)(null),d=(0,Q.useCallback)(()=>{o({total:0,done:0,failed:0,inFlight:!1}),c(null),l.current=[],u.current=null},[]);return{run:(0,Q.useCallback)(async(a,s,d)=>{let f=s.length,p=a.operation===`custom`&&a.execution===`aggregate`&&!!a.actionDef,m=p?Math.max(1,s.length):Math.max(1,a.batchSize??200),h=[],g=0,_=0;c(null),o({total:f,done:0,failed:0,inFlight:!0});let v=()=>Yu({...a.patch??{},...d},n),y=[];if(a.operation===`update`){let e=Object.keys(v());for(let t of s){let n=String(t.id??``);if(!n)continue;let r={};for(let n of e)r[n]=t[n];y.push({id:n,prev:r})}}for(let n=0;n<s.length;n+=m){let c=s.slice(n,n+m),l=[];for(let e=0;e<c.length;e+=1){let t=c[e].id==null?``:String(c[e].id);t?l.push(t):(_+=1,h.push({id:`index_${n+e}`,error:`Missing record id`}))}if(l.length===0){o({total:f,done:g,failed:_,inFlight:!0});continue}let u=new Map;for(let e of c){let t=e.id==null?``:String(e.id);t&&u.set(t,e)}let y=l.length>=2||p,b,x=`bulk`,S;p&&i?(b=async e=>{try{return await i(a,e.map(e=>u.get(e)??{id:e}),{...d}),e.length}catch(e){throw S=e,e}},x=`aggregate action`):a.operation===`update`&&typeof t.bulkUpdate==`function`?(b=n=>t.bulkUpdate(e,n,v()),x=`bulk update`):a.operation===`delete`&&typeof t.bulkDelete==`function`&&(b=n=>t.bulkDelete(e,n),x=`bulk delete`);let C=await zn({ids:l,originalSize:c.length,offset:n,allowBulk:y,label:x},{bulkCall:b,perRow:n=>{switch(a.operation){case`delete`:return t.delete(e,n);case`update`:return t.update(e,n,v());case`custom`:return p?Promise.reject(S instanceof Error?S:Error(S===void 0?`Aggregate action ${a.name} has no dispatcher wired`:String(S))):a.actionDef&&r?r(a,u.get(n)??{id:n},{...d}):Promise.resolve();default:return Promise.reject(Error(`Unknown operation: ${a.operation}`))}}});g+=C.succeeded,_+=C.failed,h.push(...C.errors),o({total:f,done:g,failed:_,inFlight:!0})}let b={total:f,succeeded:g,failed:_,errors:h},x=new Set(h.map(e=>e.id));return l.current=y.filter(e=>!x.has(e.id)),u.current={def:a,rows:s,params:d},o({total:f,done:g,failed:_,inFlight:!1}),c(b),g>0&&gt.invalidate(e),b},[e,t,n,r,i]),undo:(0,Q.useCallback)(async()=>{let n=l.current;if(!n.length)return null;let r=n.length,i=[],a=0,s=0;c(null),o({total:r,done:0,failed:0,inFlight:!0}),(await Promise.allSettled(n.map(n=>t.update(e,n.id,n.prev)))).forEach((e,t)=>{e.status===`fulfilled`?a+=1:(s+=1,i.push({id:n[t].id,error:e.reason instanceof Error?e.reason.message:String(e.reason)}))});let u={total:r,succeeded:a,failed:s,errors:i};return l.current=[],o({total:r,done:a,failed:s,inFlight:!1}),c(u),u},[e,t]),retry:(0,Q.useCallback)(async i=>{let a=u.current;if(!a)return!1;let o=a.rows.find(e=>String(e.id??``)===i);if(!o)return!1;let s=Yu({...a.def.patch??{},...a.params},n);try{switch(a.def.operation){case`delete`:await t.delete(e,i);break;case`update`:await t.update(e,i,s);break;case`custom`:if(a.def.execution===`aggregate`)return!1;if(!a.def.actionDef||!r)return!0;await r(a.def,o,{...a.params});break;default:return!1}return c(e=>{if(!e)return e;let t=e.errors.filter(e=>e.id!==i);return{...e,errors:t,succeeded:e.succeeded+1,failed:Math.max(0,e.failed-1)}}),!0}catch{return!1}},[e,t,n,r]),progress:a,result:s,reset:d}}var Zu={checkbox:`boolean`,reference:`lookup`,"datetime-local":`datetime`},Qu=new Set([`lookup`,`master_detail`]),$u=new Set([`user`]);function ed(e){return Nt.has(e)}function td(e){return Ct(Zu[e]??e)}function nd(e){return ed(td(e.type))}function rd(e){let t=td(e.type);return e.object?e.object:$u.has(t)?`sys_user`:void 0}function id(e,t){let n=td(e.type);Qu.has(n)&&!e.object&&(n=`text`),Qu.has(n)&&e.object===`sys_user`&&(n=`user`);let{name:r,label:i,type:a,required:o,help:s,default:c,multiple:l,options:u,object:d,labelField:f,placeholder:p,...m}=e,h={...m,name:r,label:i??r,type:n,required:o,placeholder:p,options:u?.map(e=>({...e,value:String(e.value)})),multiple:t};return ed(n)&&(h.reference_to=d,typeof f==`string`&&(h.displayField=f)),h}function ad(e){return ed(e.type)}var od=({def:e,rows:t,resource:n,dataSource:r,open:i,onClose:a,labelKey:o=`name`,objectFields:s,runAction:c,runAggregate:l,skippedCount:u=0})=>{let{t:d}=Ar(),f=e?.params??[],p=(0,Q.useCallback)(t=>typeof t.multiple==`boolean`?t.multiple:e?.operation===`update`&&Ju(s?.[t.name]),[e?.operation,s]),m=(0,Q.useMemo)(()=>{let e={};for(let t of f)t.default!==void 0&&(e[t.name]=t.default);return e},[e?.name]),[h,g]=(0,Q.useState)(`params`),[_,v]=(0,Q.useState)(m),[y,b]=(0,Q.useState)({}),{run:x,undo:S,retry:w,progress:E,result:D,reset:O}=Xu({resource:n,dataSource:r,objectFields:s,runAction:c,runAggregate:l}),[k,A]=(0,Q.useState)(null),[j,M]=(0,Q.useState)(!1),[ee,N]=(0,Q.useState)(null),te=(0,Q.useRef)(!1);(0,Q.useEffect)(()=>{if(!i)return;let e=()=>{te.current=!!document.querySelector(`[data-radix-popper-content-wrapper] [data-state="open"]`)};return document.addEventListener(`pointerdown`,e,!0),()=>document.removeEventListener(`pointerdown`,e,!0)},[i]),(0,Q.useEffect)(()=>{i&&(O(),v(m),b({}),N(null),M(!1),A(null),g(f.length===0?`confirm`:`params`))},[i,e?.name,m,f.length,O]),(0,Q.useEffect)(()=>{if(h!==`confirm`||typeof r.findOne!=`function`)return;let e=!1;return(async()=>{let t={};for(let e of f){let n=rd(e);if(!nd(e)||!n)continue;let i=_[e.name],a=(Array.isArray(i)?i:i==null||i===``?[]:[i]).map(String);for(let i of a)if(!y[e.name]?.[i])try{let a=await r.findOne(n,i);if(!a)continue;let o=typeof e.labelField==`string`?e.labelField:void 0,s=(o?a[o]:void 0)??a.name??a.full_name??a.email;s!=null&&((t[e.name]??={})[i]=String(s))}catch{}}!e&&Object.keys(t).length>0&&b(e=>{let n={...e};for(let[e,r]of Object.entries(t))n[e]={...n[e],...r};return n})})(),()=>{e=!0}},[h]);let P=(0,Q.useMemo)(()=>{for(let e of f)if(e.required){let t=_[e.name];if(t==null||t===``||Array.isArray(t)&&t.length===0)return!1}return!0},[f,_]),ne=(0,Q.useCallback)((e,t)=>{if(t==null||t===``||Array.isArray(t)&&t.length===0)return`—`;if(typeof t==`boolean`)return t?d(`grid.yes`,{defaultValue:`Yes`}):d(`grid.no`,{defaultValue:`No`});let n=e&&nd(e)?Object.entries(y[e.name]??{}).map(([e,t])=>({value:e,label:t})):(e?.options??[]).map(e=>({value:String(e.value),label:String(e.label)})),r=e=>n.find(t=>t.value===String(e))?.label??String(e);return Array.isArray(t)?t.map(r).join(`, `):r(t)},[d,y]),F=e?.maxRecords??1/0,I=t.length>F,L=t.length===0,R=(0,Q.useCallback)(async()=>{e&&(g(`running`),await x(e,t,_),g(`result`))},[e,t,_,x]),z=(0,Q.useCallback)(()=>{if(!D?.errors?.length)return;let t=[`record_id,error_message`,...D.errors.map(e=>`${e.id},"${e.error.replace(/"/g,`""`)}"`)].join(`
5
- `),n=new Blob([t],{type:`text/csv;charset=utf-8`}),r=URL.createObjectURL(n),i=document.createElement(`a`);i.href=r,i.download=`bulk_errors_${e?.name??`action`}_${Date.now()}.csv`,i.click(),URL.revokeObjectURL(r)},[D,e?.name]),B=!!e&&e.operation===`update`&&!!D&&D.succeeded>0&&ee===null,V=(0,Q.useCallback)(async()=>{M(!0);try{await S()&&N(Date.now())}finally{M(!1)}},[S]),re=(0,Q.useCallback)(async e=>{A(e);try{await w(e)}finally{A(null)}},[w]);if(!e)return null;let H=e.label??e.name,ie=t.slice(0,5),ae=Math.max(0,t.length-ie.length);return(0,$.jsx)(Y,{open:i,onOpenChange:e=>{e||a(D)},children:(0,$.jsxs)(C,{className:`max-w-md`,onPointerDownOutside:e=>{te.current&&e.preventDefault()},onInteractOutside:e=>{te.current&&e.preventDefault()},children:[(0,$.jsxs)(ue,{children:[(0,$.jsxs)(pe,{className:`flex items-center gap-2`,children:[h===`running`&&(0,$.jsx)(vi,{className:`h-4 w-4 animate-spin`}),H]}),h===`confirm`&&(0,$.jsx)(Ke,{children:e.confirmText??d(`grid.bulk.confirmDefault`,{count:t.length,defaultValue:`This will apply to ${t.length} record(s).`})})]}),h===`params`&&(0,$.jsx)(`div`,{className:`space-y-3`,children:f.map(e=>(0,$.jsx)(cd,{param:e,multiple:p(e),value:_[e.name],values:_,dataSource:r,onChange:t=>v(n=>({...n,[e.name]:t}))},e.name))}),h===`confirm`&&(0,$.jsxs)(`div`,{className:`space-y-3 text-sm`,children:[I&&(0,$.jsxs)(`div`,{className:`rounded-md bg-destructive/10 text-destructive px-3 py-2 flex items-start gap-2`,children:[(0,$.jsx)(Ui,{className:`h-4 w-4 mt-0.5 shrink-0`}),(0,$.jsx)(`div`,{children:d(`grid.bulk.overLimit`,{count:t.length,limit:F,defaultValue:`Selection (${t.length}) exceeds the action limit (${F}). Reduce the selection to proceed.`})})]}),(0,$.jsx)(`div`,{className:`text-muted-foreground`,children:d(`grid.bulk.affectedRecords`,{count:t.length,defaultValue:`Affected records (${t.length}):`})}),u>0&&(0,$.jsx)(`div`,{className:`text-muted-foreground text-xs`,"data-testid":`bulk-skipped-notice`,children:d(`grid.bulk.skippedIneligible`,{count:u,defaultValue:`${u} selected record(s) are not eligible for this action and will be skipped.`})}),(0,$.jsx)(T,{className:`max-h-32 rounded border bg-muted/30 p-2`,children:(0,$.jsxs)(`ul`,{className:`text-xs space-y-1`,children:[ie.map((e,t)=>(0,$.jsxs)(`li`,{className:`break-words`,children:[`• `,String(e[o]??e.id??d(`grid.bulk.rowFallback`,{index:t+1,defaultValue:`Row ${t+1}`}))]},String(e.id??t))),ae>0&&(0,$.jsx)(`li`,{className:`text-muted-foreground`,children:d(`grid.bulk.andMore`,{count:ae,defaultValue:`… and ${ae} more`})})]})}),Object.keys(_).length>0&&(0,$.jsx)(`div`,{className:`rounded border bg-muted/30 p-2 text-xs space-y-0.5`,children:Object.entries(_).map(([e,t])=>{let n=f.find(t=>t.name===e);return(0,$.jsxs)(`div`,{children:[(0,$.jsxs)(`span`,{className:`text-muted-foreground`,children:[n?.label??e,`:`]}),` `,ne(n,t)]},e)})})]}),h===`running`&&(0,$.jsxs)(`div`,{className:`space-y-2`,children:[(0,$.jsx)(Se,{value:E.total?(E.done+E.failed)/E.total*100:0}),(0,$.jsxs)(`div`,{className:`text-xs text-muted-foreground text-center`,children:[d(`grid.bulk.processed`,{count:E.done+E.failed,total:E.total,defaultValue:`${E.done+E.failed} / ${E.total} processed`}),E.failed>0&&d(`grid.bulk.processedFailed`,{count:E.failed,defaultValue:` · ${E.failed} failed`})]})]}),h===`result`&&D&&(0,$.jsxs)(`div`,{className:`space-y-3 text-sm`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2`,children:[D.failed===0?(0,$.jsx)(Yr,{className:`h-5 w-5 text-emerald-500`}):(0,$.jsx)(Ui,{className:`h-5 w-5 text-amber-500`}),(0,$.jsxs)(`span`,{children:[ee===null?``:d(`grid.bulk.undonePrefix`,{defaultValue:`Undone — `}),d(`grid.bulk.succeeded`,{count:D.succeeded,total:D.total,defaultValue:`Succeeded ${D.succeeded} / ${D.total}`}),D.failed>0&&d(`grid.bulk.resultFailed`,{count:D.failed,defaultValue:` · Failed ${D.failed}`})]})]}),D.errors.length>0&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(T,{className:`max-h-48 rounded border bg-destructive/5 p-2`,"data-testid":`bulk-error-inspector`,children:(0,$.jsx)(`ul`,{className:`text-xs space-y-1.5`,children:D.errors.map(t=>(0,$.jsxs)(`li`,{className:`flex items-start gap-2`,"data-testid":`bulk-error-row-${t.id}`,children:[(0,$.jsx)(Zr,{className:`h-3 w-3 mt-0.5 shrink-0 text-destructive`}),(0,$.jsx)(`div`,{className:`min-w-0 flex-1`,children:(0,$.jsxs)(`div`,{className:`break-words`,children:[(0,$.jsxs)(`span`,{className:`text-muted-foreground`,children:[t.id,`:`]}),` `,t.error]})}),(e.operation!==`custom`||!!e.actionDef)&&e.execution!==`aggregate`&&(0,$.jsx)(Z,{variant:`ghost`,size:`sm`,className:`h-5 px-1.5 text-[10px] shrink-0`,onClick:()=>re(t.id),disabled:k===t.id,"data-testid":`bulk-error-retry-${t.id}`,children:k===t.id?`…`:d(`grid.bulk.retry`,{defaultValue:`Retry`})})]},t.id))})}),(0,$.jsx)(Z,{variant:`outline`,size:`sm`,onClick:z,children:d(`grid.bulk.downloadErrorCsv`,{defaultValue:`Download error CSV`})})]})]}),(0,$.jsxs)(ce,{children:[h===`params`&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(Z,{variant:`ghost`,onClick:()=>a(),children:d(`grid.bulk.cancel`,{defaultValue:`Cancel`})}),(0,$.jsx)(Z,{onClick:()=>g(`confirm`),disabled:!P,children:d(`grid.bulk.next`,{defaultValue:`Next`})})]}),h===`confirm`&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(Z,{variant:`ghost`,onClick:()=>f.length?g(`params`):a(),children:f.length?d(`grid.bulk.back`,{defaultValue:`Back`}):d(`grid.bulk.cancel`,{defaultValue:`Cancel`})}),(0,$.jsx)(Z,{variant:e.variant===`danger`?`destructive`:`default`,onClick:R,disabled:I||L,children:e.confirmLabel??d(`grid.bulk.run`,{defaultValue:`Run`})})]}),h===`running`&&(0,$.jsx)(Z,{variant:`ghost`,disabled:!0,children:d(`grid.bulk.running`,{defaultValue:`Running…`})}),h===`result`&&(0,$.jsxs)($.Fragment,{children:[B&&(0,$.jsx)(Z,{variant:`outline`,onClick:V,disabled:j,"data-testid":`bulk-undo-button`,children:j?d(`grid.bulk.undoing`,{defaultValue:`Undoing…`}):d(`grid.bulk.undo`,{defaultValue:`Undo`})}),(0,$.jsx)(Z,{onClick:()=>a(D),children:d(`grid.bulk.done`,{defaultValue:`Done`})})]})]})]})})};function sd(e){return Un.has(e)||Nt.has(e)}var cd=({param:e,multiple:t,value:n,onChange:r,dataSource:i,values:a})=>{let o=`bulk-param-${e.name}`,s=(0,Q.useMemo)(()=>id(e,t),[e,t]),c=(0,Q.useMemo)(()=>Xe(s.type),[s.type]),l=ad(s)?{dataSource:i}:{},u=sd(s.type)?{dependentValues:a}:{};return(0,$.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,$.jsx)(`div`,{className:`flex items-center justify-between`,children:(0,$.jsxs)(Oe,{htmlFor:o,className:`text-xs`,children:[e.label??e.name,e.required&&(0,$.jsx)(`span`,{className:`text-destructive ml-0.5`,"aria-hidden":`true`,children:`*`})]})}),(0,$.jsx)(Q.Suspense,{fallback:(0,$.jsx)(`div`,{className:`h-9 w-full animate-pulse rounded-md bg-muted`,"aria-hidden":`true`}),children:(0,$.jsx)(c,{id:o,value:n??null,onChange:r,field:s,"aria-required":e.required||void 0,...l,...u})}),e.help&&(0,$.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:e.help})]})};g();function ld(e,t){return{authored:e,currentUserId:t.currentUserId,currentOrgId:t.currentOrgId,onUnresolved:t.onUnresolved,resolved:wn(e,t)}}var ud=12;function dd(e){if(typeof e!=`object`||!e)return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function fd(e,t,n=0){if(Object.is(e,t))return!0;if(n>=ud)return!1;if(e instanceof Date||t instanceof Date)return e instanceof Date&&t instanceof Date&&e.getTime()===t.getTime();if(Array.isArray(e)||Array.isArray(t))return!Array.isArray(e)||!Array.isArray(t)||e.length!==t.length?!1:e.every((e,r)=>fd(e,t[r],n+1));if(dd(e)&&dd(t)){let r=Object.keys(e);return r.length===Object.keys(t).length&&r.every(r=>Object.prototype.hasOwnProperty.call(t,r)&&fd(e[r],t[r],n+1))}return!1}function pd(e,t){let[n,r]=(0,Q.useState)(()=>ld(e,t));if(n.currentUserId!==t.currentUserId||n.currentOrgId!==t.currentOrgId||n.onUnresolved!==t.onUnresolved||!fd(n.authored,e)){let n=ld(e,t);return r(n),n.resolved}return n.resolved}function md(e){let t=nn(e);if(t)return t.map(e=>`${e.field} ${e.order}`).join(`, `)}function hd(e){let t=Array.isArray(e)?e:[],n=[];for(let e of t)if(e&&typeof e==`object`&&typeof e.field==`string`){let{field:t,order:r}=e;n.push({field:t,order:String(r).toLowerCase()===`desc`?`desc`:`asc`})}return n}var gd=`text-primary font-medium underline-offset-4 hover:underline cursor-pointer truncate block max-w-full`,_d=gd.replace(`truncate`,`whitespace-normal break-words`);function vd(e){let t=e,n=t?.id??t?._id;return typeof n==`string`||typeof n==`number`?n:void 0}var yd=({testId:e,onActivate:t,objectName:n,recordId:r,wrap:i,children:a})=>{let o=rn(),s=i?_d:gd,c=n&&r!=null&&r!==``&&o?.recordHref?o.recordHref(n,r):null;return c?(0,$.jsx)(`a`,{href:c,"data-testid":e,className:s,onClick:e=>{e.stopPropagation(),!(e.metaKey||e.ctrlKey||e.shiftKey||e.altKey||e.button!==0)&&(e.preventDefault(),t())},onKeyDown:e=>{e.key===` `&&(e.preventDefault(),e.stopPropagation(),t())},children:a}):(0,$.jsx)(`span`,{role:`link`,tabIndex:0,"data-testid":e,className:s,onClick:e=>{e.stopPropagation(),t()},onKeyDown:e=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),e.stopPropagation(),t())},children:a})},bd=wr({"grid.actions":`Actions`,"grid.edit":`Edit`,"grid.delete":`Delete`,"grid.export":`Export`,"grid.exportAs":`Export as {{format}}`,"grid.loading":`Loading grid…`,"grid.errorLoading":`Error loading grid`,"view.malformedFilter":`This view’s filter is malformed, so no records are shown: the {{subject}} condition cannot be applied.`,"grid.pullToRefresh":`Pull to refresh`,"grid.refreshing":`Refreshing…`,"grid.openRecord":`Open record`,"grid.empty":`Empty`,"grid.yes":`Yes`,"grid.no":`No`,"grid.systemFields":`System`,"grid.grouping.needsHeaderQuery":`This view is grouped, but its data source does not implement queryGroupHeaders, so the groups cannot be counted. Remove the grouping to show the records.`,"grid.grouping.needsWholeRows":`Grouping needs every record, but this grid was handed one page of them, so the groups cannot be counted. Hand in every record, or let the grid fetch them from a data source that implements queryGroupHeaders.`,"table.rowsPerPage":`Rows per page`,"table.pageInfo":`Page {{current}} of {{total}}`,"detail.recordDetail":`Record Detail`,"detail.recordDetailWithLabel":`{{label}} Detail`},`grid.actions`);function xd(e){if(e!=null)return typeof e==`string`?e:void 0}function Sd(e){return dn(e,`view-data`)}function Cd(e){return e?JSON.stringify(Object.keys(e).sort().map(t=>[t,e[t]??null])):null}function wd(e){if(e&&e.length!==0)return typeof e[0]==`object`&&e[0],e}function Td(e){return typeof e!=`string`||!Object.prototype.hasOwnProperty.call(yn,e)?`compact`:e}var Ed=10,Dd=10,Od=50,kd=`multiple`;function Ad(e){return e.pagination?.pageSize??e.pageSize}function jd(e){return typeof e==`number`&&Number.isInteger(e)&&e>0}function Md(e,t){let n=Ad(e);return jd(n)?n:t}function Nd(e,t){let n=Ad(e);return n==null||jd(n)?null:`[ObjectUI] ObjectGrid pagination: ${[typeof t.blockType==`string`?t.blockType:`object-grid`,typeof t.objectName==`string`?t.objectName:void 0].filter(Boolean).join(` on `)} declared pageSize: ${String(n)}, which is not a positive integer. A page size must be a positive integer (the spec refuses zero and negative values), so it was ignored and this grid fell back to its default page size.`}var Pd=JSON.stringify({refused:[],warned:[]}),Fd=({schema:e,dataSource:t,onEdit:n,onDelete:r,rowOperations:i,onBulkDelete:a,onRowSelect:o,onRowClick:s,onCellChange:c,onRowSave:l,onBatchSave:d,onAddRecord:f,data:p,manualPagination:h,rowCount:g,page:_,pageSize:v,onPageChange:b,onPageSizeChange:x,sort:C,onSortChange:w,search:T,onSearchChange:E,findParams:D,onColumnStateChange:O,objectFields:k})=>{let[A,j]=(0,Q.useState)([]),[M,ee]=(0,Q.useState)(!0),[N,P]=(0,Q.useState)(null),{currency:ne}=Tr(),F=kr(),{t:I}=bd(),{fieldLabel:L,translateOptions:R,actionLabel:z}=Or(),[V,H]=(0,Q.useState)(null),[ie,ae]=(0,Q.useState)(!1),[oe,se]=(0,Q.useState)(0),[ce,le]=(0,Q.useState)(!1),[ue,U]=(0,Q.useState)(!1),[de,fe]=(0,Q.useState)(null),[pe,me]=(0,Q.useState)(Td(e.rowHeight)),[he,ge]=(0,Q.useState)([]),[_e,ve]=(0,Q.useState)(!1),[ye,be]=(0,Q.useState)(0),[xe,W]=(0,Q.useState)(void 0),[Se,Ce]=(0,Q.useState)(null),[we,G]=(0,Q.useState)([]),[Ee,De]=(0,Q.useState)(0),Oe=Q.useRef(null),[ke,Ae]=(0,Q.useState)(1),[K,je]=(0,Q.useState)(Md(e,Dd));Q.useEffect(()=>{if(!e.rowHeight)return;let t=Td(e.rowHeight);t!==pe&&me(t)},[e.rowHeight]);let Me=Q.useMemo(()=>e.id?`grid-columns-${e.objectName}-${e.id}`:`grid-columns-${e.objectName}`,[e.objectName,e.id]),[q,Pe]=(0,Q.useState)(()=>{let t=e.columnState;if(t&&typeof t==`object`)return t;try{let e=localStorage.getItem(Me);return e?JSON.parse(e):{}}catch{return{}}}),Ie=Q.useMemo(()=>JSON.stringify(e.columnState??null),[e.columnState]);Q.useEffect(()=>{let t=e.columnState;t&&typeof t==`object`&&Pe(t)},[Ie]);let Le=(0,Q.useCallback)(e=>{Pe(e);try{localStorage.setItem(Me,JSON.stringify(e))}catch(e){console.warn(`Failed to persist column state:`,e)}if(typeof O==`function`)try{O(e)}catch(e){console.warn(`onColumnStateChange threw:`,e)}},[Me,O]),{ref:Re,isRefreshing:Be,pullDistance:Ve}=la({onRefresh:(0,Q.useCallback)(async()=>{se(e=>e+1)},[]),enabled:!!t&&!!e.objectName});(0,Q.useEffect)(()=>{let e=()=>ae(window.innerWidth<768);return e(),window.addEventListener(`resize`,e),()=>window.removeEventListener(`resize`,e)},[]);let He=Zn(e.bind),Ue=Sd(e),We=Q.useMemo(()=>p&&Array.isArray(p)?{provider:`value`,items:p}:He&&Array.isArray(He)?{provider:`value`,items:He}:Ue,[JSON.stringify(Ue),He,p]),J=We?.provider===`value`,Ke=h===!0&&typeof g==`number`&&typeof b==`function`,Y=Sr(e,We)??e.objectName,Ye=V?.fields??k??void 0,Xe=!!Y&&typeof t?.getObjectSchema==`function`&&!Ye,Ze=y(),{getObjectApiOperations:Qe}=Ze,X=Y?Qe(Y):void 0,tt=Y?Ze.can(Y,`update`):void 0,nt=Y?Ze.can(Y,`delete`):void 0,rt=Y?Ze.can(Y,`create`):void 0,at=Yt(V,X)&&(!Y||Ze.can(Y,`update`)),st=(e.editable??!1)&&at,ct=(`operations`in e?e.operations:void 0)??{update:!!n,delete:!!r},ut=Array.isArray(e.rowActions),dt=Array.isArray(e.rowActions)?e.rowActions:[],ft=Array.isArray(e.rowActionDefs)?e.rowActionDefs:[],pt=dt.includes(`edit`),ht=dt.includes(`delete`),{defs:gt,unresolved:_t}=nu({rowActions:dt.filter(e=>e!==`edit`&&e!==`delete`),rowActionDefs:ft,objectActions:V?.actions}),{canEdit:yt,canDelete:bt,objectCanDelete:xt,editPredicates:Ct,deletePredicates:wt,objectDeletePredicates:Et}=Kl({operationsUpdate:ct?.update,operationsDelete:ct?.delete,wantEditAction:pt,wantDeleteAction:ht,rowActionsDeclared:ut,hasOnEdit:!!n,hasOnDelete:!!r,managedBy:V?.managedBy,userActions:V?.userActions,effectiveApiOperations:X,permissionUpdate:tt,permissionDelete:nt}),Dt=tu({objectName:Y,recordIds:(0,Q.useMemo)(()=>Array.from(new Set(A.map(vd).filter(e=>e!=null).map(e=>String(e)))),[A]),update:yt,delete:bt}),Ot=e.fields,kt=e.columns,At=(0,Q.useMemo)(()=>JSON.stringify(Ht(e.grouping)),[e.grouping]),jt=Bn(),Mt=pd({filter:e.filter,defaultFilters:e.defaultFilters},jt),Nt=Mt.filter,It=Mt.defaultFilters,Lt=(0,Q.useMemo)(()=>cn(Nt),[Nt]),Rt=Lt.ok?void 0:Lt.refusal,zt=Lt.ok?Lt.node:void 0,Vt=e.sort,Ut=e.pagination,Wt=e.pageSize,[Kt,qt]=(0,Q.useState)(1),[Xt,Zt]=(0,Q.useState)(Md(e,Od)),[Qt,$t]=(0,Q.useState)(null);(0,Q.useEffect)(()=>{$t(null)},[JSON.stringify(e.sort??null)]);let[en,tn]=(0,Q.useState)(``);(0,Q.useEffect)(()=>{tn(``)},[Y]),(0,Q.useEffect)(()=>{J&&We?.provider===`value`&&(j(e=>{let t=We.items;return JSON.stringify(e)===JSON.stringify(t)?e:t}),ee(!1))},[J,We]),(0,Q.useEffect)(()=>{if(!J||!Y||!t)return;let e=!1;return(async()=>{try{if(typeof t.getObjectSchema!=`function`)return;let n=await t.getObjectSchema(Y);e||H(n)}catch(e){console.warn(`[ObjectGrid] Failed to fetch objectSchema for inline data (objectName: ${Y}):`,e)}})(),()=>{e=!0}},[J,Y,t]);let nn=e.grouping?.fields,rn=Q.useMemo(()=>{let t=wd(e.columns)??[],n=e=>t.find(t=>typeof t==`object`&&!!t&&t.field===e)?.type,r=xl(nn).map(e=>e.field).filter(e=>$i(n(e),Ye?.[e]?.type,Xe));return JSON.stringify({refused:r,warned:r.filter(e=>$i(n(e),Ye?.[e]?.type,!1))})},[nn,e.columns,Ye,Xe]),an=Q.useMemo(()=>{let{refused:e}=JSON.parse(rn);return xl(nn).filter(t=>!e.includes(t.field))},[nn,rn]),on=rn===Pd;(0,Q.useEffect)(()=>{let{warned:t}=JSON.parse(rn);t.length!==0&&console.warn(`[ObjectUI] ObjectGrid grouping: ${e.objectName??`object-grid`} groups by the masked field(s) ${t.join(`, `)}. A masked field cannot be a grouping key: its group labels would show the raw value, and its groups would show which records share it. The entry was ignored.`)},[rn,e.objectName]);let ln=Q.useMemo(()=>JSON.parse(rn).warned,[rn]),un=e=>!Ze?.isLoaded||!Y||Ze.checkField(Y,e,`read`),dn=!J&&!!Y&&typeof t?.queryGroupHeaders==`function`&&xl(nn).some(e=>!ln.includes(e.field)&&un(e.field)),fn=!J&&!!Y&&!!t&&typeof t.queryGroupHeaders!=`function`&&xl(nn).some(e=>!ln.includes(e.field)),mn=J?We?.items:void 0,gn=Ke&&Array.isArray(mn)&&g>mn.length&&xl(nn).some(e=>!ln.includes(e.field)),[_n,vn]=(0,Q.useState)(null),yn=Vn(J?void 0:Y);(0,Q.useEffect)(()=>{if(J||Rt)return;let n=!1;return(async()=>{ee(!0),P(null);try{let r=null,i=wd(kt)||Ot;if(Y&&t){if(typeof t.getObjectSchema==`function`){let e=await t.getObjectSchema(Y);if(n)return;r=e}else r={name:Y,fields:{}}}else if(i&&Y)r={name:Y,fields:{}};else if(Y)throw Error(`DataSource required`);else throw Error(`Object name required for data fetching`);if(n||H(r),fn)return;if(t&&Y){let i=Ht(e.grouping),a={$select:(()=>{let t=e=>e.map(e=>Pt(e)).includes(`id`)?e:[`id`,...e],n=e=>{if(!Ze?.isLoaded||!Y)return!0;let t=Pt(e);return!t||!Object.prototype.hasOwnProperty.call(r?.fields??{},t)||Ze.checkField(Y,t,`read`)},a=r?.fields,o=a?sr(En({conditionalFormatting:e.conditionalFormatting,rowActionDefs:e.rowActionDefs,bulkActionDefs:e.bulkActionDefs,objectActions:r?.actions,userActions:r?.userActions})).filter(e=>Gt(e,a)).filter(e=>n(e)):[],s=a?i.filter(e=>Gt(e,a)).filter(e=>n(e)):[],c=[...o,...s],l=e=>{if(c.length===0)return e;let t=new Set(e.map(e=>Pt(e))),n=new Set,r=c.filter(e=>!t.has(e)&&!n.has(e)&&(n.add(e),!0));return r.length>0?[...e,...r]:e};if(Ot)return l(t(Ot.filter(n)));if(kt&&Array.isArray(kt))return l(t(kt.filter(n).map(e=>Pt(e)).filter(e=>!!e)))})(),$top:Xt,$skip:(Kt-1)*Xt};if(zt!==void 0)a.$filter=zt;else{let e=Dn(It);e!==void 0&&(a.$filter=e)}if(Qt&&Qt.length>0)a.$orderby=Qt.map(e=>({field:e.field,order:e.order}));else if(Vt){if(typeof Vt==`string`)Ft(Vt);else if(Array.isArray(Vt)){let e=md(Vt);e!==void 0&&(a.$orderby=e)}}let o=en.trim();o&&(a.$search=o,e.searchableFields&&e.searchableFields.length>0&&(a.$searchFields=e.searchableFields));let s=e=>!Ze?.isLoaded||!Y||Ze.checkField(Y,e,`read`),c=kt??Ot,l=gr(r?.fields,c?[...c,...i]:void 0).filter(s);if(l.length>0&&(a.$expand=l),dn){let{$top:e,$skip:t,...n}=a;vn(n),Oe.current={...n},ve(!1);return}let u=await t.find(Y,a);if(n)return;j(u.data||[]);let d=u.total;W(typeof d==`number`?d:void 0),Oe.current={...a},ve(!1)}}catch(e){n||P(e)}finally{n||ee(!1)}})(),()=>{n=!0}},[Y,Ot,kt,zt,Rt,It,Vt,Qt,en,Ut,Wt,Kt,Xt,t,J,We,oe,Ze.isLoaded,At,yn,dn,fn]);let bn=Q.useMemo(()=>Cd(D),[D]);Q.useEffect(()=>{ve(!1)},[bn]),Q.useEffect(()=>{qt(1)},[Y,zt,Vt,Qt,en]);let xn=In({navigation:e.navigation,objectName:e.objectName,onNavigate:e.onNavigate,onRowClick:s}),{anchorRef:Sn,anchorCaptureProps:wn}=St(),{execute:Tn,updateContext:On}=Jn();Q.useEffect(()=>(On({selectedRecords:he}),()=>{On({selectedRecords:[]})}),[he,On]);let An=hl(e.rowColor),jn=sn(),Mn=(0,Q.useCallback)(t=>{let n=e.conditionalFormatting;if(!n||n.length===0)return;let r=pn(t,n,jn,V?.fields);return Object.keys(r).length>0?r:void 0},[e.conditionalFormatting,jn,V]),Nn=Q.useMemo(()=>{let t=xl(e.grouping?.fields);if(!t.length)return;let n=new Map;for(let r of t){let t=r.field,i=Ye?.[t],a=wd(e.columns)?.find?.(e=>typeof e==`object`&&e?.field===t),o=a?.type||i?.type,s=a?.options||i?.options,c=new Map;if(Array.isArray(s)&&s.length>0){let n=e.objectName?R(e.objectName,t,s):s;for(let e of n)if(e&&e.value!==void 0&&e.value!==null){let t=e.label;c.set(String(e.value),String(t??e.value))}}n.set(t,{type:o||void 0,options:c.size>0?c:void 0})}return(e,t)=>{let r=n.get(e);if(r){if(r.options){let e=r.options.get(String(t));if(e!==void 0)return e}if(r.type===`boolean`||typeof t==`boolean`){if(t===!0||t===`true`)return I(`grid.yes`,{defaultValue:`Yes`});if(t===!1||t===`false`)return I(`grid.no`,{defaultValue:`No`})}}}},[e.grouping,e.columns,e.objectName,Ye,R,I]),Fn=on||!e.grouping?e.grouping:{...e.grouping,fields:an},Ln=dn?JSON.stringify(xl(Fn?.fields).filter(e=>un(e.field)).map(e=>[e.field,e.order??null,e.collapsed??null])):`[]`,Rn=Q.useMemo(()=>JSON.parse(Ln).map(([e,t,n])=>({field:e,...t?{order:t}:{},...n===null?{}:{collapsed:n}})),[Ln]),zn=JSON.stringify(_n),Un=Q.useMemo(()=>{let e=JSON.parse(zn)?.$filter;if(e==null)return{};try{let t=m(e);return t===void 0?{error:Error(`[ObjectGrid] The view filter could not be lowered for server-side grouping: ${JSON.stringify(e)}`)}:{where:t}}catch(e){return{error:e instanceof Error?e:Error(String(e))}}},[zn]),Wn=`${oe}:${yn}`,Yn=Al({enabled:dn&&!Xe&&_n!==null&&!Un.error,dataSource:t,objectName:Y,fields:Rn,where:Un.where,aggregations:e.aggregations,objectFields:Ye,reloadKey:Wn}),Xn=Yn.headers,Qn=Yn.keyLabels,$n=Q.useMemo(()=>dn?{headers:Xn??[],keyLabels:Qn}:void 0,[dn,Xn,Qn]),{groups:er,isGrouped:tr,toggleGroup:nr}=El(dn?e.grouping?{...e.grouping,fields:Rn}:void 0:Fn,A,e.aggregations,Nn,$n),ir=Q.useMemo(()=>JSON.stringify(e.grouping??null),[e.grouping]);Q.useEffect(()=>{Ae(1)},[ir,K,oe]);let ar=[];if(dn){let e=Math.max(1,Math.ceil(er.length/K)),t=Math.min(ke,e),n=e=>{e.collapsed||(e.subgroups.length===0?ar.push({key:e.key,keyValues:e.keyValues}):e.subgroups.forEach(n))};er.slice((t-1)*K,t*K).forEach(n)}let cr=jl({enabled:dn&&!!Yn.headers,dataSource:t,objectName:Y,fields:Rn,where:Un.where,baseParams:_n,pageSize:Xt,leaves:ar,reloadKey:Wn}),lr=JSON.stringify(ar.map(e=>e.key));(0,Q.useEffect)(()=>{if(!dn)return;let e=JSON.parse(lr);j(e.flatMap(e=>cr.pages[e]?.rows??[]))},[dn,lr,cr.pages]);let dr=dn&&Yn.headers?(Yn.headers[0]??[]).reduce((e,t)=>e+(Number(t.count)||0),0):void 0;(0,Q.useEffect)(()=>{dr!==void 0&&W(dr)},[dr]);let{summaries:fr,hasSummary:pr}=Gl(Q.useMemo(()=>{let t=wd(e.columns);if(t&&t.length>0&&typeof t[0]==`object`)return t},[e.columns]),A,V?.fields),mr=e.type,hr=e.label??e.title;(0,Q.useEffect)(()=>{let t=Nu(e.columns,{blockType:mr,objectName:e.objectName,label:hr});t&&console.warn(t)},[e.columns,mr,e.objectName,hr]);let _r=e.bulkActionDefs;(0,Q.useEffect)(()=>{let t=bu(_r,{blockType:mr,objectName:e.objectName,label:hr});t&&console.warn(t)},[_r,mr,e.objectName,hr]);let vr=e.pagination,yr=e.pageSize;(0,Q.useEffect)(()=>{let t=Nd({pagination:vr,pageSize:yr},{blockType:mr,objectName:e.objectName});t&&console.warn(t)},[vr,yr,mr,e.objectName]);let xr=(0,Q.useCallback)(()=>{let t=e=>e&&{text:(0,$.jsx)(Wi,{className:`h-3.5 w-3.5`}),number:(0,$.jsx)(pi,{className:`h-3.5 w-3.5`}),currency:(0,$.jsx)(pi,{className:`h-3.5 w-3.5`}),percent:(0,$.jsx)(pi,{className:`h-3.5 w-3.5`}),date:(0,$.jsx)(Vr,{className:`h-3.5 w-3.5`}),datetime:(0,$.jsx)(ei,{className:`h-3.5 w-3.5`}),boolean:(0,$.jsx)(Ii,{className:`h-3.5 w-3.5`}),user:(0,$.jsx)(qi,{className:`h-3.5 w-3.5`}),select:(0,$.jsx)(Bi,{className:`h-3.5 w-3.5`})}[e]||(0,$.jsx)(Wi,{className:`h-3.5 w-3.5`}),n=e=>{if(e.type)return e.type;let t=e.field.toLowerCase();if([`completed`,`is_completed`,`done`,`active`,`enabled`,`archived`].some(e=>t===e||t===`is_${e}`))return`boolean`;if([`created_time`,`modified_time`,`updated_time`,`created_at`,`updated_at`,`modified_at`,`last_login`,`logged_at`].some(e=>t===e||t.endsWith(`_${e}`)))return`datetime`;if([`date`,`due`,`created`,`updated`,`deadline`,`start`,`end`,`expires`].some(e=>t.includes(e))){if(A.length>0){let t=A.find(t=>t[e.field]!=null)?.[e.field];if(typeof t==`string`&&!isNaN(Date.parse(t)))return`date`}return`date`}if([`probability`,`percent`,`percentage`,`completion`,`progress`,`rate`].some(e=>t.includes(e))&&A.length>0&&typeof A.find(t=>t[e.field]!=null)?.[e.field]==`number`)return`percent`;if([`status`,`priority`,`category`,`stage`,`type`,`severity`,`level`].some(e=>t.includes(e))&&A.length>0){let t=new Set(A.map(t=>t[e.field]).filter(Boolean));if(t.size>0&&t.size<=10)return`select`}if([`assignee`,`owner`,`author`,`reporter`,`creator`,`user`].some(e=>t.includes(e)))return`user`;if([`amount`,`price`,`total`,`revenue`,`cost`,`budget`,`salary`].some(e=>t.includes(e))&&A.length>0&&typeof A.find(t=>t[e.field]!=null)?.[e.field]==`number`)return`currency`;if(A.length>0){let t=A.find(t=>t[e.field]!=null)?.[e.field];if(typeof t==`string`&&/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}/.test(t))return`datetime`}return null},r=wd(kt);if(r){let i=t=>{if(!Ze?.isLoaded||!e.objectName)return!0;let n=Pt(t);return!n||!Object.prototype.hasOwnProperty.call(Ye??{},n)||Ze.checkField(e.objectName,n,`read`)};return r.length>0&&typeof r[0]==`object`&&r[0]!==null?r.filter(e=>Du(e)).filter(e=>i(e)).map((r,i)=>{let a=xd(r.label)||xd(Ye?.[r.field]?.label)||r.field.charAt(0).toUpperCase()+r.field.slice(1).replace(/_/g,` `),o=e.objectName?L(e.objectName,r.field,a):a,s,c=Ye?.[r.field],l=ea(r.type,Xe),u=l?null:r.type||c?.type||n({field:r.field})||null,d=c?.format,{rendererType:f,Renderer:p}=Xi({type:u,format:d}),m=l?ot:f?p:null,h={name:r.field,type:f||`text`};c&&(c.label&&(h.label=c.label),c.currency&&(h.currency=c.currency),c.currencyConfig&&(h.currencyConfig=c.currencyConfig),c.precision!==void 0&&(h.precision=c.precision),c.scale!==void 0&&(h.scale=c.scale),c.format&&(h.format=c.format),c.options&&(h.options=R(e.objectName,r.field,c.options))),fu(h,c),f===`select`&&!h.options&&(h.options=Array.from(new Set(A.map(e=>e[r.field]).filter(Boolean))).map(e=>({value:e,label:Jt(String(e))})));let g=c?.appearance;g!=null&&(h.appearance=g);let _=i===0&&!r.link&&!r.action,v=r.link||_;s=r.link&&r.action||_&&r.action||v?(t,n)=>{let i=m?(0,$.jsx)(m,{value:t,field:h}):t!=null&&t!==``?String(t):(0,$.jsx)(Je,{});return(0,$.jsx)(yd,{testId:_?`primary-field-link`:`link-cell`,onActivate:()=>xn.handleClick(n),objectName:e.objectName,recordId:vd(n),wrap:r.wrap,children:i})}:r.action?(e,t)=>(0,$.jsx)(Z,{variant:`outline`,size:`sm`,className:`h-7 text-xs`,"data-testid":`action-cell`,onClick:n=>{n.stopPropagation(),Tn({type:r.action,params:{record:t,field:r.field,value:e}})},children:Iu(r.action)}):m?e=>(0,$.jsx)(m,{value:e,field:h}):e=>e!=null&&e!==``?(0,$.jsx)(`span`,{children:String(e)}):(0,$.jsx)(Je,{});let y=r.prefix;if(y?.field){let e=s,t=y.type===`badge`?Zi(Qi):null;s=(n,r)=>{let i=r[y.field],a=i!=null&&i!==``?t?(0,$.jsx)(t,{value:i,field:{name:y.field,type:Qi}}):(0,$.jsx)(`span`,{className:`text-muted-foreground text-xs mr-1.5`,children:String(i)}):null;return(0,$.jsxs)(`span`,{className:`flex items-center gap-1.5`,children:[a,e(n,r)]})}}let b=[`number`,`currency`,`percent`],x=f||r.type,S=r.align||(x&&b.includes(x)?`right`:void 0),C=i===0;return{header:o,accessorKey:r.field,...u&&{type:u},...e.showColumnTypeIcons&&{headerIcon:t(f)},...!C&&{className:`hidden sm:table-cell`},...r.width&&{width:r.width},...S&&{align:S},sortable:r.sortable!==!1,...r.resizable!==void 0&&{resizable:r.resizable},...s&&{cell:s},...r.pinned&&{pinned:r.pinned},...r.wrap!==void 0&&{wrap:r.wrap}}}):r.filter(e=>typeof e==`string`&&e.trim().length>0).filter(e=>i(e)).map((r,i)=>{let a=Ye?.[r],o=ea(void 0,Xe),s=a?.label||r.charAt(0).toUpperCase()+r.slice(1).replace(/_/g,` `),c=e.objectName?L(e.objectName,r,s):s,{declaredType:l,rendererType:u,Renderer:d}=Xi({type:o?null:a?.type||n({field:r}),format:a?.format}),f=o?ot:u?d:null,p={name:r,type:u||`text`};a&&(a.label&&(p.label=a.label),a.currency&&(p.currency=a.currency),a.currencyConfig&&(p.currencyConfig=a.currencyConfig),a.precision!==void 0&&(p.precision=a.precision),a.scale!==void 0&&(p.scale=a.scale),a.format&&(p.format=a.format),a.options&&(p.options=R(e.objectName,r,a.options))),fu(p,a),u===`select`&&!p.options&&(p.options=Array.from(new Set(A.map(e=>e[r]).filter(Boolean))).map(e=>({value:e,label:Jt(String(e))}))),(u===`select`||u===`status`)&&a?.appearance!=null&&(p.appearance=a.appearance);let m=u&&[`number`,`currency`,`percent`].includes(u)?`right`:void 0,h=i===0,g;return h&&f?g=(t,n)=>{let r=(0,$.jsx)(f,{value:t,field:p});return(0,$.jsx)(yd,{testId:`primary-field-link`,onActivate:()=>xn.handleClick(n),objectName:e.objectName,recordId:vd(n),children:r})}:h?g=(t,n)=>(0,$.jsx)(yd,{testId:`primary-field-link`,onActivate:()=>xn.handleClick(n),objectName:e.objectName,recordId:vd(n),children:t!=null&&t!==``?String(t):(0,$.jsx)(Je,{})}):f&&(g=e=>(0,$.jsx)(f,{value:e,field:p})),{header:c,accessorKey:r,...l&&{type:l},...e.showColumnTypeIcons&&u&&{headerIcon:t(u)},...m&&{align:m},...g&&{cell:g},sortable:a?.sortable!==!1}})}if(J&&!(!Ot&&Y&&V)){let r=We?.provider===`value`?We.items:[];if(r.length>0)return(Ot||Object.keys(r[0])).filter(t=>!Ze?.isLoaded||!e.objectName||!Object.prototype.hasOwnProperty.call(Ye??{},t)||Ze.checkField(e.objectName,t,`read`)).map(r=>{let i=Ye?.[r],a=ea(void 0,Xe),{declaredType:o,rendererType:s,Renderer:c}=Xi({type:a?null:i?.type||n({field:r}),format:i?.format}),l=a?ot:s?c:null,u=i?.label||r.charAt(0).toUpperCase()+r.slice(1).replace(/_/g,` `),d={name:r,type:s||`text`};i&&(i.label&&(d.label=i.label),i.currency&&(d.currency=i.currency),i.currencyConfig&&(d.currencyConfig=i.currencyConfig),i.precision!==void 0&&(d.precision=i.precision),i.scale!==void 0&&(d.scale=i.scale),i.format&&(d.format=i.format),i.options&&(d.options=R(e.objectName,r,i.options))),fu(d,i),s===`select`&&!d.options&&(d.options=Array.from(new Set(A.map(e=>e[r]).filter(Boolean))).map(e=>({value:e,label:Jt(String(e))}))),(s===`select`||s===`status`)&&i?.appearance!=null&&(d.appearance=i.appearance);let f=s&&[`number`,`currency`,`percent`].includes(s)?`right`:void 0;return{header:u,accessorKey:r,...o&&{type:o},...e.showColumnTypeIcons&&s&&{headerIcon:t(s)},...f&&{align:f},...l&&{cell:e=>(0,$.jsx)(l,{value:e,field:d})},sortable:i?.sortable!==!1}})}if(!V)return[];let i=[],a=V?.highlightFields,o=Object.keys(V.fields||{}),s;if(Ot)s=Ot;else if(a?.length)s=Bt(V,a.filter(e=>V.fields?.[e]));else{let e=o.filter(e=>{let t=V.fields?.[e];return!(!t||t.hidden||t.readonly&&qn(e,t))});s=[...e.filter(e=>!qn(e,V.fields?.[e])),...e.filter(e=>qn(e,V.fields?.[e]))]}return s.forEach(t=>{let n=V.fields?.[t];if(!n||Ze?.isLoaded&&e.objectName&&!Ze.checkField(e.objectName,t,`read`))return;let{declaredType:r,rendererType:a,Renderer:o}=Xi(n),s=[`number`,`currency`,`percent`],c=n.options?{...n,options:R(e.objectName,t,n.options)}:n;i.push({header:e.objectName?L(e.objectName,t,n.label||t):n.label||t,accessorKey:t,...r&&{type:r},...!!a&&s.includes(a)&&{align:`right`},cell:e=>(0,$.jsx)(o,{value:e,field:c}),sortable:n.sortable!==!1})}),i},[V,Ye,Xe,Ot,kt,We,J,Y,xn.handleClick,Tn,A,L,R,e.objectName,Ze]),Cr=(0,Q.useMemo)(()=>{let n=e.exportOptions?.formats||[`csv`,`json`],r=typeof t?.exportDownload==`function`&&Y&&!J&&e.exportOptions?.streaming!==!1?[`csv`,`xlsx`,`json`]:[`csv`,`json`];return n.filter(e=>r.includes(e))},[e.exportOptions,t,Y,J]);(0,Q.useEffect)(()=>{let t=e.exportOptions?.formats;if(!t)return;let n=t.filter(e=>!Cr.includes(e));n.length>0&&console.warn(`[ObjectUI] ObjectGrid export: unsupported format(s) hidden from the menu: ${n.join(`, `)}`)},[e.exportOptions,Cr]);let wr=(0,Q.useCallback)(n=>{if(e.operations?.export===!1||X&&!X.includes(`export`))return;let r=e.exportOptions,i=r?.maxRecords||0,a=r?.includeHeaders!==!1,o=t=>ur(t,{prefix:r?.fileNamePrefix,label:V?.label,objectName:Y||e.objectName,viewLabel:u(e.label,F)||e.title});if((n===`csv`||n===`xlsx`||n===`json`)&&typeof t?.exportDownload==`function`&&Y&&!J&&r?.streaming!==!1){let e=xr().filter(e=>e.accessorKey!==`_actions`).map(e=>e.accessorKey).filter(Boolean),r=Array.isArray(zt)?zt:void 0,s=Array.isArray(Vt)?Vt.filter(e=>e&&e.field).map(e=>({field:e.field,direction:e.order??`asc`})):void 0;fe(null),U(!0),(async()=>{try{let c=await t.exportDownload(Y,{format:n,fields:e.length?e:void 0,filter:r,sort:s,includeHeaders:a,limit:i>0?i:void 0}),l=URL.createObjectURL(c),u=document.createElement(`a`);u.href=l,u.download=o(n),u.rel=`noopener`,document.body.appendChild(u),u.click(),u.remove(),URL.revokeObjectURL(l),le(!1)}catch(e){console.error(`ObjectGrid export failed:`,e),fe(e instanceof Error?e.message:String(e))}finally{U(!1)}})();return}let s=i>0?A.slice(0,i):A,c=(e,t)=>{let n=URL.createObjectURL(e),r=document.createElement(`a`);r.href=n,r.download=t,r.click(),URL.revokeObjectURL(n)},l=e=>{let t=e==null?``:String(e);return t.includes(`,`)||t.includes(`"`)||t.includes(`
6
- `)||t.includes(`\r`)?`"${t.replace(/"/g,`""`)}"`:t},d=new Map(xr().map(e=>[e.accessorKey,e.type])),f=e=>$i(d.get(e),Ye?.[e]?.type,Xe);if(n===`csv`){let e=xr().filter(e=>e.accessorKey!==`_actions`&&!f(e.accessorKey)),t=e.map(e=>e.accessorKey),n=e.map(e=>e.header),r=[];a&&r.push(n.join(`,`)),s.forEach(e=>{r.push(t.map(t=>l(e[t])).join(`,`))}),c(new Blob([r.join(`
7
- `)],{type:`text/csv;charset=utf-8;`}),o(`csv`))}else if(n===`json`){let e=s.map(e=>Object.fromEntries(Object.entries(e).filter(([e])=>!f(e))));c(new Blob([JSON.stringify(e,null,2)],{type:`application/json`}),o(`json`))}le(!1)},[A,e.exportOptions,e.operations?.export,X,e.objectName,Y,V,Ye,Xe,xr,t,J,zt,Vt]),Dr=Rt??(N instanceof or?N:void 0);if(Dr)return(0,$.jsxs)(`div`,{role:`alert`,className:`p-3 sm:p-4 border border-amber-300 bg-amber-50 rounded-md`,"data-testid":`grid-malformed-filter`,children:[(0,$.jsx)(`h3`,{className:`text-amber-800 font-semibold`,"data-testid":`grid-malformed-filter-subject`,children:I(`view.malformedFilter`,{subject:Cn(Dr)??``})}),(0,$.jsx)(`p`,{className:`text-amber-700 text-sm mt-1`,children:Dr.message})]});if(gn)return(0,$.jsxs)(`div`,{role:`alert`,className:`p-3 sm:p-4 border border-red-300 bg-red-50 rounded-md`,"data-testid":`grid-grouping-needs-whole-rows`,children:[(0,$.jsx)(`h3`,{className:`text-red-800 font-semibold`,children:I(`grid.errorLoading`)}),(0,$.jsx)(`p`,{className:`text-red-600 text-sm mt-1`,children:I(`grid.grouping.needsWholeRows`)})]});let Ar=N??(dn?Un.error??Yn.error??null:null);if(Ar)return(0,$.jsxs)(`div`,{className:`p-3 sm:p-4 border border-red-300 bg-red-50 rounded-md`,children:[(0,$.jsx)(`h3`,{className:`text-red-800 font-semibold`,children:I(`grid.errorLoading`)}),(0,$.jsx)(`p`,{className:`text-red-600 text-sm mt-1`,children:Ar.message})]});let jr=dn&&!Yn.headers;if(M&&A.length===0||jr)return ie?(0,$.jsx)(`div`,{className:`space-y-2 p-2`,children:[1,2,3].map(e=>(0,$.jsxs)(`div`,{className:`border rounded-lg p-3 bg-card animate-pulse`,children:[(0,$.jsx)(`div`,{className:`h-5 bg-muted rounded w-3/4 mb-3`}),(0,$.jsxs)(`div`,{className:`flex items-center justify-between mb-2`,children:[(0,$.jsx)(`div`,{className:`h-4 bg-muted rounded w-1/4`}),(0,$.jsx)(`div`,{className:`h-5 bg-muted rounded-full w-20`})]}),(0,$.jsx)(`div`,{className:`h-3 bg-muted rounded w-1/3`})]},e))}):(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-foreground`}),(0,$.jsx)(`p`,{className:`mt-2 text-sm text-muted-foreground`,children:I(`grid.loading`)})]});if(fn)return(0,$.jsxs)(`div`,{role:`alert`,className:`p-3 sm:p-4 border border-red-300 bg-red-50 rounded-md`,"data-testid":`grid-grouping-needs-header-query`,children:[(0,$.jsx)(`h3`,{className:`text-red-800 font-semibold`,children:I(`grid.errorLoading`)}),(0,$.jsx)(`p`,{className:`text-red-600 text-sm mt-1`,children:I(`grid.grouping.needsHeaderQuery`)})]});let Mr=[...xr().map(e=>{if(!e||e.accessorKey===`_actions`)return e;let t=Ye?.[e.accessorKey];if(!t)return e;let n={...e};return n.type==null&&t.type&&(n.type=t.type),n.editable!==!1&&!ia(t)&&(n.editable=!1),n}).map(e=>{if(!e)return e;let{type:t,...n}=e,r=$i(t,Ye?.[e.accessorKey]?.type,Xe)?{...n,masked:!0}:n;if(t==null)return r;let i=Pn(t);return i===void 0?r:{...r,type:i}})];if(q.widths&&(Mr=Mr.map(e=>{let t=q.widths?.[e.accessorKey];return t?{...e,width:t}:e})),q.order&&q.order.length>0){let e=new Map(q.order.map((e,t)=>[e,t]));Mr.sort((t,n)=>(e.get(t.accessorKey)??1/0)-(e.get(n.accessorKey)??1/0))}let Nr=!!(ct&&(ct.update||ct.delete)),Pr=_t.length>0||gt.length>0||pt||ht,Fr=Nr||Pr?[...Mr,{header:I(`grid.actions`),accessorKey:`_actions`,fitContent:!0,align:`right`,pinned:`right`,cell:(t,a)=>{let o=i?.(a);return(0,$.jsx)(Gu,{row:a,rowActions:_t,rowActionDefs:gt,objectFields:V?.fields,maxInlineActions:e.maxInlineRowActions??1,canEdit:ql(yt&&o?.update!==!1,Dt(vd(a),`update`)),canDelete:ql(bt&&o?.delete!==!1,Dt(vd(a),`delete`)),editPredicates:Ct,deletePredicates:wt,onEdit:n,onDelete:r,onAction:(e,t)=>{Tn({type:e,params:{record:t}}).then(e=>{e?.success&&se(e=>e+1)})},onActionDef:(e,t)=>{let{params:n,...r}=e,i={...r};Array.isArray(n)&&n.length>0&&(i.actionParams=n),i.params={_rowRecord:t},Tn(i).then(e=>{e?.success&&se(e=>e+1)})}})},sortable:!1}]:Mr,Ir=Fr.filter(e=>e.pinned===`left`),Lr=Fr.filter(e=>e.pinned===`right`),Rr=Fr.filter(e=>!e.pinned),zr=Ir.length>0||Lr.length>0,Br=`sticky right-0 z-10 bg-background border-l border-border`,Hr=Ir.filter(e=>e.accessorKey!==`_actions`).length,Ur=Hr>0||Lr.some(e=>e.accessorKey!==`_actions`),Jr=pe===`compact`?`px-3 py-1 h-9 text-[13px] leading-tight`:pe===`short`?`px-3 py-1 h-9 text-[13px] leading-normal`:pe===`tall`?`px-3 py-2.5 h-14 text-sm`:pe===`extra_tall`?`px-3 py-3.5 h-16 text-sm leading-relaxed`:`px-3 py-1.5 h-11 text-[13px] leading-normal`,Yr=e=>({...e,className:[`px-3`,e.className].filter(Boolean).join(` `),cellClassName:[Jr,e.cellClassName].filter(Boolean).join(` `)}),Xr=(!J&&(!tr||dn)||Ke)&&!tr,Zr=Xr||tr&&dn,Qr=Xr,$r=kn(V),ti=e=>{if(!Zr||e.sortable===!1)return e;let t=V?.fields?.[e.accessorKey];return hn(t)?{...e,sortable:!1}:$r?Hn($r,e.accessorKey)?e:{...e,sortable:!1}:br(t)?{...e,sortable:!1}:e},ni=e=>ti(Yr(e)),ii=zr?[...Ir.map(ni),...Rr.map(ni),...Lr.map(e=>({...ni(e),className:[`px-3`,e.className,Br].filter(Boolean).join(` `),cellClassName:[Jr,e.cellClassName,Br].filter(Boolean).join(` `)}))]:Fr.map(ni),ai=Ur?Hr:e.frozenColumns??1,oi=e.batchActions??e.bulkActions,si=xt?oi:oi?.filter(e=>String(e).toLowerCase()!==`delete`),{defs:ci,unresolved:li}=xu({bulkActions:(si??[]).filter(e=>String(e).toLowerCase()!==`delete`),bulkActionDefs:Array.isArray(e.bulkActionDefs)?e.bulkActionDefs:[],objectActions:V?.actions,localizeLabel:(t,n)=>z(e.objectName,t,n)}),ui=ci.filter(e=>xt||e?.operation!==`delete`),di=(si??[]).filter(e=>String(e).toLowerCase()===`delete`),fi=si&&si.length>0?[...li,...di]:bt&&a&&ui.length===0?[`delete`]:[],mi=fi.length>0||ui.length>0,hi=!1;if(e.selection!==void 0){let t=e.selection?.type;hi=t===`none`?!1:t??kd}else e.selectable===void 0?mi&&(hi=`multiple`):hi=e.selectable;let gi=hi===`single`,_i=J?D??null:Oe.current??null,yi=!gi&&_i!==null,bi=async n=>{if(!_e)return n;let r=e.objectName;if(!t||!r||!_i)return n;let i={..._i};delete i.$top,delete i.$skip;let a=5e3,o=[],s=0;for(;o.length<a;){let e=(await t.find(r,{...i,$top:500,$skip:s})).data??[];if(e.length===0||(o.push(...e),e.length<500))break;s+=500}return o.slice(0,a)},xi=()=>{ge([]),ve(!1),be(e=>e+1)},Si=()=>({name:`delete`,label:z(e.objectName,`delete`,Iu(`delete`)),operation:`delete`,variant:`danger`}),Ci=(e,t)=>{(async()=>{let n=await bi(t);if(e===`delete`&&a){let{eligible:e,skipped:t}=Cu({name:`delete`,visible:Et?.visibleWhen},n,{scope:jn,fields:V?.fields});if(t===0){a(e),xi();return}Ce(Si()),G(e),De(t);return}(await Tn({type:e,params:{records:n}}))?.success&&(xi(),se(e=>e+1))})()},wi=(e,t)=>{(async()=>{let{eligible:n,skipped:r}=Cu(e,await bi(t),{scope:jn,fields:V?.fields});Ce(e),G(n),De(r)})()},Ti=e=>{let{params:t,actionParams:n,confirmText:r,confirm:i,...a}=e;return a},Ei=async(e,t,n)=>{let r=e.actionDef;if(!r)return;let{resultDialog:i,...a}=Ti(r),o=await Tn({...a,params:{...n,_rowRecord:t},toast:{showOnSuccess:!1,showOnError:!1}});if(!o?.success)throw Error(o?.error||`Action ${e.name} failed`)},Di=async(e,t,n)=>{let r=e.actionDef;if(!r)return;let i=Ti(r),a=t.map(e=>e.id==null?``:String(e.id)).filter(Boolean);On({selectedRecords:t});let o=await Tn({...i,params:{...n,_selectedIds:a},toast:{showOnSuccess:!1,showOnError:!1}});if(!o?.success)throw Error(o?.error||`Action ${e.name} failed`)},Oi=e=>{Ce(null),G([]),De(0),e&&e.succeeded>0&&(xi(),se(e=>e+1))},Mi=e=>e?._id??e?.id,Ni=async(e,n,r)=>{if(!t||!Y)throw Error(`Cannot persist inline edit: no dataSource/objectName configured on the grid.`);let i=Mi(r);if(i==null)throw Error(`Cannot persist inline edit: row has no id/_id.`);await t.update(Y,i,n),se(e=>e+1)},Pi=async e=>{if(!t||!Y)throw Error(`Cannot persist inline edits: no dataSource/objectName configured on the grid.`);await Promise.all(e.map(({changes:e,row:n})=>{let r=Mi(n);if(r==null)throw Error(`Cannot persist inline edit: row has no id/_id.`);return t.update(Y,r,e)})),se(e=>e+1)},Fi=e.showPagination===!1?!1:e.pagination===void 0?e.showPagination??!0:!0,Li=Md(e,Ed),Ri=e.searchableFields===void 0?e.showSearch===void 0||e.showSearch:e.searchableFields.length>0,zi=Ke?g:xe,Hi=Ke?_:Kt,Ui=Ke?v??Xt:Xt,Gi=Ke?b:qt,Ki=Ke?x:e=>{Zt(e),qt(1)},Ji=hd(Vt),Yi=Ke?C??[]:Qt??Ji,ta=$r?Gn(Yi,$r):Yi,ra=Ke?w:$t,aa=$r&&ra?e=>ra(Gn(e,$r)):ra,oa=Ke?T??``:en,sa=Ke?E:tn,ca={type:`data-table`,caption:u(e.label,F)||e.title,columns:ii,data:A,pagination:Fi,pageSize:Xr?Ui:Li,pageSizeOptions:e.pagination?.pageSizeOptions,manualPagination:Xr,rowCount:Xr?zi:void 0,page:Xr?Hi:void 0,onPageChange:Xr?Gi:void 0,onPageSizeChange:Xr?Ki:void 0,manualSorting:Zr,sort:Zr?ta:void 0,onSortChange:Zr?aa:void 0,searchable:Ri,manualSearch:Qr,search:Qr?oa:void 0,onSearchChange:Qr?sa:void 0,selectable:hi,showSelectionCount:!1,sortable:!0,exportable:ct?.export,borderless:!0,rowActions:!!(st&&Nr),resizableColumns:e.resizable??e.resizableColumns??!0,reorderableColumns:e.reorderableColumns??!1,editable:st,renderCellEditor:st?e=>{let t=V?.fields?.[e.column?.accessorKey];if(!t||!Ge(t.type))return null;let n=qe.has(t.type),r={name:e.column.accessorKey,...t},i=na(V,e.column.accessorKey,e.value);return i&&Array.isArray(r.options)&&(r={...r,options:r.options.filter(e=>i.has(String(e?.value??e)))}),(0,$.jsx)(S,{field:r,value:e.value,onChange:t=>n?e.commit(t):e.stage(t),dependentValues:e.pendingRow??e.row})}:void 0,singleClickEdit:e.singleClickEdit??!0,className:e.className,cellClassName:pe===`compact`?`px-3 py-1 text-[13px] leading-tight`:pe===`short`?`px-3 py-1 text-[13px] leading-normal`:pe===`tall`?`px-3 py-2.5 text-sm`:pe===`extra_tall`?`px-3 py-3.5 text-sm leading-relaxed`:`px-3 py-1.5 text-[13px] leading-normal`,showRowNumbers:!0,showAddRow:!!ct?.create&&(rt??!0),onAddRecord:f,rowClassName:e.rowColor?(e,t)=>An(e):void 0,rowStyle:e.conditionalFormatting?.length?(e,t)=>Mn(e):void 0,frozenColumns:ai,onSelectionChange:e=>{ge(e),o?.(e)},selectionResetKey:ye,onRowClick:xn.handleClick,onCellChange:c,onRowSave:l??Ni,onBatchSave:d??Pi,onColumnResize:(e,t)=>{Le({...q,widths:{...q.widths,[e]:t}})},onColumnsReorder:e=>{let t=e.map(e=>e?.accessorKey).filter(e=>typeof e==`string`&&e.length>0);Le({...q,order:t})}},ua={};for(let e of ii){let t=e.accessorKey;if(!t)continue;let n=q.widths?.[t];if(n){ua[t]=n;continue}if(e.width){ua[t]=e.width;continue}if(e.fitContent)continue;let r=String(e.header??``).length;for(let e of A.slice(0,50)){let n=e?.[t],i=n==null?0:String(n).length;i>r&&(r=i)}ua[t]=Math.min(400,Math.max(80,r*8+48))}let da=(e,t)=>({...ca,caption:void 0,data:e,pagination:!1,...t?{pagination:t.count>Xt,manualPagination:!0,rowCount:t.count,page:t.page,pageSize:Xt,onPageChange:t.onPageChange,onPageSizeChange:e=>{Zt(e)}}:{},searchable:!1,borderless:!0,disableInnerScroll:!0,frozenColumns:0,columns:ca.columns.map(e=>({...e,width:ua[e.accessorKey]??e.width}))}),fa=u(e.label,F),pa=fa?I(`detail.recordDetailWithLabel`,{label:fa}):e.objectName?I(`detail.recordDetailWithLabel`,{label:e.objectName.charAt(0).toUpperCase()+e.objectName.slice(1)}):I(`detail.recordDetail`),ma={popoverAnchorRef:Sn,storageKey:e.objectName?Ne(e.objectName):void 0,legacyStorageKey:e.objectName?Tt(e.objectName):void 0,width:xn.width??`min(960px, 60vw)`},ha=n=>{let r=vd(n),i=!!V?.fields&&Object.keys(V.fields).length>0;if(e.objectName&&r!=null&&i)return(0,$.jsx)(`div`,{className:`px-6 pt-6 pb-6`,"data-testid":`record-detail-panel`,children:(0,$.jsx)(sl,{record:n,objectName:e.objectName,recordId:r,dataSource:t,objectSchema:V,onClose:xn.close})});let a=Object.entries(n),o=e=>Ye?.[e]?.hidden===!0,s=e=>qn(e,Ye?.[e]),c=a.filter(([e])=>!s(e)&&!o(e)),l=a.filter(([e])=>s(e)&&e!==`_id`&&e!==`id`&&!o(e)),u=e=>e.charAt(0).toUpperCase()+e.slice(1).replace(/_/g,` `),d=(e,t)=>{if(t==null||t===``)return(0,$.jsx)(Je,{className:`text-sm italic`,glyph:I(`grid.empty`)});if(Xe)return(0,$.jsx)(ot,{value:t});let n=Ye?.[e],{rendererType:r,Renderer:i}=Xi(n);return r?(0,$.jsx)(i,{value:t,field:n}):typeof t==`boolean`?(0,$.jsx)($e,{variant:t?`default`:`outline`,children:I(t?`grid.yes`:`grid.no`)}):typeof t==`string`&&!isNaN(Date.parse(t))&&(e.includes(`date`)||e.includes(`_at`)||e.includes(`time`))?(0,$.jsx)(`span`,{className:`text-sm tabular-nums`,children:rr(t,void 0,{locale:F})}):typeof t==`number`&&[`amount`,`price`,`total`,`revenue`,`cost`,`value`,`budget`,`salary`].some(t=>e.toLowerCase().includes(t))?(0,$.jsx)(`span`,{className:`text-sm tabular-nums font-medium`,children:lt(t,ne,F)}):(0,$.jsx)(`span`,{className:`text-sm break-words`,children:String(B(t)??``)})};return(0,$.jsxs)(`div`,{className:`space-y-4`,"data-testid":`record-detail-panel`,children:[(0,$.jsx)(`div`,{className:`rounded-lg border bg-card`,children:(0,$.jsx)(`div`,{className:`divide-y`,children:c.map(([e,t])=>(0,$.jsxs)(`div`,{className:`flex flex-col sm:flex-row sm:items-start gap-1 sm:gap-4 px-4 py-3`,children:[(0,$.jsx)(`span`,{className:`text-xs font-medium text-muted-foreground sm:w-1/3 sm:text-right sm:pt-0.5 uppercase tracking-wide shrink-0`,children:u(e)}),(0,$.jsx)(`div`,{className:`flex-1 min-w-0`,children:d(e,t)})]},e))})}),l.length>0&&(0,$.jsxs)(`div`,{className:`rounded-lg border bg-muted/30`,children:[(0,$.jsx)(`div`,{className:`px-4 py-2 border-b`,children:(0,$.jsx)(`span`,{className:`text-xs font-medium text-muted-foreground uppercase tracking-wide`,children:I(`grid.systemFields`)})}),(0,$.jsx)(`div`,{className:`divide-y divide-border/50`,children:l.map(([e,t])=>(0,$.jsxs)(`div`,{className:`flex items-center gap-4 px-4 py-2`,children:[(0,$.jsx)(`span`,{className:`text-xs text-muted-foreground w-1/3 text-right shrink-0`,children:u(e)}),(0,$.jsx)(`span`,{className:`text-xs text-muted-foreground flex-1 min-w-0 break-words`,children:Xe?(0,$.jsx)(ot,{value:t}):String(B(t)??``)})]},e))})]})]})};if(ie&&A.length>0&&!tr){let t=xr().filter(e=>e.accessorKey!==`_actions`),n=new Map;t.forEach(e=>n.set(e.accessorKey,e));let r=t[0],i=[`amount`,`price`,`total`,`revenue`,`cost`,`value`,`budget`,`salary`],a=[`stage`,`status`,`priority`,`category`,`severity`,`level`],o=[`date`,`due`,`created`,`updated`,`deadline`,`start`,`end`,`expires`],s=[`probability`,`percent`,`rate`,`ratio`,`confidence`,`score`],c=e=>{let t=(e||``).toLowerCase();return t.includes(`won`)||t.includes(`completed`)||t.includes(`done`)||t.includes(`active`)||t===`activated`||t===`success`||t===`approved`||t===`paid`?`bg-green-50 text-green-700 border-green-200 dark:bg-green-950/40 dark:text-green-300 dark:border-green-900/60`:t.includes(`lost`)||t.includes(`cancelled`)||t.includes(`rejected`)||t.includes(`closed lost`)||t===`expired`||t===`terminated`||t===`failed`||t===`overdue`?`bg-red-50 text-red-700 border-red-200 dark:bg-red-950/40 dark:text-red-300 dark:border-red-900/60`:t.includes(`negotiation`)||t.includes(`review`)||t.includes(`in progress`)||t.includes(`approval`)||t===`in_approval`||t===`pending_approval`?`bg-yellow-50 text-yellow-800 border-yellow-200 dark:bg-yellow-950/40 dark:text-yellow-300 dark:border-yellow-900/60`:t.includes(`proposal`)||t.includes(`pending`)?`bg-blue-50 text-blue-700 border-blue-200 dark:bg-blue-950/40 dark:text-blue-300 dark:border-blue-900/60`:t.includes(`qualification`)||t.includes(`qualified`)?`bg-indigo-50 text-indigo-700 border-indigo-200 dark:bg-indigo-950/40 dark:text-indigo-300 dark:border-indigo-900/60`:t.includes(`prospecting`)||t.includes(`new`)||t.includes(`open`)?`bg-purple-50 text-purple-700 border-purple-200 dark:bg-purple-950/40 dark:text-purple-300 dark:border-purple-900/60`:t===`draft`||t.includes(`draft`)?`bg-slate-50 text-slate-700 border-slate-200 dark:bg-slate-950/40 dark:text-slate-300 dark:border-slate-900/60`:`bg-muted text-muted-foreground border-border`},l=e=>{let t=(e||``).toLowerCase();return t.includes(`won`)||t.includes(`completed`)||t.includes(`done`)||t.includes(`active`)||t===`activated`?`border-l-green-500`:t.includes(`lost`)||t.includes(`cancelled`)||t.includes(`rejected`)||t===`expired`||t===`terminated`?`border-l-red-500`:t.includes(`negotiation`)||t.includes(`review`)||t.includes(`in progress`)||t.includes(`approval`)?`border-l-yellow-500`:t.includes(`proposal`)||t.includes(`pending`)?`border-l-blue-500`:t.includes(`qualification`)||t.includes(`qualified`)?`border-l-indigo-500`:t.includes(`prospecting`)||t.includes(`new`)||t.includes(`open`)?`border-l-purple-500`:t===`draft`||t.includes(`draft`)?`border-l-slate-400`:`border-l-gray-300`},u=e=>$i(n.get(e)?.type,Ye?.[e]?.type,Xe),d=e=>{if(u(e))return`other`;let t=e.toLowerCase();return i.some(e=>t.includes(e))?`amount`:a.some(e=>t.includes(e))?`stage`:o.some(e=>t.includes(e))?`date`:s.some(e=>t.includes(e))?`percent`:`other`},f=(t,n)=>{let r=V?.fields?.[t]?.options;if(Array.isArray(r)&&r.length>0){let i=(e.objectName?R(e.objectName,t,r):r).find(e=>e&&String(e.value)===String(n));if(i)return{label:i.label==null?String(n):String(i.label),color:i.color}}let i=String(n);return{label:/^[a-z0-9]+(_[a-z0-9]+)+$/.test(i)?Jt(i):i}};return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`div`,{className:`space-y-2 p-2`,...wn,children:A.map((e,n)=>{let i=t.slice(1,5),a=i.find(e=>d(e.accessorKey)===`amount`),o=i.find(e=>d(e.accessorKey)===`stage`),s=i.filter(e=>d(e.accessorKey)===`date`),p=i.filter(e=>d(e.accessorKey)===`percent`),m=i.filter(e=>e!==a&&e!==o&&!s.includes(e)&&!p.includes(e)),h=o?String(e[o.accessorKey]??``):``,g=h?l(h):``,_=[`border rounded-lg p-2.5 bg-card hover:bg-accent/50 cursor-pointer transition-colors touch-manipulation`,g?`border-l-[3px] ${g}`:``].filter(Boolean).join(` `);return(0,$.jsxs)(`div`,{className:_,onClick:()=>xn.handleClick(e),children:[r&&(0,$.jsx)(`div`,{className:`font-semibold text-sm truncate mb-1`,children:u(r.accessorKey)?r.cell?.(e[r.accessorKey],e):B(e[r.accessorKey])??`—`}),(a||o)&&(0,$.jsxs)(`div`,{className:`flex items-center justify-between gap-2 mb-1`,children:[a&&(0,$.jsx)(`span`,{className:`text-sm tabular-nums font-medium`,children:typeof e[a.accessorKey]==`number`?et(e[a.accessorKey],Er(V?.fields?.[a.accessorKey],ne),F):B(e[a.accessorKey])??`—`}),o&&e[o.accessorKey]&&(()=>{let t=e[o.accessorKey],n=f(o.accessorKey,t),r=ze(n.color),i=r?r.className:n.color?Fe(n.color,t):c(String(t));return(0,$.jsx)($e,{variant:`outline`,className:`text-xs shrink-0 max-w-[140px] truncate ${i}`,style:r?.style,children:n.label})})()]}),(s.length>0||p.length>0)&&(0,$.jsxs)(`div`,{className:`flex items-center justify-between py-0.5 text-xs text-muted-foreground`,children:[s[0]&&(0,$.jsx)(`span`,{className:`tabular-nums`,children:e[s[0].accessorKey]?rr(e[s[0].accessorKey],`short`,{locale:F}):`—`}),p[0]&&e[p[0].accessorKey]!=null&&(0,$.jsx)(`span`,{className:`tabular-nums`,children:mt(Number(e[p[0].accessorKey]),void 0,F)})]}),s.slice(1).map(t=>(0,$.jsxs)(`div`,{className:`flex justify-between items-center py-0.5`,children:[(0,$.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:t.header}),(0,$.jsx)(`span`,{className:`text-xs text-muted-foreground tabular-nums`,children:e[t.accessorKey]?rr(e[t.accessorKey],`short`,{locale:F}):`—`})]},t.accessorKey)),m.map(t=>{let n=e[t.accessorKey];return n==null||n===``?null:(0,$.jsxs)(`div`,{className:`flex justify-between items-center py-0.5`,children:[(0,$.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:t.header}),(0,$.jsx)(`span`,{className:`text-xs font-medium truncate ml-2 text-right`,children:t.cell?t.cell(n,e):String(B(n)??``)})]},t.accessorKey)})]},e.id||e._id||n)})}),xn.isOverlay&&(0,$.jsx)(vt,{...xn,title:pa,...ma,children:e=>ha(e)})]})}let ga=()=>{me(e=>e===`compact`?`short`:e===`short`?`medium`:e===`medium`?`tall`:e===`tall`?`extra_tall`:`compact`)},_a={compact:ji,short:Ai,medium:ki,tall:Vi,extra_tall:Vi}[pe],va=e.rowHeight!==void 0&&!e.hideRowHeightToggle,ya=!!e.exportOptions&&Cr.length>0&&e.operations?.export!==!1&&(!X||X.includes(`export`)),ba=ya||va?(0,$.jsxs)(`div`,{className:`flex items-center justify-end gap-1 px-2 py-1`,children:[va&&(0,$.jsxs)(Z,{variant:`ghost`,size:`sm`,className:`h-7 px-2 text-muted-foreground hover:text-primary text-xs`,onClick:ga,title:`Row height: ${pe}`,children:[(0,$.jsx)(_a,{className:`h-3.5 w-3.5 mr-1.5`}),(0,$.jsx)(`span`,{className:`hidden sm:inline capitalize`,children:pe})]}),ya&&(0,$.jsxs)(Te,{open:ce,onOpenChange:le,children:[(0,$.jsx)(re,{asChild:!0,children:(0,$.jsxs)(Z,{variant:`ghost`,size:`sm`,className:`h-7 px-2 text-muted-foreground hover:text-primary text-xs`,children:[(0,$.jsx)(ri,{className:`h-3.5 w-3.5 mr-1.5`}),(0,$.jsx)(`span`,{className:`hidden sm:inline`,children:I(`grid.export`)})]})}),(0,$.jsx)(te,{align:`end`,className:`w-48 p-2`,children:(0,$.jsxs)(`div`,{className:`space-y-1`,children:[Cr.map(e=>(0,$.jsxs)(Z,{variant:`ghost`,size:`sm`,className:`w-full justify-start h-8 text-xs`,disabled:ue,onClick:()=>wr(e),children:[ue?(0,$.jsx)(vi,{className:`h-3.5 w-3.5 mr-2 animate-spin`}):(0,$.jsx)(ri,{className:`h-3.5 w-3.5 mr-2`}),I(`grid.exportAs`,{format:e.toUpperCase()})]},e)),de&&(0,$.jsx)(`div`,{className:`px-2 py-1 text-xs`,style:{color:`var(--destructive, #ef4444)`},role:`alert`,children:de})]})})]})]}):null,xa=pr?(0,$.jsx)(`div`,{className:`border-t bg-muted/30 px-2 py-1.5`,"data-testid":`column-summary-footer`,children:(0,$.jsx)(`div`,{className:`flex gap-4 text-xs text-muted-foreground font-medium`,children:ii.filter(e=>fr.has(e.accessorKey)).map(e=>{let t=fr.get(e.accessorKey);return(0,$.jsxs)(`span`,{"data-testid":`summary-${e.accessorKey}`,children:[e.header,`: `,t.label]},e.accessorKey)})})}):null,Sa=(t,n)=>{let r=V?.fields?.[t],i=e.objectName?L(e.objectName,t,r?.label||t):r?.label||t,a,o,s=r?.type;if(s===`select`||s===`status`){let i=r?.options?R(e.objectName,t,r.options):void 0,s=Array.isArray(i)?i.find(e=>String(e.label)===n||String(e.value)===n):void 0,c=ze(s?.color);a=c?c.className:Fe(s?.color,s?.value??n),o=c?.style}return{fieldLabel:i,labelColorClass:a,labelColorStyle:o}},Ca=e=>{let t=cr.pages[e.key];return t?.error?(0,$.jsx)(`p`,{"data-testid":`group-rows-error-${e.key}`,className:`px-1 py-2 text-xs text-destructive`,children:t.error.message}):!t||t.loading&&t.rows.length===0?(0,$.jsx)(`p`,{"data-testid":`group-rows-loading-${e.key}`,className:`px-1 py-2 text-xs text-muted-foreground`,children:I(`grid.loading`)}):(0,$.jsx)(Kn,{schema:da(t.rows,{count:e.count,page:t.page,onPageChange:t=>cr.setPage(e.key,t)})})},wa=e=>{let{fieldLabel:t,labelColorClass:n,labelColorStyle:r}=Sa(e.field,e.label);return(0,$.jsx)(`div`,{children:(0,$.jsx)(Ml,{groupKey:e.key,label:e.label,count:e.count,collapsed:e.collapsed,aggregations:e.aggregations,fieldLabel:e.depth===0?t:void 0,labelColorClass:n,labelColorStyle:r,onToggle:nr,children:e.subgroups.length>0?(0,$.jsx)(`div`,{className:`space-y-4 mt-2`,children:e.subgroups.map(wa)}):dn?Ca(e):(0,$.jsx)(Kn,{schema:da(e.rows)})})},e.key)},Ta=Math.max(1,Math.ceil(er.length/K)),Ea=Math.min(ke,Ta),Da=er.slice((Ea-1)*K,Ea*K),Oa=er.length>0&&Ta>1?(0,$.jsxs)(`div`,{className:`flex flex-col sm:flex-row items-center justify-between gap-2 px-3 sm:px-4 py-2 border-t`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,$.jsxs)(`span`,{className:`text-xs sm:text-sm text-muted-foreground`,children:[I(`table.rowsPerPage`),`:`]}),(0,$.jsx)(`select`,{className:`h-8 rounded-md border border-input bg-background px-2 text-sm`,value:K,onChange:e=>{je(Number(e.target.value)),Ae(1)},children:[5,10,20,50,100].map(e=>(0,$.jsx)(`option`,{value:e,children:e},e))})]}),(0,$.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,$.jsx)(`span`,{className:`text-xs sm:text-sm text-muted-foreground`,children:I(`table.pageInfo`,{current:Ea,total:Ta})}),(0,$.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,$.jsx)(Z,{variant:`outline`,size:`icon`,onClick:()=>Ae(1),disabled:Ea===1,children:(0,$.jsx)(Kr,{className:`h-4 w-4`})}),(0,$.jsx)(Z,{variant:`outline`,size:`icon`,onClick:()=>Ae(Math.max(1,Ea-1)),disabled:Ea===1,children:(0,$.jsx)(Wr,{className:`h-4 w-4`})}),(0,$.jsx)(Z,{variant:`outline`,size:`icon`,onClick:()=>Ae(Math.min(Ta,Ea+1)),disabled:Ea===Ta,children:(0,$.jsx)(Gr,{className:`h-4 w-4`})}),(0,$.jsx)(Z,{variant:`outline`,size:`icon`,onClick:()=>Ae(Ta),disabled:Ea===Ta,children:(0,$.jsx)(qr,{className:`h-4 w-4`})})]})]})]}):null,ka=tr?(0,$.jsxs)(`div`,{className:`flex flex-col flex-1 min-h-0`,children:[(0,$.jsx)(`div`,{className:`flex-1 min-h-0 overflow-auto [-webkit-overflow-scrolling:touch]`,children:(0,$.jsx)(`div`,{className:`min-w-max space-y-4 px-3 sm:px-4 pt-2 pb-4`,children:Da.map(wa)})}),Oa]}):(0,$.jsxs)(`div`,{className:`flex flex-col flex-1 min-h-0`,children:[(0,$.jsx)(`div`,{className:`flex flex-col flex-1 min-h-0`,children:(0,$.jsx)(Kn,{schema:ca})}),xa]}),Aa=(0,$.jsx)(od,{def:Se,rows:we,skippedCount:Ee,open:!!Se,onClose:Oi,dataSource:t,resource:e.objectName??``,objectFields:V?.fields,runAction:Ei,runAggregate:Di});return xn.isOverlay&&xn.mode===`split`&&xn.isOpen&&xn.selectedRecord?(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(vt,{...xn,title:pa,...ma,mainContent:(0,$.jsxs)(`div`,{className:`flex flex-col h-full`,children:[ba,ka,(0,$.jsx)(qu,{selectedRows:he,actions:fi??[],actionDefs:ui,objectFields:V?.fields,onAction:Ci,onActionDef:wi,onClearSelection:xi,pageSize:A.length,totalMatching:yi?zi:void 0,allMatchingSelected:_e,onSelectAllMatching:yi?()=>ve(!0):void 0})]}),children:e=>ha(e)}),Aa]}):(0,$.jsxs)(`div`,{ref:Re,className:`relative h-full flex flex-col`,...wn,children:[(0,$.jsx)(it,{active:M&&A.length>0,ariaLabel:I(`grid.refreshing`)}),Ve>0&&(0,$.jsx)(`div`,{className:`flex items-center justify-center text-xs text-muted-foreground`,style:{height:Ve},children:I(Be?`grid.refreshing`:`grid.pullToRefresh`)}),ba,ka,(0,$.jsx)(qu,{selectedRows:he,actions:fi??[],actionDefs:ui,objectFields:V?.fields,onAction:Ci,onActionDef:wi,onClearSelection:xi,pageSize:A.length,totalMatching:yi?zi:void 0,allMatchingSelected:_e,onSelectAllMatching:yi?()=>ve(!0):void 0}),xn.isOverlay&&(0,$.jsx)(vt,{...xn,title:pa,...ma,children:e=>ha(e)}),Aa]})};g();var Id=new Set([`true`,`t`,`yes`,`y`,`1`,`on`,`是`,`对`,`✓`,`√`]),Ld=new Set([`false`,`f`,`no`,`n`,`0`,`off`,`否`,`错`,`✗`,`×`]),Rd=new Set([...Id,...Ld]),zd=new Set([...l,`reference`]),Bd={Unsupported:`IMPORT_UNSUPPORTED_FILE`,LegacyXls:`IMPORT_LEGACY_XLS`};function Vd(e,t=`,`){let n=[],r=[],i=``,a=!1;for(let o=0;o<e.length;o++){let s=e[o],c=e[o+1];a?s===`"`&&c===`"`?(i+=`"`,o++):s===`"`?a=!1:i+=s:s===`"`?a=!0:s===t?(r.push(i.trim()),i=``):s===`
8
- `||s===`\r`&&c===`
9
- `?(r.push(i.trim()),r.some(e=>e!==``)&&n.push(r),r=[],i=``,s===`\r`&&o++):i+=s}return r.push(i.trim()),r.some(e=>e!==``)&&n.push(r),n}function Hd(e){if(e==null)return``;if(e instanceof Date){let t=e.toISOString();return t.endsWith(`T00:00:00.000Z`)?t.slice(0,10):t}if(typeof e==`object`){let t=e;return`result`in t?Hd(t.result):Array.isArray(t.richText)?t.richText.map(e=>String(e.text??``)).join(``):`text`in t?Hd(t.text):`hyperlink`in t?String(t.hyperlink??``):`error`in t?String(t.error??``):``}return String(e)}async function Ud(t){let r=await n(()=>import(`./exceljs.min-C1j2HQXe.js`).then(t=>e(t.default,1)),[],import.meta.url),i=new(r.default??r).Workbook;await i.xlsx.load(t);let a=i.worksheets[0];if(!a)return[];let o=a.columnCount,s=[];return a.eachRow({includeEmpty:!1},e=>{let t=[];for(let n=1;n<=o;n++)t.push(Hd(e.getCell(n).value).trim());t.some(e=>e!==``)&&s.push(t)}),s}function Wd(e){let t=new Uint8Array(e);if(t[0]===239&&t[1]===187&&t[2]===191)return new TextDecoder(`utf-8`).decode(t);if(t[0]===255&&t[1]===254)return new TextDecoder(`utf-16le`).decode(t);if(t[0]===254&&t[1]===255)return new TextDecoder(`utf-16be`).decode(t);try{return new TextDecoder(`utf-8`,{fatal:!0}).decode(t)}catch{try{return new TextDecoder(`gb18030`).decode(t)}catch{return new TextDecoder(`utf-8`).decode(t)}}}async function Gd(e){let t=e.name.toLowerCase();if(t.endsWith(`.csv`)||t.endsWith(`.tsv`)||t.endsWith(`.txt`))return Vd(Wd(await e.arrayBuffer()),t.endsWith(`.tsv`)?` `:`,`);if(t.endsWith(`.xlsx`)||t.endsWith(`.xlsm`))return Ud(await e.arrayBuffer());throw t.endsWith(`.xls`)?Error(Bd.LegacyXls):Error(Bd.Unsupported)}function Kd(e,t){if(e&&/<table[\s>]/i.test(e)&&typeof DOMParser<`u`){let t=qd(e);if(t.length)return t}if(t&&t.trim()){let e=Vd(t,t.includes(` `)?` `:`,`);if(e.length)return e}return null}function qd(e){let t=new DOMParser().parseFromString(e,`text/html`).querySelector(`table`);if(!t)return[];let n=[];return t.querySelectorAll(`tr`).forEach(e=>{let t=[];e.querySelectorAll(`th,td`).forEach(e=>t.push((e.textContent??``).trim())),t.some(e=>e!==``)&&n.push(t)}),n}var Jd=new Set([`true`,`false`,`yes`,`no`,`y`,`n`,`是`,`否`]),Yd=50,Xd=e=>e!==``&&!isNaN(Number(e)),Zd=e=>Jd.has(e.toLowerCase()),Qd=e=>/\d{1,2}:\d{2}/.test(e)||/T\d{2}:\d{2}/.test(e),$d=e=>!Xd(e)&&!isNaN(Date.parse(e));function ef(e){let t=e.map(e=>(e??``).trim()).filter(e=>e!==``).slice(0,Yd);return t.length===0?`text`:t.every(Zd)?`boolean`:t.every(Xd)?`number`:t.every($d)?t.some(Qd)?`datetime`:`date`:`text`}function tf(e,t){switch(e){case`number`:return[`number`,`currency`,`percent`].includes(t);case`boolean`:return t===`boolean`;case`date`:case`datetime`:return t===`date`||t===`datetime`;case`text`:return!0;default:return!0}}var nf=e=>e.toLowerCase().replace(/[\s_\-.]+/g,``).replace(/[()()[\]{}::,,、/**]/g,``);function rf(e){return e.replace(/([a-z])([A-Z])/g,`$1 $2`).toLowerCase().split(/[\s_\-./()()[\]{}::,,、**]+/).map(e=>e.trim()).filter(Boolean)}var af=[[`name`,`fullname`,`displayname`,`姓名`,`名称`,`名字`],[`email`,`emailaddress`,`mail`,`邮箱`,`电子邮箱`,`邮件`],[`phone`,`tel`,`telephone`,`mobile`,`cell`,`手机`,`电话`,`手机号`,`联系电话`],[`date`,`日期`],[`datetime`,`timestamp`,`时间`,`日期时间`],[`amount`,`price`,`total`,`cost`,`金额`,`价格`,`总额`,`总价`,`费用`],[`status`,`state`,`状态`],[`address`,`地址`],[`company`,`organization`,`org`,`公司`,`单位`,`组织`,`企业`],[`description`,`desc`,`note`,`notes`,`remark`,`remarks`,`备注`,`描述`,`说明`],[`id`,`code`,`number`,`no`,`编号`,`编码`,`代码`],[`quantity`,`qty`,`count`,`数量`],[`country`,`国家`],[`city`,`城市`],[`province`,`state`,`省份`,`省`],[`gender`,`sex`,`性别`],[`age`,`年龄`],[`title`,`标题`,`职位`,`头衔`],[`owner`,`assignee`,`assignedto`,`负责人`,`负责`,`所有者`,`归属人`],[`createdat`,`createdon`,`createtime`,`创建时间`],[`updatedat`,`updatedon`,`modifiedtime`,`更新时间`]],of=(()=>{let e=new Map;return af.forEach((t,n)=>t.forEach(t=>e.set(nf(t),n))),e})();function sf(e){return e>=.85?`high`:e>=.55?`medium`:e>0?`low`:null}var cf=.4;function lf(e,t){if(e.length===0||t.length===0)return 0;let n=new Set(e),r=new Set(t),i=0;return n.forEach(e=>{r.has(e)&&i++}),i/(n.size+r.size-i)}function uf(e,t,n){let r=[t.name,t.label].filter(e=>!!e),i=nf(e),a=rf(e),o={score:0,reason:`none`},s=(e,t)=>{e>o.score&&(o.score=e,o.reason=t)};for(let t of r){if(e.trim()===t.trim()){s(1,`exact`);continue}let n=nf(t);if(i&&n&&i===n){s(.95,`normalized`);continue}i&&n&&(i.includes(n)||n.includes(i))&&s(.5+Math.min(i.length,n.length)/Math.max(i.length,n.length)*.35,`contains`);let r=lf(a,rf(t));r>0&&s(.4+r*.45,`token`)}let c=of.get(i);return c!==void 0&&r.some(e=>of.get(nf(e))===c)&&s(.82,`synonym`),o.reason!==`exact`&&o.reason!==`normalized`&&n!==`text`&&o.score>0&&(tf(n,t.type)?o.score=Math.min(1,o.score+.05):o.score*=.5),{score:o.score,reason:o.reason}}function df(e,t,n){let r=e.map((e,t)=>ef(n?n.map(e=>e[t]):[])),i=[];e.forEach((e,n)=>{t.forEach(t=>{let{score:a,reason:o}=uf(e,t,r[n]);a>0&&i.push({ci:n,field:t.name,score:a,reason:o})})}),i.sort((e,t)=>t.score-e.score);let a=new Set,o=new Set,s=new Map;for(let e of i)e.score<cf||a.has(e.ci)||o.has(e.field)||(s.set(e.ci,e),a.add(e.ci),o.add(e.field));return e.map((e,t)=>{let n=s.get(t);return n?{columnIndex:t,fieldName:n.field,score:n.score,confidence:sf(n.score),reason:n.reason,inferredType:r[t]}:{columnIndex:t,fieldName:null,score:0,confidence:null,reason:`none`,inferredType:r[t]}})}function ff(e){if(!e||typeof e!=`object`)return null;let t=e;return typeof t.name!=`string`||typeof t.targetObject!=`string`||!Array.isArray(t.fieldMapping)?null:t}function pf(e,t,n){return t.map((t,r)=>{let i=n[r],a={};return e.forEach((e,n)=>{if(!e)return;let r=i&&i[n]!==void 0?i[n]:t[n]??``;a[e]=r}),a})}function mf(e){return(e.fieldMapping??[]).map(e=>({source:Array.isArray(e.source)?e.source.join(` + `):e.source,target:Array.isArray(e.target)?e.target.join(`, `):e.target,transform:e.transform&&e.transform!==`none`?e.transform:``}))}function hf(e,t){let n=new Map;t.forEach((e,t)=>{e&&n.set(e.trim().toLowerCase(),t)});let r={};for(let t of e.fieldMapping??[]){if(Array.isArray(t.source)||Array.isArray(t.target)||t.transform===`constant`)continue;let e=n.get(String(t.source).trim().toLowerCase());e!==void 0&&(r[e]=String(t.target))}return r}var gf={"grid.import.title":`Import {{object}}`,"grid.import.stepUpload":`Upload`,"grid.import.stepMapping":`Mapping`,"grid.import.stepPreview":`Preview`,"grid.import.uploadDescription":`Upload a CSV or Excel file, or paste from a spreadsheet to get started.`,"grid.import.mappingDescription":`Map columns to object fields.`,"grid.import.previewDescription":`Review data before importing.`,"grid.import.dragDrop":`Drag & drop a CSV or Excel file here, or click to browse`,"grid.import.browseFiles":`Browse Files`,"grid.import.downloadTemplate":`Download template`,"grid.import.downloadTemplateHint":`Get a CSV with the right columns (required fields marked *).`,"grid.import.templateFileName":`{{object}}-import-template`,"grid.import.parsing":`Parsing…`,"grid.import.pasteHint":`or paste (Ctrl/⌘+V) rows copied from Excel or Google Sheets`,"grid.import.legacyXls":`Legacy .xls files aren't supported — please re-save as .xlsx.`,"grid.import.unsupportedFile":`Unsupported file type. Use CSV, TSV, or Excel (.xlsx).`,"grid.import.parseFailed":`Could not read this file. Please check the format and try again.`,"grid.import.fileNeedsHeader":`File must contain a header row and at least one data row.`,"grid.import.mappingTemplate":`Mapping template:`,"grid.import.chooseTemplate":`Choose template…`,"grid.import.noSavedTemplates":`No saved templates`,"grid.import.noneOption":`— None —`,"grid.import.saveCurrent":`Save current`,"grid.import.templateName":`Template name`,"grid.import.save":`Save`,"grid.import.deleteTemplate":`Delete template`,"grid.import.savedMapping":`Saved mapping:`,"grid.import.chooseSavedMapping":`Choose a saved mapping…`,"grid.import.manualMapping":`— Map columns manually —`,"grid.import.transform":`Transform`,"grid.import.savedMappingHint":`Mapping “{{name}}” applies rename + transforms + type coercion on the server. Column mapping is read-only.`,"grid.import.savedMappingPreviewNote":`The preview shows your source columns; on import, mapping “{{name}}” applies rename, transforms and type coercion on the server.`,"grid.import.csvColumn":`Column`,"grid.import.mapsTo":`Maps To`,"grid.import.typeMismatch":`Looks like {{type}}`,"grid.import.autoMatched":`Auto-matched`,"grid.import.autoMatchedSummary":`Auto-matched {{count}} column(s) — review and adjust below.`,"grid.import.confidence.high":`High confidence`,"grid.import.confidence.medium":`Medium confidence`,"grid.import.confidence.low":`Low confidence`,"grid.import.type.number":`Number`,"grid.import.type.boolean":`Boolean`,"grid.import.type.date":`Date`,"grid.import.type.datetime":`Date & time`,"grid.import.type.text":`Text`,"grid.import.status":`Status`,"grid.import.skipColumn":`Skip column`,"grid.import.skip":`— Skip —`,"grid.import.mapped":`Mapped`,"grid.import.skipped":`Skipped`,"grid.import.rowsWithErrors":`{{count}} row(s) with errors`,"grid.import.rowsCorrected":`{{count}} row(s) corrected`,"grid.import.clickToFix":`— click a highlighted cell to fix it inline.`,"grid.import.showingRows":`Showing {{shown}} of {{total}} rows`,"grid.import.importing":`Importing… {{progress}}%`,"grid.import.asyncQueued":`Queued — preparing to import…`,"grid.import.asyncProcessing":`Importing {{processed}} of {{total}} rows… {{progress}}%`,"grid.import.asyncLargeHint":`This file is large, so it will be imported in the background.`,"grid.import.largeSampleNotice":`Previewing the first {{shown}} of {{total}} rows.`,"grid.import.cancelImport":`Cancel import`,"grid.import.importCancelled":`Import cancelled`,"grid.import.resultsTruncated":`Showing the first {{count}} row results (of {{total}}).`,"grid.import.importComplete":`Import Complete`,"grid.import.imported":`{{count}} imported`,"grid.import.createdCount":`{{count}} created`,"grid.import.updatedCount":`{{count}} updated`,"grid.import.skippedCount":`{{count}} skipped`,"grid.import.moreErrors":`…and {{count}} more errors`,"grid.import.downloadFailed":`Download failed rows`,"grid.import.options":`Import options`,"grid.import.writeMode":`When a row matches an existing record`,"grid.import.writeModeOpt.insert":`Always create new`,"grid.import.writeModeOpt.update":`Update existing (skip if no match)`,"grid.import.writeModeOpt.upsert":`Update if matched, else create`,"grid.import.matchFields":`Match on`,"grid.import.matchFieldsPlaceholder":`Choose match field(s)…`,"grid.import.matchFieldsHint":`Rows are matched to existing records by these field(s).`,"grid.import.needMatchFields":`Select at least one field to match on.`,"grid.import.matchOnlyField":`(match only)`,"grid.import.optCreateOptions":`Keep unknown option values`,"grid.import.optRunAutomations":`Run automations & triggers`,"grid.import.optTreatHistorical":`Import as historical data`,"grid.import.optTreatHistoricalHint":`(import completed records as-is — skip state-machine checks and keep their original timestamps & author instead of stamping now)`,"grid.import.optSkipBlankKey":`Skip rows with a blank match value`,"grid.import.optBackground":`Import in the background`,"grid.import.optBackgroundHint":`(runs as an undoable job)`,"grid.import.validate":`Validate data`,"grid.import.validating":`Validating…`,"grid.import.validateHint":`Check every row against the server before importing.`,"grid.import.validatePassed":`All {{ok}} rows are valid.`,"grid.import.validateFailed":`{{ok}} valid, {{errors}} with errors.`,"grid.import.errorRowPrefix":`Row {{row}}: `,"grid.import.referenceNotFound":`No matching record for "{{value}}"`,"grid.import.referenceAmbiguous":`"{{value}}" matches more than one record — use a unique value or the record id`,"grid.import.invalidBoolean":`"{{value}}" is not a valid true/false value`,"grid.import.invalidNumber":`"{{value}}" is not a valid number`,"grid.import.invalidDate":`"{{value}}" is not a valid date`,"grid.import.invalidOption":`"{{value}}" is not one of the allowed options`,"grid.import.requiredValue":`This field is required`,"grid.import.matchAmbiguous":`Matches more than one existing record — use a unique value or the record id`,"grid.import.history":`History`,"grid.import.historyBack":`Back to import`,"grid.import.historyDescription":`Recent imports for this object.`,"grid.import.historyHint":`Background import jobs, newest first.`,"grid.import.historyRefresh":`Refresh`,"grid.import.historyLoading":`Loading…`,"grid.import.historyEmpty":`No imports yet.`,"grid.import.historyUnsupported":`Import history isn’t available for this data source.`,"grid.import.historyColStatus":`Status`,"grid.import.historyColRows":`Rows`,"grid.import.historyColResult":`Result`,"grid.import.historyColTime":`When`,"grid.import.errorCount":`{{count}} errors`,"grid.import.undoImport":`Undo import`,"grid.import.undoing":`Undoing…`,"grid.import.undoConfirm":`Undo this import? Records it created will be deleted and records it updated will be restored to their previous values.`,"grid.import.reverted":`Undone`,"grid.import.jobStatus.pending":`Pending`,"grid.import.jobStatus.running":`Running`,"grid.import.jobStatus.succeeded":`Succeeded`,"grid.import.jobStatus.failed":`Failed`,"grid.import.jobStatus.cancelled":`Cancelled`,"grid.import.cancel":`Cancel`,"grid.import.back":`Back`,"grid.import.next":`Next`,"grid.import.close":`Close`,"grid.import.importNRows":`Import {{count}} Rows`,"grid.import.importingProgress":`Importing…`,"grid.import.required":`Required`,"grid.import.invalidType":`Invalid {{type}}`,"grid.import.legacyReferenceBlocked":`Import blocked: {{fields}} are relation fields that need the server import route to resolve names into record IDs, and this connection doesn’t support it. Importing them as plain text would corrupt the data. Upgrade the backend/client, or unmap these columns and import them separately.`,"grid.import.missingRequiredHint":`Can’t continue — required field(s) not mapped: {{fields}}. Add a matching column to your file, or go back and upload one that includes it.`,"grid.import.legacyFallbackNotice":`Imported via a compatibility fallback: this connection doesn’t support the server import route, so values were saved as text without server-side type coercion. Upgrade the backend/client for full import support (type coercion and relation lookups).`,"grid.import.notAllowed":`This object is not open for import.`,"grid.import.requiredMark":`*`};function _f(e,t){if(!t)return e;let n=e;for(let[e,r]of Object.entries(t))n=n.split(`{{${e}}}`).join(String(r));return n}function vf(){let e=(e,t)=>_f(gf[e]??e,t),t=Ar();return t.t(`grid.import.title`)===`grid.import.title`?{t:e}:{t:(n,r)=>{let i=t.t(n,r);return i===n?e(n,r):i}}}var yf=10,bf=5e3,xf=800,Sf={high:`text-emerald-600`,medium:`text-sky-600`,low:`text-muted-foreground`};function Cf(e,t){let n=new Set(Object.values(e));return t.filter(e=>n.has(e.name)&&zd.has(e.type))}function wf(e){return e?.match(/"([^"]*)"/)?.[1]}function Tf(e,t,n,r){let i=e.field?t.get(e.field)??e.field:void 0,a=(n??``).trim()||wf(e.error)||``;switch(e.code){case`reference_not_found`:return{fieldLabel:i,message:r(`grid.import.referenceNotFound`,{value:a})};case`reference_ambiguous`:return{fieldLabel:i,message:r(`grid.import.referenceAmbiguous`,{value:a})};case`invalid_boolean`:return{fieldLabel:i,message:r(`grid.import.invalidBoolean`,{value:a})};case`invalid_number`:return{fieldLabel:i,message:r(`grid.import.invalidNumber`,{value:a})};case`invalid_date`:return{fieldLabel:i,message:r(`grid.import.invalidDate`,{value:a})};case`invalid_option`:return{fieldLabel:i,message:r(`grid.import.invalidOption`,{value:a})};case`required`:return{fieldLabel:i,message:r(`grid.import.requiredValue`)};case`AMBIGUOUS_MATCH`:return{fieldLabel:i,message:r(`grid.import.matchAmbiguous`)}}let o=(e.error??e.code??``).trim();return e.field&&o.toLowerCase().startsWith(`${e.field.toLowerCase()}:`)&&(o=o.slice(e.field.length+1).trimStart()),{fieldLabel:i,message:o}}function Ef(e){if(e.length===0||e.length>254||/\s/.test(e)||/[^\x20-\x7e]/.test(e))return!1;let t=e.indexOf(`@`);if(t<=0||t!==e.lastIndexOf(`@`)||t===e.length-1)return!1;let n=e.slice(t+1),r=n.lastIndexOf(`.`);return r>0&&r<n.length-1}function Df(e,t){if(!e)return!0;switch(t){case`number`:case`currency`:case`percent`:return!isNaN(Number(e));case`boolean`:return Rd.has(e.trim().toLowerCase());case`date`:case`datetime`:return!isNaN(Date.parse(e));case`email`:return Ef(e.trim());default:return!0}}function Of(e,t,n){let r={};for(let i of df(e,t,n))i.fieldName&&(r[i.columnIndex]=i.fieldName);return r}function kf(){if(typeof window>`u`)return null;try{return window.localStorage}catch{return null}}function Af(e,t){if(!e)return[];try{let n=e.getItem(t);if(!n)return[];let r=JSON.parse(n);return Array.isArray(r)?r.filter(e=>e&&e.id&&e.name&&e.mapping):[]}catch{return[]}}function jf(e,t,n){if(e)try{e.setItem(t,JSON.stringify(n))}catch{}}function Mf(e,t){let n={};return Object.entries(t).forEach(([t,r])=>{let i=e[Number(t)];i&&(n[i.trim().toLowerCase()]=r)}),n}function Nf(e,t,n){let r=new Set(n.map(e=>e.name)),i={};return t.forEach((t,n)=>{let a=e.mapping[t.trim().toLowerCase()];a&&r.has(a)&&(i[n]=a)}),i}function Pf(e,t,n){let r=[],i={};for(let a of t){let t=e[a.csvIdx]??``;if(a.field.required&&!t){r.push({row:n,field:a.field.name,message:`Required field is empty`});continue}if(t&&!Df(t,a.field.type)){r.push({row:n,field:a.field.name,message:`Invalid ${a.field.type} value: "${t}"`});continue}i[a.field.name]=t}return{record:i,errors:r}}function Ff(e,t){return t.mappingName?{format:`json`,rows:e,mappingName:t.mappingName,runAutomations:t.runAutomations,...t.treatAsHistorical?{treatAsHistorical:!0}:{},...t.dryRun?{dryRun:!0}:{}}:{format:`json`,rows:e,writeMode:t.writeMode,...t.writeMode===`insert`?{}:{matchFields:t.matchFields},createMissingOptions:t.createMissingOptions,runAutomations:t.runAutomations,...t.treatAsHistorical?{treatAsHistorical:!0}:{},skipBlankMatchKey:t.skipBlankMatchKey,...t.dryRun?{dryRun:!0}:{}}}function If(e){if(e?.code===`UNSUPPORTED_OPERATION`)return!0;let t=e instanceof Error?e.message:``;return/does not support data\.import|importRecords is not a function|\.import is not a function/i.test(t)}function Lf(e){if(e?.code===`UNSUPPORTED_OPERATION`)return!0;let t=e instanceof Error?e.message:``;return/does not support async import|createImportJob is not a function|import\/jobs|404/i.test(t)}function Rf(e){if(e?.code===`OBJECT_API_METHOD_NOT_ALLOWED`)return!0;let t=e;if(t?.status===405||t?.statusCode===405||t?.httpStatus===405)return!0;let n=e instanceof Error?e.message:typeof e==`string`?e:``;return/\b405\b|method not allowed/i.test(n)}function zf(e){return{totalRows:e.total,importedRows:e.created+e.updated,skippedRows:e.skipped+e.errors,createdRows:e.created,updatedRows:e.updated,errors:(e.results??[]).filter(e=>!e.ok).map(e=>({row:e.row,field:e.field??``,message:e.error??e.code??`Import failed`,code:e.code})),resultsTruncated:e.resultsTruncated}}function Bf(e){return e===`pending`||e===`running`}function Vf(e,t){return t&&!!e.undoable&&!e.revertedAt&&!Bf(e.status)}function Hf(e,t,n,r){let i=Object.keys(n).map(Number).sort((e,t)=>e-t),a=e=>/[",\n]/.test(e)?`"${e.replace(/"/g,`""`)}"`:e,o=[[...i.map(t=>e[t]??`col${t}`),`_error`].map(a).join(`,`)];for(let[e,n]of r){let r=t[e-1];r&&o.push([...i.map(e=>a(r[e]??``)),a(n)].join(`,`))}return o.join(`
10
- `)}function Uf(e){let t=e?.[0];if(t!=null){if(typeof t==`string`)return t;if(t.label)return t.label;if(t.value!==void 0&&t.value!==null)return String(t.value)}}function Wf(e){switch(e.type){case`number`:case`currency`:case`percent`:return`0`;case`date`:return`2024-01-31`;case`datetime`:return`2024-01-31 09:00`;case`time`:return`09:00`;case`boolean`:return`true`;case`email`:return`name@example.com`;case`url`:return`https://example.com`;case`select`:case`multiselect`:case`lookup`:case`reference`:return Uf(e.options)??``;default:return``}}function Gf(e){let t=e=>/[",\n]/.test(e)?`"${e.replace(/"/g,`""`)}"`:e,n=e.map(e=>`${e.label}${e.required?` *`:``}`),r=e.map(e=>Wf(e));return[n.map(t).join(`,`),r.map(t).join(`,`)].join(`
11
- `)}function Kf(e,t,n=`text/csv;charset=utf-8`){if(typeof document>`u`||typeof URL?.createObjectURL!=`function`)return;let r=new Blob([`\uFEFF${t}`],{type:n}),i=URL.createObjectURL(r),a=document.createElement(`a`);a.href=i,a.download=e,a.click(),URL.revokeObjectURL(i)}function qf(e,t){let n=e instanceof Error?e.message:``;return n===Bd.LegacyXls?t(`grid.import.legacyXls`):n===Bd.Unsupported?t(`grid.import.unsupportedFile`):t(`grid.import.parseFailed`)}var Jf=({onFileLoaded:e,fields:t,objectName:n,objectLabel:r})=>{let{t:i}=vf(),[a,o]=(0,Q.useState)(!1),[s,c]=(0,Q.useState)(null),[l,u]=(0,Q.useState)(!1),d=(0,Q.useCallback)(t=>t.length<2?(c(i(`grid.import.fileNeedsHeader`)),!1):(e(t[0],t.slice(1)),!0),[e,i]),f=(0,Q.useCallback)(async e=>{c(null),u(!0);try{d(await Gd(e))}catch(e){c(qf(e,i))}finally{u(!1)}},[d,i]),p=(0,Q.useCallback)(e=>{let t=e.target;if(t&&/^(input|textarea)$/i.test(t.tagName))return;let n=e.clipboardData;if(!n)return;let r=Kd(n.getData(`text/html`)||null,n.getData(`text/plain`)||null);r&&(e.preventDefault(),c(null),d(r))},[d]);return(0,Q.useEffect)(()=>(window.addEventListener(`paste`,p),()=>window.removeEventListener(`paste`,p)),[p]),(0,$.jsxs)(`div`,{className:`flex flex-col items-center gap-4 py-6`,children:[(0,$.jsxs)(`div`,{className:q(`flex w-full flex-col items-center justify-center gap-3 rounded-lg border-2 border-dashed p-10 transition-colors`,a?`border-primary bg-primary/5`:`border-muted-foreground/25`,l&&`pointer-events-none opacity-60`),onDragOver:e=>{e.preventDefault(),o(!0)},onDragLeave:()=>o(!1),onDrop:e=>{e.preventDefault(),o(!1);let t=e.dataTransfer.files[0];t&&f(t)},children:[(0,$.jsx)(Ki,{className:`h-10 w-10 text-muted-foreground`}),(0,$.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:i(l?`grid.import.parsing`:`grid.import.dragDrop`)}),(0,$.jsxs)(`label`,{children:[(0,$.jsx)(`input`,{type:`file`,accept:`.csv,.tsv,.txt,.xlsx,.xlsm`,className:`hidden`,disabled:l,onChange:e=>{let t=e.target.files?.[0];t&&f(t)}}),(0,$.jsx)(Z,{variant:`outline`,size:`sm`,asChild:!0,children:(0,$.jsx)(`span`,{children:i(`grid.import.browseFiles`)})})]}),(0,$.jsxs)(`p`,{className:`flex items-center gap-1 text-xs text-muted-foreground/80`,children:[(0,$.jsx)($r,{className:`h-3.5 w-3.5`}),` `,i(`grid.import.pasteHint`)]})]}),t.length>0&&(0,$.jsxs)(`div`,{className:`flex flex-col items-center gap-1`,children:[(0,$.jsxs)(Z,{type:`button`,variant:`ghost`,size:`sm`,onClick:()=>{Kf(`${er(i(`grid.import.templateFileName`,{object:r||n||`import`}))||`import-template`}.csv`,Gf(t))},"data-testid":`import-download-template`,children:[(0,$.jsx)(ri,{className:`mr-1 h-4 w-4`}),` `,i(`grid.import.downloadTemplate`)]}),(0,$.jsx)(`p`,{className:`text-xs text-muted-foreground/70`,children:i(`grid.import.downloadTemplateHint`)})]}),s&&(0,$.jsxs)(`p`,{className:`flex items-center gap-1 text-sm text-destructive`,children:[(0,$.jsx)(Jr,{className:`h-4 w-4`}),` `,s]})]})},Yf=({templates:e,selectedId:t,onSelect:n,onSaveAs:r,onDelete:i,disabled:a})=>{let{t:o}=vf(),[s,c]=(0,Q.useState)(``),[l,u]=(0,Q.useState)(!1);return(0,$.jsxs)(`div`,{className:`mb-3 flex flex-wrap items-center gap-2 rounded-md border bg-muted/30 p-2`,"data-testid":`import-template-bar`,children:[(0,$.jsx)(Mi,{className:`h-4 w-4 text-muted-foreground`}),(0,$.jsx)(`span`,{className:`text-xs font-medium text-muted-foreground`,children:o(`grid.import.mappingTemplate`)}),(0,$.jsxs)(M,{value:t??`__none__`,onValueChange:e=>e!==`__none__`&&n(e),children:[(0,$.jsx)(ve,{className:`h-7 w-48 text-xs`,"data-testid":`import-template-select`,children:(0,$.jsx)(Dt,{placeholder:e.length?o(`grid.import.chooseTemplate`):o(`grid.import.noSavedTemplates`)})}),(0,$.jsxs)(R,{children:[(0,$.jsx)(ae,{value:`__none__`,disabled:e.length===0,children:e.length?o(`grid.import.noneOption`):o(`grid.import.noSavedTemplates`)}),e.map(e=>(0,$.jsx)(ae,{value:e.id,children:e.name},e.id))]})]}),l?(0,$.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,$.jsx)(at,{value:s,onChange:e=>c(e.target.value),placeholder:o(`grid.import.templateName`),className:`h-7 w-40 text-xs`,"data-testid":`import-template-name-input`,autoFocus:!0}),(0,$.jsx)(Z,{type:`button`,size:`sm`,onClick:()=>{s.trim()&&(r(s.trim()),c(``),u(!1))},disabled:!s.trim()||a,"data-testid":`import-template-confirm-save`,children:o(`grid.import.save`)}),(0,$.jsx)(Z,{type:`button`,variant:`ghost`,size:`sm`,onClick:()=>{u(!1),c(``)},children:o(`grid.import.cancel`)})]}):(0,$.jsx)(Z,{type:`button`,variant:`outline`,size:`sm`,onClick:()=>u(!0),disabled:a,"data-testid":`import-template-save-btn`,children:o(`grid.import.saveCurrent`)}),t&&(0,$.jsx)(Z,{type:`button`,variant:`ghost`,size:`sm`,onClick:i,"aria-label":o(`grid.import.deleteTemplate`),"data-testid":`import-template-delete-btn`,children:(0,$.jsx)(Hi,{className:`h-3.5 w-3.5`})})]})},Xf=({mappings:e,activeName:t,onSelect:n,onClear:r})=>{let{t:i}=vf();return e.length===0?null:(0,$.jsxs)(`div`,{className:`mb-3 flex flex-wrap items-center gap-2 rounded-md border bg-muted/30 p-2`,"data-testid":`import-saved-mapping-bar`,children:[(0,$.jsx)(ui,{className:`h-4 w-4 text-muted-foreground`}),(0,$.jsx)(`span`,{className:`text-xs font-medium text-muted-foreground`,children:i(`grid.import.savedMapping`)}),(0,$.jsxs)(M,{value:t??`__none__`,onValueChange:e=>e===`__none__`?r():n(e),children:[(0,$.jsx)(ve,{className:`h-7 w-56 text-xs`,"data-testid":`import-saved-mapping-select`,children:(0,$.jsx)(Dt,{placeholder:i(`grid.import.chooseSavedMapping`)})}),(0,$.jsxs)(R,{children:[(0,$.jsx)(ae,{value:`__none__`,children:i(`grid.import.manualMapping`)}),e.map(e=>(0,$.jsx)(ae,{value:e.name,children:e.label||e.name},e.name))]})]})]})},Zf=({mapping:e})=>{let{t}=vf(),n=mf(e);return(0,$.jsxs)(`div`,{"data-testid":`import-saved-mapping-summary`,children:[(0,$.jsxs)(`p`,{className:`mb-2 flex items-start gap-2 rounded-md border border-border bg-muted/40 p-3 text-xs text-muted-foreground`,children:[(0,$.jsx)(Jr,{className:`mt-0.5 h-4 w-4 shrink-0`}),(0,$.jsx)(`span`,{children:t(`grid.import.savedMappingHint`,{name:e.label||e.name})})]}),(0,$.jsx)(`div`,{className:`max-h-[420px] overflow-auto`,children:(0,$.jsxs)(Re,{children:[(0,$.jsx)(J,{children:(0,$.jsxs)(je,{children:[(0,$.jsx)(ct,{children:t(`grid.import.csvColumn`)}),(0,$.jsx)(ct,{children:t(`grid.import.mapsTo`)}),(0,$.jsx)(ct,{className:`w-32 text-center`,children:t(`grid.import.transform`)})]})}),(0,$.jsx)(ft,{children:n.map((e,t)=>(0,$.jsxs)(je,{children:[(0,$.jsx)(X,{className:`font-medium`,children:e.source}),(0,$.jsx)(X,{children:e.target}),(0,$.jsx)(X,{className:`text-center`,children:e.transform?(0,$.jsx)($e,{variant:`outline`,className:`text-[10px] font-normal`,children:e.transform}):(0,$.jsx)(Je,{})})]},t))})]})})]})},Qf=({headers:e,fields:t,mapping:n,onMappingChange:r,inferredTypes:i,suggestions:a,templates:o,selectedTemplateId:s,onSelectTemplate:c,onSaveTemplate:l,onDeleteTemplate:u,savedMappings:d,activeMapping:f,onSelectSavedMapping:p,onClearSavedMapping:m,missingRequired:h})=>{let{t:g}=vf(),_=(0,Q.useMemo)(()=>new Set(Object.values(n)),[n]),v=(0,Q.useMemo)(()=>{let e=new Map;return a.forEach(t=>e.set(t.columnIndex,t)),e},[a]),y=(0,Q.useMemo)(()=>{let e=0;return v.forEach((t,r)=>{t.fieldName&&n[r]===t.fieldName&&e++}),e},[v,n]),b=(0,Q.useCallback)((e,t)=>{let i={...n};t===`__skip__`?delete i[e]:i[e]=t,r(i)},[n,r]);return(0,$.jsxs)(`div`,{children:[(0,$.jsx)(Xf,{mappings:d,activeName:f?.name??null,onSelect:p,onClear:m}),f?(0,$.jsx)(Zf,{mapping:f}):(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(Yf,{templates:o,selectedId:s,onSelect:c,onSaveAs:l,onDelete:u,disabled:Object.keys(n).length===0}),y>0&&(0,$.jsxs)(`p`,{className:`mb-2 flex items-center gap-1.5 text-xs text-muted-foreground`,"data-testid":`import-automatch-summary`,children:[(0,$.jsx)(Yr,{className:`h-3.5 w-3.5 text-emerald-600`}),g(`grid.import.autoMatchedSummary`,{count:String(y)})]}),(0,$.jsx)(`div`,{className:`max-h-[420px] overflow-auto`,children:(0,$.jsxs)(Re,{children:[(0,$.jsx)(J,{children:(0,$.jsxs)(je,{children:[(0,$.jsx)(ct,{children:g(`grid.import.csvColumn`)}),(0,$.jsx)(ct,{children:g(`grid.import.mapsTo`)}),(0,$.jsx)(ct,{className:`w-24 text-center`,children:g(`grid.import.status`)})]})}),(0,$.jsx)(ft,{children:e.map((e,r)=>{let a=i[r]??`text`,o=n[r]?t.find(e=>e.name===n[r]):void 0,s=!!o&&!tf(a,o.type),c=v.get(r),l=c?.fieldName&&n[r]===c.fieldName?c.confidence:null;return(0,$.jsxs)(je,{children:[(0,$.jsx)(X,{className:`font-medium`,children:(0,$.jsxs)(`div`,{className:`flex flex-col gap-0.5`,children:[(0,$.jsx)(`span`,{children:e}),a!==`text`&&(0,$.jsx)($e,{variant:`outline`,className:`w-fit text-[10px] font-normal text-muted-foreground`,"data-testid":`import-inferred-${r}`,children:g(`grid.import.type.${a}`)})]})}),(0,$.jsxs)(X,{children:[(0,$.jsxs)(M,{value:n[r]??`__skip__`,onValueChange:e=>b(r,e),children:[(0,$.jsx)(ve,{className:`h-8 w-56`,children:(0,$.jsx)(Dt,{placeholder:g(`grid.import.skipColumn`)})}),(0,$.jsxs)(R,{children:[(0,$.jsx)(ae,{value:`__skip__`,children:g(`grid.import.skip`)}),t.map(e=>(0,$.jsxs)(ae,{value:e.name,disabled:_.has(e.name)&&n[r]!==e.name,children:[e.label,e.required?` *`:``,e.matchOnly?` ${g(`grid.import.matchOnlyField`)}`:``]},e.name))]})]}),l&&(0,$.jsxs)(`p`,{className:q(`mt-1 flex items-center gap-1 text-[11px]`,Sf[l]),"data-testid":`import-automatch-${r}`,children:[(0,$.jsx)(Yr,{className:`h-3 w-3`}),` `,g(`grid.import.autoMatched`),` · `,g(`grid.import.confidence.${l}`)]}),s&&(0,$.jsxs)(`p`,{className:`mt-1 flex items-center gap-1 text-[11px] text-amber-600`,"data-testid":`import-type-warn-${r}`,children:[(0,$.jsx)(Jr,{className:`h-3 w-3`}),` `,g(`grid.import.typeMismatch`,{type:g(`grid.import.type.${a}`)})]})]}),(0,$.jsx)(X,{className:`text-center`,children:n[r]?(0,$.jsx)($e,{variant:`default`,className:`text-xs`,children:g(`grid.import.mapped`)}):(0,$.jsx)($e,{variant:`secondary`,className:`text-xs`,children:g(`grid.import.skipped`)})})]},r)})})]})}),h.length>0&&(0,$.jsxs)(`div`,{className:`mt-3 flex items-start gap-2 rounded-md border border-amber-400/40 bg-amber-50 p-3 text-xs text-amber-900 dark:bg-amber-950/30 dark:text-amber-200`,"data-testid":`import-missing-required`,children:[(0,$.jsx)(Jr,{className:`mt-0.5 h-4 w-4 shrink-0`}),(0,$.jsx)(`span`,{children:g(`grid.import.missingRequiredHint`,{fields:h.map(e=>e.label&&e.label!==e.name?`${e.label} (${e.name})`:e.name).join(`, `)})})]})]})]})},$f=({headers:e,rows:t,mapping:n,fields:r,corrections:i,onCorrect:a})=>{let{t:o}=vf(),s=(0,Q.useMemo)(()=>Object.entries(n).map(([t,n])=>({csvIdx:Number(t),header:e[Number(t)],field:r.find(e=>e.name===n)})),[n,e,r]),c=t.slice(0,yf),l=(0,Q.useCallback)((e,t)=>{let n=i[e]?.[t];return n===void 0?c[e]?.[t]??``:n},[i,c]),u=(0,Q.useMemo)(()=>c.map((e,t)=>{let n={};for(let e of s){let r=l(t,e.csvIdx);e.field.required&&!r?n[e.csvIdx]=o(`grid.import.required`):r&&!Df(r,e.field.type)&&(n[e.csvIdx]=o(`grid.import.invalidType`,{type:e.field.type}))}return n}),[c,s,l,o]),d=u.filter(e=>Object.keys(e).length>0).length,f=Object.keys(i).length;return(0,$.jsxs)(`div`,{className:`max-h-[440px] overflow-auto`,children:[(d>0||f>0)&&(0,$.jsxs)(`p`,{className:`mb-2 flex items-center gap-2 text-xs`,"data-testid":`import-preview-status`,children:[d>0&&(0,$.jsxs)(`span`,{className:`flex items-center gap-1 text-destructive`,children:[(0,$.jsx)(Jr,{className:`h-3.5 w-3.5`}),` `,o(`grid.import.rowsWithErrors`,{count:d})]}),f>0&&(0,$.jsxs)(`span`,{className:`flex items-center gap-1 text-emerald-600`,children:[(0,$.jsx)(Yr,{className:`h-3.5 w-3.5`}),` `,o(`grid.import.rowsCorrected`,{count:f})]}),(0,$.jsx)(`span`,{className:`text-muted-foreground`,children:o(`grid.import.clickToFix`)})]}),(0,$.jsxs)(Re,{children:[(0,$.jsx)(J,{children:(0,$.jsxs)(je,{children:[(0,$.jsx)(ct,{className:`w-12`,children:`#`}),s.map(e=>(0,$.jsx)(ct,{className:`min-w-[140px] whitespace-nowrap`,children:e.field.label},e.csvIdx))]})}),(0,$.jsx)(ft,{children:c.map((e,t)=>{let n=u[t],r=Object.keys(n).length>0,o=i[t]!==void 0;return(0,$.jsxs)(je,{className:q(r&&`bg-destructive/5`,!r&&o&&`bg-emerald-50 dark:bg-emerald-950/20`),"data-testid":`import-preview-row-${t}`,children:[(0,$.jsx)(X,{className:`text-xs text-muted-foreground`,children:t+1}),s.map(e=>{let r=l(t,e.csvIdx),o=n[e.csvIdx],s=i[t]?.[e.csvIdx]!==void 0;return(0,$.jsx)(X,{className:q(o&&`text-destructive`,s&&!o&&`text-emerald-600`),title:o,children:(0,$.jsx)(at,{value:r,onChange:n=>a(t,e.csvIdx,n.target.value),className:q(`h-7 px-1 text-xs`,o&&`border-destructive`,s&&!o&&`border-emerald-500`),"data-testid":`import-preview-cell-${t}-${e.csvIdx}`,"aria-invalid":o?`true`:`false`,"aria-label":`${e.field.label} for row ${t+1}`})},e.csvIdx)})]},t)})})]}),(0,$.jsx)(`p`,{className:`mt-2 text-xs text-muted-foreground`,children:o(`grid.import.showingRows`,{shown:c.length,total:t.length})})]})},ep=({fields:e,mapping:t,writeMode:n,onWriteMode:r,matchFields:i,onToggleMatchField:a,createMissingOptions:o,onCreateMissingOptions:s,runAutomations:c,onRunAutomations:l,treatAsHistorical:u,onTreatAsHistorical:d,skipBlankMatchKey:f,onSkipBlankMatchKey:p,showBackground:m,backgroundImport:h,onBackgroundImport:g})=>{let{t:_}=vf(),v=(0,Q.useMemo)(()=>new Set(Object.values(t)),[t]),y=(0,Q.useMemo)(()=>e.filter(e=>v.has(e.name)),[e,v]),b=n!==`insert`;return(0,$.jsxs)(`div`,{className:`mb-3 rounded-md border bg-muted/30 p-3`,"data-testid":`import-options`,children:[(0,$.jsx)(`p`,{className:`mb-2 text-xs font-medium text-muted-foreground`,children:_(`grid.import.options`)}),(0,$.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[(0,$.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,$.jsx)(Oe,{className:`text-xs`,children:_(`grid.import.writeMode`)}),(0,$.jsxs)(M,{value:n,onValueChange:e=>r(e),children:[(0,$.jsx)(ve,{className:`h-8 w-72 text-xs`,"data-testid":`import-writemode-select`,children:(0,$.jsx)(Dt,{})}),(0,$.jsxs)(R,{children:[(0,$.jsx)(ae,{value:`insert`,children:_(`grid.import.writeModeOpt.insert`)}),(0,$.jsx)(ae,{value:`update`,children:_(`grid.import.writeModeOpt.update`)}),(0,$.jsx)(ae,{value:`upsert`,children:_(`grid.import.writeModeOpt.upsert`)})]})]})]}),b&&(0,$.jsxs)(`div`,{className:`flex flex-col gap-1.5`,"data-testid":`import-matchfields`,children:[(0,$.jsx)(Oe,{className:`text-xs`,children:_(`grid.import.matchFields`)}),(0,$.jsxs)(`div`,{className:`flex flex-wrap gap-x-4 gap-y-1.5`,children:[y.length===0&&(0,$.jsx)(`span`,{className:`text-[11px] text-muted-foreground`,children:_(`grid.import.matchFieldsPlaceholder`)}),y.map(e=>(0,$.jsxs)(`label`,{className:`flex items-center gap-1.5 text-xs`,"data-testid":`import-matchfield-${e.name}`,children:[(0,$.jsx)(ye,{checked:i.includes(e.name),onCheckedChange:()=>a(e.name)}),e.label]},e.name))]}),(0,$.jsx)(`p`,{className:q(`text-[11px]`,i.length===0?`text-destructive`:`text-muted-foreground`),children:i.length===0?_(`grid.import.needMatchFields`):_(`grid.import.matchFieldsHint`)})]}),(0,$.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,$.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,"data-testid":`import-opt-create-options`,children:[(0,$.jsx)(ye,{checked:o,onCheckedChange:e=>s(e===!0)}),_(`grid.import.optCreateOptions`)]}),b&&(0,$.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,"data-testid":`import-opt-skip-blank`,children:[(0,$.jsx)(ye,{checked:f,onCheckedChange:e=>p(e===!0)}),_(`grid.import.optSkipBlankKey`)]}),(0,$.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,"data-testid":`import-opt-run-automations`,children:[(0,$.jsx)(ye,{checked:c,onCheckedChange:e=>l(e===!0)}),_(`grid.import.optRunAutomations`)]}),(0,$.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,"data-testid":`import-opt-treat-historical`,children:[(0,$.jsx)(ye,{checked:u,onCheckedChange:e=>d(e===!0)}),(0,$.jsxs)(`span`,{children:[_(`grid.import.optTreatHistorical`),(0,$.jsx)(`span`,{className:`ml-1 text-[11px] text-muted-foreground`,children:_(`grid.import.optTreatHistoricalHint`)})]})]}),m&&(0,$.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,"data-testid":`import-opt-background`,children:[(0,$.jsx)(ye,{checked:h,onCheckedChange:e=>g(e===!0)}),(0,$.jsxs)(`span`,{children:[_(`grid.import.optBackground`),(0,$.jsx)(`span`,{className:`ml-1 text-[11px] text-muted-foreground`,children:_(`grid.import.optBackgroundHint`)})]})]})]})]})]})},tp={pending:`outline`,running:`secondary`,succeeded:`default`,failed:`destructive`,cancelled:`outline`};function np(e,t){if(!e)return`—`;let n=new Date(e);return Number.isNaN(n.getTime())?e:n.toLocaleString(t)}var rp=({objectName:e,dataSource:t,t:n})=>{let r=kr(),[i,a]=(0,Q.useState)(null),[o,s]=(0,Q.useState)(!1),[c,l]=(0,Q.useState)(null),[u,d]=(0,Q.useState)(null),f=t,p=typeof f?.listImportJobs==`function`,m=typeof f?.undoImportJob==`function`,h=(0,Q.useCallback)(async()=>{if(typeof f?.listImportJobs==`function`){s(!0),l(null);try{let t=await f.listImportJobs({object:e,limit:50});a(t)}catch(e){l(e instanceof Error?e.message:String(e)),a([])}finally{s(!1)}}},[f,e]);(0,Q.useEffect)(()=>{h()},[h]);let g=(0,Q.useCallback)(async e=>{if(typeof f?.cancelImportJob==`function`){try{await f.cancelImportJob(e)}catch{}h()}},[f,h]),_=(0,Q.useCallback)(async e=>{if(typeof f?.undoImportJob==`function`&&!(typeof window<`u`&&!window.confirm(n(`grid.import.undoConfirm`)))){d(e),l(null);try{await f.undoImportJob(e)}catch(e){l(e instanceof Error?e.message:String(e))}finally{d(null),h()}}},[f,h,n]);return p?(0,$.jsxs)(`div`,{className:`flex flex-col gap-3`,"data-testid":`import-history`,children:[(0,$.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,$.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:n(`grid.import.historyHint`)}),(0,$.jsx)(Z,{variant:`outline`,size:`sm`,onClick:()=>void h(),disabled:o,"data-testid":`import-history-refresh`,children:n(o?`grid.import.historyLoading`:`grid.import.historyRefresh`)})]}),c&&(0,$.jsx)(`p`,{className:`text-xs text-destructive`,"data-testid":`import-history-error`,children:c}),i&&i.length===0&&!o&&(0,$.jsx)(`p`,{className:`p-6 text-center text-sm text-muted-foreground`,"data-testid":`import-history-empty`,children:n(`grid.import.historyEmpty`)}),i&&i.length>0&&(0,$.jsxs)(Re,{children:[(0,$.jsx)(J,{children:(0,$.jsxs)(je,{children:[(0,$.jsx)(ct,{children:n(`grid.import.historyColStatus`)}),(0,$.jsx)(ct,{className:`text-right`,children:n(`grid.import.historyColRows`)}),(0,$.jsx)(ct,{className:`text-right`,children:n(`grid.import.historyColResult`)}),(0,$.jsx)(ct,{children:n(`grid.import.historyColTime`)}),(0,$.jsx)(ct,{})]})}),(0,$.jsx)(ft,{children:i.map(e=>(0,$.jsxs)(je,{"data-testid":`import-history-row-${e.jobId}`,children:[(0,$.jsx)(X,{children:(0,$.jsx)($e,{variant:tp[e.status],children:n(`grid.import.jobStatus.${e.status}`)})}),(0,$.jsxs)(X,{className:`text-right tabular-nums`,children:[e.processed,`/`,e.total]}),(0,$.jsxs)(X,{className:`text-right tabular-nums text-xs`,children:[(0,$.jsx)(`span`,{className:`text-emerald-600`,children:n(`grid.import.createdCount`,{count:e.created})}),e.updated>0&&(0,$.jsxs)(`span`,{className:`text-muted-foreground`,children:[` · `,n(`grid.import.updatedCount`,{count:e.updated})]}),e.skipped>0&&(0,$.jsxs)(`span`,{className:`text-muted-foreground`,children:[` · `,n(`grid.import.skippedCount`,{count:e.skipped})]}),e.errors>0&&(0,$.jsxs)(`span`,{className:`text-destructive`,children:[` · `,n(`grid.import.errorCount`,{count:e.errors})]})]}),(0,$.jsx)(X,{className:`text-xs text-muted-foreground`,children:np(e.completedAt??e.createdAt,r)}),(0,$.jsxs)(X,{className:`text-right`,children:[Bf(e.status)&&typeof f?.cancelImportJob==`function`&&(0,$.jsxs)(Z,{variant:`ghost`,size:`sm`,onClick:()=>void g(e.jobId),"data-testid":`import-history-cancel-${e.jobId}`,children:[(0,$.jsx)(Ji,{className:`mr-1 h-3.5 w-3.5`}),` `,n(`grid.import.cancelImport`)]}),e.revertedAt&&(0,$.jsx)(`span`,{className:`text-xs text-muted-foreground`,"data-testid":`import-history-reverted-${e.jobId}`,children:n(`grid.import.reverted`)}),Vf(e,m)&&(0,$.jsxs)(Z,{variant:`ghost`,size:`sm`,onClick:()=>void _(e.jobId),disabled:u===e.jobId,"data-testid":`import-history-undo-${e.jobId}`,children:[(0,$.jsx)(Gi,{className:`mr-1 h-3.5 w-3.5`}),u===e.jobId?n(`grid.import.undoing`):n(`grid.import.undoImport`)]})]})]},e.jobId))})]})]}):(0,$.jsx)(`div`,{className:`p-6 text-center text-sm text-muted-foreground`,"data-testid":`import-history-unsupported`,children:n(`grid.import.historyUnsupported`)})},ip=({objectName:e,objectLabel:t,fields:n,dataSource:r,onComplete:i,onCancel:a,open:o,onOpenChange:s,onErrorMode:c=`skip`,templateStorageKey:l,templateStorage:u,savedMappings:d,initialFile:f,extraOptionsContent:p,renderResultExtra:m})=>{let{t:h}=vf(),[g,_]=(0,Q.useState)(`upload`),[v,y]=(0,Q.useState)([]),[b,x]=(0,Q.useState)([]),[S,w]=(0,Q.useState)({}),[T,E]=(0,Q.useState)(!1),[D,O]=(0,Q.useState)(0),[k,A]=(0,Q.useState)(null),[j,M]=(0,Q.useState)({}),[ee,N]=(0,Q.useState)(!1),[te,P]=(0,Q.useState)(null),[ne,F]=(0,Q.useState)(null),I=Q.useRef(!1),[L,R]=(0,Q.useState)(!1),[z,B]=(0,Q.useState)(null),[V,re]=(0,Q.useState)(`insert`),[H,ie]=(0,Q.useState)([]),[ae,oe]=(0,Q.useState)(!1),[se,le]=(0,Q.useState)(!0),[U,de]=(0,Q.useState)(!1),[fe,me]=(0,Q.useState)(!1),[he,ge]=(0,Q.useState)(!1),_e=t??e,ve=(0,Q.useMemo)(()=>new Map(n.map(e=>[e.name,e.label])),[n]),ye=(0,Q.useMemo)(()=>{let e=new Map;for(let[t,n]of Object.entries(S))e.has(n)||e.set(n,Number(t));return e},[S]),be=(0,Q.useCallback)((e,t)=>{if(!t)return;let n=ye.get(t);if(n===void 0)return;let r=e-1;return j[r]?.[n]??b[r]?.[n]},[ye,j,b]),xe=(0,Q.useMemo)(()=>{let e=r;return typeof e?.createImportJob==`function`&&typeof e?.getImportJobProgress==`function`&&typeof e?.getImportJobResults==`function`},[r]),W=(0,Q.useCallback)(e=>{ie(t=>t.includes(e)?t.filter(t=>t!==e):[...t,e])},[]);(0,Q.useEffect)(()=>{let e=new Set(Object.values(S));ie(t=>{let n=t.filter(t=>e.has(t));return n.length===t.length?t:n})},[S]);let Ce=(0,Q.useMemo)(()=>u===void 0?kf():u,[u]),we=l??`objectui:import-templates:${e}`,[G,Te]=(0,Q.useState)(()=>Af(Ce,we)),[Ee,De]=(0,Q.useState)(null);(0,Q.useEffect)(()=>{Te(Af(Ce,we))},[Ce,we]);let[Oe,ke]=(0,Q.useState)([]),[Ae,K]=(0,Q.useState)(null);(0,Q.useEffect)(()=>{if(d)return;let t=!0,n=r?.listImportMappings;if(typeof n!=`function`){ke([]);return}return Promise.resolve(n.call(r,e)).then(e=>{t&&ke((e??[]).map(ff).filter(e=>e!==null))}).catch(()=>{t&&ke([])}),()=>{t=!1}},[r,e,d]);let je=d??Oe,Me=(0,Q.useMemo)(()=>je.find(e=>e.name===Ae)??null,[je,Ae]),Ne=(0,Q.useCallback)(e=>{let t=je.find(t=>t.name===e);t&&(K(e),De(null),w(hf(t,v)),(t.mode===`update`||t.mode===`upsert`)&&re(t.mode),Array.isArray(t.upsertKey)&&ie(t.upsertKey.filter(e=>typeof e==`string`)),B(null))},[je,v]),Pe=(0,Q.useCallback)(()=>{K(null),re(`insert`),ie([]),w(Of(v,n,b)),B(null)},[v,n,b]),Fe=(0,Q.useCallback)(e=>{let t=G.find(t=>t.id===e);t&&(De(e),w(Nf(t,v,n)))},[G,v,n]),Ie=(0,Q.useCallback)(e=>{let t={id:`tpl-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,6)}`,name:e,mapping:Mf(v,S),updatedAt:Date.now()},n=[...G,t];Te(n),De(t.id),jf(Ce,we,n)},[G,v,S,Ce,we]),Le=(0,Q.useCallback)(()=>{if(!Ee)return;let e=G.filter(e=>e.id!==Ee);Te(e),De(null),jf(Ce,we,e)},[G,Ee,Ce,we]),Re=(0,Q.useCallback)((e,t,n)=>{M(r=>{let i={...r},a={...i[e]??{}};return n===(b[e]?.[t]??``)?delete a[t]:a[t]=n,Object.keys(a).length===0?delete i[e]:i[e]=a,i})},[b]),ze=(0,Q.useMemo)(()=>{let e=new Set(Object.values(S));return n.filter(t=>t.required&&!e.has(t.name))},[n,S]),Be=(0,Q.useCallback)((e,t)=>{y(e),x(t),w(Of(e,n,t)),M({}),_(`mapping`)},[n]),Ve=Q.useRef(null);(0,Q.useEffect)(()=>{if(!o||!f||Ve.current===f)return;Ve.current=f;let e=!1;return(async()=>{try{let t=await Gd(f);if(e||t.length<2)return;Be(t[0],t.slice(1))}catch{}})(),()=>{e=!0}},[o,f,Be]);let He=(0,Q.useMemo)(()=>v.map((e,t)=>ef(b.map(e=>e[t]))),[v,b]),Ue=(0,Q.useMemo)(()=>df(v,n,b),[v,n,b]),We=(0,Q.useCallback)(()=>{let e=Object.entries(S).map(([e,t])=>({csvIdx:Number(e),field:t}));return b.map((t,n)=>{let r=j[n],i={};for(let n of e){let e=r&&r[n.csvIdx]!==void 0?r[n.csvIdx]:t[n.csvIdx]??``;i[n.field]=e}return i})},[b,S,j]),J=(0,Q.useCallback)(async()=>{let t=Cf(S,n);if(t.length>0){let e={totalRows:b.length,importedRows:0,skippedRows:b.length,errors:[{row:0,field:t.map(e=>e.name).join(`, `),message:h(`grid.import.legacyReferenceBlocked`,{fields:t.map(e=>e.label||e.name).join(`, `)})}]};A(e),E(!1),i?.(e);return}let a=[],o=0,s=0,l=Object.entries(S).map(([e,t])=>({csvIdx:Number(e),field:n.find(e=>e.name===t)}));for(let t=0;t<b.length;t++){let n=b[t],i=j[t],{record:u,errors:d}=Pf(i?n.map((e,t)=>i[t]===void 0?e:i[t]):n,l,t+1);if(d.length>0){if(s++,a.push(...d),c===`stop`)break}else try{r?.create&&await r.create(e,u),o++}catch(e){s++;let n=e instanceof Error?e.message:`Failed to create record`;if(a.push({row:t+1,field:``,message:n}),c===`stop`)break}O(Math.round((t+1)/b.length*100))}let u={totalRows:b.length,importedRows:o,skippedRows:s,errors:a,degraded:!0};A(u),E(!1),i?.(u)},[b,S,n,r,e,i,c,j,h]),Ge=(0,Q.useCallback)(async t=>{let n=r;if(typeof n?.createImportJob!=`function`||typeof n?.getImportJobProgress!=`function`||typeof n?.getImportJobResults!=`function`)return!1;I.current=!1;let a;try{a=await n.createImportJob(e,t)}catch(e){if(Rf(e))throw e;if(Lf(e))return!1;throw e}P(a.jobId),F({processed:0,total:a.total});let o=new Set([`succeeded`,`failed`,`cancelled`]),s=0;for(;;){if(I.current||(await new Promise(e=>setTimeout(e,xf)),I.current))return!0;let e;try{e=await n.getImportJobProgress(a.jobId),s=0}catch(e){if(++s>=5)throw e;continue}if(F({processed:e.processed,total:e.total}),O(e.percentComplete),!o.has(e.status))continue;if(e.status===`cancelled`){let t={totalRows:e.total,importedRows:e.created+e.updated,skippedRows:e.skipped+e.errors,createdRows:e.created,updatedRows:e.updated,errors:[],cancelled:!0};return A(t),E(!1),i?.(t),!0}let t=zf(await n.getImportJobResults(a.jobId));return e.status===`failed`&&t.errors.length===0&&t.errors.push({row:0,field:``,message:e.error??`Import failed`}),O(100),A(t),E(!1),i?.(t),!0}},[r,e,i]),qe=(0,Q.useCallback)((e=!1)=>Ff(Ae?pf(v,b,j):We(),{writeMode:V,matchFields:H,createMissingOptions:ae,runAutomations:se,treatAsHistorical:U,skipBlankMatchKey:fe,dryRun:e,...Ae?{mappingName:Ae}:{}}),[We,Ae,v,b,j,V,H,ae,se,U,fe]),Je=(0,Q.useCallback)(async()=>{E(!0),O(0),I.current=!1,P(null),F(null);let t=qe();if(b.length>bf||he)try{if(await Ge(t))return}catch(e){if(Rf(e)){let e={totalRows:b.length,importedRows:0,skippedRows:b.length,errors:[{row:0,field:``,message:h(`grid.import.notAllowed`)}]};A(e),E(!1),i?.(e);return}if(!Lf(e)){let t=e instanceof Error?e.message:`Import failed`,n={totalRows:b.length,importedRows:0,skippedRows:b.length,errors:[{row:0,field:``,message:t}]};A(n),E(!1),i?.(n);return}}let n=r?.importRecords;if(typeof n==`function`)try{let a=await n.call(r,e,t),o={totalRows:a.total,importedRows:a.ok,skippedRows:a.skipped+a.errors,createdRows:a.created,updatedRows:a.updated,errors:a.results.filter(e=>!e.ok).map(e=>({row:e.row,field:e.field??``,message:e.error??e.code??`Import failed`,code:e.code})),serverResult:a};O(100),A(o),E(!1),i?.(o);return}catch(e){if(Rf(e)){let e={totalRows:b.length,importedRows:0,skippedRows:b.length,errors:[{row:0,field:``,message:h(`grid.import.notAllowed`)}]};A(e),E(!1),i?.(e);return}if(!If(e)){let t=e instanceof Error?e.message:`Import failed`,n={totalRows:b.length,importedRows:0,skippedRows:b.length,errors:[{row:0,field:``,message:t}]};A(n),E(!1),i?.(n);return}}await J()},[r,e,qe,i,b.length,J,Ge,he,h]),Ye=(0,Q.useCallback)(async()=>{let t=r?.importRecords;if(typeof t==`function`){R(!0);try{let n=await t.call(r,e,qe(!0));B(n)}catch(t){if(Rf(t)){B({object:e,dryRun:!0,writeMode:V,total:b.length,ok:0,errors:b.length,created:0,updated:0,skipped:0,results:[{row:0,ok:!1,action:`failed`,error:h(`grid.import.notAllowed`)}]});return}if(!If(t)){let n=t instanceof Error?t.message:`Validation failed`;B({object:e,dryRun:!0,writeMode:V,total:b.length,ok:0,errors:b.length,created:0,updated:0,skipped:0,results:[{row:0,ok:!1,action:`failed`,error:n}]})}}finally{R(!1)}}},[r,e,qe,V,b.length,h]);(0,Q.useEffect)(()=>{B(null)},[S,j,V,H,ae,se,fe]);let Xe=(0,Q.useCallback)(async()=>{I.current=!0;let e=te,t=r;if(e&&typeof t?.cancelImportJob==`function`)try{await t.cancelImportJob(e)}catch{}let n={totalRows:ne?.total??b.length,importedRows:0,skippedRows:0,errors:[],cancelled:!0};A(n),E(!1)},[te,r,ne,b.length]),Ze=(0,Q.useCallback)(()=>{I.current=!1,_(`upload`),y([]),x([]),w({}),O(0),A(null),M({}),De(null),K(null),re(`insert`),ie([]),oe(!1),le(!0),me(!1),P(null),F(null),R(!1),B(null),N(!1)},[]),Qe=(0,Q.useCallback)(()=>{if(!k||k.errors.length===0)return;let t=new Map;for(let e of k.errors){if(e.row<1)continue;let n=e.field?`${e.field}: `:``,r=t.get(e.row);t.set(e.row,r?`${r}; ${n}${e.message}`:`${n}${e.message}`)}if(t.size===0)return;let n=Hf(v,b,S,t);try{let t=new Blob([`\uFEFF${n}`],{type:`text/csv;charset=utf-8`}),r=URL.createObjectURL(t),i=document.createElement(`a`);i.href=r,i.download=`${e}-import-errors.csv`,document.body.appendChild(i),i.click(),i.remove(),setTimeout(()=>URL.revokeObjectURL(r),0)}catch{}},[k,v,b,S,e]),X=(0,Q.useCallback)(()=>{Ze(),s?.(!1),a?.()},[Ze,s,a]);return(0,$.jsx)(Y,{open:o,onOpenChange:e=>{e?s?.(e):X()},children:(0,$.jsxs)(C,{className:`flex max-h-[85vh] flex-col gap-4 overflow-hidden sm:max-w-4xl`,onInteractOutside:e=>e.preventDefault(),children:[(0,$.jsxs)(ue,{children:[(0,$.jsxs)(`div`,{className:`flex items-center justify-between gap-2 pr-6`,children:[(0,$.jsxs)(pe,{className:`flex items-center gap-2`,children:[(0,$.jsx)(ui,{className:`h-5 w-5`}),` `,h(`grid.import.title`,{object:_e})]}),g===`upload`&&!k&&!T&&typeof r?.listImportJobs==`function`&&(0,$.jsx)(Z,{variant:`ghost`,size:`sm`,onClick:()=>N(e=>!e),"data-testid":`import-history-toggle`,children:h(ee?`grid.import.historyBack`:`grid.import.history`)})]}),(0,$.jsx)(Ke,{children:h(ee?`grid.import.historyDescription`:g===`upload`?`grid.import.uploadDescription`:g===`mapping`?`grid.import.mappingDescription`:`grid.import.previewDescription`)})]}),!ee&&(0,$.jsx)(`div`,{className:`flex items-center justify-center gap-2 text-xs text-muted-foreground`,children:[`upload`,`mapping`,`preview`].map((e,t)=>(0,$.jsxs)(Q.Fragment,{children:[t>0&&(0,$.jsx)(Pr,{className:`h-3 w-3`}),(0,$.jsxs)(`span`,{className:q(`rounded-full px-3 py-1`,g===e?`bg-primary text-primary-foreground`:`bg-muted`),children:[t+1,`. `,h(e===`upload`?`grid.import.stepUpload`:e===`mapping`?`grid.import.stepMapping`:`grid.import.stepPreview`)]})]},e))}),(0,$.jsx)(`div`,{className:`min-h-0 flex-1 overflow-auto`,children:ee?(0,$.jsx)(rp,{objectName:e,dataSource:r,t:h}):k?(0,$.jsxs)(`div`,{className:`flex flex-col items-center gap-3 py-4`,children:[k.cancelled?(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(Ji,{className:`h-10 w-10 text-muted-foreground`}),(0,$.jsx)(`p`,{className:`text-lg font-semibold`,children:h(`grid.import.importCancelled`)})]}):(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(Yr,{className:`h-10 w-10 text-green-500`}),(0,$.jsx)(`p`,{className:`text-lg font-semibold`,children:h(`grid.import.importComplete`)})]}),(0,$.jsxs)(`div`,{className:`flex flex-wrap justify-center gap-2`,children:[k.createdRows!==void 0||k.updatedRows!==void 0?(0,$.jsxs)($.Fragment,{children:[(k.createdRows??0)>0&&(0,$.jsx)($e,{variant:`default`,children:h(`grid.import.createdCount`,{count:k.createdRows})}),(k.updatedRows??0)>0&&(0,$.jsx)($e,{variant:`default`,children:h(`grid.import.updatedCount`,{count:k.updatedRows})}),(k.createdRows??0)===0&&(k.updatedRows??0)===0&&(0,$.jsx)($e,{variant:`default`,children:h(`grid.import.imported`,{count:k.importedRows})})]}):(0,$.jsx)($e,{variant:`default`,children:h(`grid.import.imported`,{count:k.importedRows})}),k.skippedRows>0&&(0,$.jsx)($e,{variant:`destructive`,children:h(`grid.import.skippedCount`,{count:k.skippedRows})})]}),k.degraded&&!k.cancelled&&(0,$.jsxs)(`div`,{className:`flex w-full items-start gap-2 rounded-md border border-amber-400/40 bg-amber-50 p-3 text-xs text-amber-900 dark:bg-amber-950/30 dark:text-amber-200`,"data-testid":`import-degraded-notice`,children:[(0,$.jsx)(Jr,{className:`mt-0.5 h-4 w-4 shrink-0`}),(0,$.jsx)(`span`,{children:h(`grid.import.legacyFallbackNotice`)})]}),m&&(0,$.jsx)(`div`,{className:`w-full`,"data-testid":`import-result-extra`,children:m(k)}),k.errors.length>0&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(`div`,{className:`max-h-32 w-full overflow-auto rounded border p-2 text-xs`,children:[k.errors.slice(0,10).map((e,t)=>{let{fieldLabel:n,message:r}=Tf({field:e.field,error:e.message,code:e.code},ve,be(e.row,e.field),h);return(0,$.jsxs)(`p`,{className:`text-destructive`,children:[e.row>=1?h(`grid.import.errorRowPrefix`,{row:e.row}):``,n?`${n}: `:``,r]},t)}),k.errors.length>10&&(0,$.jsx)(`p`,{className:`text-muted-foreground`,children:h(`grid.import.moreErrors`,{count:k.errors.length-10})})]}),k.errors.some(e=>e.row>=1)&&(0,$.jsxs)(Z,{variant:`outline`,size:`sm`,onClick:Qe,"data-testid":`import-download-failed`,children:[(0,$.jsx)(ri,{className:`mr-1 h-4 w-4`}),` `,h(`grid.import.downloadFailed`)]})]}),k.resultsTruncated&&(0,$.jsx)(`p`,{className:`text-center text-xs text-muted-foreground`,children:h(`grid.import.resultsTruncated`,{count:k.errors.length,total:k.skippedRows})})]}):(0,$.jsxs)($.Fragment,{children:[g===`upload`&&(0,$.jsx)(Jf,{onFileLoaded:Be,fields:n,objectName:e,objectLabel:_e}),g===`mapping`&&(0,$.jsx)(Qf,{headers:v,fields:n,mapping:S,onMappingChange:w,inferredTypes:He,suggestions:Ue,templates:G,selectedTemplateId:Ee,onSelectTemplate:Fe,onSaveTemplate:Ie,onDeleteTemplate:Le,savedMappings:je,activeMapping:Me,onSelectSavedMapping:Ne,onClearSavedMapping:Pe,missingRequired:ze}),g===`preview`&&(0,$.jsxs)($.Fragment,{children:[p&&(0,$.jsx)(`div`,{"data-testid":`import-extra-options`,children:p}),!Me&&(0,$.jsx)(ep,{fields:n,mapping:S,writeMode:V,onWriteMode:re,matchFields:H,onToggleMatchField:W,createMissingOptions:ae,onCreateMissingOptions:oe,runAutomations:se,onRunAutomations:le,treatAsHistorical:U,onTreatAsHistorical:de,skipBlankMatchKey:fe,onSkipBlankMatchKey:me,showBackground:xe&&b.length<=bf,backgroundImport:he,onBackgroundImport:ge}),Me&&(0,$.jsxs)(`div`,{className:`mb-2 flex items-start gap-2 rounded-md border border-border bg-muted/40 p-3 text-xs text-muted-foreground`,"data-testid":`import-saved-mapping-preview-note`,children:[(0,$.jsx)(Jr,{className:`mt-0.5 h-4 w-4 shrink-0`}),(0,$.jsx)(`span`,{children:h(`grid.import.savedMappingPreviewNote`,{name:Me.label||Me.name})})]}),(0,$.jsx)($f,{headers:v,rows:b,mapping:S,fields:n,corrections:j,onCorrect:Re}),b.length>bf&&(0,$.jsxs)(`div`,{className:`mt-2 flex items-start gap-2 rounded-md border border-border bg-muted/40 p-3 text-xs text-muted-foreground`,"data-testid":`import-large-sample-notice`,children:[(0,$.jsx)(Jr,{className:`mt-0.5 h-4 w-4 shrink-0`}),(0,$.jsxs)(`span`,{children:[h(`grid.import.largeSampleNotice`,{shown:yf,total:b.length}),` `,h(`grid.import.asyncLargeHint`)]})]}),b.length<=bf&&typeof r?.importRecords==`function`&&(0,$.jsxs)(`div`,{className:`flex flex-col gap-2 rounded-md border border-border p-3`,"data-testid":`import-validate`,children:[(0,$.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,$.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:h(`grid.import.validateHint`)}),(0,$.jsx)(Z,{variant:`outline`,size:`sm`,onClick:Ye,disabled:L,"data-testid":`import-validate-btn`,children:h(L?`grid.import.validating`:`grid.import.validate`)})]}),z&&(0,$.jsxs)(`div`,{className:`flex flex-col gap-1`,"data-testid":`import-validate-result`,children:[(0,$.jsx)(`p`,{className:`text-xs font-medium ${z.errors>0?`text-destructive`:`text-emerald-600`}`,children:z.errors>0?h(`grid.import.validateFailed`,{ok:z.ok,errors:z.errors}):h(`grid.import.validatePassed`,{ok:z.ok})}),z.errors>0&&(0,$.jsx)(`ul`,{className:`max-h-32 overflow-auto text-xs text-destructive`,children:z.results.filter(e=>!e.ok).slice(0,20).map((e,t)=>{let{fieldLabel:n,message:r}=Tf(e,ve,be(e.row,e.field),h);return(0,$.jsxs)(`li`,{children:[e.row>0?h(`grid.import.errorRowPrefix`,{row:e.row}):``,n?`${n}: `:``,r]},t)})})]})]})]}),T&&(0,$.jsxs)(`div`,{className:`flex flex-col items-center gap-2`,children:[(0,$.jsx)(Se,{value:D,className:`h-2 w-full`}),(0,$.jsx)(`p`,{className:`text-center text-xs text-muted-foreground`,children:te?ne?h(`grid.import.asyncProcessing`,{processed:ne.processed,total:ne.total,progress:D}):h(`grid.import.asyncQueued`):h(`grid.import.importing`,{progress:D})}),te&&typeof r?.cancelImportJob==`function`&&(0,$.jsxs)(Z,{variant:`outline`,size:`sm`,onClick:Xe,"data-testid":`import-cancel-async`,children:[(0,$.jsx)(Ji,{className:`mr-1 h-4 w-4`}),` `,h(`grid.import.cancelImport`)]})]})]})}),(0,$.jsx)(ce,{className:`gap-2 sm:gap-0`,children:ee?(0,$.jsxs)(Z,{variant:`outline`,onClick:()=>N(!1),children:[(0,$.jsx)(Mr,{className:`mr-1 h-4 w-4`}),` `,h(`grid.import.historyBack`)]}):k?(0,$.jsx)(Z,{onClick:X,"data-testid":`import-close-btn`,children:h(`grid.import.close`)}):(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(Z,{variant:`ghost`,onClick:X,disabled:T,children:[(0,$.jsx)(Ji,{className:`mr-1 h-4 w-4`}),` `,h(`grid.import.cancel`)]}),(g===`mapping`||g===`preview`)&&(0,$.jsxs)(Z,{variant:`outline`,onClick:()=>_(g===`mapping`?`upload`:`mapping`),disabled:T,children:[(0,$.jsx)(Mr,{className:`mr-1 h-4 w-4`}),` `,h(`grid.import.back`)]}),g===`mapping`&&(0,$.jsxs)(Z,{onClick:()=>_(`preview`),disabled:Ae?!1:Object.keys(S).length===0||ze.length>0,"data-testid":`import-next-btn`,children:[h(`grid.import.next`),` `,(0,$.jsx)(Pr,{className:`ml-1 h-4 w-4`})]}),g===`preview`&&(0,$.jsx)(Z,{onClick:Je,disabled:T||!Ae&&V!==`insert`&&H.length===0,"data-testid":`import-run-btn`,children:T?h(`grid.import.importingProgress`):h(`grid.import.importNRows`,{count:b.length})})]})})]})})},ap=t({ImportWizard:()=>ip,ObjectGrid:()=>Fd,ObjectGridRenderer:()=>cp,parseSpreadsheetFile:()=>Gd}),op={columns:!0,filter:!0,sort:!0,limit:`pagination.pageSize`},sp=(e,t)=>Array.isArray(t)||e?.bind!=null||e?.data?.provider===`value`||e?.staticData!=null?!1:typeof e?.objectName==`string`&&e.objectName.length>0,cp=bn(({schema:e,...t})=>{let{dataSource:n,...r}=t,i=Rn(n);return(0,$.jsx)(Qn,{schema:e,mapping:op,dataSource:i,testId:`object-grid`,errorTitle:`This grid’s data source could not be resolved`,requiresDataSource:sp(e,r.data),noDataSourceMessage:Ln(`object-grid`,e?.objectName),children:e=>(0,$.jsx)(Fd,{schema:e,...r,dataSource:i})})}),lp=[{name:`objectName`,type:`string`,required:!0},{name:`columns`,type:`array`,description:'Columns to show, either field names (`["name", "email"]`) or column objects (`[{ field: "name", label: "Full Name", width: 200 }]`). The canonical spelling — the deprecated `fields` is only read when this is absent.'},{name:`filter`,type:`array`,description:"Filter criteria in JSON-rules form. The canonical spelling — the deprecated `defaultFilters` is only read when this is absent."},{name:`label`,type:`string`,description:"Grid label, used as the table caption and as the export file title. The canonical spelling — the deprecated `title` is only read when this is absent."},{name:`sort`,type:`array`,description:"Initial sort order, `[{ field, order }]`. The only sort spelling this block reads — the retired single-sort `defaultSort` is refused by the protocol and ignored by the renderer."},{name:`pagination`,type:`object`,description:"Pagination config, `{ pageSize, pageSizeOptions, … }`. Presence enables paging with the object's settings, and an explicit off wins — the deprecated flat `showPagination: false` turns paging off even beside this object, because this object declares no off switch of its own. Prefer it over the deprecated flat `pageSize` / `showPagination` pair."},{name:`searchableFields`,type:`array`,of:`string`,description:"Fields the toolbar search box queries. A non-empty list is what enables search — prefer it over the deprecated boolean `showSearch`, which cannot say WHICH fields to search."},{name:`data`,type:`object`,description:'Data source configuration — a `ViewData` object discriminated by `provider`: `{ provider: "object", object }` (what an omitted `data` falls back to, using `objectName`), `{ provider: "api", read, write }`, `{ provider: "value", items: [...] }` for inline rows that bypass the object query, or `{ provider: "schema", schemaId }`. The canonical spelling — the deprecated `staticData` is the array-only shortcut for the `value` provider, so inline rows go under `items` here rather than in a bare array.'},{name:`rowHeight`,type:`enum`,enum:[`compact`,`short`,`medium`,`tall`,`extra_tall`],description:"Row density. An unrecognised value falls back to `compact` rather than erroring."},{name:`frozenColumns`,type:`number`,description:`How many leading columns stay pinned while the grid scrolls horizontally.`},{name:`resizable`,type:`boolean`,description:"Let users drag column borders to resize. The canonical spelling — the deprecated `resizableColumns` is only read when this is absent."},{name:`reorderableColumns`,type:`boolean`,description:`Let users drag columns into a different order.`},{name:`showColumnTypeIcons`,type:`boolean`,description:`Show a field-type icon in each column header. Off by default — the type is usually obvious from the cell content, and the icons compete with the column labels.`},{name:`rowColor`,type:`object`,description:`Rules that colour whole rows from a field value.`},{name:`conditionalFormatting`,type:`array`,description:"Row/cell styling rules. Accepts both the ObjectUI `{ field, operator, value }` form and the spec expression form `{ condition, style }`."},{name:`grouping`,type:`object`,description:`Group rows by one or more fields into collapsible sections.`},{name:`aggregations`,type:`array`,description:'Per-group roll-ups shown in group headers, `[{ field, type: "sum" | "count" | "avg" | "min" | "max" | "count_distinct" }]`. Needs `grouping` to have anything to roll up.'},{name:`selection`,type:`object`,description:'Selection config, `{ type: "none" | "single" | "multiple" }`. Presence enables selection — an object with no `type` selects multiple rows — and an explicit off wins: `type: "none"` turns selection off even beside a declared `bulkActions`. The canonical spelling — the deprecated boolean/string `selectable` is only read when this is absent.'},{name:`rowActions`,type:`array`,description:`Names of actions offered on each row’s menu.`},{name:`bulkActions`,type:`array`,description:"Names of actions offered once rows are selected. Needs a multi-row `selection` to be reachable."},{name:`batchActions`,type:`array`,description:"Legacy alias of `bulkActions`, and the one the renderer reads FIRST when both are set. Prefer `bulkActions` in new schemas."},{name:`bulkActionDefs`,type:`array`,description:"Full inline bulk-action definitions, for actions that are not named entries in the object’s action set. Use `bulkActions` when the action already exists."},{name:`editable`,type:`boolean`,description:`Enable inline cell editing (double-click or Enter opens a cell).`},{name:`singleClickEdit`,type:`boolean`,description:"With `editable`, a single click opens the cell instead of a double-click. Has no effect on a non-editable grid."},{name:`navigation`,type:`object`,description:'What a row click does, `{ mode: "page" | "drawer" | "modal" | "split" | "none", … }`.'},{name:`operations`,type:`object`,description:"Toggles for the built-in create/read/update/delete/export/import affordances, e.g. `{ delete: false }`."},{name:`exportOptions`,type:`object`,description:"Export config, `{ formats, maxRecords, includeHeaders, fileNamePrefix, streaming }`. `streaming` (default true) picks server-side streaming vs browser-side assembly for the export — a behaviour fork, not decoration; set it to `false` to force browser-side assembly. Needs `operations.export` to be reachable from the toolbar."}];_n.register(`object-grid`,cp,{namespace:`plugin-grid`,label:`Object Grid`,category:`plugin`,inputs:lp.map(e=>({...e}))}),_n.register(`grid`,cp,{namespace:`view`,skipFallback:!0,label:`Data Grid`,category:`view`,inputs:lp.map(e=>({...e}))}),_n.register(`import-wizard`,({schema:e,...t})=>{let{dataSource:n}=jt()||{};return(0,$.jsx)(ip,{objectName:e.objectName,objectLabel:e.objectLabel,fields:e.fields??[],dataSource:n,...t})},{namespace:`plugin-grid`,label:`Import Wizard`,category:`plugin`,inputs:[{name:`objectName`,type:`string`,required:!0},{name:`fields`,type:`array`,required:!0}]});export{la as _,ll as a,sl as c,ls as d,rs as f,ha as g,ga as h,ul as i,rl as l,Do as m,ip as n,cl as o,$o as p,Fd as r,ol as s,ap as t,hc as u};