@objectstack/console 17.3.0 → 17.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (188) hide show
  1. package/CHANGELOG.md +87 -0
  2. package/dist/.objectui-sha +1 -1
  3. package/dist/assets/{ActionResultDialog-CQwenjVA.js → ActionResultDialog-Bsr2GS71.js} +1 -1
  4. package/dist/assets/{AiPendingActionsPage-7gZ8zlOy.js → AiPendingActionsPage-DB-UVcdM.js} +1 -1
  5. package/dist/assets/{ApiConsolePage-DUF0ysH7.js → ApiConsolePage-Bzqo2owc.js} +1 -1
  6. package/dist/assets/{AppDocsIndex-CP_AVG4X.js → AppDocsIndex-KhVqdZ-P.js} +1 -1
  7. package/dist/assets/{AppManagementPage-BJktnoa5.js → AppManagementPage-CsZ0LMQn.js} +1 -1
  8. package/dist/assets/{ApprovalsInboxPage-DlnxY-uy.js → ApprovalsInboxPage-D_LOnhJ7.js} +1 -1
  9. package/dist/assets/{AuditLogPage-DIJPRjji.js → AuditLogPage-B9eqwuzl.js} +1 -1
  10. package/dist/assets/{ComponentNavView-C84QByT7.js → ComponentNavView-DeokLfkW.js} +1 -1
  11. package/dist/assets/{CreateViewDialog-Zbd9Cagm.js → CreateViewDialog-BMdQ4ZYy.js} +1 -1
  12. package/dist/assets/{DashboardView-UyKHklBx.js → DashboardView-DHZboRi8.js} +1 -1
  13. package/dist/assets/{DeveloperHubPage-BRyNdrCJ.js → DeveloperHubPage-C_VYirN0.js} +1 -1
  14. package/dist/assets/{DocPage-Bx8ZXCYt.js → DocPage-_9x-3Dbi.js} +1 -1
  15. package/dist/assets/{DocShell-Ipy_IDvh.js → DocShell-D4dSPfBz.js} +1 -1
  16. package/dist/assets/{DocsIndex-CmY-7OQR.js → DocsIndex-CJVRa_hE.js} +1 -1
  17. package/dist/assets/{DocsLayout-BNsSvaz2.js → DocsLayout-C-tYgUZv.js} +1 -1
  18. package/dist/assets/{DocsSlug-Cb_NMM1k.js → DocsSlug-DmyGpfEy.js} +1 -1
  19. package/dist/assets/{ExpressionProvider-DqGWVuxV.js → ExpressionProvider-B6z09kM6.js} +1 -1
  20. package/dist/assets/{FlowRunsPage-B6ustUgi.js → FlowRunsPage-OjGJi-JU.js} +1 -1
  21. package/dist/assets/{IntegrationsPage-chOxmiyU.js → IntegrationsPage-CrDMDe62.js} +1 -1
  22. package/dist/assets/{InterfaceListPage-DVETnQm5.js → InterfaceListPage-P3y6hqTX.js} +1 -1
  23. package/dist/assets/{MarketplaceInstalledPage-DA5pjhAz.js → MarketplaceInstalledPage-CQek7WnV.js} +1 -1
  24. package/dist/assets/{MarketplacePackagePage-dCIVHBFi.js → MarketplacePackagePage-DL2ivKSc.js} +1 -1
  25. package/dist/assets/{MarketplacePage-wJb6g1p7.js → MarketplacePage-B-6EokyB.js} +1 -1
  26. package/dist/assets/{MetadataInspector-Cu-n1FYz.js → MetadataInspector-IQGUoLyp.js} +1 -1
  27. package/dist/assets/{ObjectDataPage-CP-YSZYQ.js → ObjectDataPage-Bmc3RQhM.js} +1 -1
  28. package/dist/assets/{PageView-B1_ibRuM.js → PageView-DzUZqB_h.js} +1 -1
  29. package/dist/assets/{ProfilePage-DEr5iZVB.js → ProfilePage-NklCqPxc.js} +1 -1
  30. package/dist/assets/{PublicFormsPage-CBcKQbNl.js → PublicFormsPage-CItIvcLQ.js} +1 -1
  31. package/dist/assets/RecordDetailView-XWxuegfV.js +3 -0
  32. package/dist/assets/{RecordFormPage-CGQlYWDk.js → RecordFormPage-B-yrhs7J.js} +1 -1
  33. package/dist/assets/{ReportDefaultInspector-R_p6YStL.js → ReportDefaultInspector-D5Kro5_t.js} +1 -1
  34. package/dist/assets/{ReportView-BTMrtcGH.js → ReportView-COpZ8PQT.js} +1 -1
  35. package/dist/assets/{RuntimeDraftBar-agGU39FL.js → RuntimeDraftBar-CSVtuByp.js} +1 -1
  36. package/dist/assets/{SchemaForm-DJbupOno.js → SchemaForm-DIsxxOZF.js} +1 -1
  37. package/dist/assets/{SearchResultsPage-CHhZUc6L.js → SearchResultsPage-B2r6kgni.js} +1 -1
  38. package/dist/assets/{SettingsHub-BGLR_gS7.js → SettingsHub-DQz2HDtZ.js} +1 -1
  39. package/dist/assets/{SettingsView-Bq-7Zkzs.js → SettingsView-BfOEalDW.js} +1 -1
  40. package/dist/assets/{SkeletonDetail-B4-UKxai.js → SkeletonDetail-DMOa5zcl.js} +1 -1
  41. package/dist/assets/{SystemHubPage-CVZVag1e.js → SystemHubPage-DM2VRSIP.js} +1 -1
  42. package/dist/assets/{abnfDiagram-VCTEODGH-DUS5D5dU.js → abnfDiagram-VCTEODGH-DaPlU6Hz.js} +1 -1
  43. package/dist/assets/{app-shell-eager-leaves-BB0oaPx6.js → app-shell-eager-leaves-wjbiJgVZ.js} +1 -1
  44. package/dist/assets/architectureDiagram-5GKGNRK7-Cq014PwG.js +36 -0
  45. package/dist/assets/{blockDiagram-OSKFZWR5-Bz2hnVmp.js → blockDiagram-OSKFZWR5-vtlcoeZc.js} +1 -1
  46. package/dist/assets/{c4Diagram-7LVT6UL2-DU3u1Y6c.js → c4Diagram-7LVT6UL2-BrdwRG2M.js} +1 -1
  47. package/dist/assets/channel-D2IgUFnY.js +1 -0
  48. package/dist/assets/{chunk-3NF5O7KM-B8Q7HUio.js → chunk-3NF5O7KM-CjWAf_Jo.js} +1 -1
  49. package/dist/assets/{chunk-4HAMMTFA-BPKwX4iB.js → chunk-4HAMMTFA-BtV_msXT.js} +1 -1
  50. package/dist/assets/chunk-75Z2AOVW-DdRL9yNr.js +2 -0
  51. package/dist/assets/chunk-CLGD4ZFX-De9kMAXh.js +1 -0
  52. package/dist/assets/{chunk-DU6HZSFF-BkY4hAzc.js → chunk-DU6HZSFF-DqjylQO-.js} +1 -1
  53. package/dist/assets/chunk-F27PBJKO-tEB_K-iD.js +1 -0
  54. package/dist/assets/{chunk-GMAD6QVW-DZo_NykZ.js → chunk-GMAD6QVW-BMzd_HHM.js} +1 -1
  55. package/dist/assets/{chunk-GVQU2GXP-9ELY9S6X.js → chunk-GVQU2GXP-B1p1nHC0.js} +1 -1
  56. package/dist/assets/{chunk-H2I77ZZE-vCr_buP7.js → chunk-H2I77ZZE-ioXC4dHO.js} +1 -1
  57. package/dist/assets/{chunk-HLEWEB6X-iPkY2ESt.js → chunk-HLEWEB6X-zZ3ZMup3.js} +1 -1
  58. package/dist/assets/chunk-L3NEJ4N5-DePXufTQ.js +1 -0
  59. package/dist/assets/{chunk-LQGUR6SS-iVI0GACK.js → chunk-LQGUR6SS-BUWUp_dz.js} +1 -1
  60. package/dist/assets/{chunk-OSK3NFVY-DcRwXCQD.js → chunk-OSK3NFVY-L7nTUJKT.js} +2 -2
  61. package/dist/assets/{chunk-P2QGCYS3-nx2-dM5t.js → chunk-P2QGCYS3-BG-i3rdI.js} +1 -1
  62. package/dist/assets/{chunk-POPQ4Y6H-BxLOacOG.js → chunk-POPQ4Y6H-DLEB8EqK.js} +1 -1
  63. package/dist/assets/{chunk-PWAF6VOD-2mst9kZu.js → chunk-PWAF6VOD-Be_prJjm.js} +1 -1
  64. package/dist/assets/{chunk-SVP7TREG-C3BMpr4x.js → chunk-SVP7TREG-BdJpxJji.js} +1 -1
  65. package/dist/assets/chunk-XXDRQBXY-CEXsCcSu.js +1 -0
  66. package/dist/assets/{chunk-ZLD2IHE6-ZFqtFJbj.js → chunk-ZLD2IHE6-BLIPZykR.js} +1 -1
  67. package/dist/assets/classDiagram-CYGNFDIV-BielDdJQ.js +1 -0
  68. package/dist/assets/classDiagram-v2-TLXNO2FR-BielDdJQ.js +1 -0
  69. package/dist/assets/cose-bilkent-JH36ORCC-CnLWv9XE.js +1 -0
  70. package/dist/assets/{createDerive-Best2JCj.js → createDerive-DtfnFzGm.js} +1 -1
  71. package/dist/assets/{cynefinDiagram-5FMLGOSQ-Lnly8IJd.js → cynefinDiagram-5FMLGOSQ-Do1SZz4I.js} +1 -1
  72. package/dist/assets/{dagre-OS7QT2EB-CdXLxmTK.js → dagre-OS7QT2EB-CqmZ9Y9O.js} +1 -1
  73. package/dist/assets/data-adapter-1YRpH3h_.js +5 -0
  74. package/dist/assets/{default-inspector-registry-DeEG98bO.js → default-inspector-registry-CmSpNwTr.js} +1 -1
  75. package/dist/assets/{diagram-S7CK7UJ4-DE8I3gxQ.js → diagram-S7CK7UJ4-CMpcDWop.js} +1 -1
  76. package/dist/assets/{diagram-UQ7AKVKN-D2xQpbEq.js → diagram-UQ7AKVKN-DLK_4yej.js} +1 -1
  77. package/dist/assets/{diagram-VSXAHHWV-DnttDSlO.js → diagram-VSXAHHWV-MAILxw0S.js} +1 -1
  78. package/dist/assets/diagram-VX7I27RA-DGiXGVX7.js +24 -0
  79. package/dist/assets/{diagram-Z3DM3KII-BgB9f0Nv.js → diagram-Z3DM3KII-BywboeGI.js} +1 -1
  80. package/dist/assets/dist-B88JFSFg.js +5 -0
  81. package/dist/assets/{ebnfDiagram-PWID7BFC-32WvKbS2.js → ebnfDiagram-PWID7BFC-DdMLbnuP.js} +1 -1
  82. package/dist/assets/{erDiagram-2YWLMYGG-Dwf8uAdl.js → erDiagram-2YWLMYGG-O6raGx2P.js} +1 -1
  83. package/dist/assets/flowDiagram-T62WH6J4-CkAxOnqU.js +1 -0
  84. package/dist/assets/framework-DFE_Mws9.js +36 -0
  85. package/dist/assets/{ganttDiagram-EL5Y4UJY-DqYIE0Cu.js → ganttDiagram-EL5Y4UJY-Dijdjc50.js} +2 -2
  86. package/dist/assets/{getIcon-CgyYxSEC.js → getIcon-B4Pp7Q-0.js} +1 -1
  87. package/dist/assets/gitGraphDiagram-WWUBYQGX-Cfl4OIGG.js +106 -0
  88. package/dist/assets/{highlighted-body-OFNGDK62-BxO9mjPI.js → highlighted-body-OFNGDK62-BlqGRgbU.js} +1 -1
  89. package/dist/assets/{i18n-Cfqor-xb.js → i18n-DGcOKnTh.js} +1 -1
  90. package/dist/assets/{i18n-locales-Bz4c8KXc.js → i18n-locales-BBA090ve.js} +10 -10
  91. package/dist/assets/index-C5Fu9Kda.css +2 -0
  92. package/dist/assets/index-ClPLLRzK.js +20 -0
  93. package/dist/assets/{infoDiagram-FKFFQAWI-Cr1-5_Am.js → infoDiagram-FKFFQAWI-oOVNWlVA.js} +1 -1
  94. package/dist/assets/{infrastructure-CIpDEFyQ.js → infrastructure-B4zG1jNa.js} +2 -2
  95. package/dist/assets/{ishikawaDiagram-5VMMS53U-Bsjx7BsE.js → ishikawaDiagram-5VMMS53U-BUfTfup1.js} +1 -1
  96. package/dist/assets/{journeyDiagram-EYS64GPL-1scn5Z5c.js → journeyDiagram-EYS64GPL-4fyU8Ui9.js} +2 -2
  97. package/dist/assets/{kanban-definition-UXKFOSKX-DjLQAv5U.js → kanban-definition-UXKFOSKX-qwquHo2y.js} +1 -1
  98. package/dist/assets/mermaid-GHXKKRXX-_UhQGe8N.js +1 -0
  99. package/dist/assets/{mermaid.core-pW40dd4u.js → mermaid.core-RfBGJVq5.js} +2 -2
  100. package/dist/assets/{metadata-admin-pawEBYI9.js → metadata-admin-Bo-vWW2Z.js} +3 -3
  101. package/dist/assets/{mindmap-definition-THT77NOG-CUcYMB9H.js → mindmap-definition-THT77NOG-cOVHgGB_.js} +1 -1
  102. package/dist/assets/{pegDiagram-XKGWAZYB-CT1r3sRa.js → pegDiagram-XKGWAZYB-DQikOuPL.js} +1 -1
  103. package/dist/assets/{pieDiagram-E7YTZNPT-CSi-V1LQ.js → pieDiagram-E7YTZNPT-Cu9wPXiv.js} +2 -2
  104. package/dist/assets/plugin-calendar-DqlnPeWE.js +1 -0
  105. package/dist/assets/plugin-charts-hJ5C1pY-.js +7 -0
  106. package/dist/assets/{plugin-chatbot-BGnkLzFS.js → plugin-chatbot-BeSLDg4N.js} +5 -5
  107. package/dist/assets/plugin-dashboard-d1o52lHr.js +6 -0
  108. package/dist/assets/{plugin-form-_fjHxKTV.js → plugin-form-D8x_rH5w.js} +1 -1
  109. package/dist/assets/plugin-gantt-B2GTMGPH.js +63 -0
  110. package/dist/assets/plugin-grid-DGXy_yQF.js +9 -0
  111. package/dist/assets/{plugin-kanban-DA0eW6yj.js → plugin-kanban-CVf6Nj3e.js} +1 -1
  112. package/dist/assets/plugin-map-hkbw1bGS.js +1 -0
  113. package/dist/assets/{plugin-markdown-B7zwZHmn.js → plugin-markdown-Bdb2UThR.js} +4 -4
  114. package/dist/assets/plugin-report-CelulaB7.js +59 -0
  115. package/dist/assets/{plugin-timeline-B6rsNNAK.js → plugin-timeline-DTcJ-hts.js} +1 -1
  116. package/dist/assets/plugin-tree-Bk5vG9la.js +1 -0
  117. package/dist/assets/{plugin-view-5qxxRyZZ.js → plugin-view-CKs41t7o.js} +1 -1
  118. package/dist/assets/plugins-views-DZmsFOak.js +4 -0
  119. package/dist/assets/{quadrantDiagram-AXDQQJYC-DUJ_94hm.js → quadrantDiagram-AXDQQJYC-DqTU6p89.js} +3 -3
  120. package/dist/assets/{railroadDiagram-O6MQD6OU-CEyfAhzM.js → railroadDiagram-O6MQD6OU-CHGgIBKb.js} +1 -1
  121. package/dist/assets/{requirementDiagram-IS5BZ75X-CAK7hvBg.js → requirementDiagram-IS5BZ75X-B20mHS5h.js} +1 -1
  122. package/dist/assets/{runtime-metadata-persistence-DYPxFzHI.js → runtime-metadata-persistence-DzS2YaNb.js} +1 -1
  123. package/dist/assets/{sankeyDiagram-P5KCCOFB-DgYJh7uz.js → sankeyDiagram-P5KCCOFB-oqGY91Cw.js} +3 -3
  124. package/dist/assets/{sequenceDiagram-WJ2MYXX4-DsQerPtC.js → sequenceDiagram-WJ2MYXX4-CVMm7Aid.js} +1 -1
  125. package/dist/assets/{src-CVJP2nIc.js → src-D7tZqf12.js} +1 -1
  126. package/dist/assets/{src-_DxAIBqo.js → src-DCXZnd2l.js} +1 -1
  127. package/dist/assets/{src-S6pzKItc.js → src-DEMdKbQy.js} +1 -1
  128. package/dist/assets/src-hcMLuWxG.js +17 -0
  129. package/dist/assets/stateDiagram-XQSTLZYL-3oM7IdVe.js +1 -0
  130. package/dist/assets/stateDiagram-v2-IH3M54BS-BznjPAgb.js +1 -0
  131. package/dist/assets/studioEntry-BUFsLXCL.js +1 -0
  132. package/dist/assets/{submitRedirect-UXd9NsjL.js → submitRedirect-7ExeC4kw.js} +1 -1
  133. package/dist/assets/{swimlanes-V6O3JKXN-BiKyiEJr.js → swimlanes-V6O3JKXN-Djgbrkmh.js} +1 -1
  134. package/dist/assets/swimlanesDiagram-JKAHXJPX-DHJJ3qZq.js +8 -0
  135. package/dist/assets/{timeline-definition-24CTP7MA-CW5rY3PX.js → timeline-definition-24CTP7MA-k2lbfDvL.js} +2 -2
  136. package/dist/assets/ui-components-CMHDBJEm.js +37 -0
  137. package/dist/assets/{ui-layout-UUTFXV6S.js → ui-layout-Jk_qY9Ni.js} +1 -1
  138. package/dist/assets/{use-book-data-qUZAxIs0.js → use-book-data-CM73PGvc.js} +1 -1
  139. package/dist/assets/{useActionModal-CkM-zGdy.js → useActionModal-D_iilsul.js} +1 -1
  140. package/dist/assets/{usePackageL10n-F9isJ9pn.js → usePackageL10n-BfPqgsRL.js} +1 -1
  141. package/dist/assets/{useSettingsLabel-CSZBfUiw.js → useSettingsLabel-CW2sBbmj.js} +1 -1
  142. package/dist/assets/vendor-charts-BBlPrtHS.js +67 -0
  143. package/dist/assets/{vendor-i18n-C1AQDWux.js → vendor-i18n-CzBLXLJU.js} +1 -1
  144. package/dist/assets/vendor-objectstack-BU0HrnMy.js +270 -0
  145. package/dist/assets/{vendor-zod-r9lyeyrU.js → vendor-zod-Bwe8XZZa.js} +3 -3
  146. package/dist/assets/{vennDiagram-4TSXK5OY-C79cMc25.js → vennDiagram-4TSXK5OY-zweM554s.js} +1 -1
  147. package/dist/assets/{wardleyDiagram-VM6X3IG4-BAO0_jUk.js → wardleyDiagram-VM6X3IG4-Dg9r6Ajz.js} +1 -1
  148. package/dist/assets/{xychartDiagram-S5SC5T6Z-BIRd7YRo.js → xychartDiagram-S5SC5T6Z-CraplxeN.js} +2 -2
  149. package/dist/eager-closure.json +87 -87
  150. package/dist/index.html +4 -4
  151. package/package.json +1 -1
  152. package/dist/assets/RecordDetailView-A8bbPnkK.js +0 -3
  153. package/dist/assets/architectureDiagram-5GKGNRK7-mGW8P1lC.js +0 -36
  154. package/dist/assets/channel-FD4s9EIH.js +0 -1
  155. package/dist/assets/chunk-75Z2AOVW-CkSdnmiC.js +0 -2
  156. package/dist/assets/chunk-CLGD4ZFX-BTkDISwp.js +0 -1
  157. package/dist/assets/chunk-F27PBJKO-DUKg0YWV.js +0 -1
  158. package/dist/assets/chunk-L3NEJ4N5-Bzz35TZJ.js +0 -1
  159. package/dist/assets/chunk-XXDRQBXY-iNC8aYmk.js +0 -1
  160. package/dist/assets/classDiagram-CYGNFDIV-D5Pd2TCl.js +0 -1
  161. package/dist/assets/classDiagram-v2-TLXNO2FR-D5Pd2TCl.js +0 -1
  162. package/dist/assets/cose-bilkent-JH36ORCC-CPQv9aQH.js +0 -1
  163. package/dist/assets/data-adapter-DL25qpAe.js +0 -5
  164. package/dist/assets/diagram-VX7I27RA-BSEwkn7K.js +0 -24
  165. package/dist/assets/dist-BpPy7hlB.js +0 -5
  166. package/dist/assets/flowDiagram-T62WH6J4-CqVSNJ8T.js +0 -1
  167. package/dist/assets/framework-BfSv4Kb0.js +0 -36
  168. package/dist/assets/gitGraphDiagram-WWUBYQGX-D1dYmoGu.js +0 -106
  169. package/dist/assets/index-BU-FzlQ6.js +0 -20
  170. package/dist/assets/index-_VyGO4ms.css +0 -2
  171. package/dist/assets/mermaid-GHXKKRXX-NzEcDxBh.js +0 -1
  172. package/dist/assets/plugin-calendar-BwiiCIjv.js +0 -1
  173. package/dist/assets/plugin-charts-CDGkx7z5.js +0 -7
  174. package/dist/assets/plugin-dashboard-Bj4ldCX6.js +0 -6
  175. package/dist/assets/plugin-gantt-zR8DkpEg.js +0 -63
  176. package/dist/assets/plugin-grid-kkbz4uec.js +0 -9
  177. package/dist/assets/plugin-map-DukneTNg.js +0 -1
  178. package/dist/assets/plugin-report-DaPtlsJr.js +0 -59
  179. package/dist/assets/plugin-tree-DauauLFc.js +0 -1
  180. package/dist/assets/plugins-views-iYcMmImr.js +0 -4
  181. package/dist/assets/src-JX1BkhmR.js +0 -17
  182. package/dist/assets/stateDiagram-XQSTLZYL-BJndPKik.js +0 -1
  183. package/dist/assets/stateDiagram-v2-IH3M54BS-Bi94bTLl.js +0 -1
  184. package/dist/assets/studioEntry-C6G8U-LG.js +0 -1
  185. package/dist/assets/swimlanesDiagram-JKAHXJPX-DKIR852g.js +0 -8
  186. package/dist/assets/ui-components-D2lrjG-t.js +0 -43
  187. package/dist/assets/vendor-charts-CY9WhhzX.js +0 -67
  188. package/dist/assets/vendor-objectstack-BeKUVjuj.js +0 -270
@@ -1 +1 @@
1
- import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{b as t,h as n,p as r,r as i}from"./vendor-react-CsWFRkED.js";import{l as a}from"./framework-BfSv4Kb0.js";import{y as o}from"./i18n-locales-Bz4c8KXc.js";import{An as s,Bn as c,Br as l,Cn as u,Dn as d,Dr as f,En as p,In as m,Io as h,On as g,Or as _,Pr as v,Qc as y,Rr as b,Rt as x,Tn as S,Xr as C,Xt as w,Yt as T,_o as E,ea as D,fa as O,gn as k,jn as A,kr as j,pc as M,vo as N,wn as P,zr as F}from"./ui-components-D2lrjG-t.js";import{r as I}from"./vendor-ui-utils-BFw4cGI6.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-CSZBfUiw.js";var W=e(t(),1),G=i();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)(E,{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)(c,{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)(m,{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:_,labels:v,error:y}=e,E=(0,W.useId)(),D=!!(o||_),O=z(t.label),k=t.key&&v?v.fieldLabel(t.key,O):O,j=t.key&&v?v.fieldHelp(t.key,t.description):t.description;if(t.type===`group`){let e=t.id&&v?v.groupTitle(t.id,O):O,n=t.id&&v?v.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)(u,{className:`mt-3`})]})}if(t.type===`info_banner`){let e=t.bannerSeverity===`error`?`destructive`:`default`;return(0,G.jsxs)(b,{variant:e,className:`my-2`,children:[(0,G.jsx)(h,{className:`h-4 w-4`}),(0,G.jsx)(l,{children:O}),t.bannerText?(0,G.jsx)(F,{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:O}),t.description?(0,G.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:t.description}):null]}),(0,G.jsx)(M,{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:k,labels:v}),(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=v?v.actionLabel(n,O):O;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)(C,{size:`sm`,variant:`secondary`,onClick:a,disabled:_,children:[e?(0,G.jsx)(e,{className:`h-4 w-4 mr-1.5`}):null,r]})]})}let N=`${E}-error`,I=e=>(0,G.jsxs)(`div`,{className:`space-y-1.5 py-2`,children:[(0,G.jsx)(J,{spec:t,resolved:n,labelText:k,labels:v}),y&&(0,W.isValidElement)(e)?(0,W.cloneElement)(e,{"aria-invalid":!0,"aria-describedby":N}):e,y?(0,G.jsx)(X,{id:N,message:y}):(0,G.jsx)(Y,{description:j})]}),L=e=>{let n=typeof e.label==`string`?e.label:e.label?.defaultValue??String(e.value);return!t.key||!v?n:v.optionLabel(t.key,String(e.value),n)};switch(t.type){case`text`:case`email`:case`url`:case`phone`:return I((0,G.jsx)(m,{id:E,type:t.type===`email`?`email`:t.type===`url`?`url`:`text`,value:r??``,minLength:t.minLength,maxLength:t.maxLength,pattern:t.pattern,disabled:D,onChange:e=>i(e.target.value)}));case`password`:return I((0,G.jsx)(m,{id:E,type:`password`,autoComplete:`new-password`,placeholder:r?`••••••••`:``,disabled:D,onChange:e=>i(e.target.value)}));case`textarea`:return I((0,G.jsx)(x,{id:E,rows:t.rows??4,value:r??``,minLength:t.minLength,maxLength:t.maxLength,disabled:D,onChange:e=>i(e.target.value)}));case`number`:return I((0,G.jsx)(m,{id:E,type:`number`,value:r,min:t.min,max:t.max,step:t.step,disabled:D,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:k,labels:v}),(0,G.jsx)(Y,{description:j})]}),(0,G.jsx)(T,{id:E,checked:!!r,disabled:D,onCheckedChange:e=>i(e)})]});case`select`:return t.valueDomain?I((0,G.jsx)(Z,{id:E,value:r,disabled:D,onChange:i,options:(t.options??[]).map(e=>({value:String(e.value),label:L(e)}))})):I((0,G.jsxs)(P,{value:r==null?void 0:String(r),onValueChange:e=>i(e),disabled:D,children:[(0,G.jsx)(d,{id:E,children:(0,G.jsx)(g,{placeholder:`Select…`})}),(0,G.jsx)(S,{children:t.options?.map(e=>(0,G.jsx)(p,{value:String(e.value),children:L(e)},String(e.value)))})]}));case`radio`:return I((0,G.jsx)(s,{value:r==null?void 0:String(r),onValueChange:e=>i(e),disabled:D,children:t.options?.map(e=>(0,G.jsxs)(`div`,{className:`flex items-center space-x-2`,children:[(0,G.jsx)(A,{value:String(e.value),id:`${E}-${e.value}`}),(0,G.jsx)(c,{htmlFor:`${E}-${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)(f,{checked:r,disabled:D,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)(w,{value:[Number(r??t.min??0)],min:t.min??0,max:t.max??100,step:t.step??1,disabled:D,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)(m,{id:E,type:`color`,value:r??`#000000`,disabled:D,onChange:e=>i(e.target.value),className:`w-16 h-9 p-1`}),(0,G.jsx)(m,{value:r??``,disabled:D,onChange:e=>i(e.target.value),className:`flex-1 font-mono text-sm`})]}));case`json`:return I((0,G.jsx)(x,{id:E,rows:t.rows??6,className:`font-mono text-xs`,value:typeof r==`string`?r:JSON.stringify(r??null,null,2),disabled:D,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(),t=r(),{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,b]=(0,W.useState)({}),[x,S]=(0,W.useState)({}),[w,T]=(0,W.useState)(null),E=(0,W.useCallback)(async()=>{d(!0),h(null);try{let e=await V(s);l(e),b({}),S({}),T(null)}catch(e){h(e?.message??i(`console.settingsView.loadError`))}finally{d(!1)}},[s,i]);(0,W.useEffect)(()=>{s&&E()},[s,E]);let A=(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]),M=(0,W.useMemo)(()=>Object.keys(g),[g]),P=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)(k,{className:`h-8 w-1/3`}),(0,G.jsx)(k,{className:`h-4 w-2/3`}),(0,G.jsx)(k,{className:`h-32 w-full`}),(0,G.jsx)(k,{className:`h-32 w-full`})]});if(m)return(0,G.jsxs)(`div`,{className:`p-6 max-w-3xl`,children:[(0,G.jsxs)(C,{variant:`ghost`,size:`sm`,onClick:()=>t(-1),children:[(0,G.jsx)(y,{className:`h-4 w-4 mr-1`}),` `,i(`console.settingsView.back`)]}),(0,G.jsx)(_,{className:`mt-3`,children:(0,G.jsx)(j,{className:`py-8 text-center text-sm text-destructive`,children:m})})]});if(!c)return null;let{manifest:F,values:K}=c,q=F.icon?R(F.icon):null,J=P.title(z(F.label)),Y=P.description(F.description),X=async()=>{if(M.length!==0){p(!0),T(null);try{let e=await H(s,g);l({...c,values:{...K,...e.values}}),b({}),S({}),I.success(i(`console.settingsView.saved`))}catch(e){let t=e?.payload?.error;if(t?.code===`SETTINGS_LOCKED`){let e=L(t);I.error(e?i(`console.settingsView.lockedByEnv`,{key:e}):i(`console.settingsView.lockedByEnvNoKey`))}else if(t?.code===`SETTINGS_CRYPTO_UNAVAILABLE`){let e=te(t);T(e),I.error(e.subject?i(`console.settingsView.cryptoRefusalToast`,{subject:e.subject}):i(`console.settingsView.cryptoRefusalToastNoSubject`))}else{let n=a(t);n?.length&&S(Object.fromEntries(n.map(e=>[e.field,e.message]))),I.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?I.success(t.message??i(`console.settingsView.actionSucceeded`)):I.error(t.message??i(`console.settingsView.actionFailed`))}catch(e){I.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)(C,{variant:`ghost`,size:`sm`,onClick:()=>t(`/system/settings`),children:[(0,G.jsx)(y,{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}),F.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]})]}),F.helpText?(0,G.jsx)(`p`,{className:`text-sm text-muted-foreground mt-4 whitespace-pre-wrap`,children:F.helpText}):null,w?(0,G.jsx)(_,{className:`mt-4 border-destructive/50 bg-destructive/5`,children:(0,G.jsx)(j,{className:`py-4`,children:(0,G.jsxs)(`div`,{role:`alert`,className:`flex items-start gap-3`,children:[(0,G.jsx)(D,{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:w.subject?(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(`code`,{className:`font-mono text-xs`,children:w.subject}),` `,i(`console.settingsView.cryptoRefusalSubjectSuffix`)]}):i(`console.settingsView.cryptoRefusalNoSubject`)}),w.prescription?(0,G.jsx)(`p`,{className:`mt-2 text-muted-foreground whitespace-pre-wrap`,children:w.prescription}):null]})]})})}):null,(0,G.jsx)(`div`,{className:`mt-6 divide-y`,children:F.specifiers.filter(e=>$(e.visible,A)).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&&(b(t=>({...t,[n]:e})),S(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:P,error:n?x[n]:void 0},(n??`_layout_${t}`)+t)})}),M.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:M.length})}),(0,G.jsxs)(`div`,{className:`flex gap-2`,children:[(0,G.jsxs)(C,{variant:`ghost`,size:`sm`,onClick:()=>{b({}),S({}),T(null)},disabled:f,children:[(0,G.jsx)(O,{className:`h-4 w-4 mr-1`}),` `,i(`console.settingsView.discard`)]}),(0,G.jsxs)(C,{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
+ import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{b as t,h as n,p as r,r as i}from"./vendor-react-CsWFRkED.js";import{l as a}from"./framework-DFE_Mws9.js";import{y as o}from"./i18n-locales-BBA090ve.js";import{An as s,Bn as c,Br as l,Cn as u,Dn as d,Dr as f,En as p,In as m,Io as h,On as g,Or as _,Pr as v,Qc as y,Rr as b,Rt as x,Tn as S,Xr as C,Xt as w,Yt as T,_o as E,ea as D,fa as O,gn as k,jn as A,kr as j,pc as M,vo as N,wn as P,zr as F}from"./ui-components-CMHDBJEm.js";import{r as I}from"./vendor-ui-utils-BFw4cGI6.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-CW2sBbmj.js";var W=e(t(),1),G=i();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)(E,{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)(c,{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)(m,{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:_,labels:v,error:y}=e,E=(0,W.useId)(),D=!!(o||_),O=z(t.label),k=t.key&&v?v.fieldLabel(t.key,O):O,j=t.key&&v?v.fieldHelp(t.key,t.description):t.description;if(t.type===`group`){let e=t.id&&v?v.groupTitle(t.id,O):O,n=t.id&&v?v.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)(u,{className:`mt-3`})]})}if(t.type===`info_banner`){let e=t.bannerSeverity===`error`?`destructive`:`default`;return(0,G.jsxs)(b,{variant:e,className:`my-2`,children:[(0,G.jsx)(h,{className:`h-4 w-4`}),(0,G.jsx)(l,{children:O}),t.bannerText?(0,G.jsx)(F,{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:O}),t.description?(0,G.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:t.description}):null]}),(0,G.jsx)(M,{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:k,labels:v}),(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=v?v.actionLabel(n,O):O;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)(C,{size:`sm`,variant:`secondary`,onClick:a,disabled:_,children:[e?(0,G.jsx)(e,{className:`h-4 w-4 mr-1.5`}):null,r]})]})}let N=`${E}-error`,I=e=>(0,G.jsxs)(`div`,{className:`space-y-1.5 py-2`,children:[(0,G.jsx)(J,{spec:t,resolved:n,labelText:k,labels:v}),y&&(0,W.isValidElement)(e)?(0,W.cloneElement)(e,{"aria-invalid":!0,"aria-describedby":N}):e,y?(0,G.jsx)(X,{id:N,message:y}):(0,G.jsx)(Y,{description:j})]}),L=e=>{let n=typeof e.label==`string`?e.label:e.label?.defaultValue??String(e.value);return!t.key||!v?n:v.optionLabel(t.key,String(e.value),n)};switch(t.type){case`text`:case`email`:case`url`:case`phone`:return I((0,G.jsx)(m,{id:E,type:t.type===`email`?`email`:t.type===`url`?`url`:`text`,value:r??``,minLength:t.minLength,maxLength:t.maxLength,pattern:t.pattern,disabled:D,onChange:e=>i(e.target.value)}));case`password`:return I((0,G.jsx)(m,{id:E,type:`password`,autoComplete:`new-password`,placeholder:r?`••••••••`:``,disabled:D,onChange:e=>i(e.target.value)}));case`textarea`:return I((0,G.jsx)(x,{id:E,rows:t.rows??4,value:r??``,minLength:t.minLength,maxLength:t.maxLength,disabled:D,onChange:e=>i(e.target.value)}));case`number`:return I((0,G.jsx)(m,{id:E,type:`number`,value:r,min:t.min,max:t.max,step:t.step,disabled:D,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:k,labels:v}),(0,G.jsx)(Y,{description:j})]}),(0,G.jsx)(T,{id:E,checked:!!r,disabled:D,onCheckedChange:e=>i(e)})]});case`select`:return t.valueDomain?I((0,G.jsx)(Z,{id:E,value:r,disabled:D,onChange:i,options:(t.options??[]).map(e=>({value:String(e.value),label:L(e)}))})):I((0,G.jsxs)(P,{value:r==null?void 0:String(r),onValueChange:e=>i(e),disabled:D,children:[(0,G.jsx)(d,{id:E,children:(0,G.jsx)(g,{placeholder:`Select…`})}),(0,G.jsx)(S,{children:t.options?.map(e=>(0,G.jsx)(p,{value:String(e.value),children:L(e)},String(e.value)))})]}));case`radio`:return I((0,G.jsx)(s,{value:r==null?void 0:String(r),onValueChange:e=>i(e),disabled:D,children:t.options?.map(e=>(0,G.jsxs)(`div`,{className:`flex items-center space-x-2`,children:[(0,G.jsx)(A,{value:String(e.value),id:`${E}-${e.value}`}),(0,G.jsx)(c,{htmlFor:`${E}-${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)(f,{checked:r,disabled:D,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)(w,{value:[Number(r??t.min??0)],min:t.min??0,max:t.max??100,step:t.step??1,disabled:D,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)(m,{id:E,type:`color`,value:r??`#000000`,disabled:D,onChange:e=>i(e.target.value),className:`w-16 h-9 p-1`}),(0,G.jsx)(m,{value:r??``,disabled:D,onChange:e=>i(e.target.value),className:`flex-1 font-mono text-sm`})]}));case`json`:return I((0,G.jsx)(x,{id:E,rows:t.rows??6,className:`font-mono text-xs`,value:typeof r==`string`?r:JSON.stringify(r??null,null,2),disabled:D,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(),t=r(),{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,b]=(0,W.useState)({}),[x,S]=(0,W.useState)({}),[w,T]=(0,W.useState)(null),E=(0,W.useCallback)(async()=>{d(!0),h(null);try{let e=await V(s);l(e),b({}),S({}),T(null)}catch(e){h(e?.message??i(`console.settingsView.loadError`))}finally{d(!1)}},[s,i]);(0,W.useEffect)(()=>{s&&E()},[s,E]);let A=(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]),M=(0,W.useMemo)(()=>Object.keys(g),[g]),P=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)(k,{className:`h-8 w-1/3`}),(0,G.jsx)(k,{className:`h-4 w-2/3`}),(0,G.jsx)(k,{className:`h-32 w-full`}),(0,G.jsx)(k,{className:`h-32 w-full`})]});if(m)return(0,G.jsxs)(`div`,{className:`p-6 max-w-3xl`,children:[(0,G.jsxs)(C,{variant:`ghost`,size:`sm`,onClick:()=>t(-1),children:[(0,G.jsx)(y,{className:`h-4 w-4 mr-1`}),` `,i(`console.settingsView.back`)]}),(0,G.jsx)(_,{className:`mt-3`,children:(0,G.jsx)(j,{className:`py-8 text-center text-sm text-destructive`,children:m})})]});if(!c)return null;let{manifest:F,values:K}=c,q=F.icon?R(F.icon):null,J=P.title(z(F.label)),Y=P.description(F.description),X=async()=>{if(M.length!==0){p(!0),T(null);try{let e=await H(s,g);l({...c,values:{...K,...e.values}}),b({}),S({}),I.success(i(`console.settingsView.saved`))}catch(e){let t=e?.payload?.error;if(t?.code===`SETTINGS_LOCKED`){let e=L(t);I.error(e?i(`console.settingsView.lockedByEnv`,{key:e}):i(`console.settingsView.lockedByEnvNoKey`))}else if(t?.code===`SETTINGS_CRYPTO_UNAVAILABLE`){let e=te(t);T(e),I.error(e.subject?i(`console.settingsView.cryptoRefusalToast`,{subject:e.subject}):i(`console.settingsView.cryptoRefusalToastNoSubject`))}else{let n=a(t);n?.length&&S(Object.fromEntries(n.map(e=>[e.field,e.message]))),I.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?I.success(t.message??i(`console.settingsView.actionSucceeded`)):I.error(t.message??i(`console.settingsView.actionFailed`))}catch(e){I.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)(C,{variant:`ghost`,size:`sm`,onClick:()=>t(`/system/settings`),children:[(0,G.jsx)(y,{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}),F.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]})]}),F.helpText?(0,G.jsx)(`p`,{className:`text-sm text-muted-foreground mt-4 whitespace-pre-wrap`,children:F.helpText}):null,w?(0,G.jsx)(_,{className:`mt-4 border-destructive/50 bg-destructive/5`,children:(0,G.jsx)(j,{className:`py-4`,children:(0,G.jsxs)(`div`,{role:`alert`,className:`flex items-start gap-3`,children:[(0,G.jsx)(D,{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:w.subject?(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(`code`,{className:`font-mono text-xs`,children:w.subject}),` `,i(`console.settingsView.cryptoRefusalSubjectSuffix`)]}):i(`console.settingsView.cryptoRefusalNoSubject`)}),w.prescription?(0,G.jsx)(`p`,{className:`mt-2 text-muted-foreground whitespace-pre-wrap`,children:w.prescription}):null]})]})})}):null,(0,G.jsx)(`div`,{className:`mt-6 divide-y`,children:F.specifiers.filter(e=>$(e.visible,A)).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&&(b(t=>({...t,[n]:e})),S(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:P,error:n?x[n]:void 0},(n??`_layout_${t}`)+t)})}),M.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:M.length})}),(0,G.jsxs)(`div`,{className:`flex gap-2`,children:[(0,G.jsxs)(C,{variant:`ghost`,size:`sm`,onClick:()=>{b({}),S({}),T(null)},disabled:f,children:[(0,G.jsx)(O,{className:`h-4 w-4 mr-1`}),` `,i(`console.settingsView.discard`)]}),(0,G.jsxs)(C,{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 +1 @@
1
- import{r as e}from"./vendor-react-CsWFRkED.js";import{y as t}from"./i18n-locales-Bz4c8KXc.js";import{Pr as n,_o as r,ea as i,el as a,fn as o,gn as s,hn as c,il as l,mn as u,pn as d,ra as f}from"./ui-components-D2lrjG-t.js";var p=e(),m={config:{icon:f,i18nKey:`config`,short:`Admin config`,title:`Administrator configuration`,body:()=>`These rows define how the platform behaves at runtime. Author them here; the runtime data they produce lives in a separate table.`,tone:`border-sky-300/60 bg-sky-50 text-sky-900 hover:bg-sky-100 dark:border-sky-500/40 dark:bg-sky-950/40 dark:text-sky-100`},"engine-owned":{icon:r,i18nKey:`system`,short:`System-managed`,title:`Managed by the platform`,body:()=>`Rows here are created automatically when actions run on the source record. The list below is a read-only monitoring surface — row-level actions (Approve, Recall, Resend, …) live on each row.`,tone:`border-slate-300/60 bg-slate-50 text-slate-900 hover:bg-slate-100 dark:border-slate-500/40 dark:bg-slate-950/40 dark:text-slate-100`},"system-data":{icon:f,i18nKey:`systemWritable`,short:`Platform schema`,title:`Platform-defined, admin-writable`,body:()=>`This object's schema is defined by the platform, but its rows are yours to create and edit here. Who may write is governed by delegated administration and record-level security, not by this badge.`,tone:`border-slate-300/60 bg-slate-50 text-slate-900 hover:bg-slate-100 dark:border-slate-500/40 dark:bg-slate-950/40 dark:text-slate-100`},"append-only":{icon:a,i18nKey:`appendOnly`,short:`Read-only · Audit log`,title:`Read-only historical record`,body:()=>`Immutable audit log. Rows cannot be created, edited, or deleted from the UI — they're written by the platform when events occur. Use Export to download for compliance review.`,tone:`border-zinc-300/60 bg-zinc-50 text-zinc-900 hover:bg-zinc-100 dark:border-zinc-500/40 dark:bg-zinc-950/40 dark:text-zinc-100`},"better-auth":{icon:i,i18nKey:`betterAuth`,short:`Identity`,title:`Managed by the identity provider`,body:e=>`This object's schema is owned by ${e}. Direct edits bypass password hashing, session validation, two-factor checks, and audit hooks. Manage these records through your authentication provider's sign-in, invitation, and security flows instead.`,tone:`border-amber-300/60 bg-amber-50 text-amber-900 hover:bg-amber-100 dark:border-amber-500/40 dark:bg-amber-950/40 dark:text-amber-100`}};function h({managedBy:e,label:r,className:i}){let{t:a}=t();if(!e||e===`platform`)return null;let s=m[e];if(!s)return null;let f=s.icon,h=r??`better-auth`,g=a(`managedByBadge.${s.i18nKey}.short`,{defaultValue:s.short}),_=a(`managedByBadge.${s.i18nKey}.title`,{defaultValue:s.title}),v=a(`managedByBadge.${s.i18nKey}.body`,{defaultValue:s.body(h),provider:h});return(0,p.jsx)(u,{delayDuration:200,children:(0,p.jsxs)(o,{children:[(0,p.jsx)(c,{asChild:!0,children:(0,p.jsxs)(n,{variant:`outline`,"data-testid":`managed-by-badge`,"data-bucket":e,className:l(`gap-1 font-normal text-[11px] leading-none py-0.5 px-1.5 cursor-help`,s.tone,i),children:[(0,p.jsx)(f,{className:`h-3 w-3`,"aria-hidden":`true`}),(0,p.jsx)(`span`,{children:g})]})}),(0,p.jsxs)(d,{side:`bottom`,align:`start`,className:`max-w-xs text-xs leading-relaxed`,children:[(0,p.jsx)(`p`,{className:`font-semibold mb-1`,children:_}),(0,p.jsx)(`p`,{className:`text-muted-foreground`,children:v})]})]})})}function g({fields:e=8,columns:t=2}){return(0,p.jsxs)(`div`,{className:`w-full space-y-6 p-4 sm:p-6`,children:[(0,p.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,p.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,p.jsx)(s,{className:`h-8 w-8 rounded`}),(0,p.jsxs)(`div`,{className:`space-y-2`,children:[(0,p.jsx)(s,{className:`h-6 w-48`}),(0,p.jsx)(s,{className:`h-4 w-32`})]})]}),(0,p.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,p.jsx)(s,{className:`h-9 w-20`}),(0,p.jsx)(s,{className:`h-9 w-20`})]})]}),(0,p.jsx)(s,{className:`h-5 w-24`}),(0,p.jsx)(`div`,{className:`grid grid-cols-1 ${t===2?`md:grid-cols-2`:``} gap-4`,children:Array.from({length:e}).map((e,t)=>(0,p.jsxs)(`div`,{className:`space-y-2`,children:[(0,p.jsx)(s,{className:`h-4 w-24`}),(0,p.jsx)(s,{className:`h-9 w-full`})]},`field-${t}`))}),(0,p.jsxs)(`div`,{className:`space-y-3 pt-4 border-t`,children:[(0,p.jsx)(s,{className:`h-5 w-32`}),(0,p.jsx)(`div`,{className:`space-y-2`,children:Array.from({length:3}).map((e,t)=>(0,p.jsxs)(`div`,{className:`flex items-center gap-3 py-2`,children:[(0,p.jsx)(s,{className:`h-8 w-8 rounded-full`}),(0,p.jsxs)(`div`,{className:`flex-1 space-y-1`,children:[(0,p.jsx)(s,{className:`h-4 w-40`}),(0,p.jsx)(s,{className:`h-3 w-24`})]})]},`related-${t}`))})]})]})}export{h as n,g as t};
1
+ import{r as e}from"./vendor-react-CsWFRkED.js";import{y as t}from"./i18n-locales-BBA090ve.js";import{Pr as n,_o as r,ea as i,el as a,fn as o,gn as s,hn as c,il as l,mn as u,pn as d,ra as f}from"./ui-components-CMHDBJEm.js";var p=e(),m={config:{icon:f,i18nKey:`config`,short:`Admin config`,title:`Administrator configuration`,body:()=>`These rows define how the platform behaves at runtime. Author them here; the runtime data they produce lives in a separate table.`,tone:`border-sky-300/60 bg-sky-50 text-sky-900 hover:bg-sky-100 dark:border-sky-500/40 dark:bg-sky-950/40 dark:text-sky-100`},"engine-owned":{icon:r,i18nKey:`system`,short:`System-managed`,title:`Managed by the platform`,body:()=>`Rows here are created automatically when actions run on the source record. The list below is a read-only monitoring surface — row-level actions (Approve, Recall, Resend, …) live on each row.`,tone:`border-slate-300/60 bg-slate-50 text-slate-900 hover:bg-slate-100 dark:border-slate-500/40 dark:bg-slate-950/40 dark:text-slate-100`},"system-data":{icon:f,i18nKey:`systemWritable`,short:`Platform schema`,title:`Platform-defined, admin-writable`,body:()=>`This object's schema is defined by the platform, but its rows are yours to create and edit here. Who may write is governed by delegated administration and record-level security, not by this badge.`,tone:`border-slate-300/60 bg-slate-50 text-slate-900 hover:bg-slate-100 dark:border-slate-500/40 dark:bg-slate-950/40 dark:text-slate-100`},"append-only":{icon:a,i18nKey:`appendOnly`,short:`Read-only · Audit log`,title:`Read-only historical record`,body:()=>`Immutable audit log. Rows cannot be created, edited, or deleted from the UI — they're written by the platform when events occur. Use Export to download for compliance review.`,tone:`border-zinc-300/60 bg-zinc-50 text-zinc-900 hover:bg-zinc-100 dark:border-zinc-500/40 dark:bg-zinc-950/40 dark:text-zinc-100`},"better-auth":{icon:i,i18nKey:`betterAuth`,short:`Identity`,title:`Managed by the identity provider`,body:e=>`This object's schema is owned by ${e}. Direct edits bypass password hashing, session validation, two-factor checks, and audit hooks. Manage these records through your authentication provider's sign-in, invitation, and security flows instead.`,tone:`border-amber-300/60 bg-amber-50 text-amber-900 hover:bg-amber-100 dark:border-amber-500/40 dark:bg-amber-950/40 dark:text-amber-100`}};function h({managedBy:e,label:r,className:i}){let{t:a}=t();if(!e||e===`platform`)return null;let s=m[e];if(!s)return null;let f=s.icon,h=r??`better-auth`,g=a(`managedByBadge.${s.i18nKey}.short`,{defaultValue:s.short}),_=a(`managedByBadge.${s.i18nKey}.title`,{defaultValue:s.title}),v=a(`managedByBadge.${s.i18nKey}.body`,{defaultValue:s.body(h),provider:h});return(0,p.jsx)(u,{delayDuration:200,children:(0,p.jsxs)(o,{children:[(0,p.jsx)(c,{asChild:!0,children:(0,p.jsxs)(n,{variant:`outline`,"data-testid":`managed-by-badge`,"data-bucket":e,className:l(`gap-1 font-normal text-[11px] leading-none py-0.5 px-1.5 cursor-help`,s.tone,i),children:[(0,p.jsx)(f,{className:`h-3 w-3`,"aria-hidden":`true`}),(0,p.jsx)(`span`,{children:g})]})}),(0,p.jsxs)(d,{side:`bottom`,align:`start`,className:`max-w-xs text-xs leading-relaxed`,children:[(0,p.jsx)(`p`,{className:`font-semibold mb-1`,children:_}),(0,p.jsx)(`p`,{className:`text-muted-foreground`,children:v})]})]})})}function g({fields:e=8,columns:t=2}){return(0,p.jsxs)(`div`,{className:`w-full space-y-6 p-4 sm:p-6`,children:[(0,p.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,p.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,p.jsx)(s,{className:`h-8 w-8 rounded`}),(0,p.jsxs)(`div`,{className:`space-y-2`,children:[(0,p.jsx)(s,{className:`h-6 w-48`}),(0,p.jsx)(s,{className:`h-4 w-32`})]})]}),(0,p.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,p.jsx)(s,{className:`h-9 w-20`}),(0,p.jsx)(s,{className:`h-9 w-20`})]})]}),(0,p.jsx)(s,{className:`h-5 w-24`}),(0,p.jsx)(`div`,{className:`grid grid-cols-1 ${t===2?`md:grid-cols-2`:``} gap-4`,children:Array.from({length:e}).map((e,t)=>(0,p.jsxs)(`div`,{className:`space-y-2`,children:[(0,p.jsx)(s,{className:`h-4 w-24`}),(0,p.jsx)(s,{className:`h-9 w-full`})]},`field-${t}`))}),(0,p.jsxs)(`div`,{className:`space-y-3 pt-4 border-t`,children:[(0,p.jsx)(s,{className:`h-5 w-32`}),(0,p.jsx)(`div`,{className:`space-y-2`,children:Array.from({length:3}).map((e,t)=>(0,p.jsxs)(`div`,{className:`flex items-center gap-3 py-2`,children:[(0,p.jsx)(s,{className:`h-8 w-8 rounded-full`}),(0,p.jsxs)(`div`,{className:`flex-1 space-y-1`,children:[(0,p.jsx)(s,{className:`h-4 w-40`}),(0,p.jsx)(s,{className:`h-3 w-24`})]})]},`related-${t}`))})]})]})}export{h as n,g as t};
@@ -1 +1 @@
1
- import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{b as t,h as n,p as r,r as i}from"./vendor-react-CsWFRkED.js";import{h as a}from"./infrastructure-CIpDEFyQ.js";import{q as o}from"./framework-BfSv4Kb0.js";import{Ar as s,Do as c,Fi as l,Ic as u,Mo as d,Mr as f,Ms as p,Or as m,Pc as h,Pr as g,Xi as _,di as v,jr as y,kc as b,ki as x,kr as S,na as C,oa as w,ui as T,vo as E}from"./ui-components-D2lrjG-t.js";import"./src-JX1BkhmR.js";var D=e(t(),1),O=i();function k(e){return e===null?null:e.data?.length??0}function A(){let e=r(),{appName:t}=n(),i=t?`/apps/${t}`:``,A=o(),{isAdmin:j}=a(),[M,N]=(0,D.useState)({users:null,orgs:null,positions:null,permissions:null,auditLogs:null}),[P,F]=(0,D.useState)(!0),I=(0,D.useCallback)(async()=>{if(A){F(!0);try{let[e,t,n,r,i]=await Promise.all([A.find(`sys_user`).catch(()=>null),A.find(`sys_organization`).catch(()=>null),A.find(`sys_position`).catch(()=>null),A.find(`sys_permission_set`).catch(()=>null),A.find(`sys_audit_log`).catch(()=>null)]);N({users:k(e),orgs:k(t),positions:k(n),permissions:k(r),auditLogs:k(i)})}catch{}finally{F(!1)}}},[A]);(0,D.useEffect)(()=>{I()},[I]);let L=[{title:`Applications`,description:`Manage all configured applications`,icon:c,href:`${i}/system/apps`,countLabel:``,count:null},{title:`Metadata`,description:`Browse and edit every metadata type the platform exposes`,icon:p,href:`${i}/metadata`,countLabel:``,count:null},{title:`Datasources`,description:`Connect external databases and sync their tables in as objects`,icon:h,href:`${i}/metadata/datasource`,countLabel:``,count:null}],R=[{title:`Users`,description:`Manage system users and accounts`,icon:T,href:`${i}/system/users`,countLabel:`users`,count:M.users},{title:`Organizations`,description:`Manage organizations and teams`,icon:b,href:`${i}/system/organizations`,countLabel:`organizations`,count:M.orgs},{title:`Positions`,description:`Configure positions and access levels`,icon:_,href:`${i}/system/positions`,countLabel:`positions`,count:M.positions},{title:`Permissions`,description:`Manage permission rules and assignments`,icon:d,href:`${i}/system/permissions`,countLabel:`permissions`,count:M.permissions},{title:`Audit Log`,description:`View system activity and changes`,icon:w,href:`${i}/system/audit-log`,countLabel:`entries`,count:M.auditLogs},{title:`AI Approvals`,description:`Review actions AI agents propose before they execute`,icon:u,href:`${i}/system/ai-approvals`,countLabel:``,count:null},{title:`App Marketplace`,description:`Browse and install approved apps from the ObjectStack catalog`,icon:l,href:`${i}/system/marketplace`,countLabel:``,count:null,adminOnly:!0},{title:`Settings`,description:`Configure mail, branding, feature flags, and more`,icon:C,href:`${i}/system/settings`,countLabel:``,count:null},{title:`Developer`,description:`API console, flow runs, and public form management`,icon:x,href:`${i}/developer`,countLabel:``,count:null},{title:`Profile`,description:`View and edit your account settings`,icon:v,href:`${i}/system/profile`,countLabel:``,count:null}],z=[...L,...R].filter(e=>!e.adminOnly||j);return(0,O.jsxs)(`div`,{className:`flex flex-col gap-6 p-4 sm:p-6`,children:[(0,O.jsxs)(`div`,{className:`min-w-0`,children:[(0,O.jsx)(`h1`,{className:`text-xl sm:text-2xl font-bold tracking-tight`,children:`System Settings`}),(0,O.jsx)(`p`,{className:`text-sm text-muted-foreground mt-1`,children:`Manage applications, users, positions, permissions, and system configuration`})]}),P&&(0,O.jsxs)(`div`,{className:`flex items-center gap-2 text-sm text-muted-foreground`,role:`status`,"aria-live":`polite`,children:[(0,O.jsx)(E,{className:`h-4 w-4 animate-spin`,"aria-hidden":`true`}),`Loading statistics...`]}),(0,O.jsx)(`div`,{className:`grid gap-4 sm:grid-cols-2 lg:grid-cols-3`,children:z.map(t=>{let n=t.icon;return(0,O.jsxs)(m,{className:`cursor-pointer transition-colors hover:bg-accent/50`,onClick:()=>e(t.href),"data-testid":`hub-card-${t.title.toLowerCase().replace(/\s+/g,`-`)}`,role:`link`,tabIndex:0,"aria-label":`${t.title}: ${t.description}`,onKeyDown:n=>{(n.key===`Enter`||n.key===` `)&&(n.preventDefault(),e(t.href))},children:[(0,O.jsxs)(y,{className:`flex flex-row items-center gap-3 pb-2`,children:[(0,O.jsx)(`div`,{className:`flex h-10 w-10 shrink-0 items-center justify-center rounded-lg bg-primary/10 text-primary`,children:(0,O.jsx)(n,{className:`h-5 w-5`})}),(0,O.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,O.jsx)(f,{className:`text-base`,children:t.title}),(0,O.jsx)(s,{className:`text-xs`,children:t.description})]})]}),(0,O.jsx)(S,{className:`pt-0`,children:t.count!==null&&(0,O.jsxs)(g,{variant:`secondary`,children:[t.count,` `,t.countLabel]})})]},t.title)})})]})}export{A as SystemHubPage};
1
+ import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{b as t,h as n,p as r,r as i}from"./vendor-react-CsWFRkED.js";import{h as a}from"./infrastructure-B4zG1jNa.js";import{q as o}from"./framework-DFE_Mws9.js";import{Ar as s,Do as c,Fi as l,Ic as u,Mo as d,Mr as f,Ms as p,Or as m,Pc as h,Pr as g,Xi as _,di as v,jr as y,kc as b,ki as x,kr as S,na as C,oa as w,ui as T,vo as E}from"./ui-components-CMHDBJEm.js";import"./src-hcMLuWxG.js";var D=e(t(),1),O=i();function k(e){return e===null?null:e.data?.length??0}function A(){let e=r(),{appName:t}=n(),i=t?`/apps/${t}`:``,A=o(),{isAdmin:j}=a(),[M,N]=(0,D.useState)({users:null,orgs:null,positions:null,permissions:null,auditLogs:null}),[P,F]=(0,D.useState)(!0),I=(0,D.useCallback)(async()=>{if(A){F(!0);try{let[e,t,n,r,i]=await Promise.all([A.find(`sys_user`).catch(()=>null),A.find(`sys_organization`).catch(()=>null),A.find(`sys_position`).catch(()=>null),A.find(`sys_permission_set`).catch(()=>null),A.find(`sys_audit_log`).catch(()=>null)]);N({users:k(e),orgs:k(t),positions:k(n),permissions:k(r),auditLogs:k(i)})}catch{}finally{F(!1)}}},[A]);(0,D.useEffect)(()=>{I()},[I]);let L=[{title:`Applications`,description:`Manage all configured applications`,icon:c,href:`${i}/system/apps`,countLabel:``,count:null},{title:`Metadata`,description:`Browse and edit every metadata type the platform exposes`,icon:p,href:`${i}/metadata`,countLabel:``,count:null},{title:`Datasources`,description:`Connect external databases and sync their tables in as objects`,icon:h,href:`${i}/metadata/datasource`,countLabel:``,count:null}],R=[{title:`Users`,description:`Manage system users and accounts`,icon:T,href:`${i}/system/users`,countLabel:`users`,count:M.users},{title:`Organizations`,description:`Manage organizations and teams`,icon:b,href:`${i}/system/organizations`,countLabel:`organizations`,count:M.orgs},{title:`Positions`,description:`Configure positions and access levels`,icon:_,href:`${i}/system/positions`,countLabel:`positions`,count:M.positions},{title:`Permissions`,description:`Manage permission rules and assignments`,icon:d,href:`${i}/system/permissions`,countLabel:`permissions`,count:M.permissions},{title:`Audit Log`,description:`View system activity and changes`,icon:w,href:`${i}/system/audit-log`,countLabel:`entries`,count:M.auditLogs},{title:`AI Approvals`,description:`Review actions AI agents propose before they execute`,icon:u,href:`${i}/system/ai-approvals`,countLabel:``,count:null},{title:`App Marketplace`,description:`Browse and install approved apps from the ObjectStack catalog`,icon:l,href:`${i}/system/marketplace`,countLabel:``,count:null,adminOnly:!0},{title:`Settings`,description:`Configure mail, branding, feature flags, and more`,icon:C,href:`${i}/system/settings`,countLabel:``,count:null},{title:`Developer`,description:`API console, flow runs, and public form management`,icon:x,href:`${i}/developer`,countLabel:``,count:null},{title:`Profile`,description:`View and edit your account settings`,icon:v,href:`${i}/system/profile`,countLabel:``,count:null}],z=[...L,...R].filter(e=>!e.adminOnly||j);return(0,O.jsxs)(`div`,{className:`flex flex-col gap-6 p-4 sm:p-6`,children:[(0,O.jsxs)(`div`,{className:`min-w-0`,children:[(0,O.jsx)(`h1`,{className:`text-xl sm:text-2xl font-bold tracking-tight`,children:`System Settings`}),(0,O.jsx)(`p`,{className:`text-sm text-muted-foreground mt-1`,children:`Manage applications, users, positions, permissions, and system configuration`})]}),P&&(0,O.jsxs)(`div`,{className:`flex items-center gap-2 text-sm text-muted-foreground`,role:`status`,"aria-live":`polite`,children:[(0,O.jsx)(E,{className:`h-4 w-4 animate-spin`,"aria-hidden":`true`}),`Loading statistics...`]}),(0,O.jsx)(`div`,{className:`grid gap-4 sm:grid-cols-2 lg:grid-cols-3`,children:z.map(t=>{let n=t.icon;return(0,O.jsxs)(m,{className:`cursor-pointer transition-colors hover:bg-accent/50`,onClick:()=>e(t.href),"data-testid":`hub-card-${t.title.toLowerCase().replace(/\s+/g,`-`)}`,role:`link`,tabIndex:0,"aria-label":`${t.title}: ${t.description}`,onKeyDown:n=>{(n.key===`Enter`||n.key===` `)&&(n.preventDefault(),e(t.href))},children:[(0,O.jsxs)(y,{className:`flex flex-row items-center gap-3 pb-2`,children:[(0,O.jsx)(`div`,{className:`flex h-10 w-10 shrink-0 items-center justify-center rounded-lg bg-primary/10 text-primary`,children:(0,O.jsx)(n,{className:`h-5 w-5`})}),(0,O.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,O.jsx)(f,{className:`text-base`,children:t.title}),(0,O.jsx)(s,{className:`text-xs`,children:t.description})]})]}),(0,O.jsx)(S,{className:`pt-0`,children:t.count!==null&&(0,O.jsxs)(g,{variant:`secondary`,children:[t.count,` `,t.countLabel]})})]},t.title)})})]})}export{A as SystemHubPage};
@@ -1 +1 @@
1
- import{n as e}from"./chunk-XHIXRSVI-CqmtoxrP.js";import{n as t}from"./chunk-Y2CYZVJY-DsF7k-Jl.js";import{t as n}from"./src-CVJP2nIc.js";import"./chunk-DU6HZSFF-BkY4hAzc.js";import"./chunk-CLGD4ZFX-BTkDISwp.js";import{n as r,r as i,t as a}from"./chunk-SVP7TREG-C3BMpr4x.js";import{t as o}from"./chunk-JWPE2WC7-DVXcaiue.js";import{t as s}from"./mermaid-parser.core-DUt1FNlO.js";var c=e().RailroadAbnf.parser.LangiumParser,l=t(e=>{let t=e.alternatives.map(u);return t.length===1?t[0]:{type:`choice`,alternatives:t}},`transformAlternation`),u=t(e=>{let t=e.elements.map(f);return t.length===1?t[0]:{type:`sequence`,elements:t}},`transformConcatenation`),d=t(e=>{if(e.includes(`*`)){let[t,n]=e.split(`*`);return{min:t?parseInt(t,10):0,max:n?parseInt(n,10):1/0}}let t=parseInt(e,10);return{min:t,max:t}},`parseRepeat`),f=t(e=>{let t=p(e.primary);if(!e.repeat)return t;let{min:n,max:r}=d(e.repeat);return n===0&&r===1?{type:`optional`,element:t}:{type:`repetition`,element:t,min:n,max:r}},`transformElement`),p=t(e=>{switch(e.$type){case`AbnfStringLiteral`:return{type:`terminal`,value:e.value};case`AbnfNumVal`:return{type:`terminal`,value:e.value};case`AbnfRuleName`:return{type:`nonterminal`,name:e.name};case`AbnfGroup`:return l(e.element);case`AbnfOptionalGroup`:return{type:`optional`,element:l(e.element)};default:throw Error(`Unsupported ABNF primary node: ${e.$type}`)}},`transformPrimary`),m=t(e=>({name:e.name,definition:l(e.definition)}),`transformRule`),h=t(e=>{o(e,a),e.title&&a.setTitle(e.title),e.rules.map(e=>a.addRule(m(e)))},`populateDb`),g={parser:{parse:t(e=>{a.clear(),n.debug(`[ABNF Parser] Starting Langium parse`);let t=c.parse(e);if(t.lexerErrors.length>0||t.parserErrors.length>0)throw new s(t);let r=t.value;n.debug(`[ABNF Parser] Parsed rules:`,r.rules.length),h(r),n.debug(`[ABNF Parser] Parse complete`)},`parse`),parser:{yy:a}},db:a,renderer:i,styles:r};export{g as diagram};
1
+ import{n as e}from"./chunk-XHIXRSVI-CqmtoxrP.js";import{n as t}from"./chunk-Y2CYZVJY-DsF7k-Jl.js";import{t as n}from"./src-D7tZqf12.js";import"./chunk-DU6HZSFF-DqjylQO-.js";import"./chunk-CLGD4ZFX-De9kMAXh.js";import{n as r,r as i,t as a}from"./chunk-SVP7TREG-BdJpxJji.js";import{t as o}from"./chunk-JWPE2WC7-DVXcaiue.js";import{t as s}from"./mermaid-parser.core-DUt1FNlO.js";var c=e().RailroadAbnf.parser.LangiumParser,l=t(e=>{let t=e.alternatives.map(u);return t.length===1?t[0]:{type:`choice`,alternatives:t}},`transformAlternation`),u=t(e=>{let t=e.elements.map(f);return t.length===1?t[0]:{type:`sequence`,elements:t}},`transformConcatenation`),d=t(e=>{if(e.includes(`*`)){let[t,n]=e.split(`*`);return{min:t?parseInt(t,10):0,max:n?parseInt(n,10):1/0}}let t=parseInt(e,10);return{min:t,max:t}},`parseRepeat`),f=t(e=>{let t=p(e.primary);if(!e.repeat)return t;let{min:n,max:r}=d(e.repeat);return n===0&&r===1?{type:`optional`,element:t}:{type:`repetition`,element:t,min:n,max:r}},`transformElement`),p=t(e=>{switch(e.$type){case`AbnfStringLiteral`:return{type:`terminal`,value:e.value};case`AbnfNumVal`:return{type:`terminal`,value:e.value};case`AbnfRuleName`:return{type:`nonterminal`,name:e.name};case`AbnfGroup`:return l(e.element);case`AbnfOptionalGroup`:return{type:`optional`,element:l(e.element)};default:throw Error(`Unsupported ABNF primary node: ${e.$type}`)}},`transformPrimary`),m=t(e=>({name:e.name,definition:l(e.definition)}),`transformRule`),h=t(e=>{o(e,a),e.title&&a.setTitle(e.title),e.rules.map(e=>a.addRule(m(e)))},`populateDb`),g={parser:{parse:t(e=>{a.clear(),n.debug(`[ABNF Parser] Starting Langium parse`);let t=c.parse(e);if(t.lexerErrors.length>0||t.parserErrors.length>0)throw new s(t);let r=t.value;n.debug(`[ABNF Parser] Parsed rules:`,r.rules.length),h(r),n.debug(`[ABNF Parser] Parse complete`)},`parse`),parser:{yy:a}},db:a,renderer:i,styles:r};export{g as diagram};
@@ -1 +1 @@
1
- import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{b as t,h as n,p as r,r as i}from"./vendor-react-CsWFRkED.js";import{h as a,y as o}from"./infrastructure-CIpDEFyQ.js";import{Qr as s,sr as c}from"./framework-BfSv4Kb0.js";import{y as l}from"./i18n-locales-Bz4c8KXc.js";import{Mr as u,Or as d,Pr as f,Qi as p,Si as ee,Xr as m,_o as h,gn as g,il as _,jr as v,kr as y,sc as te,ws as ne,ya as b}from"./ui-components-D2lrjG-t.js";import{r as x}from"./vendor-ui-utils-BFw4cGI6.js";var S=e(t(),1),C=i();function w(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===``||T(i)?null:{dsn:i,sendDefaultPii:r.sendDefaultPii===!0,...typeof r.environment==`string`&&r.environment.trim()?{environment:r.environment.trim()}:{},tracesSampleRate:E(r.tracesSampleRate,D),replaysOnErrorSampleRate:E(r.replaysOnErrorSampleRate,O)}}function T(e){try{return new URL(e).password!==``}catch{return!1}}function E(e,t){return typeof e==`number`&&Number.isFinite(e)&&e>=0&&e<=1?e:t}var D=.1,O=0,k={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:{}},A=[`preview`,`beta`,`ga`];function j(e){return typeof e==`string`&&A.includes(e)}var M={...k};function re(e){M={...M,...e,features:{...M.features,...e.features??{}},branding:{...M.branding,...e.branding??{}},telemetry:e.telemetry?{...e.telemetry}:M.telemetry}}async function N(e=``){let t=(e||``).replace(/\/+$/,``);try{let e=await c(`${t}/api/v1/runtime/config`,{credentials:`include`,headers:{Accept:`application/json`}});if(!e||typeof e!=`object`)return;re({cloudUrl:typeof e.cloudUrl==`string`?e.cloudUrl.replace(/\/+$/,``):M.cloudUrl,singleEnvironment:!!e.singleEnvironment,defaultOrgId:e.defaultOrgId??M.defaultOrgId??null,defaultEnvironmentId:e.defaultEnvironmentId??M.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}:M.features,telemetry:(()=>{let t=w(e);return t?{errorReporting:t}:{}})(),branding:e.branding?{productName:typeof e.branding.productName==`string`&&e.branding.productName.trim()?e.branding.productName.trim():M.branding.productName,productShortName:typeof e.branding.productShortName==`string`&&e.branding.productShortName.trim()?e.branding.productShortName.trim():M.branding.productShortName,stage:j(e.branding.stage)?e.branding.stage:M.branding.stage,logoUrl:typeof e.branding.logoUrl==`string`&&e.branding.logoUrl.trim()?e.branding.logoUrl.trim():M.branding.logoUrl,faviconUrl:typeof e.branding.faviconUrl==`string`&&e.branding.faviconUrl.trim()?e.branding.faviconUrl.trim():M.branding.faviconUrl,brandColor:typeof e.branding.brandColor==`string`&&e.branding.brandColor.trim()?e.branding.brandColor.trim():M.branding.brandColor,pwaDescription:typeof e.branding.pwaDescription==`string`&&e.branding.pwaDescription.trim()?e.branding.pwaDescription.trim():M.branding.pwaDescription,pwaThemeColor:typeof e.branding.pwaThemeColor==`string`&&e.branding.pwaThemeColor.trim()?e.branding.pwaThemeColor.trim():M.branding.pwaThemeColor}:M.branding})}catch{}}function ie(){return M}function P(){return M.branding?.productName||`ObjectOS`}function ae(){return M.branding?.productShortName||P()}function oe(){return M.branding?.stage??`preview`}function se(){return M.branding?.brandColor||`#4F46E5`}function ce(){return M.branding?.logoUrl}function le(){return M.branding?.faviconUrl}function ue(){return M.branding?.pwaDescription||`${P()} — runtime console`}function F(){return M.branding?.pwaThemeColor||se()}function I(){return M.cloudUrl??``}function L(){return M.features?.marketplace!==!1}function R(){return M.features?.aiStudio!==!1}function z(){return M.telemetry?.errorReporting??null}var B=``.replace(/\/$/,``),V=`${B}/api/v1/marketplace`;function H(e){let t=o.get();return t?{...e,Authorization:`Bearer ${t}`}:e}function U(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 W(e,t){let n=await fetch(`${V}${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}=U(r,n),i=Error(typeof t==`string`?t:`${e}`);throw i.code=e,i.status=n.status,i}return r?.data??r}async function de(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 W(`/packages${n?`?${n}`:``}`)}async function fe(e){return W(`/packages/${encodeURIComponent(e)}`)}async function pe(e){if(I()){let t=await fetch(`/api/v1/cloud-connection/install`,{method:`POST`,credentials:`include`,headers:H({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}=U(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(`${B}/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=U(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 me(){let e=I()||B,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 he(){let e=I()||B,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 ge(){return I()}async function _e(e,t){if(!e)return null;if(I())try{let t=await fetch(`/api/v1/cloud-connection/installation?package_id=${encodeURIComponent(e)}`,{credentials:`include`,headers:H({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=B;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 ve(e){if(!e)return{ok:!1,error:`installation id required`};let t=I()||B;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(()=>({}));return!n.ok||r?.success===!1?{ok:!1,error:U(r,n).message}:{ok:!0}}catch(e){return{ok:!1,error:e?.message||`Network error`}}}async function ye(e){if(!e)return{ok:!1,error:`installation id required`};let t=I()||B;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(()=>({}));return!n.ok||r?.success===!1?{ok:!1,error:U(r,n).message}:{ok:!0,deleted:Number(r?.data?.deleted??0)}}catch(e){return{ok:!1,error:e?.message||`Network error`}}}async function be(){try{let e=await fetch(`${B}/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 xe(e){let t=await fetch(`${V}/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}=U(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(`${V}/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(`${B}/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(`${V}/install-local/${encodeURIComponent(e)}`,{method:`DELETE`,credentials:`include`,headers:{Accept:`application/json`}});if(!t.ok){let e=await t.json().catch(()=>({}));throw Error(U(e,t).message)}}async function J(e,t){let n=await fetch(`${V}/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 Se(e){return J(e,`reseed`)}function Ce(e){return J(e,`purge`)}function Y(){let e=r(),{appName:t}=n(),{t:i}=l(),a=t?`/apps/${t}`:`/`;return(0,C.jsx)(`div`,{className:`container mx-auto max-w-2xl px-6 py-16`,children:(0,C.jsx)(d,{children:(0,C.jsxs)(y,{className:`flex flex-col items-center gap-4 py-12 text-center`,children:[(0,C.jsx)(`div`,{className:`rounded-full bg-muted p-3`,children:(0,C.jsx)(h,{className:`h-6 w-6 text-muted-foreground`})}),(0,C.jsxs)(`div`,{children:[(0,C.jsx)(`h2`,{className:`text-lg font-semibold`,children:i(`marketplace.accessDenied.title`)}),(0,C.jsx)(`p`,{className:`mt-1 text-sm text-muted-foreground`,children:i(`marketplace.accessDenied.description`)})]}),(0,C.jsx)(m,{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 we(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 Te(e){return(await Q(await fetch(`${X}/${encodeURIComponent(e)}/confirm`,{method:`POST`,credentials:`include`,headers:Z({"Content-Type":`application/json`})})))?.suggestion}async function Ee(e){return(await Q(await fetch(`${X}/${encodeURIComponent(e)}/dismiss`,{method:`POST`,credentials:`include`,headers:Z({"Content-Type":`application/json`})})))?.suggestion}function De({packageId:e,strings:t,className:n,onResolved:r}){let[i,a]=(0,S.useState)([]),[o,s]=(0,S.useState)(null),c=(0,S.useCallback)(()=>{let t=!1;return we({status:`pending`,...e?{packageId:e}:{}}).then(e=>{t||a(e)}).catch(()=>{}),()=>{t=!0}},[e]);(0,S.useEffect)(()=>c(),[c]);let l=async(e,n)=>{s(e.id);try{let i=n===`confirm`?await Te(e.id):await Ee(e.id);a(t=>t.filter(t=>t.id!==e.id)),x.success(n===`confirm`?t.confirmedToast(e):t.dismissedToast(e)),r?.(i??e)}catch(e){x.error(e?.message??String(e))}finally{s(null)}};return i.length===0?null:(0,C.jsx)(`div`,{"data-testid":`suggested-bindings-panel`,className:_(`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,C.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,C.jsx)(p,{className:`h-4 w-4 shrink-0 text-amber-600 dark:text-amber-400`}),(0,C.jsx)(`p`,{className:`flex-1 min-w-0 text-sm text-amber-900 dark:text-amber-200`,children:t.describe(e)}),(0,C.jsx)(m,{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,C.jsx)(m,{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=r(),{appName:t}=n(),{isAdmin:i}=a(),{t:o,language:s}=l(),c=t?`/apps/${t}`:``,[p,h]=(0,S.useState)([]),[_,x]=(0,S.useState)(`local`),[w,T]=(0,S.useState)(!0),[E,D]=(0,S.useState)(null),[O,k]=(0,S.useState)(null),A=async()=>{T(!0);try{let e=await K();e.connected?(x(`cloud`),h(e.items)):(x(`local`),h(await G()))}finally{T(!1)}};(0,S.useEffect)(()=>{A()},[]);let j=async e=>{if(confirm(o(`marketplace.uninstall.confirm`,{manifestId:e.manifestId,version:e.version}))){D(e.manifestId),k(null);try{await q(e.manifestId),k({ok:!0,message:o(`marketplace.uninstall.successInList`,{manifestId:e.manifestId})}),await A()}catch(e){k({ok:!1,message:e?.message??String(e)})}finally{D(null)}}};return i?(0,C.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,C.jsx)(`div`,{className:`flex justify-end`,children:(0,C.jsxs)(m,{variant:`outline`,size:`sm`,onClick:()=>void A(),disabled:w,children:[(0,C.jsx)(b,{className:`h-4 w-4 mr-1.5`,"aria-hidden":`true`}),o(`marketplace.refresh`)]})}),O&&(0,C.jsx)(`div`,{className:`rounded-md border p-3 text-sm ${O.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,C.jsxs)(`div`,{className:`flex items-start gap-2`,children:[(0,C.jsx)(te,{className:`h-4 w-4 mt-0.5 shrink-0`,"aria-hidden":`true`}),(0,C.jsx)(`div`,{children:O.message})]})}),w&&p.length===0?(0,C.jsx)(`div`,{className:`grid gap-3`,children:Array.from({length:3}).map((e,t)=>(0,C.jsx)(g,{className:`h-20 w-full`},t))}):p.length===0?(0,C.jsxs)(`div`,{className:`text-center py-12 text-sm text-muted-foreground border rounded-md`,children:[(0,C.jsx)(`p`,{children:o(`marketplace.installedEmpty`)}),(0,C.jsx)(m,{variant:`link`,className:`mt-2`,onClick:()=>e(`${c}/system/marketplace`),children:o(`marketplace.browseLink`)})]}):(0,C.jsx)(`div`,{className:`grid gap-3`,children:p.map(t=>(0,C.jsxs)(d,{children:[(0,C.jsxs)(v,{className:`flex flex-row items-start justify-between gap-3 pb-2`,children:[(0,C.jsxs)(`div`,{className:`min-w-0`,children:[(0,C.jsxs)(u,{className:`text-base truncate flex items-center gap-2`,children:[t.manifestId,(0,C.jsx)(f,{variant:`outline`,children:o(`marketplace.versionBadge`,{version:t.version})})]}),(0,C.jsxs)(`div`,{className:`text-xs text-muted-foreground mt-1 flex flex-wrap gap-x-3 gap-y-1`,children:[(0,C.jsx)(`span`,{children:o(`marketplace.installedAt`,{when:new Date(t.installedAt).toLocaleString(s||void 0)})}),t.installedBy&&(0,C.jsx)(`span`,{children:o(`marketplace.installedBy`,{user:t.installedBy})}),(0,C.jsxs)(`span`,{children:[o(`marketplace.installedPackageId`),` `,(0,C.jsx)(`code`,{className:`font-mono`,children:t.packageId})]})]})]}),(0,C.jsxs)(`div`,{className:`flex items-center gap-2 shrink-0`,children:[(0,C.jsxs)(m,{variant:`ghost`,size:`sm`,onClick:()=>e(`${c}/system/marketplace/${t.packageId}`),children:[(0,C.jsx)(ne,{className:`h-4 w-4 mr-1.5`,"aria-hidden":`true`}),o(`marketplace.action.details`)]}),_===`local`&&(0,C.jsxs)(m,{variant:`outline`,size:`sm`,onClick:()=>void j(t),disabled:E===t.manifestId,children:[(0,C.jsx)(ee,{className:`h-4 w-4 mr-1.5`,"aria-hidden":`true`}),E===t.manifestId?o(`marketplace.action.uninstalling`):o(`marketplace.action.uninstall`)]})]})]}),_===`local`&&(0,C.jsx)(y,{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,C.jsx)(`p`,{className:`text-xs text-muted-foreground border-t pt-4`,dangerouslySetInnerHTML:{__html:o(`marketplace.installedAdditiveNote`)}})]}):(0,C.jsx)(Y,{})}s.register(`marketplace:installed-list`,()=>(0,C.jsx)($,{}),{namespace:`app-shell`,label:`Installed Marketplace Packages`,category:`plugin`,inputs:[]});export{N as A,ce as C,ue as D,ae as E,L as M,F as O,le as S,P as T,Se as _,_e as a,z as b,pe as c,K as d,G as f,ye as g,Ce as h,ge as i,R as j,ie as k,me as l,be as m,De as n,fe as o,de as p,Y as r,xe as s,$ as t,he as u,ve as v,oe as w,I as x,q as y};
1
+ import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{b as t,h as n,p as r,r as i}from"./vendor-react-CsWFRkED.js";import{h as a,y as o}from"./infrastructure-B4zG1jNa.js";import{ti as s,ur as c}from"./framework-DFE_Mws9.js";import{y as l}from"./i18n-locales-BBA090ve.js";import{Mr as u,Or as d,Pr as f,Qi as p,Si as ee,Xr as m,_o as h,gn as g,il as _,jr as v,kr as y,sc as te,ws as ne,ya as b}from"./ui-components-CMHDBJEm.js";import{r as x}from"./vendor-ui-utils-BFw4cGI6.js";var S=e(t(),1),C=i();function w(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===``||T(i)?null:{dsn:i,sendDefaultPii:r.sendDefaultPii===!0,...typeof r.environment==`string`&&r.environment.trim()?{environment:r.environment.trim()}:{},tracesSampleRate:E(r.tracesSampleRate,D),replaysOnErrorSampleRate:E(r.replaysOnErrorSampleRate,O)}}function T(e){try{return new URL(e).password!==``}catch{return!1}}function E(e,t){return typeof e==`number`&&Number.isFinite(e)&&e>=0&&e<=1?e:t}var D=.1,O=0,k={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:{}},A=[`preview`,`beta`,`ga`];function j(e){return typeof e==`string`&&A.includes(e)}var M={...k};function re(e){M={...M,...e,features:{...M.features,...e.features??{}},branding:{...M.branding,...e.branding??{}},telemetry:e.telemetry?{...e.telemetry}:M.telemetry}}async function N(e=``){let t=(e||``).replace(/\/+$/,``);try{let e=await c(`${t}/api/v1/runtime/config`,{credentials:`include`,headers:{Accept:`application/json`}});if(!e||typeof e!=`object`)return;re({cloudUrl:typeof e.cloudUrl==`string`?e.cloudUrl.replace(/\/+$/,``):M.cloudUrl,singleEnvironment:!!e.singleEnvironment,defaultOrgId:e.defaultOrgId??M.defaultOrgId??null,defaultEnvironmentId:e.defaultEnvironmentId??M.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}:M.features,telemetry:(()=>{let t=w(e);return t?{errorReporting:t}:{}})(),branding:e.branding?{productName:typeof e.branding.productName==`string`&&e.branding.productName.trim()?e.branding.productName.trim():M.branding.productName,productShortName:typeof e.branding.productShortName==`string`&&e.branding.productShortName.trim()?e.branding.productShortName.trim():M.branding.productShortName,stage:j(e.branding.stage)?e.branding.stage:M.branding.stage,logoUrl:typeof e.branding.logoUrl==`string`&&e.branding.logoUrl.trim()?e.branding.logoUrl.trim():M.branding.logoUrl,faviconUrl:typeof e.branding.faviconUrl==`string`&&e.branding.faviconUrl.trim()?e.branding.faviconUrl.trim():M.branding.faviconUrl,brandColor:typeof e.branding.brandColor==`string`&&e.branding.brandColor.trim()?e.branding.brandColor.trim():M.branding.brandColor,pwaDescription:typeof e.branding.pwaDescription==`string`&&e.branding.pwaDescription.trim()?e.branding.pwaDescription.trim():M.branding.pwaDescription,pwaThemeColor:typeof e.branding.pwaThemeColor==`string`&&e.branding.pwaThemeColor.trim()?e.branding.pwaThemeColor.trim():M.branding.pwaThemeColor}:M.branding})}catch{}}function ie(){return M}function P(){return M.branding?.productName||`ObjectOS`}function ae(){return M.branding?.productShortName||P()}function oe(){return M.branding?.stage??`preview`}function se(){return M.branding?.brandColor||`#4F46E5`}function ce(){return M.branding?.logoUrl}function le(){return M.branding?.faviconUrl}function ue(){return M.branding?.pwaDescription||`${P()} — runtime console`}function F(){return M.branding?.pwaThemeColor||se()}function I(){return M.cloudUrl??``}function L(){return M.features?.marketplace!==!1}function R(){return M.features?.aiStudio!==!1}function z(){return M.telemetry?.errorReporting??null}var B=``.replace(/\/$/,``),V=`${B}/api/v1/marketplace`;function H(e){let t=o.get();return t?{...e,Authorization:`Bearer ${t}`}:e}function U(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 W(e,t){let n=await fetch(`${V}${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}=U(r,n),i=Error(typeof t==`string`?t:`${e}`);throw i.code=e,i.status=n.status,i}return r?.data??r}async function de(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 W(`/packages${n?`?${n}`:``}`)}async function fe(e){return W(`/packages/${encodeURIComponent(e)}`)}async function pe(e){if(I()){let t=await fetch(`/api/v1/cloud-connection/install`,{method:`POST`,credentials:`include`,headers:H({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}=U(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(`${B}/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=U(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 me(){let e=I()||B,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 he(){let e=I()||B,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 ge(){return I()}async function _e(e,t){if(!e)return null;if(I())try{let t=await fetch(`/api/v1/cloud-connection/installation?package_id=${encodeURIComponent(e)}`,{credentials:`include`,headers:H({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=B;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 ve(e){if(!e)return{ok:!1,error:`installation id required`};let t=I()||B;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(()=>({}));return!n.ok||r?.success===!1?{ok:!1,error:U(r,n).message}:{ok:!0}}catch(e){return{ok:!1,error:e?.message||`Network error`}}}async function ye(e){if(!e)return{ok:!1,error:`installation id required`};let t=I()||B;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(()=>({}));return!n.ok||r?.success===!1?{ok:!1,error:U(r,n).message}:{ok:!0,deleted:Number(r?.data?.deleted??0)}}catch(e){return{ok:!1,error:e?.message||`Network error`}}}async function be(){try{let e=await fetch(`${B}/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 xe(e){let t=await fetch(`${V}/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}=U(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(`${V}/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(`${B}/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(`${V}/install-local/${encodeURIComponent(e)}`,{method:`DELETE`,credentials:`include`,headers:{Accept:`application/json`}});if(!t.ok){let e=await t.json().catch(()=>({}));throw Error(U(e,t).message)}}async function J(e,t){let n=await fetch(`${V}/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 Se(e){return J(e,`reseed`)}function Ce(e){return J(e,`purge`)}function Y(){let e=r(),{appName:t}=n(),{t:i}=l(),a=t?`/apps/${t}`:`/`;return(0,C.jsx)(`div`,{className:`container mx-auto max-w-2xl px-6 py-16`,children:(0,C.jsx)(d,{children:(0,C.jsxs)(y,{className:`flex flex-col items-center gap-4 py-12 text-center`,children:[(0,C.jsx)(`div`,{className:`rounded-full bg-muted p-3`,children:(0,C.jsx)(h,{className:`h-6 w-6 text-muted-foreground`})}),(0,C.jsxs)(`div`,{children:[(0,C.jsx)(`h2`,{className:`text-lg font-semibold`,children:i(`marketplace.accessDenied.title`)}),(0,C.jsx)(`p`,{className:`mt-1 text-sm text-muted-foreground`,children:i(`marketplace.accessDenied.description`)})]}),(0,C.jsx)(m,{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 we(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 Te(e){return(await Q(await fetch(`${X}/${encodeURIComponent(e)}/confirm`,{method:`POST`,credentials:`include`,headers:Z({"Content-Type":`application/json`})})))?.suggestion}async function Ee(e){return(await Q(await fetch(`${X}/${encodeURIComponent(e)}/dismiss`,{method:`POST`,credentials:`include`,headers:Z({"Content-Type":`application/json`})})))?.suggestion}function De({packageId:e,strings:t,className:n,onResolved:r}){let[i,a]=(0,S.useState)([]),[o,s]=(0,S.useState)(null),c=(0,S.useCallback)(()=>{let t=!1;return we({status:`pending`,...e?{packageId:e}:{}}).then(e=>{t||a(e)}).catch(()=>{}),()=>{t=!0}},[e]);(0,S.useEffect)(()=>c(),[c]);let l=async(e,n)=>{s(e.id);try{let i=n===`confirm`?await Te(e.id):await Ee(e.id);a(t=>t.filter(t=>t.id!==e.id)),x.success(n===`confirm`?t.confirmedToast(e):t.dismissedToast(e)),r?.(i??e)}catch(e){x.error(e?.message??String(e))}finally{s(null)}};return i.length===0?null:(0,C.jsx)(`div`,{"data-testid":`suggested-bindings-panel`,className:_(`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,C.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,C.jsx)(p,{className:`h-4 w-4 shrink-0 text-amber-600 dark:text-amber-400`}),(0,C.jsx)(`p`,{className:`flex-1 min-w-0 text-sm text-amber-900 dark:text-amber-200`,children:t.describe(e)}),(0,C.jsx)(m,{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,C.jsx)(m,{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=r(),{appName:t}=n(),{isAdmin:i}=a(),{t:o,language:s}=l(),c=t?`/apps/${t}`:``,[p,h]=(0,S.useState)([]),[_,x]=(0,S.useState)(`local`),[w,T]=(0,S.useState)(!0),[E,D]=(0,S.useState)(null),[O,k]=(0,S.useState)(null),A=async()=>{T(!0);try{let e=await K();e.connected?(x(`cloud`),h(e.items)):(x(`local`),h(await G()))}finally{T(!1)}};(0,S.useEffect)(()=>{A()},[]);let j=async e=>{if(confirm(o(`marketplace.uninstall.confirm`,{manifestId:e.manifestId,version:e.version}))){D(e.manifestId),k(null);try{await q(e.manifestId),k({ok:!0,message:o(`marketplace.uninstall.successInList`,{manifestId:e.manifestId})}),await A()}catch(e){k({ok:!1,message:e?.message??String(e)})}finally{D(null)}}};return i?(0,C.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,C.jsx)(`div`,{className:`flex justify-end`,children:(0,C.jsxs)(m,{variant:`outline`,size:`sm`,onClick:()=>void A(),disabled:w,children:[(0,C.jsx)(b,{className:`h-4 w-4 mr-1.5`,"aria-hidden":`true`}),o(`marketplace.refresh`)]})}),O&&(0,C.jsx)(`div`,{className:`rounded-md border p-3 text-sm ${O.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,C.jsxs)(`div`,{className:`flex items-start gap-2`,children:[(0,C.jsx)(te,{className:`h-4 w-4 mt-0.5 shrink-0`,"aria-hidden":`true`}),(0,C.jsx)(`div`,{children:O.message})]})}),w&&p.length===0?(0,C.jsx)(`div`,{className:`grid gap-3`,children:Array.from({length:3}).map((e,t)=>(0,C.jsx)(g,{className:`h-20 w-full`},t))}):p.length===0?(0,C.jsxs)(`div`,{className:`text-center py-12 text-sm text-muted-foreground border rounded-md`,children:[(0,C.jsx)(`p`,{children:o(`marketplace.installedEmpty`)}),(0,C.jsx)(m,{variant:`link`,className:`mt-2`,onClick:()=>e(`${c}/system/marketplace`),children:o(`marketplace.browseLink`)})]}):(0,C.jsx)(`div`,{className:`grid gap-3`,children:p.map(t=>(0,C.jsxs)(d,{children:[(0,C.jsxs)(v,{className:`flex flex-row items-start justify-between gap-3 pb-2`,children:[(0,C.jsxs)(`div`,{className:`min-w-0`,children:[(0,C.jsxs)(u,{className:`text-base truncate flex items-center gap-2`,children:[t.manifestId,(0,C.jsx)(f,{variant:`outline`,children:o(`marketplace.versionBadge`,{version:t.version})})]}),(0,C.jsxs)(`div`,{className:`text-xs text-muted-foreground mt-1 flex flex-wrap gap-x-3 gap-y-1`,children:[(0,C.jsx)(`span`,{children:o(`marketplace.installedAt`,{when:new Date(t.installedAt).toLocaleString(s||void 0)})}),t.installedBy&&(0,C.jsx)(`span`,{children:o(`marketplace.installedBy`,{user:t.installedBy})}),(0,C.jsxs)(`span`,{children:[o(`marketplace.installedPackageId`),` `,(0,C.jsx)(`code`,{className:`font-mono`,children:t.packageId})]})]})]}),(0,C.jsxs)(`div`,{className:`flex items-center gap-2 shrink-0`,children:[(0,C.jsxs)(m,{variant:`ghost`,size:`sm`,onClick:()=>e(`${c}/system/marketplace/${t.packageId}`),children:[(0,C.jsx)(ne,{className:`h-4 w-4 mr-1.5`,"aria-hidden":`true`}),o(`marketplace.action.details`)]}),_===`local`&&(0,C.jsxs)(m,{variant:`outline`,size:`sm`,onClick:()=>void j(t),disabled:E===t.manifestId,children:[(0,C.jsx)(ee,{className:`h-4 w-4 mr-1.5`,"aria-hidden":`true`}),E===t.manifestId?o(`marketplace.action.uninstalling`):o(`marketplace.action.uninstall`)]})]})]}),_===`local`&&(0,C.jsx)(y,{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,C.jsx)(`p`,{className:`text-xs text-muted-foreground border-t pt-4`,dangerouslySetInnerHTML:{__html:o(`marketplace.installedAdditiveNote`)}})]}):(0,C.jsx)(Y,{})}s.register(`marketplace:installed-list`,()=>(0,C.jsx)($,{}),{namespace:`app-shell`,label:`Installed Marketplace Packages`,category:`plugin`,inputs:[]});export{N as A,ce as C,ue as D,ae as E,L as M,F as O,le as S,P as T,Se as _,_e as a,z as b,pe as c,K as d,G as f,ye as g,Ce as h,ge as i,R as j,ie as k,me as l,be as m,De as n,fe as o,de as p,Y as r,xe as s,$ as t,he as u,ve as v,oe as w,I as x,q as y};