@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,3 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./ui-components-BL3SEdAz.css"])))=>i.map(i=>d[i]);
2
- import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{h as t,t as n,v as r}from"./vendor-react-BggL7APJ.js";import{Ar as i}from"./vendor-objectstack-XuWC71M9.js";import{$t as a,Ar as o,Fn as s,Fr as c,Ft as l,Gn as u,Gt as d,Ht as f,In as p,Ir as m,Jt as h,Kn as g,Ln as _,Lr as v,Mt as y,Nr as b,Pr as x,Pt as S,Qt as C,Rn as w,Wn as T,Xt as E,Yt as D,Zn as O,Zt as k,bi as A,kr as j,on as M,qn as N,vi as P,zn as F}from"./ui-components-BTB1NkUW.js";import{Pt as I,t as L}from"./framework-DcWkeiND.js";import{w as ee}from"./i18n-runtime-CTgAQF4N.js";import{r as te}from"./vendor-ui-utils-DIUdEYii.js";import{t as R}from"./vendor-icon-chevron-down-BEf_jTEE.js";import{t as ne}from"./vendor-icon-chevron-right-DbnKwHYQ.js";import{t as re}from"./vendor-icon-chevron-up-C-6o_0je.js";import{t as ie}from"./vendor-icon-chevrons-up-down-CbDukqtA.js";import{t as ae}from"./vendor-icon-circle-alert-D1XTr_X9.js";import{t as oe}from"./vendor-icon-circle-check-Bq3OcFQN.js";import{t as z}from"./vendor-icon-code-xml-C9EWHSC8.js";import{t as se}from"./vendor-icon-eye-off-Dy3GIcvl.js";import{t as ce}from"./vendor-icon-eye-C3HaEGOo.js";import{t as le}from"./vendor-icon-grip-vertical-B01-ovq0.js";import{t as ue}from"./vendor-icon-list-filter-C15EN_7M.js";import{t as B}from"./vendor-icon-plus-BlfcDDsa.js";import{t as de}from"./vendor-icon-search-B2Uqtp_W.js";import{t as fe}from"./vendor-icon-settings-2-BHIWdy1J.js";import{t as pe}from"./vendor-icon-sigma-DSt0XKnk.js";import{t as me}from"./vendor-icon-trash-BLsWkwB9.js";import{t as he}from"./vendor-icon-triangle-alert-D5n0T3q_.js";import{t as ge}from"./vendor-icon-x-CcLtgRNL.js";import{o as _e}from"./createDerive-DvA_JGNq.js";import{n as ve}from"./plugin-form-CV8ZY04-.js";import{g as V,h as ye,i as H,m as be,p as xe,r as U,s as Se}from"./i18n-CEKxYdmD.js";var W=e(r(),1),G=n(),Ce=L(`metadataAdminFieldsReadDoor`),we=`referenceTo`,Te=`reference`;function Ee(e){return typeof e==`string`&&e.trim()!==``}function De(e){let t=Ce.filter(t=>t in e);if(t.length===0)return e;let n={...e};for(let e of t)delete n[e];return t.includes(we)&&!Ee(n[Te])&&Ee(e[we])&&(n[Te]=e[we]),n}function Oe(e){return Array.isArray(e)?{shape:`array`,entries:e.map((e,t)=>{let{name:n,...r}=e??{};return{name:typeof n==`string`&&n?n:`field_${t+1}`,def:De(r)}})}:e&&typeof e==`object`?{shape:`record`,entries:Object.entries(e).map(([e,t])=>({name:e,def:De({...t??{}})}))}:{shape:`record`,entries:[]}}function ke(e){return e.shape===`array`?e.entries.map(e=>({name:e.name,...e.def})):Object.fromEntries(e.entries.map(e=>[e.name,e.def]))}function Ae(e,t){return e.entries.findIndex(e=>e.name===t)}function je(e,t,n){let r={type:t,label:n??Me(e)};return(t===`select`||t===`multiselect`||t===`radio`||t===`checkboxes`)&&(r.options=[]),{name:e,def:r}}function Me(e){return e?e.split(`_`).filter(Boolean).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(` `):``}function Ne(e){let t=e.trim().toLowerCase().replace(/[^a-z0-9]+/g,`_`).replace(/^_+|_+$/g,``).replace(/_{2,}/g,`_`);return t?/^[a-z_]/.test(t)?t:`f_${t}`:`field`}function Pe(e){let t=e.trim().toLowerCase().replace(/[^a-z0-9]+/g,`_`).replace(/^_+/g,``).replace(/_{2,}/g,`_`);return t?/^[a-z_]/.test(t)?t:`f_${t}`:``}function Fe(e){return Array.isArray(e)?e.filter(e=>!!e&&typeof e==`object`).map(e=>({...e,key:typeof e.key==`string`?e.key:``,label:typeof e.label==`string`?e.label:``})).filter(e=>e.key):[]}function Ie(e,t){let n=/[a-z0-9]/i.test(e)?Ne(e):`group`;if(!t.includes(n))return n;let r=2;for(;t.includes(`${n}_${r}`);)r+=1;return`${n}_${r}`}function Le(e,t){let n=t.trim()||`New section`,r=Ie(n,e.map(e=>e.key));return[...e,{key:r,label:n}]}function Re(e,t,n){let r=n.trim();return r?e.map(e=>e.key===t?{...e,label:r}:e):e}function ze(e,t,n){return e.map(e=>{if(e.key!==t)return e;let r={...e};for(let[e,t]of Object.entries(n))t===void 0?delete r[e]:r[e]=t;return r})}function Be(e,t){return e.filter(e=>e.key!==t)}function Ve(e,t,n){let r=e.findIndex(e=>e.key===t);if(r<0)return e;let i=r+n;return i<0||i>=e.length?e:Ue(e,r,i)}function He(e,t){return{shape:e.shape,entries:e.entries.map(e=>e.def.group===t?{name:e.name,def:{...e.def,group:void 0}}:e)}}function Ue(e,t,n){let r=e.slice(),[i]=r.splice(t,1);return r.splice(n,0,i),r}function We(e,t,n){let r=Array.isArray(t)?t.filter(e=>typeof e?.key==`string`):[],i=new Map;for(let e of r)i.set(e.key,{key:e.key,label:String(e.label??e.key),entries:[]});let a=new Set(r.map(e=>e.key));for(let t of e.entries){let e=typeof t.def.group==`string`?t.def.group:null;e&&a.has(e)?i.get(e).entries.push(t):(i.has(null)||i.set(null,{key:null,label:`Ungrouped`,entries:[]}),i.get(null).entries.push(t))}let o=!!n?.includeEmptyDeclared;return Array.from(i.values()).filter(e=>e.entries.length>0||o&&e.key!==null)}function Ge(e,t){return e===t||JSON.stringify(e??null)===JSON.stringify(t??null)}function Ke(e,t){let n=new Set([...Object.keys(e),...Object.keys(t)]),r=[];for(let i of n)Ge(e[i],t[i])||r.push(i);return r.sort()}function qe(e,t){let n=Oe(e),r=Oe(t),i=new Map(n.entries.map(e=>[e.name,e])),a=new Set(r.entries.map(e=>e.name)),o={},s=0,c=0;for(let e of r.entries){let t=i.get(e.name);if(!t){o[e.name]={name:e.name,status:`added`,changedKeys:[]},s+=1;continue}let n=Ke(t.def,e.def);n.length?(o[e.name]={name:e.name,status:`changed`,changedKeys:n},c+=1):o[e.name]={name:e.name,status:`unchanged`,changedKeys:[]}}let l=n.entries.filter(e=>!a.has(e.name));return{byName:o,removed:l,counts:{added:s,changed:c,removed:l.length}}}var Je=new Set([...S,`is_empty`,`is_not_empty`,`is_null`,`is_not_null`]);function Ye(e,t){return!l(String(e??``),t)}function Xe(e){if(typeof e!=`object`||!e||Array.isArray(e))return!1;let t=e;return Array.isArray(t.conditions)||t.logic===`and`||t.logic===`or`}function Ze(e){if(e==null)return{ok:!0,rules:[]};let t=Xe(e)&&Array.isArray(e.conditions)?e.conditions:[],n=[];for(let e of t){if(Xe(e))return{ok:!1,reason:`nested_group`};if(typeof e!=`object`||!e)continue;let t=e;if(typeof t.field!=`string`||t.field===``)continue;let r=i(t.operator);if(!Je.has(String(t.operator))&&!Je.has(String(r))&&Ye(t.operator,t.value))continue;let a={field:t.field,operator:r};t.value!==void 0&&(a.value=t.value),n.push(a)}return(Xe(e)?e.logic:void 0)===`or`&&n.length>1?{ok:!1,reason:`or_logic`}:{ok:!0,rules:n}}var Qe={or_logic:`console.objectView.filterOrNotSavable`,nested_group:`console.objectView.filterNestedNotSavable`},$e=[`current_user`,`user`,`ctx`,`os`];function K(e,t){let n={data:e??{}};if(t)for(let e of $e)Object.prototype.hasOwnProperty.call(t,e)&&(n[e]=t[e]);return n.data=e??{},n}function et(e,t){return nt(e.visibleWhen,t)}function tt(e,t){return e.filter(e=>et(e,t))}function nt(e,t){if(e==null)return!0;let n=typeof e==`string`?e:e.source;if(!n)return!0;try{return _t(n.trim(),t,n)}catch(e){return e instanceof rt&&lt(e.path,n,t),!0}}var rt=class extends Error{path;constructor(e){super(`unresolved predicate path: ${e}`),this.path=e,this.name=`UnresolvedPathError`}},it=new Set,at=new Set,ot=new Set,st=new Set,ct=()=>!1;function lt(e,t,n){if(!ct())return;let r=`${e}::${t}`;if(it.has(r))return;it.add(r);let i=e.split(`.`)[0],a=Object.keys(n).sort().map(e=>`\`${e}\``).join(`, `);console.warn(`[metadata-admin] visibility predicate \`${t}\` references \`${e}\`, but \`${i}\` is not a name in this form's evaluation scope — the names here are ${a} (\`data\` is the current draft; the identity roots are bound only under a host \`ExpressionProvider\`). The predicate was treated as TRUE (fail-open) so the field stays visible instead of disappearing without a trace; check the spelling — draft values are addressed as \`data.<field>\` (e.g. \`data.type in [...]\`) and the signed-in user as \`current_user.<field>\`. A predicate served by an older backend is the usual cause (objectstack#6254 re-spelled the bare \`objectForm\` predicates; objectstack#6936).`)}var ut=/^[A-Za-z_$][A-Za-z0-9_$]*(?:\.[A-Za-z_$][A-Za-z0-9_$]*)*$/;function dt(e,t){if(!ct())return;let n=`${e}::${t}`;at.has(n)||(at.add(n),console.warn(`[metadata-admin] visibility predicate \`${t}\` compares against \`${e}\`, which looks like a path but is being used as the literal string "${e}" — this evaluator resolves paths only on the LEFT of \`==\` / \`!=\`; the right-hand side is always a literal (supported subset: \`path == 'literal'\`). So \`data.a == data.b\` is FALSE even when both sides hold the same value, and \`data.a != data.b\` is TRUE — the verdict does not depend on the right-hand path at all. If you meant the text, quote it (\`== 'text'\`). If you meant to compare two paths, that is outside this evaluator's subset: it is an interim stand-in for \`@objectstack/formula\` until CEL lands (ROADMAP M9), and predicate expressions are validated at publish time (objectstack#7010). objectui#4049.`))}function ft(e){let t=e.slice(1,-1);if(!t.trim())return null;for(let e of vt(t,`,`)){let t=e.trim();if(t)try{let e=t.replace(/'([^']*)'/g,(e,t)=>JSON.stringify(t));JSON.parse(e)}catch{return t}}return null}function pt(e,t){if(!ct())return;let n=`${e}::${t}`;if(ot.has(n))return;ot.add(n);let r=ft(e);console.warn(`[metadata-admin] visibility predicate \`${t}\` has an \`in\` set \`${e}\``+(r==null?`, which this evaluator could not parse — `:` containing \`${r}\`, which is not a literal this evaluator can parse — `)+"the WHOLE set was treated as EMPTY, so the predicate is FALSE for every row (not just the element that failed — one bad element discards the good literals next to it too). This evaluator only supports literal elements inside `in [...]` (supported subset: `path in ['a','b']`); it does not resolve paths there — paths resolve only on the LEFT of an operator (objectui#4049). If you meant a literal, quote it. If you meant to test membership against another field, that is outside this evaluator's subset: it is an interim stand-in for `@objectstack/formula` until CEL lands (ROADMAP M9), and predicate expressions are validated at publish time (objectstack#7010). objectui#4266.")}var mt=` in `;function ht(e){return vt(e,mt).length>1}function gt(e,t){if(!ct())return;let n=`${e}::${t}`;st.has(n)||(st.add(n),console.warn(`[metadata-admin] visibility predicate \`${t}\` spells a membership test \`${e}\` whose right-hand side is not a bracketed literal set. This evaluator matches \`in\` ONLY against a bracketed set of literals (supported subset: \`path in ['a','b']\`), so this text was never treated as a membership test at all — it fell through every operator branch to a BARE TRUTHY check of the whole string, and the verdict has nothing to do with the membership that was written. With a quoted left side — ADR-0068's own headline example \`'admin' in current_user.positions\` — the whole text comes back verbatim as a non-empty string, so the predicate reads TRUE for EVERY user and a gate meant for admins is open to everyone; with a path-shaped left side it reads FALSE for every row instead. There is no working spelling of this form on this surface: a path on the RIGHT of \`in\` CANNOT be written here today. Paths resolve only on the LEFT of an operator (objectui#4049) and the right of \`in\` must be a literal set spelled out in the predicate itself, so testing membership against a value the draft or the signed-in user holds is outside this evaluator's subset and cannot be expressed — not with different punctuation, not with a different spelling, not at all. This evaluator is an interim stand-in for \`@objectstack/formula\` until CEL lands (ROADMAP M9), and predicate expressions are validated at publish time (objectstack#7010). objectui#6617.`))}function _t(e,t,n){let r=vt(e,`||`);if(r.length>1)return r.some(e=>_t(e.trim(),t,n));let i=vt(e,`&&`);if(i.length>1)return i.every(e=>_t(e.trim(),t,n));if(e.startsWith(`!`))return!_t(e.slice(1).trim(),t,n);let a=e.match(/^(.+?)\s+in\s+(\[.*\])$/);if(a){let e=yt(a[1].trim(),t,n),r=bt(a[2],n);return Array.isArray(r)&&r.includes(e)}let o=e.match(/^(.+?)\s*(==|!=)\s*(.+)$/);if(o){let e=yt(o[1].trim(),t,n),r=bt(o[3].trim(),n),i=e=>e==null,a=i(e)&&i(r)?!0:e===r;return o[2]===`==`?a:!a}return ht(e)&&gt(e,n),!!yt(e,t,n)}function vt(e,t){let n=[],r=0,i=null,a=``;for(let o=0;o<e.length;o++){let s=e[o];if(i){a+=s,s===i&&e[o-1]!==`\\`&&(i=null);continue}if(s===`'`||s===`"`){i=s,a+=s;continue}if(s===`(`||s===`[`?r++:(s===`)`||s===`]`)&&r--,r===0&&e.slice(o,o+t.length)===t&&e[o+t.length]!==`=`){n.push(a),a=``,o+=t.length-1;continue}a+=s}return a&&n.push(a),n}function yt(e,t,n){if(/^['"]/.test(e)||/^-?\d/.test(e)||e===`true`||e===`false`||e===`null`)return bt(e,n);let r=e.split(`.`);if(!Object.prototype.hasOwnProperty.call(t,r[0]))throw new rt(e);let i=t;for(let e of r){if(i==null)return;i=i[e]}return i}function bt(e,t){let n=e.trim();if(n===`true`)return!0;if(n===`false`)return!1;if(n===`null`)return null;if(/^-?\d+(\.\d+)?$/.test(n))return Number(n);if(n.startsWith(`'`)&&n.endsWith(`'`)||n.startsWith(`"`)&&n.endsWith(`"`))return n.slice(1,-1);if(n.startsWith(`[`)&&n.endsWith(`]`))try{let e=n.replace(/'([^']*)'/g,(e,t)=>JSON.stringify(t));return JSON.parse(e)}catch{return pt(n,t),[]}return ut.test(n)&&dt(n,t),n}var xt=[{value:`default`,label:`Default`,css:`#9ca3af`},{value:`blue`,label:`Blue`,css:`#3b82f6`},{value:`teal`,label:`Teal`,css:`#14b8a6`},{value:`orange`,label:`Orange`,css:`#f97316`},{value:`purple`,label:`Purple`,css:`#a855f7`},{value:`success`,label:`Success`,css:`#22c55e`},{value:`warning`,label:`Warning`,css:`#f59e0b`},{value:`danger`,label:`Danger`,css:`#ef4444`},{value:`green`,label:`Green`,css:`#22c55e`},{value:`red`,label:`Red`,css:`#ef4444`},{value:`amber`,label:`Amber`,css:`#f59e0b`}],St=Object.fromEntries(xt.map(e=>[e.value,e.css]));function Ct(e){return e?/^#([0-9a-f]{3}|[0-9a-f]{6})$/i.test(e)?e:St[e]??`#9ca3af`:`#9ca3af`}function wt({value:e,onChange:t,disabled:n,options:r,required:i,ariaLabelledBy:a,ariaLabel:o}){let s=r?r.map(e=>({value:e.value,label:e.label??e.value,css:Ct(e.value)})):xt.slice(0,8),c=e??`default`;return(0,G.jsx)(`div`,{className:`flex flex-wrap gap-1.5`,role:`radiogroup`,"aria-labelledby":a,"aria-label":o,"aria-required":i?!0:void 0,children:s.map(e=>{let r=c===e.value;return(0,G.jsx)(`button`,{type:`button`,role:`radio`,"aria-checked":r,"aria-label":e.label,title:e.label,disabled:n,onClick:()=>t(e.value),className:A(`flex h-7 w-7 items-center justify-center rounded-full border transition-all`,r?`border-transparent ring-2 ring-foreground/60 ring-offset-1 ring-offset-background`:`border-border hover:scale-110`,n&&`cursor-not-allowed opacity-50`),children:(0,G.jsx)(`span`,{className:`h-4 w-4 rounded-full`,style:{backgroundColor:e.css}})},e.value)})})}function Tt(e,t){let n=_e(),[r,i]=W.useState({fields:[],loading:!t&&!!e,error:null});return W.useEffect(()=>{if(t){i({fields:t,loading:!1,error:null});return}if(!e){i({fields:[],loading:!1,error:null});return}let r=!1;return i(e=>({...e,loading:!0,error:null})),n.get(`object`,e).then(e=>{if(r)return;if(!e){i({fields:[],loading:!1,error:`Object not found`});return}let t=Oe(e.fields).entries.map(e=>({name:e.name,label:typeof e.def.label==`string`&&e.def.label?e.def.label:e.name,type:typeof e.def.type==`string`?e.def.type:`text`,hidden:e.def.hidden===!0,...e.def.required===!0?{required:!0}:{}}));i({fields:t,loading:!1,error:null})}).catch(e=>{r||i({fields:[],loading:!1,error:e?.message??String(e)})}),()=>{r=!0}},[n,e,t]),r}var Et=null;function Dt(){return Et||=t(()=>import(`./vendor-objectstack-XuWC71M9.js`).then(e=>e.ut).then(e=>e),[],import.meta.url).catch(()=>null),Et}var Ot=[`record`,``],kt=[`current_user`,`user`],At=null,jt=null;function Mt(){return jt||=t(()=>import(`./dist-BXrEV1ag.js`).then(e=>{let t=e?.fieldRuleRootIssue;return typeof t==`function`?t:null}),[],import.meta.url).catch(()=>null),jt}var Nt=[`visibleWhen`,`readonlyWhen`,`requiredWhen`];function Pt(){return At||=t(async()=>{let{detectNonCanonicalRowSpelling:e}=await import(`./framework-DcWkeiND.js`).then(e=>e.It);return{detectNonCanonicalRowSpelling:e}},[],import.meta.url).then(({detectNonCanonicalRowSpelling:e})=>({detectNonCanonicalRowSpelling:e})).catch(()=>null),At}async function Ft(e,t){if(t!==void 0&&Nt.includes(t)){let n=await Mt();if(n){let r=n(t,e);return r?{severity:`warning`,message:r.message}:null}}let n=(await Pt())?.detectNonCanonicalRowSpelling?.(e,null,!0);return!n||n.kind!==`metadata-layer-root`?null:{severity:`warning`,messageKey:`engine.celLint.notTheRow`,messageVars:{identifier:n.identifier,canonical:n.canonical}}}async function It(e,t={}){if(!e||!e.trim())return[];try{let n=await Dt();if(!n?.validateExpression)return[];let r=n.validateExpression(t.role??`predicate`,e,{objectName:t.objectName,fields:t.fields,scope:t.scope??`flattened`}),i=[];for(let e of r?.errors??[])e?.message&&i.push({severity:`error`,message:e.message});for(let e of r?.warnings??[])e?.message&&i.push({severity:`warning`,message:e.message});if(i.every(e=>e.severity!==`error`)&&t.clause===`using`&&n.isPushdownableCel)try{let t=n.isPushdownableCel(e,{fieldRoots:Ot,variableRoots:kt});t&&t.ok===!1&&t.reason!==`parse-error`&&i.push({severity:`warning`,messageKey:`engine.celLint.notPushdownable`,messageVars:{detail:t.detail}})}catch{}if(i.every(e=>e.severity!==`error`)&&t.scope===`record`)try{let n=await Ft(e,t.slot);n&&i.push(n)}catch{}return i}catch{return[]}}var Lt=[`number`,`text`,`boolean`,`date`,`unknown`];async function Rt(e,t={}){if(!e||!e.trim())return null;try{let n=await Dt();if(!n?.inferExpressionType)return null;let r=n.inferExpressionType(e,{objectName:t.objectName,fields:t.fields,scope:t.scope??`record`});return Lt.includes(r)?r:`unknown`}catch{return null}}async function zt(e={}){let t={fields:e.fields??[],roots:e.roots??[],functions:[]};try{let n=await Dt();if(!n?.introspectScope)return t;let r=n.introspectScope(e.role??`predicate`,{objectName:e.objectName,fields:e.fields,scope:e.scope??`flattened`});return{fields:r?.fields??e.fields??[],roots:e.roots??r?.roots??[],functions:r?.functions??[]}}catch{return t}}var Bt=/[A-Za-z0-9_$]/,Vt=/[A-Za-z_$]/;function Ht(e,t){let n=t;for(;n>0&&Bt.test(e[n-1]);)n--;if(n===t)return null;let r=e.slice(n,t);return!Vt.test(r[0])||n>0&&e[n-1]===`.`?null:{start:n,end:t,text:r}}function Ut(e,t){let n=t;for(;n>0&&Bt.test(e[n-1]);)n--;let r=e.slice(n,t);if(r&&!Vt.test(r[0])||n===0||e[n-1]!==`.`)return null;let i=n-1;for(;i>0&&Bt.test(e[i-1]);)i--;let a=e.slice(i,n-1);return!a||!Vt.test(a[0])||i>0&&e[i-1]===`.`?null:{root:a,start:n,end:t,text:r}}function Wt(e){let t=new Set,n=[],r=(e,r)=>{e&&!t.has(e)&&(t.add(e),n.push({label:e,kind:r}))};return e.fields.forEach(e=>r(e,`field`)),e.roots.forEach(e=>r(e,`root`)),e.functions.forEach(e=>r(e,`function`)),n}function Gt(e,t,n=!1){let r=t.toLowerCase();if(!r&&!n)return[];let i=[];for(let t of e){let e=t.label.toLowerCase();if(e.startsWith(r)&&e!==r&&i.push(t),i.length>=8)break}return i}async function Kt(e,t){if(!e||!e.trim())return{status:`error`,kind:`parse`,messageKey:`engine.celTest.predicateEmpty`};let n;try{n=await Dt()}catch{return{status:`unavailable`}}if(!n?.ExpressionEngine?.evaluate)return{status:`unavailable`};try{let r=t.record??{},i=t.currentUser??{},a={record:r,extra:{...r,record:r,current_user:i,user:i}},o=n.ExpressionEngine.evaluate({dialect:`cel`,source:e},a);if(!o||o.ok!==!0){let e=o&&o.ok===!1?o.error:void 0,t=e?.kind??`runtime`;return e?.message==null?{status:`error`,kind:t,messageKey:`engine.flowSim.note.evaluationFailed`}:{status:`error`,kind:t,message:e.message}}return o.value===!0?{status:`allow`}:o.value===!1?{status:`deny`}:{status:`value`,value:o.value}}catch(e){return{status:`error`,kind:`runtime`,message:e?.message??String(e)}}}var qt=250,Jt={field:`field`,root:`scope`,function:`fn`},Yt=new Set([`record`,`previous`]),Xt=[];function Zt(e,t){if(e.messageKey===void 0)return e.message;let n=e.messageVars;return t(e.messageKey).replace(/\{(\w+)\}/g,(e,t)=>t in n?n[t]:e)}function Qt({value:e,onChange:t,disabled:n,placeholder:r,label:i,objectName:a,fieldNames:o=Xt,clause:s,scope:c,roots:l,slot:u,role:d,onLintChange:f,onInferredTypeChange:p,t:m,id:h}){let g=W.useId(),_=h??g,v=W.useRef(null),[y,b]=W.useState([]),[x,S]=W.useState(!1),[C,w]=W.useState(null),[T,E]=W.useState(null),[k,j]=W.useState(!1),[M,N]=W.useState([]),[P,F]=W.useState(0),I=W.useRef(null),L=W.useRef(null),ee=o.join(`,`),te=l?l.join(`,`):``,R=W.useRef(f),ne=W.useRef(p);W.useEffect(()=>{R.current=f,ne.current=p}),W.useEffect(()=>{let t=!1,n=setTimeout(()=>{let n={objectName:a,fields:o,clause:s,scope:c,slot:u,role:d};It(e,n).then(e=>{t||(b(e),S(!0),R.current?.(e))}),d===`value`&&Rt(e,n).then(e=>{t||(w(e),ne.current?.(e))})},qt);return()=>{t=!0,clearTimeout(n)}},[e,a,ee,s,c,u,d]),W.useEffect(()=>{e.trim()||(b([]),S(!1),w(null),R.current?.([]),d===`value`&&ne.current?.(null))},[e]),W.useEffect(()=>{let e=!1;return zt({objectName:a,fields:o,scope:c,roots:l}).then(t=>{e||E(t)}),()=>{e=!0}},[a,ee,c,te]);let re=W.useMemo(()=>T?Wt(c===`record`?{...T,fields:[]}:T):[],[T,c]),ie=W.useMemo(()=>T?T.fields.map(e=>({label:e,kind:`field`})):[],[T]);W.useEffect(()=>{if(L.current!=null&&v.current){let e=L.current;L.current=null,v.current.setSelectionRange(e,e)}},[e]);let z=W.useCallback(()=>{j(!1),N([]),I.current=null},[]),se=W.useCallback(()=>{let e=v.current;if(!e||n)return z();let t=e.value,r=e.selectionStart??t.length,i=null,a=[],o=Ht(t,r);if(o)i=o,a=Gt(re,o.text);else{let e=Ut(t,r);e&&Yt.has(e.root)&&(i=e,a=Gt(ie,e.text,!0))}if(!i||!a.length)return z();I.current={start:i.start,end:i.end},N(a),F(0),j(!0)},[re,ie,n,z]),ce=W.useCallback(e=>{let n=I.current,r=v.current;if(!n||!r)return;let i=r.value,a=e.kind===`function`?`${e.label}(`:e.label,o=i.slice(0,n.start)+a+i.slice(n.end);L.current=n.start+a.length,z(),t(o)},[t,z]),le=W.useRef(se);W.useEffect(()=>{le.current=se},[se]),W.useEffect(()=>{v.current&&document.activeElement===v.current&&le.current()},[re,ie]);let ue=e=>{k&&M.length!==0&&(e.key===`ArrowDown`?(e.preventDefault(),F(e=>(e+1)%M.length)):e.key===`ArrowUp`?(e.preventDefault(),F(e=>(e-1+M.length)%M.length)):e.key===`Enter`||e.key===`Tab`?(e.preventDefault(),ce(M[P])):e.key===`Escape`&&(e.preventDefault(),z()))},B=y.filter(e=>e.severity===`error`),de=y.filter(e=>e.severity===`warning`),fe=x&&!!e.trim()&&y.length===0,me=d===`value`&&x&&!!e.trim()&&B.length===0&&C!==null,ge=`${_}-ac`;return(0,G.jsxs)(`div`,{children:[(0,G.jsx)(O,{className:`text-[10px] uppercase text-muted-foreground`,htmlFor:_,children:i}),(0,G.jsxs)(`div`,{className:`relative`,children:[(0,G.jsx)(D,{ref:v,id:_,value:e,disabled:n,rows:2,placeholder:r,spellCheck:!1,autoComplete:`off`,role:`combobox`,"aria-expanded":k,"aria-autocomplete":`list`,"aria-controls":k?ge:void 0,"aria-invalid":B.length>0||void 0,onChange:e=>{t(e.target.value),se()},onKeyDown:ue,onClick:se,onBlur:()=>{window.setTimeout(()=>z(),120)},className:A(`font-mono text-xs`,B.length>0&&`border-destructive focus-visible:ring-destructive/40`)}),k&&M.length>0&&(0,G.jsx)(`ul`,{id:ge,role:`listbox`,"aria-label":m(`perm.cel.suggestions`),className:`absolute z-50 mt-1 max-h-48 w-72 overflow-auto rounded-md border bg-popover p-1 text-popover-foreground shadow-md`,children:M.map((e,t)=>(0,G.jsxs)(`li`,{role:`option`,"aria-selected":t===P,onMouseDown:t=>{t.preventDefault(),ce(e)},onMouseEnter:()=>F(t),className:A(`flex cursor-pointer items-center justify-between gap-2 rounded-sm px-2 py-1 text-xs`,t===P?`bg-accent text-accent-foreground`:`hover:bg-accent/60`),children:[(0,G.jsx)(`span`,{className:`font-mono`,children:e.label}),(0,G.jsx)(`span`,{className:`text-[10px] uppercase text-muted-foreground`,children:Jt[e.kind]})]},`${e.kind}:${e.label}`))})]}),(B.length>0||de.length>0)&&(0,G.jsxs)(`ul`,{className:`mt-1 space-y-1`,"aria-live":`polite`,children:[B.map((e,t)=>(0,G.jsxs)(`li`,{className:`flex items-start gap-1.5 text-[11px] text-destructive`,children:[(0,G.jsx)(ae,{className:`mt-[1px] h-3 w-3 shrink-0`}),(0,G.jsx)(`span`,{children:Zt(e,m)})]},`e${t}`)),de.map((e,t)=>(0,G.jsxs)(`li`,{className:`flex items-start gap-1.5 text-[11px] text-amber-600 dark:text-amber-500`,children:[(0,G.jsx)(he,{className:`mt-[1px] h-3 w-3 shrink-0`}),(0,G.jsx)(`span`,{children:Zt(e,m)})]},`w${t}`))]}),fe&&(0,G.jsxs)(`p`,{className:`mt-1 flex items-center gap-1.5 text-[11px] text-muted-foreground`,children:[(0,G.jsx)(oe,{className:`h-3 w-3 shrink-0 text-emerald-600 dark:text-emerald-500`}),m(`perm.cel.valid`)]}),me&&(0,G.jsxs)(`p`,{className:`mt-1 flex items-start gap-1.5 text-[11px] text-muted-foreground`,"aria-live":`polite`,children:[(0,G.jsx)(pe,{className:`mt-[1px] h-3 w-3 shrink-0`}),(0,G.jsxs)(`span`,{children:[m(`perm.cel.type`),` `,(0,G.jsx)(`span`,{className:A(`font-medium`,C!==`unknown`&&`text-foreground`),children:m(`perm.cel.type.${C}`)}),C===`unknown`&&(0,G.jsxs)(G.Fragment,{children:[` — `,m(`perm.cel.type.unknownHint`)]})]})]})]})}var $t=[{value:`==`,labelKey:`engine.inspector.condition.op.equals`},{value:`!=`,labelKey:`engine.inspector.condition.op.notEquals`},{value:`>`,labelKey:`engine.inspector.condition.op.greaterThan`},{value:`<`,labelKey:`engine.inspector.condition.op.lessThan`},{value:`>=`,symbol:`≥`},{value:`<=`,symbol:`≤`},{value:`truthy`,labelKey:`engine.inspector.condition.op.truthy`},{value:`falsy`,labelKey:`engine.inspector.condition.op.falsy`}],en=[{value:`record.id`,label:`record.id`},{value:`user.id`,label:`user.id`},{value:`user.email`,label:`user.email`},{value:`user.role`,label:`user.role`},{value:`user.isAdmin`,label:`user.isAdmin`}],tn=e=>e.replace(/\s+/g,` `).trim(),nn=RegExp(`^(?:${[`record`,`previous`,`parent`,`user`,`current_user`,`org`].join(`|`)})(?:\\.[A-Za-z_][A-Za-z0-9_]*)+$`),rn=[`record`,`previous`],an=[`record`,`current_user`,`user`,`ctx`,`os`,`features`],on=new Set([`true`,`false`,`null`,`in`]),sn=/'(?:\\.|[^'\\])*'|"(?:\\.|[^"\\])*"/g,cn=/[A-Za-z_][A-Za-z0-9_]*(?:\.[A-Za-z_][A-Za-z0-9_]*)*/g;function ln(e){let t=e.replace(sn,` `),n=new Set;for(let e of t.match(cn)??[]){let t=e.split(`.`)[0];on.has(t)||n.add(t)}return[...n]}var un=[`record.status != 'done'`,`user.isAdmin`];function dn(e){return(e?un.filter(t=>ln(t).every(t=>e.includes(t))):[...un]).join(` && `)}var fn=[{value:`record.id`,label:`record.id`}];function pn(e,t=`'`){let n=e.trim();return n===`true`||n===`false`||n===`null`||n!==``&&!Number.isNaN(Number(n))||nn.test(n)?n:`${t}${t===`'`?n.replace(/'/g,`\\'`):n.replace(/"/g,`\\"`)}${t}`}function mn(e){let t=e.trim(),n=/^'(.*)'$/.exec(t);if(n)return{value:n[1].replace(/\\'/g,`'`),quote:`'`};let r=/^"(.*)"$/.exec(t);return r?{value:r[1].replace(/\\"/g,`"`),quote:`"`}:{value:t}}function hn(e,t){return e.filter(e=>e.subject).map(e=>e.op===`truthy`?e.subject:e.op===`falsy`?`!${e.subject}`:`${e.subject} ${e.op} ${pn(e.value,e.quote)}`).join(` ${t} `)}function gn(e){let t=tn(e);if(!t)return{rows:[],join:`&&`};let n=t.includes(`&&`),r=t.includes(`||`);if(n&&r)return null;let i=r?`||`:`&&`,a=t.split(r?`||`:`&&`).map(e=>e.trim()),o=[];for(let e of a){let t=/^([a-zA-Z_][\w.]*)\s*(==|!=|>=|<=|>|<)\s*(.+)$/.exec(e);if(t){let e=mn(t[3]);o.push({subject:t[1],op:t[2],value:e.value,quote:e.quote});continue}let n=/^!\s*([a-zA-Z_][\w.]*)$/.exec(e);if(n){o.push({subject:n[1],op:`falsy`,value:``});continue}let r=/^([a-zA-Z_][\w.]*)$/.exec(e);if(r){o.push({subject:r[1],op:`truthy`,value:``});continue}return null}return{rows:o,join:i}}function _n(e){let t=gn(e||``);return t&&tn(hn(t.rows,t.join))===tn(e||``)?{rows:t.rows,join:t.join,raw:!1}:{rows:[],join:`&&`,raw:!!e}}function vn({label:e,value:t,onCommit:n,objectName:r,fields:i,disabled:a,onBlockingIssuesChange:o,subjects:c,scope:l,roots:u}){let{fields:d}=Tt(r),f=i??d,m=c?.fieldPrefix??`record.`,h=c?.includePrevious??!1,g=c?.context??en,v=u??(l===`record`?rn:void 0),y=W.useMemo(()=>{let e=f.filter(e=>!e.hidden),t=e.map(e=>({value:`${m}${e.name}`,label:`${m}${e.name}`})),n=h?[{value:`previous`,label:`previous`},...e.map(e=>({value:`previous.${e.name}`,label:`previous.${e.name}`}))]:[],r=g.map(e=>({value:e.value,label:e.label??e.value}));return[...t,...n,...r]},[f,m,h,g]),b=V(),x=W.useCallback(e=>U(e,b),[b]),S=W.useMemo(()=>f.filter(e=>!e.hidden).map(e=>e.name),[f]),C=W.useMemo(()=>_n(t),[]),[T,E]=W.useState(C.rows),[D,k]=W.useState(C.join),[A,j]=W.useState(C.raw),M=W.useRef(t||``);W.useEffect(()=>{let e=t||``;if(e===M.current)return;M.current=e;let n=_n(e);E(n.rows),k(n.join),j(n.raw)},[t]);let I=(e,t)=>{let r=hn(e,t);M.current=r,n(r)},L=(e,t=D)=>{E(e),k(t),I(e,t)},[ee,te]=W.useState(0),R=W.useCallback(e=>{let t=e.filter(e=>e.severity===`error`).length;te(e=>e===t?e:t)},[]),ne=A?ee:0,re=W.useRef(o);W.useEffect(()=>{re.current=o}),W.useEffect(()=>{re.current?.(ne)},[ne]);let ie=hn(T,D);return A?(0,G.jsxs)(`div`,{className:`space-y-1`,children:[(0,G.jsxs)(`div`,{className:`flex items-center justify-between`,children:[e?(0,G.jsx)(O,{className:`text-xs text-muted-foreground`,children:e}):(0,G.jsx)(`span`,{}),(0,G.jsxs)(`button`,{type:`button`,disabled:a,onClick:()=>{let e=_n(t);(!t||!e.raw)&&(E(e.rows),k(e.join),j(!1))},className:`inline-flex items-center gap-1 text-[10px] text-muted-foreground hover:text-foreground disabled:opacity-50`,children:[(0,G.jsx)(ue,{className:`h-3 w-3`}),` `,x(`engine.inspector.condition.builder`)]})]}),(0,G.jsx)(Qt,{label:x(`engine.condition.celLabel`),value:t,onChange:e=>{M.current=e,n(e)},onLintChange:R,disabled:a,placeholder:dn(v),objectName:r,fieldNames:S,scope:l,roots:v,t:x}),t&&!gn(t)&&(0,G.jsx)(`div`,{className:`text-[10px] text-muted-foreground/70`,children:x(`engine.condition.advancedHint`)})]}):(0,G.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,G.jsxs)(`div`,{className:`flex items-center justify-between`,children:[e?(0,G.jsx)(O,{className:`text-xs text-muted-foreground`,children:e}):(0,G.jsx)(`span`,{}),(0,G.jsxs)(`button`,{type:`button`,disabled:a,onClick:()=>j(!0),className:`inline-flex items-center gap-1 text-[10px] text-muted-foreground hover:text-foreground disabled:opacity-50`,children:[(0,G.jsx)(z,{className:`h-3 w-3`}),` `,x(`engine.inspector.condition.expression`)]})]}),T.length===0?(0,G.jsx)(`p`,{className:`rounded-md border border-dashed bg-muted/30 px-3 py-2 text-center text-[11px] text-muted-foreground`,children:x(`engine.inspector.condition.always`)}):(0,G.jsx)(`div`,{className:`space-y-1.5`,children:T.map((e,t)=>(0,G.jsxs)(`div`,{className:`space-y-1 rounded-md border border-border p-1.5`,children:[t>0&&(0,G.jsx)(`div`,{className:`flex justify-center`,children:(0,G.jsxs)(s,{value:D,onValueChange:e=>L(T,e),disabled:a,children:[(0,G.jsx)(w,{className:`h-6 w-16 text-[10px]`,children:(0,G.jsx)(F,{})}),(0,G.jsxs)(p,{children:[(0,G.jsx)(_,{value:`&&`,children:x(`engine.inspector.condition.and`)}),(0,G.jsx)(_,{value:`||`,children:x(`engine.inspector.condition.or`)})]})]})}),(0,G.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,G.jsx)(`div`,{className:`min-w-0 flex-1`,children:(0,G.jsxs)(s,{value:e.subject,onValueChange:e=>L(T.map((n,r)=>r===t?{...n,subject:e}:n)),disabled:a,children:[(0,G.jsx)(w,{className:`h-7 text-xs`,children:(0,G.jsx)(F,{placeholder:x(`engine.inspector.condition.subjectPlaceholder`)})}),(0,G.jsxs)(p,{children:[y.map(e=>(0,G.jsx)(_,{value:e.value,children:e.label},e.value)),e.subject&&!y.some(t=>t.value===e.subject)&&(0,G.jsx)(_,{value:e.subject,children:e.subject})]})]})}),(0,G.jsx)(P,{type:`button`,variant:`ghost`,size:`icon`,className:`h-7 w-7 shrink-0`,disabled:a,"aria-label":x(`engine.inspector.condition.remove`),onClick:()=>L(T.filter((e,n)=>n!==t)),children:(0,G.jsx)(ge,{className:`h-3.5 w-3.5`})})]}),(0,G.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,G.jsx)(`div`,{className:`w-28 shrink-0`,children:(0,G.jsxs)(s,{value:e.op,onValueChange:e=>L(T.map((n,r)=>r===t?{...n,op:e}:n)),disabled:a,children:[(0,G.jsx)(w,{className:`h-7 text-xs`,children:(0,G.jsx)(F,{})}),(0,G.jsx)(p,{children:$t.map(e=>(0,G.jsx)(_,{value:e.value,children:`symbol`in e?e.symbol:x(e.labelKey)},e.value))})]})}),e.op!==`truthy`&&e.op!==`falsy`&&(0,G.jsx)(N,{className:`h-7 flex-1 text-xs`,value:e.value,placeholder:x(`engine.inspector.condition.valuePlaceholder`),disabled:a,onChange:e=>L(T.map((n,r)=>r===t?{...n,value:e.target.value}:n))})]})]},t))}),!a&&(0,G.jsxs)(P,{type:`button`,variant:`outline`,size:`sm`,onClick:()=>L([...T,{subject:``,op:`truthy`,value:``}]),children:[(0,G.jsx)(B,{className:`mr-1 h-3.5 w-3.5`}),` `,x(`engine.inspector.condition.add`)]}),ie&&(0,G.jsx)(`div`,{className:`rounded bg-muted/40 px-2 py-1 text-[10px] font-mono text-muted-foreground break-all`,children:ie})]})}function yn(e){return typeof e==`number`&&Number.isFinite(e)}function bn(e){let t=e.position;if(yn(t?.x)&&yn(t?.y))return{x:t.x,y:t.y};let n=e.ui;return yn(n?.x)&&yn(n?.y)?{x:n.x,y:n.y}:null}function xn(e){return bn(e)!==null}function Sn(e){return e.some(e=>e&&`ui`in e)?e.map(e=>{if(!e||!(`ui`in e))return e;let{ui:t,...n}=e,r=bn(e);return r?{...n,position:r}:n}):e}function Cn(e){if(!e||typeof e!=`object`)return null;let t=e;return!Array.isArray(t.nodes)||t.nodes.length===0?null:{nodes:t.nodes,edges:Array.isArray(t.edges)?t.edges:[]}}function wn(e){let t=e.config??{};switch(e.type){case`loop`:{let e=Cn(t.body);return e?[{key:`body`,label:void 0,...e}]:[]}case`parallel`:{let e=[];return(Array.isArray(t.branches)?t.branches:[]).forEach((t,n)=>{let r=Cn(t);if(!r)return;let i=t.name;e.push({key:`branch-${n}`,label:typeof i==`string`&&i?i:`Branch ${n+1}`,...r})}),e}case`try_catch`:{let e=[],n=Cn(t.try);n&&e.push({key:`try`,label:`Try`,...n});let r=Cn(t.catch);return r&&e.push({key:`catch`,label:`Catch`,...r}),e}default:return[]}}function Tn(e,t,n=()=>66){let r=new Map,i=new Map(e.map(e=>[e.id,n(e)]));if(e.length===0)return{positions:r,heights:i,size:{width:28,height:28}};let a=new Map(e.map(e=>[e.id,e])),o=new Map(e.map((e,t)=>[e.id,t])),s=new Map,c=new Map;for(let t of e)c.set(t.id,0);for(let e of t)a.has(e.source)&&a.has(e.target)&&e.source!==e.target&&(Mn(e)||(s.has(e.source)||s.set(e.source,[]),s.get(e.source).push(e.target),c.set(e.target,(c.get(e.target)??0)+1)));let l=[];for(let t of e)t.type===`start`&&l.push(t.id);for(let t of e)(c.get(t.id)??0)===0&&!l.includes(t.id)&&l.push(t.id);l.length===0&&l.push(e[0].id);let u=new Map,d=[];for(let e of l)u.set(e,0),d.push(e);let f=e.length*Math.max(1,t.length)+e.length+1,p=0;for(;d.length&&p<f;){p+=1;let e=d.shift(),t=u.get(e)??0;for(let n of s.get(e)??[]){let e=t+1;(u.get(n)??-1)<e&&(u.set(n,e),d.push(n))}}let m=0;for(let e of u.values())m=Math.max(m,e);for(let t of e)u.has(t.id)||(m+=1,u.set(t.id,m));let h=new Map;for(let t of e){let e=u.get(t.id)??0;h.has(e)||h.set(e,[]),h.get(e).push(t.id)}for(let e of h.values())e.sort((e,t)=>(o.get(e)??0)-(o.get(t)??0));let g=[...h.keys()].sort((e,t)=>e-t),_=0,v;for(let e of g){v!==void 0&&(_+=(e-v-1)*122);let t=h.get(e),n=-(t.length*240+(t.length-1)*44)/2,o=66;t.forEach((e,t)=>{r.set(e,{x:n+t*284,y:_});let s=a.get(e);s&&!xn(s)&&(o=Math.max(o,i.get(e)??66))}),_+=o+56,v=e}let y=1/0,b=1/0;for(let e of r.values())y=Math.min(y,e.x),b=Math.min(b,e.y);if(Number.isFinite(y)&&Number.isFinite(b)){let e=28-y,t=28-b;for(let[n,i]of r)r.set(n,{x:i.x+e,y:i.y+t})}for(let t of e){let e=bn(t);e&&r.set(t.id,{x:Math.max(0,e.x),y:Math.max(0,e.y)})}let x=0,S=0;for(let[e,t]of r)x=Math.max(x,t.x+240),S=Math.max(S,t.y+(i.get(e)??66));return{positions:r,heights:i,size:{width:x+28,height:S+28}}}function En(e,t){return Tn(e,t).positions}function Dn(e){let t=0,n=0;for(let r of e.values())t=Math.max(t,r.x+240),n=Math.max(n,r.y+66);return{width:t+28,height:n+28}}function On(e,t=66){return{x:e.x+120,y:e.y+t}}function kn(e){return{x:e.x+120,y:e.y}}function An(e,t){let n=Math.max(Math.abs(t.y-e.y)*.5,24),r={x:e.x,y:e.y+n},i={x:t.x,y:t.y-n};return`M ${e.x},${e.y} C ${r.x},${r.y} ${i.x},${i.y} ${t.x},${t.y}`}function jn(e,t){return{x:(e.x+t.x)/2,y:(e.y+t.y)/2}}function Mn(e){return e.type===`back`}function Nn(e){return{x:e.x+240,y:e.y+33}}function Pn(e,t){return Math.max(64,Math.abs(t.y-e.y)*.35)}function Fn(e,t){let n=Pn(e,t),r={x:e.x+n,y:e.y},i={x:t.x+n,y:t.y};return`M ${e.x},${e.y} C ${r.x},${r.y} ${i.x},${i.y} ${t.x},${t.y}`}function In(e,t){let n=Pn(e,t);return{x:Math.max(e.x,t.x)+n*.75,y:(e.y+t.y)/2}}function Ln(e,t){return e.id||`${e.source}->${e.target}#${t}`}function Rn(e){if(e){if(typeof e==`string`)return e;if(typeof e==`object`&&typeof e.source==`string`)return e.source}}function zn(e){return Rn(e)??``}function Bn(e){if(e&&typeof e==`object`&&!Array.isArray(e))return typeof e.dialect==`string`?e:void 0}function Vn(e,t){if(!t)return;let n=Bn(e);if(!n)return t;let r={...n,source:t};return delete r.ast,r}var Hn=new Set([`object`,`object-field`,`flow`,`org-membership-level`,`position`,`node`,`user`,`team`,`queue`,`department`,`manager`,`connector`,`email-template`]);function Un(e){if(!e||typeof e!=`object`)return;let t=e;if(t.source===`data`)return typeof t.object==`string`&&t.object&&typeof t.valueField==`string`&&t.valueField?{source:`data`,object:t.object,valueField:t.valueField}:void 0;if(t.source===`enum`){let e=Array.isArray(t.values)?t.values.filter(e=>typeof e==`string`):[];return e.length?{source:`enum`,values:e}:void 0}if(t.source===`auto`||t.source===`trigger-field`||t.source===`expression`||t.source===`unsupported`)return{source:t.source}}function Wn(e){if(!e||typeof e!=`object`)return;let t={};for(let[n,r]of Object.entries(e)){let e=Un(r);e&&(t[n]=e)}return Object.keys(t).length?t:void 0}function Gn(e){let t=e.xRef;if(!t||typeof t!=`object`)return;let n=typeof t.objectSource==`string`&&t.objectSource?{objectSource:t.objectSource}:{};if(typeof t.kindFrom==`string`&&t.kindFrom&&t.map&&typeof t.map==`object`){let e={};for(let[n,r]of Object.entries(t.map))typeof r==`string`&&Hn.has(r)&&(e[n]=r);if(Object.keys(e).length===0)return;let r=Wn(t.sources);return{kindFrom:t.kindFrom,map:e,...n,...r?{sources:r}:{}}}if(typeof t.kind==`string`&&Hn.has(t.kind))return{kind:t.kind,...n}}function Kn(e){let t=e.replace(/[_-]+/g,` `).replace(/([a-z0-9])([A-Z])/g,`$1 $2`).trim();return t?t.split(/\s+/).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(` `):e}function q(e){return!!e&&typeof e==`object`&&!Array.isArray(e)}function qn(e){if(Array.isArray(e.type))return e.type.find(e=>e!==`null`);if(typeof e.type==`string`)return e.type;if(Array.isArray(e.enum))return`string`;if(e.properties)return`object`;if(e.items)return`array`}function Jn(e,t){let n=new Set((t??[]).filter(e=>typeof e==`string`));return e.filter(e=>typeof e==`string`).filter(e=>!n.has(e)).map(e=>({value:e,label:Kn(e)}))}function Yn(e){if(e.default!==void 0&&e.default!==null){if(typeof e.default==`boolean`||typeof e.default==`number`)return String(e.default);if(typeof e.default==`string`)return e.default}}function Xn(e){return e.xExpression===`expression`||e.xExpression===`template`?e.xExpression:void 0}function Zn(e){if(Array.isArray(e.enum))return{kind:`select`};let t=qn(e);if(t===`boolean`)return{kind:`boolean`};if(t===`number`||t===`integer`)return{kind:`number`};if(t===`string`){let t=e.format===`multiline`,n=Xn(e);return n===`expression`?t?{kind:`textarea`,refMode:`expression`}:{kind:`expression`}:n===`template`?t?{kind:`textarea`,refMode:`template`}:{kind:`expression`,refMode:`template`}:{kind:t?`textarea`:`text`}}}var Qn=4;function $n(e,t){let n=q(e.items)?e.items:void 0,r=n?qn(n):void 0;return n&&r===`object`&&q(n.properties)?t>=Qn?null:{kind:`objectList`,columns:er(n,t+1)}:r===`string`?{kind:`stringList`}:r===`number`||r===`integer`?{kind:`numberList`}:null}function er(e,t=0){let n=e.properties??{},r=[];for(let[e,i]of Object.entries(n)){if(!q(i))continue;let n=qn(i);if(n===`array`){let n=$n(i,t);if(n){r.push({key:e,label:i.title||Kn(e),kind:n.kind,...n.columns?{columns:n.columns}:{},...i.description?{placeholder:i.description}:{}});continue}}let a,o,s=Gn(i);s?a=`reference`:Array.isArray(i.enum)?(a=`select`,o=Jn(i.enum,i.xEnumDeprecated)):a=n===`boolean`?`boolean`:Xn(i)===`expression`?`expression`:`text`,r.push({key:e,label:i.title||Kn(e),kind:a,...o?{options:o}:{},...s?{ref:s}:{},...i.description?{placeholder:i.description}:{}})}return r}function tr(e,t){return{label:e.title||Kn(t),...e.description?{help:e.description}:{},...Yn(e)?{defaultValue:Yn(e)}:{}}}function nr(e){if(!q(e)||qn(e)!==`object`||!q(e.properties))return null;let t=[];for(let[n,r]of Object.entries(e.properties)){if(!q(r))continue;let e=qn(r);if(e===`array`){let e=q(r.items)?r.items:void 0,i=e?qn(e):void 0;e&&i===`object`&&q(e.properties)?t.push({id:n,path:[`config`,n],kind:`objectList`,columns:er(e),...tr(r,n)}):i===`string`?t.push({id:n,path:[`config`,n],kind:`stringList`,...tr(r,n)}):(i===`number`||i===`integer`)&&t.push({id:n,path:[`config`,n],kind:`numberList`,...tr(r,n)});continue}if(e===`object`&&q(r.properties)){let e=Object.entries(r.properties).filter(([,e])=>q(e)),i=e.some(([e,t])=>e===`enabled`&&qn(t)===`boolean`);for(let[a,o]of e){let e=o,s=Gn(e),c=s?void 0:Zn(e),l=s?`reference`:c?.kind;if(!l)continue;let u=`${n}.${a}`,d=i&&a===`enabled`,f={id:u,path:[`config`,n,a],kind:l,...d?{label:r.title||Kn(n),...r.description?{help:r.description}:{},...Yn(e)?{defaultValue:Yn(e)}:{}}:tr(e,a),...s?{ref:s}:{},...c?.refMode?{refMode:c.refMode}:{},...l===`select`&&Array.isArray(e.enum)?{options:Jn(e.enum,e.xEnumDeprecated)}:{},...i&&!d?{showWhen:{field:`${n}.enabled`,equals:[`true`]}}:{}};t.push(f)}continue}if(e===`object`&&r.additionalProperties!==void 0&&r.additionalProperties!==!1){t.push({id:n,path:[`config`,n],kind:`keyValue`,...tr(r,n)});continue}let i=Gn(r);if(i){t.push({id:n,path:[`config`,n],kind:`reference`,ref:i,...tr(r,n)});continue}let a=Zn(r);a&&t.push({id:n,path:[`config`,n],kind:a.kind,...tr(r,n),...a.refMode?{refMode:a.refMode}:{},...a.kind===`select`&&Array.isArray(r.enum)?{options:Jn(r.enum,r.xEnumDeprecated)}:{}})}return t}var J={status:`idle`};function Y(e,t){return e.status===`loaded`?e.data:t}function rr(e,t){return e.status===`loaded`?{status:`loaded`,data:t(e.data)}:e}function ir(e){return{status:`loaded`,data:e}}function ar(e){return{status:`error`,message:e}}function or(e){if(e instanceof Error&&e.message)return e.message;let t=e?.message;return typeof t==`string`&&t?t:String(e)}function sr(e,t){return e.status===`loaded`?e.data:t}function cr(e){return e.status===`loading`}function lr(e){return e.status===`error`?e.message:void 0}function ur(e){let[t,n]=W.useState(()=>e?{status:`loading`}:{status:`idle`});return W.useEffect(()=>{if(!e){n({status:`idle`});return}let t=!1;return n({status:`loading`}),(async()=>{try{let r=await e();t||n({status:`loaded`,data:r})}catch(e){t||n({status:`error`,message:or(e)})}})(),()=>{t=!0}},[e]),t}var dr=[],fr=[],pr=[],mr=[];function X({id:e,ariaLabelledBy:t,required:n}){return{id:e,"aria-labelledby":t,"aria-required":n?!0:void 0}}function Z({message:e,testId:t}){let n=V();return(0,G.jsxs)(`div`,{"data-testid":t,role:`status`,className:`rounded border border-amber-200 bg-amber-50 p-2 text-xs text-amber-900`,children:[(0,G.jsxs)(`div`,{className:`flex items-center gap-1.5 font-medium`,children:[(0,G.jsx)(he,{className:`h-3.5 w-3.5 shrink-0`}),U(`engine.form.optionsLoadFailedTitle`,n)]}),(0,G.jsx)(`p`,{className:`mt-1 text-amber-800`,children:U(`engine.form.optionsLoadFailedDesc`,n)}),e?(0,G.jsx)(`p`,{"data-testid":`${t}-cause`,className:`mt-1 max-w-full break-words font-mono text-[10px] text-amber-700`,children:e}):null]})}function hr({id:e,ariaLabelledBy:t,required:n,value:r,onChange:i,readOnly:a,context:o}){let c=V(),l=o?.objectNames??J,u=r==null?``:String(r);if(l.status===`error`)return(0,G.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,G.jsx)(Z,{message:l.message,testId:`ref-object-load-failed`}),(0,G.jsx)(N,{...X({id:e,ariaLabelledBy:t,required:n}),value:u,disabled:a,onChange:e=>i(e.target.value||void 0)})]});if(cr(l))return(0,G.jsx)(N,{...X({id:e,ariaLabelledBy:t,required:n}),value:u,disabled:!0,placeholder:U(`engine.form.loadingObjects`,c)});let d=Y(l,dr);return d.length===0?(0,G.jsx)(N,{...X({id:e,ariaLabelledBy:t,required:n}),value:u,disabled:a,onChange:e=>i(e.target.value||void 0),placeholder:U(`engine.form.noObjects`,c)}):(0,G.jsxs)(s,{value:u,onValueChange:e=>i(e||void 0),disabled:a,children:[(0,G.jsx)(w,{...X({id:e,ariaLabelledBy:t,required:n}),children:(0,G.jsx)(F,{placeholder:U(`engine.form.selectObject`,c)})}),(0,G.jsx)(p,{children:d.map(e=>(0,G.jsx)(_,{value:e,children:e},e))})]})}function gr(e){let t=[],n=new Set,r=e=>{if(!e||typeof e!=`object`)return;let r=e,a=r.id;typeof a==`string`&&a&&!n.has(a)&&(n.add(a),t.push({id:a,type:typeof r.type==`string`?r.type:void 0,label:typeof r.label==`string`?r.label:void 0})),i(r.components),i(r.children);let o=r.properties;o&&typeof o==`object`&&(i(o.components),i(o.children))},i=e=>{if(Array.isArray(e))for(let t of e)r(t)};if(e&&typeof e==`object`){let t=e.regions;if(Array.isArray(t))for(let e of t)e&&typeof e==`object`&&i(e.components)}return t}function _r({id:e,ariaLabelledBy:t,required:n,value:r,onChange:i,readOnly:a,context:o}){let c=V(),l=o?.componentIds??[],u=r==null?``:String(r);if(l.length===0)return(0,G.jsx)(N,{...X({id:e,ariaLabelledBy:t,required:n}),value:u,disabled:a,onChange:e=>i(e.target.value||void 0),placeholder:U(`engine.form.noComponents`,c)});let d=!u||l.some(e=>e.id===u);return(0,G.jsxs)(s,{value:u||Q,onValueChange:e=>i(e===Q?void 0:e),disabled:a,children:[(0,G.jsx)(w,{...X({id:e,ariaLabelledBy:t,required:n}),children:(0,G.jsx)(F,{placeholder:U(`engine.form.selectComponent`,c)})}),(0,G.jsxs)(p,{children:[(0,G.jsx)(_,{value:Q,children:(0,G.jsx)(`span`,{className:`text-muted-foreground`,children:U(`engine.form.none`,c)})}),!d&&u&&(0,G.jsx)(_,{value:u,children:(0,G.jsxs)(`span`,{className:`flex items-center gap-2`,children:[(0,G.jsx)(`span`,{className:`font-mono`,children:u}),(0,G.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:U(`engine.form.notInObject`,c)})]})}),l.map(e=>(0,G.jsx)(_,{value:e.id,children:(0,G.jsxs)(`span`,{className:`flex items-center gap-2`,children:[(0,G.jsx)(`span`,{className:`font-mono`,children:e.id}),(e.label||e.type)&&(0,G.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:e.label||e.type})]})},e.id))]})]})}function vr({id:e,ariaLabelledBy:t,required:n,value:r,onChange:i,readOnly:a,context:o,fieldSpec:c}){let l=V(),u=o?.objectNames??J,d=c?.multiple??!1,f=W.useMemo(()=>r?Array.isArray(r)?r.map(String):String(r).split(`,`).map(e=>e.trim()).filter(Boolean):[],[r]),m=e=>{if(!a){if(!d){i(e);return}i(f.includes(e)?f.filter(t=>t!==e):[...f,e])}},h=e=>{if(a)return;let t=f.filter(t=>t!==e);i(d?t:``)},[g,v]=W.useState(``),y=e=>{let t=e.trim();if(v(``),!a&&t){if(!d){i(t);return}f.includes(t)||i([...f,t])}};if(cr(u))return(0,G.jsx)(N,{...X({id:e,ariaLabelledBy:t,required:n}),value:U(`engine.form.loadingObjects`,l),readOnly:!0,disabled:!0});let b=f.length>0&&(0,G.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:f.map(e=>(0,G.jsxs)(`div`,{className:`inline-flex items-center gap-1 rounded bg-secondary px-2 py-1 text-sm`,children:[(0,G.jsx)(`span`,{children:e}),!a&&(0,G.jsx)(`button`,{type:`button`,onClick:()=>h(e),className:`text-muted-foreground hover:text-foreground`,children:`×`})]},e))});if(u.status===`error`)return(0,G.jsxs)(`div`,{className:`space-y-2`,children:[b,(0,G.jsx)(Z,{message:u.message,testId:`object-selector-load-failed`}),(0,G.jsx)(N,{...X({id:e,ariaLabelledBy:t,required:n}),"data-testid":`object-selector-freeform`,value:g,disabled:a,onChange:e=>v(e.target.value),onKeyDown:e=>{e.key===`Enter`&&(e.preventDefault(),y(g))},onBlur:()=>y(g)})]});let x=Y(u,dr);return(0,G.jsxs)(`div`,{className:`space-y-2`,children:[b,(0,G.jsxs)(s,{value:``,onValueChange:m,disabled:a||x.length===0,children:[(0,G.jsx)(w,{...X({id:e,ariaLabelledBy:t,required:n}),children:(0,G.jsx)(F,{placeholder:U(d?`engine.form.addObjects`:`engine.form.selectObject`,l)})}),(0,G.jsx)(p,{children:x.map(e=>(0,G.jsxs)(_,{value:e,disabled:!d&&f.includes(e),children:[e,f.includes(e)&&` ✓`]},e))})]})]})}var yr=[];async function br(e){let t=await fetch(`/api/v1/objects/${e}/fields`),n=null;try{n=await t.json()}catch{}if(!t.ok){let e=n?.error?.message??n?.error??n?.message;throw Error(typeof e==`string`&&e?e:`HTTP ${t.status}`)}return Array.isArray(n?.fields)?n.fields:[]}function xr({id:e,ariaLabelledBy:t,required:n,value:r,onChange:i,readOnly:a,fieldSpec:o,formData:c}){let l=V(),u=o?.dependsOn||o?.reference||`objectName`,d=Array.isArray(u)?u[0]:u,f=c?.[d],m=ur(W.useMemo(()=>f?()=>br(f):null,[f])),h=sr(m,yr),g=lr(m),v=o?.multiple??!1,y=W.useMemo(()=>r?Array.isArray(r)?r.map(String):String(r).split(`,`).map(e=>e.trim()).filter(Boolean):[],[r]),b=e=>{if(!a){if(!v){i(e);return}i(y.includes(e)?y.filter(t=>t!==e):[...y,e])}},x=e=>{if(a)return;let t=y.filter(t=>t!==e);i(v?t:``)},[S,C]=W.useState(``),T=e=>{let t=e.trim();if(C(``),!a&&t){if(!v){i(t);return}y.includes(t)||i([...y,t])}};if(!f)return(0,G.jsx)(N,{...X({id:e,ariaLabelledBy:t,required:n}),value:U(`engine.form.selectObjectFirst`,l),readOnly:!0,disabled:!0});if(cr(m))return(0,G.jsx)(N,{...X({id:e,ariaLabelledBy:t,required:n}),value:U(`engine.form.loadingFields`,l),readOnly:!0,disabled:!0});let E=y.length>0&&(0,G.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:y.map(e=>{let t=h.find(t=>t.name===e);return(0,G.jsxs)(`div`,{className:`inline-flex items-center gap-1 rounded bg-secondary px-2 py-1 text-sm`,children:[(0,G.jsx)(`span`,{children:t?.label||e}),(0,G.jsx)(`code`,{className:`text-xs text-muted-foreground`,children:t?.type}),!a&&(0,G.jsx)(`button`,{type:`button`,onClick:()=>x(e),className:`text-muted-foreground hover:text-foreground`,children:`×`})]},e)})});return g?(0,G.jsxs)(`div`,{className:`space-y-2`,children:[E,(0,G.jsx)(Z,{message:g,testId:`field-selector-load-failed`}),(0,G.jsx)(N,{...X({id:e,ariaLabelledBy:t,required:n}),"data-testid":`field-selector-freeform`,value:S,disabled:a,onChange:e=>C(e.target.value),onKeyDown:e=>{e.key===`Enter`&&(e.preventDefault(),T(S))},onBlur:()=>T(S)})]}):(0,G.jsxs)(`div`,{className:`space-y-2`,children:[E,(0,G.jsxs)(s,{value:``,onValueChange:b,disabled:a||h.length===0,children:[(0,G.jsx)(w,{...X({id:e,ariaLabelledBy:t,required:n}),children:(0,G.jsx)(F,{placeholder:U(v?`engine.form.addFields`:`engine.form.selectField`,l)})}),(0,G.jsx)(p,{children:h.map(e=>(0,G.jsx)(_,{value:e.name,disabled:!v&&y.includes(e.name),children:(0,G.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,G.jsx)(`span`,{children:e.label||e.name}),(0,G.jsx)(`code`,{className:`text-xs text-muted-foreground`,children:e.type}),y.includes(e.name)&&` ✓`]})},e.name))})]})]})}function Sr({schema:e,value:t,onChange:n,readOnly:r,context:i,ariaLabelledBy:a}){let o=V(),s=e;if(s?.anyOf||s?.oneOf){let e=(s.anyOf??s.oneOf).find(e=>e?.type===`array`&&e?.items?.type===`object`);e&&(s={...s,...e})}let c=s?.items??{},l=c.properties??{},u=new Set(Array.isArray(c.required)?c.required:[]),d=Array.isArray(t)?t:[],f=Object.keys(l);if(f.length===0)return(0,G.jsx)(`div`,{role:`group`,"aria-labelledby":a,className:`rounded border border-dashed border-amber-500/40 bg-amber-500/5 p-2 text-xs text-amber-700 dark:text-amber-300`,children:U(`engine.form.masterDetailSchemaError`,o)});function p(e,t){let r=d.slice();r[e]={...r[e]??{},...t},n(r)}function m(){n([...d,{}])}function h(e){let t=d.slice();t.splice(e,1),n(t)}return(0,G.jsxs)(`div`,{className:`space-y-2`,role:`group`,"aria-labelledby":a,children:[(0,G.jsx)(`div`,{className:`overflow-x-auto rounded border border-border/40`,children:(0,G.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,G.jsx)(`thead`,{className:`bg-muted/40`,children:(0,G.jsxs)(`tr`,{children:[f.map(e=>(0,G.jsxs)(`th`,{className:`px-2 py-1.5 text-left text-xs font-medium text-muted-foreground`,children:[l[e]?.title??Kn(e),u.has(e)&&(0,G.jsx)(`span`,{className:`text-destructive ml-0.5`,children:`*`})]},e)),(0,G.jsx)(`th`,{className:`w-8`})]})}),(0,G.jsxs)(`tbody`,{children:[d.length===0&&(0,G.jsx)(`tr`,{children:(0,G.jsx)(`td`,{colSpan:f.length+1,className:`px-2 py-3 text-center text-xs text-muted-foreground`,children:U(`engine.form.noRows`,o)})}),d.map((e,t)=>(0,G.jsxs)(`tr`,{className:`border-t border-border/30`,children:[f.map(n=>(0,G.jsx)(`td`,{className:`p-1`,children:(0,G.jsx)(Cr,{schema:l[n],value:(e??{})[n],readOnly:r,context:i,onChange:e=>p(t,{[n]:e})})},n)),(0,G.jsx)(`td`,{className:`p-1 text-right`,children:(0,G.jsx)(P,{type:`button`,variant:`ghost`,size:`sm`,onClick:()=>h(t),disabled:r,className:`h-7 w-7 p-0`,"aria-label":U(`engine.form.removeRow`,o),children:(0,G.jsx)(me,{className:`h-3.5 w-3.5`})})})]},t))]})]})}),(0,G.jsxs)(P,{type:`button`,variant:`outline`,size:`sm`,onClick:m,disabled:r,children:[(0,G.jsx)(B,{className:`h-3.5 w-3.5 mr-1`}),` `,U(`engine.form.addRow`,o)]})]})}function Cr({schema:e,value:t,readOnly:n,context:r,onChange:i}){if(e?.widget===`ref:object`)return(0,G.jsx)(hr,{schema:e,value:t,onChange:i,readOnly:n,context:r});if(e?.widget===`ref:component`)return(0,G.jsx)(_r,{schema:e,value:t,onChange:i,readOnly:n,context:r});let a=e?.enum;if(Array.isArray(a)&&a.length>0)return(0,G.jsxs)(s,{value:t==null?``:String(t),onValueChange:e=>i(e||void 0),disabled:n,children:[(0,G.jsx)(w,{className:`h-8 text-xs`,children:(0,G.jsx)(F,{placeholder:`—`})}),(0,G.jsx)(p,{children:a.map(e=>(0,G.jsx)(_,{value:String(e),children:String(e)},String(e)))})]});if(e?.type===`boolean`)return(0,G.jsx)(`input`,{type:`checkbox`,checked:!!t,disabled:n,onChange:e=>i(e.target.checked),className:`h-4 w-4`});if(e?.type===`number`||e?.type===`integer`){let r=t=>{let n=e?.[t];return typeof n==`number`&&Number.isFinite(n)?n:void 0},a=r(`default`);return(0,G.jsx)(N,{type:`number`,value:t==null?``:String(t),placeholder:a==null?void 0:String(a),min:r(`minimum`),max:r(`maximum`),step:r(`multipleOf`),disabled:n,onChange:e=>{let t=e.target.valueAsNumber;i(Number.isFinite(t)?t:void 0)},className:`h-8 text-xs`})}return(0,G.jsx)(N,{value:t==null?``:String(t),disabled:n,onChange:e=>i(e.target.value||void 0),className:`h-8 text-xs`})}function wr({id:e,ariaLabelledBy:t,required:n,value:r,onChange:i,readOnly:a}){let o=V(),s=Array.isArray(r)?r:[],[c,l]=W.useState(``);function u(e){let t=e.split(/[,\n]/).map(e=>e.trim()).filter(Boolean);if(t.length===0)return;let n=[...s];for(let e of t)n.includes(e)||n.push(e);i(n),l(``)}function d(e){let t=s.slice();t.splice(e,1),i(t)}return(0,G.jsx)(`div`,{className:`rounded border border-input bg-background p-1.5`,children:(0,G.jsxs)(`div`,{className:`flex flex-wrap items-center gap-1`,children:[s.map((e,t)=>(0,G.jsxs)(`span`,{className:`inline-flex items-center gap-1 rounded bg-muted px-1.5 py-0.5 text-xs`,children:[(0,G.jsx)(`span`,{className:`font-mono`,children:e}),!a&&(0,G.jsx)(`button`,{type:`button`,"aria-label":H(`engine.form.removeNamed`,o,{name:e}),onClick:()=>d(t),className:`text-muted-foreground hover:text-destructive`,children:`×`})]},t)),(0,G.jsx)(`input`,{...X({id:e,ariaLabelledBy:t,required:n}),type:`text`,value:c,disabled:a,placeholder:s.length===0?U(`engine.form.tagsPlaceholder`,o):``,onChange:e=>l(e.target.value),onKeyDown:e=>{e.key===`Enter`||e.key===`,`?(e.preventDefault(),u(c)):e.key===`Backspace`&&!c&&s.length>0&&d(s.length-1)},onBlur:()=>c&&u(c),className:`min-w-[8rem] flex-1 bg-transparent text-sm outline-none`})]})})}function Tr(e){return e.replace(/[_-]+/g,` `).replace(/\b\w/g,e=>e.toUpperCase())}function Er({value:e,onChange:t,readOnly:n,schema:r,fieldSpec:i,formData:a,ariaLabelledBy:o}){let s=I(),c=W.useMemo(()=>{if(Array.isArray(i?.options)&&i.options.length)return i.options.map(e=>({label:e.label,value:e.value,visibleWhen:e.visibleWhen}));let e=r?.items?.enum??r?.enum??[];return(Array.isArray(e)?e:[]).filter(e=>typeof e==`string`).map(e=>({label:Tr(e),value:e}))},[i,r]),l=W.useMemo(()=>tt(c,K(a,s)),[c,a,s]),u=W.useMemo(()=>Array.isArray(e)?e.filter(e=>typeof e==`string`):[],[e]);function d(e){if(n)return;let r=new Set(u);r.has(e)?r.delete(e):r.add(e);let i=c.map(e=>e.value).filter(e=>r.has(e));t(i.length?i:void 0)}return c.length===0?(0,G.jsx)(`div`,{role:`group`,"aria-labelledby":o,children:(0,G.jsx)(wr,{value:e,onChange:t,readOnly:n,schema:r,fieldSpec:i})}):(0,G.jsx)(`div`,{className:`flex flex-wrap gap-1.5`,role:`group`,"aria-labelledby":o,children:l.map(e=>{let t=u.includes(e.value);return(0,G.jsxs)(`button`,{type:`button`,role:`checkbox`,"aria-checked":t,disabled:n,onClick:()=>d(e.value),className:`inline-flex items-center gap-1.5 rounded-md border px-2.5 py-1 text-xs font-medium transition-colors `+(t?`border-primary bg-primary/10 text-primary`:`border-input bg-background text-muted-foreground hover:text-foreground hover:bg-muted`)+(n?` opacity-60 cursor-not-allowed`:``),children:[(0,G.jsx)(`span`,{"aria-hidden":!0,className:`flex h-3.5 w-3.5 items-center justify-center rounded-[3px] border text-[9px] leading-none `+(t?`border-primary bg-primary text-primary-foreground`:`border-muted-foreground/40`),children:t?`✓`:``}),e.label]},e.value)})})}var Q=`__none__`;function Dr({id:e,ariaLabelledBy:t,required:n,value:r,onChange:i,readOnly:a,context:o}){let c=V(),l=o?.objectFields??J,u=r==null?``:String(r);if(l.status===`error`)return(0,G.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,G.jsx)(Z,{message:l.message,testId:`field-ref-load-failed`}),(0,G.jsx)(N,{...X({id:e,ariaLabelledBy:t,required:n}),value:u,disabled:a,onChange:e=>i(e.target.value)})]});if(cr(l))return(0,G.jsx)(N,{...X({id:e,ariaLabelledBy:t,required:n}),value:U(`engine.form.loadingOptions`,c),readOnly:!0,disabled:!0});let d=Y(l,fr),f=!u||d.some(e=>e.name===u);return(0,G.jsxs)(s,{value:u||Q,onValueChange:e=>i(e===Q?``:e),disabled:a,children:[(0,G.jsx)(w,{...X({id:e,ariaLabelledBy:t,required:n}),children:(0,G.jsx)(F,{placeholder:d.length?U(`engine.form.selectField`,c):U(`engine.form.noObjectBound`,c)})}),(0,G.jsxs)(p,{children:[(0,G.jsx)(_,{value:Q,children:(0,G.jsx)(`span`,{className:`text-muted-foreground`,children:U(`engine.form.none`,c)})}),!f&&u&&(0,G.jsxs)(_,{value:u,children:[(0,G.jsx)(`span`,{className:`font-mono`,children:u}),(0,G.jsx)(`span`,{className:`ml-2 text-xs text-muted-foreground`,children:U(`engine.form.notInObject`,c)})]}),d.map(e=>(0,G.jsx)(_,{value:e.name,children:(0,G.jsxs)(`span`,{className:`flex items-center gap-2`,children:[(0,G.jsx)(`span`,{children:e.label||e.name}),(0,G.jsx)(`code`,{className:`text-xs text-muted-foreground`,children:e.name})]})},e.name))]})]})}function Or(e,t){let n=t?e.find(e=>e.name===t):void 0,r=t&&!n?e.find(e=>e.name.endsWith(`.${t}`)):void 0,i=t==="default"||t===`list`;return{exact:n,suffixMatch:r,isSpecial:i,resolves:!!n||!!r||i,showStored:!!t&&!n}}function kr({id:e,ariaLabelledBy:t,required:n,value:r,onChange:i,readOnly:a,context:o}){let c=V(),l=o?.objectViews??J,u=r==null?``:String(r);if(l.status===`error`)return(0,G.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,G.jsx)(Z,{message:l.message,testId:`view-ref-load-failed`}),(0,G.jsx)(N,{...X({id:e,ariaLabelledBy:t,required:n}),value:u,disabled:a,onChange:e=>i(e.target.value||void 0)})]});if(cr(l))return(0,G.jsx)(N,{...X({id:e,ariaLabelledBy:t,required:n}),value:U(`engine.form.loadingOptions`,c),readOnly:!0,disabled:!0});let d=Y(l,pr),{suffixMatch:f,resolves:m,showStored:h}=Or(d,u);return(0,G.jsxs)(s,{value:u||Q,onValueChange:e=>i(e===Q?void 0:e),disabled:a,children:[(0,G.jsx)(w,{...X({id:e,ariaLabelledBy:t,required:n}),children:(0,G.jsx)(F,{placeholder:d.length?U(`engine.form.selectEllipsis`,c):U(`engine.form.noObjectBound`,c)})}),(0,G.jsxs)(p,{children:[(0,G.jsx)(_,{value:Q,children:(0,G.jsx)(`span`,{className:`text-muted-foreground`,children:U(`engine.form.none`,c)})}),h&&(0,G.jsx)(_,{value:u,children:(0,G.jsxs)(`span`,{className:`flex items-center gap-2`,children:[(0,G.jsx)(`span`,{children:f?.label||u}),(0,G.jsx)(`code`,{className:`text-xs text-muted-foreground`,children:f?`\u2192 ${f.name}`:u}),!m&&(0,G.jsx)(`span`,{className:`ml-1 text-xs text-muted-foreground`,children:U(`engine.form.notInObject`,c)})]})}),d.map(e=>(0,G.jsx)(_,{value:e.name,children:(0,G.jsxs)(`span`,{className:`flex items-center gap-2`,children:[(0,G.jsx)(`span`,{children:e.label||e.name}),(0,G.jsx)(`code`,{className:`text-xs text-muted-foreground`,children:e.name})]})},e.name))]})]})}function Ar({value:e,onChange:t,readOnly:n,context:r,ariaLabelledBy:i}){let a=V(),o=r?.objectFields??J,c=lr(o),l=o.status===`error`?fr:Y(o,fr),u=Array.isArray(e)?e.map(String):typeof e==`string`&&e?e.split(`,`).map(e=>e.trim()).filter(Boolean):[],d=e=>l.find(t=>t.name===e)?.label||e,f=l.filter(e=>!u.includes(e.name)),m=e=>{u.includes(e)||t([...u,e])},h=e=>{let n=u.slice();n.splice(e,1),t(n)},g=(e,n)=>{let r=e+n;if(r<0||r>=u.length)return;let i=u.slice();[i[e],i[r]]=[i[r],i[e]],t(i)};return(0,G.jsxs)(`div`,{className:`space-y-2`,role:`group`,"aria-labelledby":i,children:[u.length>0&&(0,G.jsx)(`div`,{className:`space-y-1`,children:u.map((e,t)=>(0,G.jsxs)(`div`,{className:`flex items-center gap-1 rounded border border-input bg-background px-2 py-1 text-sm`,children:[(0,G.jsxs)(`span`,{className:`flex-1 truncate`,children:[d(e),(0,G.jsx)(`code`,{className:`ml-2 text-xs text-muted-foreground`,children:e})]}),!n&&(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(`button`,{type:`button`,"aria-label":U(`engine.form.moveUp`,a),disabled:t===0,onClick:()=>g(t,-1),className:`px-1 text-muted-foreground hover:text-foreground disabled:opacity-30`,children:`↑`}),(0,G.jsx)(`button`,{type:`button`,"aria-label":U(`engine.form.moveDown`,a),disabled:t===u.length-1,onClick:()=>g(t,1),className:`px-1 text-muted-foreground hover:text-foreground disabled:opacity-30`,children:`↓`}),(0,G.jsx)(`button`,{type:`button`,"aria-label":H(`engine.form.removeNamed`,a,{name:e}),onClick:()=>h(t),className:`px-1 text-muted-foreground hover:text-destructive`,children:`×`})]})]},e))}),c&&(0,G.jsx)(Z,{message:c,testId:`field-multi-load-failed`}),!n&&(0,G.jsxs)(s,{value:``,onValueChange:m,disabled:f.length===0,children:[(0,G.jsx)(w,{"aria-label":U(`engine.form.addField`,a),children:(0,G.jsx)(F,{placeholder:c?U(`engine.form.optionsLoadFailedTitle`,a):l.length?f.length?U(`engine.form.addField`,a):U(`engine.form.allFieldsAdded`,a):U(`engine.form.noObjectBound`,a)})}),(0,G.jsx)(p,{children:f.map(e=>(0,G.jsx)(_,{value:e.name,children:(0,G.jsxs)(`span`,{className:`flex items-center gap-2`,children:[(0,G.jsx)(`span`,{children:e.label||e.name}),(0,G.jsx)(`code`,{className:`text-xs text-muted-foreground`,children:e.name})]})},e.name))})]})]})}var jr=h,Mr=new Set(jr),Nr=120;function Pr({id:e,ariaLabelledBy:t,required:n,value:r,onChange:i,readOnly:a}){let s=V(),c=r==null?``:String(r),[l,u]=W.useState(!1),[p,m]=W.useState(``),h=c?d(c):``,g=!c||Mr.has(h),_=d(p.trim()),v=W.useMemo(()=>_?jr.filter(e=>e.includes(_)):jr,[_]),y=v.slice(0,Nr),S=v.length>y.length,C=e=>{i(e||void 0),u(!1),m(``)};return(0,G.jsxs)(G.Fragment,{children:[(0,G.jsxs)(`button`,{...X({id:e,ariaLabelledBy:t,required:n}),type:`button`,role:`combobox`,"aria-haspopup":`dialog`,"aria-expanded":l,disabled:a,onClick:()=>!a&&u(!0),className:`flex w-full items-center gap-2 rounded-md border border-input bg-background px-3 py-2 text-sm text-left disabled:cursor-not-allowed disabled:opacity-60`,children:[(0,G.jsx)(f,{name:g?c:void 0,className:`h-4 w-4 shrink-0 text-muted-foreground`}),(0,G.jsx)(`span`,{className:`flex-1 truncate `+(c?`font-mono`:`text-muted-foreground`),children:c||U(`engine.form.selectEllipsis`,s)}),!g&&c&&(0,G.jsx)(`span`,{className:`shrink-0 text-xs text-muted-foreground`,children:U(`engine.form.notInObject`,s)}),(0,G.jsx)(ie,{"aria-hidden":!0,className:`h-3.5 w-3.5 shrink-0 opacity-50`})]}),(0,G.jsx)(j,{open:l,onOpenChange:e=>{u(e),e||m(``)},children:(0,G.jsxs)(o,{className:`max-w-2xl`,children:[(0,G.jsx)(b,{children:(0,G.jsx)(x,{children:U(`engine.form.chooseIcon`,s)})}),(0,G.jsxs)(`div`,{className:`flex items-center gap-2 rounded-md border border-input bg-background px-3 py-2`,children:[(0,G.jsx)(de,{"aria-hidden":!0,className:`h-4 w-4 shrink-0 text-muted-foreground`}),(0,G.jsx)(`input`,{type:`text`,autoFocus:!0,value:p,"aria-label":U(`engine.form.searchIcons`,s),placeholder:U(`engine.form.searchIcons`,s),onChange:e=>m(e.target.value),className:`w-full bg-transparent text-sm outline-none`})]}),(0,G.jsxs)(`div`,{id:e?`${e}-listbox`:void 0,role:`listbox`,className:`grid max-h-[52vh] grid-cols-6 gap-1.5 overflow-y-auto pr-1 sm:grid-cols-8`,children:[c&&(0,G.jsxs)(`button`,{type:`button`,role:`option`,"aria-selected":!1,title:U(`engine.form.none`,s),onClick:()=>C(void 0),className:`flex aspect-square flex-col items-center justify-center gap-1 rounded border border-dashed border-border p-1 text-muted-foreground hover:bg-accent hover:text-accent-foreground`,children:[(0,G.jsx)(me,{className:`h-4 w-4`}),(0,G.jsx)(`span`,{className:`w-full truncate text-center text-[9px] leading-tight`,children:U(`engine.form.noneShort`,s)})]}),!g&&c&&(0,G.jsxs)(`button`,{type:`button`,role:`option`,"aria-selected":!0,title:c,onClick:()=>C(c),className:`flex aspect-square flex-col items-center justify-center gap-1 rounded bg-accent p-1 text-accent-foreground ring-1 ring-primary`,children:[(0,G.jsx)(f,{name:void 0,className:`h-4 w-4`}),(0,G.jsx)(`span`,{className:`w-full truncate text-center text-[9px] leading-tight`,children:c})]}),y.map(e=>{let t=e===h;return(0,G.jsxs)(`button`,{type:`button`,role:`option`,"aria-selected":t,title:e,onClick:()=>C(e),className:`flex aspect-square flex-col items-center justify-center gap-1 rounded p-1 text-muted-foreground hover:bg-accent hover:text-accent-foreground `+(t?`bg-accent text-accent-foreground ring-1 ring-primary`:``),children:[(0,G.jsx)(f,{name:e,className:`h-5 w-5`}),(0,G.jsx)(`span`,{className:`w-full truncate text-center text-[9px] leading-tight`,children:e})]},e)}),y.length===0&&(0,G.jsx)(`p`,{className:`col-span-full px-2 py-6 text-center text-sm text-muted-foreground`,children:U(`engine.form.noMatchingIcons`,s)})]}),S&&(0,G.jsx)(`p`,{className:`text-center text-xs text-muted-foreground`,children:H(`engine.form.iconsTruncated`,s,{shown:y.length,total:v.length})})]})})]})}var Fr=[{key:`none`,labelKey:`engine.form.filterModeNone`},{key:`tabs`,labelKey:`engine.form.filterModeTabs`},{key:`dropdown`,labelKey:`engine.form.filterModeDropdown`}],Ir=e=>(e||``).trim().toLowerCase().replace(/[^a-z0-9]+/g,`_`).replace(/^_+|_+$/g,``)||`tab`;function Lr({value:e,onChange:t,readOnly:n,context:r,ariaLabelledBy:i}){let a=V(),o=e&&typeof e==`object`?e:void 0,c=o?.element??(o?`dropdown`:`none`),l=r?.objectFields??J,u=lr(l),d=l.status===`error`?fr:Y(l,fr),f=e=>{if(!n){if(e===`none`){t(void 0);return}t({...o??{},element:e})}},m=Array.isArray(o?.fields)?o.fields:[],h=e=>t({...o??{},element:c===`none`?`dropdown`:c,fields:e}),g=new Set(m.map(e=>e.field)),v=d.filter(e=>!g.has(e.name)),y=e=>d.find(t=>t.name===e)?.label||e,b=c===`dropdown`||c===`toggle`,x=(Array.isArray(o?.tabs)?o.tabs:[]).map(e=>({...e,name:e?.name??e?.id??``,label:typeof e?.label==`string`?e.label:e?.name??e?.id??``,filter:Array.isArray(e?.filter)?e.filter:Array.isArray(e?.filters)?e.filters.filter(e=>Array.isArray(e)&&e.length>=2).map(e=>({field:String(e[0]),operator:String(e[1]),value:e[2]})):[],isDefault:e?.isDefault??e?.default})),S=e=>{let t={name:Ir(e.label||e.name),label:e.label||e.name||`Tab`};return e.icon&&(t.icon=e.icon),t.filter=Array.isArray(e.filter)?e.filter:[],e.isDefault&&(t.isDefault=!0),t},C=e=>{let n={},r=e.map(S).map(e=>{let t=e.name;if(n[t]){let r=2;for(;n[`${e.name}_${r}`];)r++;t=`${e.name}_${r}`}return n[t]=!0,{...e,name:t}});t({...o??{},element:`tabs`,tabs:r})},T=()=>C([...x,{name:``,label:`Tab ${x.length+1}`,filter:[]}]),E=e=>C(x.filter((t,n)=>n!==e)),D=(e,t)=>{let n=[...x],r=e+t;r<0||r>=n.length||([n[e],n[r]]=[n[r],n[e]],C(n))},O=(e,t)=>C(x.map((n,r)=>r===e?{...n,...t}:n));return(0,G.jsxs)(`div`,{className:`space-y-3`,role:`group`,"aria-labelledby":i,children:[(0,G.jsx)(`div`,{className:`inline-flex rounded-md border border-input bg-background p-0.5`,role:`radiogroup`,"aria-label":U(`engine.form.filterElement`,a),children:Fr.map(e=>{let t=c===e.key;return(0,G.jsx)(`button`,{type:`button`,role:`radio`,"aria-checked":t,"data-testid":`filter-mode-${e.key}`,disabled:n,onClick:()=>f(e.key),className:`px-3 py-1 text-xs font-medium rounded transition-colors `+(t?`bg-primary text-primary-foreground shadow-sm`:`text-muted-foreground hover:text-foreground hover:bg-muted`),children:U(e.labelKey,a)},e.key)})}),b&&(0,G.jsxs)(`div`,{className:`space-y-2`,"data-testid":`filter-mode-fields`,children:[m.length>0&&(0,G.jsx)(`div`,{className:`space-y-1`,children:m.map((e,t)=>(0,G.jsxs)(`div`,{className:`flex items-center gap-2 rounded border border-input bg-background px-2 py-1 text-sm`,children:[(0,G.jsxs)(`span`,{className:`flex-1 truncate`,children:[y(e.field),(0,G.jsx)(`code`,{className:`ml-2 text-xs text-muted-foreground`,children:e.field})]}),(0,G.jsxs)(`label`,{className:`flex items-center gap-1 text-xs text-muted-foreground`,children:[(0,G.jsx)(M,{checked:!!e.showCount,disabled:n,onCheckedChange:e=>h(m.map((n,r)=>r===t?{...n,showCount:e}:n))}),`count`]}),!n&&(0,G.jsx)(`button`,{type:`button`,"aria-label":U(`engine.form.removeField`,a),onClick:()=>h(m.filter((e,n)=>n!==t)),className:`px-1 text-muted-foreground hover:text-destructive`,children:(0,G.jsx)(me,{className:`h-3.5 w-3.5`})})]},e.field))}),!n&&v.length>0&&(0,G.jsxs)(s,{onValueChange:e=>h([...m,{field:e}]),children:[(0,G.jsx)(w,{className:`h-8 text-xs`,"data-testid":`filter-mode-add-field`,children:(0,G.jsx)(F,{placeholder:U(`engine.form.addFilterField`,a)})}),(0,G.jsx)(p,{children:v.map(e=>(0,G.jsx)(_,{value:e.name,children:e.label||e.name},e.name))})]}),u?(0,G.jsx)(Z,{message:u,testId:`filter-mode-fields-load-failed`}):d.length===0?(0,G.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:U(`engine.form.bindObjectForFilterFields`,a)}):null]}),c===`tabs`&&(0,G.jsxs)(`div`,{className:`space-y-2`,"data-testid":`filter-mode-tabs-editor`,children:[x.map((e,t)=>(0,G.jsxs)(`div`,{className:`rounded-md border border-input bg-background p-2 space-y-2`,"data-testid":`tab-preset-${t}`,children:[(0,G.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,G.jsx)(N,{value:e.label,placeholder:U(`engine.form.tabLabel`,a),disabled:n,className:`h-8 text-sm flex-1`,"data-testid":`tab-label-${t}`,onChange:e=>O(t,{label:e.target.value})}),(0,G.jsx)(`code`,{className:`text-[10px] text-muted-foreground shrink-0 max-w-[6rem] truncate`,title:e.name,children:e.name}),!n&&(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(`button`,{type:`button`,"aria-label":U(`engine.form.moveTabUp`,a),disabled:t===0,onClick:()=>D(t,-1),className:`px-1 text-muted-foreground hover:text-foreground disabled:opacity-30`,children:(0,G.jsx)(re,{className:`h-3.5 w-3.5`})}),(0,G.jsx)(`button`,{type:`button`,"aria-label":U(`engine.form.moveTabDown`,a),disabled:t===x.length-1,onClick:()=>D(t,1),className:`px-1 text-muted-foreground hover:text-foreground disabled:opacity-30`,children:(0,G.jsx)(R,{className:`h-3.5 w-3.5`})}),(0,G.jsx)(`button`,{type:`button`,"aria-label":U(`engine.form.removeTab`,a),onClick:()=>E(t),className:`px-1 text-muted-foreground hover:text-destructive`,children:(0,G.jsx)(me,{className:`h-3.5 w-3.5`})})]})]}),(0,G.jsx)(`div`,{className:`pl-1`,"data-testid":`tab-${t}-filter`,children:(0,G.jsx)(zr,{value:e.filter,onChange:e=>O(t,{filter:e}),fields:d,loadError:u,readOnly:n})})]},t)),!n&&(0,G.jsxs)(`button`,{type:`button`,"data-testid":`filter-mode-add-tab`,onClick:T,className:`inline-flex items-center text-xs font-medium text-primary hover:underline`,children:[(0,G.jsx)(B,{className:`h-3.5 w-3.5 mr-1`}),` Add tab`]}),(0,G.jsxs)(`label`,{className:`flex items-center gap-2 text-xs text-muted-foreground pt-1`,children:[(0,G.jsx)(M,{checked:o?.showAllRecords!==!1,disabled:n,"data-testid":`filter-mode-show-all`,onCheckedChange:e=>t({...o??{},element:`tabs`,showAllRecords:e})}),`Show “All records” tab`]}),u?(0,G.jsx)(Z,{message:u,testId:`filter-mode-tabs-load-failed`}):d.length===0?(0,G.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:U(`engine.form.bindObjectForTabRules`,a)}):null]})]})}function Rr({value:e,onChange:t,readOnly:n,context:r,ariaLabelledBy:i}){let a=V(),o=r?.objectActions??J,c=lr(o),l=o.status===`error`?mr:Y(o,mr),u=Array.isArray(e)?e.map(String):typeof e==`string`&&e?e.split(`,`).map(e=>e.trim()).filter(Boolean):[],d=e=>l.find(t=>t.name===e)?.label||e,f=l.filter(e=>!u.includes(e.name)),m=e=>{u.includes(e)||t([...u,e])},h=e=>{let n=u.slice();n.splice(e,1),t(n)},g=(e,n)=>{let r=e+n;if(r<0||r>=u.length)return;let i=u.slice();[i[e],i[r]]=[i[r],i[e]],t(i)};return(0,G.jsxs)(`div`,{className:`space-y-2`,"data-testid":`action-multi`,role:`group`,"aria-labelledby":i,children:[c&&(0,G.jsx)(Z,{message:c,testId:`action-multi-load-failed`}),u.length>0&&(0,G.jsx)(`div`,{className:`space-y-1`,children:u.map((e,t)=>(0,G.jsxs)(`div`,{className:`flex items-center gap-1 rounded border border-input bg-background px-2 py-1 text-sm`,children:[(0,G.jsxs)(`span`,{className:`flex-1 truncate`,children:[d(e),(0,G.jsx)(`code`,{className:`ml-2 text-xs text-muted-foreground`,children:e})]}),!n&&(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(`button`,{type:`button`,"aria-label":U(`engine.form.moveUp`,a),disabled:t===0,onClick:()=>g(t,-1),className:`px-1 text-muted-foreground hover:text-foreground disabled:opacity-30`,children:`↑`}),(0,G.jsx)(`button`,{type:`button`,"aria-label":U(`engine.form.moveDown`,a),disabled:t===u.length-1,onClick:()=>g(t,1),className:`px-1 text-muted-foreground hover:text-foreground disabled:opacity-30`,children:`↓`}),(0,G.jsx)(`button`,{type:`button`,"aria-label":H(`engine.form.removeNamed`,a,{name:e}),onClick:()=>h(t),className:`px-1 text-muted-foreground hover:text-destructive`,children:`×`})]})]},e))}),!n&&(0,G.jsxs)(s,{value:``,onValueChange:m,disabled:f.length===0,children:[(0,G.jsx)(w,{"data-testid":`action-multi-add`,"aria-label":U(`engine.form.addActionButtonPlain`,a),children:(0,G.jsx)(F,{placeholder:c?U(`engine.form.optionsLoadFailedTitle`,a):l.length?f.length?U(`engine.form.addActionButton`,a):U(`engine.form.allActionsAdded`,a):U(`engine.form.bindObjectForActions`,a)})}),(0,G.jsx)(p,{children:f.map(e=>(0,G.jsx)(_,{value:e.name,children:(0,G.jsxs)(`span`,{className:`flex items-center gap-2`,children:[(0,G.jsx)(`span`,{children:e.label||e.name}),(0,G.jsx)(`code`,{className:`text-xs text-muted-foreground`,children:e.name})]})},e.name))})]})]})}function zr({value:e,onChange:t,fields:n,readOnly:r,id:i,ariaLabelledBy:a,loadError:o}){let s=V(),{t:c}=ee(),l=Array.isArray(e)?e:[],d={id:`g`,logic:`and`,conditions:l.map((e,t)=>({id:`c${t}`,operator:e.operator??`equals`,field:e.field,value:e.value??``}))},f=n.map(e=>({value:e.name,label:e.label||e.name,type:e.type})),p=l.length?l.map(e=>`${n.find(t=>t.name===e.field)?.label||e.field}`).filter(Boolean).join(`, `):``,m=e=>{let n=Ze(e);if(!n.ok){te.error(c(Qe[n.reason]));return}t(n.rules)};return(0,G.jsxs)(T,{children:[(0,G.jsx)(g,{asChild:!0,children:(0,G.jsxs)(P,{...X({id:i,ariaLabelledBy:a}),variant:`outline`,size:`sm`,disabled:r,className:`h-8 w-full justify-between text-xs font-normal`,"data-testid":`filter-builder-trigger`,children:[(0,G.jsx)(`span`,{className:`truncate text-left`,children:p||(0,G.jsx)(`span`,{className:`text-muted-foreground`,children:`+ Add filter…`})}),(0,G.jsx)(R,{className:`h-3.5 w-3.5 opacity-60 shrink-0`})]})}),(0,G.jsx)(u,{align:`start`,className:`w-[440px] max-w-[90vw] p-3`,children:o?(0,G.jsx)(Z,{message:o,testId:`filter-builder-load-failed`}):n.length===0?(0,G.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:U(`engine.form.bindObjectForConditions`,s)}):(0,G.jsx)(y,{fields:f,value:d,onChange:m})})]})}function Br({id:e,ariaLabelledBy:t,value:n,onChange:r,readOnly:i,context:a}){let o=a?.objectFields??J,s=lr(o),c=o.status===`error`?fr:Y(o,fr);return(0,G.jsx)(zr,{id:e,ariaLabelledBy:t,value:n,onChange:e=>r(e.length?e:void 0),fields:c,loadError:s,readOnly:i})}function Vr(e,t){return Array.isArray(t?.options)&&t.options.length?t.options.map(e=>({value:e.value,label:e.label})):Array.isArray(e?.enum)?e.enum.filter(e=>typeof e==`string`).map(e=>({value:e})):[]}function Hr(e,t){return Vr(e,t).length>0?`color-picker`:`color-input`}function Ur(e,t,n){return Array.isArray(t?.options)&&t.options.length?tt(t.options,n).map(e=>({value:e.value,label:e.label})):Vr(e,t)}function Wr({value:e,onChange:t,readOnly:n,schema:r,fieldSpec:i,formData:a,ariaLabelledBy:o,required:s}){let c=V(),l=I(),u=o?{ariaLabelledBy:o}:{ariaLabel:i?.label??(typeof r?.title==`string`?r.title:void 0)??U(`engine.form.color`,c)};return(0,G.jsx)(wt,{...u,required:s,value:e==null?void 0:String(e),onChange:e=>t(e),disabled:n,options:Ur(r,i,K(a,l))})}function Gr({id:e,ariaLabelledBy:t,required:n,value:r,onChange:i,readOnly:a}){let o=V(),s=r==null?``:String(r);return(0,G.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,G.jsx)(`input`,{...X({id:e,ariaLabelledBy:t,required:n}),type:`color`,value:/^#([0-9a-f]{6})$/i.test(s)?s:`#000000`,disabled:a,onChange:e=>i(e.target.value),className:`h-8 w-10 shrink-0 rounded border border-input bg-background p-0.5 disabled:opacity-60`,"aria-label":e||t?void 0:U(`engine.form.color`,o)}),(0,G.jsx)(N,{value:s,placeholder:U(`engine.form.colorHexPlaceholder`,o),disabled:a,"aria-label":U(`engine.form.colorHex`,o),onChange:e=>i(e.target.value||void 0),className:`h-8 text-sm font-mono`})]})}function Kr({value:e,onChange:t,readOnly:n,context:r,ariaLabelledBy:i}){let a=r?.objectFields??J,o=a.status===`loaded`?a.data:void 0,s=r?.conditionScope,c=r?.conditionSubjects,l=r?.conditionRoots;return(0,G.jsx)(`div`,{role:`group`,"aria-labelledby":i,children:s===`none`?(0,G.jsx)(N,{"aria-labelledby":i,value:zn(e),onChange:n=>t(Vn(e,n.target.value)),disabled:n}):(0,G.jsx)(vn,{value:zn(e),onCommit:n=>t(Vn(e,n)),fields:o,disabled:n,scope:s,subjects:c?{context:c}:void 0,roots:l})})}var qr=`••••••••`;function Jr({value:e,onChange:t,readOnly:n,schema:r,id:i,ariaLabelledBy:a,required:o}){let s=V(),c=e===qr,[l,u]=W.useState(!1),[d,f]=W.useState(c||e==null?``:String(e)),p=e=>{f(e),t(e===``?c?qr:void 0:e)};return(0,G.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,G.jsx)(N,{...X({id:i,ariaLabelledBy:a,required:o}),type:l?`text`:`password`,value:d,disabled:n,autoComplete:`off`,placeholder:c?r?.description?U(`engine.form.secretSetTypeToReplace`,s):U(`engine.form.secretSetLeaveBlank`,s):typeof r?.description==`string`?``:U(`engine.form.enterAValue`,s),onChange:e=>p(e.target.value),className:`h-8 text-sm font-mono`,"aria-label":i||a?void 0:U(`engine.form.secretValue`,s)}),(0,G.jsx)(P,{type:`button`,variant:`ghost`,size:`icon`,className:`h-8 w-8 shrink-0`,disabled:n,"aria-label":U(l?`engine.form.hideValue`:`engine.form.revealValue`,s),onClick:()=>u(e=>!e),children:l?(0,G.jsx)(se,{className:`h-4 w-4`}):(0,G.jsx)(ce,{className:`h-4 w-4`})}),c&&(0,G.jsx)(P,{type:`button`,variant:`ghost`,size:`sm`,className:`h-8 shrink-0 text-destructive hover:text-destructive`,disabled:n,onClick:()=>{f(``),t(null)},children:U(`engine.form.clear`,s)})]})}function Yr({value:e,onChange:t,readOnly:n,fieldSpec:r,formData:i,context:a,ariaLabelledBy:o}){let c=V(),l=Array.isArray(r?.dependsOn)?r.dependsOn[0]:r?.dependsOn,u=l?i?.[l]:void 0,d=u==null?void 0:a?.dynamicSchemas?.[String(u)],f=d?.properties??{},m=new Set(d?.required??[]),h=e&&typeof e==`object`?e:{},g=(e,n)=>{let r={...h};n===void 0||n===``?delete r[e]:r[e]=n,t(r)};return u?!d||Object.keys(f).length===0?(0,G.jsx)(`div`,{role:`group`,"aria-labelledby":o,className:`text-xs text-muted-foreground`,children:H(`engine.form.noConfigNeeded`,c,{value:String(u)})}):(0,G.jsx)(`div`,{className:`space-y-2 rounded-md border border-border/60 p-3`,role:`group`,"aria-labelledby":o,children:Object.entries(f).map(([e,t])=>{let r=t?.title||e,i=h[e],a=m.has(e);if(t?.type===`boolean`)return(0,G.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,G.jsx)(O,{className:`text-xs`,children:r}),(0,G.jsx)(M,{"aria-label":r,checked:!!i,disabled:n,onCheckedChange:t=>g(e,t)})]},e);if(Array.isArray(t?.enum))return(0,G.jsxs)(`div`,{className:`space-y-1`,children:[(0,G.jsxs)(O,{className:`text-xs`,children:[r,a?` *`:``]}),(0,G.jsxs)(s,{value:i==null?``:String(i),onValueChange:t=>g(e,t),disabled:n,children:[(0,G.jsx)(w,{className:`h-8`,"aria-label":r,children:(0,G.jsx)(F,{placeholder:U(`engine.form.selectEllipsis`,c)})}),(0,G.jsx)(p,{children:t.enum.map(e=>(0,G.jsx)(_,{value:String(e),children:String(e)},String(e)))})]})]},e);let o=t?.format===`password`||t?.writeOnly===!0,l=t?.type===`number`||t?.type===`integer`;return(0,G.jsxs)(`div`,{className:`space-y-1`,children:[(0,G.jsxs)(O,{className:`text-xs`,children:[r,a?` *`:``]}),o?(0,G.jsx)(Jr,{value:i,onChange:t=>g(e,t),readOnly:n,schema:t}):(0,G.jsx)(N,{type:l?`number`:`text`,value:i==null?``:String(i),disabled:n,"aria-label":r,onChange:t=>g(e,l?t.target.value===``?void 0:Number(t.target.value):t.target.value),className:`h-8 text-sm`}),t?.description&&(0,G.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:t.description})]},e)})}):(0,G.jsx)(`div`,{role:`group`,"aria-labelledby":o,className:`text-xs text-muted-foreground`,children:H(`engine.form.selectDepToConfigure`,c,{dep:l??U(`engine.form.anOption`,c)})})}var Xr={"ref:object":hr,"ref:component":_r,"filter-mode":Lr,"object-selector":vr,"field-selector":xr,"field-ref":Dr,"field-multi":Ar,"action-multi":Rr,"filter-builder":Br,"view-ref":kr,icon:Pr,"color-picker":Wr,"color-input":Gr,condition:Kr,"master-detail":Sr,"string-tags":wr,multiselect:Er,code:ti,secret:Jr,"dynamic-config":Yr},Zr={"ref:object":`control`,"ref:component":`control`,"filter-mode":`group`,"object-selector":`control`,"field-selector":`control`,"field-ref":`control`,"field-multi":`group`,"action-multi":`group`,"filter-builder":`control`,"view-ref":`control`,icon:`control`,"color-picker":`group`,"color-input":`control`,condition:`group`,"master-detail":`group`,"string-tags":`control`,multiselect:`group`,code:`group`,secret:`control`,"dynamic-config":`group`};function Qr(e){return e?Zr[e]??`control`:`control`}function $r(e,t){if(e?.language)return e.language;if(typeof t?.format==`string`){let e=t.format.toLowerCase();if(e===`sql`||e===`javascript`||e===`typescript`||e===`json`||e===`yaml`||e===`html`||e===`css`||e===`python`)return e}let n=e?.field?.toLowerCase()??``;return n.includes(`sql`)||n===`query`?`sql`:`javascript`}var ei=W.lazy(()=>t(()=>import(`./src-C8NYjdVm.js`).then(e=>({default:e.CodeEditorRenderer})),__vite__mapDeps([0]),import.meta.url));function ti({schema:e,value:t,onChange:n,readOnly:r,fieldSpec:i,ariaLabelledBy:a}){let o=V(),s=$r(i,e),c=typeof t==`string`?t:t==null?``:String(t);return(0,G.jsxs)(`div`,{className:`rounded-md border border-border/50 overflow-hidden`,role:`group`,"aria-labelledby":a,children:[(0,G.jsxs)(`div`,{className:`flex items-center justify-between px-2 py-1 bg-muted/40 border-b border-border/30 text-[10px] font-mono text-muted-foreground`,children:[(0,G.jsx)(`span`,{children:s}),r&&(0,G.jsx)(`span`,{children:U(`engine.form.readOnly`,o)})]}),(0,G.jsx)(W.Suspense,{fallback:(0,G.jsx)(`div`,{className:`h-[280px] flex items-center justify-center text-xs text-muted-foreground`,children:U(`engine.form.loadingEditor`,o)}),children:(0,G.jsx)(ei,{schema:{type:`code`,language:s,theme:`vs-dark`,height:`280px`,readOnly:r},value:c,onChange:e=>n(e??``)})})]})}var ni=Symbol(`metadataForm.sourceLabel`);function ri(e,t){e[ni]=t}function ii(e){return ni in e}function ai(e){if(e){if(ii(e)){let t=e[ni];return typeof t==`string`?t:void 0}return typeof e.label==`string`?e.label:void 0}}var oi=new Set([`default`,`const`,`enum`,`examples`,`title`,`description`,`$schema`,`$id`,`$comment`,`required`]),si=new Set([`properties`,`patternProperties`,`dependentSchemas`]);function ci(e){if(!e||typeof e!=`object`||Array.isArray(e))return e;let t=t=>{let n=/^#\/(\$defs|definitions)\/(.+)$/.exec(t);if(!n)return;let r=n[2].replace(/~1/g,`/`).replace(/~0/g,`~`),i=e[n[1]];if(!i||typeof i!=`object`)return;let a=i[r];return a&&typeof a==`object`&&!Array.isArray(a)?a:void 0};function n(e,i){if(Array.isArray(e)){let t=!1,r=e.map(e=>{let r=n(e,i);return r!==e&&(t=!0),r});return t?r:e}if(!e||typeof e!=`object`)return e;let a=e,o=typeof a.$ref==`string`?a.$ref:void 0;if(o){if(i.includes(o))return e;let r=t(o);if(!r)return e;let s=n(r,[...i,o]),c={...a};return delete c.$ref,Object.keys(c).length>0?{...s,...c}:s}let s;for(let[e,t]of Object.entries(a)){if(oi.has(e)||e===`$defs`||e===`definitions`)continue;let o=si.has(e)?r(t,i):n(t,i);o!==t&&(s??={...a},s[e]=o)}return s??e}function r(e,t){if(!e||typeof e!=`object`||Array.isArray(e))return e;let r;for(let[i,a]of Object.entries(e)){let o=n(a,t);o!==a&&(r??={...e},r[i]=o)}return r??e}return n(e,[])}var li=new Set([`text`,`textarea`,`number`,`switch`,`select`,`json`]);function ui(e,t){if(!e)return e;let n=e.oneOf??e.anyOf;if(!Array.isArray(n)||n.length===0)return e;let r=typeof t==`object`&&!!t&&!Array.isArray(t),i=Array.isArray(t),a=r?new Set(Object.keys(t)):null,o=null,s=i&&t.length?t[0]:void 0,c=typeof s==`object`&&!!s&&!Array.isArray(s);for(let e of n){let n=0;if(e.type===`array`&&i){n+=5;let t=e.items?.type;(t===`object`&&c||t===`string`&&typeof s==`string`||t===`number`&&typeof s==`number`||t===`integer`&&typeof s==`number`)&&(n+=3)}if(e.type===`object`&&r&&(n+=5),e.type===`string`&&typeof t==`string`&&(n+=5),e.type===`number`&&typeof t==`number`&&(n+=5),e.type===`boolean`&&typeof t==`boolean`&&(n+=5),a&&Array.isArray(e.required))for(let t of e.required)a.has(t)&&(n+=1);(!o||n>o.score)&&(o={branch:e,score:n})}let l=o?.branch??n[0];return{...e,...l,oneOf:void 0,anyOf:void 0}}function di(e,t){if(!e)return{};let n=ui(e,Array.isArray(t)?t:[])?.items;return!n||typeof n!=`object`?{}:ui(n,Array.isArray(t)&&t.length?t[0]:void 0)??{}}function fi(e,t){if(e?.widget)return e.widget;if(e?.type){let t=e.type;if(t===`text`||t===`email`||t===`url`||t===`phone`||t===`password`)return`text`;if(t===`textarea`||t===`markdown`||t===`html`||t===`richtext`)return`textarea`;if(t===`number`||t===`currency`||t===`percent`)return`number`;if(t===`date`||t===`datetime`||t===`time`)return`date-picker`;if(t===`boolean`||t===`toggle`)return`switch`;if(t===`select`||t===`radio`)return e.multiple?`multiselect`:`select`;if(t===`multiselect`||t===`checkboxes`||t===`tags`)return`string-tags`;if(t===`composite`)return`composite`;if(t===`repeater`)return`repeater`;if(t===`record`)return`record`;if(t===`lookup`||t===`master_detail`||t===`tree`)return`ref-object`;if(t===`image`||t===`file`||t===`avatar`||t===`video`||t===`audio`)return`file-upload`;if(t===`code`)return`code`;if(t===`json`||t===`location`||t===`address`)return`json`;if(t===`color`)return`color-picker`;if(t===`rating`)return`number`;if(t===`slider`)return`slider`;if(t===`signature`)return`signature`;if(t===`qrcode`)return`qrcode`;if(t===`progress`)return`number`;if(t===`formula`||t===`summary`||t===`autonumber`)return`text`;if(t===`vector`)return`json`}if(t){let e=t.type;if(e===`array`&&Array.isArray(t.items?.enum))return`multiselect`;if(e===`array`&&t.items?.type===`string`)return`string-tags`;if(e===`array`&&t.items?.type===`object`)return`master-detail`;if(e===`object`)return`object-fields`;if(e===`boolean`)return`switch`;if(e===`number`||e===`integer`)return`number`;if(Array.isArray(t.enum))return`select`;if(e===`string`){if(t.format===`date`||t.format===`date-time`)return`date-picker`;if(t.format===`email`||t.format===`uri`||t.format===`uri-reference`)return`text`;if(t.format===`multiline`)return`textarea`}}}function pi(e){let t=new Set,n=[e];for(;n.length>0;){let e=n.pop();if(!e||typeof e!=`object`||t.has(e))continue;t.add(e);let r=e;if(r.type===`string`)return!0;for(let e of[`anyOf`,`oneOf`]){let t=r[e];Array.isArray(t)&&n.push(...t)}}return!1}function mi(e,t,n){if(n?.objectFields&&!Array.isArray(t?.enum)){if(t?.type===`array`&&t.items?.type===`string`&&(/Fields$/.test(e)||e===`columns`||e===`fieldOrder`))return`field-multi`;if(pi(t)&&(/.Field$/.test(e)||e===`field`))return`field-ref`}}function hi(e,t){if(!Array.isArray(t?.enum)&&pi(t)&&(e===`icon`||/Icon$/.test(e)))return`icon`}function gi(e,t){if((pi(t)||Array.isArray(t?.enum))&&(e===`color`||e===`colorVariant`||/Color$/.test(e)))return`color-picker`}function _i(e,t,n){return e===`color-picker`||e===`color-input`?Hr(t,n):e}function vi({fieldSpec:e,widget:t,schema:n,value:r}){if(e?.type===`composite`)return{kind:`composite`};if(e?.type===`repeater`)return{kind:`repeater`,itemSchema:di(n,r)};if(e?.type===`record`)return{kind:`record`,itemSchema:n?.additionalProperties??{}};let i=ui(n,r)??n??{},a=e=>e?.type===`object`&&!!e.properties&&typeof e.properties==`object`,o=e=>{if(e?.type!==`array`||!e.items||typeof e.items!=`object`)return;let t=ui(e.items,Array.isArray(r)&&r.length?r[0]:void 0);return a(t)?t:void 0};if(t){if(Xr[t])return{kind:`registered`,widget:t};if(a(i))return{kind:`nested-form`,effective:i};let e=o(i);if(e)return{kind:`object-rows`,effective:i,itemSchema:e};if(!li.has(t))return{kind:`raw-json`,hint:t}}let s=i?.type,c=Array.isArray(e?.options)&&e.options.length>0,l=Array.isArray(i?.enum)&&i.enum.length>0;if(c||l||s===`boolean`||t===`switch`||e?.type===`boolean`||e?.type===`toggle`||s===`number`||s===`integer`||s===`string`)return{kind:`scalar`,effective:i};if(s===`array`){let e=i?.items??{};if(e.type===`string`||e.type===`number`||e.type===`integer`)return{kind:`scalar`,effective:i}}if(a(i))return{kind:`nested-form`,effective:i};let u=o(i);return u?{kind:`object-rows`,effective:i,itemSchema:u}:{kind:`raw-json`}}function yi(e){switch(e.kind){case`registered`:return Qr(e.widget);case`composite`:case`repeater`:case`record`:case`nested-form`:case`object-rows`:return`group`;case`raw-json`:case`scalar`:return`control`}}var bi=new Set([`visible`,`hidden`,`disabled`,`visibleOn`,`condition`,`predicate`]);function xi(e,t){if(!Array.isArray(t?.enum)&&pi(t)&&(bi.has(e)||/When$/.test(e)))return`condition`}var Si=/(^|_)(secret|token|api[_-]?key|access[_-]?key|client[_-]?secret|credential|private[_-]?key|passphrase)$/i;function Ci(e,t){if(t?.format===`password`||t?.writeOnly===!0||!Array.isArray(t?.enum)&&pi(t)&&Si.test(e))return`secret`}function wi({name:e,schema:t,fieldSpec:n,widgetContext:r}){let i=fi(n,t);if(!n?.widget){let n=mi(e,t,r);if(n)i=n;else{let n=Ci(e,t);if(n)i=n;else{let n=hi(e,t);if(n)i=n;else{let n=gi(e,t);if(n)i=n;else{let n=xi(e,t);n&&(i=n)}}}}}return _i(i,t,n)}function Ti(e){return e?.visibleWhen??e?.visibleOn}function Ei({schema:e,form:t,value:n,onChange:r,issues:i=[],hiddenFields:a=[],fieldOrder:o=[],readOnly:s=!1,createMode:c=!1,widgetContext:l,idPath:u}){let d=V(),f=I(),p=W.useMemo(()=>{let e={};for(let t of i)(e[t.path]??=[]).push(ye(t.message,d));return e},[i,d]),m=W.useMemo(()=>ci(e),[e]);if(!m||typeof m!=`object`){if(n&&typeof n==`object`)m=qi(n);else return(0,G.jsx)(Ki,{value:n,onChange:r,readOnly:s})}let h=m.properties??{},g=Array.isArray(m.required)?m.required:[],_=n??{},v=Xi(Object.keys(h),o).filter(e=>!a.includes(e)).filter(e=>{let t=Ti(h[e]);return!t||nt(t,K(_,f))}),y=n??{};function b(e,t){let n={...y,[e]:t};(t===void 0||t===``)&&delete n[e],r(n)}if(t?.sections?.length){let e=Ii(t),n=[];for(let t of e)for(let e of t.fields)n.push(typeof e==`string`?e:e.field);let r=n.filter(e=>h[e]).length;if(n.length===0||r>0)return(0,G.jsx)(Li,{sections:e,formType:t.type,props:h,idPath:u,required:g,hiddenFields:a,issuesByPath:p,value:y,readOnly:s,createMode:c,widgetContext:l,onChange:b});typeof console<`u`&&console.warn(`[SchemaForm] form layout declares no fields that exist in the schema; falling back to flat schema-driven rendering. Declared:`,n,`Available:`,Object.keys(h))}return(0,G.jsx)(`div`,{className:`space-y-4`,children:v.map(e=>(0,G.jsx)(zi,{name:e,idPath:u,schema:h[e],value:y[e],required:g.includes(e),issues:p[e],readOnly:s,widgetContext:l,fieldSpec:h[e]?.widget?{field:e,widget:h[e].widget}:void 0,formData:y,onChange:t=>b(e,t)},e))})}var Di=`drawer-metadata`,Oi=`drawer-embedded-item`,ki=W.createContext(!1),Ai=W.createContext(!1),ji=()=>!1;function Mi(e){let t=W.useRef(null);W.useEffect(()=>{if(!e||!ji()||typeof document>`u`)return;let n=new Set,r=[];for(let e of Array.from(document.querySelectorAll(`[id^="mdf-"]`))){let t=e.id;n.has(t)?r.includes(t)||r.push(t):n.add(t)}let i=r.join(`,`);i!==t.current&&(t.current=i,r.length!==0&&console.error(`[SchemaForm] duplicate field host id(s) in this document: ${r.join(`, `)}. Two SchemaForm instances are mounted at once — the metadata detail drawer sits on top of the page form, which stays in the DOM — and at least one of them renders unscoped top-level ids. A \`label[for]\` resolves to the FIRST match in the document, so the later form's labels name and focus the earlier form's controls (objectui#5092). Give the secondary form a distinct \`idPath\` scope segment — see DRAWER_METADATA_ID_SCOPE / DRAWER_EMBEDDED_ITEM_ID_SCOPE in SchemaForm.tsx.`))})}function Ni(e){let t=W.useContext(ki),n=W.useContext(Ai);Mi(!t);let r=e.createMode===!0||n;return(0,G.jsx)(ki.Provider,{value:!0,children:(0,G.jsx)(Ai.Provider,{value:r,children:(0,G.jsx)(Ei,{...e})})})}function Pi(e){return typeof e==`string`?{field:e}:e}function Fi(e){return Array.isArray(e.fields)}function Ii(e){let t=e.data,n=t&&`schemaId`in t?t.schemaId:void 0;return(ve(e.sections,{objectName:n??``,formType:e.type,objectDef:null,resolvable:!1})??[]).map((e,t)=>{if(Fi(e))return e;throw TypeError(`[SchemaForm] form section ${t}${e.label?` ("${e.label}")`:``} declares neither \`fields\` nor \`group\`. A section must declare its members exactly one way, and \`@objectstack/spec\`'s FormSectionSchema refuses this shape at parse: enumerate \`fields\`, or point \`group\` at a declared field group.`)})}function Li({sections:e,formType:t,props:n,required:r,hiddenFields:i,issuesByPath:o,value:s,readOnly:l,createMode:u,widgetContext:d,idPath:f,onChange:p}){let h=V(),g=I(),_=e.filter(e=>{let t=Ti(e);return!t||nt(t,K(s,g))}),y=t===`tabbed`&&_.length>1,b=(e,t)=>{let a=e.fields.map(Pi).filter(e=>{if(e.hidden||i.includes(e.field))return!1;let t=Ti(e);return!(t&&!nt(t,K(s,g)))});if(a.length===0)return null;let _=e.columns??1,y=(0,G.jsx)(`div`,{className:`grid gap-4`,style:{gridTemplateColumns:`repeat(${_}, minmax(0, 1fr))`},children:a.map(e=>{let t=n[e.field];if(!t)return(0,G.jsx)(`div`,{className:`rounded border border-dashed border-amber-500/40 bg-amber-500/5 p-2 text-xs text-amber-700 dark:text-amber-300`,style:{gridColumn:`span ${e.colSpan??1}`},children:H(`engine.form.missingField`,h,{field:e.field})},e.field);let i=ai(e);return(0,G.jsx)(`div`,{style:{gridColumn:`span ${e.colSpan??1}`},children:(0,G.jsx)(zi,{name:e.field,idPath:f,schema:{...t,...i?{title:i}:{},...e.helpText?{description:e.helpText}:{},...e.placeholder?{placeholder:e.placeholder}:{}},value:s[e.field],required:e.required??r.includes(e.field),issues:o[e.field],readOnly:l||e.readonly||e.immutable&&!u,fieldSpec:e,widgetContext:d,formData:s,onChange:t=>p(e.field,t)})},e.field)})});return e.collapsible&&e.label?(0,G.jsxs)(c,{defaultOpen:!e.collapsed,className:`rounded-md border border-border/40 bg-card/30`,children:[(0,G.jsxs)(v,{className:`group flex w-full items-center justify-between gap-2 p-4 text-left`,children:[(0,G.jsxs)(`span`,{children:[(0,G.jsx)(`span`,{className:`block text-sm font-semibold text-foreground/90`,children:e.label}),e.description&&(0,G.jsx)(`span`,{className:`mt-0.5 block text-xs text-muted-foreground`,children:e.description})]}),(0,G.jsx)(R,{className:`h-4 w-4 shrink-0 text-muted-foreground transition-transform group-data-[state=closed]:-rotate-90`})]}),(0,G.jsx)(m,{className:`space-y-3 px-4 pb-4`,children:y})]},t):(0,G.jsxs)(`section`,{className:`space-y-3 rounded-md border border-border/40 bg-card/30 p-4`,children:[e.label&&(0,G.jsxs)(`header`,{children:[(0,G.jsx)(`h3`,{className:`text-sm font-semibold text-foreground/90`,children:e.label}),e.description&&(0,G.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:e.description})]}),y]},t)};if(y){let e=_.filter(e=>e.fields.map(Pi).some(e=>{if(e.hidden||i.includes(e.field))return!1;let t=Ti(e);return!t||nt(t,K(s,g))}));if(e.length===0)return null;let t=(e[0].label??`section-0`).toLowerCase();return(0,G.jsxs)(E,{defaultValue:t,className:`w-full`,children:[(0,G.jsx)(C,{className:`flex flex-wrap gap-1`,children:e.map((e,t)=>(0,G.jsx)(a,{value:(e.label??`section-${t}`).toLowerCase(),children:e.label??H(`engine.form.sectionN`,h,{n:t+1})},t))}),e.map((e,t)=>(0,G.jsx)(k,{value:(e.label??`section-${t}`).toLowerCase(),className:`mt-4`,children:b(e,t)},t))]})}return(0,G.jsx)(`div`,{className:`space-y-4`,children:_.map(b)})}function $(e,t){return e?`${e}.${t}`:String(t)}function Ri(e){return`mdf-${e}`}function zi({name:e,idPath:t,schema:n,value:r,required:i,issues:a,readOnly:o,fieldSpec:s,widgetContext:c,formData:l,onChange:u}){let d=V(),f=W.useContext(Ai),[p,m]=W.useState(!1),h=W.useCallback(()=>m(!0),[]),g=!f||p?a:void 0,_=W.useCallback(e=>{m(!0),u(e)},[u]),v=s?.label||be(e,n?.title,d)||Yi(e),y=s?.helpText||xe(e,n?.description,d),b=$(t,e),x=Ri(b),S=wi({name:e,schema:n,fieldSpec:s,widgetContext:c}),C=yi(vi({fieldSpec:s,widget:S,schema:n,value:r}))===`group`,w=C?`${x}-label`:void 0,T=C?{id:void 0,ariaLabelledBy:w}:{id:x,ariaLabelledBy:void 0},E=C?{id:w}:{htmlFor:x},D=n?.type===`boolean`||S===`switch`,k=n?.default!==void 0,A=i&&!(D&&k),j=ai(s)||n?.title||Yi(e),M=Yi(e).toLowerCase()===j.toLowerCase();return D?(0,G.jsxs)(`div`,{className:`flex items-start justify-between gap-3 py-1.5`,onBlur:h,children:[(0,G.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,G.jsxs)(O,{...E,className:`text-sm font-medium cursor-pointer`,children:[v,A&&(0,G.jsx)(`span`,{className:`text-destructive ml-0.5`,"aria-hidden":`true`,"data-required-marker":`true`,children:`*`})]}),y&&(0,G.jsx)(`div`,{className:`text-xs text-muted-foreground mt-0.5`,children:y}),g?.map((e,t)=>(0,G.jsx)(`div`,{"data-testid":`schema-form-issue`,className:`text-xs text-destructive mt-0.5`,children:e},t))]}),(0,G.jsx)(Bi,{id:T.id,ariaLabelledBy:T.ariaLabelledBy,required:A,fieldName:e,idPath:b,schema:n,value:r,onChange:_,readOnly:o,widget:S,fieldSpec:s,widgetContext:c,formData:l})]}):(0,G.jsxs)(`div`,{className:`space-y-1.5`,onBlur:h,children:[(0,G.jsx)(`div`,{className:`flex items-center justify-between gap-2`,children:(0,G.jsxs)(O,{...E,className:`text-sm font-medium`,children:[v,A&&(0,G.jsx)(`span`,{className:`text-destructive ml-0.5`,"aria-hidden":`true`,"data-required-marker":`true`,children:`*`}),!M&&(0,G.jsx)(`code`,{className:`ml-2 text-[10px] font-mono text-muted-foreground/70`,title:U(`engine.form.machineName`,d),children:e})]})}),(0,G.jsx)(Bi,{id:T.id,ariaLabelledBy:T.ariaLabelledBy,required:A,fieldName:e,idPath:b,schema:n,value:r,onChange:_,readOnly:o,widget:S,fieldSpec:s,widgetContext:c,formData:l}),y&&(0,G.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:y}),g?.map((e,t)=>(0,G.jsx)(`div`,{"data-testid":`schema-form-issue`,className:`text-xs text-destructive`,children:e},t))]})}function Bi({id:e,ariaLabelledBy:t,required:n,fieldName:r,idPath:i,schema:a,value:o,onChange:c,readOnly:l,widget:u,fieldSpec:d,widgetContext:f,formData:m}){let h=V(),g=I(),v=vi({fieldSpec:d,widget:u,schema:a,value:o}),y=n?!0:void 0;if(v.kind===`composite`){let e=d?.fields?.length?d.fields:Zi(a);return(0,G.jsx)(Ui,{value:o,fields:e,schema:a,readOnly:l,widgetContext:f,fieldSpec:d,ariaLabelledBy:t,idPath:i,onChange:c})}if(v.kind===`repeater`){let e=v.itemSchema,n=d?.fields?.length?d.fields:Zi(e);return(0,G.jsx)(Wi,{value:o,fields:n,schema:{...a,items:e},readOnly:l,widgetContext:f,widget:d?.widget,ariaLabelledBy:t,idPath:i,onChange:c})}if(v.kind===`record`){let e=v.itemSchema,n=d?.fields?.length?d.fields:Zi(e);return(0,G.jsx)(Gi,{value:o,fields:n,schema:a,readOnly:l,widgetContext:f,widget:d?.widget,keyField:d?.keyField,formData:m,ariaLabelledBy:t,idPath:i,onChange:c})}if(v.kind===`registered`){let r=Xr[v.widget];return(0,G.jsx)(r,{id:e,ariaLabelledBy:t,required:n,schema:a,value:o,onChange:c,readOnly:l,context:f,fieldSpec:d,formData:m})}if(v.kind===`nested-form`)return(0,G.jsx)(`div`,{className:`rounded-md border border-border/40 bg-card/30 p-3`,role:`group`,"aria-labelledby":t,children:(0,G.jsx)(Ni,{schema:v.effective,value:o??{},onChange:e=>c(e),readOnly:l,widgetContext:f,idPath:i})});if(v.kind===`object-rows`)return(0,G.jsx)(Wi,{value:o,fields:Zi(v.itemSchema),schema:{...v.effective,items:v.itemSchema},readOnly:l,widgetContext:f,widget:d?.widget,ariaLabelledBy:t,idPath:i,onChange:c});if(v.kind===`raw-json`)return v.hint?(0,G.jsxs)(`div`,{className:`space-y-1`,children:[(0,G.jsx)(Ki,{id:e,ariaLabelledBy:t,required:n,value:o,onChange:e=>c(e),readOnly:l}),(0,G.jsx)(`div`,{className:`text-[10px] text-muted-foreground`,children:H(`engine.form.fallbackJson`,h,{widget:v.hint})})]}):(0,G.jsx)(Ki,{id:e,ariaLabelledBy:t,required:n,value:o,onChange:c,readOnly:l,small:!0});let b=v.effective,x=b?.type,S=d?.options,C=b?.enum??void 0;if(Array.isArray(S)&&S.length>0)return(0,G.jsxs)(s,{value:o==null?``:String(o),onValueChange:e=>c(e),disabled:l,children:[(0,G.jsx)(w,{id:e,"aria-labelledby":t,"aria-required":y,children:(0,G.jsx)(F,{placeholder:U(`engine.form.selectEllipsis`,h)})}),(0,G.jsx)(p,{children:tt(S,K(m,g)).map(e=>(0,G.jsxs)(_,{value:e.value,children:[e.label,e.color&&(0,G.jsx)(`span`,{className:`ml-2 inline-block h-3 w-3 rounded`,style:{backgroundColor:e.color}})]},e.value))})]});if(Array.isArray(C)&&C.length>0)return(0,G.jsxs)(s,{value:o==null?``:String(o),onValueChange:e=>c(e),disabled:l,children:[(0,G.jsx)(w,{id:e,"aria-labelledby":t,"aria-required":y,children:(0,G.jsx)(F,{placeholder:U(`engine.form.selectEllipsis`,h)})}),(0,G.jsx)(p,{children:C.map(e=>(0,G.jsx)(_,{value:String(e),children:Se(r??``,String(e),h)},String(e)))})]});if(x===`boolean`||u===`switch`||d?.type===`boolean`||d?.type===`toggle`)return(0,G.jsx)(M,{id:e,"aria-labelledby":t,"aria-required":y,checked:!!o,onCheckedChange:e=>c(e),disabled:l});if(x===`number`||x===`integer`){let n=e=>{let t=b?.[e];return typeof t==`number`&&Number.isFinite(t)?t:void 0},r=d?.min??n(`minimum`),i=d?.max??n(`maximum`),a=n(`multipleOf`),s=n(`default`);return(0,G.jsx)(N,{id:e,"aria-labelledby":t,"aria-required":y,type:`number`,value:o==null?``:String(o),placeholder:s==null?void 0:String(s),min:r,max:i,step:a,onChange:e=>{let t=e.target.value;if(t===``)return c(void 0);let n=x===`integer`?parseInt(t,10):Number(t);c(Number.isFinite(n)?n:void 0)},readOnly:l})}if(x===`string`){let n=d?.maxLength;return b?.format===`multiline`||b?.contentMediaType===`text/markdown`||typeof o==`string`&&o.length>80?(0,G.jsx)(D,{id:e,"aria-labelledby":t,"aria-required":y,rows:4,value:o??``,maxLength:n,onChange:e=>c(e.target.value||void 0),readOnly:l}):(0,G.jsx)(N,{id:e,"aria-labelledby":t,"aria-required":y,value:o??``,maxLength:n,onChange:e=>c(e.target.value||void 0),readOnly:l})}if(x===`array`){let n=b?.items??{};if(n.type===`string`||n.type===`number`||n.type===`integer`)return(0,G.jsx)(N,{id:e,"aria-labelledby":t,"aria-required":y,value:(Array.isArray(o)?o:[]).map(String).join(`, `),placeholder:U(`engine.form.arrayPlaceholder`,h),onChange:e=>{let t=e.target.value.split(`,`).map(e=>e.trim()).filter(Boolean);n.type===`number`||n.type===`integer`?c(t.map(e=>Number(e)).filter(e=>Number.isFinite(e))):c(t)},readOnly:l})}return(0,G.jsx)(Ki,{id:e,ariaLabelledBy:t,required:n,value:o,onChange:c,readOnly:l,small:!0})}function Vi(e,t,n){if(!e)return{};let r;return r=t===`composite`?e.properties:t===`repeater`?e.items?.properties:e.additionalProperties?.properties,r?.[n]??{}}function Hi(e,t){let n=[];for(let r of t){let t=e[r.field];if(t==null||t===``||t===!1)continue;let i=r.label||r.field;t===!0?n.push(i):Array.isArray(t)?t.length&&n.push(t.map(e=>typeof e==`object`&&e?e.field??e.name??``:String(e)).filter(Boolean).join(`, `)):typeof t==`object`?n.push(i):n.push(String(t))}return n.join(` · `)}function Ui({value:e,fields:t,schema:n,readOnly:r,widgetContext:i,fieldSpec:a,ariaLabelledBy:o,idPath:s,onChange:c}){let l=V(),d=e&&typeof e==`object`&&!Array.isArray(e)?e:{},f=t.map(Pi),p=f.map(e=>{let t=Vi(n,`composite`,e.field);return(0,G.jsx)(zi,{name:e.field,idPath:s,schema:t,value:d[e.field],required:!!e.required,readOnly:r||e.readonly,fieldSpec:e,widgetContext:i,formData:d,onChange:t=>c({...d,[e.field]:t})},e.field)});if(a?.disclosure===`popover`){let e=Hi(d,f);return(0,G.jsxs)(`div`,{className:`flex items-center justify-between gap-2 rounded-md border border-border/50 bg-muted/20 px-3 py-1.5`,role:`group`,"aria-labelledby":o,children:[(0,G.jsx)(`span`,{className:`text-sm text-muted-foreground truncate`,title:e,children:e||(0,G.jsx)(`span`,{className:`italic opacity-70`,children:U(`engine.form.notConfigured`,l)})}),(0,G.jsxs)(T,{children:[(0,G.jsx)(g,{asChild:!0,children:(0,G.jsx)(P,{variant:`ghost`,size:`sm`,className:`h-7 w-7 p-0 shrink-0`,"aria-label":U(`engine.form.configure`,l),"data-testid":`composite-popover-${a.field}`,children:(0,G.jsx)(fe,{className:`h-4 w-4`})})}),(0,G.jsx)(u,{align:`end`,className:`w-80 space-y-3`,children:p})]})]})}return(0,G.jsx)(`div`,{className:`rounded-md border border-border/50 bg-muted/20 p-3 space-y-3`,role:`group`,"aria-labelledby":o,children:p})}function Wi({value:e,fields:t,schema:n,readOnly:r,widgetContext:i,widget:a,ariaLabelledBy:o,idPath:s,onChange:c}){let l=V(),u=Array.isArray(e)?e:[],d=t.map(Pi),[f,p]=W.useState(null),m=a===`grid`||a===`table`,h=(e,t)=>Ri($($(s,e),t)),g=e=>`${Ri($(s,e))}-col`,_=(e,t)=>{c(u.map((n,r)=>r===e?{...n,...t}:n))},v=e=>c(u.filter((t,n)=>n!==e)),y=()=>{let e={};d.forEach(t=>{e[t.field]=void 0}),c([...u,e]),p(u.length)};return m?(0,G.jsxs)(`div`,{className:`space-y-2`,role:`group`,"aria-labelledby":o,children:[(0,G.jsx)(`div`,{className:`overflow-x-auto rounded-md border border-border/50`,children:(0,G.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,G.jsx)(`thead`,{className:`bg-muted/40`,children:(0,G.jsxs)(`tr`,{children:[d.map(e=>(0,G.jsxs)(`th`,{id:g(e.field),scope:`col`,className:`px-2 py-1.5 text-left text-xs font-medium`,children:[e.label||Yi(e.field),e.required&&(0,G.jsx)(`span`,{className:`text-destructive ml-0.5`,"aria-hidden":`true`,"data-required-marker":`true`,children:`*`})]},e.field)),!r&&(0,G.jsx)(`th`,{scope:`col`,className:`w-8`})]})}),(0,G.jsxs)(`tbody`,{children:[u.length===0&&(0,G.jsx)(`tr`,{children:(0,G.jsx)(`td`,{colSpan:d.length+1,className:`px-2 py-3 text-center text-xs text-muted-foreground`,children:U(`engine.repeater.empty`,l)})}),u.map((e,t)=>(0,G.jsxs)(`tr`,{className:`border-t border-border/30 align-top`,children:[d.map(a=>{let o=Vi(n,`repeater`,a.field);return(0,G.jsx)(`td`,{className:`p-1.5`,children:(0,G.jsx)(Bi,{id:h(t,a.field),ariaLabelledBy:g(a.field),required:!!a.required,fieldName:a.field,idPath:$($(s,t),a.field),schema:o,value:e?.[a.field],readOnly:r||a.readonly,widget:wi({name:a.field,schema:o,fieldSpec:a,widgetContext:i}),fieldSpec:a,widgetContext:i,formData:e,onChange:e=>_(t,{[a.field]:e})})},a.field)}),!r&&(0,G.jsx)(`td`,{className:`p-1.5 text-right`,children:(0,G.jsx)(P,{type:`button`,variant:`ghost`,size:`sm`,onClick:()=>v(t),className:`h-7 w-7 p-0`,"aria-label":U(`engine.form.remove`,l),children:(0,G.jsx)(me,{className:`h-3.5 w-3.5`})})})]},t))]})]})}),!r&&(0,G.jsxs)(P,{type:`button`,variant:`outline`,size:`sm`,onClick:y,children:[(0,G.jsx)(B,{className:`h-3.5 w-3.5 mr-1`}),` `,U(`engine.form.add`,l)]})]}):(0,G.jsxs)(`div`,{className:`space-y-2`,role:`group`,"aria-labelledby":o,children:[u.length===0&&(0,G.jsx)(`div`,{className:`rounded-md border border-dashed border-border/50 px-3 py-4 text-center text-xs text-muted-foreground`,children:U(`engine.list.empty`,l)}),u.map((e,t)=>{let a=f===t,o=d.map(t=>e?.[t.field]).find(e=>e!=null&&e!==``);return(0,G.jsxs)(`div`,{className:`rounded-md border border-border/50 bg-muted/10`,children:[(0,G.jsxs)(`div`,{className:`flex items-center justify-between gap-2 px-2 py-1.5 border-b border-border/30`,children:[(0,G.jsxs)(`button`,{type:`button`,onClick:()=>p(a?null:t),className:`flex items-center gap-1.5 text-sm font-medium text-left flex-1 min-w-0`,children:[a?(0,G.jsx)(R,{className:`h-3.5 w-3.5`}):(0,G.jsx)(ne,{className:`h-3.5 w-3.5`}),(0,G.jsxs)(`span`,{className:`truncate`,children:[`#`,t+1,o==null?``:` — ${String(o)}`]})]}),!r&&(0,G.jsx)(P,{type:`button`,variant:`ghost`,size:`sm`,onClick:()=>v(t),className:`h-7 w-7 p-0`,"aria-label":U(`engine.form.remove`,l),children:(0,G.jsx)(me,{className:`h-3.5 w-3.5`})})]}),a&&(0,G.jsx)(`div`,{className:`p-3 space-y-3`,children:d.map(a=>{let o=Vi(n,`repeater`,a.field);return(0,G.jsx)(zi,{name:a.field,idPath:$(s,t),schema:o,value:e?.[a.field],required:!!a.required,readOnly:r||a.readonly,fieldSpec:a,widgetContext:i,formData:e,onChange:e=>_(t,{[a.field]:e})},a.field)})})]},t)}),!r&&(0,G.jsxs)(P,{type:`button`,variant:`outline`,size:`sm`,onClick:y,children:[(0,G.jsx)(B,{className:`h-3.5 w-3.5 mr-1`}),` `,U(`engine.form.addItem`,l)]})]})}function Gi({value:e,fields:t,schema:n,readOnly:r,widgetContext:i,widget:a,keyField:o,formData:s,ariaLabelledBy:c,idPath:l,onChange:u}){let d=V(),f=I(),[p,m]=W.useState(null),[h,g]=W.useState(``),[_,v]=W.useState(null),[y,b]=W.useState(null),[x,S]=W.useState(null);if(a){let o=Xr[a];if(o)return(0,G.jsx)(o,{ariaLabelledBy:c,schema:n,value:e,onChange:u,readOnly:r,context:i,fieldSpec:{field:``,type:`record`,fields:t,widget:a},formData:s})}let C=o?.field??`name`,w=o?.label??Yi(C),T=o?.regex?new RegExp(o.regex):null,E=o?.immutable!==!1,D=e&&typeof e==`object`&&!Array.isArray(e)?e:{},O=Object.entries(D),k=t.map(Pi).filter(e=>e.field!==C),A=e=>u(e),j=(e,t)=>{let n={};for(let[r,i]of O)n[r]=r===e?{...i,...t}:i;A(n)},M=e=>{let t={};for(let[n,r]of O)n!==e&&(t[n]=r);A(t)},F=(e,t)=>{if(t===e)return;if(D[t]){v(H(`engine.form.keyExists`,d,{key:t}));return}if(T&&!T.test(t)){v(H(`engine.form.keyPattern`,d,{pattern:String(T)}));return}let n={};for(let[r,i]of O)r===e?n[t]={...i,[C]:t}:n[r]=i;v(null),A(n)},L=()=>{let e=h.trim();if(!e){v(U(`engine.form.keyRequired`,d));return}if(D[e]){v(H(`engine.form.keyExists`,d,{key:e}));return}if(T&&!T.test(e)){v(H(`engine.form.keyPattern`,d,{pattern:String(T)}));return}let t={[C]:e};k.forEach(e=>{t[e.field]=void 0}),A({...D,[e]:t}),g(``),v(null),m(e)},ee=(e,t)=>{if(e===t)return;let n=O.map(([e])=>e),r=n.indexOf(e),i=n.indexOf(t);if(r<0||i<0)return;n.splice(r,1),n.splice(i,0,e);let a={};for(let e of n)a[e]=D[e];A(a)};return(0,G.jsxs)(`div`,{className:`space-y-2`,role:`group`,"aria-labelledby":c,children:[O.length===0&&(0,G.jsx)(`div`,{className:`rounded-md border border-dashed border-border/50 px-3 py-4 text-center text-xs text-muted-foreground`,children:U(`engine.list.empty`,d)}),O.map(([e,t],a)=>{let s=p===e,c=k.map(e=>t?.[e.field]).find(e=>e!=null&&e!==``);return(0,G.jsxs)(`div`,{className:`rounded-md border bg-muted/10 ${x===e&&y&&y!==e?`border-primary border-2`:`border-border/50`}`,onDragOver:t=>{y&&!r&&(t.preventDefault(),x!==e&&S(e))},onDragLeave:()=>{x===e&&S(null)},onDrop:t=>{y&&!r&&(t.preventDefault(),ee(y,e),b(null),S(null))},children:[(0,G.jsxs)(`div`,{className:`flex items-center justify-between gap-2 px-2 py-1.5 border-b border-border/30`,children:[!r&&(0,G.jsx)(`span`,{draggable:!0,onDragStart:t=>{b(e),t.dataTransfer.effectAllowed=`move`,t.dataTransfer.setData(`text/plain`,e)},onDragEnd:()=>{b(null),S(null)},className:`cursor-grab active:cursor-grabbing text-muted-foreground hover:text-foreground`,"aria-label":U(`engine.form.dragToReorder`,d),title:U(`engine.form.dragToReorder`,d),children:(0,G.jsx)(le,{className:`h-3.5 w-3.5`})}),(0,G.jsxs)(`button`,{type:`button`,onClick:()=>m(s?null:e),className:`flex items-center gap-1.5 text-sm font-medium text-left flex-1 min-w-0`,children:[s?(0,G.jsx)(R,{className:`h-3.5 w-3.5`}):(0,G.jsx)(ne,{className:`h-3.5 w-3.5`}),(0,G.jsx)(`span`,{className:`font-mono text-xs px-1.5 py-0.5 rounded bg-muted/60`,children:e}),c!=null&&(0,G.jsxs)(`span`,{className:`truncate text-muted-foreground`,children:[`— `,String(c)]})]}),!r&&(0,G.jsx)(P,{type:`button`,variant:`ghost`,size:`sm`,onClick:()=>M(e),className:`h-7 w-7 p-0`,"aria-label":U(`engine.form.remove`,d),children:(0,G.jsx)(me,{className:`h-3.5 w-3.5`})})]}),s&&(0,G.jsxs)(`div`,{className:`p-3 space-y-3`,children:[(0,G.jsx)(zi,{name:C,idPath:$(l,a),schema:{type:`string`},value:e,required:!0,readOnly:r||E,fieldSpec:{field:C,type:`text`,label:w,helpText:o?.helpText},widgetContext:i,formData:t,onChange:t=>F(e,String(t??``).trim())}),k.map(o=>{let s=Ti(o);if(s&&!nt(s,K(t,f)))return null;let c=Vi(n,`record`,o.field);return(0,G.jsx)(zi,{name:o.field,idPath:$(l,a),schema:c,value:t?.[o.field],required:!!o.required,readOnly:r||o.readonly,fieldSpec:o,widgetContext:i,formData:t,onChange:t=>j(e,{[o.field]:t})},o.field)})]})]},e)}),!r&&(0,G.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,G.jsx)(N,{value:h,onChange:e=>{g(e.target.value),_&&v(null)},placeholder:o?.placeholder??w,className:`h-8 text-xs font-mono max-w-[220px]`,onKeyDown:e=>{e.key===`Enter`&&(e.preventDefault(),L())}}),(0,G.jsxs)(P,{type:`button`,variant:`outline`,size:`sm`,onClick:L,children:[(0,G.jsx)(B,{className:`h-3.5 w-3.5 mr-1`}),` `,U(`engine.form.add`,d)]}),_&&(0,G.jsx)(`span`,{className:`text-xs text-destructive`,children:_})]})]})}function Ki({id:e,ariaLabelledBy:t,required:n,value:r,onChange:i,readOnly:a,small:o}){let s=V(),[c,l]=W.useState(()=>Ji(r)),[u,d]=W.useState(null);return W.useEffect(()=>{l(Ji(r)),d(null)},[JSON.stringify(r)]),(0,G.jsxs)(`div`,{className:`space-y-1`,children:[(0,G.jsx)(D,{id:e,"aria-labelledby":t,"aria-required":n?!0:void 0,rows:o?4:12,className:`font-mono text-xs`,value:c,readOnly:a,onChange:e=>{let t=e.target.value;if(l(t),!t.trim()){d(null),i(void 0);return}try{let e=JSON.parse(t);d(null),i(e)}catch(e){d(e?.message??U(`engine.form.invalidJson`,s))}}}),u&&(0,G.jsx)(`div`,{className:`text-xs text-destructive`,children:u})]})}function qi(e){let t={};for(let[n,r]of Object.entries(e))if(!n.startsWith(`_`)){if(r==null)t[n]={type:`string`};else if(typeof r==`string`)t[n]=r.length>80||r.includes(`
3
- `)?{type:`string`,format:`multiline`}:{type:`string`};else if(typeof r==`number`)t[n]={type:Number.isInteger(r)?`integer`:`number`};else if(typeof r==`boolean`)t[n]={type:`boolean`};else if(Array.isArray(r)){if(r.length>0&&typeof r[0]==`string`)t[n]={type:`array`,items:{type:`string`}};else if(r.length>0&&typeof r[0]==`object`&&r[0]!==null){let e=r[0],i={};for(let t of Object.keys(e))i[t]={type:`string`};t[n]={type:`array`,items:{type:`object`,properties:i}}}else t[n]={type:`array`,items:{type:`string`}}}else t[n]=typeof r==`object`?{type:`object`,additionalProperties:!0}:{type:`string`}}return{type:`object`,properties:t,additionalProperties:!0}}function Ji(e){if(e===void 0)return``;try{return JSON.stringify(e,null,2)}catch{return String(e)}}function Yi(e){return e.replace(/[_-]+/g,` `).replace(/([a-z])([A-Z])/g,`$1 $2`).replace(/\b\w/g,e=>e.toUpperCase())}function Xi(e,t){if(!t.length)return e;let n=new Set(e),r=t.filter(e=>n.has(e)),i=e.filter(e=>!t.includes(e));return[...r,...i]}function Zi(e){let t=e?.properties??{};return Object.keys(t)}export{ze as $,Sn as A,Le as B,Ln as C,Mn as D,wn as E,It as F,Ve as G,qe as H,Kt as I,Fe as J,je as K,Tt as L,vn as M,fn as N,Nn as O,Qt as P,Pe as Q,wt as R,Dn as S,An as T,We as U,He as V,Ae as W,Re as X,Be as Y,Ne as Z,Fn as _,ri as a,Tn as b,ar as c,rr as d,ke as et,ur as f,In as g,Vn as h,ii as i,an as j,kn as k,or as l,zn as m,Di as n,Pr as o,nr as p,Oe as q,Ni as r,gr as s,Oi as t,ir as u,On as v,jn as w,Rn as x,En as y,Je as z};
@@ -1 +0,0 @@
1
- import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{m as t,p as n,r,t as i,v as a}from"./vendor-react-BggL7APJ.js";import{p as o}from"./infrastructure-BHSync5f.js";import{$ as s,Br as c,ni as l,qn as u,zr as d}from"./ui-components-BTB1NkUW.js";import{G as f,K as p,Pr as m,y as h}from"./framework-DcWkeiND.js";import{w as g}from"./i18n-runtime-CTgAQF4N.js";import{t as _}from"./vendor-icon-arrow-left-DmGEbpkA.js";import{t as v}from"./vendor-icon-chart-column-DicJIApF.js";import{t as y}from"./vendor-icon-database-C8JGjSkn.js";import{t as b}from"./vendor-icon-file-text-7BKAVNof.js";import{t as x}from"./vendor-icon-layout-dashboard-wba2hvZp.js";import{t as S}from"./vendor-icon-search-B2Uqtp_W.js";import{i as C}from"./appRoute-DbnWDEa1.js";import{n as w}from"./utils-MjUhYVsx.js";import{o as T}from"./ui-layout-bZfafwJa.js";import{t as E}from"./getIcon-BEVyC4y3.js";var D=e(a(),1),O=i();function k(e){let t=[];for(let n of e)n.type===`group`&&n.children?t.push(...k(n.children)):t.push(n);return t}var A={object:y,dashboard:x,page:b,report:v},j={object:`bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-200`,dashboard:`bg-purple-100 text-purple-800 dark:bg-purple-900 dark:text-purple-200`,page:`bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200`,report:`bg-orange-100 text-orange-800 dark:bg-orange-900 dark:text-orange-200`};function M(){let{t:e}=g(),{appName:i}=n(),[a,v]=t(),b=a.get(`q`)||``,[x,M]=(0,D.useState)(b),{apps:N,objects:P}=p(),F=N||[],I=(0,D.useMemo)(()=>P||[],[P]),L=C(F,i)||F[0],R=`/apps/${i}`,{user:z,activeOrganization:B}=o(),V=f(),H=(0,D.useMemo)(()=>{if(!L)return[];let e=k(L.navigation||[]),t={currentUserId:z?.id??null,currentOrgId:B?.id??null};return e.map(e=>{let{href:n}=T(e,R,t);return{id:e.id,label:e.label||e.objectName||e.dashboardName||e.pageName||e.reportName||``,href:n,type:e.type,description:e.description}}).filter(e=>e.href!==`#`)},[L,R,z?.id]),U=(0,D.useMemo)(()=>{if(!x.trim())return H;let e=x.toLowerCase();return H.filter(t=>t.label.toLowerCase().includes(e)||t.type.toLowerCase().includes(e)||t.description&&t.description.toLowerCase().includes(e))},[H,x]),W=e=>{M(e),v(e?{q:e}:{})},G=(0,D.useMemo)(()=>{let e={};for(let t of U)(e[t.type]||=[]).push(t);return e},[U]),K=(0,D.useMemo)(()=>L?k(L.navigation||[]).filter(e=>e.type===`object`&&typeof e.objectName==`string`).map(e=>e.objectName):[],[L]),q=s(),{results:J,isSearching:Y}=h({query:x,objects:I,dataSource:V,objectNames:K,enabled:!!V&&x.trim().length>=2,topPerObject:5,maxObjectsQueried:12,getDisplayName:m,fieldReadPolicy:q}),X=(0,D.useMemo)(()=>{let e=new Map;for(let t of I)typeof t?.name==`string`&&e.set(t.name,t);return e},[I]),Z=(0,D.useMemo)(()=>{let t=[],n=new Map;for(let r of J){let i=n.get(r.objectName);if(!i){let a=X.get(r.objectName);i={label:w(a?.label,e)||r.objectLabel,icon:a?.icon??r.icon,hits:[]},n.set(r.objectName,i),t.push(r.objectName)}i.hits.push(r)}return t.map(e=>({objectName:e,...n.get(e)}))},[J,X,e]),Q=U.length+J.length,$=Q>0;return(0,O.jsxs)(`div`,{className:`flex flex-col gap-6 p-4 sm:p-6 max-w-4xl mx-auto`,children:[(0,O.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,O.jsxs)(r,{to:R,className:`flex items-center gap-1 text-sm text-muted-foreground hover:text-foreground transition-colors`,children:[(0,O.jsx)(_,{className:`h-4 w-4`}),e(`search.back`)]}),(0,O.jsx)(`h1`,{className:`text-xl font-semibold`,children:e(`search.title`)})]}),(0,O.jsxs)(`div`,{className:`relative`,children:[(0,O.jsx)(`label`,{htmlFor:`search-results-input`,className:`sr-only`,children:e(`search.placeholder`)}),(0,O.jsx)(S,{className:`absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground`,"aria-hidden":`true`}),(0,O.jsx)(u,{id:`search-results-input`,value:x,onChange:e=>W(e.target.value),placeholder:e(`search.placeholder`),className:`pl-10 h-11 text-base`,autoFocus:!0})]}),(0,O.jsxs)(`div`,{className:`flex items-center gap-2 text-sm text-muted-foreground`,children:[(0,O.jsx)(`span`,{children:x.trim()?e(Q===1?`search.resultsCount`:`search.resultsCountPlural`,{count:Q,query:x}):e(H.length===1?`search.itemsAvailableOne`:`search.itemsAvailable`,{count:H.length})}),Y&&(0,O.jsx)(`span`,{"aria-hidden":!0,className:`inline-block h-1.5 w-1.5 rounded-full bg-primary motion-safe:animate-pulse`})]}),!$&&!Y?(0,O.jsxs)(`div`,{className:`flex flex-col items-center justify-center py-12 text-center`,children:[(0,O.jsx)(S,{className:`h-12 w-12 text-muted-foreground/30 mb-4`}),(0,O.jsx)(`p`,{className:`text-lg font-medium text-muted-foreground`,children:e(`search.noResults`)}),(0,O.jsx)(`p`,{className:`text-sm text-muted-foreground/80 mt-1`,children:e(`search.noResultsHint`)})]}):(0,O.jsxs)(`div`,{className:`space-y-6`,children:[Z.map(e=>{let t=E(e.icon);return(0,O.jsxs)(`div`,{children:[(0,O.jsxs)(`h2`,{className:`text-sm font-medium text-muted-foreground mb-2 flex items-center gap-1.5`,children:[(0,O.jsx)(t,{className:`h-4 w-4`}),e.label,(0,O.jsx)(l,{variant:`secondary`,className:`ml-1 text-xs`,children:e.hits.length})]}),(0,O.jsx)(`div`,{className:`grid gap-2`,children:e.hits.map(e=>{let t=E(e.icon);return(0,O.jsx)(r,{to:`${R}/${e.objectName}/record/${e.recordId}`,className:`rounded-lg focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2`,children:(0,O.jsx)(d,{className:`hover:bg-accent/50 transition-colors cursor-pointer`,children:(0,O.jsxs)(c,{className:`flex items-center gap-3 p-3`,children:[(0,O.jsx)(`div`,{className:`flex h-8 w-8 items-center justify-center rounded bg-primary/10 text-primary`,children:(0,O.jsx)(t,{className:`h-4 w-4`})}),(0,O.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,O.jsx)(`p`,{className:`text-sm font-medium truncate`,children:e.display}),e.subtitle&&(0,O.jsx)(`p`,{className:`text-xs text-muted-foreground truncate`,children:e.subtitle})]})]})})},`${e.objectName}:${e.recordId}`)})})]},`records:${e.objectName}`)}),Object.entries(G).map(([t,n])=>{let i=A[t]||y,a=`search.type${t.charAt(0).toUpperCase()}${t.slice(1)}s`;return(0,O.jsxs)(`div`,{children:[(0,O.jsxs)(`h2`,{className:`text-sm font-medium text-muted-foreground mb-2 flex items-center gap-1.5`,children:[(0,O.jsx)(i,{className:`h-4 w-4`}),e(a),(0,O.jsx)(l,{variant:`secondary`,className:`ml-1 text-xs`,children:n.length})]}),(0,O.jsx)(`div`,{className:`grid gap-2`,children:n.map(t=>{let n=A[t.type]||y,i=`search.badge${t.type.charAt(0).toUpperCase()}${t.type.slice(1)}`;return(0,O.jsx)(r,{to:t.href,className:`rounded-lg focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2`,children:(0,O.jsx)(d,{className:`hover:bg-accent/50 transition-colors cursor-pointer`,children:(0,O.jsxs)(c,{className:`flex items-center gap-3 p-3`,children:[(0,O.jsx)(`div`,{className:`flex h-8 w-8 items-center justify-center rounded ${j[t.type]||``}`,children:(0,O.jsx)(n,{className:`h-4 w-4`})}),(0,O.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,O.jsx)(`p`,{className:`text-sm font-medium truncate`,children:t.label}),t.description&&(0,O.jsx)(`p`,{className:`text-xs text-muted-foreground truncate`,children:t.description})]}),(0,O.jsx)(l,{variant:`outline`,className:`text-xs shrink-0`,children:e(i)})]})})},t.id)})})]},t)})]})]})}export{M as SearchResultsPage};
@@ -1 +0,0 @@
1
- import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{d as t,p as n,t as r,v as i}from"./vendor-react-BggL7APJ.js";import{Br as a,Dn as o,Fn as s,Hn as c,In as l,Ln as u,Pn as d,Rn as f,Rr as p,Vn as m,Yt as h,Zn as g,ci as _,ni as v,oi as y,on as b,qn as x,si as S,sn as C,vi as w,zn as T,zr as E}from"./ui-components-BTB1NkUW.js";import{a as D}from"./framework-DcWkeiND.js";import{w as O}from"./i18n-runtime-CTgAQF4N.js";import{r as k}from"./vendor-ui-utils-DIUdEYii.js";import{t as A}from"./vendor-icon-arrow-left-DmGEbpkA.js";import{t as j}from"./vendor-icon-chevron-right-DbnKwHYQ.js";import{t as M}from"./vendor-icon-info-DBwRTfSE.js";import{t as N}from"./vendor-icon-loader-circle-D3PsuVaD.js";import{t as P}from"./vendor-icon-lock-B_psRnly.js";import{t as F}from"./vendor-icon-rotate-ccw-lr5YKsxC.js";import{t as I}from"./vendor-icon-shield-alert-CJYtPI9w.js";import{a as L,c as R,n as z,o as B,r as V,s as H,t as U}from"./useSettingsLabel-Kkr2q0Oo.js";var W=e(i(),1),G=r();function K({reason:e,className:t}){return(0,G.jsxs)(v,{variant:`outline`,className:`gap-1 border-amber-300 bg-amber-50 text-amber-900 ${t??``}`,title:e??`Pinned by environment variable — cannot be edited from the UI.`,children:[(0,G.jsx)(P,{className:`h-3 w-3`}),`Locked by env`]})}function q({resolved:e,labels:t}){let n=e.cascadeChain;if(!n||n.length===0)return null;let r=n.find(e=>e.effective)??n[n.length-1],i=n.find(e=>e!==r&&e.value!==null&&e.value!==void 0),a=e=>t?.sourceLabel?.(e)??e;return r.scope!=="default"&&r.scope!==`user`&&r.scope!==`tenant`?(0,G.jsxs)(v,{variant:`outline`,className:`text-blue-700 border-blue-300 text-[10px]`,children:[`Inherited from `,a(r.scope)]}):i?(0,G.jsxs)(v,{variant:`outline`,className:`text-amber-700 border-amber-300 text-[10px]`,children:[`Overrides `,a(i.scope)]}):null}function J({spec:e,resolved:t,labelText:n,labels:r}){return(0,G.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,G.jsxs)(g,{className:`text-sm font-medium`,children:[n,e.required?(0,G.jsx)(`span`,{className:`ml-0.5 text-destructive`,children:`*`}):null]}),e.deprecated?(0,G.jsxs)(v,{variant:`outline`,className:`text-amber-700 border-amber-300`,children:[`Deprecated`,e.replacedBy?` → ${e.replacedBy}`:``]}):null,t?.locked?(0,G.jsx)(K,{reason:t.lockedReason}):null,t&&!t.locked?(0,G.jsx)(q,{resolved:t,labels:r}):null,t?.source&&t.source!=="default"&&!t.locked?(0,G.jsx)(`span`,{className:`text-[11px] text-muted-foreground`,children:r?.sourceLabel?.(t.source)??t.source}):null]})}function Y({description:e}){return e?(0,G.jsx)(`p`,{className:`text-xs text-muted-foreground mt-1`,children:e}):null}function X({id:e,message:t}){return(0,G.jsx)(`p`,{id:e,role:`alert`,className:`text-xs text-destructive mt-1`,children:t})}function Z({id:e,value:t,options:n,disabled:r,onChange:i,...a}){let o=`${e}-domain`;return(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(x,{id:e,type:`text`,list:n.length>0?o:void 0,value:t==null?``:String(t),disabled:r,onChange:e=>i(e.target.value),...a}),n.length>0?(0,G.jsx)(`datalist`,{id:o,children:n.map(e=>(0,G.jsx)(`option`,{value:e.value,children:e.label},e.value))}):null]})}function Q(e){let{spec:t,resolved:n,value:r,onChange:i,onAction:a,locked:o,saving:v,labels:E,error:D}=e,O=(0,W.useId)(),k=!!(o||v),A=z(t.label),N=t.key&&E?E.fieldLabel(t.key,A):A,P=t.key&&E?E.fieldHelp(t.key,t.description):t.description;if(t.type===`group`){let e=t.id&&E?E.groupTitle(t.id,A):A,n=t.id&&E?E.groupDescription(t.id,t.description):t.description;return(0,G.jsxs)(`div`,{className:`pt-6 pb-2`,children:[(0,G.jsx)(`h3`,{className:`text-sm font-semibold tracking-tight text-foreground/90`,children:e}),n?(0,G.jsx)(`p`,{className:`text-xs text-muted-foreground mt-1`,children:n}):null,(0,G.jsx)(d,{className:`mt-3`})]})}if(t.type===`info_banner`){let e=t.bannerSeverity===`error`?`destructive`:`default`;return(0,G.jsxs)(y,{variant:e,className:`my-2`,children:[(0,G.jsx)(M,{className:`h-4 w-4`}),(0,G.jsx)(_,{children:A}),t.bannerText?(0,G.jsx)(S,{children:t.bannerText}):null]})}if(t.type===`child_pane`)return(0,G.jsxs)(`a`,{href:`#/settings/${t.childNamespace}`,className:`flex items-center justify-between rounded-md border border-border bg-card px-4 py-3 hover:bg-accent transition-colors`,children:[(0,G.jsxs)(`div`,{children:[(0,G.jsx)(`div`,{className:`text-sm font-medium`,children:A}),t.description?(0,G.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:t.description}):null]}),(0,G.jsx)(j,{className:`h-4 w-4 text-muted-foreground`})]});if(t.type===`title_value`)return(0,G.jsxs)(`div`,{className:`flex items-center justify-between py-2`,children:[(0,G.jsx)(J,{spec:t,resolved:n,labelText:N,labels:E}),(0,G.jsx)(`span`,{className:`text-sm text-muted-foreground`,children:String(r??`—`)})]});if(t.type===`action_button`){let e=t.icon?R(t.icon):null,n=t.id??t.key??`test`,r=E?E.actionLabel(n,A):A;return(0,G.jsxs)(`div`,{className:`flex items-center justify-between py-3`,children:[(0,G.jsxs)(`div`,{children:[(0,G.jsx)(`div`,{className:`text-sm font-medium`,children:r}),t.description?(0,G.jsx)(`p`,{className:`text-xs text-muted-foreground mt-1`,children:t.description}):null]}),(0,G.jsxs)(w,{size:`sm`,variant:`secondary`,onClick:a,disabled:v,children:[e?(0,G.jsx)(e,{className:`h-4 w-4 mr-1.5`}):null,r]})]})}let F=`${O}-error`,I=e=>(0,G.jsxs)(`div`,{className:`space-y-1.5 py-2`,children:[(0,G.jsx)(J,{spec:t,resolved:n,labelText:N,labels:E}),D&&(0,W.isValidElement)(e)?(0,W.cloneElement)(e,{"aria-invalid":!0,"aria-describedby":F}):e,D?(0,G.jsx)(X,{id:F,message:D}):(0,G.jsx)(Y,{description:P})]}),L=e=>{let n=typeof e.label==`string`?e.label:e.label?.defaultValue??String(e.value);return!t.key||!E?n:E.optionLabel(t.key,String(e.value),n)};switch(t.type){case`text`:case`email`:case`url`:case`phone`:return I((0,G.jsx)(x,{id:O,type:t.type===`email`?`email`:t.type===`url`?`url`:`text`,value:r??``,minLength:t.minLength,maxLength:t.maxLength,pattern:t.pattern,disabled:k,onChange:e=>i(e.target.value)}));case`password`:return I((0,G.jsx)(x,{id:O,type:`password`,autoComplete:`new-password`,placeholder:r?`••••••••`:``,disabled:k,onChange:e=>i(e.target.value)}));case`textarea`:return I((0,G.jsx)(h,{id:O,rows:t.rows??4,value:r??``,minLength:t.minLength,maxLength:t.maxLength,disabled:k,onChange:e=>i(e.target.value)}));case`number`:return I((0,G.jsx)(x,{id:O,type:`number`,value:r,min:t.min,max:t.max,step:t.step,disabled:k,onChange:e=>i(e.target.value===``?null:Number(e.target.value))}));case`toggle`:return(0,G.jsxs)(`div`,{className:`flex items-center justify-between py-3`,children:[(0,G.jsxs)(`div`,{children:[(0,G.jsx)(J,{spec:t,resolved:n,labelText:N,labels:E}),(0,G.jsx)(Y,{description:P})]}),(0,G.jsx)(b,{id:O,checked:!!r,disabled:k,onCheckedChange:e=>i(e)})]});case`select`:return t.valueDomain?I((0,G.jsx)(Z,{id:O,value:r,disabled:k,onChange:i,options:(t.options??[]).map(e=>({value:String(e.value),label:L(e)}))})):I((0,G.jsxs)(s,{value:r==null?void 0:String(r),onValueChange:e=>i(e),disabled:k,children:[(0,G.jsx)(f,{id:O,children:(0,G.jsx)(T,{placeholder:`Select…`})}),(0,G.jsx)(l,{children:t.options?.map(e=>(0,G.jsx)(u,{value:String(e.value),children:L(e)},String(e.value)))})]}));case`radio`:return I((0,G.jsx)(m,{value:r==null?void 0:String(r),onValueChange:e=>i(e),disabled:k,children:t.options?.map(e=>(0,G.jsxs)(`div`,{className:`flex items-center space-x-2`,children:[(0,G.jsx)(c,{value:String(e.value),id:`${O}-${e.value}`}),(0,G.jsx)(g,{htmlFor:`${O}-${e.value}`,className:`text-sm font-normal`,children:L(e)})]},String(e.value)))}));case`multiselect`:{let e=Array.isArray(r)?r:[];return I((0,G.jsx)(`div`,{className:`grid grid-cols-2 gap-2`,children:t.options?.map(t=>{let n=String(t.value),r=e.map(String).includes(n);return(0,G.jsxs)(`label`,{className:`flex items-center gap-2 text-sm`,children:[(0,G.jsx)(p,{checked:r,disabled:k,onCheckedChange:t=>{let r=new Set(e.map(String));t?r.add(n):r.delete(n),i(Array.from(r))}}),L(t)]},n)})}))}case`slider`:return I((0,G.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,G.jsx)(C,{value:[Number(r??t.min??0)],min:t.min??0,max:t.max??100,step:t.step??1,disabled:k,onValueChange:e=>i(e[0]),className:`flex-1`}),(0,G.jsx)(`span`,{className:`text-sm tabular-nums w-12 text-right`,children:String(r??t.min??0)})]}));case`color`:return I((0,G.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,G.jsx)(x,{id:O,type:`color`,value:r??`#000000`,disabled:k,onChange:e=>i(e.target.value),className:`w-16 h-9 p-1`}),(0,G.jsx)(x,{value:r??``,disabled:k,onChange:e=>i(e.target.value),className:`flex-1 font-mono text-sm`})]}));case`json`:return I((0,G.jsx)(h,{id:O,rows:t.rows??6,className:`font-mono text-xs`,value:typeof r==`string`?r:JSON.stringify(r??null,null,2),disabled:k,onChange:e=>i(e.target.value)}));default:return I((0,G.jsxs)(`div`,{className:`text-sm text-muted-foreground`,children:[`Unsupported specifier type: `,t.type]}))}}function $(e,t){if(!e)return!0;let n=e.trim().match(/^\$\{(.+)\}$/);if(!n)return!0;try{return!!Function(`data`,`with (data) { return (${n[1]}); }`)(t)}catch{return!0}}function ee(e,t){let{[t]:n,...r}=e;return r}function te(e){let t=e??{},n=e=>typeof e==`string`&&e.length>0?e:void 0,r=t.details&&typeof t.details==`object`?t.details:void 0,i=n(r?.namespace),a=n(r?.key);return{subject:a?i?`${i}.${a}`:a:void 0,prescription:n(t.message)}}function ne(){let e=n(),r=t(),{t:i}=O(),s=e.namespace??``,[c,l]=(0,W.useState)(null),[u,d]=(0,W.useState)(!0),[f,p]=(0,W.useState)(!1),[m,h]=(0,W.useState)(null),[g,_]=(0,W.useState)({}),[y,b]=(0,W.useState)({}),[x,S]=(0,W.useState)(null),C=(0,W.useCallback)(async()=>{d(!0),h(null);try{let e=await V(s);l(e),_({}),b({}),S(null)}catch(e){h(e?.message??i(`console.settingsView.loadError`))}finally{d(!1)}},[s,i]);(0,W.useEffect)(()=>{s&&C()},[s,C]);let T=(0,W.useMemo)(()=>{let e={};if(!c)return e;for(let[t,n]of Object.entries(c.values))e[t]=n.value;return{...e,...g}},[c,g]),j=(0,W.useMemo)(()=>Object.keys(g),[g]),M=U(s);if(!s)return(0,G.jsx)(`div`,{className:`p-6 text-muted-foreground`,children:i(`console.settingsView.noNamespace`)});if(u)return(0,G.jsxs)(`div`,{className:`p-6 space-y-3 max-w-3xl`,children:[(0,G.jsx)(o,{className:`h-8 w-1/3`}),(0,G.jsx)(o,{className:`h-4 w-2/3`}),(0,G.jsx)(o,{className:`h-32 w-full`}),(0,G.jsx)(o,{className:`h-32 w-full`})]});if(m)return(0,G.jsxs)(`div`,{className:`p-6 max-w-3xl`,children:[(0,G.jsxs)(w,{variant:`ghost`,size:`sm`,onClick:()=>r(-1),children:[(0,G.jsx)(A,{className:`h-4 w-4 mr-1`}),` `,i(`console.settingsView.back`)]}),(0,G.jsx)(E,{className:`mt-3`,children:(0,G.jsx)(a,{className:`py-8 text-center text-sm text-destructive`,children:m})})]});if(!c)return null;let{manifest:P,values:K}=c,q=P.icon?R(P.icon):null,J=M.title(z(P.label)),Y=M.description(P.description),X=async()=>{if(j.length!==0){p(!0),S(null);try{let e=await H(s,g);l({...c,values:{...K,...e.values}}),_({}),b({}),k.success(i(`console.settingsView.saved`))}catch(e){let t=e?.payload?.error;if(t?.code===`SETTINGS_LOCKED`){let e=L(t);k.error(e?i(`console.settingsView.lockedByEnv`,{key:e}):i(`console.settingsView.lockedByEnvNoKey`))}else if(t?.code===`SETTINGS_CRYPTO_UNAVAILABLE`){let e=te(t);S(e),k.error(e.subject?i(`console.settingsView.cryptoRefusalToast`,{subject:e.subject}):i(`console.settingsView.cryptoRefusalToastNoSubject`))}else{let n=D(t);n?.length&&b(Object.fromEntries(n.map(e=>[e.field,e.message]))),k.error(e?.message??i(`console.settingsView.saveFailed`))}}finally{p(!1)}}},Z=async e=>{p(!0);try{let t=await B(s,e,g);t.ok?k.success(t.message??i(`console.settingsView.actionSucceeded`)):k.error(t.message??i(`console.settingsView.actionFailed`))}catch(e){k.error(e?.message??i(`console.settingsView.actionFailed`))}finally{p(!1)}};return(0,G.jsxs)(`div`,{className:`p-6 max-w-3xl mx-auto pb-32`,children:[(0,G.jsxs)(w,{variant:`ghost`,size:`sm`,onClick:()=>r(`/system/settings`),children:[(0,G.jsx)(A,{className:`h-4 w-4 mr-1`}),` `,i(`console.settingsView.backToHub`)]}),(0,G.jsxs)(`div`,{className:`mt-3 flex items-start gap-3`,children:[q?(0,G.jsx)(q,{className:`h-7 w-7 mt-0.5 text-muted-foreground`}):null,(0,G.jsxs)(`div`,{className:`flex-1`,children:[(0,G.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,G.jsx)(`h1`,{className:`text-2xl font-semibold tracking-tight`,children:J}),P.beta?(0,G.jsx)(v,{variant:`secondary`,children:i(`console.settingsHub.beta`)}):null]}),Y?(0,G.jsx)(`p`,{className:`text-sm text-muted-foreground mt-1`,children:Y}):null]})]}),P.helpText?(0,G.jsx)(`p`,{className:`text-sm text-muted-foreground mt-4 whitespace-pre-wrap`,children:P.helpText}):null,x?(0,G.jsx)(E,{className:`mt-4 border-destructive/50 bg-destructive/5`,children:(0,G.jsx)(a,{className:`py-4`,children:(0,G.jsxs)(`div`,{role:`alert`,className:`flex items-start gap-3`,children:[(0,G.jsx)(I,{className:`h-5 w-5 mt-0.5 shrink-0 text-destructive`}),(0,G.jsxs)(`div`,{className:`flex-1 text-sm`,children:[(0,G.jsx)(`p`,{className:`font-medium text-destructive`,children:i(`console.settingsView.cryptoRefusalTitle`)}),(0,G.jsx)(`p`,{className:`mt-1`,children:x.subject?(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(`code`,{className:`font-mono text-xs`,children:x.subject}),` `,i(`console.settingsView.cryptoRefusalSubjectSuffix`)]}):i(`console.settingsView.cryptoRefusalNoSubject`)}),x.prescription?(0,G.jsx)(`p`,{className:`mt-2 text-muted-foreground whitespace-pre-wrap`,children:x.prescription}):null]})]})})}):null,(0,G.jsx)(`div`,{className:`mt-6 divide-y`,children:P.specifiers.filter(e=>$(e.visible,T)).map((e,t)=>{let n=e.key,r=n?K[n]:void 0,i=n?n in g?g[n]:r?.value:void 0;return(0,G.jsx)(Q,{spec:e,resolved:r,value:i,onChange:e=>{n&&(_(t=>({...t,[n]:e})),b(e=>n in e?ee(e,n):e))},onAction:e.type===`action_button`?()=>Z(e.id??n??`test`):void 0,locked:r?.locked,saving:f,labels:M,error:n?y[n]:void 0},(n??`_layout_${t}`)+t)})}),j.length>0?(0,G.jsx)(`div`,{className:`fixed bottom-0 inset-x-0 bg-background/95 backdrop-blur border-t shadow-lg z-40`,children:(0,G.jsxs)(`div`,{className:`max-w-3xl mx-auto px-6 py-3 flex items-center justify-between`,children:[(0,G.jsx)(`div`,{className:`text-sm text-muted-foreground`,"data-testid":`settings-unsaved-count`,children:i(`console.settingsView.unsavedCount`,{count:j.length})}),(0,G.jsxs)(`div`,{className:`flex gap-2`,children:[(0,G.jsxs)(w,{variant:`ghost`,size:`sm`,onClick:()=>{_({}),b({}),S(null)},disabled:f,children:[(0,G.jsx)(F,{className:`h-4 w-4 mr-1`}),` `,i(`console.settingsView.discard`)]}),(0,G.jsxs)(w,{onClick:X,disabled:f,children:[f?(0,G.jsx)(N,{className:`h-4 w-4 mr-1 animate-spin`}):null,i(`console.settingsView.saveChanges`)]})]})]})}):null]})}export{ne as SettingsView};
@@ -1 +0,0 @@
1
- import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{d as t,p as n,t as r,v as i}from"./vendor-react-BggL7APJ.js";import{f as a,v as o}from"./infrastructure-BHSync5f.js";import{Br as s,Dn as c,Hr as l,Ur as u,bi as d,ni as ee,vi as f,zr as p}from"./ui-components-BTB1NkUW.js";import{Rr as m,Ui as h}from"./framework-DcWkeiND.js";import{t as g,w as _}from"./i18n-runtime-CTgAQF4N.js";import{r as v}from"./vendor-ui-utils-DIUdEYii.js";import{t as te}from"./vendor-icon-circle-alert-D1XTr_X9.js";import{t as ne}from"./vendor-icon-external-link-SBKz5x6R.js";import{t as y}from"./vendor-icon-lock-B_psRnly.js";import{t as re}from"./vendor-icon-refresh-ccw-QRCaXN-I.js";import{t as b}from"./vendor-icon-shield-question-mark-CmNmL1kO.js";import{t as ie}from"./vendor-icon-trash-BLsWkwB9.js";var x=e(i(),1),S=r();function C(e){if(typeof e!=`object`||!e)return null;let t=e.telemetry;if(typeof t!=`object`||!t)return null;let n=t.errorReporting;if(typeof n!=`object`||!n)return null;let r=n;if(typeof r.dsn!=`string`)return null;let i=r.dsn.trim();return i===``||w(i)?null:{dsn:i,sendDefaultPii:r.sendDefaultPii===!0,...typeof r.environment==`string`&&r.environment.trim()?{environment:r.environment.trim()}:{},tracesSampleRate:T(r.tracesSampleRate,E),replaysOnErrorSampleRate:T(r.replaysOnErrorSampleRate,D)}}function w(e){try{return new URL(e).password!==``}catch{return!1}}function T(e,t){return typeof e==`number`&&Number.isFinite(e)&&e>=0&&e<=1?e:t}var E=.1,D=0,O={cloudUrl:``,singleEnvironment:!1,defaultOrgId:null,defaultEnvironmentId:null,features:{installLocal:!1,marketplace:!0,aiStudio:!0,autoPublishAiBuilds:!0,customDomain:!1,sso:!1,scim:!1},branding:{productName:`ObjectOS`,productShortName:`ObjectOS`,stage:`preview`,brandColor:`#4F46E5`,pwaThemeColor:`#4f46e5`},telemetry:{}},k=[`preview`,`beta`,`ga`];function A(e){return typeof e==`string`&&k.includes(e)}var j={...O};function M(e){j={...j,...e,features:{...j.features,...e.features??{}},branding:{...j.branding,...e.branding??{}},telemetry:e.telemetry?{...e.telemetry}:j.telemetry}}async function N(e=``){let t=(e||``).replace(/\/+$/,``);try{let e=await m(`${t}/api/v1/runtime/config`,{credentials:`include`,headers:{Accept:`application/json`}});if(!e||typeof e!=`object`)return;M({cloudUrl:typeof e.cloudUrl==`string`?e.cloudUrl.replace(/\/+$/,``):j.cloudUrl,singleEnvironment:!!e.singleEnvironment,defaultOrgId:e.defaultOrgId??j.defaultOrgId??null,defaultEnvironmentId:e.defaultEnvironmentId??j.defaultEnvironmentId??null,features:e.features?{installLocal:!!e.features.installLocal,marketplace:e.features.marketplace!==!1,aiStudio:e.features.aiStudio!==!1,autoPublishAiBuilds:e.features.autoPublishAiBuilds!==!1,customDomain:e.features.customDomain===!0,sso:e.features.sso===!0,scim:e.features.scim===!0}:j.features,telemetry:(()=>{let t=C(e);return t?{errorReporting:t}:{}})(),branding:e.branding?{productName:typeof e.branding.productName==`string`&&e.branding.productName.trim()?e.branding.productName.trim():j.branding.productName,productShortName:typeof e.branding.productShortName==`string`&&e.branding.productShortName.trim()?e.branding.productShortName.trim():j.branding.productShortName,stage:A(e.branding.stage)?e.branding.stage:j.branding.stage,logoUrl:typeof e.branding.logoUrl==`string`&&e.branding.logoUrl.trim()?e.branding.logoUrl.trim():j.branding.logoUrl,faviconUrl:typeof e.branding.faviconUrl==`string`&&e.branding.faviconUrl.trim()?e.branding.faviconUrl.trim():j.branding.faviconUrl,brandColor:typeof e.branding.brandColor==`string`&&e.branding.brandColor.trim()?e.branding.brandColor.trim():j.branding.brandColor,pwaDescription:typeof e.branding.pwaDescription==`string`&&e.branding.pwaDescription.trim()?e.branding.pwaDescription.trim():j.branding.pwaDescription,pwaThemeColor:typeof e.branding.pwaThemeColor==`string`&&e.branding.pwaThemeColor.trim()?e.branding.pwaThemeColor.trim():j.branding.pwaThemeColor}:j.branding})}catch{}}function ae(){return j}function P(){return j.branding?.productName||`ObjectOS`}function oe(){return j.branding?.productShortName||P()}function se(){return j.branding?.stage??`preview`}function ce(){return j.branding?.brandColor||`#4F46E5`}function le(){return j.branding?.logoUrl}function ue(){return j.branding?.faviconUrl}function de(){return j.branding?.pwaDescription||`${P()} — runtime console`}function fe(){return j.branding?.pwaThemeColor||ce()}function F(){return j.cloudUrl??``}function I(){return j.features?.marketplace!==!1}function L(){return j.features?.aiStudio!==!1}function R(){return j.telemetry?.errorReporting??null}var z=``.replace(/\/$/,``),B=`${z}/api/v1/marketplace`;function V(e){let t=o.get();return t?{...e,Authorization:`Bearer ${t}`}:e}function H(e,t){let n=e?.error?.code??e?.code??`HTTP_${t.status}`,r=e?.error?.message??e?.error??e?.message??t.statusText;return{code:String(n),message:typeof r==`string`?r:String(n)}}async function U(e,t){let n=await fetch(`${B}${e}`,{credentials:`omit`,headers:{Accept:`application/json`,...t?.headers||{}},...t}),r=null;try{r=await n.json()}catch{}if(!n.ok){let{code:e,message:t}=H(r,n),i=Error(typeof t==`string`?t:`${e}`);throw i.code=e,i.status=n.status,i}return r?.data??r}async function pe(e={}){let t=new URLSearchParams;e.q&&t.set(`q`,e.q),e.category&&t.set(`category`,e.category),e.limit!=null&&t.set(`limit`,String(e.limit)),e.offset!=null&&t.set(`offset`,String(e.offset));let n=t.toString();return U(`/packages${n?`?${n}`:``}`)}async function me(e){return U(`/packages/${encodeURIComponent(e)}`)}async function he(e){if(F()){let t=await fetch(`/api/v1/cloud-connection/install`,{method:`POST`,credentials:`include`,headers:V({Accept:`application/json`,"Content-Type":`application/json`}),body:JSON.stringify({package_id:e.packageId,seed_sample_data:!!e.seedSampleData})}),n=null;try{n=await t.json()}catch{}if(!t.ok||n?.success===!1){let{code:e,message:r}=H(n,t),i=Error(typeof r==`string`?r:`${e}`);throw i.code=e,i.status=t.status,i}return n?.data??n}let t=await fetch(`${z}/api/v1/actions/sys_package/install_package`,{method:`POST`,credentials:`include`,headers:{Accept:`application/json`,"Content-Type":`application/json`},body:JSON.stringify({recordId:e.packageId,params:{environment_id:e.environmentId,seed_sample_data:!!e.seedSampleData}})}),n=null;try{n=await t.json()}catch{}let r=n?.data,i=!!r&&typeof r==`object`&&r.success===!1;if(!t.ok||i){let e=H(n,t),a=n?.code??e.code,o=i?r.error??t.statusText:e.message,s=Error(typeof o==`string`?o:`${a}`);throw s.code=a,s.status=t.status,s}return n?.data??n}async function ge(){let e=F()||z,t=await fetch(`${e}/api/v1/data/sys_environment?limit=200`,{credentials:`include`,headers:{Accept:`application/json`}});if(!t.ok){let e=Error(`HTTP_${t.status}`);throw e.status=t.status,e}let n=await t.json().catch(()=>({})),r=n?.records??n?.data??n?.items??n??[];return Array.isArray(r)?r:[]}async function _e(){let e=F()||z,t=null;try{let n=await fetch(`${e}/api/v1/auth/get-session`,{credentials:`include`,headers:{Accept:`application/json`}});n.ok&&(t=(await n.json().catch(()=>({})))?.user?.id??null)}catch{}if(!t)return new Set;let n=`${e}/api/v1/data/sys_member?limit=200`,r;try{let e=await fetch(n,{credentials:`include`,headers:{Accept:`application/json`}});if(!e.ok)return new Set;r=await e.json().catch(()=>({}))}catch{return new Set}let i=r?.records??r?.data??r?.items??r??[];if(!Array.isArray(i))return new Set;let a=new Set;for(let e of i){if(String(e?.user_id??e?.userId??``)!==t)continue;let n=String(e?.role??``).toLowerCase(),r=e?.organization_id??e?.organizationId;r&&(n===`owner`||n===`admin`)&&a.add(String(r))}return a}function W(){return F()}async function ve(e,t){if(!e)return null;if(F())try{let t=await fetch(`/api/v1/cloud-connection/installation?package_id=${encodeURIComponent(e)}`,{credentials:`include`,headers:V({Accept:`application/json`})});if(!t.ok)return null;let n=await t.json().catch(()=>({})),r=n?.data??n??{};return r.installed?{installationId:String(r.installationId??``),version:String(r.version??`installed`),withSampleData:r.withSampleData===!0}:null}catch{return null}if(!t)return null;let n=z;try{let r=await fetch(`${n}/api/v1/cloud/environments/${encodeURIComponent(t)}/installations/${encodeURIComponent(e)}`,{credentials:`include`,headers:{Accept:`application/json`}});if(!r.ok)return null;let i=await r.json().catch(()=>({})),a=i?.data??i??{};return a.installed?{installationId:String(a.installationId??``),version:String(a.version??`installed`),withSampleData:a.withSampleData===!0}:null}catch{return null}}async function ye(e){if(!e)return{ok:!1,error:`installation id required`};let t=F()||z;try{let n=await fetch(`${t}/api/v1/cloud/installations/${encodeURIComponent(e)}/reseed-sample-data`,{method:`POST`,credentials:`include`,headers:{Accept:`application/json`,"Content-Type":`application/json`},body:`{}`}),r=await n.json().catch(()=>({}));if(!n.ok||r?.success===!1){let{code:e,message:t}=H(r,n);return{ok:!1,error:t,code:e}}return{ok:!0}}catch(e){return{ok:!1,error:e?.message||`Network error`}}}async function be(e){if(!e)return{ok:!1,error:`installation id required`};let t=F()||z;try{let n=await fetch(`${t}/api/v1/cloud/installations/${encodeURIComponent(e)}/purge-sample-data`,{method:`POST`,credentials:`include`,headers:{Accept:`application/json`,"Content-Type":`application/json`},body:`{}`}),r=await n.json().catch(()=>({}));if(!n.ok||r?.success===!1){let{code:e,message:t}=H(r,n);return{ok:!1,error:t,code:e}}return{ok:!0,deleted:Number(r?.data?.deleted??0)}}catch(e){return{ok:!1,error:e?.message||`Network error`}}}async function xe(){try{let e=await fetch(`${z}/api/v1/cloud-connection/org-packages`,{credentials:`include`,headers:{Accept:`application/json`}});if(!e.ok)return{connected:!1,items:[]};let t=(await e.json().catch(()=>({})))?.data??{},n=Array.isArray(t.items)?t.items:[];return{connected:t.connected===!0,items:n}}catch{return{connected:!1,items:[]}}}async function Se(e){let t=await fetch(`${B}/install-local`,{method:`POST`,credentials:`include`,headers:{Accept:`application/json`,"Content-Type":`application/json`},body:JSON.stringify({packageId:e.packageId,...e.versionId?{versionId:e.versionId}:{}})}),n=null;try{n=await t.json()}catch{}if(!t.ok){let{code:e,message:r}=H(n,t),i=Error(typeof r==`string`?r:`${e}`);throw i.code=e,i.status=t.status,i}return n?.data??n}async function G(){try{let e=await fetch(`${B}/install-local`,{credentials:`include`,headers:{Accept:`application/json`}});if(!e.ok)return[];let t=await e.json().catch(()=>({})),n=t?.data?.items??t?.items??[];return Array.isArray(n)?n:[]}catch{return[]}}async function K(){try{let e=await fetch(`${z}/api/v1/cloud-connection/installed`,{credentials:`include`,headers:{Accept:`application/json`}});if(!e.ok)return{connected:!1,items:[]};let t=(await e.json().catch(()=>({})))?.data??{},n=(Array.isArray(t.packages)?t.packages:[]).map(e=>{let t=String(e.packageId??e.package_id??``);return{packageId:t,versionId:String(e.package_version_id??``),manifestId:t,version:String(e.version??`installed`),installedAt:String(e.installed_at??e.installedAt??``),installedBy:e.installed_by??e.installedBy??null,withSampleData:e.with_sample_data===!0||e.withSampleData===!0}});return{connected:t.connected===!0,items:n}}catch{return{connected:!1,items:[]}}}async function q(e){let t=await fetch(`${B}/install-local/${encodeURIComponent(e)}`,{method:`DELETE`,credentials:`include`,headers:{Accept:`application/json`}});if(!t.ok){let e=await t.json().catch(()=>({}));throw Error(H(e,t).message)}}async function J(e,t){let n=await fetch(`${B}/install-local/${encodeURIComponent(e)}/${t===`reseed`?`reseed-sample-data`:`purge-sample-data`}`,{method:`POST`,credentials:`include`,headers:{Accept:`application/json`}}),r=await n.json().catch(()=>({}));if(!n.ok){let e=r?.error?.message??n.statusText,t=Error(typeof e==`string`?e:`HTTP_${n.status}`);throw t.code=r?.error?.code??`HTTP_${n.status}`,t}return r?.data??r}function Ce(e){return J(e,`reseed`)}function we(e){return J(e,`purge`)}function Y(){let e=t(),{appName:r}=n(),{t:i}=_(),a=r?`/apps/${r}`:`/`;return(0,S.jsx)(`div`,{className:`container mx-auto max-w-2xl px-6 py-16`,children:(0,S.jsx)(p,{children:(0,S.jsxs)(s,{className:`flex flex-col items-center gap-4 py-12 text-center`,children:[(0,S.jsx)(`div`,{className:`rounded-full bg-muted p-3`,children:(0,S.jsx)(y,{className:`h-6 w-6 text-muted-foreground`})}),(0,S.jsxs)(`div`,{children:[(0,S.jsx)(`h2`,{className:`text-lg font-semibold`,children:i(`marketplace.accessDenied.title`)}),(0,S.jsx)(`p`,{className:`mt-1 text-sm text-muted-foreground`,children:i(`marketplace.accessDenied.description`)})]}),(0,S.jsx)(f,{variant:`outline`,onClick:()=>e(a),children:i(`marketplace.action.backHome`)})]})})})}var X=`${``.replace(/\/$/,``)}/api/v1/security/suggested-bindings`;function Z(e={}){let t={Accept:`application/json`,...e},n=o.get();return n?{...t,Authorization:`Bearer ${n}`}:t}async function Q(e){let t=null;try{t=await e.json()}catch{}if(!e.ok){let n=t?.error?.code??`HTTP_${e.status}`,r=t?.error?.message??t?.error??e.statusText,i=Error(typeof r==`string`?r:String(n));throw i.code=n,i.status=e.status,i}return t?.data??t}async function Te(e={}){let t=new URLSearchParams;e.status&&t.set(`status`,e.status),e.packageId&&t.set(`packageId`,e.packageId);let n=t.toString(),r=await Q(await fetch(`${X}${n?`?${n}`:``}`,{credentials:`include`,headers:Z()}));return Array.isArray(r?.suggestions)?r.suggestions:[]}async function Ee(e){return(await Q(await fetch(`${X}/${encodeURIComponent(e)}/confirm`,{method:`POST`,credentials:`include`,headers:Z({"Content-Type":`application/json`})})))?.suggestion}async function De(e){return(await Q(await fetch(`${X}/${encodeURIComponent(e)}/dismiss`,{method:`POST`,credentials:`include`,headers:Z({"Content-Type":`application/json`})})))?.suggestion}function Oe({packageId:e,strings:t,className:n,onResolved:r}){let[i,a]=(0,x.useState)([]),[o,s]=(0,x.useState)(null),c=(0,x.useCallback)(()=>{let t=!1;return Te({status:`pending`,...e?{packageId:e}:{}}).then(e=>{t||a(e)}).catch(()=>{}),()=>{t=!0}},[e]);(0,x.useEffect)(()=>c(),[c]);let l=async(e,n)=>{s(e.id);try{let i=n===`confirm`?await Ee(e.id):await De(e.id);a(t=>t.filter(t=>t.id!==e.id)),v.success(n===`confirm`?t.confirmedToast(e):t.dismissedToast(e)),r?.(i??e)}catch(e){v.error(e?.message??String(e))}finally{s(null)}};return i.length===0?null:(0,S.jsx)(`div`,{"data-testid":`suggested-bindings-panel`,className:d(`rounded-lg border border-amber-300/60 dark:border-amber-700/50 bg-amber-50 dark:bg-amber-950/30 px-3 py-2 space-y-2`,n),children:i.map(e=>(0,S.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,S.jsx)(b,{className:`h-4 w-4 shrink-0 text-amber-600 dark:text-amber-400`}),(0,S.jsx)(`p`,{className:`flex-1 min-w-0 text-sm text-amber-900 dark:text-amber-200`,children:t.describe(e)}),(0,S.jsx)(f,{size:`sm`,disabled:o===e.id,onClick:()=>l(e,`confirm`),"data-testid":`suggested-binding-confirm-${e.permission_set_name}`,children:o===e.id?t.confirming:t.confirm}),(0,S.jsx)(f,{size:`sm`,variant:`ghost`,disabled:o===e.id,onClick:()=>l(e,`dismiss`),"data-testid":`suggested-binding-dismiss-${e.permission_set_name}`,children:t.dismiss})]},e.id))})}function $(){let e=t(),{appName:r}=n(),{isAdmin:i}=a(),{t:o}=_(),d=g(),m=r?`/apps/${r}`:``,[h,v]=(0,x.useState)([]),[y,b]=(0,x.useState)(`local`),[C,w]=(0,x.useState)(!0),[T,E]=(0,x.useState)(null),[D,O]=(0,x.useState)(null),k=async()=>{w(!0);try{let e=await K();e.connected?(b(`cloud`),v(e.items)):(b(`local`),v(await G()))}finally{w(!1)}};(0,x.useEffect)(()=>{k()},[]);let A=async e=>{if(confirm(o(`marketplace.uninstall.confirm`,{manifestId:e.manifestId,version:e.version}))){E(e.manifestId),O(null);try{await q(e.manifestId),O({ok:!0,message:o(`marketplace.uninstall.successInList`,{manifestId:e.manifestId})}),await k()}catch(e){O({ok:!1,message:e?.message??String(e)})}finally{E(null)}}};return i?(0,S.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,S.jsx)(`div`,{className:`flex justify-end`,children:(0,S.jsxs)(f,{variant:`outline`,size:`sm`,onClick:()=>void k(),disabled:C,children:[(0,S.jsx)(re,{className:`h-4 w-4 mr-1.5`,"aria-hidden":`true`}),o(`marketplace.refresh`)]})}),D&&(0,S.jsx)(`div`,{className:`rounded-md border p-3 text-sm ${D.ok?`border-green-500/30 bg-green-500/5 text-green-700 dark:text-green-400`:`border-destructive/30 bg-destructive/5 text-destructive`}`,children:(0,S.jsxs)(`div`,{className:`flex items-start gap-2`,children:[(0,S.jsx)(te,{className:`h-4 w-4 mt-0.5 shrink-0`,"aria-hidden":`true`}),(0,S.jsx)(`div`,{children:D.message})]})}),C&&h.length===0?(0,S.jsx)(`div`,{className:`grid gap-3`,children:Array.from({length:3}).map((e,t)=>(0,S.jsx)(c,{className:`h-20 w-full`},t))}):h.length===0?(0,S.jsxs)(`div`,{className:`text-center py-12 text-sm text-muted-foreground border rounded-md`,children:[(0,S.jsx)(`p`,{children:o(`marketplace.installedEmpty`)}),(0,S.jsx)(f,{variant:`link`,className:`mt-2`,onClick:()=>e(`${m}/system/marketplace`),children:o(`marketplace.browseLink`)})]}):(0,S.jsx)(`div`,{className:`grid gap-3`,children:h.map(t=>(0,S.jsxs)(p,{children:[(0,S.jsxs)(l,{className:`flex flex-row items-start justify-between gap-3 pb-2`,children:[(0,S.jsxs)(`div`,{className:`min-w-0`,children:[(0,S.jsxs)(u,{className:`text-base truncate flex items-center gap-2`,children:[t.manifestId,(0,S.jsx)(ee,{variant:`outline`,children:o(`marketplace.versionBadge`,{version:t.version})})]}),(0,S.jsxs)(`div`,{className:`text-xs text-muted-foreground mt-1 flex flex-wrap gap-x-3 gap-y-1`,children:[(0,S.jsx)(`span`,{children:o(`marketplace.installedAt`,{when:new Date(t.installedAt).toLocaleString(d)})}),t.installedBy&&(0,S.jsx)(`span`,{children:o(`marketplace.installedBy`,{user:t.installedBy})}),(0,S.jsxs)(`span`,{children:[o(`marketplace.installedPackageId`),` `,(0,S.jsx)(`code`,{className:`font-mono`,children:t.packageId})]})]})]}),(0,S.jsxs)(`div`,{className:`flex items-center gap-2 shrink-0`,children:[(0,S.jsxs)(f,{variant:`ghost`,size:`sm`,onClick:()=>e(`${m}/system/marketplace/${t.packageId}`),children:[(0,S.jsx)(ne,{className:`h-4 w-4 mr-1.5`,"aria-hidden":`true`}),o(`marketplace.action.details`)]}),y===`local`&&(0,S.jsxs)(f,{variant:`outline`,size:`sm`,onClick:()=>void A(t),disabled:T===t.manifestId,children:[(0,S.jsx)(ie,{className:`h-4 w-4 mr-1.5`,"aria-hidden":`true`}),T===t.manifestId?o(`marketplace.action.uninstalling`):o(`marketplace.action.uninstall`)]})]})]}),y===`local`&&(0,S.jsx)(s,{className:`pt-0 text-xs text-muted-foreground`,dangerouslySetInnerHTML:{__html:o(`marketplace.cachedAs`,{path:`.objectstack/installed-packages/${t.manifestId.replace(/[^a-zA-Z0-9._-]/g,`_`)}.json`})}})]},t.manifestId))}),(0,S.jsx)(`p`,{className:`text-xs text-muted-foreground border-t pt-4`,dangerouslySetInnerHTML:{__html:o(`marketplace.installedAdditiveNote`)}})]}):(0,S.jsx)(Y,{})}h.register(`marketplace:installed-list`,()=>(0,S.jsx)($,{}),{namespace:`app-shell`,label:`Installed Marketplace Packages`,category:`plugin`,inputs:[]});export{N as A,le as C,de as D,oe as E,I as M,fe as O,ue as S,P as T,Ce as _,ve as a,R as b,he as c,K as d,G as f,be as g,we as h,W as i,L as j,ae as k,ge as l,xe as m,Oe as n,me as o,pe as p,Y as r,Se as s,$ as t,_e as u,ye as v,se as w,F as x,q as y};
@@ -1 +0,0 @@
1
- function e(e){if(e)return e._packageId??e.name??void 0}function t(e,t){if(e&&t!=null)return e.find(e=>e?._packageId===t)??e.find(e=>e?.name===t)}function n(e){return e?e.filter(e=>e?.active!==!1&&e?.hidden!==!0):[]}function r(r,i){let a=n(r);return e(t(a,i))||e(a[0])||(a.length===0&&i?i:`setup`)}function i(e,t){if(!t)return null;let n=u(e);return n?`/studio/${encodeURIComponent(n)}/data`:null}function a(e,t,n){if(!t)return null;let r=u(e);if(!r)return null;let i=n?.type,a=n?.name;if(!i||!a)return null;let o=`${i}:${encodeURIComponent(a)}`;return`/studio/${encodeURIComponent(r)}/interfaces?surface=${o}`}function o(e,t,n){if(!t)return null;let r=u(e);if(!r||!n)return null;let i=`object:${encodeURIComponent(n)}`;return`/studio/${encodeURIComponent(r)}/data?surface=${i}`}var s=new Set([`dashboard`,`page`,`report`]),c=new Set([...s,`system`]);function l(e,t,n){let r=n?.type,l=n?.name;return r&&l&&s.has(r)?a(e,t,{type:r,name:l}):r&&!c.has(r)?o(e,t,r):i(e,t)}function u(e){let t=e?._packageId;return typeof t!=`string`||!t||t===`sys_metadata`?null:t}function d(e,t){let n=(e??``).trim();if(!n)return null;if(/^[a-z][a-z0-9+.-]*:/i.test(n)||n.startsWith(`//`))return{kind:`external`,url:n};let r=n.startsWith(`/`)?n:`/${n}`;return r===`/apps`||r.startsWith(`/apps/`)?{kind:`route`,path:r}:{kind:`route`,path:`/apps/${t}${r}`}}export{r as a,t as i,l as n,d as o,n as r,e as t};
@@ -1 +0,0 @@
1
- import{Dt as e,St as t,at as n,bt as r,gn as i,ln as a,rn as o,rt as s}from"./vendor-objectstack-XuWC71M9.js";import{Gr as c,Ji as l,Wr as u,ar as d,en as ee,mi as te}from"./framework-DcWkeiND.js";o(),t();var ne=n(),re=[`lookup`,`master_detail`];function ie(e){return typeof e==`string`&&e.trim()!==``}function ae(e){return e===void 0?"no `reference` key at all":e===null?"a `null` `reference`":typeof e==`string`?e===``?"an empty `reference`":"a whitespace-only `reference`":`a \`reference\` of type \`${typeof e}\``}function oe(e){return Array.isArray(e)?e.flatMap((e,t)=>{if(!e||typeof e!=`object`)return[];let n=e;return[{name:typeof n.name==`string`&&n.name?n.name:`[${t}]`,def:n}]}):e&&typeof e==`object`?Object.entries(e).flatMap(([e,t])=>t&&typeof t==`object`?[{name:e,def:t}]:[]):[]}function f(e,t,n){if(String(e)!==`object`||!t||typeof t!=`object`)return;let r=t.fields;for(let{name:e,def:t}of oe(r))if(re.includes(String(t.type))&&!ie(t.reference))throw Error(`${n} refused this object metadata write: the field \`${e}\` is a \`${String(t.type)}\` and carries ${ae(t.reference)}, so it names no object to link to. \`@objectstack/spec\` refuses the same document at the server with a 422 on \`fields.${e}.reference\`, and that refusal blocks every later save of this object for as long as the half-filled field rides along in the draft (objectui#7714). Pick the target object, or change the field to a non-relationship type.`)}function p(e){if(!e||typeof e!=`object`)return[];let t=e.advisories;return Array.isArray(t)?t.filter(e=>{if(!e||typeof e!=`object`)return!1;let t=e;return typeof t.rule==`string`&&typeof t.path==`string`&&typeof t.where==`string`&&typeof t.message==`string`&&typeof t.hint==`string`&&typeof t.severity==`string`}):[]}var se=[`overlayScope`,`lock`,`lockReason`,`lockSource`,`lockDocsUrl`,`provenance`,`packageId`,`packageVersion`,`editable`,`deletable`,`resettable`];function ce(e){let t=r.shape;return se.filter(n=>e[n]!==void 0&&!t[n].safeParse(e[n]).success)}var m=`/meta`,h=`/api/v1`;function le(e){let t=e.baseUrl.replace(/\/+$/,``),n=e.environmentId?`${h}/environments/${encodeURIComponent(e.environmentId)}${m}`:`${h}${m}`;return/\/api\/v\d+$/i.test(t)?`${t.replace(/\/api\/v\d+$/i,``)}${e.environmentId?`${h}/environments/${encodeURIComponent(e.environmentId)}${m}`:`${h}${m}`}`:`${t}${n}`}function ue(e){return`${e.replace(/\/api\/v\d+(?:\/environments\/[^/]+)?\/meta$/,``).replace(/\/+$/,``)}${h}/packages`}function de(e){if(!e||typeof e!=`object`)return{};let t=e,n=t.data;return n&&typeof n==`object`&&!Array.isArray(n)?n:t}async function g(e){let t;try{t=await e.json()}catch{t=await e.text().catch(()=>void 0)}let n=t&&typeof t==`object`?t:void 0,r=n?.error,i=(r&&typeof r==`object`?r.message:r)??n?.message??`Metadata request failed: ${e.status} ${e.statusText}`,a=Error(String(i));a.status=e.status,a.body=t;let o=r&&typeof r==`object`?r.details:void 0,s=o?.issues??(r&&typeof r==`object`?r.issues:void 0)??n?.issues;Array.isArray(s)&&(a.issues=s);let c=o?.code??(r&&typeof r==`object`?r.code:void 0)??n?.code;return c!=null&&(a.code=String(c)),a}function fe(e){if(!e||typeof e!=`object`||Array.isArray(e))return!1;let t=e;return typeof t.type==`string`&&typeof t.name==`string`&&`item`in t}var _=class e{base;fetchImpl;headers;previewDrafts;onSaveAdvisory;constructor(e){this.base=le(e),this.fetchImpl=e.fetch??globalThis.fetch.bind(globalThis),this.headers={Accept:`application/json`,...e.headers??{}},this.previewDrafts=e.previewDrafts===!0,this.onSaveAdvisory=e.onSaveAdvisory}withEnvironment(t){return new e({baseUrl:this.base.replace(/\/api\/v\d+(?:\/environments\/[^/]+)?\/meta$/,``).replace(/\/+$/,``),environmentId:t,fetch:this.fetchImpl,headers:this.headers,previewDrafts:this.previewDrafts,...this.onSaveAdvisory?{onSaveAdvisory:this.onSaveAdvisory}:{}})}withPreviewDrafts(t){if(t===this.previewDrafts)return this;let n=this.base.match(/\/api\/v\d+\/environments\/([^/]+)\/meta$/);return new e({baseUrl:this.base.replace(/\/api\/v\d+(?:\/environments\/[^/]+)?\/meta$/,``).replace(/\/+$/,``),...n?{environmentId:decodeURIComponent(n[1])}:{},fetch:this.fetchImpl,headers:this.headers,previewDrafts:t,...this.onSaveAdvisory?{onSaveAdvisory:this.onSaveAdvisory}:{}})}async listTypes(){let e=await this.fetchImpl(this.base,{method:`GET`,headers:this.headers,cache:`no-store`});if(!e.ok)throw await g(e);let t=await e.json();return Array.isArray(t)?t:t&&Array.isArray(t.entries)?t.entries:t&&Array.isArray(t.items)?t.items:t&&Array.isArray(t.types)?t.types.map(e=>({type:e})):[]}async list(e,t={}){let n=[];t.packageId&&n.push(`package=${encodeURIComponent(t.packageId)}`),this.previewDrafts&&n.push(`preview=draft`);let r=n.length?`?${n.join(`&`)}`:``,i=`${this.base}/${encodeURIComponent(e)}${r}`,a=await this.fetchImpl(i,{method:`GET`,headers:this.headers,cache:`no-store`});if(!a.ok)throw await g(a);let o=await a.json();return Array.isArray(o)?o:o&&Array.isArray(o.items)?o.items:[]}async listDrafts(e={}){let t=[];e.packageId&&t.push(`packageId=${encodeURIComponent(e.packageId)}`),e.type&&t.push(`type=${encodeURIComponent(e.type)}`);let n=t.length?`?${t.join(`&`)}`:``,r=`${this.base}/_drafts${n}`,i=await this.fetchImpl(r,{method:`GET`,headers:this.headers,cache:`no-store`});if(!i.ok)throw await g(i);let a=await i.json();return Array.isArray(a)?a:a?.drafts??a?.data?.drafts??[]}async readItemResponse(e,t,n={}){let r=[];n.state===`draft`?r.push(`state=draft`):this.previewDrafts&&r.push(`preview=draft`),n.packageId&&r.push(`package=${encodeURIComponent(n.packageId)}`);let i=r.length?`?${r.join(`&`)}`:``,a=`${this.base}/${encodeURIComponent(e)}/${encodeURIComponent(t)}${i}`,o=await this.fetchImpl(a,{method:`GET`,headers:this.headers,cache:`no-store`});if(o.status===404)return null;if(!o.ok)throw await g(o);return await o.json()}async get(e,t,n={}){let r=await this.readItemResponse(e,t,n);return fe(r)?r.item??null:r}async getDraft(e,t,n={}){return this.readItemResponse(e,t,{state:`draft`,...n.packageId?{packageId:n.packageId}:{}})}emitAdvisories(e,t){if(this.onSaveAdvisory)try{let n=p(e);n.length>0&&this.onSaveAdvisory({...t,advisories:n})}catch{}}async save(e,t,n,r={}){if(!t||!String(t).trim())throw Error(`MetadataClient.save: name must be non-empty (type="${e}"). The PUT /meta/:type/:name route requires a name segment.`);f(e,n,`MetadataClient.save`);let i=[];r.force&&i.push(`force=true`),r.mode===`draft`&&i.push(`mode=draft`),r.packageId&&i.push(`package=${encodeURIComponent(r.packageId)}`);let a=i.length?`?${i.join(`&`)}`:``,o=`${this.base}/${encodeURIComponent(e)}/${encodeURIComponent(t)}${a}`,s={...this.headers,"Content-Type":`application/json`};r.ifMatch&&(s[`If-Match`]=r.ifMatch);let c=await this.fetchImpl(o,{method:`PUT`,headers:s,body:JSON.stringify(n)});if(!c.ok)throw await g(c);let l=await c.json();return this.emitAdvisories(l,{type:e,name:t,door:`save`,mode:r.mode===`draft`?`draft`:`publish`}),l}async publishDraft(e,t){let n=`${this.base}/${encodeURIComponent(e)}/${encodeURIComponent(t)}/publish`,r=await this.fetchImpl(n,{method:`POST`,headers:{...this.headers,"Content-Type":`application/json`,Accept:`application/json`},body:`{}`});if(!r.ok)throw await g(r);let i=await r.json().catch(()=>({}));return this.emitAdvisories(i,{type:e,name:t,door:`publish`,mode:`publish`}),i}async publishPackageDrafts(e){if(!e||!String(e).trim())throw Error(`MetadataClient.publishPackageDrafts: packageId must be non-empty. The POST /packages/:id/publish-drafts route requires an id segment.`);let t=`${ue(this.base)}/${encodeURIComponent(e)}/publish-drafts`,n=await this.fetchImpl(t,{method:`POST`,credentials:`include`,headers:{...this.headers,"Content-Type":`application/json`,Accept:`application/json`},body:`{}`});if(!n.ok)throw await g(n);let r=de(await n.json().catch(()=>({})));for(let e of Array.isArray(r.published)?r.published:[]){if(!e||typeof e!=`object`)continue;let{type:t,name:n}=e;typeof t==`string`&&typeof n==`string`&&this.emitAdvisories(e,{type:t,name:n,door:`publish`,mode:`publish`})}return r}async layered(e,t,n={}){let i=n.packageId?`?package=${encodeURIComponent(n.packageId)}`:``,a=`${this.base}/${encodeURIComponent(e)}/${encodeURIComponent(t)}/layers${i}`,o=await this.fetchImpl(a,{method:`GET`,headers:this.headers,cache:`no-store`});if(o.status===404)return{code:null,overlay:null,overlayScope:null,effective:null};if(!o.ok)throw await g(o);let s=await o.json();if(!(typeof s==`object`&&s&&(`code`in s||`overlay`in s||`effective`in s)))return{code:null,overlay:null,overlayScope:null,effective:s};let c=r.safeParse(s);if(c.success){let e=c.data;return{code:e.code??null,overlay:e.overlay??null,overlayScope:e.overlayScope,effective:e.effective??null,...s._diagnostics?{_diagnostics:s._diagnostics}:{},lock:e.lock,...e.lockReason===void 0?{}:{lockReason:e.lockReason},...e.lockSource===void 0?{}:{lockSource:e.lockSource},...e.lockDocsUrl===void 0?{}:{lockDocsUrl:e.lockDocsUrl},...e.provenance===void 0?{}:{provenance:e.provenance},...e.packageId===void 0?{}:{packageId:e.packageId},...e.packageVersion===void 0?{}:{packageVersion:e.packageVersion},editable:e.editable,deletable:e.deletable,resettable:e.resettable}}let l=ce(s);return{code:s.code??null,overlay:s.overlay??null,overlayScope:s.overlayScope??null,effective:s.effective??null,...s._diagnostics?{_diagnostics:s._diagnostics}:{},...s.lock===void 0?{}:{lock:s.lock},...s.lockReason===void 0?{}:{lockReason:s.lockReason},...s.lockSource===void 0?{}:{lockSource:s.lockSource},...s.lockDocsUrl===void 0?{}:{lockDocsUrl:s.lockDocsUrl},...s.provenance===void 0?{}:{provenance:s.provenance},...s.packageId===void 0?{}:{packageId:s.packageId},...s.packageVersion===void 0?{}:{packageVersion:s.packageVersion},...s.editable===void 0?{}:{editable:s.editable},...s.deletable===void 0?{}:{deletable:s.deletable},...s.resettable===void 0?{}:{resettable:s.resettable},...l.length>0?{_unrecognized:l}:{}}}async diagnostics(e={}){let t=[];e.type&&t.push(`type=${encodeURIComponent(e.type)}`),e.severity&&t.push(`severity=${encodeURIComponent(e.severity)}`),e.packageId&&t.push(`package=${encodeURIComponent(e.packageId)}`);let n=t.length?`?${t.join(`&`)}`:``,r=`${this.base}/diagnostics${n}`,i=await this.fetchImpl(r,{method:`GET`,headers:this.headers,cache:`no-store`});if(i.status===404)return{entries:[],total:0,scannedTypes:0,scannedItems:0,stats:{}};if(!i.ok)throw await g(i);let a=await i.json();return{entries:Array.isArray(a.entries)?a.entries:[],total:typeof a.total==`number`?a.total:0,scannedTypes:typeof a.scannedTypes==`number`?a.scannedTypes:0,scannedItems:typeof a.scannedItems==`number`?a.scannedItems:0,stats:a.stats&&typeof a.stats==`object`?a.stats:{}}}async references(e,t){let n=`${this.base}/${encodeURIComponent(e)}/${encodeURIComponent(t)}/references`,r=await this.fetchImpl(n,{method:`GET`,headers:this.headers,cache:`no-store`});if(r.status===404)return[];if(!r.ok)throw await g(r);let i=await r.json();return Array.isArray(i)?i:i?.items??[]}async reset(e,t,n={}){let r=n.state===`draft`?`?state=draft`:``,i=`${this.base}/${encodeURIComponent(e)}/${encodeURIComponent(t)}${r}`,a={...this.headers};n.ifMatch&&(a[`If-Match`]=n.ifMatch);let o=await this.fetchImpl(i,{method:`DELETE`,headers:a});if(!o.ok)throw await g(o);return await o.json()}async publish(e,t,n={}){let r=n.packageId?`?package=${encodeURIComponent(n.packageId)}`:``,i=`${this.base}/${encodeURIComponent(e)}/${encodeURIComponent(t)}/publish${r}`,a={...this.headers,"Content-Type":`application/json`},o=await this.fetchImpl(i,{method:`POST`,headers:a,body:JSON.stringify(n.message?{message:n.message}:{})});if(!o.ok)throw await g(o);let s=await o.json();return this.emitAdvisories(s,{type:e,name:t,door:`publish`,mode:`publish`}),s}async rollback(e,t,n,r={}){let i=`${this.base}/${encodeURIComponent(e)}/${encodeURIComponent(t)}/rollback`,a={...this.headers,"Content-Type":`application/json`},o=await this.fetchImpl(i,{method:`POST`,headers:a,body:JSON.stringify({toVersion:n,...r.message?{message:r.message}:{}})});if(!o.ok)throw await g(o);return await o.json()}async diff(e,t,n,r){let i=new URLSearchParams;n!==void 0&&i.set(`from`,String(n)),r!==void 0&&i.set(`to`,String(r));let a=i.toString(),o=`${this.base}/${encodeURIComponent(e)}/${encodeURIComponent(t)}/diff${a?`?${a}`:``}`,s=await this.fetchImpl(o,{method:`GET`,headers:this.headers,cache:`no-store`});if(!s.ok)throw await g(s);return await s.json()}async history(e,t,n={}){let r=new URLSearchParams;n.sinceSeq!==void 0&&r.set(`sinceSeq`,String(n.sinceSeq)),n.limit!==void 0&&r.set(`limit`,String(n.limit));let i=r.toString(),a=`${this.base}/${encodeURIComponent(e)}/${encodeURIComponent(t)}/history${i?`?${i}`:``}`,o=await this.fetchImpl(a,{method:`GET`,headers:this.headers,cache:`no-store`});if(!o.ok)throw await g(o);return await o.json()}async audit(e,t,n={}){let r=new URLSearchParams;n.limit!==void 0&&r.set(`limit`,String(n.limit));let i=r.toString(),a=`${this.base}/${encodeURIComponent(e)}/${encodeURIComponent(t)}/audit${i?`?${i}`:``}`,o=await this.fetchImpl(a,{method:`GET`,headers:this.headers,cache:`no-store`});if(!o.ok)throw await g(o);return await o.json()}},pe=class{cache;inflight;maxSize;ttl;stats;constructor(e={}){this.cache=new Map,this.inflight=new Map,this.maxSize=e.maxSize||100,this.ttl=e.ttl||3e5,this.stats={hits:0,misses:0,evictions:0,coalesced:0}}async get(e,t){let n=Date.now(),r=this.cache.get(e);if(r){if(n-r.timestamp<this.ttl)return r.accessCount++,r.lastAccessed=n,this.stats.hits++,this.cache.delete(e),this.cache.set(e,r),r.data;this.cache.delete(e)}let i=this.inflight.get(e);if(i)return this.stats.coalesced++,i;this.stats.misses++;let a=(async()=>{try{let n=await t();return this.set(e,n),n}finally{this.inflight.delete(e)}})();return this.inflight.set(e,a),a}prime(e,t){this.set(e,t)}set(e,t){let n=Date.now();this.cache.size>=this.maxSize&&!this.cache.has(e)&&this.evictLRU(),this.cache.set(e,{data:t,timestamp:n,accessCount:1,lastAccessed:n})}evictLRU(){let e=this.cache.keys().next().value;e!==void 0&&(this.cache.delete(e),this.stats.evictions++)}invalidate(e){e?this.cache.delete(e):this.cache.clear()}clear(){this.cache.clear(),this.inflight.clear(),this.stats={hits:0,misses:0,evictions:0,coalesced:0}}getStats(){let e=this.stats.hits+this.stats.misses,t=e>0?this.stats.hits/e:0;return{size:this.cache.size,maxSize:this.maxSize,hits:this.stats.hits,misses:this.stats.misses,evictions:this.stats.evictions,coalesced:this.stats.coalesced,hitRate:t}}getCachedSync(e){let t=this.cache.get(e);if(t){if(this.ttl>0&&Date.now()-t.timestamp>this.ttl){this.cache.delete(e);return}return this.cache.delete(e),this.cache.set(e,t),this.stats.hits++,t.data}}has(e){let t=this.cache.get(e);return t?Date.now()-t.timestamp>=this.ttl?(this.cache.delete(e),!1):!0:!1}},v=class extends Error{code;statusCode;details;constructor(e,t,n,r){super(e),this.code=t,this.statusCode=n,this.details=r,this.name=`ObjectStackError`,Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}toJSON(){return{name:this.name,message:this.message,code:this.code,statusCode:this.statusCode,details:this.details,stack:this.stack}}},y=class extends v{constructor(e,t){super(`Metadata not found for object: ${e}`,`METADATA_NOT_FOUND`,404,{objectName:e,...t}),this.name=`MetadataNotFoundError`}},b=class extends v{successCount;failureCount;errors;constructor(e,t,n,r,i){super(`Bulk ${e} operation failed: ${t} succeeded, ${n} failed`,`BULK_OPERATION_ERROR`,500,{operation:e,successCount:t,failureCount:n,errors:r,...i}),this.successCount=t,this.failureCount=n,this.errors=r,this.name=`BulkOperationError`}getSummary(){let e=this.successCount+this.failureCount,t=e>0?this.failureCount/e:0;return{operation:this.details?.operation,total:e,successful:this.successCount,failed:this.failureCount,failureRate:t,errors:this.errors}}},x=class extends v{url;constructor(e,t,n,r){super(`Connection error: ${e}`,`CONNECTION_ERROR`,r||503,{url:t,...n}),this.url=t,this.name=`ConnectionError`}},S=class extends v{constructor(e=`Authentication failed`,t,n){super(e,`AUTHENTICATION_ERROR`,n||401,t),this.name=`AuthenticationError`}},C=class extends v{field;validationErrors;constructor(e,t,n,r){super(e,`VALIDATION_ERROR`,400,{field:t,validationErrors:n,...r}),this.field=t,this.validationErrors=n,this.name=`ValidationError`}getValidationErrors(){return this.validationErrors||[]}};function me(e,t){let n=e?.status||e?.statusCode||500,r=e?.message||e?.statusText||`Unknown error`,i={context:t,response:{status:n,data:e?.data,headers:e?.headers}};switch(n){case 401:return new S(r,i,401);case 403:return new S(r,i,403);case 404:return t?.includes(`metadata`)||t?.includes(`schema`)||t?.includes(`getObjectSchema`)?new y(he(t),i):new v(r,`NOT_FOUND`,404,i);case 400:return new C(r,void 0,e?.data?.errors,i);case 503:return new x(r,e?.config?.url,i,503);case 504:return new x(r,e?.config?.url,i,504);default:return new v(r,`UNKNOWN_ERROR`,n,i)}}function he(e){if(!e)return`unknown`;let t=e.match(/\(([^)]+)\)/);return t?t[1]:`unknown`}function w(e){if(!e||typeof e!=`object`)return{};let t=e,n=t.error&&typeof t.error==`object`?t.error:void 0,r={},i=T(n?.message)??T(t.message)??T(t.error);i!==void 0&&(r.message=i);let a=E(t.code)??E(n?.code);return a!==void 0&&(r.code=a),r}function T(e){return typeof e==`string`&&e.trim()!==``?e:void 0}function E(e){return typeof e==`string`?e:void 0}var ge=`sys_user_preference`;function _e(e){let{dataSource:t,userId:n,key:r,resource:i=ge,onError:a=()=>{}}=e,o=null,s=Promise.resolve(),c=async()=>{let e={$filter:{user_id:n,key:r},$top:1};return((await t.find(i,e))?.data??[]).find(e=>{if(!e)return!1;let t=e.user_id!==void 0&&e.user_id!==n,i=e.key!==void 0&&e.key!==r;return!t&&!i})??null},l=e=>{if(Array.isArray(e))return e;if(typeof e==`string`)try{let t=JSON.parse(e);return Array.isArray(t)?t:[]}catch{return[]}return[]},u=async e=>{if(o!==null)try{await t.update(i,o,{value:e});return}catch(e){o=null,a(`save`,e)}let s=await c();if(s&&s.id!==void 0&&s.id!==null){o=s.id,await t.update(i,s.id,{value:e});return}try{let a=(await t.create(i,{user_id:n,key:r,value:e}))?.id;a!=null&&(o=a)}catch(n){let r=await c();if(r&&r.id!==void 0&&r.id!==null){o=r.id,await t.update(i,r.id,{value:e});return}throw n}};return{async load(){try{let e=await c();return e?(e.id!==void 0&&e.id!==null&&(o=e.id),l(e.value)):(o=null,[])}catch(e){return a(`load`,e),[]}},async save(e){let t=s.then(()=>u(e)).catch(e=>{a(`save`,e)});return s=t,t}}}function ve(e){if(!e||typeof e!=`object`)return null;let t=e;if(!(`item`in t))return null;let n=t.item;return!n||typeof n!=`object`||Object.keys(n).length===0?null:s(n)}var D={equals:`=`,eq:`=`,"==":`=`,not_equals:`!=`,notequals:`!=`,ne:`!=`,greater_than:`>`,greaterthan:`>`,gt:`>`,greater_than_or_equal:`>=`,greater_than_or_equals:`>=`,greaterthanorequal:`>=`,gte:`>=`,less_than:`<`,lessthan:`<`,lt:`<`,less_than_or_equal:`<=`,less_than_or_equals:`<=`,lessthanorequal:`<=`,lte:`<=`,in:`in`,not_in:`nin`,notin:`nin`,nin:`nin`,contains:`contains`,icontains:`icontains`,not_contains:`notcontains`,notcontains:`notcontains`,starts_with:`startswith`,startswith:`startswith`,ends_with:`endswith`,endswith:`endswith`,between:`between`,is_null:`isnull`,isnull:`isnull`,is_not_null:`isnotnull`,isnotnull:`isnotnull`,before:`<`,after:`>`};function ye(e){return typeof e==`string`?D[e.toLowerCase()]??D[e]??e:null}var be=class extends Error{code=`INVALID_FILTER`;httpStatus=400;entry;index;constructor(e,t){let n=JSON.stringify(e)??String(e);super(`Filter entry ${t} is not a usable filter rule (${n}). Expected { field, operator, value } with a non-empty field.`),this.name=`MalformedFilterError`,this.entry=e,this.index=t}},xe=class extends Error{code=`INVALID_FILTER`;httpStatus=400;where;resource;constructor(e,t){let n=JSON.stringify(e)??String(e);super(`aggregate('${t}'): the spec-shape branch received a \`where\` array that is not a filter — ${n}. This branch posts \`where\` to POST /data/:object/query verbatim, so it must ALREADY be lowered: either a FilterCondition object (\`QuerySchema.where\`, @objectstack/spec data/query.zod.ts), or a FilterArray the ingress can lower — a comparison tuple (['stage','=','won']), a logical node (['and',[..],[..]]), or an array of nodes (data/filter.zod.ts, gate \`isFilterAST\`). A ViewFilterRule[] ([{ field, operator, value }, ...]) is authoring sugar, not a filter: lower it in the producer that built these aggregate params, not here. Nothing was sent to the server, so no unfiltered numbers came back.`),this.name=`UnloweredAggregateWhereError`,this.where=e,this.resource=t}};function Se(e,t){if(Array.isArray(e)&&e.length!==0&&!a(e))throw new xe(e,t)}var Ce=[`filter`,`field`,`function`],we={filter:"`filter` is the ANALYTICS branch's filter and is lowered there through `parseFilterAST`; this branch's filter is `where` (`QuerySchema.where`, @objectstack/spec data/query.zod.ts) and is posted VERBATIM — rename it to `where` and lower it in the producer.",field:"`field` is half of the analytics branch's `${field}_${function}` measure; this branch's measure is `aggregations`, an AggregationNode[] such as [{ function: 'sum', field: 'amount', alias: 'amount_sum' }].",function:"`function` is the other half of that measure pair and belongs inside an `aggregations` node, not beside `groupBy`."};function Te(e){let t=[];return Array.isArray(e?.groupBy)&&t.push("`groupBy` is an array"),Array.isArray(e?.aggregations)&&t.push("`aggregations` is an array"),e?.where!==void 0&&t.push("a `where` key is present"),t}var Ee=class extends Error{code=`INVALID_FILTER`;httpStatus=400;keys;received;resource;constructor(e,t,n){let r={};for(let n of e)r[n]=t?.[n];let i=e.map(e=>`\`${e}\``).join(`, `),a=e.map(e=>`${e}=${JSON.stringify(t?.[e])??String(t?.[e])}`).join(`, `),o=Te(t).join(` and `),s=Array.isArray(t?.aggregations)?``:" Because no `aggregations` was supplied either, the query this would have built is a grouping with NO MEASURE — the chart renders and its numbers mean nothing.";super(`aggregate('${n}'): the spec-shape branch received the analytics branch's ${i} — ${a} — and reads none of them. This call took the spec-shape branch because ${o}; the branch posts only \`groupBy\`, \`aggregations\`, \`where\` and \`limit\` to POST /data/:object/query, so those keys would have been dropped in silence.${s} `+e.map(e=>we[e]).join(` `)+" The two shapes are alternatives, not a mixture: the analytics branch (`{ field, function, groupBy, filter }`, which lowers its filter for you) is reached only when NONE of an array `groupBy`, an array `aggregations` or a `where` key is present. Nothing was sent to the server, so no unfiltered numbers came back."),this.name=`AnalyticsKeysOnSpecShapeError`,this.keys=e,this.received=r,this.resource=n}};function De(e,t){let n=Ce.filter(t=>e?.[t]!=null);if(n.length!==0)throw new Ee(n,e,t)}var O=class extends Error{code=`INVALID_FILTER`;httpStatus=400;filter;resource;constructor(e,t,n){let r=JSON.stringify(e)??String(e);super(`aggregate('${t}'): the analytics branch received a \`filter\` array that \`parseFilterAST\` cannot lower into a FilterCondition — ${r}.`+(n?` (${n})`:``)+" `where` on the analytics wire is a FilterCondition (`AnalyticsQuerySchema`, @objectstack/spec data/analytics.zod.ts), and a FilterArray is input-only sugar lowered into one at the single sink `parseFilterAST` (data/filter.zod.ts, objectstack#5158 ruling C). Lowerable shapes are a comparison tuple (['stage','=','won']), a logical node (['and',[..],[..]]), an array of such nodes, and a ViewFilterRule[] this adapter translates first. An infix join ([condA, 'or', condB]) is none of them. Nothing was sent to the server, so no unfiltered numbers came back."),this.name=`UnlowerableAnalyticsFilterError`,this.filter=e,this.resource=t}};function k(e){if(!e||typeof e!=`object`)return null;let t=e.field,n=ye(e.operator??e.op??`=`);return!t||!n?null:[String(t),n,e.value]}function Oe(e){let t=e[0];return e.length>0&&typeof t==`object`&&!!t&&!Array.isArray(t)&&t.field!==void 0}function ke(e){let t=e.map((e,t)=>{if(Array.isArray(e))return j(e);let n=k(e);if(!n)throw new be(e,t);return n});return t.length===1?t[0]:[`and`,...t]}var Ae=new Set([`and`,`or`]);function A(e){if(Oe(e))return ke(e);let t=e[0];return typeof t==`string`&&Ae.has(t.toLowerCase())?[t,...e.slice(1).map(j)]:e.every(e=>Array.isArray(e))?e.map(j):e}function j(e){if(Array.isArray(e))return e.length>0?A(e):e;if(e&&typeof e==`object`&&e.field!==void 0){let t=k(e);if(t)return t}return e}function M(e){if(e!=null){if(Array.isArray(e))return e.length===0?void 0:A(e);if(typeof e==`object`)return Object.keys(e).length===0?void 0:l(e)}}function je(e,t){if(!Array.isArray(e))return e;if(e.length===0)return;let n=A(e);if(!a(n))throw new O(e,t);let r;try{r=i(n)}catch(n){throw new O(e,t,n instanceof Error?n.message:String(n))}if(r===void 0)throw new O(e,t,"`parseFilterAST` answered `undefined` for a non-empty filter");return r}function N(e){if(e==null)return;if(typeof e==`string`){let t=e.trim();return t.length>0?t:void 0}let t=(e,t)=>String(t).toLowerCase()===`desc`?`-${e}`:e;if(Array.isArray(e)){let n=e.map(e=>typeof e==`string`?e.trim():t(e.field,e.order)).filter(e=>e.length>0);return n.length>0?n.join(`,`):void 0}if(typeof e==`object`){let n=Object.entries(e).map(([e,n])=>t(e,n));return n.length>0?n.join(`,`):void 0}}var P=new Map;async function Me(e,t){let n=e||`<default>`,r=P.get(n);if(r)return r;let i=t().catch(e=>{throw P.delete(n),e});return P.set(n,i),i}function Ne(e){let t=e?.capabilities;if(!t||typeof t!=`object`)return;let n=t.transactionalBatch;if(typeof n==`boolean`)return n;if(n&&typeof n==`object`&&typeof n.enabled==`boolean`)return n.enabled}function F(e){if(!e||typeof e!=`object`)return!1;let t=e;if(t.httpStatus===404||t.status===404||t.statusCode===404)return!0;let n=typeof t.code==`string`?t.code:``;return c({code:n},[`OBJECT_NOT_FOUND`,`RECORD_NOT_FOUND`])}var Pe=[`OBJECT_API_DISABLED`,`OBJECT_API_METHOD_NOT_ALLOWED`];function I(e){return c(e,Pe)}var Fe=`PERMISSION_DENIED`;function Ie(e){return u(e,Fe)}var Le=`RESOURCE_NOT_FOUND`;function Re(e){return u(e,Le)}function ze(e){return typeof e!=`object`||!e?!1:e.item!=null}var L=`manage_metadata`,Be=class extends Error{code=`VIEW_CONFIG_PERMISSION_DENIED`;capability=L;objectName;viewId;constructor(e,t){super(`View configuration is shared: changing "${t}" changes it for everyone who uses this view. That requires the "${L}" capability, which this session does not hold.`),this.name=`ViewConfigPermissionDeniedError`,this.objectName=e,this.viewId=t}};function Ve(e){if(!e||typeof e!=`object`)return!1;let t=e;return t.code===`VIEW_CONFIG_PERMISSION_DENIED`||t.name===`ViewConfigPermissionDeniedError`}var R=class extends Error{code=`ANALYTICS_NOT_INSTALLED`;surface;serverCode;constructor(e,t,n){super(`Analytics capability is not installed on this deployment — ${e} is unavailable. Install @objectstack/service-analytics and mount AnalyticsServicePlugin to enable it.`+(t?` (server said: ${t})`:``)),this.name=`AnalyticsNotInstalledError`,this.surface=e,this.serverCode=n}},He=class extends Error{code=`ANALYTICS_DATASET_NOT_FOUND`;datasetName;serverCode;serverMessage;constructor(e){let t=e.datasetName?`Dataset "${e.datasetName}"`:`The requested dataset`;super(`${t} is not defined in this environment — the app that defines it is missing or out of date. Analytics itself is installed and answering, so the fix is to upgrade the installed app, not to install a server plugin.`+(e.serverMessage?` (server said: ${e.serverMessage})`:``)),this.name=`AnalyticsDatasetNotFoundError`,this.datasetName=e.datasetName,this.serverCode=e.serverCode,this.serverMessage=e.serverMessage}},z=class extends Error{code=`ANALYTICS_UNAUTHENTICATED`;serverCode;serverMessage;constructor(e={}){super(`Analytics query refused: this session is not authenticated. Sign in again and retry — the request was refused before it ran, so it says nothing about whether the analytics capability is installed.`+(e.serverMessage?` (server said: ${e.serverMessage})`:``)),this.name=`AnalyticsUnauthenticatedError`,this.serverCode=e.serverCode,this.serverMessage=e.serverMessage}};function Ue(e){if(!e||typeof e!=`object`)return{};let t=e,n=(t.error&&typeof t.error==`object`?t.error:void 0)??t;return{code:typeof n.code==`string`&&n.code.length>0?n.code:void 0,message:typeof n.message==`string`&&n.message.length>0?n.message:typeof t.error==`string`&&t.error.length>0?t.error:void 0}}var B=[404,501],We=class extends Error{code=`ANALYTICS_QUERY_REJECTED`;serverCode;constructor(e,t){super(`Analytics rejected the query: ${e??`the request body does not match the AnalyticsQuery contract`}`),this.name=`AnalyticsQueryRejectedError`,this.serverCode=t}},V=class extends Error{code=`ANALYTICS_RESULT_SHAPE_INVALID`;resource;envelope;received;constructor(e,t){let n=t,r=Array.isArray(n?.data?.rows),i=t===null?`null`:Array.isArray(t)?`an array`:typeof t==`object`?`an object with keys [${Object.keys(t).join(`, `)}]`:typeof t;super(r?`aggregate('${e}'): client.analytics.query resolved to the \`{ data: { rows } }\` envelope, not to an AnalyticsResult. @objectstack/client resolves this method to the payload itself since 17.3.0 (objectstack#13079), and this adapter reads \`rows\` only: an older client is installed beside it, or something between the client and POST /analytics/query wraps the payload a second time. Install @objectstack/client 17.3.0 or later.`:`aggregate('${e}'): client.analytics.query resolved to ${i}, which has no \`rows\` array, so it is not an AnalyticsResult. This adapter reads \`rows\` only (objectui#7028).`),this.name=`AnalyticsResultShapeError`,this.resource=e,this.envelope=r,this.received=i}};function Ge(e){let t=e??{},n=typeof t.code==`string`&&t.code.length>0?t.code:void 0,r=typeof t.message==`string`?t.message:void 0,i=typeof t.httpStatus==`number`?t.httpStatus:typeof t.status==`number`?t.status:typeof t.statusCode==`number`?t.statusCode:void 0;if(c({code:n},[`NOT_IMPLEMENTED`,`ROUTE_NOT_FOUND`]))return{kind:`not-installed`,code:n,message:r};if(u({code:n},`VALIDATION_FAILED`))return{kind:`rejected`,code:n,message:r};if(u({code:n},`UNAUTHENTICATED`))return{kind:`unauthenticated`,code:n,message:r};if(u({code:n},`CUBE_NOT_FOUND`))return{kind:`cube-not-found`,code:n,message:r};if(i===400)return{kind:`rejected`,code:n,message:r};if(n===void 0){if(i!==void 0&&B.includes(i))return{kind:`not-installed`,code:n,message:r};if(i===401)return{kind:`unauthenticated`,code:n,message:r}}return{kind:`unknown`,code:n,message:r}}var Ke=class extends Error{code=`CONCURRENT_UPDATE`;httpStatus=409;currentVersion;currentRecord;userMessage;constructor(e){super(e.message??`Record was modified by another user`),this.name=`ConcurrentUpdateError`,this.currentVersion=e.currentVersion,this.currentRecord=e.currentRecord,this.userMessage=e.userMessage??null}};function qe(e,t){return typeof e.userMessage==`string`&&e.userMessage.trim()?e.userMessage:typeof t.userMessage==`string`&&t.userMessage.trim()?t.userMessage:null}function H(e){if(!e||typeof e!=`object`)return e;let t=e,n=t.details??{},r=qe(t,n);if(t.code===`VALIDATION_FAILED`||t.name===`ValidationError`){let e=Array.isArray(n.fields)?n.fields:Array.isArray(t.fields)?t.fields:[],i=e.map(e=>{let t=e??{},n=typeof t.field==`string`?t.field:void 0;return n?{field:n,message:typeof t.message==`string`&&t.message.trim()?t.message:typeof t.code==`string`?t.code:``}:null}).filter(e=>e!==null);return new C(typeof t.message==`string`?t.message:`Validation failed`,i[0]?.field,i,r===null?{fields:e}:{fields:e,userMessage:r})}return t.code===`CONCURRENT_UPDATE`?new Ke({currentVersion:typeof n.currentVersion==`string`?n.currentVersion:null,currentRecord:n.currentRecord??null,message:typeof t.message==`string`?t.message:void 0,userMessage:r}):e}function U(e,t){if(!t||typeof t!=`object`)return null;let n=typeof t.method==`string`&&t.method?t.method:void 0,r=typeof t.url==`string`&&t.url?t.url:void 0,i=typeof t.status==`number`?t.status:typeof t.statusCode==`number`?t.statusCode:void 0;if(!n&&!r&&i===void 0)return null;let a=t.error&&typeof t.error==`object`?t.error:void 0,o=typeof t.code==`string`&&t.code||(a&&typeof a.code==`string`?a.code:void 0),s=[n??`GET`,r??`<unknown url>`];return s.push(`-> ${i??`no status`}`),o&&s.push(`[${o}]`),`${e}: ${s.join(` `)}`}function Je(){let e=e=>{if(!e||typeof e!=`object`)return!1;if(e.status===404||e.statusCode===404)return!0;let t=e.error;if(t&&typeof t==`object`){let e=t.code;if(c({code:e},[`OBJECT_NOT_FOUND`,`RECORD_NOT_FOUND`]))return!0}return!1},t={debug:(e,t)=>console.debug(e,t??``),info:(e,t)=>console.info(e,t??``),warn:(e,t)=>console.warn(e,t??``),error:(t,n,r)=>{if(e(r)){console.debug(`[ObjectStack] ${U(t,r)??t} (suppressed expected 404)`,r);return}console.error(U(t,r)??t,n??``,r??``)},fatal:(e,t,n)=>console.error(U(e,n)??e,t??``,n??``),log:(e,...t)=>console.log(e,...t),child:()=>t,withTrace:()=>t};return t}var Ye=new Set(e.shape.reason.options),Xe=`objectui:unrecognized-drop-reason`;function Ze(e){return Ye.has(e)}function W(e){return!!e&&typeof e==`object`&&Array.isArray(e.fields)&&e.fields.some(e=>typeof e==`string`)}function G(e,t){let n=e.fields.filter(e=>typeof e==`string`),r=typeof e.object==`string`?e.object:t;return Ze(e.reason)?{...e,object:r,fields:n,reason:e.reason}:{...e,object:r,fields:n,reason:Xe,unrecognizedReason:e.reason}}var Qe=``,K=[`ROUTE_NOT_FOUND`,`NOT_IMPLEMENTED`],$e=`INVALID_REQUEST`,et=400,q=[404,501],J=[`UNAUTHENTICATED`,`PERMISSION_DENIED`],Y=[401,403,405];function tt(e){let t=e??{},n=typeof t.code==`string`&&t.code.length>0?t.code:void 0,r=typeof t.message==`string`?t.message:void 0,i=typeof t.httpStatus==`number`?t.httpStatus:typeof t.status==`number`?t.status:typeof t.statusCode==`number`?t.statusCode:void 0,a={code:n,status:i,message:r};return c({code:n},K)||u({code:n},$e)&&i===et?{kind:`not-served`,...a}:c({code:n},J)||i!==void 0&&Y.includes(i)?{kind:`refused`,...a}:n===void 0&&i!==void 0&&q.includes(i)?{kind:`not-served`,...a}:{kind:`unreadable`,...a}}function nt(e){let t=e??{},n=typeof t.code==`string`&&t.code.length>0?t.code:void 0,r=typeof t.message==`string`?t.message:void 0,i=typeof t.httpStatus==`number`?t.httpStatus:typeof t.status==`number`?t.status:typeof t.statusCode==`number`?t.statusCode:void 0,a={code:n,status:i,message:r};return c({code:n},K)?{kind:`not-served`,...a}:c({code:n},J)||i!==void 0&&Y.includes(i)?{kind:`refused`,...a}:n===void 0&&i!==void 0&&q.includes(i)?{kind:`not-served`,...a}:{kind:`unreadable`,...a}}function X(e){if(typeof e!=`object`||!e)return JSON.stringify(e);if(Array.isArray(e))return`[${e.map(X).join(`,`)}]`;let t=e;return`{${Object.keys(t).sort().map(e=>`${JSON.stringify(e)}:${X(t[e])}`).join(`,`)}}`}function rt(e,t){if(e===t)return!0;let n=e==null,r=t==null;return n||r?n&&r:X(e)===X(t)}function Z(e,t,n){if(!t||!n||typeof t!=`object`||typeof n!=`object`)return e;let r=[];for(let i of e){let e=i.fields.filter(e=>!Object.prototype.hasOwnProperty.call(t,e)||!Object.prototype.hasOwnProperty.call(n,e)||!rt(t[e],n[e]));e.length>0&&r.push({...i,fields:e})}return r}function Q(e){let t=e?.list??e;return t?.data?.object??t?.object??t?.objectName}var $=`_isOverride`;function it(e,t){return e?.[$]===!0||t?.[$]===!0}var at=Object.freeze([`rowHeight`,`sort`,`hiddenFields`,`columnState`,`inlineEdit`]),ot=Object.freeze([`name`,`object`,`viewKind`,$]);function st(e){if(!e||typeof e!=`object`||Array.isArray(e))return e;let t=e;if(!it(t,t.list??t))return e;let n={};for(let e of ot)t[e]!==void 0&&(n[e]=t[e]);for(let e of at)t[e]!==void 0&&(n[e]=t[e]);return n}function ct(e){if(!e||typeof e!=`object`)return null;let t=e,n=`item`in t?t.item:t;if(!n||typeof n!=`object`)return null;let r=s(n),i=r.list??r;return!i||typeof i!=`object`?null:Object.keys(i).length>0?i:null}function lt(e){let t=e??void 0;return{removed:!!(t?.deleted??t?.reset??!0),...typeof t?.reset==`boolean`?{reset:t.reset}:{},...typeof t?.message==`string`?{message:t.message}:{}}}function ut(e,t,n,r){return{...e,...t,name:n,object:e?.object||e?.data?.object||r}}var dt=class{client;connected=!1;connectPromise=null;metadataCache;connectionState=`disconnected`;connectionStateListeners=[];batchProgressListeners=[];autoReconnect;maxReconnectAttempts;reconnectDelay;reconnectAttempts=0;baseUrl;token;analyticsCapabilityWarned=!1;fetchImpl;inflightFinds=new Map;missingResources=new Set;batchUnsupported=!1;atomicBatchCapability;mutationListeners=new Set;writeWarningListeners=new Set;saveAdvisoryListeners=new Set;metadataReadWarningListeners=new Set;systemCapabilities;constructor(e){this.client=new ne.ObjectStackClient({...e,logger:Je()}),this.installSaveAdvisoryInterceptor(),this.metadataCache=new pe(e.cache),this.autoReconnect=e.autoReconnect??!0,this.maxReconnectAttempts=e.maxReconnectAttempts??3,this.reconnectDelay=e.reconnectDelay??1e3,this.baseUrl=e.baseUrl,this.token=e.token,this.systemCapabilities=e.systemCapabilities,this.fetchImpl=e.fetch||globalThis.fetch.bind(globalThis)}async connect(){if(!this.connected)return this.connectPromise?this.connectPromise:(this.setConnectionState(`connecting`),this.connectPromise=(async()=>{try{let e=this.baseUrl||``,t=e?`${e.replace(/\/$/,``)}/api/v1/discovery`:`/api/v1/discovery`,n=await Me(e,async()=>{let e=await this.fetchImpl(t,{method:`GET`,headers:this.token?{Authorization:`Bearer ${this.token}`}:void 0});if(!e.ok)throw Error(`discovery ${e.status} ${e.statusText}`);let n=await e.json();return n&&typeof n.success==`boolean`&&`data`in n?n.data:n});this.client.discoveryInfo=n,this.atomicBatchCapability=Ne(n),this.connected=!0,this.reconnectAttempts=0,this.setConnectionState(`connected`)}catch(e){let t=new x(e instanceof Error?e.message:`Failed to connect to ObjectStack server`,void 0,{originalError:e});if(this.setConnectionState(`error`,t),this.autoReconnect&&this.reconnectAttempts<this.maxReconnectAttempts)await this.attemptReconnect();else throw t}finally{this.connectPromise=null}})(),this.connectPromise)}async attemptReconnect(){this.reconnectAttempts++,this.setConnectionState(`reconnecting`);let e=this.reconnectDelay*2**(this.reconnectAttempts-1);await new Promise(t=>setTimeout(t,e)),this.connected=!1,await this.connect()}getConnectionState(){return this.connectionState}isConnected(){return this.connected&&this.connectionState===`connected`}onConnectionStateChange(e){return this.connectionStateListeners.push(e),()=>{let t=this.connectionStateListeners.indexOf(e);t>-1&&this.connectionStateListeners.splice(t,1)}}onBatchProgress(e){return this.batchProgressListeners.push(e),()=>{let t=this.batchProgressListeners.indexOf(e);t>-1&&this.batchProgressListeners.splice(t,1)}}setConnectionState(e,t){this.connectionState=e;let n={state:e,timestamp:Date.now(),error:t};this.connectionStateListeners.forEach(e=>{try{e(n)}catch(e){console.error(`Error in connection state listener:`,e)}})}emitBatchProgress(e){this.batchProgressListeners.forEach(t=>{try{t(e)}catch(e){console.error(`Error in batch progress listener:`,e)}})}async find(e,t){if(this.missingResources.has(e))return{data:[],total:0};let n=`${e}::${X(t)}`,r=this.inflightFinds.get(n);if(r)return r;let i=(async()=>{if(await this.connect(),t?.$expand&&t.$expand.length>0||t?.$search!=null&&String(t.$search).trim()!==``){let n=await this.rawFindWithPopulate(e,t);return this.normalizeQueryResult(n,t)}let n=this.convertQueryParams(t);try{let r=await this.client.data.find(e,n);return this.normalizeQueryResult(r,t)}catch(t){if(!I(t)&&F(t))return this.missingResources.add(e),{data:[],total:0};throw t}})();this.inflightFinds.set(n,i);let a=()=>{this.inflightFinds.get(n)===i&&this.inflightFinds.delete(n)};return i.then(a,a),i}async searchAll(e,t){let n=(e??``).trim();if(n===``)return{query:``,hits:[]};await this.connect();let r=new URLSearchParams;r.set(`q`,n),t?.limit!=null&&t.limit>0&&r.set(`limit`,String(t.limit)),t?.objects&&t.objects.length>0&&r.set(`objects`,t.objects.join(`,`));let i=(this.baseUrl||``).replace(/\/$/,``),a=`${i}${/\/api\/v\d+$/i.test(i)?`/search`:`/api/v1/search`}?${r.toString()}`,o={"Content-Type":`application/json`};this.token&&(o.Authorization=`Bearer ${this.token}`);let s=await this.fetchImpl(a,{method:`GET`,headers:o});if(!s.ok){if(s.status===404)return{query:n,hits:[]};let e=w(await s.json().catch(()=>({message:s.statusText}))),t=Error(e.message??s.statusText);throw t.status=s.status,t.code=e.code,t}let c=await s.json(),l=c&&typeof c==`object`&&typeof c.success==`boolean`&&`data`in c?c.data:c,u=Array.isArray(l?.hits)?l.hits:Array.isArray(l)?l:[],d=[];for(let e of u){if(!e||typeof e!=`object`)continue;let t=e,n=t.object??t.objectName??t.object_name,r=t.id??t.record?.id??t.record?._id;typeof n==`string`&&r!=null&&d.push({object:n,id:String(r),title:typeof t.title==`string`?t.title:void 0,snippet:typeof t.snippet==`string`?t.snippet:void 0,record:t.record&&typeof t.record==`object`?t.record:void 0})}return{query:typeof l?.query==`string`?l.query:n,hits:d}}async findOne(e,t,n){if(await this.connect(),n?.$expand&&n.$expand.length>0)try{let r={...n,$filter:{id:String(t)},$top:1},i=await this.rawFindWithPopulate(e,r);if(Array.isArray(i))return i[0]||null;let a=i;return(a.records||a.value||[])[0]||null}catch(e){if(F(e))return null}try{return(await this.client.data.get(e,String(t))).record}catch(e){if(F(e))return null;throw e}}emitMutation(e){for(let t of this.mutationListeners)try{t(e)}catch(e){console.warn(`ObjectStackAdapter: mutation listener error`,e)}}onMutation(e){return this.mutationListeners.add(e),()=>{this.mutationListeners.delete(e)}}emitWriteWarning(e){for(let t of this.writeWarningListeners)try{t(e)}catch(e){console.warn(`ObjectStackAdapter: write-warning listener error`,e)}}notifyDroppedFields(e,t,n,r,i){let a=n?.droppedFields;if(!Array.isArray(a)||a.length===0)return;let o=a.filter(W).map(e=>G(e,t)),s=n?.record,c=Z(o,i,s);c.length!==0&&this.emitWriteWarning({operation:e,resource:t,...r===void 0?{}:{id:r},droppedFields:c})}notifyBatchDroppedFields(e,t){let n=t?.droppedFields;if(!Array.isArray(n)||n.length===0)return;let r=t?.results;for(let t of n){if(!W(t))continue;let n=t,i=typeof n.index==`number`?e[n.index]:void 0,a=typeof n.object==`string`?n.object:typeof i?.object==`string`?i.object:Qe,o=typeof n.index==`number`&&Array.isArray(r)?r[n.index]:void 0,[s]=Z([G({fields:n.fields,reason:n.reason},a)],i?.data,o);if(!s)continue;let c=(i?.action??`create`)===`create`?`create`:`update`;this.emitWriteWarning({operation:c,resource:a,...i?.id!==void 0&&i?.id!==null?{id:i.id}:{},droppedFields:[s]})}}onWriteWarning(e){return this.writeWarningListeners.add(e),()=>{this.writeWarningListeners.delete(e)}}onSaveAdvisory(e){return this.saveAdvisoryListeners.add(e),()=>{this.saveAdvisoryListeners.delete(e)}}emitSaveAdvisory(e){for(let t of this.saveAdvisoryListeners)try{t(e)}catch(e){console.warn(`ObjectStackAdapter: save-advisory listener error`,e)}}onMetadataReadWarning(e){return this.metadataReadWarningListeners.add(e),()=>{this.metadataReadWarningListeners.delete(e)}}emitMetadataReadWarning(e){for(let t of this.metadataReadWarningListeners)try{t(e)}catch(e){console.warn(`ObjectStackAdapter: metadata read-warning listener error`,e)}}installSaveAdvisoryInterceptor(){let e=this.client.meta,t=e.saveItem.bind(e);e.saveItem=async(e,n,r)=>{let i=await t(e,n,r);try{let t=p(i);t.length>0&&this.emitSaveAdvisory({type:e,name:n,door:`save`,mode:i?.state===`draft`?`draft`:`publish`,advisories:t})}catch(e){console.warn(`ObjectStackAdapter: save-advisory read error`,e)}return i}}async create(e,t){await this.connect();try{let n=await this.client.data.create(e,t);return this.emitMutation({type:`create`,resource:e,record:{...n.record}}),this.notifyDroppedFields(`create`,e,n,n.record?.id,t),n.record}catch(e){throw H(e)}}async update(e,t,n,r){await this.connect();try{let i=await this.client.data.update(e,String(t),n,r?.ifMatch?{ifMatch:r.ifMatch}:void 0);return this.emitMutation({type:`update`,resource:e,id:String(t),record:{...i.record}}),this.notifyDroppedFields(`update`,e,i,t,n),i.record}catch(e){throw H(e)}}async delete(e,t,n){await this.connect();try{let r=await this.client.data.delete(e,String(t),n?.ifMatch?{ifMatch:n.ifMatch}:void 0);return r.success&&this.emitMutation({type:`delete`,resource:e,id:String(t)}),r.success}catch(e){throw H(e)}}async bulkUpdate(e,t,n){if(await this.connect(),!t||t.length===0)return 0;let r=t.map(e=>({id:String(e),data:n})),i=t=>(t>0&&this.emitMutation({type:`update`,resource:e}),t),a=this.client.data.updateMany;if(typeof a==`function`)try{let n=await a(e,r,{continueOnError:!0});return n&&typeof n==`object`&&typeof n.succeeded==`number`?i(n.succeeded):i(Array.isArray(n)?n.length:t.length)}catch(e){throw H(e)}let o=0;for(let r of t)try{await this.client.data.update(e,String(r),n),o++}catch{}return i(o)}async bulkDelete(e,t){if(await this.connect(),!t||t.length===0)return 0;let n=t.map(e=>String(e)),r=t=>(t>0&&this.emitMutation({type:`delete`,resource:e}),t),i=this.client.data.deleteMany;if(typeof i==`function`)try{let t=await i(e,n,{continueOnError:!0});return t&&typeof t==`object`&&typeof t.succeeded==`number`?r(t.succeeded):r(Array.isArray(t)?t.length:n.length)}catch(e){throw H(e)}let a=0;for(let t of n)try{await this.client.data.delete(e,t),a++}catch{}return r(a)}async batchTransaction(e){await this.connect();let t=this.atomicBatchCapability===!0;if(!t&&this.batchUnsupported)return d(this,e);try{let t=await this.client.data.batchTransaction(e);return this.emitBatchMutations(e,t?.results),this.notifyBatchDroppedFields(e,t),t}catch(n){let r=this.errorStatusOf(n);if(!t&&this.batchStatusUnsupported(r))return this.fallbackToEmulation(e,r);throw n}}batchStatusUnsupported(e){return e===404||e===405||e===501}errorStatusOf(e){if(!e||typeof e!=`object`)return;let t=e,n=t.httpStatus??t.status??t.statusCode;return typeof n==`number`?n:void 0}fallbackToEmulation(e,t){return this.batchUnsupported||(this.batchUnsupported=!0,console.warn(`ObjectStackAdapter: POST /api/v1/batch unavailable (HTTP ${t??`?`}) — falling back to non-atomic client-side batch emulation. Cross-object saves on this backend are best-effort, not transactional.`)),d(this,e)}emitBatchMutations(e,t){let n=Array.isArray(t)?t:[];e.forEach((e,t)=>{let r=e.action??`create`,i=n[t];r===`create`?this.emitMutation({type:`create`,resource:e.object,record:i}):r===`update`?this.emitMutation({type:`update`,resource:e.object,id:e.id??i?.id??i?._id,record:i}):r===`delete`&&this.emitMutation({type:`delete`,resource:e.object,id:e.id})})}async bulk(e,t,n){if(await this.connect(),!n||n.length===0)return[];let r=n.length,i=0,a=0,o=()=>{this.emitBatchProgress({operation:t,total:r,completed:i,failed:a,percentage:r>0?(i+a)/r*100:0})};try{switch(t){case`create`:{o();let t=await this.client.data.createMany(e,n);return i=t.length,a=r-i,o(),i>0&&this.emitMutation({type:`create`,resource:e}),t}case`delete`:{let t=n.map(e=>e.id).filter(Boolean);if(t.length===0){let e=n.map((e,t)=>({index:t,error:`Missing ID for item at index ${t}`}));throw a=n.length,o(),new b(`delete`,0,n.length,e)}return o(),await this.client.data.deleteMany(e,t),i=t.length,a=r-i,o(),i>0&&this.emitMutation({type:`delete`,resource:e}),[]}case`update`:{if(typeof this.client.data.updateMany==`function`)try{o();let t=this.client.data.updateMany,s=await t(e,n);return i=s.length,a=r-i,o(),i>0&&this.emitMutation({type:`update`,resource:e}),s}catch{}let t=[],s=[];for(let r=0;r<n.length;r++){let c=n[r],l=c.id;if(!l){s.push({index:r,error:`Missing ID`}),a++,o();continue}try{let n=await this.client.data.update(e,String(l),c);t.push(n.record),i++,o()}catch(e){let t=e instanceof Error?e.message:String(e);s.push({index:r,error:t}),a++,o()}}if(i>0&&this.emitMutation({type:`update`,resource:e}),s.length>0)throw new b(`update`,t.length,s.length,s,{resource:e,totalRecords:n.length});return t}default:throw new v(`Unsupported bulk operation: ${t}`,`UNSUPPORTED_OPERATION`,400)}}catch(r){if(o(),r instanceof b||r instanceof v)throw r;let i=r instanceof Error?r.message:String(r),a=n.map((e,t)=>({index:t,error:i}));throw new b(t,0,n.length,a,{resource:e,originalError:r})}}async importRecords(e,t){await this.connect();let n=this.client.data.import;if(typeof n!=`function`)throw new v(`The connected @objectstack/client does not support data.import(). Upgrade the client, or import via a per-row create fallback.`,`UNSUPPORTED_OPERATION`,400);try{return await n.call(this.client.data,e,t)}catch(e){throw H(e)}}importJobApi(){let e=this.client.data;if(typeof e.createImportJob==`function`)return e}async createImportJob(e,t){await this.connect();let n=this.importJobApi();if(!n)throw new v(`The connected @objectstack/client does not support async import jobs (data.createImportJob). Upgrade the client, or use the synchronous importRecords() path.`,`UNSUPPORTED_OPERATION`,400);try{return await n.createImportJob.call(this.client.data,e,t)}catch(e){throw H(e)}}async getImportJobProgress(e){await this.connect();let t=this.importJobApi();if(!t)throw new v(`The connected @objectstack/client does not support async import jobs.`,`UNSUPPORTED_OPERATION`,400);try{return await t.getImportJobProgress.call(this.client.data,e)}catch(e){throw H(e)}}async getImportJobResults(e){await this.connect();let t=this.importJobApi();if(!t)throw new v(`The connected @objectstack/client does not support async import jobs.`,`UNSUPPORTED_OPERATION`,400);try{return await t.getImportJobResults.call(this.client.data,e)}catch(e){throw H(e)}}async listImportJobs(e={}){await this.connect();let t=this.importJobApi();if(!t)throw new v(`The connected @objectstack/client does not support async import jobs.`,`UNSUPPORTED_OPERATION`,400);try{return await t.listImportJobs.call(this.client.data,e)}catch(e){throw H(e)}}async cancelImportJob(e){await this.connect();let t=this.importJobApi();if(!t)throw new v(`The connected @objectstack/client does not support async import jobs.`,`UNSUPPORTED_OPERATION`,400);try{await t.cancelImportJob.call(this.client.data,e)}catch(e){throw H(e)}}async undoImportJob(e){await this.connect();let t=this.importJobApi();if(!t||typeof t.undoImportJob!=`function`)throw new v(`The connected @objectstack/client does not support undoing import jobs (data.undoImportJob).`,`UNSUPPORTED_OPERATION`,400);try{return await t.undoImportJob.call(this.client.data,e)}catch(e){throw H(e)}}normalizeQueryResult(e,t){if(Array.isArray(e))return{data:e,total:e.length,page:1,pageSize:e.length,hasMore:!1};let n=e,r=n.records||n.value||[],i=n.total??n.count??r.length,a=typeof n.hasMore==`boolean`?n.hasMore:t?.$top?r.length===t.$top:!1;return{data:r,total:i,page:t?.$skip&&t.$top?Math.floor(t.$skip/t.$top)+1:1,pageSize:t?.$top,hasMore:a}}async rawFindWithPopulate(e,t){let n=new URLSearchParams;if(t.$expand&&t.$expand.length>0&&n.set(`populate`,t.$expand.join(`,`)),t.$top!==void 0&&n.set(`top`,String(t.$top)),t.$skip!==void 0&&n.set(`skip`,String(t.$skip)),t.$search!=null&&String(t.$search).trim()!==``&&n.set(`search`,String(t.$search).trim()),t.$searchFields&&t.$searchFields.length>0&&n.set(`searchFields`,t.$searchFields.join(`,`)),t.$select&&t.$select.length>0){let e=t.$select.includes(`id`)?t.$select:[`id`,...t.$select];n.set(`select`,e.join(`,`))}let r=N(t.$orderby);if(r&&n.set(`sort`,r),t.$filter!==void 0&&t.$filter!==null){let e=M(t.$filter);e!==void 0&&n.set(`filter`,JSON.stringify(e))}let i=this.baseUrl.replace(/\/$/,``),a=n.toString(),o=`${i}${/\/api\/v\d+$/i.test(i)?`/data`:`/api/v1/data`}/${e}${a?`?${a}`:``}`,s={"Content-Type":`application/json`};this.token&&(s.Authorization=`Bearer ${this.token}`);let c=await this.fetchImpl(o,{method:`GET`,headers:s});if(!c.ok){let e=w(await c.json().catch(()=>({message:c.statusText}))),t=Error(e.message??c.statusText);throw t.status=c.status,t.code=e.code,t.httpStatus=c.status,t}let l=await c.json();return l&&typeof l.success==`boolean`&&`data`in l?l.data:l}async exportDownload(e,t={}){let n=new URLSearchParams,r=t.format===`xlsx`?`xlsx`:t.format===`json`?`json`:`csv`;if(n.set(`format`,r),t.fields&&t.fields.length>0&&n.set(`fields`,t.fields.join(`,`)),t.limit&&t.limit>0&&n.set(`limit`,String(t.limit)),t.includeHeaders===!1&&n.set(`header`,`false`),t.sort&&t.sort.length>0){let e=t.sort.filter(e=>e&&e.field).map(e=>`${e.field}:${e.direction===`desc`?`desc`:`asc`}`).join(`,`);e&&n.set(`orderby`,e)}if(t.filter!==void 0&&t.filter!==null){let e=M(t.filter);e!==void 0&&n.set(`filter`,JSON.stringify(e))}let i=typeof t.search==`string`?t.search.trim():``;i&&(n.set(`search`,i),t.searchFields&&t.searchFields.length>0&&n.set(`searchFields`,t.searchFields.join(`,`)));let a=this.baseUrl.replace(/\/$/,``),o=`${a}${/\/api\/v\d+$/i.test(a)?`/data`:`/api/v1/data`}/${encodeURIComponent(e)}/export?${n.toString()}`,s={...this.getAuthHeaders()},c=await this.fetchImpl(o,{method:`GET`,headers:s,credentials:`include`});if(!c.ok){let e=w(await c.json().catch(()=>({message:c.statusText}))),t=Error(e.message??c.statusText);throw t.status=c.status,t.code=e.code,t}return await c.blob()}convertQueryParams(e){if(!e)return{};let t={};if(e.$select&&(t.select=e.$select.includes(`id`)?e.$select:[`id`,...e.$select]),e.$filter!==void 0&&e.$filter!==null&&!(Array.isArray(e.$filter)?e.$filter.length===0:typeof e.$filter==`object`&&Object.keys(e.$filter).length===0)){if(Array.isArray(e.$filter))t.filters=A(e.$filter);else{let n=l(e.$filter);n!==void 0&&(t.filters=n)}}let n=N(e.$orderby);return n&&(t.sort=n),e.$skip!==void 0&&(t.skip=e.$skip),e.$top!==void 0&&(t.top=e.$top),e.$search!=null&&String(e.$search).trim()!==``&&(t.search=String(e.$search).trim()),e.$searchFields&&e.$searchFields.length>0&&(t.searchFields=e.$searchFields),t}async getObjectSchema(e){await this.connect();try{let t=await this.metadataCache.get(e,()=>this.fetchObjectSchemaFresh(e));return ee(t),this.applyFieldWidgetOverrides(e,t),t}catch(t){let n=t;throw F(n)?new y(e,{originalError:t}):t instanceof v?t:me(n,`getObjectSchema(${e})`)}}applyFieldWidgetOverrides(e,t){let n={sys_permission_set:{object_permissions:`permission-facet-link`,field_permissions:`permission-facet-link`,system_permissions:`permission-facet-link`,row_level_security:`permission-facet-link`,tab_permissions:`permission-facet-link`,admin_scope:`permission-facet-link`}}[e],r=t&&typeof t==`object`?t.fields:null;if(n&&r)for(let[e,t]of Object.entries(n))if(Array.isArray(r)){let n=r.find(t=>t?.name===e);n&&!n.widget&&(n.widget=t)}else{let n=r[e];n&&!n.widget&&(n.widget=t)}}async fetchObjectSchemaFresh(e){let t=(this.baseUrl||``).replace(/\/$/,``),n=`${t}${/\/api\/v\d+$/i.test(t)?`/meta`:`/api/v1/meta`}/object/${encodeURIComponent(e)}`,r={"Content-Type":`application/json`};this.token&&(r.Authorization=`Bearer ${this.token}`);let i=await this.fetchImpl(n,{method:`GET`,headers:r,cache:`no-cache`});if(!i.ok){let e=w(await i.json().catch(()=>({message:i.statusText}))),t=Error(e.message??i.statusText);throw t.status=i.status,t.code=e.code,t}let a=await i.json(),o=a&&typeof a==`object`&&`success`in a&&`data`in a?a.data:a,s=o&&typeof o==`object`&&`item`in o?o.item:o;return te(s,o&&typeof o==`object`?o.sortability:void 0)}async getObjects(){try{await this.connect();let e=(this.baseUrl||``).replace(/\/$/,``),t=`${e}${/\/api\/v\d+$/i.test(e)?`/meta`:`/api/v1/meta`}/object`,n={"Content-Type":`application/json`};this.token&&(n.Authorization=`Bearer ${this.token}`);let r=await this.fetchImpl(t,{method:`GET`,headers:n});if(!r.ok)return[];let i=await r.json(),a=i&&typeof i==`object`&&`success`in i&&`data`in i?i.data:i;return(Array.isArray(a)?a:Array.isArray(a?.items)?a.items:[]).map(e=>({name:String(e?.name??``),label:e?.label==null?void 0:String(e.label)})).filter(e=>e.name)}catch{return[]}}getClient(){return this.client}async getDiscovery(){try{return await this.connect(),this.client.discoveryInfo||null}catch{return null}}invalidateViewKeys(e,t){this.metadataCache.invalidate?.(`view:${e}:${t}`),this.metadataCache.invalidate?.(`view-overrides:${e}`)}async listViewOverrides(e){await this.connect();let t=`view-overrides:${e}`;return await this.metadataCache.get(t,async()=>{let t=await this.client.meta.getItems(`view`),n=Array.isArray(t?.items)?t.items:Array.isArray(t)?t:[],r={};for(let t of n){if(!t||typeof t!=`object`||Q(t)!==e)continue;let n=t.name;typeof n==`string`&&n&&(r[n]=t)}return r})}async getView(e,t){await this.connect();try{let n=`view:${e}:${t}`;return await this.metadataCache.get(n,async()=>{let e=await this.client.meta.getItem(`view`,t);return e&&e.item?e.item:e??null})}catch{return null}}setSystemCapabilities(e){this.systemCapabilities=e?[...e]:void 0}maySetViewConfig(){return this.systemCapabilities===void 0||this.systemCapabilities.includes(L)}async updateViewConfig(e,t,n,r){if(!this.maySetViewConfig())throw new Be(e,t);await this.connect();let i={...n||{},object:n?.object||e,name:t,...r?.isSavedView?{}:{[$]:!0}},a=await this.client.meta.saveItem(`view`,t,i);return this.invalidateViewKeys(e,t),a&&a.item?a.item:a??void 0}async listViews(e,t){await this.connect();try{let n;if(t?.previewDrafts){let e=await this.metadataClient().withPreviewDrafts(!0).list(`view`);n=Array.isArray(e)?e:[]}else{let e=await this.client.meta.getItems(`view`);n=Array.isArray(e?.items)?e.items:Array.isArray(e)?e:[]}let r=new Set([`form`,`detail`]);return n.filter(t=>{if(!t)return!1;let n=t.list??t;if(Q(t)!==e)return!1;let i=t.viewKind??n?.viewKind;return!(i&&r.has(i)||it(t,n))}).map(e=>{let t=e.list??e,n=e._draft===!0||t?._draft===!0;return t&&t.config&&typeof t.config==`object`?{...t.config,name:t.name??t.config.name,label:t.label??t.config.label,isDefault:!!t.isDefault,...n?{_draft:!0}:{}}:n?{...t,_draft:!0}:t})}catch(t){console.warn(`[OBJECTSTACKDataSource] listViews failed:`,t);let n=nt(t);return n.kind!==`not-served`&&this.emitMetadataReadWarning({operation:`listViews`,kind:`view`,objectName:e,reason:n.kind,...n.code===void 0?{}:{code:n.code},...n.status===void 0?{}:{status:n.status},...n.message===void 0?{}:{message:n.message}}),[]}}metadataClient(){return new _({baseUrl:this.baseUrl,fetch:this.fetchImpl,...this.token?{headers:{Authorization:`Bearer ${this.token}`}}:{}})}async listImportMappings(e){await this.connect();try{let t=await this.client.meta.getItems(`mapping`);return(Array.isArray(t?.items)?t.items:Array.isArray(t)?t:[]).filter(t=>t&&t.targetObject===e)}catch(t){console.warn(`[OBJECTSTACKDataSource] listImportMappings failed:`,t);let n=tt(t);return n.kind!==`not-served`&&this.emitMetadataReadWarning({operation:`listImportMappings`,kind:`mapping`,objectName:e,reason:n.kind,...n.code===void 0?{}:{code:n.code},...n.status===void 0?{}:{status:n.status},...n.message===void 0?{}:{message:n.message}}),[]}}async createView(e,t){await this.connect();let n=String(t?.name||``).trim();if(!n){let r=String(t?.label||e||`view`).toLowerCase().replace(/[^a-z0-9_]+/g,`_`).replace(/^_+|_+$/g,``).slice(0,40);(!r||/^[0-9]/.test(r))&&(r=r?`view_${r}`:`view`);let i=Date.now().toString(36);n=`${r}_${i}`}let r={...t,name:n,object:t?.object||e,data:t?.data||{provider:`object`,object:e}},i=await this.client.meta.saveItem(`view`,n,r);return this.invalidateViewKeys(e,n),i&&i.item?i.item:r}async updateView(e,t,n){await this.connect();let r=this.metadataClient(),i=ct(await r.get(`view`,t,{state:`draft`}));if(i){let a=ut(i,n,t,e);return await r.save(`view`,t,a,{mode:`draft`}),this.invalidateViewKeys(e,t),a}let a;try{let e=await this.client.meta.getItem(`view`,t);a=e&&(e.item||e)||{},a?.list&&(a=a.list)}catch(n){throw F(n)?Object.assign(Error(`updateView: view "${t}" not found on object "${e}" — no pending draft and no published overlay. Use createView() to create one.`),{cause:n}):n}let o=ut(a,n,t,e),s=await this.client.meta.saveItem(`view`,t,o);return this.invalidateViewKeys(e,t),s&&s.item?s.item:o}async deleteView(e,t){await this.connect();let n=this.metadataClient();try{let r=lt(await n.reset(`view`,t,{state:`draft`})),i;try{i=lt(await n.reset(`view`,t))}catch(n){let i={deleted:!1,draft:r,published:{removed:!1}};throw Object.assign(Error(`deleteView: view "${t}" on object "${e}" is NOT fully removed — the draft home was ${r.removed?`discarded`:`already absent`}, but deleting the published overlay failed. The published row is still serving the view; retry the delete.`),{cause:n,outcome:i})}return{deleted:r.removed||i.removed,draft:r,published:i}}finally{this.invalidateViewKeys(e,t)}}async getApp(e){await this.connect();try{let t=`app:${e}`;return await this.metadataCache.get(t,async()=>{let t=await this.client.meta.getItem(`app`,e);return t&&t.item?t.item:t??null})}catch{return null}}async probeAppAccess(e){if(!e)return`unknown`;try{return ze(await this.client.meta.getItem(`app`,e))?`granted`:`not_found`}catch(e){return Ie(e)?`denied`:Re(e)?`not_found`:`unreachable`}}async getPage(e){await this.connect();try{let t=`page:${e}`;return await this.metadataCache.get(t,async()=>{let t=await this.client.meta.getItem(`page`,e);return t&&t.item?t.item:t??null})}catch{return null}}async updateDashboard(e,t){await this.connect();let n=await this.client.meta.saveItem(`dashboard`,e,t);return this.metadataCache.invalidate?.(`dashboards`),this.metadataCache.invalidate?.(`dashboard:${e}`),n&&n.item?n.item:n??void 0}async aggregate(e,t){if(await this.connect(),t!=null&&(Array.isArray(t.groupBy)||Array.isArray(t.aggregations)||t.where!==void 0)){let n={};Array.isArray(t.groupBy)&&(n.groupBy=t.groupBy),Array.isArray(t.aggregations)&&(n.aggregations=t.aggregations),t.where!==void 0&&(Se(t.where,e),n.where=t.where),De(t,e),typeof t.limit==`number`&&(n.limit=t.limit);let r=await this.client.data.query(e,n);return Array.isArray(r)?r:Array.isArray(r?.records)?r.records:Array.isArray(r?.data)?r.data:[]}let n=t.filter?je(t.filter,e):void 0;try{let r=t.function===`count`?`count`:`${t.field}_${t.function}`,i=this.aggregateValueKey(t),a={cube:e,measures:[r],dimensions:t.groupBy&&t.groupBy!==`_all`?[t.groupBy]:[]};n!==void 0&&(a.where=n);let o=await this.client.analytics.query(a);if(!Array.isArray(o?.rows))throw new V(e,o);let s=o.rows;return s.length>0&&s.every(e=>e==null||!(r in e&&e[r]!=null||i in e&&e[i]!=null))?await this.aggregateViaFind(e,t):s.map(e=>{let t={...e};return r!==i&&r in t&&(t[i]=t[r],delete t[r]),t})}catch(n){if(n instanceof V)throw n;let r=Ge(n);if(r.kind===`rejected`)throw new We(r.message,r.code);if(r.kind===`unauthenticated`)throw new z({serverCode:r.code,serverMessage:r.message});if(r.kind===`cube-not-found`)throw n;return r.kind===`not-installed`&&this.warnAnalyticsCapabilityOnce(r.message),await this.aggregateViaFind(e,t)}}async queryGroupHeaders(e,t){await this.connect();let n=(await this.client.data.query(e,t))?.records;if(!Array.isArray(n))throw Error(`queryGroupHeaders('${e}'): POST /data/${e}/query answered without a \`records\` array, so no group header can be read from it. The header query was sent verbatim; nothing was approximated from a page of rows.`);return n}async aggregateViaFind(e,t){let n=(await this.find(e,t.filter?{$filter:t.filter}:void 0)).data||[];return n.length===0?[]:this.aggregateClientSide(n,t)}warnAnalyticsCapabilityOnce(e){this.analyticsCapabilityWarned||(this.analyticsCapabilityWarned=!0,console.warn(`[OBJECTSTACKDataSource] analytics capability unavailable — aggregating client-side from a scoped find(). Numbers stay correct but the semantic layer (cubes, joins, server-side rollups) is off. Install @objectstack/service-analytics to enable it.`+(e?` Server said: ${e}`:``)))}async queryDataset(e,t){await this.connect();let n=`${(this.baseUrl||``).replace(/\/$/,``)}/api/v1/analytics/dataset/query`,r=typeof window<`u`&&new URLSearchParams(window.location.search).get(`preview`)===`draft`,i=typeof e==`string`?{datasetName:e,selection:t,...r?{previewDrafts:!0}:{}}:{dataset:e,selection:t,...r?{previewDrafts:!0}:{}},a=await this.fetchImpl(n,{method:`POST`,headers:{"Content-Type":`application/json`,...this.token?{Authorization:`Bearer ${this.token}`}:{}},body:JSON.stringify(i)});if(!a.ok){let t;try{t=await a.json()}catch{}let{code:n,message:r}=Ue(t),i=r||(t===void 0?``:JSON.stringify(t)),o=`POST /analytics/dataset/query`,s=typeof e==`string`?e:typeof e?.name==`string`?String(e.name):void 0;if(c({code:n},[`NOT_IMPLEMENTED`,`ROUTE_NOT_FOUND`]))throw new R(o,r,n);if(u({code:n},`NOT_FOUND`))throw new He({datasetName:s,serverCode:n,serverMessage:r});if(u({code:n},`UNAUTHENTICATED`))throw new z({serverCode:n,serverMessage:r});if(n===void 0){if(B.includes(a.status))throw new R(o,i||void 0);if(a.status===401)throw new z({serverMessage:r})}throw Error(`Dataset query failed: ${a.status} ${a.statusText}${i?` — ${i}`:``}`)}let o=await a.json(),s=o&&typeof o==`object`&&`success`in o&&`data`in o?o.data:o;return{rows:Array.isArray(s?.rows)?s.rows:Array.isArray(s)?s:[],fields:Array.isArray(s?.fields)?s.fields:[],object:typeof s?.object==`string`?s.object:void 0,dimensionFields:s?.dimensionFields&&typeof s.dimensionFields==`object`?s.dimensionFields:void 0,drillRawRows:Array.isArray(s?.drillRawRows)?s.drillRawRows:void 0,drillRanges:Array.isArray(s?.drillRanges)?s.drillRanges:void 0,totals:Array.isArray(s?.totals)?s.totals:void 0}}aggregateValueKey(e){return e.field||e.function||`count`}aggregateClientSide(e,t){let{field:n,function:r,groupBy:i}=t,a=this.aggregateValueKey(t),o={};for(let t of e){let e=String(t[i]??`Unknown`);o[e]||(o[e]=[]),o[e].push(t)}return Object.entries(o).map(([e,t])=>{let o=n?t.map(e=>Number(e[n])||0):[],s;switch(r){case`count`:s=t.length;break;case`avg`:s=o.length>0?o.reduce((e,t)=>e+t,0)/o.length:0;break;case`min`:s=o.length>0?Math.min(...o):0;break;case`max`:s=o.length>0?Math.max(...o):0;break;default:s=o.reduce((e,t)=>e+t,0)}return{[i]:e,[a]:s}})}async getItems(e,t){return await this.connect(),await Promise.all(t.map(async t=>{let n=`${e}:${t}`;return this.metadataCache.get(n,async()=>{let n=await this.client.meta.getItem(e,t);return n&&n.item?n.item:n})}))}getCached(e){return this.metadataCache.getCachedSync(e)}getCacheStats(){return this.metadataCache.getStats()}invalidateCache(e){this.metadataCache.invalidate(e)}clearCache(){this.metadataCache.clear()}async uploadFile(e,t,n){await this.connect();let r=new FormData;r.append(`file`,t),n?.recordId&&r.append(`recordId`,n.recordId),n?.fieldName&&r.append(`fieldName`,n.fieldName),n?.metadata&&r.append(`metadata`,JSON.stringify(n.metadata));let i=`${this.baseUrl}/api/data/${encodeURIComponent(e)}/upload`,a=await fetch(i,{method:`POST`,body:r,headers:{...this.getAuthHeaders()}});if(!a.ok)throw new v(w(await a.json().catch(()=>({message:a.statusText}))).message??`Upload failed with status ${a.status}`,`UPLOAD_ERROR`,a.status);return a.json()}async uploadFiles(e,t,n){await this.connect();let r=new FormData;t.forEach((e,t)=>{r.append(`files`,e,e.name||`file-${t}`)}),n?.recordId&&r.append(`recordId`,n.recordId),n?.fieldName&&r.append(`fieldName`,n.fieldName),n?.metadata&&r.append(`metadata`,JSON.stringify(n.metadata));let i=`${this.baseUrl}/api/data/${encodeURIComponent(e)}/upload`,a=await fetch(i,{method:`POST`,body:r,headers:{...this.getAuthHeaders()}});if(!a.ok)throw new v(w(await a.json().catch(()=>({message:a.statusText}))).message??`Upload failed with status ${a.status}`,`UPLOAD_ERROR`,a.status);return a.json()}async cancelPendingApproval(e,t){await this.connect();let n=`${this.baseUrl}/api/v1/approvals/requests?recordId=${encodeURIComponent(t)}&object=${encodeURIComponent(e)}`,r=await this.fetchImpl(n,{method:`GET`,headers:{"Content-Type":`application/json`,...this.getAuthHeaders()}});if(!r.ok)throw new v(`Failed to look up approval requests (status ${r.status})`,`APPROVAL_LOOKUP_FAILED`,r.status);let i=await r.json().catch(()=>({})),a=(Array.isArray(i)?i:i?.data??[]).find(e=>e?.status===`pending`||e?.status===`in_approval`);if(!a?.id)throw new v(`No pending approval request found for this record`,`NO_PENDING_REQUEST`,404);let o=`${this.baseUrl}/api/v1/approvals/requests/${encodeURIComponent(a.id)}/recall`,s=await this.fetchImpl(o,{method:`POST`,headers:{"Content-Type":`application/json`,...this.getAuthHeaders()},body:JSON.stringify({})});if(!s.ok){let e=await s.json().catch(()=>({}));throw new v(e?.error||e?.message||`Recall failed with status ${s.status}`,e?.code||`APPROVAL_RECALL_FAILED`,s.status)}let c=await s.json().catch(()=>({}));return{requestId:a.id,status:c?.data?.request?.status??`recalled`}}getAuthHeaders(){let e={};return this.token&&(e.Authorization=`Bearer ${this.token}`),e}};export{ve as a,f as c,st as i,I as n,_e as o,Ve as r,_ as s,dt as t};