cognova 0.2.13 → 0.2.14

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 (386) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/_nuxt/-mGU8_Hv.js +1 -0
  3. package/.output/public/_nuxt/0GqCtQ9S.js +1 -0
  4. package/.output/public/_nuxt/{DFpmIy6J.js → 1wCoXZ14.js} +1 -1
  5. package/.output/public/_nuxt/2J1KxdHv.js +1 -0
  6. package/.output/public/_nuxt/6VDUZECX.js +1 -0
  7. package/.output/public/_nuxt/{C7m9zGMG.js → 8WMJQbWG.js} +1 -1
  8. package/.output/public/_nuxt/9Rw88G6h.js +1 -0
  9. package/.output/public/_nuxt/{BjsKx597.js → B-yW4SD3.js} +1 -1
  10. package/.output/public/_nuxt/B20jNAhm.js +1 -0
  11. package/.output/public/_nuxt/B3OpTH_e.js +1 -0
  12. package/.output/public/_nuxt/B9Y3_B5G.js +1 -0
  13. package/.output/public/_nuxt/B9_vmatf.js +1 -0
  14. package/.output/public/_nuxt/B9o6sFST.js +1 -0
  15. package/.output/public/_nuxt/{CseYuM6E.js → BAY3_Hrq.js} +1 -1
  16. package/.output/public/_nuxt/{B_9zJTqe.js → BD5rPkc2.js} +3 -3
  17. package/.output/public/_nuxt/BGYoW3kO.js +1 -0
  18. package/.output/public/_nuxt/BHUy5EAj.js +1 -0
  19. package/.output/public/_nuxt/BLdMRpJD.js +1 -0
  20. package/.output/public/_nuxt/{D6tVZcRs.js → BOCn_SGf.js} +12 -12
  21. package/.output/public/_nuxt/BQi8LIrn.js +1 -0
  22. package/.output/public/_nuxt/BS1t375R.js +1 -0
  23. package/.output/public/_nuxt/BTGeP1bA.js +1 -0
  24. package/.output/public/_nuxt/{pdYvpiud.js → BVYYP4eQ.js} +5 -5
  25. package/.output/public/_nuxt/BWQ7zE01.js +1 -0
  26. package/.output/public/_nuxt/BWqJInD3.js +1 -0
  27. package/.output/public/_nuxt/BXdQ9ASJ.js +1 -0
  28. package/.output/public/_nuxt/{DQhm-UPG.js → BXxZokD_.js} +2 -2
  29. package/.output/public/_nuxt/BZ7DAtPi.js +1 -0
  30. package/.output/public/_nuxt/BZm9w7en.js +1 -0
  31. package/.output/public/_nuxt/B_hNqC64.js +1 -0
  32. package/.output/public/_nuxt/Be47YE2L.js +1 -0
  33. package/.output/public/_nuxt/BgIS9_ti.js +39 -0
  34. package/.output/public/_nuxt/BgavRUl_.js +1 -0
  35. package/.output/public/_nuxt/Bh0yGTzr.js +1 -0
  36. package/.output/public/_nuxt/BhhMUror.js +1 -0
  37. package/.output/public/_nuxt/Bj5e7QPz.js +1 -0
  38. package/.output/public/_nuxt/{9kAKMaPC.js → Bnn59-FS.js} +1 -1
  39. package/.output/public/_nuxt/BoCU3mWu.js +1 -0
  40. package/.output/public/_nuxt/Br6epbzY.js +1 -0
  41. package/.output/public/_nuxt/Br81Sr2R.js +1 -0
  42. package/.output/public/_nuxt/BrkEOLHu.js +9 -0
  43. package/.output/public/_nuxt/BtrNCc2S.js +1 -0
  44. package/.output/public/_nuxt/BxsQlbgl.js +1 -0
  45. package/.output/public/_nuxt/BzrhNhdT.js +1 -0
  46. package/.output/public/_nuxt/{B-DMcEU9.js → C-78dDNd.js} +1 -1
  47. package/.output/public/_nuxt/C1oaoi1p.js +1 -0
  48. package/.output/public/_nuxt/C2-_hcwB.js +1 -0
  49. package/.output/public/_nuxt/{TxMdabnL.js → C2Gh3qqr.js} +1 -1
  50. package/.output/public/_nuxt/C2OHaW6l.js +1 -0
  51. package/.output/public/_nuxt/C3szZmvA.js +1 -0
  52. package/.output/public/_nuxt/C3xzleKP.js +1 -0
  53. package/.output/public/_nuxt/C4sG6rdW.js +1 -0
  54. package/.output/public/_nuxt/C5Cu9Fx6.js +1 -0
  55. package/.output/public/_nuxt/{LRO7YHoH.js → C5gfF7J1.js} +1 -1
  56. package/.output/public/_nuxt/C6Eoiclo.js +1 -0
  57. package/.output/public/_nuxt/C7hFztZL.js +1 -0
  58. package/.output/public/_nuxt/CAVUAxNU.js +2 -0
  59. package/.output/public/_nuxt/{CiNxIhaq.js → CCeM5lW2.js} +1 -1
  60. package/.output/public/_nuxt/CDcQ31Eh.js +1 -0
  61. package/.output/public/_nuxt/CHbHVtCy.js +1 -0
  62. package/.output/public/_nuxt/CHnVFnBW.js +1 -0
  63. package/.output/public/_nuxt/CLNcmNQS.js +1 -0
  64. package/.output/public/_nuxt/{D7N3EZ-I.js → CPwCTHun.js} +1 -1
  65. package/.output/public/_nuxt/{CFmvNggn.js → CS8SdmH2.js} +1 -1
  66. package/.output/public/_nuxt/CTGm_mc8.js +1 -0
  67. package/.output/public/_nuxt/{DNcOC5zj.js → CTQFGHjS.js} +1 -1
  68. package/.output/public/_nuxt/{B0nzD8Sk.js → CVVtVzXC.js} +1 -1
  69. package/.output/public/_nuxt/CZNOaqeX.js +1 -0
  70. package/.output/public/_nuxt/C_A_NkeC.js +2 -0
  71. package/.output/public/_nuxt/{CGplHfmR.js → C_doutX-.js} +1 -1
  72. package/.output/public/_nuxt/{BrX-PnSK.js → CbDLhrNA.js} +2 -2
  73. package/.output/public/_nuxt/CePKCqSb.js +1 -0
  74. package/.output/public/_nuxt/Cet4T_yO.js +1 -0
  75. package/.output/public/_nuxt/{C6OSRpRd.js → CjJPkhbc.js} +1 -1
  76. package/.output/public/_nuxt/CkZT4LGq.js +1 -0
  77. package/.output/public/_nuxt/CkrW8sGL.js +1 -0
  78. package/.output/public/_nuxt/Co0UxVsx.js +1 -0
  79. package/.output/public/_nuxt/CqS0zXYQ.js +1 -0
  80. package/.output/public/_nuxt/CskGv_Km.js +1 -0
  81. package/.output/public/_nuxt/{DuzpliIL.js → CuvkTsqs.js} +1 -1
  82. package/.output/public/_nuxt/{B2wI_pYg.js → CxMuZEwX.js} +1 -1
  83. package/.output/public/_nuxt/{9O1MXkck.js → CxSijT71.js} +8 -8
  84. package/.output/public/_nuxt/Cywo6tZI.js +1 -0
  85. package/.output/public/_nuxt/D1reIfpX.js +1 -0
  86. package/.output/public/_nuxt/D1uV2uir.js +1 -0
  87. package/.output/public/_nuxt/{BWuL2CzO.js → D2edadpd.js} +1 -1
  88. package/.output/public/_nuxt/D3cEeQh7.js +1 -0
  89. package/.output/public/_nuxt/D41A2mE2.js +1 -0
  90. package/.output/public/_nuxt/D49P2RhG.js +1 -0
  91. package/.output/public/_nuxt/D867g6Ds.js +1 -0
  92. package/.output/public/_nuxt/DEFWIjWl.js +1 -0
  93. package/.output/public/_nuxt/DFTEBTzZ.js +1 -0
  94. package/.output/public/_nuxt/{-HePz7lp.js → DHRexj9X.js} +2 -2
  95. package/.output/public/_nuxt/DL4EpgqQ.js +1 -0
  96. package/.output/public/_nuxt/DLHnP6tw.js +1 -0
  97. package/.output/public/_nuxt/DM20WaLq.js +1 -0
  98. package/.output/public/_nuxt/{B8DFEjxA.js → DNAMjHbb.js} +1 -1
  99. package/.output/public/_nuxt/{CLkkdThv.js → DP8t9VWs.js} +24 -24
  100. package/.output/public/_nuxt/DTR31rjp.js +1 -0
  101. package/.output/public/_nuxt/{Bc8bTnkd.js → DTlSLSo1.js} +3 -3
  102. package/.output/public/_nuxt/{DowkFZ2V.js → DVdnhfXT.js} +1 -1
  103. package/.output/public/_nuxt/{DvHS7_h2.js → DZikIgHK.js} +1 -1
  104. package/.output/public/_nuxt/D_YGqvw_.js +1 -0
  105. package/.output/public/_nuxt/D_k1YwXm.js +1 -0
  106. package/.output/public/_nuxt/Daf2MbWG.js +7 -0
  107. package/.output/public/_nuxt/DcJ0GstJ.js +1 -0
  108. package/.output/public/_nuxt/DcYKh6QA.js +1 -0
  109. package/.output/public/_nuxt/DhN3_DYH.js +1 -0
  110. package/.output/public/_nuxt/DhSvBSt3.js +1 -0
  111. package/.output/public/_nuxt/DhlIWT8K.js +1 -0
  112. package/.output/public/_nuxt/DjsqyRqt.js +1 -0
  113. package/.output/public/_nuxt/DpSM97eH.js +1 -0
  114. package/.output/public/_nuxt/DqR9SdeU.js +1 -0
  115. package/.output/public/_nuxt/DqmQtg6Y.js +1 -0
  116. package/.output/public/_nuxt/Dsuag_iW.js +1 -0
  117. package/.output/public/_nuxt/Dtr_0IbE.js +1 -0
  118. package/.output/public/_nuxt/DwrmFEZN.js +1 -0
  119. package/.output/public/_nuxt/DxE8r3r4.js +1 -0
  120. package/.output/public/_nuxt/G_CsVlOR.js +1 -0
  121. package/.output/public/_nuxt/Gyw_2f6x.js +1 -0
  122. package/.output/public/_nuxt/HStC1ZyE.js +1 -0
  123. package/.output/public/_nuxt/Hh9mv0Ek.js +1 -0
  124. package/.output/public/_nuxt/LR0kCjbe.js +1 -0
  125. package/.output/public/_nuxt/MYeLvJGV.js +1 -0
  126. package/.output/public/_nuxt/NKs0EGrh.js +1 -0
  127. package/.output/public/_nuxt/PY5EGujn.js +1 -0
  128. package/.output/public/_nuxt/PamJNol9.js +1 -0
  129. package/.output/public/_nuxt/RlvwEbHv.js +1 -0
  130. package/.output/public/_nuxt/{BghuwIGa.js → TNpdJOlc.js} +1 -1
  131. package/.output/public/_nuxt/TSYrPbLR.js +1 -0
  132. package/.output/public/_nuxt/U-eBrbR4.js +1 -0
  133. package/.output/public/_nuxt/UuqXScSw.js +1 -0
  134. package/.output/public/_nuxt/V04-MrLN.js +1 -0
  135. package/.output/public/_nuxt/X0o5GcBb.js +1 -0
  136. package/.output/public/_nuxt/XQNzmQy9.js +1 -0
  137. package/.output/public/_nuxt/Y59XKprr.js +1 -0
  138. package/.output/public/_nuxt/YZQjZgsH.js +1 -0
  139. package/.output/public/_nuxt/_-TGPiLQ.js +1 -0
  140. package/.output/public/_nuxt/builds/latest.json +1 -1
  141. package/.output/public/_nuxt/builds/meta/d7188f50-b42c-4d2c-afab-066d318f0af8.json +1 -0
  142. package/.output/public/_nuxt/dashboard.ByJQ-Wzh.css +1 -0
  143. package/.output/public/_nuxt/entry.ZJxWCrU6.css +1 -0
  144. package/.output/public/_nuxt/{D12qPplu.js → hCeWb_38.js} +1 -1
  145. package/.output/public/_nuxt/{sBzyvWMJ.js → hrPTRWjM.js} +1 -1
  146. package/.output/public/_nuxt/jC4pIK1p.js +1 -0
  147. package/.output/public/_nuxt/jTT1R-Vz.js +1 -0
  148. package/.output/public/_nuxt/{CRRw0Thu.js → kkAMoB43.js} +1 -1
  149. package/.output/public/_nuxt/{h_bXa-f2.js → mzM4BGtv.js} +1 -1
  150. package/.output/public/_nuxt/o-s8JBm2.js +1 -0
  151. package/.output/public/_nuxt/pwJTkIQ4.js +1 -0
  152. package/.output/public/_nuxt/{BL1mkqgd.js → rIgg2Arf.js} +3 -3
  153. package/.output/public/_nuxt/subdxgSQ.js +1 -0
  154. package/.output/public/_nuxt/t8B72leH.js +1 -0
  155. package/.output/public/_nuxt/vCFAHwdt.js +1 -0
  156. package/.output/public/_nuxt/z-MP0bB7.js +1 -0
  157. package/.output/server/chunks/build/CodeIcon-CWD5HcV7.mjs +1 -1
  158. package/.output/server/chunks/build/DropdownMenu-BBrV9nXz.mjs +1 -1
  159. package/.output/server/chunks/build/{EditorToolbar-DIfb5arC.mjs → EditorToolbar-B9OwSI5e.mjs} +3 -3
  160. package/.output/server/chunks/build/{EditorToolbar-DIfb5arC.mjs.map → EditorToolbar-B9OwSI5e.mjs.map} +1 -1
  161. package/.output/server/chunks/build/Img-CWLmvN1t.mjs +1 -1
  162. package/.output/server/chunks/build/MDC-Dx0YPDhe.mjs +1 -1
  163. package/.output/server/chunks/build/Select-BB1oLrCD.mjs +1 -1
  164. package/.output/server/chunks/build/SelectMenu-DPssg6zD.mjs +1 -1
  165. package/.output/server/chunks/build/Table-DCwTlhCj.mjs +1 -1
  166. package/.output/server/chunks/build/Tooltip-TRyl6dje.mjs +1 -1
  167. package/.output/server/chunks/build/Tree-DUhXKd8y.mjs +1 -1
  168. package/.output/server/chunks/build/{_id_-DN00UDdO.mjs → _id_-CwBeklIM.mjs} +296 -430
  169. package/.output/server/chunks/build/_id_-CwBeklIM.mjs.map +1 -0
  170. package/.output/server/chunks/build/{_name_-BnS_KEfX.mjs → _name_-D7MtW4Vu.mjs} +2 -2
  171. package/.output/server/chunks/build/{_name_-BnS_KEfX.mjs.map → _name_-D7MtW4Vu.mjs.map} +1 -1
  172. package/.output/server/chunks/build/{_uuid_-DfJaumTE.mjs → _uuid_-lvG92ein.mjs} +4 -4
  173. package/.output/server/chunks/build/{_uuid_-DfJaumTE.mjs.map → _uuid_-lvG92ein.mjs.map} +1 -1
  174. package/.output/server/chunks/build/account-LDZ4TL6x.mjs +513 -0
  175. package/.output/server/chunks/build/account-LDZ4TL6x.mjs.map +1 -0
  176. package/.output/server/chunks/build/app-CGhRZPNT.mjs +252 -0
  177. package/.output/server/chunks/build/app-CGhRZPNT.mjs.map +1 -0
  178. package/.output/server/chunks/build/{chat-m4-n9vC6.mjs → chat-BphuYhvA.mjs} +18 -27
  179. package/.output/server/chunks/build/chat-BphuYhvA.mjs.map +1 -0
  180. package/.output/server/chunks/build/client.precomputed.mjs +1 -1
  181. package/.output/server/chunks/build/cookie-C_iulBi6.mjs +1 -1
  182. package/.output/server/chunks/build/{dashboard-CiVTAZuF.mjs → dashboard-nDujDyOg.mjs} +55 -16
  183. package/.output/server/chunks/build/{dashboard-CiVTAZuF.mjs.map → dashboard-nDujDyOg.mjs.map} +1 -1
  184. package/.output/server/chunks/build/{docs-ChGwOPg5.mjs → docs-Bwucwp0r.mjs} +664 -592
  185. package/.output/server/chunks/build/docs-Bwucwp0r.mjs.map +1 -0
  186. package/.output/server/chunks/build/fetch-BB7Qzkwe.mjs +1 -1
  187. package/.output/server/chunks/build/{hooks-D328DcO6.mjs → hooks-D6PmTth8.mjs} +19 -29
  188. package/.output/server/chunks/build/hooks-D6PmTth8.mjs.map +1 -0
  189. package/.output/server/chunks/build/{index-CAnGTRlu.mjs → index-CJkn2jiM.mjs} +2 -2
  190. package/.output/server/chunks/build/{index-CAnGTRlu.mjs.map → index-CJkn2jiM.mjs.map} +1 -1
  191. package/.output/server/chunks/build/index-CxDxc9fm.mjs +1 -1
  192. package/.output/server/chunks/build/index-Cz9Y6NwN.mjs +723 -0
  193. package/.output/server/chunks/build/index-Cz9Y6NwN.mjs.map +1 -0
  194. package/.output/server/chunks/build/index-hwhuKhuZ.mjs +76 -0
  195. package/.output/server/chunks/build/index-hwhuKhuZ.mjs.map +1 -0
  196. package/.output/server/chunks/build/integrations-D5JWURiJ.mjs +1499 -0
  197. package/.output/server/chunks/build/integrations-D5JWURiJ.mjs.map +1 -0
  198. package/.output/server/chunks/build/{library-Aeg7_Lsb.mjs → library-DxRdgP6X.mjs} +2 -2
  199. package/.output/server/chunks/build/{library-Aeg7_Lsb.mjs.map → library-DxRdgP6X.mjs.map} +1 -1
  200. package/.output/server/chunks/build/{login-DnnElTl2.mjs → login-BmER_VoU.mjs} +2 -2
  201. package/.output/server/chunks/build/{login-DnnElTl2.mjs.map → login-BmER_VoU.mjs.map} +1 -1
  202. package/.output/server/chunks/build/manage-secrets-BWzqc_-f.mjs +669 -0
  203. package/.output/server/chunks/build/manage-secrets-BWzqc_-f.mjs.map +1 -0
  204. package/.output/server/chunks/build/server.mjs +65 -34
  205. package/.output/server/chunks/build/server.mjs.map +1 -1
  206. package/.output/server/chunks/build/settings-neokAVE5.mjs +154 -0
  207. package/.output/server/chunks/build/settings-neokAVE5.mjs.map +1 -0
  208. package/.output/server/chunks/build/styles.mjs +2 -2
  209. package/.output/server/chunks/build/{tasks-DnAFqbtt.mjs → tasks-CnpIQNpS.mjs} +27 -37
  210. package/.output/server/chunks/build/tasks-CnpIQNpS.mjs.map +1 -0
  211. package/.output/server/chunks/build/{useAgents-DHEXiFSc.mjs → useAgents-nmbkB9-_.mjs} +5 -26
  212. package/.output/server/chunks/build/useAgents-nmbkB9-_.mjs.map +1 -0
  213. package/.output/server/chunks/build/{view-n2sYa4Zh.mjs → view-mb0ISqfM.mjs} +3 -3
  214. package/.output/server/chunks/build/{view-n2sYa4Zh.mjs.map → view-mb0ISqfM.mjs.map} +1 -1
  215. package/.output/server/chunks/nitro/nitro.mjs +1000 -858
  216. package/.output/server/chunks/nitro/nitro.mjs.map +1 -1
  217. package/.output/server/chunks/routes/api/index.get.mjs +17 -2
  218. package/.output/server/chunks/routes/api/index.get.mjs.map +1 -1
  219. package/.output/server/chunks/routes/api/index.get3.mjs +21 -3
  220. package/.output/server/chunks/routes/api/index.get3.mjs.map +1 -1
  221. package/.output/server/chunks/routes/api/index.get4.mjs +10 -9
  222. package/.output/server/chunks/routes/api/index.get4.mjs.map +1 -1
  223. package/.output/server/chunks/routes/api/index.get9.mjs +10 -8
  224. package/.output/server/chunks/routes/api/index.get9.mjs.map +1 -1
  225. package/.output/server/chunks/routes/api/memory/search.get.mjs +10 -5
  226. package/.output/server/chunks/routes/api/memory/search.get.mjs.map +1 -1
  227. package/.output/server/chunks/routes/renderer.mjs +1 -1
  228. package/.output/server/index.mjs +1 -1
  229. package/.output/server/package.json +1 -1
  230. package/app/components/AssistantPanel.client.vue +16 -314
  231. package/app/components/agents/AgentCard.vue +111 -0
  232. package/app/components/agents/AgentInfoCard.vue +54 -0
  233. package/app/components/agents/AgentRunHistory.vue +103 -0
  234. package/app/components/agents/AgentRunModal.vue +1 -24
  235. package/app/components/agents/AgentStatsCards.vue +1 -26
  236. package/app/components/assistant/AssistantChat.vue +156 -0
  237. package/app/components/assistant/AssistantTerminal.client.vue +178 -0
  238. package/app/components/chat/ConversationList.vue +2 -12
  239. package/app/components/files/FileTree.vue +23 -202
  240. package/app/components/files/FileTreeModals.vue +226 -0
  241. package/app/components/hooks/HookStatsCards.vue +1 -6
  242. package/app/components/hooks/ToolBreakdownTable.vue +1 -6
  243. package/app/components/search/DashboardSearch.vue +38 -1
  244. package/app/components/tasks/TaskCard.vue +2 -7
  245. package/app/components/tasks/TaskDetail.vue +4 -9
  246. package/app/composables/useSearch.ts +21 -11
  247. package/app/layouts/dashboard.vue +1 -1
  248. package/app/pages/agents/[id].vue +6 -197
  249. package/app/pages/agents/index.vue +9 -142
  250. package/app/pages/settings/account.vue +243 -0
  251. package/app/pages/settings/app.vue +230 -0
  252. package/app/pages/settings/index.vue +12 -0
  253. package/app/pages/settings/integrations.vue +794 -0
  254. package/app/pages/settings/manage-secrets.vue +295 -0
  255. package/app/pages/settings.vue +20 -1581
  256. package/dist/cli/index.js +26 -2
  257. package/package.json +1 -1
  258. package/server/api/agents/index.get.ts +20 -1
  259. package/server/api/conversations/index.get.ts +23 -5
  260. package/server/api/documents/index.get.ts +11 -9
  261. package/server/api/memory/search.get.ts +11 -6
  262. package/server/api/tasks/index.get.ts +11 -9
  263. package/server/drizzle/migrations/0016_full_text_search.sql +127 -0
  264. package/server/drizzle/migrations/meta/_journal.json +7 -0
  265. package/shared/types/index.ts +7 -1
  266. package/shared/utils/formatting.ts +105 -0
  267. package/.output/public/_nuxt/4ALIM-zZ.js +0 -1
  268. package/.output/public/_nuxt/5sUbkh_6.js +0 -16
  269. package/.output/public/_nuxt/6bB8Ev7a.js +0 -1
  270. package/.output/public/_nuxt/7rT1DCe2.js +0 -1
  271. package/.output/public/_nuxt/B2PqR2Vu.js +0 -1
  272. package/.output/public/_nuxt/B5FuOh7E.js +0 -1
  273. package/.output/public/_nuxt/B6om4MW2.js +0 -1
  274. package/.output/public/_nuxt/B7ikW4eF.js +0 -1
  275. package/.output/public/_nuxt/B9kWNcU7.js +0 -1
  276. package/.output/public/_nuxt/BAZ8sewA.js +0 -1
  277. package/.output/public/_nuxt/BCPwL4ma.js +0 -1
  278. package/.output/public/_nuxt/BCrlmHh_.js +0 -1
  279. package/.output/public/_nuxt/BD-AFJWW.js +0 -1
  280. package/.output/public/_nuxt/BGcQMReV.js +0 -1
  281. package/.output/public/_nuxt/BNJJSRKh.js +0 -1
  282. package/.output/public/_nuxt/BNeeERBt.js +0 -1
  283. package/.output/public/_nuxt/BSJb5amZ.js +0 -1
  284. package/.output/public/_nuxt/BSsaE9Db.js +0 -1
  285. package/.output/public/_nuxt/BVO3XpHT.js +0 -1
  286. package/.output/public/_nuxt/B_Lr1vlV.js +0 -1
  287. package/.output/public/_nuxt/Bl0qBhCG.js +0 -1
  288. package/.output/public/_nuxt/Bl43dkDq.js +0 -1
  289. package/.output/public/_nuxt/BnMTFF5R.js +0 -1
  290. package/.output/public/_nuxt/BtV7oNn3.js +0 -1
  291. package/.output/public/_nuxt/BvFYnRMR.js +0 -1
  292. package/.output/public/_nuxt/BvTUBUNN.js +0 -1
  293. package/.output/public/_nuxt/ByLsRRoQ.js +0 -1
  294. package/.output/public/_nuxt/C1LcEMwB.js +0 -1
  295. package/.output/public/_nuxt/C2IiXp9N.js +0 -2
  296. package/.output/public/_nuxt/C796kFT9.js +0 -1
  297. package/.output/public/_nuxt/C8AtdrMH.js +0 -1
  298. package/.output/public/_nuxt/CAWbHTgy.js +0 -1
  299. package/.output/public/_nuxt/CJPrV25_.js +0 -1
  300. package/.output/public/_nuxt/CKKEWapF.js +0 -1
  301. package/.output/public/_nuxt/CNjv28J2.js +0 -1
  302. package/.output/public/_nuxt/CT8s4rqa.js +0 -1
  303. package/.output/public/_nuxt/CZSOrxUy.js +0 -1
  304. package/.output/public/_nuxt/CaNEL9JC.js +0 -39
  305. package/.output/public/_nuxt/CbTLg9oX.js +0 -1
  306. package/.output/public/_nuxt/CfCXpVn5.js +0 -1
  307. package/.output/public/_nuxt/ChmNlvWR.js +0 -1
  308. package/.output/public/_nuxt/Ck0QYdxe.js +0 -1
  309. package/.output/public/_nuxt/Ckb0pu4-.js +0 -1
  310. package/.output/public/_nuxt/CkwPRs1D.js +0 -1
  311. package/.output/public/_nuxt/CmEJg8C6.js +0 -2
  312. package/.output/public/_nuxt/CmL_vMJD.js +0 -1
  313. package/.output/public/_nuxt/Cq8zPxkT.js +0 -1
  314. package/.output/public/_nuxt/CxRnB4NC.js +0 -1
  315. package/.output/public/_nuxt/D0zMyG8n.js +0 -1
  316. package/.output/public/_nuxt/D1XYB283.js +0 -1
  317. package/.output/public/_nuxt/D2NxqyzW.js +0 -1
  318. package/.output/public/_nuxt/D5xyrvFu.js +0 -1
  319. package/.output/public/_nuxt/D8iBB0Py.js +0 -1
  320. package/.output/public/_nuxt/D8oIH8m1.js +0 -1
  321. package/.output/public/_nuxt/DB2zZev7.js +0 -1
  322. package/.output/public/_nuxt/DBrOAqkm.js +0 -1
  323. package/.output/public/_nuxt/DDXDFweK.js +0 -1
  324. package/.output/public/_nuxt/DFZkCmLQ.js +0 -1
  325. package/.output/public/_nuxt/DKZmgHNU.js +0 -1
  326. package/.output/public/_nuxt/DR8tGJhL.js +0 -1
  327. package/.output/public/_nuxt/DVAEVTjy.js +0 -1
  328. package/.output/public/_nuxt/DVqrPkCJ.js +0 -1
  329. package/.output/public/_nuxt/DWZ9ieYa.js +0 -1
  330. package/.output/public/_nuxt/DWj6VsZv.js +0 -1
  331. package/.output/public/_nuxt/DXJ9PxCv.js +0 -1
  332. package/.output/public/_nuxt/D_ziPROx.js +0 -1
  333. package/.output/public/_nuxt/Da2vwoYG.js +0 -1
  334. package/.output/public/_nuxt/Ddz3HcBB.js +0 -1
  335. package/.output/public/_nuxt/DgYei0bK.js +0 -1
  336. package/.output/public/_nuxt/Di_3GV_R.js +0 -1
  337. package/.output/public/_nuxt/Djog1f_e.js +0 -1
  338. package/.output/public/_nuxt/Dkap2-Pj.js +0 -7
  339. package/.output/public/_nuxt/DlJe_sHk.js +0 -1
  340. package/.output/public/_nuxt/DlPOQpH_.js +0 -1
  341. package/.output/public/_nuxt/DmYWMtVA.js +0 -1
  342. package/.output/public/_nuxt/DmxKU7sH.js +0 -1
  343. package/.output/public/_nuxt/DsodHRrQ.js +0 -1
  344. package/.output/public/_nuxt/DwSY6_2U.js +0 -1
  345. package/.output/public/_nuxt/DypJaSm-.js +0 -1
  346. package/.output/public/_nuxt/DzKaXH6P.js +0 -1
  347. package/.output/public/_nuxt/FK-jSuOT.js +0 -1
  348. package/.output/public/_nuxt/Fc2JsQt4.js +0 -1
  349. package/.output/public/_nuxt/IYCBGuRS.js +0 -1
  350. package/.output/public/_nuxt/NrRzUJNY.js +0 -1
  351. package/.output/public/_nuxt/OeVS0Rsb.js +0 -1
  352. package/.output/public/_nuxt/OlF0QnKF.js +0 -1
  353. package/.output/public/_nuxt/QuAoqY7t.js +0 -1
  354. package/.output/public/_nuxt/RlXHkmOd.js +0 -9
  355. package/.output/public/_nuxt/WZnvL9Dh.js +0 -1
  356. package/.output/public/_nuxt/ZvG7a1W3.js +0 -1
  357. package/.output/public/_nuxt/aPNZBVrG.js +0 -1
  358. package/.output/public/_nuxt/builds/meta/495aca73-bfa5-456e-b96a-f02e009c72d3.json +0 -1
  359. package/.output/public/_nuxt/dashboard.BxCOkJwt.css +0 -1
  360. package/.output/public/_nuxt/entry.C_udkZt9.css +0 -1
  361. package/.output/public/_nuxt/evY81hM3.js +0 -1
  362. package/.output/public/_nuxt/i6QBzaEi.js +0 -1
  363. package/.output/public/_nuxt/iTVKJ1kw.js +0 -1
  364. package/.output/public/_nuxt/j92uR3uR.js +0 -1
  365. package/.output/public/_nuxt/jdUkeAj_.js +0 -1
  366. package/.output/public/_nuxt/jeRvcMHU.js +0 -1
  367. package/.output/public/_nuxt/kuv0zpKq.js +0 -1
  368. package/.output/public/_nuxt/l3lKQs7b.js +0 -1
  369. package/.output/public/_nuxt/qIgZ7OXa.js +0 -1
  370. package/.output/public/_nuxt/qcVwZv8e.js +0 -1
  371. package/.output/public/_nuxt/ru8fqqWs.js +0 -1
  372. package/.output/public/_nuxt/sgmhgpCS.js +0 -1
  373. package/.output/public/_nuxt/y2jv0da-.js +0 -1
  374. package/.output/public/_nuxt/yyS4-kAX.js +0 -1
  375. package/.output/public/_nuxt/zIoBLBHF.js +0 -1
  376. package/.output/public/_nuxt/zpazwPgx.js +0 -1
  377. package/.output/server/chunks/build/_id_-DN00UDdO.mjs.map +0 -1
  378. package/.output/server/chunks/build/chat-m4-n9vC6.mjs.map +0 -1
  379. package/.output/server/chunks/build/docs-ChGwOPg5.mjs.map +0 -1
  380. package/.output/server/chunks/build/hooks-D328DcO6.mjs.map +0 -1
  381. package/.output/server/chunks/build/index-C9PuieXh.mjs +0 -820
  382. package/.output/server/chunks/build/index-C9PuieXh.mjs.map +0 -1
  383. package/.output/server/chunks/build/settings-B2KXoGcz.mjs +0 -3232
  384. package/.output/server/chunks/build/settings-B2KXoGcz.mjs.map +0 -1
  385. package/.output/server/chunks/build/tasks-DnAFqbtt.mjs.map +0 -1
  386. package/.output/server/chunks/build/useAgents-DHEXiFSc.mjs.map +0 -1
@@ -0,0 +1,1499 @@
1
+ import { i as useToast, _ as _sfc_main$8, g as _sfc_main$d } from './server.mjs';
2
+ import { _ as _sfc_main$1 } from './Skeleton-DZqsQzFi.mjs';
3
+ import { _ as _sfc_main$2 } from './Switch-GWdksmY6.mjs';
4
+ import { _ as _sfc_main$3 } from './Modal-Z_SoWhh-.mjs';
5
+ import { _ as _sfc_main$4 } from './FormField-Caux_FCv.mjs';
6
+ import { _ as _sfc_main$5 } from './Select-BB1oLrCD.mjs';
7
+ import { _ as _sfc_main$6 } from './Input-CV2hlBHo.mjs';
8
+ import { defineComponent, ref, reactive, mergeProps, withCtx, createTextVNode, unref, isRef, createVNode, createBlock, createCommentVNode, openBlock, Fragment, renderList, toDisplayString, useSSRContext } from 'vue';
9
+ import { ssrRenderAttrs, ssrRenderComponent, ssrRenderList, ssrInterpolate, ssrRenderClass, ssrIncludeBooleanAttr } from 'vue/server-renderer';
10
+ import '../nitro/nitro.mjs';
11
+ import '@anthropic-ai/claude-agent-sdk';
12
+ import 'module';
13
+ import 'path';
14
+ import 'os';
15
+ import 'node:http';
16
+ import 'node:https';
17
+ import 'node:crypto';
18
+ import 'stream';
19
+ import 'events';
20
+ import 'http';
21
+ import 'crypto';
22
+ import 'buffer';
23
+ import 'zlib';
24
+ import 'https';
25
+ import 'net';
26
+ import 'tls';
27
+ import 'url';
28
+ import 'node:events';
29
+ import 'node:buffer';
30
+ import 'node:fs';
31
+ import 'node:path';
32
+ import 'fs';
33
+ import 'drizzle-orm/postgres-js/migrator';
34
+ import 'drizzle-orm';
35
+ import 'drizzle-orm/postgres-js';
36
+ import 'postgres';
37
+ import 'drizzle-orm/pg-core';
38
+ import 'better-auth';
39
+ import 'better-auth/adapters/drizzle';
40
+ import 'chokidar';
41
+ import 'fs/promises';
42
+ import 'gray-matter';
43
+ import 'cron';
44
+ import 'child_process';
45
+ import 'util';
46
+ import 'node:url';
47
+ import '@iconify/utils';
48
+ import 'consola';
49
+ import 'vue-router';
50
+ import 'tailwindcss/colors';
51
+ import '@iconify/vue';
52
+ import 'reka-ui';
53
+ import '@vueuse/core';
54
+ import 'tailwind-variants';
55
+ import '@iconify/utils/lib/css/icon';
56
+ import 'perfect-debounce';
57
+ import '../routes/renderer.mjs';
58
+ import 'vue-bundle-renderer/runtime';
59
+ import 'unhead/server';
60
+ import 'devalue';
61
+ import 'unhead/plugins';
62
+ import 'unhead/utils';
63
+
64
+ const _sfc_main = /* @__PURE__ */ defineComponent({
65
+ __name: "integrations",
66
+ __ssrInlineRender: true,
67
+ setup(__props) {
68
+ const toast = useToast();
69
+ const bridgesData = ref([]);
70
+ const bridgesLoading = ref(false);
71
+ const bridgeModal = ref(false);
72
+ const bridgeSaving = ref(false);
73
+ const bridgeDeleteConfirm = ref(false);
74
+ const bridgeToDelete = ref(null);
75
+ const bridgeForm = reactive({
76
+ platform: "telegram",
77
+ name: ""
78
+ });
79
+ const bridgeConfigModal = ref(false);
80
+ const editingBridge = ref(null);
81
+ const bridgeConfigSaving = ref(false);
82
+ const bridgeConfigForm = reactive({
83
+ name: "",
84
+ // Telegram
85
+ botUsername: "",
86
+ allowedChatIds: "",
87
+ // Discord
88
+ listenMode: "mentions",
89
+ guildId: "",
90
+ channelId: "",
91
+ // iMessage
92
+ strategy: "imsg",
93
+ allowedNumbers: "",
94
+ blueBubblesUrl: "",
95
+ // Google
96
+ enabledServices: [],
97
+ account: "",
98
+ // Email
99
+ imapHost: "",
100
+ imapPort: "",
101
+ smtpHost: "",
102
+ smtpPort: "",
103
+ emailAddress: ""
104
+ });
105
+ const secretKeys = ref([]);
106
+ const discordListenModeOptions = [
107
+ { value: "mentions", label: "Mentions & DMs" },
108
+ { value: "dm", label: "DMs only" },
109
+ { value: "all", label: "All messages" }
110
+ ];
111
+ const imessageStrategyOptions = [
112
+ { value: "imsg", label: "Local (imsg CLI)" },
113
+ { value: "bluebubbles", label: "BlueBubbles" }
114
+ ];
115
+ const googleServiceOptions = [
116
+ { value: "gmail", label: "Gmail" },
117
+ { value: "calendar", label: "Calendar" },
118
+ { value: "drive", label: "Drive" },
119
+ { value: "contacts", label: "Contacts" },
120
+ { value: "tasks", label: "Tasks" }
121
+ ];
122
+ const platformNamePlaceholders = {
123
+ telegram: "My Telegram Bot",
124
+ discord: "My Discord Bot",
125
+ imessage: "iMessage Bridge",
126
+ google: "Google Suite",
127
+ email: "Work Email"
128
+ };
129
+ const platformRequiredSecrets = {
130
+ telegram: ["TELEGRAM_BOT_TOKEN"],
131
+ discord: ["DISCORD_BOT_TOKEN"],
132
+ imessage: [],
133
+ google: [],
134
+ email: []
135
+ };
136
+ const platformOptions = [
137
+ { value: "telegram", label: "Telegram", icon: "i-lucide-send" },
138
+ { value: "discord", label: "Discord", icon: "i-lucide-message-circle" },
139
+ { value: "imessage", label: "iMessage", icon: "i-lucide-smartphone" },
140
+ { value: "google", label: "Google Suite", icon: "i-lucide-mail" },
141
+ { value: "email", label: "Email (IMAP)", icon: "i-lucide-at-sign" }
142
+ ];
143
+ function getMissingSecrets(platform) {
144
+ const required = platformRequiredSecrets[platform];
145
+ if (!required.length) return [];
146
+ const existing = new Set(secretKeys.value);
147
+ return required.filter((k) => !existing.has(k));
148
+ }
149
+ const healthColors = {
150
+ connected: "text-success",
151
+ disconnected: "text-dimmed",
152
+ error: "text-error",
153
+ unconfigured: "text-dimmed"
154
+ };
155
+ async function fetchBridges() {
156
+ bridgesLoading.value = true;
157
+ try {
158
+ const { data } = await $fetch("/api/bridges");
159
+ bridgesData.value = data;
160
+ } catch {
161
+ toast.add({ title: "Failed to load integrations", color: "error" });
162
+ }
163
+ bridgesLoading.value = false;
164
+ }
165
+ async function handleBridgeConfigSave() {
166
+ if (!editingBridge.value) return;
167
+ const platform = editingBridge.value.platform;
168
+ let config = {};
169
+ if (editingBridge.value.config)
170
+ config = JSON.parse(editingBridge.value.config);
171
+ switch (platform) {
172
+ case "telegram":
173
+ config.botUsername = bridgeConfigForm.botUsername || void 0;
174
+ config.allowedChatIds = bridgeConfigForm.allowedChatIds ? bridgeConfigForm.allowedChatIds.split(",").map((s) => s.trim()).filter(Boolean) : void 0;
175
+ break;
176
+ case "discord":
177
+ config.listenMode = bridgeConfigForm.listenMode;
178
+ config.guildId = bridgeConfigForm.guildId || void 0;
179
+ config.channelId = bridgeConfigForm.channelId || void 0;
180
+ break;
181
+ case "imessage":
182
+ config.strategy = bridgeConfigForm.strategy;
183
+ config.allowedNumbers = bridgeConfigForm.allowedNumbers ? bridgeConfigForm.allowedNumbers.split(",").map((s) => s.trim()).filter(Boolean) : void 0;
184
+ config.blueBubblesUrl = bridgeConfigForm.blueBubblesUrl || void 0;
185
+ break;
186
+ case "google":
187
+ config.enabledServices = bridgeConfigForm.enabledServices;
188
+ config.account = bridgeConfigForm.account || void 0;
189
+ break;
190
+ case "email":
191
+ config.imapHost = bridgeConfigForm.imapHost || void 0;
192
+ config.imapPort = bridgeConfigForm.imapPort ? Number(bridgeConfigForm.imapPort) : void 0;
193
+ config.smtpHost = bridgeConfigForm.smtpHost || void 0;
194
+ config.smtpPort = bridgeConfigForm.smtpPort ? Number(bridgeConfigForm.smtpPort) : void 0;
195
+ config.emailAddress = bridgeConfigForm.emailAddress || void 0;
196
+ break;
197
+ }
198
+ bridgeConfigSaving.value = true;
199
+ try {
200
+ await $fetch(`/api/bridges/${editingBridge.value.id}`, {
201
+ method: "PUT",
202
+ body: { name: bridgeConfigForm.name, config }
203
+ });
204
+ toast.add({ title: "Integration updated", color: "success" });
205
+ bridgeConfigModal.value = false;
206
+ await fetchBridges();
207
+ } catch (err) {
208
+ const error = err;
209
+ toast.add({ title: "Failed to update integration", description: error.data?.message, color: "error" });
210
+ }
211
+ bridgeConfigSaving.value = false;
212
+ }
213
+ function openCreateBridge() {
214
+ bridgeForm.platform = "telegram";
215
+ bridgeForm.name = "";
216
+ bridgeModal.value = true;
217
+ }
218
+ async function handleBridgeCreate() {
219
+ if (!bridgeForm.name) {
220
+ toast.add({ title: "Name is required", color: "error" });
221
+ return;
222
+ }
223
+ const missing = getMissingSecrets(bridgeForm.platform);
224
+ if (missing.length) {
225
+ toast.add({
226
+ title: "Missing required secrets",
227
+ description: `Add ${missing.join(", ")} in the Secrets tab first.`,
228
+ color: "error"
229
+ });
230
+ return;
231
+ }
232
+ bridgeSaving.value = true;
233
+ try {
234
+ await $fetch("/api/bridges", {
235
+ method: "POST",
236
+ body: { platform: bridgeForm.platform, name: bridgeForm.name }
237
+ });
238
+ toast.add({ title: "Integration created", color: "success" });
239
+ bridgeModal.value = false;
240
+ await fetchBridges();
241
+ } catch (err) {
242
+ const error = err;
243
+ toast.add({ title: "Failed to create integration", description: error.data?.message, color: "error" });
244
+ }
245
+ bridgeSaving.value = false;
246
+ }
247
+ async function toggleBridge(bridge) {
248
+ try {
249
+ await $fetch(`/api/bridges/${bridge.id}`, {
250
+ method: "PUT",
251
+ body: { enabled: !bridge.enabled }
252
+ });
253
+ await fetchBridges();
254
+ } catch {
255
+ toast.add({ title: "Failed to update integration", color: "error" });
256
+ }
257
+ }
258
+ function confirmDeleteBridge(bridge) {
259
+ bridgeToDelete.value = bridge;
260
+ bridgeDeleteConfirm.value = true;
261
+ }
262
+ async function handleDeleteBridge() {
263
+ if (!bridgeToDelete.value) return;
264
+ try {
265
+ await $fetch(`/api/bridges/${bridgeToDelete.value.id}`, { method: "DELETE" });
266
+ toast.add({ title: "Integration deleted", color: "success" });
267
+ bridgeDeleteConfirm.value = false;
268
+ bridgeToDelete.value = null;
269
+ await fetchBridges();
270
+ } catch {
271
+ toast.add({ title: "Failed to delete integration", color: "error" });
272
+ }
273
+ }
274
+ return (_ctx, _push, _parent, _attrs) => {
275
+ const _component_UButton = _sfc_main$8;
276
+ const _component_USkeleton = _sfc_main$1;
277
+ const _component_UIcon = _sfc_main$d;
278
+ const _component_USwitch = _sfc_main$2;
279
+ const _component_UModal = _sfc_main$3;
280
+ const _component_UFormField = _sfc_main$4;
281
+ const _component_USelect = _sfc_main$5;
282
+ const _component_UInput = _sfc_main$6;
283
+ _push(`<div${ssrRenderAttrs(mergeProps({ class: "py-6" }, _attrs))}><div class="flex items-center justify-between mb-6"><div><h3 class="text-lg font-semibold"> Integrations </h3><p class="text-sm text-dimmed"> Connect external platforms to the message bridge. </p></div>`);
284
+ _push(ssrRenderComponent(_component_UButton, {
285
+ icon: "i-lucide-plus",
286
+ onClick: openCreateBridge
287
+ }, {
288
+ default: withCtx((_, _push2, _parent2, _scopeId) => {
289
+ if (_push2) {
290
+ _push2(` Add Integration `);
291
+ } else {
292
+ return [
293
+ createTextVNode(" Add Integration ")
294
+ ];
295
+ }
296
+ }),
297
+ _: 1
298
+ }, _parent));
299
+ _push(`</div>`);
300
+ if (unref(bridgesLoading)) {
301
+ _push(`<div class="space-y-3"><!--[-->`);
302
+ ssrRenderList(3, (i) => {
303
+ _push(ssrRenderComponent(_component_USkeleton, {
304
+ key: i,
305
+ class: "h-16 w-full"
306
+ }, null, _parent));
307
+ });
308
+ _push(`<!--]--></div>`);
309
+ } else if (unref(bridgesData).length === 0) {
310
+ _push(`<div class="py-12 text-center">`);
311
+ _push(ssrRenderComponent(_component_UIcon, {
312
+ name: "i-lucide-plug",
313
+ class: "size-12 mx-auto mb-4 text-dimmed"
314
+ }, null, _parent));
315
+ _push(`<p class="text-dimmed"> No integrations configured. </p><p class="text-sm text-dimmed mt-1"> Connect Telegram, Discord, iMessage, or Google Suite. </p></div>`);
316
+ } else {
317
+ _push(`<div class="space-y-3"><!--[-->`);
318
+ ssrRenderList(unref(bridgesData), (bridge) => {
319
+ _push(`<div class="border border-default rounded-lg px-4 py-3 cursor-pointer hover:bg-elevated/50 transition-colors"><div class="flex items-center justify-between"><div class="flex items-center gap-3">`);
320
+ _push(ssrRenderComponent(_component_UIcon, {
321
+ name: platformOptions.find((p) => p.value === bridge.platform)?.icon || "i-lucide-plug",
322
+ class: "size-5 text-dimmed"
323
+ }, null, _parent));
324
+ _push(`<div><span class="font-medium">${ssrInterpolate(bridge.name)}</span><span class="text-sm text-dimmed ml-2">${ssrInterpolate(platformOptions.find((p) => p.value === bridge.platform)?.label)}</span></div></div><div class="flex items-center gap-3"><span class="${ssrRenderClass([healthColors[bridge.healthStatus] || "text-dimmed", "text-xs capitalize"])}">${ssrInterpolate(bridge.healthStatus)}</span>`);
325
+ _push(ssrRenderComponent(_component_USwitch, {
326
+ "model-value": bridge.enabled,
327
+ onClick: () => {
328
+ },
329
+ "onUpdate:modelValue": ($event) => toggleBridge(bridge)
330
+ }, null, _parent));
331
+ _push(ssrRenderComponent(_component_UButton, {
332
+ variant: "ghost",
333
+ color: "error",
334
+ icon: "i-lucide-trash-2",
335
+ size: "xs",
336
+ onClick: ($event) => confirmDeleteBridge(bridge)
337
+ }, null, _parent));
338
+ _push(`</div></div>`);
339
+ if (bridge.healthMessage) {
340
+ _push(`<p class="text-xs text-dimmed mt-1 pl-8">${ssrInterpolate(bridge.healthMessage)}</p>`);
341
+ } else {
342
+ _push(`<!---->`);
343
+ }
344
+ _push(`</div>`);
345
+ });
346
+ _push(`<!--]--></div>`);
347
+ }
348
+ _push(ssrRenderComponent(_component_UModal, {
349
+ open: unref(bridgeModal),
350
+ "onUpdate:open": ($event) => isRef(bridgeModal) ? bridgeModal.value = $event : null
351
+ }, {
352
+ header: withCtx((_, _push2, _parent2, _scopeId) => {
353
+ if (_push2) {
354
+ _push2(`<h3 class="text-lg font-semibold"${_scopeId}> Add Integration </h3>`);
355
+ } else {
356
+ return [
357
+ createVNode("h3", { class: "text-lg font-semibold" }, " Add Integration ")
358
+ ];
359
+ }
360
+ }),
361
+ body: withCtx((_, _push2, _parent2, _scopeId) => {
362
+ if (_push2) {
363
+ _push2(`<div class="space-y-4"${_scopeId}>`);
364
+ _push2(ssrRenderComponent(_component_UFormField, {
365
+ label: "Platform",
366
+ name: "platform"
367
+ }, {
368
+ default: withCtx((_2, _push3, _parent3, _scopeId2) => {
369
+ if (_push3) {
370
+ _push3(ssrRenderComponent(_component_USelect, {
371
+ modelValue: unref(bridgeForm).platform,
372
+ "onUpdate:modelValue": ($event) => unref(bridgeForm).platform = $event,
373
+ items: platformOptions,
374
+ "value-key": "value",
375
+ class: "w-full"
376
+ }, null, _parent3, _scopeId2));
377
+ } else {
378
+ return [
379
+ createVNode(_component_USelect, {
380
+ modelValue: unref(bridgeForm).platform,
381
+ "onUpdate:modelValue": ($event) => unref(bridgeForm).platform = $event,
382
+ items: platformOptions,
383
+ "value-key": "value",
384
+ class: "w-full"
385
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
386
+ ];
387
+ }
388
+ }),
389
+ _: 1
390
+ }, _parent2, _scopeId));
391
+ if (getMissingSecrets(unref(bridgeForm).platform).length) {
392
+ _push2(`<div class="flex items-start gap-2 rounded-lg bg-error/10 border border-error/20 p-3 text-sm"${_scopeId}>`);
393
+ _push2(ssrRenderComponent(_component_UIcon, {
394
+ name: "i-lucide-alert-triangle",
395
+ class: "size-4 mt-0.5 text-error shrink-0"
396
+ }, null, _parent2, _scopeId));
397
+ _push2(`<div${_scopeId}><p class="font-medium text-error"${_scopeId}> Missing required secrets </p><p class="text-dimmed mt-1"${_scopeId}> Add the following in Settings → Secrets before creating: </p><ul class="mt-1 space-y-0.5"${_scopeId}><!--[-->`);
398
+ ssrRenderList(getMissingSecrets(unref(bridgeForm).platform), (key) => {
399
+ _push2(`<li${_scopeId}><code class="text-xs bg-elevated px-1.5 py-0.5 rounded"${_scopeId}>${ssrInterpolate(key)}</code></li>`);
400
+ });
401
+ _push2(`<!--]--></ul></div></div>`);
402
+ } else {
403
+ _push2(`<!---->`);
404
+ }
405
+ _push2(ssrRenderComponent(_component_UFormField, {
406
+ label: "Name",
407
+ name: "name"
408
+ }, {
409
+ default: withCtx((_2, _push3, _parent3, _scopeId2) => {
410
+ if (_push3) {
411
+ _push3(ssrRenderComponent(_component_UInput, {
412
+ modelValue: unref(bridgeForm).name,
413
+ "onUpdate:modelValue": ($event) => unref(bridgeForm).name = $event,
414
+ placeholder: platformNamePlaceholders[unref(bridgeForm).platform],
415
+ class: "w-full"
416
+ }, null, _parent3, _scopeId2));
417
+ } else {
418
+ return [
419
+ createVNode(_component_UInput, {
420
+ modelValue: unref(bridgeForm).name,
421
+ "onUpdate:modelValue": ($event) => unref(bridgeForm).name = $event,
422
+ placeholder: platformNamePlaceholders[unref(bridgeForm).platform],
423
+ class: "w-full"
424
+ }, null, 8, ["modelValue", "onUpdate:modelValue", "placeholder"])
425
+ ];
426
+ }
427
+ }),
428
+ _: 1
429
+ }, _parent2, _scopeId));
430
+ _push2(`<div class="flex justify-end gap-2 pt-4"${_scopeId}>`);
431
+ _push2(ssrRenderComponent(_component_UButton, {
432
+ variant: "ghost",
433
+ onClick: ($event) => bridgeModal.value = false
434
+ }, {
435
+ default: withCtx((_2, _push3, _parent3, _scopeId2) => {
436
+ if (_push3) {
437
+ _push3(` Cancel `);
438
+ } else {
439
+ return [
440
+ createTextVNode(" Cancel ")
441
+ ];
442
+ }
443
+ }),
444
+ _: 1
445
+ }, _parent2, _scopeId));
446
+ _push2(ssrRenderComponent(_component_UButton, {
447
+ loading: unref(bridgeSaving),
448
+ disabled: getMissingSecrets(unref(bridgeForm).platform).length > 0,
449
+ onClick: handleBridgeCreate
450
+ }, {
451
+ default: withCtx((_2, _push3, _parent3, _scopeId2) => {
452
+ if (_push3) {
453
+ _push3(` Create `);
454
+ } else {
455
+ return [
456
+ createTextVNode(" Create ")
457
+ ];
458
+ }
459
+ }),
460
+ _: 1
461
+ }, _parent2, _scopeId));
462
+ _push2(`</div></div>`);
463
+ } else {
464
+ return [
465
+ createVNode("div", { class: "space-y-4" }, [
466
+ createVNode(_component_UFormField, {
467
+ label: "Platform",
468
+ name: "platform"
469
+ }, {
470
+ default: withCtx(() => [
471
+ createVNode(_component_USelect, {
472
+ modelValue: unref(bridgeForm).platform,
473
+ "onUpdate:modelValue": ($event) => unref(bridgeForm).platform = $event,
474
+ items: platformOptions,
475
+ "value-key": "value",
476
+ class: "w-full"
477
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
478
+ ]),
479
+ _: 1
480
+ }),
481
+ getMissingSecrets(unref(bridgeForm).platform).length ? (openBlock(), createBlock("div", {
482
+ key: 0,
483
+ class: "flex items-start gap-2 rounded-lg bg-error/10 border border-error/20 p-3 text-sm"
484
+ }, [
485
+ createVNode(_component_UIcon, {
486
+ name: "i-lucide-alert-triangle",
487
+ class: "size-4 mt-0.5 text-error shrink-0"
488
+ }),
489
+ createVNode("div", null, [
490
+ createVNode("p", { class: "font-medium text-error" }, " Missing required secrets "),
491
+ createVNode("p", { class: "text-dimmed mt-1" }, " Add the following in Settings → Secrets before creating: "),
492
+ createVNode("ul", { class: "mt-1 space-y-0.5" }, [
493
+ (openBlock(true), createBlock(Fragment, null, renderList(getMissingSecrets(unref(bridgeForm).platform), (key) => {
494
+ return openBlock(), createBlock("li", { key }, [
495
+ createVNode("code", { class: "text-xs bg-elevated px-1.5 py-0.5 rounded" }, toDisplayString(key), 1)
496
+ ]);
497
+ }), 128))
498
+ ])
499
+ ])
500
+ ])) : createCommentVNode("", true),
501
+ createVNode(_component_UFormField, {
502
+ label: "Name",
503
+ name: "name"
504
+ }, {
505
+ default: withCtx(() => [
506
+ createVNode(_component_UInput, {
507
+ modelValue: unref(bridgeForm).name,
508
+ "onUpdate:modelValue": ($event) => unref(bridgeForm).name = $event,
509
+ placeholder: platformNamePlaceholders[unref(bridgeForm).platform],
510
+ class: "w-full"
511
+ }, null, 8, ["modelValue", "onUpdate:modelValue", "placeholder"])
512
+ ]),
513
+ _: 1
514
+ }),
515
+ createVNode("div", { class: "flex justify-end gap-2 pt-4" }, [
516
+ createVNode(_component_UButton, {
517
+ variant: "ghost",
518
+ onClick: ($event) => bridgeModal.value = false
519
+ }, {
520
+ default: withCtx(() => [
521
+ createTextVNode(" Cancel ")
522
+ ]),
523
+ _: 1
524
+ }, 8, ["onClick"]),
525
+ createVNode(_component_UButton, {
526
+ loading: unref(bridgeSaving),
527
+ disabled: getMissingSecrets(unref(bridgeForm).platform).length > 0,
528
+ onClick: handleBridgeCreate
529
+ }, {
530
+ default: withCtx(() => [
531
+ createTextVNode(" Create ")
532
+ ]),
533
+ _: 1
534
+ }, 8, ["loading", "disabled"])
535
+ ])
536
+ ])
537
+ ];
538
+ }
539
+ }),
540
+ _: 1
541
+ }, _parent));
542
+ _push(ssrRenderComponent(_component_UModal, {
543
+ open: unref(bridgeDeleteConfirm),
544
+ "onUpdate:open": ($event) => isRef(bridgeDeleteConfirm) ? bridgeDeleteConfirm.value = $event : null
545
+ }, {
546
+ header: withCtx((_, _push2, _parent2, _scopeId) => {
547
+ if (_push2) {
548
+ _push2(`<h3 class="text-lg font-semibold"${_scopeId}> Delete Integration </h3>`);
549
+ } else {
550
+ return [
551
+ createVNode("h3", { class: "text-lg font-semibold" }, " Delete Integration ")
552
+ ];
553
+ }
554
+ }),
555
+ body: withCtx((_, _push2, _parent2, _scopeId) => {
556
+ if (_push2) {
557
+ _push2(`<p class="mb-4"${_scopeId}> Are you sure you want to delete <strong${_scopeId}>${ssrInterpolate(unref(bridgeToDelete)?.name)}</strong>? </p><p class="text-sm text-dimmed"${_scopeId}> This will remove the integration and all associated message history. </p><div class="flex justify-end gap-2 pt-6"${_scopeId}>`);
558
+ _push2(ssrRenderComponent(_component_UButton, {
559
+ variant: "ghost",
560
+ onClick: ($event) => bridgeDeleteConfirm.value = false
561
+ }, {
562
+ default: withCtx((_2, _push3, _parent3, _scopeId2) => {
563
+ if (_push3) {
564
+ _push3(` Cancel `);
565
+ } else {
566
+ return [
567
+ createTextVNode(" Cancel ")
568
+ ];
569
+ }
570
+ }),
571
+ _: 1
572
+ }, _parent2, _scopeId));
573
+ _push2(ssrRenderComponent(_component_UButton, {
574
+ color: "error",
575
+ onClick: handleDeleteBridge
576
+ }, {
577
+ default: withCtx((_2, _push3, _parent3, _scopeId2) => {
578
+ if (_push3) {
579
+ _push3(` Delete `);
580
+ } else {
581
+ return [
582
+ createTextVNode(" Delete ")
583
+ ];
584
+ }
585
+ }),
586
+ _: 1
587
+ }, _parent2, _scopeId));
588
+ _push2(`</div>`);
589
+ } else {
590
+ return [
591
+ createVNode("p", { class: "mb-4" }, [
592
+ createTextVNode(" Are you sure you want to delete "),
593
+ createVNode("strong", null, toDisplayString(unref(bridgeToDelete)?.name), 1),
594
+ createTextVNode("? ")
595
+ ]),
596
+ createVNode("p", { class: "text-sm text-dimmed" }, " This will remove the integration and all associated message history. "),
597
+ createVNode("div", { class: "flex justify-end gap-2 pt-6" }, [
598
+ createVNode(_component_UButton, {
599
+ variant: "ghost",
600
+ onClick: ($event) => bridgeDeleteConfirm.value = false
601
+ }, {
602
+ default: withCtx(() => [
603
+ createTextVNode(" Cancel ")
604
+ ]),
605
+ _: 1
606
+ }, 8, ["onClick"]),
607
+ createVNode(_component_UButton, {
608
+ color: "error",
609
+ onClick: handleDeleteBridge
610
+ }, {
611
+ default: withCtx(() => [
612
+ createTextVNode(" Delete ")
613
+ ]),
614
+ _: 1
615
+ })
616
+ ])
617
+ ];
618
+ }
619
+ }),
620
+ _: 1
621
+ }, _parent));
622
+ _push(ssrRenderComponent(_component_UModal, {
623
+ open: unref(bridgeConfigModal),
624
+ "onUpdate:open": ($event) => isRef(bridgeConfigModal) ? bridgeConfigModal.value = $event : null
625
+ }, {
626
+ header: withCtx((_, _push2, _parent2, _scopeId) => {
627
+ if (_push2) {
628
+ _push2(`<div class="flex items-center gap-2"${_scopeId}>`);
629
+ _push2(ssrRenderComponent(_component_UIcon, {
630
+ name: platformOptions.find((p) => p.value === unref(editingBridge)?.platform)?.icon || "i-lucide-plug",
631
+ class: "size-5"
632
+ }, null, _parent2, _scopeId));
633
+ _push2(`<h3 class="text-lg font-semibold"${_scopeId}> Configure ${ssrInterpolate(unref(editingBridge)?.name)}</h3></div>`);
634
+ } else {
635
+ return [
636
+ createVNode("div", { class: "flex items-center gap-2" }, [
637
+ createVNode(_component_UIcon, {
638
+ name: platformOptions.find((p) => p.value === unref(editingBridge)?.platform)?.icon || "i-lucide-plug",
639
+ class: "size-5"
640
+ }, null, 8, ["name"]),
641
+ createVNode("h3", { class: "text-lg font-semibold" }, " Configure " + toDisplayString(unref(editingBridge)?.name), 1)
642
+ ])
643
+ ];
644
+ }
645
+ }),
646
+ body: withCtx((_, _push2, _parent2, _scopeId) => {
647
+ if (_push2) {
648
+ _push2(`<div class="space-y-4"${_scopeId}>`);
649
+ if (unref(editingBridge) && platformRequiredSecrets[unref(editingBridge).platform].length) {
650
+ _push2(`<div class="flex items-start gap-2 rounded-lg bg-elevated p-3 text-sm"${_scopeId}>`);
651
+ _push2(ssrRenderComponent(_component_UIcon, {
652
+ name: "i-lucide-info",
653
+ class: "size-4 mt-0.5 text-dimmed shrink-0"
654
+ }, null, _parent2, _scopeId));
655
+ _push2(`<span class="text-dimmed"${_scopeId}> Requires <!--[-->`);
656
+ ssrRenderList(platformRequiredSecrets[unref(editingBridge).platform], (key, i) => {
657
+ _push2(`<!--[--><code class="bg-elevated px-1 py-0.5 rounded text-xs"${_scopeId}>${ssrInterpolate(key)}</code>`);
658
+ if (i < platformRequiredSecrets[unref(editingBridge).platform].length - 1) {
659
+ _push2(`<!--[-->, <!--]-->`);
660
+ } else {
661
+ _push2(`<!---->`);
662
+ }
663
+ _push2(`<!--]-->`);
664
+ });
665
+ _push2(`<!--]--> in the Secrets tab. </span></div>`);
666
+ } else {
667
+ _push2(`<!---->`);
668
+ }
669
+ _push2(ssrRenderComponent(_component_UFormField, {
670
+ label: "Name",
671
+ name: "name"
672
+ }, {
673
+ default: withCtx((_2, _push3, _parent3, _scopeId2) => {
674
+ if (_push3) {
675
+ _push3(ssrRenderComponent(_component_UInput, {
676
+ modelValue: unref(bridgeConfigForm).name,
677
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).name = $event,
678
+ placeholder: "Integration name",
679
+ class: "w-full"
680
+ }, null, _parent3, _scopeId2));
681
+ } else {
682
+ return [
683
+ createVNode(_component_UInput, {
684
+ modelValue: unref(bridgeConfigForm).name,
685
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).name = $event,
686
+ placeholder: "Integration name",
687
+ class: "w-full"
688
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
689
+ ];
690
+ }
691
+ }),
692
+ _: 1
693
+ }, _parent2, _scopeId));
694
+ if (unref(editingBridge)?.platform === "telegram") {
695
+ _push2(`<!--[-->`);
696
+ _push2(ssrRenderComponent(_component_UFormField, {
697
+ label: "Bot Username",
698
+ name: "botUsername",
699
+ hint: "Without the @ prefix"
700
+ }, {
701
+ default: withCtx((_2, _push3, _parent3, _scopeId2) => {
702
+ if (_push3) {
703
+ _push3(ssrRenderComponent(_component_UInput, {
704
+ modelValue: unref(bridgeConfigForm).botUsername,
705
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).botUsername = $event,
706
+ placeholder: "my_bot",
707
+ class: "w-full"
708
+ }, null, _parent3, _scopeId2));
709
+ } else {
710
+ return [
711
+ createVNode(_component_UInput, {
712
+ modelValue: unref(bridgeConfigForm).botUsername,
713
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).botUsername = $event,
714
+ placeholder: "my_bot",
715
+ class: "w-full"
716
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
717
+ ];
718
+ }
719
+ }),
720
+ _: 1
721
+ }, _parent2, _scopeId));
722
+ _push2(ssrRenderComponent(_component_UFormField, {
723
+ label: "Allowed Chat IDs",
724
+ name: "allowedChatIds",
725
+ hint: "Comma-separated. Leave empty for all."
726
+ }, {
727
+ default: withCtx((_2, _push3, _parent3, _scopeId2) => {
728
+ if (_push3) {
729
+ _push3(ssrRenderComponent(_component_UInput, {
730
+ modelValue: unref(bridgeConfigForm).allowedChatIds,
731
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).allowedChatIds = $event,
732
+ placeholder: "123456, -100789",
733
+ class: "w-full"
734
+ }, null, _parent3, _scopeId2));
735
+ } else {
736
+ return [
737
+ createVNode(_component_UInput, {
738
+ modelValue: unref(bridgeConfigForm).allowedChatIds,
739
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).allowedChatIds = $event,
740
+ placeholder: "123456, -100789",
741
+ class: "w-full"
742
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
743
+ ];
744
+ }
745
+ }),
746
+ _: 1
747
+ }, _parent2, _scopeId));
748
+ _push2(`<!--]-->`);
749
+ } else {
750
+ _push2(`<!---->`);
751
+ }
752
+ if (unref(editingBridge)?.platform === "discord") {
753
+ _push2(`<!--[-->`);
754
+ _push2(ssrRenderComponent(_component_UFormField, {
755
+ label: "Listen Mode",
756
+ name: "listenMode"
757
+ }, {
758
+ default: withCtx((_2, _push3, _parent3, _scopeId2) => {
759
+ if (_push3) {
760
+ _push3(ssrRenderComponent(_component_USelect, {
761
+ modelValue: unref(bridgeConfigForm).listenMode,
762
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).listenMode = $event,
763
+ items: discordListenModeOptions,
764
+ "value-key": "value",
765
+ class: "w-full"
766
+ }, null, _parent3, _scopeId2));
767
+ } else {
768
+ return [
769
+ createVNode(_component_USelect, {
770
+ modelValue: unref(bridgeConfigForm).listenMode,
771
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).listenMode = $event,
772
+ items: discordListenModeOptions,
773
+ "value-key": "value",
774
+ class: "w-full"
775
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
776
+ ];
777
+ }
778
+ }),
779
+ _: 1
780
+ }, _parent2, _scopeId));
781
+ _push2(ssrRenderComponent(_component_UFormField, {
782
+ label: "Server ID",
783
+ name: "guildId",
784
+ hint: "Optional. Limit to one server."
785
+ }, {
786
+ default: withCtx((_2, _push3, _parent3, _scopeId2) => {
787
+ if (_push3) {
788
+ _push3(ssrRenderComponent(_component_UInput, {
789
+ modelValue: unref(bridgeConfigForm).guildId,
790
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).guildId = $event,
791
+ placeholder: "Discord server ID",
792
+ class: "w-full"
793
+ }, null, _parent3, _scopeId2));
794
+ } else {
795
+ return [
796
+ createVNode(_component_UInput, {
797
+ modelValue: unref(bridgeConfigForm).guildId,
798
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).guildId = $event,
799
+ placeholder: "Discord server ID",
800
+ class: "w-full"
801
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
802
+ ];
803
+ }
804
+ }),
805
+ _: 1
806
+ }, _parent2, _scopeId));
807
+ _push2(ssrRenderComponent(_component_UFormField, {
808
+ label: "Channel ID",
809
+ name: "channelId",
810
+ hint: "Optional. Limit to one channel (for 'all' mode)."
811
+ }, {
812
+ default: withCtx((_2, _push3, _parent3, _scopeId2) => {
813
+ if (_push3) {
814
+ _push3(ssrRenderComponent(_component_UInput, {
815
+ modelValue: unref(bridgeConfigForm).channelId,
816
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).channelId = $event,
817
+ placeholder: "Discord channel ID",
818
+ class: "w-full"
819
+ }, null, _parent3, _scopeId2));
820
+ } else {
821
+ return [
822
+ createVNode(_component_UInput, {
823
+ modelValue: unref(bridgeConfigForm).channelId,
824
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).channelId = $event,
825
+ placeholder: "Discord channel ID",
826
+ class: "w-full"
827
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
828
+ ];
829
+ }
830
+ }),
831
+ _: 1
832
+ }, _parent2, _scopeId));
833
+ _push2(`<!--]-->`);
834
+ } else {
835
+ _push2(`<!---->`);
836
+ }
837
+ if (unref(editingBridge)?.platform === "imessage") {
838
+ _push2(`<!--[-->`);
839
+ _push2(ssrRenderComponent(_component_UFormField, {
840
+ label: "Strategy",
841
+ name: "strategy"
842
+ }, {
843
+ default: withCtx((_2, _push3, _parent3, _scopeId2) => {
844
+ if (_push3) {
845
+ _push3(ssrRenderComponent(_component_USelect, {
846
+ modelValue: unref(bridgeConfigForm).strategy,
847
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).strategy = $event,
848
+ items: imessageStrategyOptions,
849
+ "value-key": "value",
850
+ class: "w-full"
851
+ }, null, _parent3, _scopeId2));
852
+ } else {
853
+ return [
854
+ createVNode(_component_USelect, {
855
+ modelValue: unref(bridgeConfigForm).strategy,
856
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).strategy = $event,
857
+ items: imessageStrategyOptions,
858
+ "value-key": "value",
859
+ class: "w-full"
860
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
861
+ ];
862
+ }
863
+ }),
864
+ _: 1
865
+ }, _parent2, _scopeId));
866
+ if (unref(bridgeConfigForm).strategy === "bluebubbles" && !unref(secretKeys).includes("BLUEBUBBLES_PASSWORD")) {
867
+ _push2(`<div class="flex items-start gap-2 rounded-lg bg-error/10 border border-error/20 p-3 text-sm"${_scopeId}>`);
868
+ _push2(ssrRenderComponent(_component_UIcon, {
869
+ name: "i-lucide-alert-triangle",
870
+ class: "size-4 mt-0.5 text-error shrink-0"
871
+ }, null, _parent2, _scopeId));
872
+ _push2(`<span class="text-dimmed"${_scopeId}> BlueBubbles requires secret <code class="text-xs bg-elevated px-1.5 py-0.5 rounded"${_scopeId}>BLUEBUBBLES_PASSWORD</code> in the Secrets tab. </span></div>`);
873
+ } else {
874
+ _push2(`<!---->`);
875
+ }
876
+ if (unref(bridgeConfigForm).strategy === "bluebubbles") {
877
+ _push2(ssrRenderComponent(_component_UFormField, {
878
+ label: "BlueBubbles URL",
879
+ name: "blueBubblesUrl"
880
+ }, {
881
+ default: withCtx((_2, _push3, _parent3, _scopeId2) => {
882
+ if (_push3) {
883
+ _push3(ssrRenderComponent(_component_UInput, {
884
+ modelValue: unref(bridgeConfigForm).blueBubblesUrl,
885
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).blueBubblesUrl = $event,
886
+ placeholder: "http://192.168.1.100:1234",
887
+ class: "w-full"
888
+ }, null, _parent3, _scopeId2));
889
+ } else {
890
+ return [
891
+ createVNode(_component_UInput, {
892
+ modelValue: unref(bridgeConfigForm).blueBubblesUrl,
893
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).blueBubblesUrl = $event,
894
+ placeholder: "http://192.168.1.100:1234",
895
+ class: "w-full"
896
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
897
+ ];
898
+ }
899
+ }),
900
+ _: 1
901
+ }, _parent2, _scopeId));
902
+ } else {
903
+ _push2(`<!---->`);
904
+ }
905
+ _push2(ssrRenderComponent(_component_UFormField, {
906
+ label: "Allowed Numbers",
907
+ name: "allowedNumbers",
908
+ hint: "Comma-separated. Leave empty for all."
909
+ }, {
910
+ default: withCtx((_2, _push3, _parent3, _scopeId2) => {
911
+ if (_push3) {
912
+ _push3(ssrRenderComponent(_component_UInput, {
913
+ modelValue: unref(bridgeConfigForm).allowedNumbers,
914
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).allowedNumbers = $event,
915
+ placeholder: "+15551234567, +15559876543",
916
+ class: "w-full"
917
+ }, null, _parent3, _scopeId2));
918
+ } else {
919
+ return [
920
+ createVNode(_component_UInput, {
921
+ modelValue: unref(bridgeConfigForm).allowedNumbers,
922
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).allowedNumbers = $event,
923
+ placeholder: "+15551234567, +15559876543",
924
+ class: "w-full"
925
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
926
+ ];
927
+ }
928
+ }),
929
+ _: 1
930
+ }, _parent2, _scopeId));
931
+ _push2(`<!--]-->`);
932
+ } else {
933
+ _push2(`<!---->`);
934
+ }
935
+ if (unref(editingBridge)?.platform === "google") {
936
+ _push2(`<!--[-->`);
937
+ _push2(ssrRenderComponent(_component_UFormField, {
938
+ label: "Enabled Services",
939
+ name: "enabledServices"
940
+ }, {
941
+ default: withCtx((_2, _push3, _parent3, _scopeId2) => {
942
+ if (_push3) {
943
+ _push3(`<div class="space-y-2"${_scopeId2}><!--[-->`);
944
+ ssrRenderList(googleServiceOptions, (svc) => {
945
+ _push3(`<label class="flex items-center gap-2 cursor-pointer"${_scopeId2}><input type="checkbox"${ssrIncludeBooleanAttr(unref(bridgeConfigForm).enabledServices.includes(svc.value)) ? " checked" : ""} class="rounded"${_scopeId2}><span class="text-sm"${_scopeId2}>${ssrInterpolate(svc.label)}</span></label>`);
946
+ });
947
+ _push3(`<!--]--></div>`);
948
+ } else {
949
+ return [
950
+ createVNode("div", { class: "space-y-2" }, [
951
+ (openBlock(), createBlock(Fragment, null, renderList(googleServiceOptions, (svc) => {
952
+ return createVNode("label", {
953
+ key: svc.value,
954
+ class: "flex items-center gap-2 cursor-pointer"
955
+ }, [
956
+ createVNode("input", {
957
+ type: "checkbox",
958
+ checked: unref(bridgeConfigForm).enabledServices.includes(svc.value),
959
+ class: "rounded",
960
+ onChange: ($event) => unref(bridgeConfigForm).enabledServices.includes(svc.value) ? unref(bridgeConfigForm).enabledServices = unref(bridgeConfigForm).enabledServices.filter((s) => s !== svc.value) : unref(bridgeConfigForm).enabledServices.push(svc.value)
961
+ }, null, 40, ["checked", "onChange"]),
962
+ createVNode("span", { class: "text-sm" }, toDisplayString(svc.label), 1)
963
+ ]);
964
+ }), 64))
965
+ ])
966
+ ];
967
+ }
968
+ }),
969
+ _: 1
970
+ }, _parent2, _scopeId));
971
+ _push2(ssrRenderComponent(_component_UFormField, {
972
+ label: "Google Account",
973
+ name: "account",
974
+ hint: "Email used with gogcli"
975
+ }, {
976
+ default: withCtx((_2, _push3, _parent3, _scopeId2) => {
977
+ if (_push3) {
978
+ _push3(ssrRenderComponent(_component_UInput, {
979
+ modelValue: unref(bridgeConfigForm).account,
980
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).account = $event,
981
+ placeholder: "user@gmail.com",
982
+ class: "w-full"
983
+ }, null, _parent3, _scopeId2));
984
+ } else {
985
+ return [
986
+ createVNode(_component_UInput, {
987
+ modelValue: unref(bridgeConfigForm).account,
988
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).account = $event,
989
+ placeholder: "user@gmail.com",
990
+ class: "w-full"
991
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
992
+ ];
993
+ }
994
+ }),
995
+ _: 1
996
+ }, _parent2, _scopeId));
997
+ _push2(`<!--]-->`);
998
+ } else {
999
+ _push2(`<!---->`);
1000
+ }
1001
+ if (unref(editingBridge)?.platform === "email") {
1002
+ _push2(`<!--[-->`);
1003
+ _push2(ssrRenderComponent(_component_UFormField, {
1004
+ label: "Email Address",
1005
+ name: "emailAddress"
1006
+ }, {
1007
+ default: withCtx((_2, _push3, _parent3, _scopeId2) => {
1008
+ if (_push3) {
1009
+ _push3(ssrRenderComponent(_component_UInput, {
1010
+ modelValue: unref(bridgeConfigForm).emailAddress,
1011
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).emailAddress = $event,
1012
+ placeholder: "user@example.com",
1013
+ class: "w-full"
1014
+ }, null, _parent3, _scopeId2));
1015
+ } else {
1016
+ return [
1017
+ createVNode(_component_UInput, {
1018
+ modelValue: unref(bridgeConfigForm).emailAddress,
1019
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).emailAddress = $event,
1020
+ placeholder: "user@example.com",
1021
+ class: "w-full"
1022
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
1023
+ ];
1024
+ }
1025
+ }),
1026
+ _: 1
1027
+ }, _parent2, _scopeId));
1028
+ _push2(`<div class="grid grid-cols-2 gap-4"${_scopeId}>`);
1029
+ _push2(ssrRenderComponent(_component_UFormField, {
1030
+ label: "IMAP Host",
1031
+ name: "imapHost"
1032
+ }, {
1033
+ default: withCtx((_2, _push3, _parent3, _scopeId2) => {
1034
+ if (_push3) {
1035
+ _push3(ssrRenderComponent(_component_UInput, {
1036
+ modelValue: unref(bridgeConfigForm).imapHost,
1037
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).imapHost = $event,
1038
+ placeholder: "imap.example.com",
1039
+ class: "w-full"
1040
+ }, null, _parent3, _scopeId2));
1041
+ } else {
1042
+ return [
1043
+ createVNode(_component_UInput, {
1044
+ modelValue: unref(bridgeConfigForm).imapHost,
1045
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).imapHost = $event,
1046
+ placeholder: "imap.example.com",
1047
+ class: "w-full"
1048
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
1049
+ ];
1050
+ }
1051
+ }),
1052
+ _: 1
1053
+ }, _parent2, _scopeId));
1054
+ _push2(ssrRenderComponent(_component_UFormField, {
1055
+ label: "IMAP Port",
1056
+ name: "imapPort"
1057
+ }, {
1058
+ default: withCtx((_2, _push3, _parent3, _scopeId2) => {
1059
+ if (_push3) {
1060
+ _push3(ssrRenderComponent(_component_UInput, {
1061
+ modelValue: unref(bridgeConfigForm).imapPort,
1062
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).imapPort = $event,
1063
+ placeholder: "993",
1064
+ class: "w-full"
1065
+ }, null, _parent3, _scopeId2));
1066
+ } else {
1067
+ return [
1068
+ createVNode(_component_UInput, {
1069
+ modelValue: unref(bridgeConfigForm).imapPort,
1070
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).imapPort = $event,
1071
+ placeholder: "993",
1072
+ class: "w-full"
1073
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
1074
+ ];
1075
+ }
1076
+ }),
1077
+ _: 1
1078
+ }, _parent2, _scopeId));
1079
+ _push2(`</div><div class="grid grid-cols-2 gap-4"${_scopeId}>`);
1080
+ _push2(ssrRenderComponent(_component_UFormField, {
1081
+ label: "SMTP Host",
1082
+ name: "smtpHost"
1083
+ }, {
1084
+ default: withCtx((_2, _push3, _parent3, _scopeId2) => {
1085
+ if (_push3) {
1086
+ _push3(ssrRenderComponent(_component_UInput, {
1087
+ modelValue: unref(bridgeConfigForm).smtpHost,
1088
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).smtpHost = $event,
1089
+ placeholder: "smtp.example.com",
1090
+ class: "w-full"
1091
+ }, null, _parent3, _scopeId2));
1092
+ } else {
1093
+ return [
1094
+ createVNode(_component_UInput, {
1095
+ modelValue: unref(bridgeConfigForm).smtpHost,
1096
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).smtpHost = $event,
1097
+ placeholder: "smtp.example.com",
1098
+ class: "w-full"
1099
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
1100
+ ];
1101
+ }
1102
+ }),
1103
+ _: 1
1104
+ }, _parent2, _scopeId));
1105
+ _push2(ssrRenderComponent(_component_UFormField, {
1106
+ label: "SMTP Port",
1107
+ name: "smtpPort"
1108
+ }, {
1109
+ default: withCtx((_2, _push3, _parent3, _scopeId2) => {
1110
+ if (_push3) {
1111
+ _push3(ssrRenderComponent(_component_UInput, {
1112
+ modelValue: unref(bridgeConfigForm).smtpPort,
1113
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).smtpPort = $event,
1114
+ placeholder: "587",
1115
+ class: "w-full"
1116
+ }, null, _parent3, _scopeId2));
1117
+ } else {
1118
+ return [
1119
+ createVNode(_component_UInput, {
1120
+ modelValue: unref(bridgeConfigForm).smtpPort,
1121
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).smtpPort = $event,
1122
+ placeholder: "587",
1123
+ class: "w-full"
1124
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
1125
+ ];
1126
+ }
1127
+ }),
1128
+ _: 1
1129
+ }, _parent2, _scopeId));
1130
+ _push2(`</div><!--]-->`);
1131
+ } else {
1132
+ _push2(`<!---->`);
1133
+ }
1134
+ _push2(`<div class="flex justify-end gap-2 pt-4"${_scopeId}>`);
1135
+ _push2(ssrRenderComponent(_component_UButton, {
1136
+ variant: "ghost",
1137
+ onClick: ($event) => bridgeConfigModal.value = false
1138
+ }, {
1139
+ default: withCtx((_2, _push3, _parent3, _scopeId2) => {
1140
+ if (_push3) {
1141
+ _push3(` Cancel `);
1142
+ } else {
1143
+ return [
1144
+ createTextVNode(" Cancel ")
1145
+ ];
1146
+ }
1147
+ }),
1148
+ _: 1
1149
+ }, _parent2, _scopeId));
1150
+ _push2(ssrRenderComponent(_component_UButton, {
1151
+ loading: unref(bridgeConfigSaving),
1152
+ onClick: handleBridgeConfigSave
1153
+ }, {
1154
+ default: withCtx((_2, _push3, _parent3, _scopeId2) => {
1155
+ if (_push3) {
1156
+ _push3(` Save `);
1157
+ } else {
1158
+ return [
1159
+ createTextVNode(" Save ")
1160
+ ];
1161
+ }
1162
+ }),
1163
+ _: 1
1164
+ }, _parent2, _scopeId));
1165
+ _push2(`</div></div>`);
1166
+ } else {
1167
+ return [
1168
+ createVNode("div", { class: "space-y-4" }, [
1169
+ unref(editingBridge) && platformRequiredSecrets[unref(editingBridge).platform].length ? (openBlock(), createBlock("div", {
1170
+ key: 0,
1171
+ class: "flex items-start gap-2 rounded-lg bg-elevated p-3 text-sm"
1172
+ }, [
1173
+ createVNode(_component_UIcon, {
1174
+ name: "i-lucide-info",
1175
+ class: "size-4 mt-0.5 text-dimmed shrink-0"
1176
+ }),
1177
+ createVNode("span", { class: "text-dimmed" }, [
1178
+ createTextVNode(" Requires "),
1179
+ (openBlock(true), createBlock(Fragment, null, renderList(platformRequiredSecrets[unref(editingBridge).platform], (key, i) => {
1180
+ return openBlock(), createBlock(Fragment, { key }, [
1181
+ createVNode("code", { class: "bg-elevated px-1 py-0.5 rounded text-xs" }, toDisplayString(key), 1),
1182
+ i < platformRequiredSecrets[unref(editingBridge).platform].length - 1 ? (openBlock(), createBlock(Fragment, { key: 0 }, [
1183
+ createTextVNode(", ")
1184
+ ], 64)) : createCommentVNode("", true)
1185
+ ], 64);
1186
+ }), 128)),
1187
+ createTextVNode(" in the Secrets tab. ")
1188
+ ])
1189
+ ])) : createCommentVNode("", true),
1190
+ createVNode(_component_UFormField, {
1191
+ label: "Name",
1192
+ name: "name"
1193
+ }, {
1194
+ default: withCtx(() => [
1195
+ createVNode(_component_UInput, {
1196
+ modelValue: unref(bridgeConfigForm).name,
1197
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).name = $event,
1198
+ placeholder: "Integration name",
1199
+ class: "w-full"
1200
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
1201
+ ]),
1202
+ _: 1
1203
+ }),
1204
+ unref(editingBridge)?.platform === "telegram" ? (openBlock(), createBlock(Fragment, { key: 1 }, [
1205
+ createVNode(_component_UFormField, {
1206
+ label: "Bot Username",
1207
+ name: "botUsername",
1208
+ hint: "Without the @ prefix"
1209
+ }, {
1210
+ default: withCtx(() => [
1211
+ createVNode(_component_UInput, {
1212
+ modelValue: unref(bridgeConfigForm).botUsername,
1213
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).botUsername = $event,
1214
+ placeholder: "my_bot",
1215
+ class: "w-full"
1216
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
1217
+ ]),
1218
+ _: 1
1219
+ }),
1220
+ createVNode(_component_UFormField, {
1221
+ label: "Allowed Chat IDs",
1222
+ name: "allowedChatIds",
1223
+ hint: "Comma-separated. Leave empty for all."
1224
+ }, {
1225
+ default: withCtx(() => [
1226
+ createVNode(_component_UInput, {
1227
+ modelValue: unref(bridgeConfigForm).allowedChatIds,
1228
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).allowedChatIds = $event,
1229
+ placeholder: "123456, -100789",
1230
+ class: "w-full"
1231
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
1232
+ ]),
1233
+ _: 1
1234
+ })
1235
+ ], 64)) : createCommentVNode("", true),
1236
+ unref(editingBridge)?.platform === "discord" ? (openBlock(), createBlock(Fragment, { key: 2 }, [
1237
+ createVNode(_component_UFormField, {
1238
+ label: "Listen Mode",
1239
+ name: "listenMode"
1240
+ }, {
1241
+ default: withCtx(() => [
1242
+ createVNode(_component_USelect, {
1243
+ modelValue: unref(bridgeConfigForm).listenMode,
1244
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).listenMode = $event,
1245
+ items: discordListenModeOptions,
1246
+ "value-key": "value",
1247
+ class: "w-full"
1248
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
1249
+ ]),
1250
+ _: 1
1251
+ }),
1252
+ createVNode(_component_UFormField, {
1253
+ label: "Server ID",
1254
+ name: "guildId",
1255
+ hint: "Optional. Limit to one server."
1256
+ }, {
1257
+ default: withCtx(() => [
1258
+ createVNode(_component_UInput, {
1259
+ modelValue: unref(bridgeConfigForm).guildId,
1260
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).guildId = $event,
1261
+ placeholder: "Discord server ID",
1262
+ class: "w-full"
1263
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
1264
+ ]),
1265
+ _: 1
1266
+ }),
1267
+ createVNode(_component_UFormField, {
1268
+ label: "Channel ID",
1269
+ name: "channelId",
1270
+ hint: "Optional. Limit to one channel (for 'all' mode)."
1271
+ }, {
1272
+ default: withCtx(() => [
1273
+ createVNode(_component_UInput, {
1274
+ modelValue: unref(bridgeConfigForm).channelId,
1275
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).channelId = $event,
1276
+ placeholder: "Discord channel ID",
1277
+ class: "w-full"
1278
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
1279
+ ]),
1280
+ _: 1
1281
+ })
1282
+ ], 64)) : createCommentVNode("", true),
1283
+ unref(editingBridge)?.platform === "imessage" ? (openBlock(), createBlock(Fragment, { key: 3 }, [
1284
+ createVNode(_component_UFormField, {
1285
+ label: "Strategy",
1286
+ name: "strategy"
1287
+ }, {
1288
+ default: withCtx(() => [
1289
+ createVNode(_component_USelect, {
1290
+ modelValue: unref(bridgeConfigForm).strategy,
1291
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).strategy = $event,
1292
+ items: imessageStrategyOptions,
1293
+ "value-key": "value",
1294
+ class: "w-full"
1295
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
1296
+ ]),
1297
+ _: 1
1298
+ }),
1299
+ unref(bridgeConfigForm).strategy === "bluebubbles" && !unref(secretKeys).includes("BLUEBUBBLES_PASSWORD") ? (openBlock(), createBlock("div", {
1300
+ key: 0,
1301
+ class: "flex items-start gap-2 rounded-lg bg-error/10 border border-error/20 p-3 text-sm"
1302
+ }, [
1303
+ createVNode(_component_UIcon, {
1304
+ name: "i-lucide-alert-triangle",
1305
+ class: "size-4 mt-0.5 text-error shrink-0"
1306
+ }),
1307
+ createVNode("span", { class: "text-dimmed" }, [
1308
+ createTextVNode(" BlueBubbles requires secret "),
1309
+ createVNode("code", { class: "text-xs bg-elevated px-1.5 py-0.5 rounded" }, "BLUEBUBBLES_PASSWORD"),
1310
+ createTextVNode(" in the Secrets tab. ")
1311
+ ])
1312
+ ])) : createCommentVNode("", true),
1313
+ unref(bridgeConfigForm).strategy === "bluebubbles" ? (openBlock(), createBlock(_component_UFormField, {
1314
+ key: 1,
1315
+ label: "BlueBubbles URL",
1316
+ name: "blueBubblesUrl"
1317
+ }, {
1318
+ default: withCtx(() => [
1319
+ createVNode(_component_UInput, {
1320
+ modelValue: unref(bridgeConfigForm).blueBubblesUrl,
1321
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).blueBubblesUrl = $event,
1322
+ placeholder: "http://192.168.1.100:1234",
1323
+ class: "w-full"
1324
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
1325
+ ]),
1326
+ _: 1
1327
+ })) : createCommentVNode("", true),
1328
+ createVNode(_component_UFormField, {
1329
+ label: "Allowed Numbers",
1330
+ name: "allowedNumbers",
1331
+ hint: "Comma-separated. Leave empty for all."
1332
+ }, {
1333
+ default: withCtx(() => [
1334
+ createVNode(_component_UInput, {
1335
+ modelValue: unref(bridgeConfigForm).allowedNumbers,
1336
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).allowedNumbers = $event,
1337
+ placeholder: "+15551234567, +15559876543",
1338
+ class: "w-full"
1339
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
1340
+ ]),
1341
+ _: 1
1342
+ })
1343
+ ], 64)) : createCommentVNode("", true),
1344
+ unref(editingBridge)?.platform === "google" ? (openBlock(), createBlock(Fragment, { key: 4 }, [
1345
+ createVNode(_component_UFormField, {
1346
+ label: "Enabled Services",
1347
+ name: "enabledServices"
1348
+ }, {
1349
+ default: withCtx(() => [
1350
+ createVNode("div", { class: "space-y-2" }, [
1351
+ (openBlock(), createBlock(Fragment, null, renderList(googleServiceOptions, (svc) => {
1352
+ return createVNode("label", {
1353
+ key: svc.value,
1354
+ class: "flex items-center gap-2 cursor-pointer"
1355
+ }, [
1356
+ createVNode("input", {
1357
+ type: "checkbox",
1358
+ checked: unref(bridgeConfigForm).enabledServices.includes(svc.value),
1359
+ class: "rounded",
1360
+ onChange: ($event) => unref(bridgeConfigForm).enabledServices.includes(svc.value) ? unref(bridgeConfigForm).enabledServices = unref(bridgeConfigForm).enabledServices.filter((s) => s !== svc.value) : unref(bridgeConfigForm).enabledServices.push(svc.value)
1361
+ }, null, 40, ["checked", "onChange"]),
1362
+ createVNode("span", { class: "text-sm" }, toDisplayString(svc.label), 1)
1363
+ ]);
1364
+ }), 64))
1365
+ ])
1366
+ ]),
1367
+ _: 1
1368
+ }),
1369
+ createVNode(_component_UFormField, {
1370
+ label: "Google Account",
1371
+ name: "account",
1372
+ hint: "Email used with gogcli"
1373
+ }, {
1374
+ default: withCtx(() => [
1375
+ createVNode(_component_UInput, {
1376
+ modelValue: unref(bridgeConfigForm).account,
1377
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).account = $event,
1378
+ placeholder: "user@gmail.com",
1379
+ class: "w-full"
1380
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
1381
+ ]),
1382
+ _: 1
1383
+ })
1384
+ ], 64)) : createCommentVNode("", true),
1385
+ unref(editingBridge)?.platform === "email" ? (openBlock(), createBlock(Fragment, { key: 5 }, [
1386
+ createVNode(_component_UFormField, {
1387
+ label: "Email Address",
1388
+ name: "emailAddress"
1389
+ }, {
1390
+ default: withCtx(() => [
1391
+ createVNode(_component_UInput, {
1392
+ modelValue: unref(bridgeConfigForm).emailAddress,
1393
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).emailAddress = $event,
1394
+ placeholder: "user@example.com",
1395
+ class: "w-full"
1396
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
1397
+ ]),
1398
+ _: 1
1399
+ }),
1400
+ createVNode("div", { class: "grid grid-cols-2 gap-4" }, [
1401
+ createVNode(_component_UFormField, {
1402
+ label: "IMAP Host",
1403
+ name: "imapHost"
1404
+ }, {
1405
+ default: withCtx(() => [
1406
+ createVNode(_component_UInput, {
1407
+ modelValue: unref(bridgeConfigForm).imapHost,
1408
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).imapHost = $event,
1409
+ placeholder: "imap.example.com",
1410
+ class: "w-full"
1411
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
1412
+ ]),
1413
+ _: 1
1414
+ }),
1415
+ createVNode(_component_UFormField, {
1416
+ label: "IMAP Port",
1417
+ name: "imapPort"
1418
+ }, {
1419
+ default: withCtx(() => [
1420
+ createVNode(_component_UInput, {
1421
+ modelValue: unref(bridgeConfigForm).imapPort,
1422
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).imapPort = $event,
1423
+ placeholder: "993",
1424
+ class: "w-full"
1425
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
1426
+ ]),
1427
+ _: 1
1428
+ })
1429
+ ]),
1430
+ createVNode("div", { class: "grid grid-cols-2 gap-4" }, [
1431
+ createVNode(_component_UFormField, {
1432
+ label: "SMTP Host",
1433
+ name: "smtpHost"
1434
+ }, {
1435
+ default: withCtx(() => [
1436
+ createVNode(_component_UInput, {
1437
+ modelValue: unref(bridgeConfigForm).smtpHost,
1438
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).smtpHost = $event,
1439
+ placeholder: "smtp.example.com",
1440
+ class: "w-full"
1441
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
1442
+ ]),
1443
+ _: 1
1444
+ }),
1445
+ createVNode(_component_UFormField, {
1446
+ label: "SMTP Port",
1447
+ name: "smtpPort"
1448
+ }, {
1449
+ default: withCtx(() => [
1450
+ createVNode(_component_UInput, {
1451
+ modelValue: unref(bridgeConfigForm).smtpPort,
1452
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).smtpPort = $event,
1453
+ placeholder: "587",
1454
+ class: "w-full"
1455
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
1456
+ ]),
1457
+ _: 1
1458
+ })
1459
+ ])
1460
+ ], 64)) : createCommentVNode("", true),
1461
+ createVNode("div", { class: "flex justify-end gap-2 pt-4" }, [
1462
+ createVNode(_component_UButton, {
1463
+ variant: "ghost",
1464
+ onClick: ($event) => bridgeConfigModal.value = false
1465
+ }, {
1466
+ default: withCtx(() => [
1467
+ createTextVNode(" Cancel ")
1468
+ ]),
1469
+ _: 1
1470
+ }, 8, ["onClick"]),
1471
+ createVNode(_component_UButton, {
1472
+ loading: unref(bridgeConfigSaving),
1473
+ onClick: handleBridgeConfigSave
1474
+ }, {
1475
+ default: withCtx(() => [
1476
+ createTextVNode(" Save ")
1477
+ ]),
1478
+ _: 1
1479
+ }, 8, ["loading"])
1480
+ ])
1481
+ ])
1482
+ ];
1483
+ }
1484
+ }),
1485
+ _: 1
1486
+ }, _parent));
1487
+ _push(`</div>`);
1488
+ };
1489
+ }
1490
+ });
1491
+ const _sfc_setup = _sfc_main.setup;
1492
+ _sfc_main.setup = (props, ctx) => {
1493
+ const ssrContext = useSSRContext();
1494
+ (ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("pages/settings/integrations.vue");
1495
+ return _sfc_setup ? _sfc_setup(props, ctx) : void 0;
1496
+ };
1497
+
1498
+ export { _sfc_main as default };
1499
+ //# sourceMappingURL=integrations-D5JWURiJ.mjs.map