cognova 0.2.7 → 0.2.8

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 (172) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/_nuxt/{BjFs8Ujb.js → -2AbaFNH.js} +1 -1
  3. package/.output/public/_nuxt/{B5OWqWCh.js → 0dqQoCHY.js} +1 -1
  4. package/.output/public/_nuxt/{DZ_azKLI.js → 2QHXgMyi.js} +1 -1
  5. package/.output/public/_nuxt/{DaiWSWdm.js → 36ZHqDPo.js} +1 -1
  6. package/.output/public/_nuxt/4XnyUc7C.js +1 -0
  7. package/.output/public/_nuxt/{DgKeJf5C.js → 6QDVg5TO.js} +1 -1
  8. package/.output/public/_nuxt/{RRoc4m9d.js → B-AlyT2D.js} +1 -1
  9. package/.output/public/_nuxt/{1Hz98MKF.js → B0xuHXvN.js} +1 -1
  10. package/.output/public/_nuxt/{BW-E-Sar.js → B2Xfh7am.js} +1 -1
  11. package/.output/public/_nuxt/{Bb1B0ntt.js → B5SnZL2l.js} +1 -1
  12. package/.output/public/_nuxt/{CEfkp9Rl.js → B6-U3KqJ.js} +2 -2
  13. package/.output/public/_nuxt/{Cebw7Q7c.js → B6G3NLfW.js} +1 -1
  14. package/.output/public/_nuxt/B8TQvzYX.js +1 -0
  15. package/.output/public/_nuxt/{D3V98LVR.js → B9zgEO8N.js} +1 -1
  16. package/.output/public/_nuxt/{CNwGp6eP.js → BBDxhFYY.js} +1 -1
  17. package/.output/public/_nuxt/{Dkzqkzki.js → BCCYopTB.js} +1 -1
  18. package/.output/public/_nuxt/{CfWDee_q.js → BE1CVWts.js} +1 -1
  19. package/.output/public/_nuxt/{BTk5mgdf.js → BF3tVKtX.js} +1 -1
  20. package/.output/public/_nuxt/{HCCuOAgZ.js → BHn8tRjg.js} +1 -1
  21. package/.output/public/_nuxt/BIo-9u_O.js +1 -0
  22. package/.output/public/_nuxt/{CG0fS-BQ.js → BJUff9Ku.js} +1 -1
  23. package/.output/public/_nuxt/{CrjKigv8.js → BLm0UviR.js} +1 -1
  24. package/.output/public/_nuxt/BLwctszt.js +1 -0
  25. package/.output/public/_nuxt/BMs0mHEp.js +1 -0
  26. package/.output/public/_nuxt/{DV0JMebZ.js → BSA-U0so.js} +1 -1
  27. package/.output/public/_nuxt/{D-wVwRIx.js → BUC36BHp.js} +1 -1
  28. package/.output/public/_nuxt/{CzqLfT8k.js → BVEFmI4I.js} +1 -1
  29. package/.output/public/_nuxt/{B43p0So7.js → BXtZVbmx.js} +1 -1
  30. package/.output/public/_nuxt/{BJ_GgKV0.js → BYtVdUIW.js} +1 -1
  31. package/.output/public/_nuxt/{CJ85o8FK.js → BZBNJD7U.js} +1 -1
  32. package/.output/public/_nuxt/{Dpp5cOwJ.js → BahXyh-A.js} +1 -1
  33. package/.output/public/_nuxt/{BmTCDcNm.js → BdxP21ep.js} +1 -1
  34. package/.output/public/_nuxt/{Bc0NIKN7.js → BefOhWHD.js} +1 -1
  35. package/.output/public/_nuxt/{DuOsLoVR.js → BhYoxmLV.js} +1 -1
  36. package/.output/public/_nuxt/{BMLwzSDu.js → Bhhg7oSf.js} +1 -1
  37. package/.output/public/_nuxt/{deSeNTOh.js → BjnQ1pI1.js} +1 -1
  38. package/.output/public/_nuxt/{qW7F87d8.js → BkO884Ds.js} +3 -3
  39. package/.output/public/_nuxt/{BNlugvM3.js → Bkc1Hpcf.js} +1 -1
  40. package/.output/public/_nuxt/{DgPiIWA2.js → BlsIfvSf.js} +1 -1
  41. package/.output/public/_nuxt/{Dysa6np_.js → BmaHzvZM.js} +1 -1
  42. package/.output/public/_nuxt/{CBrXB4hk.js → BmdlymIW.js} +1 -1
  43. package/.output/public/_nuxt/{CK5Ef4YR.js → BnJ-6YDw.js} +1 -1
  44. package/.output/public/_nuxt/{C5nfaH9w.js → BqTdsCnW.js} +1 -1
  45. package/.output/public/_nuxt/{CjRmY2OQ.js → BrOKokPO.js} +1 -1
  46. package/.output/public/_nuxt/{B7-0ADn3.js → Buf1PAiO.js} +1 -1
  47. package/.output/public/_nuxt/{CqiOV9n1.js → BvstjGHC.js} +1 -1
  48. package/.output/public/_nuxt/{DsKy-gee.js → BwC62XRN.js} +1 -1
  49. package/.output/public/_nuxt/{WWNeb45u.js → Bwn-CRYH.js} +1 -1
  50. package/.output/public/_nuxt/{BsXPllgv.js → BwyXWqBY.js} +1 -1
  51. package/.output/public/_nuxt/{C6Kc4XvS.js → BxShcW0K.js} +1 -1
  52. package/.output/public/_nuxt/{NBE83ZQn.js → C-HCArYP.js} +1 -1
  53. package/.output/public/_nuxt/{sdvIKLwS.js → C-Ygk9x5.js} +1 -1
  54. package/.output/public/_nuxt/{Dx2Tgm6S.js → C075hYlX.js} +1 -1
  55. package/.output/public/_nuxt/{C14DGwaT.js → C13FKhqK.js} +1 -1
  56. package/.output/public/_nuxt/{BLszW9T3.js → C1tCdK-M.js} +1 -1
  57. package/.output/public/_nuxt/{BdCB2PoJ.js → C21BjagS.js} +1 -1
  58. package/.output/public/_nuxt/{B_28CKij.js → C24so3m7.js} +2 -2
  59. package/.output/public/_nuxt/{Drr-RSSP.js → C3tximD1.js} +1 -1
  60. package/.output/public/_nuxt/{XzRnkkwG.js → C6FFW_cO.js} +1 -1
  61. package/.output/public/_nuxt/{Cedv1M65.js → C6sX7TYf.js} +1 -1
  62. package/.output/public/_nuxt/{CnW8zyuA.js → C7qhmmZh.js} +1 -1
  63. package/.output/public/_nuxt/{CSQ-nblB.js → CAfyXyeo.js} +1 -1
  64. package/.output/public/_nuxt/{DxR8g9So.js → CClsKJ9A.js} +1 -1
  65. package/.output/public/_nuxt/{Ci-MVdCd.js → CDkyQ1eQ.js} +1 -1
  66. package/.output/public/_nuxt/CE9_ECxx.js +1 -0
  67. package/.output/public/_nuxt/{JJIcQEna.js → CEDw8osP.js} +1 -1
  68. package/.output/public/_nuxt/{CwJR22-0.js → CEz288t8.js} +1 -1
  69. package/.output/public/_nuxt/{BvuV9uCn.js → CF33v_m5.js} +1 -1
  70. package/.output/public/_nuxt/{DytaiikM.js → CH_jROT9.js} +1 -1
  71. package/.output/public/_nuxt/{NlScC3GW.js → CO3hceDE.js} +1 -1
  72. package/.output/public/_nuxt/{ByfSJZV6.js → CQ3tAemj.js} +1 -1
  73. package/.output/public/_nuxt/{DMsHLHmB.js → CSHcfejh.js} +1 -1
  74. package/.output/public/_nuxt/{DAs574wU.js → CSjOaBKu.js} +1 -1
  75. package/.output/public/_nuxt/{DNpsjOxN.js → CVYcsqmL.js} +1 -1
  76. package/.output/public/_nuxt/{DfpSaqgV.js → CXTrUfQ5.js} +1 -1
  77. package/.output/public/_nuxt/{0LyRrTRM.js → CY7f553E.js} +1 -1
  78. package/.output/public/_nuxt/{A5lrd5_j.js → CYQP4zpi.js} +1 -1
  79. package/.output/public/_nuxt/CbvNJVrk.js +1 -0
  80. package/.output/public/_nuxt/CewcVxDS.js +1 -0
  81. package/.output/public/_nuxt/{1IuG3yiQ.js → CfY_bsV0.js} +1 -1
  82. package/.output/public/_nuxt/{4bC1z31I.js → ClGn48iq.js} +1 -1
  83. package/.output/public/_nuxt/{CwaMSU1O.js → CqFcWBkW.js} +1 -1
  84. package/.output/public/_nuxt/Cr0NfhPB.js +1 -0
  85. package/.output/public/_nuxt/{CXuKrnTA.js → CrmE-JGu.js} +1 -1
  86. package/.output/public/_nuxt/{CW8xtqwN.js → Cve4psva.js} +1 -1
  87. package/.output/public/_nuxt/{BsPj3ifk.js → CzAZpALW.js} +1 -1
  88. package/.output/public/_nuxt/{S4a_N6rD.js → D-5A6cMB.js} +1 -1
  89. package/.output/public/_nuxt/{HC3657Xq.js → D-Ge96eV.js} +1 -1
  90. package/.output/public/_nuxt/{fTEmwfo4.js → D04CyXmf.js} +1 -1
  91. package/.output/public/_nuxt/{B9Kd_0HK.js → D2kQkOaG.js} +1 -1
  92. package/.output/public/_nuxt/{jeu3Xx8e.js → D4Cizi4y.js} +1 -1
  93. package/.output/public/_nuxt/{B-5roYpk.js → D4X6ONPF.js} +1 -1
  94. package/.output/public/_nuxt/{_16_b82K.js → D4_89MZm.js} +1 -1
  95. package/.output/public/_nuxt/{Db5XIfWS.js → D79lbuWG.js} +1 -1
  96. package/.output/public/_nuxt/{DAFasgHH.js → D7pKT3IW.js} +1 -1
  97. package/.output/public/_nuxt/{DZdh7_lh.js → D887s9k9.js} +1 -1
  98. package/.output/public/_nuxt/{DImdNj-F.js → D9aYkNhQ.js} +1 -1
  99. package/.output/public/_nuxt/{BoPAYize.js → DJt7Rogf.js} +1 -1
  100. package/.output/public/_nuxt/{BZFXnEwe.js → DKKY8zWm.js} +1 -1
  101. package/.output/public/_nuxt/{BJi2ZHtT.js → DLUvsixu.js} +1 -1
  102. package/.output/public/_nuxt/{zBoPDS4z.js → DMb_1D81.js} +1 -1
  103. package/.output/public/_nuxt/{CzTTKfet.js → DX_9SfFb.js} +1 -1
  104. package/.output/public/_nuxt/{CpC3C9gj.js → DZEuR9ms.js} +1 -1
  105. package/.output/public/_nuxt/{DCco_rlV.js → D_O7SlHm.js} +1 -1
  106. package/.output/public/_nuxt/{DvgLoqaC.js → D_obX2Hj.js} +1 -1
  107. package/.output/public/_nuxt/{CeDxLTxX.js → DaBSQDif.js} +1 -1
  108. package/.output/public/_nuxt/{DB3y_21M.js → Dbfwn2zk.js} +1 -1
  109. package/.output/public/_nuxt/{-2wkydbj.js → DcbbfwCe.js} +1 -1
  110. package/.output/public/_nuxt/{MdebRWqA.js → DmDPSvxi.js} +1 -1
  111. package/.output/public/_nuxt/{CVr40yKH.js → DmOS3vFH.js} +1 -1
  112. package/.output/public/_nuxt/DmcMCO8x.js +1 -0
  113. package/.output/public/_nuxt/DmlZSBjF.js +1 -0
  114. package/.output/public/_nuxt/{CB8_A8N4.js → DqzomZoo.js} +1 -1
  115. package/.output/public/_nuxt/{0J8pJb0Z.js → Drxf7nJz.js} +1 -1
  116. package/.output/public/_nuxt/{CjYUi9c8.js → Dt5mOzXj.js} +1 -1
  117. package/.output/public/_nuxt/{Brqrl-cH.js → DtJnWtpL.js} +1 -1
  118. package/.output/public/_nuxt/{CwCEQ4Dw.js → DtyyytRx.js} +1 -1
  119. package/.output/public/_nuxt/{CphXSvBo.js → DwIYtFfA.js} +1 -1
  120. package/.output/public/_nuxt/{CLZS246x.js → GGcn5KPW.js} +1 -1
  121. package/.output/public/_nuxt/{pkbwpgSD.js → GYf-vnR6.js} +1 -1
  122. package/.output/public/_nuxt/{Bn8loaeQ.js → ImPsUDiH.js} +1 -1
  123. package/.output/public/_nuxt/{hqpqUuXS.js → JReYPlwF.js} +1 -1
  124. package/.output/public/_nuxt/{CgQKyBSS.js → KEeoKtq_.js} +1 -1
  125. package/.output/public/_nuxt/{Bf34lExB.js → LQNRVThr.js} +1 -1
  126. package/.output/public/_nuxt/{BhOIdu3Z.js → MWUW1sIF.js} +1 -1
  127. package/.output/public/_nuxt/{w3t8WD8v.js → Pn7VD6uQ.js} +1 -1
  128. package/.output/public/_nuxt/{BaJEGr8G.js → SfaNtyKS.js} +1 -1
  129. package/.output/public/_nuxt/{vM-wdhkZ.js → U3f6dy8i.js} +1 -1
  130. package/.output/public/_nuxt/builds/latest.json +1 -1
  131. package/.output/public/_nuxt/builds/meta/410e449d-9fe8-43a0-ae07-80797693b9b8.json +1 -0
  132. package/.output/public/_nuxt/{BrICHPil.js → cPPThz84.js} +1 -1
  133. package/.output/public/_nuxt/{CxJr4mB0.js → dB7G4iIC.js} +1 -1
  134. package/.output/public/_nuxt/{EgYyfo1g.js → eE8TtXgC.js} +3 -3
  135. package/.output/public/_nuxt/iBaivqi8.js +1 -0
  136. package/.output/public/_nuxt/{BLL1JLwq.js → ijmD2cEW.js} +1 -1
  137. package/.output/public/_nuxt/{DpYns7cT.js → it8syoZI.js} +1 -1
  138. package/.output/public/_nuxt/mT7Mt2d7.js +1 -0
  139. package/.output/public/_nuxt/{Bb9LNSu_.js → mfAEx0Kz.js} +1 -1
  140. package/.output/public/_nuxt/{MzEmU9ER.js → nHSiDk8N.js} +1 -1
  141. package/.output/public/_nuxt/{CvMqUdkl.js → njnzCNrH.js} +3 -3
  142. package/.output/public/_nuxt/{atVSHCxP.js → pHCJ6lhw.js} +1 -1
  143. package/.output/public/_nuxt/{Cow1TrPj.js → vES4kgx7.js} +1 -1
  144. package/.output/public/_nuxt/{Zjvb5YJR.js → yJ9vRvHj.js} +1 -1
  145. package/.output/public/_nuxt/{B8Kve-DH.js → zO9MgHj2.js} +1 -1
  146. package/.output/public/_nuxt/{BaVaTug8.js → zXvvpsZj.js} +1 -1
  147. package/.output/server/chunks/build/client.precomputed.mjs +1 -1
  148. package/.output/server/chunks/build/server.mjs +1 -1
  149. package/.output/server/chunks/build/{settings-DuT6LGJZ.mjs → settings-ByUXa46k.mjs} +1507 -218
  150. package/.output/server/chunks/build/settings-ByUXa46k.mjs.map +1 -0
  151. package/.output/server/chunks/build/styles.mjs +2 -2
  152. package/.output/server/chunks/nitro/nitro.mjs +872 -872
  153. package/.output/server/package.json +1 -1
  154. package/app/pages/settings.vue +441 -5
  155. package/package.json +1 -1
  156. package/server/api/skills/import.post.ts +1 -1
  157. package/server/bridge/adapters/telegram.ts +1 -1
  158. package/.output/public/_nuxt/B-YQztaH.js +0 -1
  159. package/.output/public/_nuxt/B1gFtqXK.js +0 -1
  160. package/.output/public/_nuxt/BTfZ7nek.js +0 -1
  161. package/.output/public/_nuxt/BbPnqQJ0.js +0 -1
  162. package/.output/public/_nuxt/BhSWIRpp.js +0 -1
  163. package/.output/public/_nuxt/By6kmkhJ.js +0 -1
  164. package/.output/public/_nuxt/C4XVJnNJ.js +0 -1
  165. package/.output/public/_nuxt/CkvyAKbu.js +0 -1
  166. package/.output/public/_nuxt/D2f7BlK2.js +0 -1
  167. package/.output/public/_nuxt/D2lmhTjQ.js +0 -1
  168. package/.output/public/_nuxt/D64-rCSQ.js +0 -1
  169. package/.output/public/_nuxt/DGP2JJt8.js +0 -1
  170. package/.output/public/_nuxt/builds/meta/9863fe43-d78c-4b29-a1e8-e6de61119507.json +0 -1
  171. package/.output/public/_nuxt/f7zDjk6q.js +0 -1
  172. package/.output/server/chunks/build/settings-DuT6LGJZ.mjs.map +0 -1
@@ -11,8 +11,8 @@ import { _ as _sfc_main$4 } from './Skeleton-DZqsQzFi.mjs';
11
11
  import { _ as _sfc_main$b } from './Switch-GWdksmY6.mjs';
12
12
  import { _ as _sfc_main$5 } from './Modal-Z_SoWhh-.mjs';
13
13
  import { _ as _sfc_main$9 } from './Select-BB1oLrCD.mjs';
14
- import { defineComponent, reactive, ref, watch, mergeProps, withCtx, createVNode, unref, isRef, createTextVNode, toDisplayString, createBlock, openBlock, Fragment, renderList, createCommentVNode, useSSRContext } from 'vue';
15
- import { ssrRenderComponent, ssrInterpolate } from 'vue/server-renderer';
14
+ import { defineComponent, reactive, ref, watch, mergeProps, withCtx, createVNode, unref, isRef, createTextVNode, toDisplayString, createBlock, openBlock, Fragment, renderList, createCommentVNode, withModifiers, useSSRContext } from 'vue';
15
+ import { ssrRenderComponent, ssrInterpolate, ssrRenderList, ssrIncludeBooleanAttr } from 'vue/server-renderer';
16
16
  import { T as defaultNotificationPreferences } from '../nitro/nitro.mjs';
17
17
  import { u as useAuth } from './useAuth-rW9toE_m.mjs';
18
18
  import { u as useNotificationBus } from './useNotificationBus-BG5JNQf1.mjs';
@@ -290,6 +290,62 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
290
290
  platform: "telegram",
291
291
  name: ""
292
292
  });
293
+ const bridgeConfigModal = ref(false);
294
+ const editingBridge = ref(null);
295
+ const bridgeConfigSaving = ref(false);
296
+ const bridgeConfigForm = reactive({
297
+ name: "",
298
+ // Telegram
299
+ botUsername: "",
300
+ allowedChatIds: "",
301
+ // Discord
302
+ listenMode: "mentions",
303
+ guildId: "",
304
+ channelId: "",
305
+ // iMessage
306
+ strategy: "imsg",
307
+ allowedNumbers: "",
308
+ blueBubblesUrl: "",
309
+ // Google
310
+ enabledServices: [],
311
+ account: "",
312
+ // Email
313
+ imapHost: "",
314
+ imapPort: "",
315
+ smtpHost: "",
316
+ smtpPort: "",
317
+ emailAddress: ""
318
+ });
319
+ const discordListenModeOptions = [
320
+ { value: "mentions", label: "Mentions & DMs" },
321
+ { value: "dm", label: "DMs only" },
322
+ { value: "all", label: "All messages" }
323
+ ];
324
+ const imessageStrategyOptions = [
325
+ { value: "imsg", label: "Local (imsg CLI)" },
326
+ { value: "bluebubbles", label: "BlueBubbles" }
327
+ ];
328
+ const googleServiceOptions = [
329
+ { value: "gmail", label: "Gmail" },
330
+ { value: "calendar", label: "Calendar" },
331
+ { value: "drive", label: "Drive" },
332
+ { value: "contacts", label: "Contacts" },
333
+ { value: "tasks", label: "Tasks" }
334
+ ];
335
+ const platformNamePlaceholders = {
336
+ telegram: "My Telegram Bot",
337
+ discord: "My Discord Bot",
338
+ imessage: "iMessage Bridge",
339
+ google: "Google Suite",
340
+ email: "Work Email"
341
+ };
342
+ const platformSecretHints = {
343
+ telegram: "TELEGRAM_BOT_TOKEN",
344
+ discord: "DISCORD_BOT_TOKEN",
345
+ imessage: null,
346
+ google: null,
347
+ email: null
348
+ };
293
349
  const platformOptions = [
294
350
  { value: "telegram", label: "Telegram", icon: "i-lucide-send" },
295
351
  { value: "discord", label: "Discord", icon: "i-lucide-message-circle" },
@@ -313,6 +369,102 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
313
369
  }
314
370
  bridgesLoading.value = false;
315
371
  }
372
+ function openBridgeConfig(bridge) {
373
+ editingBridge.value = bridge;
374
+ bridgeConfigForm.name = bridge.name;
375
+ const config = bridge.config ? JSON.parse(bridge.config) : {};
376
+ bridgeConfigForm.botUsername = "";
377
+ bridgeConfigForm.allowedChatIds = "";
378
+ bridgeConfigForm.listenMode = "mentions";
379
+ bridgeConfigForm.guildId = "";
380
+ bridgeConfigForm.channelId = "";
381
+ bridgeConfigForm.strategy = "imsg";
382
+ bridgeConfigForm.allowedNumbers = "";
383
+ bridgeConfigForm.blueBubblesUrl = "";
384
+ bridgeConfigForm.enabledServices = [];
385
+ bridgeConfigForm.account = "";
386
+ bridgeConfigForm.imapHost = "";
387
+ bridgeConfigForm.imapPort = "";
388
+ bridgeConfigForm.smtpHost = "";
389
+ bridgeConfigForm.smtpPort = "";
390
+ bridgeConfigForm.emailAddress = "";
391
+ switch (bridge.platform) {
392
+ case "telegram":
393
+ bridgeConfigForm.botUsername = config.botUsername || "";
394
+ bridgeConfigForm.allowedChatIds = (config.allowedChatIds || []).join(", ");
395
+ break;
396
+ case "discord":
397
+ bridgeConfigForm.listenMode = config.listenMode || "mentions";
398
+ bridgeConfigForm.guildId = config.guildId || "";
399
+ bridgeConfigForm.channelId = config.channelId || "";
400
+ break;
401
+ case "imessage":
402
+ bridgeConfigForm.strategy = config.strategy || "imsg";
403
+ bridgeConfigForm.allowedNumbers = (config.allowedNumbers || []).join(", ");
404
+ bridgeConfigForm.blueBubblesUrl = config.blueBubblesUrl || "";
405
+ break;
406
+ case "google":
407
+ bridgeConfigForm.enabledServices = config.enabledServices || [];
408
+ bridgeConfigForm.account = config.account || "";
409
+ break;
410
+ case "email":
411
+ bridgeConfigForm.imapHost = config.imapHost || "";
412
+ bridgeConfigForm.imapPort = config.imapPort?.toString() || "";
413
+ bridgeConfigForm.smtpHost = config.smtpHost || "";
414
+ bridgeConfigForm.smtpPort = config.smtpPort?.toString() || "";
415
+ bridgeConfigForm.emailAddress = config.emailAddress || "";
416
+ break;
417
+ }
418
+ bridgeConfigModal.value = true;
419
+ }
420
+ async function handleBridgeConfigSave() {
421
+ if (!editingBridge.value) return;
422
+ const platform = editingBridge.value.platform;
423
+ let config = {};
424
+ if (editingBridge.value.config)
425
+ config = JSON.parse(editingBridge.value.config);
426
+ switch (platform) {
427
+ case "telegram":
428
+ config.botUsername = bridgeConfigForm.botUsername || void 0;
429
+ config.allowedChatIds = bridgeConfigForm.allowedChatIds ? bridgeConfigForm.allowedChatIds.split(",").map((s) => s.trim()).filter(Boolean) : void 0;
430
+ break;
431
+ case "discord":
432
+ config.listenMode = bridgeConfigForm.listenMode;
433
+ config.guildId = bridgeConfigForm.guildId || void 0;
434
+ config.channelId = bridgeConfigForm.channelId || void 0;
435
+ break;
436
+ case "imessage":
437
+ config.strategy = bridgeConfigForm.strategy;
438
+ config.allowedNumbers = bridgeConfigForm.allowedNumbers ? bridgeConfigForm.allowedNumbers.split(",").map((s) => s.trim()).filter(Boolean) : void 0;
439
+ config.blueBubblesUrl = bridgeConfigForm.blueBubblesUrl || void 0;
440
+ break;
441
+ case "google":
442
+ config.enabledServices = bridgeConfigForm.enabledServices;
443
+ config.account = bridgeConfigForm.account || void 0;
444
+ break;
445
+ case "email":
446
+ config.imapHost = bridgeConfigForm.imapHost || void 0;
447
+ config.imapPort = bridgeConfigForm.imapPort ? Number(bridgeConfigForm.imapPort) : void 0;
448
+ config.smtpHost = bridgeConfigForm.smtpHost || void 0;
449
+ config.smtpPort = bridgeConfigForm.smtpPort ? Number(bridgeConfigForm.smtpPort) : void 0;
450
+ config.emailAddress = bridgeConfigForm.emailAddress || void 0;
451
+ break;
452
+ }
453
+ bridgeConfigSaving.value = true;
454
+ try {
455
+ await $fetch(`/api/bridges/${editingBridge.value.id}`, {
456
+ method: "PUT",
457
+ body: { name: bridgeConfigForm.name, config }
458
+ });
459
+ toast.add({ title: "Integration updated", color: "success" });
460
+ bridgeConfigModal.value = false;
461
+ await fetchBridges();
462
+ } catch (err) {
463
+ const error = err;
464
+ toast.add({ title: "Failed to update integration", description: error.data?.message, color: "error" });
465
+ }
466
+ bridgeConfigSaving.value = false;
467
+ }
316
468
  function openCreateBridge() {
317
469
  bridgeForm.platform = "telegram";
318
470
  bridgeForm.name = "";
@@ -934,7 +1086,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
934
1086
  _push4(ssrRenderComponent(_component_UInput, {
935
1087
  modelValue: unref(bridgeForm).name,
936
1088
  "onUpdate:modelValue": ($event) => unref(bridgeForm).name = $event,
937
- placeholder: "My Telegram Bot",
1089
+ placeholder: platformNamePlaceholders[unref(bridgeForm).platform],
938
1090
  class: "w-full"
939
1091
  }, null, _parent4, _scopeId3));
940
1092
  } else {
@@ -942,9 +1094,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
942
1094
  createVNode(_component_UInput, {
943
1095
  modelValue: unref(bridgeForm).name,
944
1096
  "onUpdate:modelValue": ($event) => unref(bridgeForm).name = $event,
945
- placeholder: "My Telegram Bot",
1097
+ placeholder: platformNamePlaceholders[unref(bridgeForm).platform],
946
1098
  class: "w-full"
947
- }, null, 8, ["modelValue", "onUpdate:modelValue"])
1099
+ }, null, 8, ["modelValue", "onUpdate:modelValue", "placeholder"])
948
1100
  ];
949
1101
  }
950
1102
  }),
@@ -1008,9 +1160,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1008
1160
  createVNode(_component_UInput, {
1009
1161
  modelValue: unref(bridgeForm).name,
1010
1162
  "onUpdate:modelValue": ($event) => unref(bridgeForm).name = $event,
1011
- placeholder: "My Telegram Bot",
1163
+ placeholder: platformNamePlaceholders[unref(bridgeForm).platform],
1012
1164
  class: "w-full"
1013
- }, null, 8, ["modelValue", "onUpdate:modelValue"])
1165
+ }, null, 8, ["modelValue", "onUpdate:modelValue", "placeholder"])
1014
1166
  ]),
1015
1167
  _: 1
1016
1168
  }),
@@ -1120,212 +1272,1036 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1120
1272
  }),
1121
1273
  _: 1
1122
1274
  }, _parent2, _scopeId));
1123
- } else {
1124
- return [
1125
- createVNode(_component_UDashboardNavbar, { title: "Settings" }, {
1126
- right: withCtx(() => [
1127
- createVNode(_component_UColorModeButton)
1128
- ]),
1129
- _: 1
1130
- }),
1131
- createVNode("div", { class: "p-6" }, [
1132
- createVNode(_component_ClientOnly, null, {
1133
- fallback: withCtx(() => [
1134
- createVNode("div", { class: "space-y-8 max-w-xl mx-auto py-6" }, [
1135
- createVNode(_component_USkeleton, { class: "h-10 w-full" }),
1136
- createVNode("div", { class: "space-y-4" }, [
1137
- createVNode(_component_USkeleton, { class: "h-5 w-20" }),
1138
- createVNode(_component_USkeleton, { class: "h-10 w-full" }),
1139
- createVNode(_component_USkeleton, { class: "h-10 w-28" })
1140
- ])
1275
+ _push2(ssrRenderComponent(_component_UModal, {
1276
+ open: unref(bridgeConfigModal),
1277
+ "onUpdate:open": ($event) => isRef(bridgeConfigModal) ? bridgeConfigModal.value = $event : null
1278
+ }, {
1279
+ header: withCtx((_2, _push3, _parent3, _scopeId2) => {
1280
+ if (_push3) {
1281
+ _push3(`<div class="flex items-center gap-2"${_scopeId2}>`);
1282
+ _push3(ssrRenderComponent(_component_UIcon, {
1283
+ name: platformOptions.find((p) => p.value === unref(editingBridge)?.platform)?.icon || "i-lucide-plug",
1284
+ class: "size-5"
1285
+ }, null, _parent3, _scopeId2));
1286
+ _push3(`<h3 class="text-lg font-semibold"${_scopeId2}> Configure ${ssrInterpolate(unref(editingBridge)?.name)}</h3></div>`);
1287
+ } else {
1288
+ return [
1289
+ createVNode("div", { class: "flex items-center gap-2" }, [
1290
+ createVNode(_component_UIcon, {
1291
+ name: platformOptions.find((p) => p.value === unref(editingBridge)?.platform)?.icon || "i-lucide-plug",
1292
+ class: "size-5"
1293
+ }, null, 8, ["name"]),
1294
+ createVNode("h3", { class: "text-lg font-semibold" }, " Configure " + toDisplayString(unref(editingBridge)?.name), 1)
1141
1295
  ])
1142
- ]),
1143
- default: withCtx(() => [
1144
- createVNode(_component_UTabs, {
1145
- items: tabs,
1146
- "default-value": "account",
1147
- class: "w-full mx-auto",
1148
- ui: { list: "max-w-xl" }
1296
+ ];
1297
+ }
1298
+ }),
1299
+ body: withCtx((_2, _push3, _parent3, _scopeId2) => {
1300
+ if (_push3) {
1301
+ _push3(`<div class="space-y-4"${_scopeId2}>`);
1302
+ if (unref(editingBridge) && platformSecretHints[unref(editingBridge).platform]) {
1303
+ _push3(`<div class="flex items-start gap-2 rounded-lg bg-elevated p-3 text-sm"${_scopeId2}>`);
1304
+ _push3(ssrRenderComponent(_component_UIcon, {
1305
+ name: "i-lucide-info",
1306
+ class: "size-4 mt-0.5 text-dimmed shrink-0"
1307
+ }, null, _parent3, _scopeId2));
1308
+ _push3(`<span class="text-dimmed"${_scopeId2}> Requires secret <code class="bg-elevated px-1 py-0.5 rounded text-xs"${_scopeId2}>${ssrInterpolate(platformSecretHints[unref(editingBridge).platform])}</code> in the Secrets tab. </span></div>`);
1309
+ } else {
1310
+ _push3(`<!---->`);
1311
+ }
1312
+ _push3(ssrRenderComponent(_component_UFormField, {
1313
+ label: "Name",
1314
+ name: "name"
1315
+ }, {
1316
+ default: withCtx((_3, _push4, _parent4, _scopeId3) => {
1317
+ if (_push4) {
1318
+ _push4(ssrRenderComponent(_component_UInput, {
1319
+ modelValue: unref(bridgeConfigForm).name,
1320
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).name = $event,
1321
+ placeholder: "Integration name",
1322
+ class: "w-full"
1323
+ }, null, _parent4, _scopeId3));
1324
+ } else {
1325
+ return [
1326
+ createVNode(_component_UInput, {
1327
+ modelValue: unref(bridgeConfigForm).name,
1328
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).name = $event,
1329
+ placeholder: "Integration name",
1330
+ class: "w-full"
1331
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
1332
+ ];
1333
+ }
1334
+ }),
1335
+ _: 1
1336
+ }, _parent3, _scopeId2));
1337
+ if (unref(editingBridge)?.platform === "telegram") {
1338
+ _push3(`<!--[-->`);
1339
+ _push3(ssrRenderComponent(_component_UFormField, {
1340
+ label: "Bot Username",
1341
+ name: "botUsername",
1342
+ hint: "Without the @ prefix"
1149
1343
  }, {
1150
- account: withCtx(() => [
1151
- createVNode("div", { class: "space-y-8 max-w-2xl mx-auto py-6" }, [
1152
- createVNode("div", null, [
1153
- createVNode("h3", { class: "text-lg font-semibold mb-4" }, " Profile "),
1154
- createVNode(_component_UForm, {
1155
- state: unref(profileState),
1156
- class: "space-y-4",
1157
- onSubmit: handleProfileSubmit
1158
- }, {
1159
- default: withCtx(() => [
1160
- createVNode(_component_UFormField, {
1161
- label: "Name",
1162
- name: "name"
1163
- }, {
1164
- default: withCtx(() => [
1165
- createVNode(_component_UInput, {
1166
- modelValue: unref(profileState).name,
1167
- "onUpdate:modelValue": ($event) => unref(profileState).name = $event,
1168
- placeholder: "Your name",
1169
- class: "w-full"
1170
- }, null, 8, ["modelValue", "onUpdate:modelValue"])
1171
- ]),
1172
- _: 1
1173
- }),
1174
- createVNode(_component_UButton, {
1175
- type: "submit",
1176
- loading: unref(profileLoading)
1177
- }, {
1178
- default: withCtx(() => [
1179
- createTextVNode(" Save Name ")
1180
- ]),
1181
- _: 1
1182
- }, 8, ["loading"])
1183
- ]),
1184
- _: 1
1185
- }, 8, ["state"])
1186
- ]),
1187
- createVNode(_component_USeparator),
1188
- createVNode("div", null, [
1189
- createVNode("h3", { class: "text-lg font-semibold mb-4" }, " Email Address "),
1190
- createVNode(_component_UForm, {
1191
- state: unref(emailState),
1192
- class: "space-y-4",
1193
- onSubmit: handleEmailSubmit
1194
- }, {
1195
- default: withCtx(() => [
1196
- createVNode(_component_UFormField, {
1197
- label: "Email",
1198
- name: "newEmail"
1199
- }, {
1200
- default: withCtx(() => [
1201
- createVNode(_component_UInput, {
1202
- modelValue: unref(emailState).newEmail,
1203
- "onUpdate:modelValue": ($event) => unref(emailState).newEmail = $event,
1204
- type: "email",
1205
- placeholder: "your@email.com",
1206
- class: "w-full"
1207
- }, null, 8, ["modelValue", "onUpdate:modelValue"])
1208
- ]),
1209
- _: 1
1210
- }),
1211
- createVNode(_component_UButton, {
1212
- type: "submit",
1213
- loading: unref(emailLoading)
1214
- }, {
1215
- default: withCtx(() => [
1216
- createTextVNode(" Change Email ")
1217
- ]),
1218
- _: 1
1219
- }, 8, ["loading"])
1220
- ]),
1221
- _: 1
1222
- }, 8, ["state"])
1223
- ]),
1224
- createVNode(_component_USeparator),
1225
- createVNode("div", null, [
1226
- createVNode("h3", { class: "text-lg font-semibold mb-4" }, " Change Password "),
1227
- createVNode(_component_UForm, {
1228
- state: unref(passwordState),
1229
- class: "space-y-4",
1230
- onSubmit: handlePasswordSubmit
1231
- }, {
1232
- default: withCtx(() => [
1233
- createVNode(_component_UFormField, {
1234
- label: "Current Password",
1235
- name: "currentPassword"
1236
- }, {
1237
- default: withCtx(() => [
1238
- createVNode(_component_UInput, {
1239
- modelValue: unref(passwordState).currentPassword,
1240
- "onUpdate:modelValue": ($event) => unref(passwordState).currentPassword = $event,
1241
- type: "password",
1242
- class: "w-full"
1243
- }, null, 8, ["modelValue", "onUpdate:modelValue"])
1244
- ]),
1245
- _: 1
1246
- }),
1247
- createVNode(_component_UFormField, {
1248
- label: "New Password",
1249
- name: "newPassword"
1250
- }, {
1251
- default: withCtx(() => [
1252
- createVNode(_component_UInput, {
1253
- modelValue: unref(passwordState).newPassword,
1254
- "onUpdate:modelValue": ($event) => unref(passwordState).newPassword = $event,
1255
- type: "password",
1256
- class: "w-full"
1257
- }, null, 8, ["modelValue", "onUpdate:modelValue"])
1258
- ]),
1259
- _: 1
1260
- }),
1261
- createVNode(_component_UFormField, {
1262
- label: "Confirm New Password",
1263
- name: "confirmPassword"
1264
- }, {
1265
- default: withCtx(() => [
1266
- createVNode(_component_UInput, {
1267
- modelValue: unref(passwordState).confirmPassword,
1268
- "onUpdate:modelValue": ($event) => unref(passwordState).confirmPassword = $event,
1269
- type: "password",
1270
- class: "w-full"
1271
- }, null, 8, ["modelValue", "onUpdate:modelValue"])
1272
- ]),
1273
- _: 1
1274
- }),
1275
- createVNode(_component_UButton, {
1276
- type: "submit",
1277
- loading: unref(passwordLoading)
1278
- }, {
1279
- default: withCtx(() => [
1280
- createTextVNode(" Change Password ")
1281
- ]),
1282
- _: 1
1283
- }, 8, ["loading"])
1284
- ]),
1285
- _: 1
1286
- }, 8, ["state"])
1287
- ])
1288
- ])
1289
- ]),
1290
- secrets: withCtx(() => [
1291
- createVNode("div", { class: "py-6" }, [
1292
- createVNode("div", { class: "flex items-center justify-between mb-6" }, [
1293
- createVNode("div", null, [
1294
- createVNode("h3", { class: "text-lg font-semibold" }, " Secrets "),
1295
- createVNode("p", { class: "text-sm text-dimmed" }, " Encrypted key-value store for skills and integrations. ")
1296
- ]),
1297
- createVNode(_component_UButton, {
1298
- icon: "i-lucide-plus",
1299
- onClick: openCreateSecret
1300
- }, {
1301
- default: withCtx(() => [
1302
- createTextVNode(" Add Secret ")
1303
- ]),
1304
- _: 1
1305
- })
1306
- ]),
1307
- createVNode(_component_UTable, {
1308
- columns: secretColumns,
1309
- data: unref(secretsData),
1310
- loading: unref(secretsLoading)
1311
- }, {
1312
- "key-cell": withCtx(({ row }) => [
1313
- createVNode("code", { class: "text-sm bg-elevated px-2 py-0.5 rounded" }, toDisplayString(row.original.key), 1)
1314
- ]),
1315
- "description-cell": withCtx(({ row }) => [
1316
- createVNode("span", { class: "text-dimmed" }, toDisplayString(row.original.description || "—"), 1)
1317
- ]),
1318
- "updatedAt-cell": withCtx(({ row }) => [
1319
- createVNode("span", { class: "text-dimmed text-sm" }, toDisplayString(formatDate(row.original.updatedAt)), 1)
1320
- ]),
1321
- "actions-cell": withCtx(({ row }) => [
1322
- createVNode("div", { class: "flex gap-2 justify-end" }, [
1323
- createVNode(_component_UButton, {
1324
- variant: "ghost",
1325
- icon: "i-lucide-pencil",
1326
- size: "xs",
1327
- onClick: ($event) => openEditSecret(row.original)
1328
- }, null, 8, ["onClick"]),
1344
+ default: withCtx((_3, _push4, _parent4, _scopeId3) => {
1345
+ if (_push4) {
1346
+ _push4(ssrRenderComponent(_component_UInput, {
1347
+ modelValue: unref(bridgeConfigForm).botUsername,
1348
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).botUsername = $event,
1349
+ placeholder: "my_bot",
1350
+ class: "w-full"
1351
+ }, null, _parent4, _scopeId3));
1352
+ } else {
1353
+ return [
1354
+ createVNode(_component_UInput, {
1355
+ modelValue: unref(bridgeConfigForm).botUsername,
1356
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).botUsername = $event,
1357
+ placeholder: "my_bot",
1358
+ class: "w-full"
1359
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
1360
+ ];
1361
+ }
1362
+ }),
1363
+ _: 1
1364
+ }, _parent3, _scopeId2));
1365
+ _push3(ssrRenderComponent(_component_UFormField, {
1366
+ label: "Allowed Chat IDs",
1367
+ name: "allowedChatIds",
1368
+ hint: "Comma-separated. Leave empty for all."
1369
+ }, {
1370
+ default: withCtx((_3, _push4, _parent4, _scopeId3) => {
1371
+ if (_push4) {
1372
+ _push4(ssrRenderComponent(_component_UInput, {
1373
+ modelValue: unref(bridgeConfigForm).allowedChatIds,
1374
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).allowedChatIds = $event,
1375
+ placeholder: "123456, -100789",
1376
+ class: "w-full"
1377
+ }, null, _parent4, _scopeId3));
1378
+ } else {
1379
+ return [
1380
+ createVNode(_component_UInput, {
1381
+ modelValue: unref(bridgeConfigForm).allowedChatIds,
1382
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).allowedChatIds = $event,
1383
+ placeholder: "123456, -100789",
1384
+ class: "w-full"
1385
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
1386
+ ];
1387
+ }
1388
+ }),
1389
+ _: 1
1390
+ }, _parent3, _scopeId2));
1391
+ _push3(`<!--]-->`);
1392
+ } else {
1393
+ _push3(`<!---->`);
1394
+ }
1395
+ if (unref(editingBridge)?.platform === "discord") {
1396
+ _push3(`<!--[-->`);
1397
+ _push3(ssrRenderComponent(_component_UFormField, {
1398
+ label: "Listen Mode",
1399
+ name: "listenMode"
1400
+ }, {
1401
+ default: withCtx((_3, _push4, _parent4, _scopeId3) => {
1402
+ if (_push4) {
1403
+ _push4(ssrRenderComponent(_component_USelect, {
1404
+ modelValue: unref(bridgeConfigForm).listenMode,
1405
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).listenMode = $event,
1406
+ items: discordListenModeOptions,
1407
+ "value-key": "value",
1408
+ class: "w-full"
1409
+ }, null, _parent4, _scopeId3));
1410
+ } else {
1411
+ return [
1412
+ createVNode(_component_USelect, {
1413
+ modelValue: unref(bridgeConfigForm).listenMode,
1414
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).listenMode = $event,
1415
+ items: discordListenModeOptions,
1416
+ "value-key": "value",
1417
+ class: "w-full"
1418
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
1419
+ ];
1420
+ }
1421
+ }),
1422
+ _: 1
1423
+ }, _parent3, _scopeId2));
1424
+ _push3(ssrRenderComponent(_component_UFormField, {
1425
+ label: "Server ID",
1426
+ name: "guildId",
1427
+ hint: "Optional. Limit to one server."
1428
+ }, {
1429
+ default: withCtx((_3, _push4, _parent4, _scopeId3) => {
1430
+ if (_push4) {
1431
+ _push4(ssrRenderComponent(_component_UInput, {
1432
+ modelValue: unref(bridgeConfigForm).guildId,
1433
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).guildId = $event,
1434
+ placeholder: "Discord server ID",
1435
+ class: "w-full"
1436
+ }, null, _parent4, _scopeId3));
1437
+ } else {
1438
+ return [
1439
+ createVNode(_component_UInput, {
1440
+ modelValue: unref(bridgeConfigForm).guildId,
1441
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).guildId = $event,
1442
+ placeholder: "Discord server ID",
1443
+ class: "w-full"
1444
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
1445
+ ];
1446
+ }
1447
+ }),
1448
+ _: 1
1449
+ }, _parent3, _scopeId2));
1450
+ _push3(ssrRenderComponent(_component_UFormField, {
1451
+ label: "Channel ID",
1452
+ name: "channelId",
1453
+ hint: "Optional. Limit to one channel (for 'all' mode)."
1454
+ }, {
1455
+ default: withCtx((_3, _push4, _parent4, _scopeId3) => {
1456
+ if (_push4) {
1457
+ _push4(ssrRenderComponent(_component_UInput, {
1458
+ modelValue: unref(bridgeConfigForm).channelId,
1459
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).channelId = $event,
1460
+ placeholder: "Discord channel ID",
1461
+ class: "w-full"
1462
+ }, null, _parent4, _scopeId3));
1463
+ } else {
1464
+ return [
1465
+ createVNode(_component_UInput, {
1466
+ modelValue: unref(bridgeConfigForm).channelId,
1467
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).channelId = $event,
1468
+ placeholder: "Discord channel ID",
1469
+ class: "w-full"
1470
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
1471
+ ];
1472
+ }
1473
+ }),
1474
+ _: 1
1475
+ }, _parent3, _scopeId2));
1476
+ _push3(`<!--]-->`);
1477
+ } else {
1478
+ _push3(`<!---->`);
1479
+ }
1480
+ if (unref(editingBridge)?.platform === "imessage") {
1481
+ _push3(`<!--[-->`);
1482
+ _push3(ssrRenderComponent(_component_UFormField, {
1483
+ label: "Strategy",
1484
+ name: "strategy"
1485
+ }, {
1486
+ default: withCtx((_3, _push4, _parent4, _scopeId3) => {
1487
+ if (_push4) {
1488
+ _push4(ssrRenderComponent(_component_USelect, {
1489
+ modelValue: unref(bridgeConfigForm).strategy,
1490
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).strategy = $event,
1491
+ items: imessageStrategyOptions,
1492
+ "value-key": "value",
1493
+ class: "w-full"
1494
+ }, null, _parent4, _scopeId3));
1495
+ } else {
1496
+ return [
1497
+ createVNode(_component_USelect, {
1498
+ modelValue: unref(bridgeConfigForm).strategy,
1499
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).strategy = $event,
1500
+ items: imessageStrategyOptions,
1501
+ "value-key": "value",
1502
+ class: "w-full"
1503
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
1504
+ ];
1505
+ }
1506
+ }),
1507
+ _: 1
1508
+ }, _parent3, _scopeId2));
1509
+ if (unref(bridgeConfigForm).strategy === "bluebubbles") {
1510
+ _push3(ssrRenderComponent(_component_UFormField, {
1511
+ label: "BlueBubbles URL",
1512
+ name: "blueBubblesUrl"
1513
+ }, {
1514
+ default: withCtx((_3, _push4, _parent4, _scopeId3) => {
1515
+ if (_push4) {
1516
+ _push4(ssrRenderComponent(_component_UInput, {
1517
+ modelValue: unref(bridgeConfigForm).blueBubblesUrl,
1518
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).blueBubblesUrl = $event,
1519
+ placeholder: "http://192.168.1.100:1234",
1520
+ class: "w-full"
1521
+ }, null, _parent4, _scopeId3));
1522
+ } else {
1523
+ return [
1524
+ createVNode(_component_UInput, {
1525
+ modelValue: unref(bridgeConfigForm).blueBubblesUrl,
1526
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).blueBubblesUrl = $event,
1527
+ placeholder: "http://192.168.1.100:1234",
1528
+ class: "w-full"
1529
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
1530
+ ];
1531
+ }
1532
+ }),
1533
+ _: 1
1534
+ }, _parent3, _scopeId2));
1535
+ } else {
1536
+ _push3(`<!---->`);
1537
+ }
1538
+ _push3(ssrRenderComponent(_component_UFormField, {
1539
+ label: "Allowed Numbers",
1540
+ name: "allowedNumbers",
1541
+ hint: "Comma-separated. Leave empty for all."
1542
+ }, {
1543
+ default: withCtx((_3, _push4, _parent4, _scopeId3) => {
1544
+ if (_push4) {
1545
+ _push4(ssrRenderComponent(_component_UInput, {
1546
+ modelValue: unref(bridgeConfigForm).allowedNumbers,
1547
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).allowedNumbers = $event,
1548
+ placeholder: "+15551234567, +15559876543",
1549
+ class: "w-full"
1550
+ }, null, _parent4, _scopeId3));
1551
+ } else {
1552
+ return [
1553
+ createVNode(_component_UInput, {
1554
+ modelValue: unref(bridgeConfigForm).allowedNumbers,
1555
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).allowedNumbers = $event,
1556
+ placeholder: "+15551234567, +15559876543",
1557
+ class: "w-full"
1558
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
1559
+ ];
1560
+ }
1561
+ }),
1562
+ _: 1
1563
+ }, _parent3, _scopeId2));
1564
+ _push3(`<!--]-->`);
1565
+ } else {
1566
+ _push3(`<!---->`);
1567
+ }
1568
+ if (unref(editingBridge)?.platform === "google") {
1569
+ _push3(`<!--[-->`);
1570
+ _push3(ssrRenderComponent(_component_UFormField, {
1571
+ label: "Enabled Services",
1572
+ name: "enabledServices"
1573
+ }, {
1574
+ default: withCtx((_3, _push4, _parent4, _scopeId3) => {
1575
+ if (_push4) {
1576
+ _push4(`<div class="space-y-2"${_scopeId3}><!--[-->`);
1577
+ ssrRenderList(googleServiceOptions, (svc) => {
1578
+ _push4(`<label class="flex items-center gap-2 cursor-pointer"${_scopeId3}><input type="checkbox"${ssrIncludeBooleanAttr(unref(bridgeConfigForm).enabledServices.includes(svc.value)) ? " checked" : ""} class="rounded"${_scopeId3}><span class="text-sm"${_scopeId3}>${ssrInterpolate(svc.label)}</span></label>`);
1579
+ });
1580
+ _push4(`<!--]--></div>`);
1581
+ } else {
1582
+ return [
1583
+ createVNode("div", { class: "space-y-2" }, [
1584
+ (openBlock(), createBlock(Fragment, null, renderList(googleServiceOptions, (svc) => {
1585
+ return createVNode("label", {
1586
+ key: svc.value,
1587
+ class: "flex items-center gap-2 cursor-pointer"
1588
+ }, [
1589
+ createVNode("input", {
1590
+ type: "checkbox",
1591
+ checked: unref(bridgeConfigForm).enabledServices.includes(svc.value),
1592
+ class: "rounded",
1593
+ 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)
1594
+ }, null, 40, ["checked", "onChange"]),
1595
+ createVNode("span", { class: "text-sm" }, toDisplayString(svc.label), 1)
1596
+ ]);
1597
+ }), 64))
1598
+ ])
1599
+ ];
1600
+ }
1601
+ }),
1602
+ _: 1
1603
+ }, _parent3, _scopeId2));
1604
+ _push3(ssrRenderComponent(_component_UFormField, {
1605
+ label: "Google Account",
1606
+ name: "account",
1607
+ hint: "Email used with gogcli"
1608
+ }, {
1609
+ default: withCtx((_3, _push4, _parent4, _scopeId3) => {
1610
+ if (_push4) {
1611
+ _push4(ssrRenderComponent(_component_UInput, {
1612
+ modelValue: unref(bridgeConfigForm).account,
1613
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).account = $event,
1614
+ placeholder: "user@gmail.com",
1615
+ class: "w-full"
1616
+ }, null, _parent4, _scopeId3));
1617
+ } else {
1618
+ return [
1619
+ createVNode(_component_UInput, {
1620
+ modelValue: unref(bridgeConfigForm).account,
1621
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).account = $event,
1622
+ placeholder: "user@gmail.com",
1623
+ class: "w-full"
1624
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
1625
+ ];
1626
+ }
1627
+ }),
1628
+ _: 1
1629
+ }, _parent3, _scopeId2));
1630
+ _push3(`<!--]-->`);
1631
+ } else {
1632
+ _push3(`<!---->`);
1633
+ }
1634
+ if (unref(editingBridge)?.platform === "email") {
1635
+ _push3(`<!--[-->`);
1636
+ _push3(ssrRenderComponent(_component_UFormField, {
1637
+ label: "Email Address",
1638
+ name: "emailAddress"
1639
+ }, {
1640
+ default: withCtx((_3, _push4, _parent4, _scopeId3) => {
1641
+ if (_push4) {
1642
+ _push4(ssrRenderComponent(_component_UInput, {
1643
+ modelValue: unref(bridgeConfigForm).emailAddress,
1644
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).emailAddress = $event,
1645
+ placeholder: "user@example.com",
1646
+ class: "w-full"
1647
+ }, null, _parent4, _scopeId3));
1648
+ } else {
1649
+ return [
1650
+ createVNode(_component_UInput, {
1651
+ modelValue: unref(bridgeConfigForm).emailAddress,
1652
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).emailAddress = $event,
1653
+ placeholder: "user@example.com",
1654
+ class: "w-full"
1655
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
1656
+ ];
1657
+ }
1658
+ }),
1659
+ _: 1
1660
+ }, _parent3, _scopeId2));
1661
+ _push3(`<div class="grid grid-cols-2 gap-4"${_scopeId2}>`);
1662
+ _push3(ssrRenderComponent(_component_UFormField, {
1663
+ label: "IMAP Host",
1664
+ name: "imapHost"
1665
+ }, {
1666
+ default: withCtx((_3, _push4, _parent4, _scopeId3) => {
1667
+ if (_push4) {
1668
+ _push4(ssrRenderComponent(_component_UInput, {
1669
+ modelValue: unref(bridgeConfigForm).imapHost,
1670
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).imapHost = $event,
1671
+ placeholder: "imap.example.com",
1672
+ class: "w-full"
1673
+ }, null, _parent4, _scopeId3));
1674
+ } else {
1675
+ return [
1676
+ createVNode(_component_UInput, {
1677
+ modelValue: unref(bridgeConfigForm).imapHost,
1678
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).imapHost = $event,
1679
+ placeholder: "imap.example.com",
1680
+ class: "w-full"
1681
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
1682
+ ];
1683
+ }
1684
+ }),
1685
+ _: 1
1686
+ }, _parent3, _scopeId2));
1687
+ _push3(ssrRenderComponent(_component_UFormField, {
1688
+ label: "IMAP Port",
1689
+ name: "imapPort"
1690
+ }, {
1691
+ default: withCtx((_3, _push4, _parent4, _scopeId3) => {
1692
+ if (_push4) {
1693
+ _push4(ssrRenderComponent(_component_UInput, {
1694
+ modelValue: unref(bridgeConfigForm).imapPort,
1695
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).imapPort = $event,
1696
+ placeholder: "993",
1697
+ class: "w-full"
1698
+ }, null, _parent4, _scopeId3));
1699
+ } else {
1700
+ return [
1701
+ createVNode(_component_UInput, {
1702
+ modelValue: unref(bridgeConfigForm).imapPort,
1703
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).imapPort = $event,
1704
+ placeholder: "993",
1705
+ class: "w-full"
1706
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
1707
+ ];
1708
+ }
1709
+ }),
1710
+ _: 1
1711
+ }, _parent3, _scopeId2));
1712
+ _push3(`</div><div class="grid grid-cols-2 gap-4"${_scopeId2}>`);
1713
+ _push3(ssrRenderComponent(_component_UFormField, {
1714
+ label: "SMTP Host",
1715
+ name: "smtpHost"
1716
+ }, {
1717
+ default: withCtx((_3, _push4, _parent4, _scopeId3) => {
1718
+ if (_push4) {
1719
+ _push4(ssrRenderComponent(_component_UInput, {
1720
+ modelValue: unref(bridgeConfigForm).smtpHost,
1721
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).smtpHost = $event,
1722
+ placeholder: "smtp.example.com",
1723
+ class: "w-full"
1724
+ }, null, _parent4, _scopeId3));
1725
+ } else {
1726
+ return [
1727
+ createVNode(_component_UInput, {
1728
+ modelValue: unref(bridgeConfigForm).smtpHost,
1729
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).smtpHost = $event,
1730
+ placeholder: "smtp.example.com",
1731
+ class: "w-full"
1732
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
1733
+ ];
1734
+ }
1735
+ }),
1736
+ _: 1
1737
+ }, _parent3, _scopeId2));
1738
+ _push3(ssrRenderComponent(_component_UFormField, {
1739
+ label: "SMTP Port",
1740
+ name: "smtpPort"
1741
+ }, {
1742
+ default: withCtx((_3, _push4, _parent4, _scopeId3) => {
1743
+ if (_push4) {
1744
+ _push4(ssrRenderComponent(_component_UInput, {
1745
+ modelValue: unref(bridgeConfigForm).smtpPort,
1746
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).smtpPort = $event,
1747
+ placeholder: "587",
1748
+ class: "w-full"
1749
+ }, null, _parent4, _scopeId3));
1750
+ } else {
1751
+ return [
1752
+ createVNode(_component_UInput, {
1753
+ modelValue: unref(bridgeConfigForm).smtpPort,
1754
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).smtpPort = $event,
1755
+ placeholder: "587",
1756
+ class: "w-full"
1757
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
1758
+ ];
1759
+ }
1760
+ }),
1761
+ _: 1
1762
+ }, _parent3, _scopeId2));
1763
+ _push3(`</div><!--]-->`);
1764
+ } else {
1765
+ _push3(`<!---->`);
1766
+ }
1767
+ _push3(`<div class="flex justify-end gap-2 pt-4"${_scopeId2}>`);
1768
+ _push3(ssrRenderComponent(_component_UButton, {
1769
+ variant: "ghost",
1770
+ onClick: ($event) => bridgeConfigModal.value = false
1771
+ }, {
1772
+ default: withCtx((_3, _push4, _parent4, _scopeId3) => {
1773
+ if (_push4) {
1774
+ _push4(` Cancel `);
1775
+ } else {
1776
+ return [
1777
+ createTextVNode(" Cancel ")
1778
+ ];
1779
+ }
1780
+ }),
1781
+ _: 1
1782
+ }, _parent3, _scopeId2));
1783
+ _push3(ssrRenderComponent(_component_UButton, {
1784
+ loading: unref(bridgeConfigSaving),
1785
+ onClick: handleBridgeConfigSave
1786
+ }, {
1787
+ default: withCtx((_3, _push4, _parent4, _scopeId3) => {
1788
+ if (_push4) {
1789
+ _push4(` Save `);
1790
+ } else {
1791
+ return [
1792
+ createTextVNode(" Save ")
1793
+ ];
1794
+ }
1795
+ }),
1796
+ _: 1
1797
+ }, _parent3, _scopeId2));
1798
+ _push3(`</div></div>`);
1799
+ } else {
1800
+ return [
1801
+ createVNode("div", { class: "space-y-4" }, [
1802
+ unref(editingBridge) && platformSecretHints[unref(editingBridge).platform] ? (openBlock(), createBlock("div", {
1803
+ key: 0,
1804
+ class: "flex items-start gap-2 rounded-lg bg-elevated p-3 text-sm"
1805
+ }, [
1806
+ createVNode(_component_UIcon, {
1807
+ name: "i-lucide-info",
1808
+ class: "size-4 mt-0.5 text-dimmed shrink-0"
1809
+ }),
1810
+ createVNode("span", { class: "text-dimmed" }, [
1811
+ createTextVNode(" Requires secret "),
1812
+ createVNode("code", { class: "bg-elevated px-1 py-0.5 rounded text-xs" }, toDisplayString(platformSecretHints[unref(editingBridge).platform]), 1),
1813
+ createTextVNode(" in the Secrets tab. ")
1814
+ ])
1815
+ ])) : createCommentVNode("", true),
1816
+ createVNode(_component_UFormField, {
1817
+ label: "Name",
1818
+ name: "name"
1819
+ }, {
1820
+ default: withCtx(() => [
1821
+ createVNode(_component_UInput, {
1822
+ modelValue: unref(bridgeConfigForm).name,
1823
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).name = $event,
1824
+ placeholder: "Integration name",
1825
+ class: "w-full"
1826
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
1827
+ ]),
1828
+ _: 1
1829
+ }),
1830
+ unref(editingBridge)?.platform === "telegram" ? (openBlock(), createBlock(Fragment, { key: 1 }, [
1831
+ createVNode(_component_UFormField, {
1832
+ label: "Bot Username",
1833
+ name: "botUsername",
1834
+ hint: "Without the @ prefix"
1835
+ }, {
1836
+ default: withCtx(() => [
1837
+ createVNode(_component_UInput, {
1838
+ modelValue: unref(bridgeConfigForm).botUsername,
1839
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).botUsername = $event,
1840
+ placeholder: "my_bot",
1841
+ class: "w-full"
1842
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
1843
+ ]),
1844
+ _: 1
1845
+ }),
1846
+ createVNode(_component_UFormField, {
1847
+ label: "Allowed Chat IDs",
1848
+ name: "allowedChatIds",
1849
+ hint: "Comma-separated. Leave empty for all."
1850
+ }, {
1851
+ default: withCtx(() => [
1852
+ createVNode(_component_UInput, {
1853
+ modelValue: unref(bridgeConfigForm).allowedChatIds,
1854
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).allowedChatIds = $event,
1855
+ placeholder: "123456, -100789",
1856
+ class: "w-full"
1857
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
1858
+ ]),
1859
+ _: 1
1860
+ })
1861
+ ], 64)) : createCommentVNode("", true),
1862
+ unref(editingBridge)?.platform === "discord" ? (openBlock(), createBlock(Fragment, { key: 2 }, [
1863
+ createVNode(_component_UFormField, {
1864
+ label: "Listen Mode",
1865
+ name: "listenMode"
1866
+ }, {
1867
+ default: withCtx(() => [
1868
+ createVNode(_component_USelect, {
1869
+ modelValue: unref(bridgeConfigForm).listenMode,
1870
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).listenMode = $event,
1871
+ items: discordListenModeOptions,
1872
+ "value-key": "value",
1873
+ class: "w-full"
1874
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
1875
+ ]),
1876
+ _: 1
1877
+ }),
1878
+ createVNode(_component_UFormField, {
1879
+ label: "Server ID",
1880
+ name: "guildId",
1881
+ hint: "Optional. Limit to one server."
1882
+ }, {
1883
+ default: withCtx(() => [
1884
+ createVNode(_component_UInput, {
1885
+ modelValue: unref(bridgeConfigForm).guildId,
1886
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).guildId = $event,
1887
+ placeholder: "Discord server ID",
1888
+ class: "w-full"
1889
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
1890
+ ]),
1891
+ _: 1
1892
+ }),
1893
+ createVNode(_component_UFormField, {
1894
+ label: "Channel ID",
1895
+ name: "channelId",
1896
+ hint: "Optional. Limit to one channel (for 'all' mode)."
1897
+ }, {
1898
+ default: withCtx(() => [
1899
+ createVNode(_component_UInput, {
1900
+ modelValue: unref(bridgeConfigForm).channelId,
1901
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).channelId = $event,
1902
+ placeholder: "Discord channel ID",
1903
+ class: "w-full"
1904
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
1905
+ ]),
1906
+ _: 1
1907
+ })
1908
+ ], 64)) : createCommentVNode("", true),
1909
+ unref(editingBridge)?.platform === "imessage" ? (openBlock(), createBlock(Fragment, { key: 3 }, [
1910
+ createVNode(_component_UFormField, {
1911
+ label: "Strategy",
1912
+ name: "strategy"
1913
+ }, {
1914
+ default: withCtx(() => [
1915
+ createVNode(_component_USelect, {
1916
+ modelValue: unref(bridgeConfigForm).strategy,
1917
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).strategy = $event,
1918
+ items: imessageStrategyOptions,
1919
+ "value-key": "value",
1920
+ class: "w-full"
1921
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
1922
+ ]),
1923
+ _: 1
1924
+ }),
1925
+ unref(bridgeConfigForm).strategy === "bluebubbles" ? (openBlock(), createBlock(_component_UFormField, {
1926
+ key: 0,
1927
+ label: "BlueBubbles URL",
1928
+ name: "blueBubblesUrl"
1929
+ }, {
1930
+ default: withCtx(() => [
1931
+ createVNode(_component_UInput, {
1932
+ modelValue: unref(bridgeConfigForm).blueBubblesUrl,
1933
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).blueBubblesUrl = $event,
1934
+ placeholder: "http://192.168.1.100:1234",
1935
+ class: "w-full"
1936
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
1937
+ ]),
1938
+ _: 1
1939
+ })) : createCommentVNode("", true),
1940
+ createVNode(_component_UFormField, {
1941
+ label: "Allowed Numbers",
1942
+ name: "allowedNumbers",
1943
+ hint: "Comma-separated. Leave empty for all."
1944
+ }, {
1945
+ default: withCtx(() => [
1946
+ createVNode(_component_UInput, {
1947
+ modelValue: unref(bridgeConfigForm).allowedNumbers,
1948
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).allowedNumbers = $event,
1949
+ placeholder: "+15551234567, +15559876543",
1950
+ class: "w-full"
1951
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
1952
+ ]),
1953
+ _: 1
1954
+ })
1955
+ ], 64)) : createCommentVNode("", true),
1956
+ unref(editingBridge)?.platform === "google" ? (openBlock(), createBlock(Fragment, { key: 4 }, [
1957
+ createVNode(_component_UFormField, {
1958
+ label: "Enabled Services",
1959
+ name: "enabledServices"
1960
+ }, {
1961
+ default: withCtx(() => [
1962
+ createVNode("div", { class: "space-y-2" }, [
1963
+ (openBlock(), createBlock(Fragment, null, renderList(googleServiceOptions, (svc) => {
1964
+ return createVNode("label", {
1965
+ key: svc.value,
1966
+ class: "flex items-center gap-2 cursor-pointer"
1967
+ }, [
1968
+ createVNode("input", {
1969
+ type: "checkbox",
1970
+ checked: unref(bridgeConfigForm).enabledServices.includes(svc.value),
1971
+ class: "rounded",
1972
+ 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)
1973
+ }, null, 40, ["checked", "onChange"]),
1974
+ createVNode("span", { class: "text-sm" }, toDisplayString(svc.label), 1)
1975
+ ]);
1976
+ }), 64))
1977
+ ])
1978
+ ]),
1979
+ _: 1
1980
+ }),
1981
+ createVNode(_component_UFormField, {
1982
+ label: "Google Account",
1983
+ name: "account",
1984
+ hint: "Email used with gogcli"
1985
+ }, {
1986
+ default: withCtx(() => [
1987
+ createVNode(_component_UInput, {
1988
+ modelValue: unref(bridgeConfigForm).account,
1989
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).account = $event,
1990
+ placeholder: "user@gmail.com",
1991
+ class: "w-full"
1992
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
1993
+ ]),
1994
+ _: 1
1995
+ })
1996
+ ], 64)) : createCommentVNode("", true),
1997
+ unref(editingBridge)?.platform === "email" ? (openBlock(), createBlock(Fragment, { key: 5 }, [
1998
+ createVNode(_component_UFormField, {
1999
+ label: "Email Address",
2000
+ name: "emailAddress"
2001
+ }, {
2002
+ default: withCtx(() => [
2003
+ createVNode(_component_UInput, {
2004
+ modelValue: unref(bridgeConfigForm).emailAddress,
2005
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).emailAddress = $event,
2006
+ placeholder: "user@example.com",
2007
+ class: "w-full"
2008
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
2009
+ ]),
2010
+ _: 1
2011
+ }),
2012
+ createVNode("div", { class: "grid grid-cols-2 gap-4" }, [
2013
+ createVNode(_component_UFormField, {
2014
+ label: "IMAP Host",
2015
+ name: "imapHost"
2016
+ }, {
2017
+ default: withCtx(() => [
2018
+ createVNode(_component_UInput, {
2019
+ modelValue: unref(bridgeConfigForm).imapHost,
2020
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).imapHost = $event,
2021
+ placeholder: "imap.example.com",
2022
+ class: "w-full"
2023
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
2024
+ ]),
2025
+ _: 1
2026
+ }),
2027
+ createVNode(_component_UFormField, {
2028
+ label: "IMAP Port",
2029
+ name: "imapPort"
2030
+ }, {
2031
+ default: withCtx(() => [
2032
+ createVNode(_component_UInput, {
2033
+ modelValue: unref(bridgeConfigForm).imapPort,
2034
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).imapPort = $event,
2035
+ placeholder: "993",
2036
+ class: "w-full"
2037
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
2038
+ ]),
2039
+ _: 1
2040
+ })
2041
+ ]),
2042
+ createVNode("div", { class: "grid grid-cols-2 gap-4" }, [
2043
+ createVNode(_component_UFormField, {
2044
+ label: "SMTP Host",
2045
+ name: "smtpHost"
2046
+ }, {
2047
+ default: withCtx(() => [
2048
+ createVNode(_component_UInput, {
2049
+ modelValue: unref(bridgeConfigForm).smtpHost,
2050
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).smtpHost = $event,
2051
+ placeholder: "smtp.example.com",
2052
+ class: "w-full"
2053
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
2054
+ ]),
2055
+ _: 1
2056
+ }),
2057
+ createVNode(_component_UFormField, {
2058
+ label: "SMTP Port",
2059
+ name: "smtpPort"
2060
+ }, {
2061
+ default: withCtx(() => [
2062
+ createVNode(_component_UInput, {
2063
+ modelValue: unref(bridgeConfigForm).smtpPort,
2064
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).smtpPort = $event,
2065
+ placeholder: "587",
2066
+ class: "w-full"
2067
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
2068
+ ]),
2069
+ _: 1
2070
+ })
2071
+ ])
2072
+ ], 64)) : createCommentVNode("", true),
2073
+ createVNode("div", { class: "flex justify-end gap-2 pt-4" }, [
2074
+ createVNode(_component_UButton, {
2075
+ variant: "ghost",
2076
+ onClick: ($event) => bridgeConfigModal.value = false
2077
+ }, {
2078
+ default: withCtx(() => [
2079
+ createTextVNode(" Cancel ")
2080
+ ]),
2081
+ _: 1
2082
+ }, 8, ["onClick"]),
2083
+ createVNode(_component_UButton, {
2084
+ loading: unref(bridgeConfigSaving),
2085
+ onClick: handleBridgeConfigSave
2086
+ }, {
2087
+ default: withCtx(() => [
2088
+ createTextVNode(" Save ")
2089
+ ]),
2090
+ _: 1
2091
+ }, 8, ["loading"])
2092
+ ])
2093
+ ])
2094
+ ];
2095
+ }
2096
+ }),
2097
+ _: 1
2098
+ }, _parent2, _scopeId));
2099
+ } else {
2100
+ return [
2101
+ createVNode(_component_UDashboardNavbar, { title: "Settings" }, {
2102
+ right: withCtx(() => [
2103
+ createVNode(_component_UColorModeButton)
2104
+ ]),
2105
+ _: 1
2106
+ }),
2107
+ createVNode("div", { class: "p-6" }, [
2108
+ createVNode(_component_ClientOnly, null, {
2109
+ fallback: withCtx(() => [
2110
+ createVNode("div", { class: "space-y-8 max-w-xl mx-auto py-6" }, [
2111
+ createVNode(_component_USkeleton, { class: "h-10 w-full" }),
2112
+ createVNode("div", { class: "space-y-4" }, [
2113
+ createVNode(_component_USkeleton, { class: "h-5 w-20" }),
2114
+ createVNode(_component_USkeleton, { class: "h-10 w-full" }),
2115
+ createVNode(_component_USkeleton, { class: "h-10 w-28" })
2116
+ ])
2117
+ ])
2118
+ ]),
2119
+ default: withCtx(() => [
2120
+ createVNode(_component_UTabs, {
2121
+ items: tabs,
2122
+ "default-value": "account",
2123
+ class: "w-full mx-auto",
2124
+ ui: { list: "max-w-xl" }
2125
+ }, {
2126
+ account: withCtx(() => [
2127
+ createVNode("div", { class: "space-y-8 max-w-2xl mx-auto py-6" }, [
2128
+ createVNode("div", null, [
2129
+ createVNode("h3", { class: "text-lg font-semibold mb-4" }, " Profile "),
2130
+ createVNode(_component_UForm, {
2131
+ state: unref(profileState),
2132
+ class: "space-y-4",
2133
+ onSubmit: handleProfileSubmit
2134
+ }, {
2135
+ default: withCtx(() => [
2136
+ createVNode(_component_UFormField, {
2137
+ label: "Name",
2138
+ name: "name"
2139
+ }, {
2140
+ default: withCtx(() => [
2141
+ createVNode(_component_UInput, {
2142
+ modelValue: unref(profileState).name,
2143
+ "onUpdate:modelValue": ($event) => unref(profileState).name = $event,
2144
+ placeholder: "Your name",
2145
+ class: "w-full"
2146
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
2147
+ ]),
2148
+ _: 1
2149
+ }),
2150
+ createVNode(_component_UButton, {
2151
+ type: "submit",
2152
+ loading: unref(profileLoading)
2153
+ }, {
2154
+ default: withCtx(() => [
2155
+ createTextVNode(" Save Name ")
2156
+ ]),
2157
+ _: 1
2158
+ }, 8, ["loading"])
2159
+ ]),
2160
+ _: 1
2161
+ }, 8, ["state"])
2162
+ ]),
2163
+ createVNode(_component_USeparator),
2164
+ createVNode("div", null, [
2165
+ createVNode("h3", { class: "text-lg font-semibold mb-4" }, " Email Address "),
2166
+ createVNode(_component_UForm, {
2167
+ state: unref(emailState),
2168
+ class: "space-y-4",
2169
+ onSubmit: handleEmailSubmit
2170
+ }, {
2171
+ default: withCtx(() => [
2172
+ createVNode(_component_UFormField, {
2173
+ label: "Email",
2174
+ name: "newEmail"
2175
+ }, {
2176
+ default: withCtx(() => [
2177
+ createVNode(_component_UInput, {
2178
+ modelValue: unref(emailState).newEmail,
2179
+ "onUpdate:modelValue": ($event) => unref(emailState).newEmail = $event,
2180
+ type: "email",
2181
+ placeholder: "your@email.com",
2182
+ class: "w-full"
2183
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
2184
+ ]),
2185
+ _: 1
2186
+ }),
2187
+ createVNode(_component_UButton, {
2188
+ type: "submit",
2189
+ loading: unref(emailLoading)
2190
+ }, {
2191
+ default: withCtx(() => [
2192
+ createTextVNode(" Change Email ")
2193
+ ]),
2194
+ _: 1
2195
+ }, 8, ["loading"])
2196
+ ]),
2197
+ _: 1
2198
+ }, 8, ["state"])
2199
+ ]),
2200
+ createVNode(_component_USeparator),
2201
+ createVNode("div", null, [
2202
+ createVNode("h3", { class: "text-lg font-semibold mb-4" }, " Change Password "),
2203
+ createVNode(_component_UForm, {
2204
+ state: unref(passwordState),
2205
+ class: "space-y-4",
2206
+ onSubmit: handlePasswordSubmit
2207
+ }, {
2208
+ default: withCtx(() => [
2209
+ createVNode(_component_UFormField, {
2210
+ label: "Current Password",
2211
+ name: "currentPassword"
2212
+ }, {
2213
+ default: withCtx(() => [
2214
+ createVNode(_component_UInput, {
2215
+ modelValue: unref(passwordState).currentPassword,
2216
+ "onUpdate:modelValue": ($event) => unref(passwordState).currentPassword = $event,
2217
+ type: "password",
2218
+ class: "w-full"
2219
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
2220
+ ]),
2221
+ _: 1
2222
+ }),
2223
+ createVNode(_component_UFormField, {
2224
+ label: "New Password",
2225
+ name: "newPassword"
2226
+ }, {
2227
+ default: withCtx(() => [
2228
+ createVNode(_component_UInput, {
2229
+ modelValue: unref(passwordState).newPassword,
2230
+ "onUpdate:modelValue": ($event) => unref(passwordState).newPassword = $event,
2231
+ type: "password",
2232
+ class: "w-full"
2233
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
2234
+ ]),
2235
+ _: 1
2236
+ }),
2237
+ createVNode(_component_UFormField, {
2238
+ label: "Confirm New Password",
2239
+ name: "confirmPassword"
2240
+ }, {
2241
+ default: withCtx(() => [
2242
+ createVNode(_component_UInput, {
2243
+ modelValue: unref(passwordState).confirmPassword,
2244
+ "onUpdate:modelValue": ($event) => unref(passwordState).confirmPassword = $event,
2245
+ type: "password",
2246
+ class: "w-full"
2247
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
2248
+ ]),
2249
+ _: 1
2250
+ }),
2251
+ createVNode(_component_UButton, {
2252
+ type: "submit",
2253
+ loading: unref(passwordLoading)
2254
+ }, {
2255
+ default: withCtx(() => [
2256
+ createTextVNode(" Change Password ")
2257
+ ]),
2258
+ _: 1
2259
+ }, 8, ["loading"])
2260
+ ]),
2261
+ _: 1
2262
+ }, 8, ["state"])
2263
+ ])
2264
+ ])
2265
+ ]),
2266
+ secrets: withCtx(() => [
2267
+ createVNode("div", { class: "py-6" }, [
2268
+ createVNode("div", { class: "flex items-center justify-between mb-6" }, [
2269
+ createVNode("div", null, [
2270
+ createVNode("h3", { class: "text-lg font-semibold" }, " Secrets "),
2271
+ createVNode("p", { class: "text-sm text-dimmed" }, " Encrypted key-value store for skills and integrations. ")
2272
+ ]),
2273
+ createVNode(_component_UButton, {
2274
+ icon: "i-lucide-plus",
2275
+ onClick: openCreateSecret
2276
+ }, {
2277
+ default: withCtx(() => [
2278
+ createTextVNode(" Add Secret ")
2279
+ ]),
2280
+ _: 1
2281
+ })
2282
+ ]),
2283
+ createVNode(_component_UTable, {
2284
+ columns: secretColumns,
2285
+ data: unref(secretsData),
2286
+ loading: unref(secretsLoading)
2287
+ }, {
2288
+ "key-cell": withCtx(({ row }) => [
2289
+ createVNode("code", { class: "text-sm bg-elevated px-2 py-0.5 rounded" }, toDisplayString(row.original.key), 1)
2290
+ ]),
2291
+ "description-cell": withCtx(({ row }) => [
2292
+ createVNode("span", { class: "text-dimmed" }, toDisplayString(row.original.description || "—"), 1)
2293
+ ]),
2294
+ "updatedAt-cell": withCtx(({ row }) => [
2295
+ createVNode("span", { class: "text-dimmed text-sm" }, toDisplayString(formatDate(row.original.updatedAt)), 1)
2296
+ ]),
2297
+ "actions-cell": withCtx(({ row }) => [
2298
+ createVNode("div", { class: "flex gap-2 justify-end" }, [
2299
+ createVNode(_component_UButton, {
2300
+ variant: "ghost",
2301
+ icon: "i-lucide-pencil",
2302
+ size: "xs",
2303
+ onClick: ($event) => openEditSecret(row.original)
2304
+ }, null, 8, ["onClick"]),
1329
2305
  createVNode(_component_UButton, {
1330
2306
  variant: "ghost",
1331
2307
  color: "error",
@@ -1392,7 +2368,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1392
2368
  (openBlock(true), createBlock(Fragment, null, renderList(unref(bridgesData), (bridge) => {
1393
2369
  return openBlock(), createBlock("div", {
1394
2370
  key: bridge.id,
1395
- class: "border border-default rounded-lg px-4 py-3"
2371
+ class: "border border-default rounded-lg px-4 py-3 cursor-pointer hover:bg-elevated/50 transition-colors",
2372
+ onClick: ($event) => openBridgeConfig(bridge)
1396
2373
  }, [
1397
2374
  createVNode("div", { class: "flex items-center justify-between" }, [
1398
2375
  createVNode("div", { class: "flex items-center gap-3" }, [
@@ -1411,14 +2388,16 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1411
2388
  }, toDisplayString(bridge.healthStatus), 3),
1412
2389
  createVNode(_component_USwitch, {
1413
2390
  "model-value": bridge.enabled,
2391
+ onClick: withModifiers(() => {
2392
+ }, ["stop"]),
1414
2393
  "onUpdate:modelValue": ($event) => toggleBridge(bridge)
1415
- }, null, 8, ["model-value", "onUpdate:modelValue"]),
2394
+ }, null, 8, ["model-value", "onClick", "onUpdate:modelValue"]),
1416
2395
  createVNode(_component_UButton, {
1417
2396
  variant: "ghost",
1418
2397
  color: "error",
1419
2398
  icon: "i-lucide-trash-2",
1420
2399
  size: "xs",
1421
- onClick: ($event) => confirmDeleteBridge(bridge)
2400
+ onClick: withModifiers(($event) => confirmDeleteBridge(bridge), ["stop"])
1422
2401
  }, null, 8, ["onClick"])
1423
2402
  ])
1424
2403
  ]),
@@ -1426,7 +2405,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1426
2405
  key: 0,
1427
2406
  class: "text-xs text-dimmed mt-1 pl-8"
1428
2407
  }, toDisplayString(bridge.healthMessage), 1)) : createCommentVNode("", true)
1429
- ]);
2408
+ ], 8, ["onClick"]);
1430
2409
  }), 128))
1431
2410
  ]))
1432
2411
  ])
@@ -1670,9 +2649,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1670
2649
  createVNode(_component_UInput, {
1671
2650
  modelValue: unref(bridgeForm).name,
1672
2651
  "onUpdate:modelValue": ($event) => unref(bridgeForm).name = $event,
1673
- placeholder: "My Telegram Bot",
2652
+ placeholder: platformNamePlaceholders[unref(bridgeForm).platform],
1674
2653
  class: "w-full"
1675
- }, null, 8, ["modelValue", "onUpdate:modelValue"])
2654
+ }, null, 8, ["modelValue", "onUpdate:modelValue", "placeholder"])
1676
2655
  ]),
1677
2656
  _: 1
1678
2657
  }),
@@ -1736,6 +2715,316 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1736
2715
  ])
1737
2716
  ]),
1738
2717
  _: 1
2718
+ }, 8, ["open", "onUpdate:open"]),
2719
+ createVNode(_component_UModal, {
2720
+ open: unref(bridgeConfigModal),
2721
+ "onUpdate:open": ($event) => isRef(bridgeConfigModal) ? bridgeConfigModal.value = $event : null
2722
+ }, {
2723
+ header: withCtx(() => [
2724
+ createVNode("div", { class: "flex items-center gap-2" }, [
2725
+ createVNode(_component_UIcon, {
2726
+ name: platformOptions.find((p) => p.value === unref(editingBridge)?.platform)?.icon || "i-lucide-plug",
2727
+ class: "size-5"
2728
+ }, null, 8, ["name"]),
2729
+ createVNode("h3", { class: "text-lg font-semibold" }, " Configure " + toDisplayString(unref(editingBridge)?.name), 1)
2730
+ ])
2731
+ ]),
2732
+ body: withCtx(() => [
2733
+ createVNode("div", { class: "space-y-4" }, [
2734
+ unref(editingBridge) && platformSecretHints[unref(editingBridge).platform] ? (openBlock(), createBlock("div", {
2735
+ key: 0,
2736
+ class: "flex items-start gap-2 rounded-lg bg-elevated p-3 text-sm"
2737
+ }, [
2738
+ createVNode(_component_UIcon, {
2739
+ name: "i-lucide-info",
2740
+ class: "size-4 mt-0.5 text-dimmed shrink-0"
2741
+ }),
2742
+ createVNode("span", { class: "text-dimmed" }, [
2743
+ createTextVNode(" Requires secret "),
2744
+ createVNode("code", { class: "bg-elevated px-1 py-0.5 rounded text-xs" }, toDisplayString(platformSecretHints[unref(editingBridge).platform]), 1),
2745
+ createTextVNode(" in the Secrets tab. ")
2746
+ ])
2747
+ ])) : createCommentVNode("", true),
2748
+ createVNode(_component_UFormField, {
2749
+ label: "Name",
2750
+ name: "name"
2751
+ }, {
2752
+ default: withCtx(() => [
2753
+ createVNode(_component_UInput, {
2754
+ modelValue: unref(bridgeConfigForm).name,
2755
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).name = $event,
2756
+ placeholder: "Integration name",
2757
+ class: "w-full"
2758
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
2759
+ ]),
2760
+ _: 1
2761
+ }),
2762
+ unref(editingBridge)?.platform === "telegram" ? (openBlock(), createBlock(Fragment, { key: 1 }, [
2763
+ createVNode(_component_UFormField, {
2764
+ label: "Bot Username",
2765
+ name: "botUsername",
2766
+ hint: "Without the @ prefix"
2767
+ }, {
2768
+ default: withCtx(() => [
2769
+ createVNode(_component_UInput, {
2770
+ modelValue: unref(bridgeConfigForm).botUsername,
2771
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).botUsername = $event,
2772
+ placeholder: "my_bot",
2773
+ class: "w-full"
2774
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
2775
+ ]),
2776
+ _: 1
2777
+ }),
2778
+ createVNode(_component_UFormField, {
2779
+ label: "Allowed Chat IDs",
2780
+ name: "allowedChatIds",
2781
+ hint: "Comma-separated. Leave empty for all."
2782
+ }, {
2783
+ default: withCtx(() => [
2784
+ createVNode(_component_UInput, {
2785
+ modelValue: unref(bridgeConfigForm).allowedChatIds,
2786
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).allowedChatIds = $event,
2787
+ placeholder: "123456, -100789",
2788
+ class: "w-full"
2789
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
2790
+ ]),
2791
+ _: 1
2792
+ })
2793
+ ], 64)) : createCommentVNode("", true),
2794
+ unref(editingBridge)?.platform === "discord" ? (openBlock(), createBlock(Fragment, { key: 2 }, [
2795
+ createVNode(_component_UFormField, {
2796
+ label: "Listen Mode",
2797
+ name: "listenMode"
2798
+ }, {
2799
+ default: withCtx(() => [
2800
+ createVNode(_component_USelect, {
2801
+ modelValue: unref(bridgeConfigForm).listenMode,
2802
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).listenMode = $event,
2803
+ items: discordListenModeOptions,
2804
+ "value-key": "value",
2805
+ class: "w-full"
2806
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
2807
+ ]),
2808
+ _: 1
2809
+ }),
2810
+ createVNode(_component_UFormField, {
2811
+ label: "Server ID",
2812
+ name: "guildId",
2813
+ hint: "Optional. Limit to one server."
2814
+ }, {
2815
+ default: withCtx(() => [
2816
+ createVNode(_component_UInput, {
2817
+ modelValue: unref(bridgeConfigForm).guildId,
2818
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).guildId = $event,
2819
+ placeholder: "Discord server ID",
2820
+ class: "w-full"
2821
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
2822
+ ]),
2823
+ _: 1
2824
+ }),
2825
+ createVNode(_component_UFormField, {
2826
+ label: "Channel ID",
2827
+ name: "channelId",
2828
+ hint: "Optional. Limit to one channel (for 'all' mode)."
2829
+ }, {
2830
+ default: withCtx(() => [
2831
+ createVNode(_component_UInput, {
2832
+ modelValue: unref(bridgeConfigForm).channelId,
2833
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).channelId = $event,
2834
+ placeholder: "Discord channel ID",
2835
+ class: "w-full"
2836
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
2837
+ ]),
2838
+ _: 1
2839
+ })
2840
+ ], 64)) : createCommentVNode("", true),
2841
+ unref(editingBridge)?.platform === "imessage" ? (openBlock(), createBlock(Fragment, { key: 3 }, [
2842
+ createVNode(_component_UFormField, {
2843
+ label: "Strategy",
2844
+ name: "strategy"
2845
+ }, {
2846
+ default: withCtx(() => [
2847
+ createVNode(_component_USelect, {
2848
+ modelValue: unref(bridgeConfigForm).strategy,
2849
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).strategy = $event,
2850
+ items: imessageStrategyOptions,
2851
+ "value-key": "value",
2852
+ class: "w-full"
2853
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
2854
+ ]),
2855
+ _: 1
2856
+ }),
2857
+ unref(bridgeConfigForm).strategy === "bluebubbles" ? (openBlock(), createBlock(_component_UFormField, {
2858
+ key: 0,
2859
+ label: "BlueBubbles URL",
2860
+ name: "blueBubblesUrl"
2861
+ }, {
2862
+ default: withCtx(() => [
2863
+ createVNode(_component_UInput, {
2864
+ modelValue: unref(bridgeConfigForm).blueBubblesUrl,
2865
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).blueBubblesUrl = $event,
2866
+ placeholder: "http://192.168.1.100:1234",
2867
+ class: "w-full"
2868
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
2869
+ ]),
2870
+ _: 1
2871
+ })) : createCommentVNode("", true),
2872
+ createVNode(_component_UFormField, {
2873
+ label: "Allowed Numbers",
2874
+ name: "allowedNumbers",
2875
+ hint: "Comma-separated. Leave empty for all."
2876
+ }, {
2877
+ default: withCtx(() => [
2878
+ createVNode(_component_UInput, {
2879
+ modelValue: unref(bridgeConfigForm).allowedNumbers,
2880
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).allowedNumbers = $event,
2881
+ placeholder: "+15551234567, +15559876543",
2882
+ class: "w-full"
2883
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
2884
+ ]),
2885
+ _: 1
2886
+ })
2887
+ ], 64)) : createCommentVNode("", true),
2888
+ unref(editingBridge)?.platform === "google" ? (openBlock(), createBlock(Fragment, { key: 4 }, [
2889
+ createVNode(_component_UFormField, {
2890
+ label: "Enabled Services",
2891
+ name: "enabledServices"
2892
+ }, {
2893
+ default: withCtx(() => [
2894
+ createVNode("div", { class: "space-y-2" }, [
2895
+ (openBlock(), createBlock(Fragment, null, renderList(googleServiceOptions, (svc) => {
2896
+ return createVNode("label", {
2897
+ key: svc.value,
2898
+ class: "flex items-center gap-2 cursor-pointer"
2899
+ }, [
2900
+ createVNode("input", {
2901
+ type: "checkbox",
2902
+ checked: unref(bridgeConfigForm).enabledServices.includes(svc.value),
2903
+ class: "rounded",
2904
+ 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)
2905
+ }, null, 40, ["checked", "onChange"]),
2906
+ createVNode("span", { class: "text-sm" }, toDisplayString(svc.label), 1)
2907
+ ]);
2908
+ }), 64))
2909
+ ])
2910
+ ]),
2911
+ _: 1
2912
+ }),
2913
+ createVNode(_component_UFormField, {
2914
+ label: "Google Account",
2915
+ name: "account",
2916
+ hint: "Email used with gogcli"
2917
+ }, {
2918
+ default: withCtx(() => [
2919
+ createVNode(_component_UInput, {
2920
+ modelValue: unref(bridgeConfigForm).account,
2921
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).account = $event,
2922
+ placeholder: "user@gmail.com",
2923
+ class: "w-full"
2924
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
2925
+ ]),
2926
+ _: 1
2927
+ })
2928
+ ], 64)) : createCommentVNode("", true),
2929
+ unref(editingBridge)?.platform === "email" ? (openBlock(), createBlock(Fragment, { key: 5 }, [
2930
+ createVNode(_component_UFormField, {
2931
+ label: "Email Address",
2932
+ name: "emailAddress"
2933
+ }, {
2934
+ default: withCtx(() => [
2935
+ createVNode(_component_UInput, {
2936
+ modelValue: unref(bridgeConfigForm).emailAddress,
2937
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).emailAddress = $event,
2938
+ placeholder: "user@example.com",
2939
+ class: "w-full"
2940
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
2941
+ ]),
2942
+ _: 1
2943
+ }),
2944
+ createVNode("div", { class: "grid grid-cols-2 gap-4" }, [
2945
+ createVNode(_component_UFormField, {
2946
+ label: "IMAP Host",
2947
+ name: "imapHost"
2948
+ }, {
2949
+ default: withCtx(() => [
2950
+ createVNode(_component_UInput, {
2951
+ modelValue: unref(bridgeConfigForm).imapHost,
2952
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).imapHost = $event,
2953
+ placeholder: "imap.example.com",
2954
+ class: "w-full"
2955
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
2956
+ ]),
2957
+ _: 1
2958
+ }),
2959
+ createVNode(_component_UFormField, {
2960
+ label: "IMAP Port",
2961
+ name: "imapPort"
2962
+ }, {
2963
+ default: withCtx(() => [
2964
+ createVNode(_component_UInput, {
2965
+ modelValue: unref(bridgeConfigForm).imapPort,
2966
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).imapPort = $event,
2967
+ placeholder: "993",
2968
+ class: "w-full"
2969
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
2970
+ ]),
2971
+ _: 1
2972
+ })
2973
+ ]),
2974
+ createVNode("div", { class: "grid grid-cols-2 gap-4" }, [
2975
+ createVNode(_component_UFormField, {
2976
+ label: "SMTP Host",
2977
+ name: "smtpHost"
2978
+ }, {
2979
+ default: withCtx(() => [
2980
+ createVNode(_component_UInput, {
2981
+ modelValue: unref(bridgeConfigForm).smtpHost,
2982
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).smtpHost = $event,
2983
+ placeholder: "smtp.example.com",
2984
+ class: "w-full"
2985
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
2986
+ ]),
2987
+ _: 1
2988
+ }),
2989
+ createVNode(_component_UFormField, {
2990
+ label: "SMTP Port",
2991
+ name: "smtpPort"
2992
+ }, {
2993
+ default: withCtx(() => [
2994
+ createVNode(_component_UInput, {
2995
+ modelValue: unref(bridgeConfigForm).smtpPort,
2996
+ "onUpdate:modelValue": ($event) => unref(bridgeConfigForm).smtpPort = $event,
2997
+ placeholder: "587",
2998
+ class: "w-full"
2999
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
3000
+ ]),
3001
+ _: 1
3002
+ })
3003
+ ])
3004
+ ], 64)) : createCommentVNode("", true),
3005
+ createVNode("div", { class: "flex justify-end gap-2 pt-4" }, [
3006
+ createVNode(_component_UButton, {
3007
+ variant: "ghost",
3008
+ onClick: ($event) => bridgeConfigModal.value = false
3009
+ }, {
3010
+ default: withCtx(() => [
3011
+ createTextVNode(" Cancel ")
3012
+ ]),
3013
+ _: 1
3014
+ }, 8, ["onClick"]),
3015
+ createVNode(_component_UButton, {
3016
+ loading: unref(bridgeConfigSaving),
3017
+ onClick: handleBridgeConfigSave
3018
+ }, {
3019
+ default: withCtx(() => [
3020
+ createTextVNode(" Save ")
3021
+ ]),
3022
+ _: 1
3023
+ }, 8, ["loading"])
3024
+ ])
3025
+ ])
3026
+ ]),
3027
+ _: 1
1739
3028
  }, 8, ["open", "onUpdate:open"])
1740
3029
  ];
1741
3030
  }
@@ -1753,4 +3042,4 @@ _sfc_main.setup = (props, ctx) => {
1753
3042
  };
1754
3043
 
1755
3044
  export { _sfc_main as default };
1756
- //# sourceMappingURL=settings-DuT6LGJZ.mjs.map
3045
+ //# sourceMappingURL=settings-ByUXa46k.mjs.map