@camstack/addon-admin-ui 1.2.429 → 1.2.431

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 (128) hide show
  1. package/dist/assets/{AddonAssetIcon-DR35yt0E.js → AddonAssetIcon-CngGyUbH.js} +1 -1
  2. package/dist/assets/{Addons-gkGgGpTC.js → Addons-COSbX7Q1.js} +2 -2
  3. package/dist/assets/{AdminPage-DAO24U0w.js → AdminPage-BFQa1eDk.js} +1 -1
  4. package/dist/assets/{AdminSectionedPage-B-qoE6ra.js → AdminSectionedPage-Bb00eMTj.js} +1 -1
  5. package/dist/assets/AiProfiles-DGok1qYw.js +3 -0
  6. package/dist/assets/{BrokerForm-B3xs9aBj.js → BrokerForm-NDMOvAlu.js} +1 -1
  7. package/dist/assets/{Build-DeMAJfjN.js → Build-BPgFXVbn.js} +4 -4
  8. package/dist/assets/{Calendars-VPH-vy-o.js → Calendars-DLuwgZXW.js} +1 -1
  9. package/dist/assets/Cluster-BUBVih9A.js +1 -0
  10. package/dist/assets/ClusterStepModel-DzduELev.js +1 -0
  11. package/dist/assets/{CompositionEditor-BrtLjoSu.js → CompositionEditor-DTgOmFqj.js} +1 -1
  12. package/dist/assets/{CompositionEditorPage-D51jS9td.js → CompositionEditorPage-D73l3mqU.js} +1 -1
  13. package/dist/assets/Data-Wqos-WHl.js +2 -0
  14. package/dist/assets/{DeviceDetail-D1qU_p1k.js → DeviceDetail-CwmpXUmk.js} +2 -2
  15. package/dist/assets/{DeviceDoActionFields-B62Nv4K7.js → DeviceDoActionFields-DKOJoFJc.js} +1 -1
  16. package/dist/assets/{Devices-Cf5Exjsk.js → Devices-D_SKAo6X.js} +1 -1
  17. package/dist/assets/{EmbedPlayerPage-CnEcSJ8D.js → EmbedPlayerPage-DI4ac8Wo.js} +1 -1
  18. package/dist/assets/Identity-C25gG2Mh.js +1 -0
  19. package/dist/assets/IntegrationDetail-L73oZLMf.js +1 -0
  20. package/dist/assets/{IntegrationHub-DdjWEObX.js → IntegrationHub-DuVgrEey.js} +1 -1
  21. package/dist/assets/{Integrations-CU7Ll9U_.js → Integrations-CUPpCCtl.js} +1 -1
  22. package/dist/assets/{Integrations-uZB2ozhn.js → Integrations-Cgm8qaox.js} +1 -1
  23. package/dist/assets/{Library-DSuCaXt6.js → Library-Dm0AivX3.js} +1 -1
  24. package/dist/assets/Locations-B2TjRBpQ.js +3 -0
  25. package/dist/assets/{Logs-cm-1R2Z4.js → Logs-CeX1xx9_.js} +1 -1
  26. package/dist/assets/{MaskShapeCanvas-CM9D4FOf.js → MaskShapeCanvas-GZ2ZMDcz.js} +1 -1
  27. package/dist/assets/{MotionZonesSettings-DqS8ndiK.js → MotionZonesSettings-B5gIoLVC.js} +1 -1
  28. package/dist/assets/MyAccess-DJvaTHrq.js +2 -0
  29. package/dist/assets/Network-D0uak4Dc.js +1 -0
  30. package/dist/assets/{NodeAddonsSettingsPanel-BMat4ckt.js → NodeAddonsSettingsPanel-kmgNnVID.js} +1 -1
  31. package/dist/assets/{Notifications-EPQiEZ1t.js → Notifications-DP0iwqUM.js} +1 -1
  32. package/dist/assets/{PrivacyMaskSettings-Bis0PO01.js → PrivacyMaskSettings-DWCvE7XZ.js} +1 -1
  33. package/dist/assets/Recordings-r5KE18a6.js +1 -0
  34. package/dist/assets/{ScanNetworkModal-dHWFmbFe.js → ScanNetworkModal-CHWsBmiM.js} +1 -1
  35. package/dist/assets/{SceneMonitorEditor-SFMMIopn.js → SceneMonitorEditor-BNFYspNy.js} +1 -1
  36. package/dist/assets/SessionsList-OvrBa2rd.js +2 -0
  37. package/dist/assets/{Showroom-Er-hes9K.js → Showroom-DNgHGmg0.js} +1 -1
  38. package/dist/assets/{System-BDXxfgsq.js → System-CcDzJj6C.js} +1 -1
  39. package/dist/assets/{Terminal-B70jnm8e.js → Terminal-DpGR-56V.js} +5 -5
  40. package/dist/assets/{Viewer-BsGL5Dfa.js → Viewer-vqCH_LqM.js} +1 -1
  41. package/dist/assets/{_virtual_mf-localSharedImportMap___mfe_internal__admin_ui_host-C7iEnSHU.js → _virtual_mf-localSharedImportMap___mfe_internal__admin_ui_host-DR_v3lvi.js} +1 -1
  42. package/dist/assets/{addon-icons-context--6Hi3qRW.js → addon-icons-context-B2Gmu49a.js} +1 -1
  43. package/dist/assets/{archive-DtcjevJM.js → archive-CoV271Ga.js} +1 -1
  44. package/dist/assets/{authed-media-LCmlAEZ5.js → authed-media-BSx10sm9.js} +1 -1
  45. package/dist/assets/{bell-off-eQBpwamg.js → bell-off-CQHJCxaC.js} +1 -1
  46. package/dist/assets/{board-model-wzCmdEKJ.js → board-model-lagHZiI7.js} +1 -1
  47. package/dist/assets/{boxes-DikDfAoo.js → boxes-DKr2EDaB.js} +1 -1
  48. package/dist/assets/circle-slash-D1CG5tRc.js +1 -0
  49. package/dist/assets/client-CqsEJzhO.js +358 -0
  50. package/dist/assets/{cloud-upload-DI9XunFf.js → cloud-upload-D3IJwdmA.js} +1 -1
  51. package/dist/assets/crop-sD8BDahL.js +1 -0
  52. package/dist/assets/{device-integration-icon-D2lWVDM2.js → device-integration-icon-BHf83qVT.js} +1 -1
  53. package/dist/assets/device-picker-model-JBC8n4FU.js +1 -0
  54. package/dist/assets/dist-C3lDDHVX.js +358 -0
  55. package/dist/assets/{dist-ChQzskeX.js → dist-Dlrgg5It.js} +1 -1
  56. package/dist/assets/{eraser-Dl5ROV0l.js → eraser-BRuYxYS4.js} +1 -1
  57. package/dist/assets/{hard-drive-download-B1ard6ym.js → hard-drive-download-B14E8eTo.js} +1 -1
  58. package/dist/assets/{history-BMhP0SFG.js → history-Dn2pnfaZ.js} +1 -1
  59. package/dist/assets/{hostInit-FCvre9AW.js → hostInit-3qW3eaSU.js} +1 -1
  60. package/dist/assets/i18n-B-IeyHf7.js +1 -0
  61. package/dist/assets/icons-CvJTX54k.js +1 -0
  62. package/dist/assets/{index-DvOECbab.js → index-mBJW996X.js} +3 -3
  63. package/dist/assets/key-EeG_L4W9.js +1 -0
  64. package/dist/assets/{key-round-yCDTbIQb.js → key-round-C9pPg55h.js} +1 -1
  65. package/dist/assets/{layers-c960YTPf.js → layers-DhxisKd7.js} +1 -1
  66. package/dist/assets/{linked-devices-model-CB7qgVjI.js → linked-devices-model-CTfAwc1p.js} +1 -1
  67. package/dist/assets/{list-ordered-C7hEwAd1.js → list-ordered-Ckqq8GR7.js} +1 -1
  68. package/dist/assets/{location-owned-usage-D28vwYJT.js → location-owned-usage-eDtNCANy.js} +1 -1
  69. package/dist/assets/{log-in-DFfxcqYz.js → log-in-CAiH8-Mq.js} +1 -1
  70. package/dist/assets/{memory-stick-BBfIGrWx.js → memory-stick-Bir-K-V7.js} +1 -1
  71. package/dist/assets/{message-square-plus-D8ZUT6rz.js → message-square-plus-B_0WwbBk.js} +1 -1
  72. package/dist/assets/{mf-entry-bootstrap-0-3035e647.js → mf-entry-bootstrap-0-c62ae51c.js} +2 -2
  73. package/dist/assets/{mic-off-w2mFOBi3.js → mic-off-D5kT_DDX.js} +1 -1
  74. package/dist/assets/{monitor-off-DPi_gm_c.js → monitor-off-DzKNd6eJ.js} +1 -1
  75. package/dist/assets/{monitor-smartphone-9Ife1Trw.js → monitor-smartphone-D3ZPy75c.js} +1 -1
  76. package/dist/assets/mount-JBC8n4FU.js +1 -0
  77. package/dist/assets/{notification-schedule-field-BuLfSYLZ.js → notification-schedule-field-DaKiveMR.js} +1 -1
  78. package/dist/assets/{octagon-alert-C-jH7VH_.js → octagon-alert-BYNvsZ0Q.js} +1 -1
  79. package/dist/assets/{player-overlays-D0U2dNvn.js → player-overlays-DFTWiQ8-.js} +1 -1
  80. package/dist/assets/{recycle-Bbki65G2.js → recycle-DJUuC9xt.js} +1 -1
  81. package/dist/assets/remoteEntry-BhYjusn-.js +1 -0
  82. package/dist/assets/{scan-eye-AfIM_Dlr.js → scan-eye-_otUiDbW.js} +1 -1
  83. package/dist/assets/{scissors-CnL6g0BO.js → scissors-BU04yNa7.js} +1 -1
  84. package/dist/assets/{search-x-eqJd3G8u.js → search-x-Djycej4Y.js} +1 -1
  85. package/dist/assets/{send-B72RQ9UL.js → send-BNY2bJqA.js} +1 -1
  86. package/dist/assets/{settings-2-CXZ6DVRg.js → settings-2-BxpLi7pY.js} +1 -1
  87. package/dist/assets/{speaker-CcCWWecW.js → speaker-BspD0ixN.js} +1 -1
  88. package/dist/assets/src-CE3hNyCx.js +67 -0
  89. package/dist/assets/{timer-reset-B9Lihcw9.js → timer-reset-CPRU92uv.js} +1 -1
  90. package/dist/assets/{ungroup-D753owNE.js → ungroup-oYlFn3LE.js} +1 -1
  91. package/dist/assets/{unlink-DzoLNfsq.js → unlink-D0eJ5vAc.js} +1 -1
  92. package/dist/assets/{usb-CuSU-_EY.js → usb-C24Ua3ty.js} +1 -1
  93. package/dist/assets/{use-scenes-feed-CZjJNxfD.js → use-scenes-feed-DzzIer2d.js} +1 -1
  94. package/dist/assets/{use-stationary-objects-BoGqWyLV.js → use-stationary-objects-C-l1Z5zI.js} +1 -1
  95. package/dist/assets/useEventInvalidation-JBC8n4FU.js +1 -0
  96. package/dist/assets/{useNodeUrlSelection-BA6CgjTU.js → useNodeUrlSelection-Ba-ed7zb.js} +1 -1
  97. package/dist/assets/user-round-JzUTTasm.js +1 -0
  98. package/dist/assets/{user-x-PK8sSsso.js → user-x-CdpX6b_D.js} +1 -1
  99. package/dist/assets/{video-BBtESt54.js → video-vLKHp9E_.js} +1 -1
  100. package/dist/assets/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__admin_ui_host__remoteEntry-_hash_-BKfTL-9e.js → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__admin_ui_host__remoteEntry-_hash_-D83o1ikp.js} +2 -2
  101. package/dist/index.html +10 -10
  102. package/dist/server/addon.js +192 -30
  103. package/package.json +1 -1
  104. package/dist/assets/AiProfiles-BXcreqZP.js +0 -3
  105. package/dist/assets/Cluster-B-k0M79z.js +0 -1
  106. package/dist/assets/ClusterStepModel-DaAc_6nI.js +0 -1
  107. package/dist/assets/Data-IfJuKcwc.js +0 -2
  108. package/dist/assets/Identity-DNE80jdX.js +0 -1
  109. package/dist/assets/IntegrationDetail-LKbiJFU3.js +0 -1
  110. package/dist/assets/Locations-BeaznsZS.js +0 -3
  111. package/dist/assets/MyAccess-Dxb11B6h.js +0 -2
  112. package/dist/assets/Network-BCDUHSB0.js +0 -1
  113. package/dist/assets/Recordings-BCeoXxL4.js +0 -1
  114. package/dist/assets/SessionsList-BRTwG3uv.js +0 -2
  115. package/dist/assets/circle-slash-YVgGJTpJ.js +0 -1
  116. package/dist/assets/client-DYbvGOid.js +0 -358
  117. package/dist/assets/crop-CxZbpOyK.js +0 -1
  118. package/dist/assets/device-picker-model-C4w1vbly.js +0 -1
  119. package/dist/assets/dist-CPO0KWoy.js +0 -358
  120. package/dist/assets/file-up-WS3s_T9x.js +0 -1
  121. package/dist/assets/i18n-Vb3uBp7P.js +0 -1
  122. package/dist/assets/icons-DocdgFuy.js +0 -1
  123. package/dist/assets/key-B1M6i1mf.js +0 -1
  124. package/dist/assets/mount-C4w1vbly.js +0 -1
  125. package/dist/assets/remoteEntry-DYVoozgD.js +0 -1
  126. package/dist/assets/src-CGxdJN_f.js +0 -67
  127. package/dist/assets/useEventInvalidation-C4w1vbly.js +0 -1
  128. package/dist/assets/user-round-CMg3Ndlt.js +0 -1
@@ -1 +1 @@
1
- import{$ as e,B as t,G as n,J as r,L as i,S as a,a as o,b as s,o as c,q as l,t as u,x as d}from"./_virtual_mf___mfe_internal__admin_ui_host__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-CEHpkaJP.js";import{Dn as f,It as p,On as m,Pn as h,Q as g,ar as _,bn as v,cn as y,ht as b,ot as ee,tr as te}from"./player-overlays-D0U2dNvn.js";import{m as ne,o as x}from"./video-BBtESt54.js";import{t as S}from"./log-in-DFfxcqYz.js";import{t as C}from"./monitor-smartphone-9Ife1Trw.js";import{t as re}from"./recycle-Bbki65G2.js";import{Nt as w,kr as T,sr as E}from"./client-DYbvGOid.js";import{$ as D,An as O,Bn as k,Dn as A,En as j,Er as ie,L as ae,Ln as M,On as N,Q as P,Tn as F,Ut as oe,Vi as I,Zn as se,_i as L,ar as R,bn as ce,di as le,fi as z,gi as B,hi as ue,jn as V,mi as H,vi as U,yi as de,z as fe,zn as pe}from"./src-CGxdJN_f.js";import{t as W}from"./i18n-Vb3uBp7P.js";import{t as G}from"./useTranslation-D3Is_4B6.js";import"./mount-C4w1vbly.js";import{C as K,L as q,Q as me,et as he,r as ge,s as _e,t as ve}from"./index-DvOECbab.js";import{t as ye}from"./AdminSectionedPage-B-qoE6ra.js";import{t as be}from"./NodeAddonsSettingsPanel-BMat4ckt.js";import{t as xe}from"./BrokerForm-B3xs9aBj.js";import{n as Se,r as J,t as Ce}from"./IntegrationHub-DdjWEObX.js";e();var Y=`kind`,X=`name`,Z=`restore`,Q=`restoreId`;function we(e){return{sections:[{id:`broker-identity`,title:W.t(`helpers.brokerIdentitySchema.title`),columns:1,fields:[{type:`select`,key:Y,label:W.t(`helpers.brokerIdentitySchema.kind`),options:e.map(e=>({value:e.key,label:e.label})),disabled:e.length<=1},{type:`text`,key:X,label:W.t(`helpers.brokerIdentitySchema.name`),placeholder:W.t(`helpers.brokerIdentitySchema.namePlaceholder`),required:!0},{type:`boolean`,key:Z,label:W.t(`helpers.brokerIdentitySchema.restore`),description:W.t(`helpers.brokerIdentitySchema.restoreHint`)},{type:`text`,key:Q,label:W.t(`helpers.brokerIdentitySchema.originalId`),placeholder:`ha_004`,required:!0,showWhen:{field:Z,equals:!0}}]}]}}function Te(e){let t=t=>{let n=e[t];return typeof n==`string`?n.trim():``},n=t(Y);if(n===``)return{ok:!1,problem:`Pick a kind.`};let r=t(X);if(r===``)return{ok:!1,problem:`Enter a name before saving.`};if(e.restore!==!0)return{ok:!0,identity:{kindKey:n,name:r,restoreId:null}};let i=t(Q);return i===``?{ok:!1,problem:`Enter the original id, or turn restore off to create a new broker.`}:{ok:!0,identity:{kindKey:n,name:r,restoreId:i}}}function Ee(e){if(typeof e!=`object`||!e)return!1;let t=e;return t.type===`camstack:broker-oauth`&&typeof t.ok==`boolean`}function De(e,t){return e.split(`{{brokerId}}`).join(encodeURIComponent(t))}function Oe(e,t,n=window){let r=n.location.origin,i=!1,a=e=>{i||(i=!0,n.removeEventListener(`message`,o),window.clearInterval(s),t(e))},o=t=>{t.origin!==r||t.source!==e||Ee(t.data)&&a({ok:t.data.ok,...t.data.brokerId===void 0?{}:{brokerId:t.data.brokerId},...t.data.error===void 0?{}:{error:t.data.error}})};n.addEventListener(`message`,o);let s=window.setInterval(()=>{e.closed&&a({ok:!0})},500);return()=>{i=!0,n.removeEventListener(`message`,o),window.clearInterval(s)}}function ke(e,t,n){let r=g(ge(De(e,t))),i=ve(r);if(i===null){window.location.assign(r);return}Oe(i,e=>{n?.(e)})}var Ae={"home-assistant":`Home Assistant`,mqtt:`MQTT`};function je(e){return Ae[e]??e}function Me(e){return Array.isArray(e)?e.filter(e=>typeof e==`object`&&!!e&&typeof e.addonId==`string`&&Array.isArray(e.kinds)):[]}var Ne={connected:`success`,connecting:`warning`,disconnected:`default`,"auth-failed":`danger`,unreachable:`danger`,error:`danger`};function Pe({status:e}){return d(R,{variant:Ne[e],className:`text-[10px]`,children:e})}function Fe(e){return Array.isArray(e)?e.filter(e=>typeof e==`object`&&!!e&&typeof e.id==`string`):[]}function Ie({title:e,subtitle:t,onClose:n,children:r}){return d(F,{open:!0,onOpenChange:e=>!e&&n(),children:a(A,{width:`md`,placement:`sheet-on-mobile`,scroll:`body`,children:[a(O,{children:[d(V,{children:e}),t&&d(N,{children:t})]}),d(j,{className:`space-y-3 pr-1`,children:r})]})})}function Le({kinds:e,onClose:t,onDone:i}){let{t:o}=G(),s=c(),l=n(()=>we(e.map(e=>({key:$(e),label:e.label}))),[e]),[u,f]=r(()=>({[Y]:$(e[0]),[X]:``,[Z]:!1,[Q]:``})),[p,m]=r(null),h=e.find(e=>$(e)===u.kind)??e[0],g=h?.kind??``,_=h?.addonId,v=h?.interactiveConnectPath,y=le({onSuccess:e=>{s.invalidateQueries({queryKey:[[`broker`,`list`]]});let t=typeof e==`object`&&e&&typeof e.id==`string`?e.id:null;t!==null&&v!==void 0&&v.length>0&&ke(v,t,()=>{s.invalidateQueries({queryKey:[[`broker`,`list`]]})}),i()}}),b=e=>{let t=Te(u);if(!t.ok){m(t.problem);return}m(null);let{name:n,restoreId:r}=t.identity;y.mutate({kind:g,name:n,settings:e,...r===null?{}:{id:r},..._===void 0?{}:{addonId:_}})};return a(Ie,{title:o(`brokers.brokerManager.addBroker`,`Add broker`),subtitle:o(`brokers.brokerManager.registerAMessageBrokerFor`,`Register a message broker for exporters and automations.`),onClose:y.isPending?()=>{}:t,children:[d(q,{schema:l,values:u,onChange:f}),p!==null&&d(M,{message:p}),y.isError&&d(M,{message:y.error instanceof Error?y.error.message:String(y.error)}),g&&d(xe,{kind:g,..._===void 0?{}:{addonId:_},onSubmit:b,onCancel:t,submitLabel:y.isPending?o(`brokers.brokerManager.adding`,`Adding…`):o(`brokers.brokerManager.addBroker`,`Add broker`),disabled:y.isPending},$(h))]})}function $(e){return e===void 0?``:`${e.addonId??``}::${e.kind}`}function Re({broker:e,onClose:t,onDone:r}){let{t:i}=G(),o=c(),s=z({id:e.id,addonId:e.addonId}),l=U({onSuccess:()=>{o.invalidateQueries({queryKey:[[`broker`,`list`]]}),o.invalidateQueries({queryKey:[[`broker`,`getSettings`],{input:{id:e.id,addonId:e.addonId}}]}),r()}}),u=n(()=>{let e=s.data;return e&&typeof e==`object`?{...e}:{}},[s.data]);return d(Ie,{title:i(`brokers.brokerManager.edit`,`Edit {{name}}`,{name:e.name}),subtitle:`${je(e.kind)} · ${e.id}`,onClose:l.isPending?()=>{}:t,children:s.isLoading?a(`div`,{className:`flex items-center gap-2 text-xs text-foreground-subtle`,children:[d(_,{className:`h-3.5 w-3.5 animate-spin`}),` `,i(`brokers.brokerManager.loadingSettings`)]}):s.isError?a(`div`,{className:`space-y-3`,children:[d(M,{message:i(`brokers.brokerManager.loadSettingsFailed`,{message:s.error instanceof Error?s.error.message:i(`common.unknownError`)})}),d(`div`,{className:`flex justify-end`,children:d(k,{variant:`outline`,size:`sm`,onClick:t,children:i(`common.close`,`Close`)})})]}):a(`div`,{className:`space-y-3`,children:[l.isError&&d(M,{message:l.error instanceof Error?l.error.message:String(l.error)}),d(xe,{kind:e.kind,addonId:e.addonId,brokerId:e.id,initialValues:u,onSubmit:t=>{l.mutate({id:e.id,settings:t,addonId:e.addonId})},onCancel:t,submitLabel:l.isPending?i(`brokers.brokerManager.saving`,`Saving…`):i(`common.save`,`Save`),disabled:l.isPending})]})})}function ze({broker:e,interactiveConnectPath:t,interactiveDisconnectPath:n,onEdit:i}){let{t:o}=G(),s=c(),l=se(),[u,f]=r(null),m=de({onSuccess:e=>f(e.ok?{ok:!0}:{ok:!1,error:e.error}),onError:e=>f({ok:!1,error:e instanceof Error?e.message:String(e)})}),g=L({onSuccess:()=>{s.invalidateQueries({queryKey:[[`broker`,`list`]]})}}),v=async()=>{await l({title:o(`brokers.brokerManager.deleteBroker`,`Delete broker`),message:o(`brokers.brokerManager.deleteBrokerIntegrationsThatDepend`,`Delete broker "{{name}}"? Integrations that depend on it will stop working.`,{name:e.name}),confirmLabel:o(`common.delete`,`Delete`),variant:`danger`})&&g.mutate({id:e.id,addonId:e.addonId})},y=t!==void 0&&t.length>0&&e.status!==`connected`,ee=n!==void 0&&n.length>0&&e.status===`connected`;return a(`tr`,{className:`border-b border-border last:border-0`,children:[d(`td`,{className:`px-3 py-2 text-xs text-foreground font-medium`,children:e.name}),d(`td`,{className:`px-3 py-2 text-xs text-foreground-subtle`,children:je(e.kind)}),a(`td`,{className:`px-3 py-2`,children:[d(Pe,{status:e.status}),u&&d(`span`,{className:`ml-2 text-[10px] ${u.ok?`text-success`:`text-danger`}`,children:u.ok?`OK`:u.error??o(`common.failedWord`)})]}),d(`td`,{className:`px-3 py-2`,children:a(`div`,{className:`flex items-center justify-end gap-1.5`,children:[y&&a(k,{variant:`primary`,size:`sm`,onClick:()=>{ke(t,e.id,()=>{s.invalidateQueries({queryKey:[[`broker`,`list`]]})})},title:o(`brokers.brokerManager.signInOpensAPopup`,`Sign in — opens a popup that closes when done`),children:[d(S,{className:`h-3 w-3`}),` `,o(`brokers.brokerManager.signIn`)]}),ee&&a(k,{variant:`outline`,size:`sm`,onClick:()=>{ke(n,e.id,()=>{s.invalidateQueries({queryKey:[[`broker`,`list`]]})})},title:o(`brokers.brokerManager.signOutClearsTheLinked`,`Sign out — clears the linked Google account on this broker`),children:[d(x,{className:`h-3 w-3`}),` `,o(`brokers.brokerManager.signOut`)]}),a(k,{variant:`outline`,size:`sm`,onClick:()=>m.mutate({id:e.id,addonId:e.addonId}),disabled:m.isPending,title:o(`brokers.brokerManager.testConnection`,`Test connection`),children:[m.isPending?d(_,{className:`h-3 w-3 animate-spin`}):d(b,{className:`h-3 w-3`}),o(`brokers.brokerManager.test`,`Test`)]}),a(k,{variant:`outline`,size:`sm`,onClick:()=>i(e),title:o(`common.edit`,`Edit`),children:[d(h,{className:`h-3 w-3`}),` `,o(`common.edit`)]}),a(k,{variant:`outline`,size:`sm`,className:`border-danger/40 text-danger hover:bg-danger/10`,onClick:()=>{v()},disabled:g.isPending,title:o(`common.delete`,`Delete`),children:[g.isPending?d(_,{className:`h-3 w-3 animate-spin`}):d(p,{className:`h-3 w-3`}),o(`common.delete`,`Delete`)]})]})})]})}function Be({addonId:e}={}){let{t}=G(),i=ue({}),o=B(),s=n(()=>Fe(i.data).filter(t=>e===void 0||t.addonId===e),[i.data,e]),[c,l]=r(!1),[u,f]=r(null),p=n(()=>{let t=new Map;for(let n of Me(o.data))if(!(e!==void 0&&n.addonId!==e))for(let e of n.kinds){let r=typeof e.interactiveConnectPath==`string`&&e.interactiveConnectPath.length>0?e.interactiveConnectPath:void 0,i=typeof e.interactiveDisconnectPath==`string`&&e.interactiveDisconnectPath.length>0?e.interactiveDisconnectPath:void 0;t.set(`${n.addonId}::${e.kind}`,{addonId:n.addonId,kind:e.kind,label:e.label,...r===void 0?{}:{interactiveConnectPath:r},...i===void 0?{}:{interactiveDisconnectPath:i}})}for(let e of s)[...t.values()].some(t=>t.kind===e.kind)||t.set(`::${e.kind}`,{kind:e.kind,label:je(e.kind)});return[...t.values()]},[s,o.data,e]),h=n(()=>{let e=new Map;for(let t of p)e.has(t.kind)||e.set(t.kind,{...t.interactiveConnectPath===void 0?{}:{connect:t.interactiveConnectPath},...t.interactiveDisconnectPath===void 0?{}:{disconnect:t.interactiveDisconnectPath}});return e},[p]);return a(`div`,{className:`space-y-3`,children:[d(`div`,{className:`flex items-center justify-end`,children:a(k,{variant:`primary`,size:`sm`,onClick:()=>l(!0),disabled:p.length===0,title:p.length===0?t(`brokers.brokerManager.noBrokerProvidersAvailable`,`No broker providers available`):void 0,children:[d(m,{className:`h-3.5 w-3.5`}),` `,t(`brokers.brokerManager.addBroker`)]})}),d(`div`,{className:`rounded-lg border border-border bg-surface overflow-x-auto`,children:a(`table`,{className:`w-full min-w-[36rem] border-collapse`,children:[d(`thead`,{children:a(`tr`,{className:`border-b border-border bg-background/50`,children:[d(`th`,{className:`px-3 py-2 text-left text-[10px] font-semibold uppercase tracking-wider text-foreground-subtle`,children:t(`brokers.brokerManager.name`,`Name`)}),d(`th`,{className:`px-3 py-2 text-left text-[10px] font-semibold uppercase tracking-wider text-foreground-subtle`,children:t(`brokers.brokerManager.kind`,`Kind`)}),d(`th`,{className:`px-3 py-2 text-left text-[10px] font-semibold uppercase tracking-wider text-foreground-subtle`,children:t(`brokers.brokerManager.status`,`Status`)}),d(`th`,{className:`px-3 py-2 text-right text-[10px] font-semibold uppercase tracking-wider text-foreground-subtle`,children:t(`brokers.brokerManager.actions`,`Actions`)})]})}),a(`tbody`,{children:[i.isLoading&&d(`tr`,{children:a(`td`,{colSpan:4,className:`px-3 py-6 text-center text-xs text-foreground-subtle`,children:[d(_,{className:`inline h-4 w-4 animate-spin`}),` `,t(`brokers.brokerManager.loadingBrokers`)]})}),i.isError&&d(`tr`,{children:a(`td`,{colSpan:4,className:`px-3 py-4 text-center text-xs text-danger`,children:[t(`brokers.brokerManager.failedToLoadBrokers`,`Failed to load brokers:`),` `,i.error instanceof Error?i.error.message:t(`brokers.brokerManager.unknownError`,`Unknown error`)]})}),!i.isLoading&&!i.isError&&s.length===0&&d(`tr`,{children:d(`td`,{colSpan:4,className:`px-3 py-6 text-center text-xs text-foreground-subtle`,children:t(`brokers.brokerManager.noBrokersRegisteredYetAdd`,`No brokers registered yet. Add one to publish device events for downstream automations.`)})}),s.map(e=>{let t=h.get(e.kind);return d(ze,{broker:e,...t?.connect===void 0?{}:{interactiveConnectPath:t.connect},...t?.disconnect===void 0?{}:{interactiveDisconnectPath:t.disconnect},onEdit:f},e.id)})]})]})}),c&&d(Le,{kinds:p,onClose:()=>l(!1),onDone:()=>l(!1)}),u&&d(Re,{broker:u,onClose:()=>f(null),onDone:()=>f(null)})]})}function Ve(e){if(typeof e==`string`)return e;if(typeof e==`object`&&e){let t=e.name;if(typeof t==`string`)return t}return null}function He(e){let t=e,n=t?.manifest;if(n?.id===void 0)return null;let r=(n.capabilities??[]).map(Ve).filter(e=>e!==null);return{addonId:n.id,displayName:n.packageDisplayName??n.name??n.id,capNames:r,processState:t?.process?.state??null}}function Ue(e,t){return Object.entries(e).filter(([,e])=>e===t).map(([e])=>e)}function We(e,t){return t.find(t=>e.capNames.includes(t))??null}function Ge(e){switch(e){case`running`:return{state:`ok`,label:W.t(`helpers.connectivityModel.running`)};case`crashed`:case`failed`:return{state:`error`,label:e};case`stopped`:case`disabled`:return{state:`off`,label:W.t(`helpers.connectivityModel.stopped`)};default:return{state:`unknown`,label:e??W.t(`common.unknownWord`)}}}e();var Ke=[`wasteCollections`,`listSources`],qe=[`wasteCollections`,`listCountries`];function Je(e){return e instanceof Error?e.message:String(e)}function Ye(e){return typeof e!=`object`||!e?!1:Array.isArray(Reflect.get(e,`sections`))}function Xe(e){if(!Array.isArray(e))return[];let t=[];for(let n of e){if(typeof n!=`object`||!n)continue;let e=Reflect.get(n,`id`),r=Reflect.get(n,`label`),i=Reflect.get(n,`module`);if(typeof e!=`string`||typeof r!=`string`||typeof i!=`string`)continue;let a=Reflect.get(n,`argsJson`),o=Reflect.get(n,`enabled`),s=Reflect.get(n,`formValues`),c=Reflect.get(n,`serviceId`),l=Reflect.get(n,`countryId`);t.push({id:e,label:r,module:i,argsJson:typeof a==`string`?a:`{}`,enabled:typeof o==`boolean`?o:!0,formValues:typeof s==`object`&&s&&!Array.isArray(s)?s:void 0,serviceId:typeof c==`string`?c:void 0,countryId:typeof l==`string`?l:void 0})}return t}function Ze(e){return Array.isArray(e)?e.flatMap(e=>{if(typeof e!=`object`||!e)return[];let t=Reflect.get(e,`id`),n=Reflect.get(e,`label`);return typeof t!=`string`||typeof n!=`string`?[]:[{id:t,label:n}]}):[]}function Qe(e){return Array.isArray(e)?e.flatMap(e=>{if(typeof e!=`object`||!e)return[];let t=Reflect.get(e,`id`),n=Reflect.get(e,`label`),r=Reflect.get(e,`module`);if(typeof t!=`string`||typeof n!=`string`||typeof r!=`string`)return[];let i=Reflect.get(e,`title`);return[{id:t,label:n,title:typeof i==`string`&&i.length>0?i:n,module:r}]}):[]}function $e(e,t,n){return{sections:[{id:`picker`,title:W.t(`system.wasteSettingsSources.countryService`,`Country & service`),columns:2,fields:[{type:`select`,key:`countryId`,label:W.t(`system.wasteSettingsSources.country`,`Country`),options:[{value:``,label:W.t(`system.wasteSettingsSources.selectCountry`,`Select country…`)},...e.map(e=>({value:e.id,label:e.label}))]},{type:`select`,key:`serviceId`,label:W.t(`system.wasteSettingsSources.service`,`Service`),options:[{value:``,label:n===``?W.t(`system.wasteSettingsSources.pickACountryFirst`,`Pick a country first`):W.t(`system.wasteSettingsSources.selectService`,`Select service…`)},...t.map(e=>({value:e.id,label:e.label}))]}]}]}}function et({addonId:e,capName:f}){let{t:h}=G(),g=ee(),_=c(),v=se(),y=ae({editKey:`wasteEdit`,newKey:`wasteNew`}),[b,te]=r(!1),[ne,x]=r(null),[S,C]=r({countryId:``,serviceId:``}),[w,T]=r({label:h(`system.wasteSettingsSources.newSource`,`New source`),enabled:!0}),E=l(null),D=typeof S.countryId==`string`?S.countryId:``,O=typeof S.serviceId==`string`?S.serviceId:``,A=i((t,n)=>g.trpcClient.addons.custom.mutate({addonId:e,action:t,input:n}),[e,g]),j=o({queryKey:[...Ke,e],queryFn:async()=>Xe(await A(`listSources`,{}))}),ie=o({queryKey:[...qe,e],queryFn:async()=>Ze(await A(`listCountries`,{}))}),M=o({queryKey:[`wasteCollections`,`listServices`,e,D],enabled:D!==``,queryFn:async()=>Qe(await A(`listServices`,{countryId:D}))}),N=o({queryKey:[`wasteCollections`,`serviceFormSchema`,e,O],enabled:O!==``,queryFn:async()=>A(`serviceFormSchema`,{serviceId:O})}),P=j.data??[],F=ie.data??[],I=M.data??[],L=Ye(N.data)?N.data:void 0,le=n(()=>$e(F,D===``?[]:I,D),[F,I,D]),z=y.state,B=z.mode===`edit`?P.find(e=>e.id===z.id)??null:null;t(()=>{if(y.state.mode===`edit`&&B!==null){let e=`edit:${B.id}`;if(E.current===e)return;E.current=e,x(null),C({countryId:B.countryId??``,serviceId:B.serviceId??``}),T(B.formValues===void 0?{label:B.label,enabled:B.enabled}:{...B.formValues});return}if(y.state.mode===`new`){if(E.current===`new`)return;E.current=`new`,x(null),C({countryId:``,serviceId:``}),T({label:h(`system.wasteSettingsSources.newSource`,`New source`),enabled:!0})}},[B,y.state]),t(()=>{if(y.state.mode!==`new`||O===``)return;let e=I.find(e=>e.id===O);e&&T(t=>{let n=t.label;return typeof n==`string`&&n!==``&&n!==`New source`?t:{...t,label:e.title}})},[y.state.mode,O,I]);let ue=i(e=>{C(t=>{let n=typeof e.countryId==`string`?e.countryId:``;return n===(typeof t.countryId==`string`?t.countryId:``)?e:{countryId:n,serviceId:``}})},[]),V=i(async()=>{await _.invalidateQueries({queryKey:Ke})},[_]),H=u({mutationFn:async e=>A(`deleteSource`,{id:e}),onSuccess:async()=>V()}),U=i(async e=>{await v({title:h(`system.wasteSettingsSources.deleteWasteSource`,`Delete waste source?`),message:h(`system.wasteSettingsSources.removeItsCalendarUnderSystem`,`Remove “{{label}}” ({{id}}). Its calendar under System → Calendars is dropped.`,{label:e.label,id:e.id}),confirmLabel:h(`common.delete`,`Delete`),cancelLabel:h(`common.cancel`,`Cancel`),variant:`danger`})&&(await H.mutateAsync(e.id),y.state.mode===`edit`&&y.state.id===e.id&&(y.close(),E.current=null))},[v,H,y,h]),de=i(async()=>{let e=w.label,t=typeof e==`string`&&e.trim()!==``?e.trim():``;if(t===``){x(`Label is required.`);return}if(O===``){x(`Pick a country and a service.`);return}let n=y.state.mode===`new`,r=B?.id;if(!n&&(r===void 0||r===``)){x(`That source is no longer available.`);return}let i=w.enabled,a={...w};delete a.label,delete a.enabled,te(!0),x(null);try{n?await A(`createSource`,{label:t,serviceId:O,args:a,enabled:typeof i==`boolean`?i:!0}):r!==void 0&&await A(`updateSource`,{id:r,label:t,serviceId:O,args:a,enabled:typeof i==`boolean`?i:!0}),await V(),y.close(),E.current=null}catch(e){x(Je(e))}finally{te(!1)}},[A,B,y,w,V,O]),W=n(()=>[{key:`label`,header:h(`system.wasteSettingsSources.label`,`Label`),sortValue:e=>e.label,render:e=>d(`span`,{className:`text-sm text-foreground`,children:e.label})},{key:`module`,header:h(`system.wasteSettingsSources.module`,`Module`),sortValue:e=>e.module,render:e=>d(`span`,{className:`font-mono text-xs text-foreground-muted`,children:e.module})},{key:`enabled`,header:h(`system.wasteSettingsSources.enabled`,`Enabled`),sortValue:e=>+!!e.enabled,render:e=>d(R,{variant:e.enabled?`success`:`default`,children:e.enabled?h(`system.wasteSettingsSources.on`,`On`):h(`system.wasteSettingsSources.off`,`Off`)})},{key:`actions`,header:``,notSortableReason:`actions`,render:e=>d(k,{type:`button`,size:`sm`,variant:`ghost`,"aria-label":h(`system.wasteSettingsSources.delete`,`Delete {{label}}`,{label:e.label}),"data-testid":`waste-source-delete-${e.id}`,onClick:t=>{t.stopPropagation(),U(e)},children:d(p,{className:`h-3.5 w-3.5 text-danger`})})}],[U,h]),K=y.state.mode===`new`,q=K||B!==null,me=`${O}:${K?`new`:B?.id??`closed`}`;return a(`div`,{className:`flex min-h-0 flex-col gap-4`,"data-testid":`waste-settings-sources`,children:[a(`div`,{className:`flex flex-wrap items-center justify-between gap-2`,children:[d(`p`,{className:`text-sm text-foreground-muted`,children:h(`system.wasteSettingsSources.pickACountryAndA`,`Pick a country and a service — configuration fields come from that HACS source.`)}),a(k,{type:`button`,size:`sm`,"data-testid":`waste-sources-add`,onClick:()=>y.openNew(),children:[d(m,{className:`h-3.5 w-3.5`}),h(`system.wasteSettingsSources.addSource`,`Add source`)]})]}),j.isError?d(`p`,{className:`text-sm text-danger`,children:h(`system.wasteSettingsSources.couldNotLoadSources`,`Could not load sources.`)}):null,j.isPending?d(pe,{className:`h-32 w-full`}):d(oe,{columns:W,rows:P,rowKey:e=>e.id,pageSize:25,emptyMessage:h(`system.wasteSettingsSources.noWasteSourcesYetAdd`,`No waste sources yet. Add one to register a municipal service.`),onRowClick:e=>y.openEdit(e.id),defaultSort:{columnKey:`label`,dir:`asc`}}),d(fe,{open:q,onClose:()=>{y.close(),x(null),E.current=null},title:K?h(`system.wasteSettingsSources.addWasteSource`,`Add waste source`):h(`system.wasteSettingsSources.edit`,`Edit {{value1}}`,{value1:B?.label??`source`}),icon:re,width:`xl`,testId:`waste-source-editor`,error:ne,footer:d(k,{type:`button`,size:`sm`,disabled:b||O===``,onClick:()=>void de(),children:b?h(`system.wasteSettingsSources.saving`,`Saving…`):h(`common.save`,`Save`)}),children:q?a(s,{children:[d(`div`,{"data-testid":`waste-country-service`,children:d(ce,{schema:le,values:S,onChange:ue},`picker:${D}:${I.length}`)}),O!==``&&L!==void 0?d(ce,{schema:L,values:w,onChange:T,bare:!0},me):O!==``&&N.isPending?d(`p`,{className:`text-sm text-foreground-muted`,children:h(`system.wasteSettingsSources.loadingFields`,`Loading fields…`)}):d(`p`,{className:`text-sm text-foreground-muted`,children:h(`system.wasteSettingsSources.chooseACountryAndService`,`Choose a country and service to see the required fields.`)})]}):null}),d(be,{nodeId:`hub`,addonIds:[e],level:`global`,capability:f,hideSectionChrome:!0})]})}e();var tt=1e4,nt={"device-export":`exporters`,exporters:`exporters`,email:`email`,broker:`brokers`,brokers:`brokers`,"message-brokers":`brokers`,calendar:`calendars`,calendars:`calendars`,"calendar-source":`calendars`},rt=[{sectionId:`exporters`,kind:`device-export`,labelKey:`system.connectivity.exporters`,icon:y,installLabelKey:`system.connectivity.exportersInstall`,emptyTitleKey:`system.connectivity.exportersEmptyTitle`,emptyDescriptionKey:`system.connectivity.exportersEmptyDescription`},{sectionId:`email`,kind:`email`,labelKey:`system.connectivity.email`,icon:te,installLabelKey:`system.connectivity.emailInstall`,emptyTitleKey:`system.connectivity.emailEmptyTitle`,emptyDescriptionKey:`system.connectivity.emailEmptyDescription`},{sectionId:`brokers`,kind:`broker`,labelKey:`system.connectivity.brokers`,icon:v,installLabelKey:`system.connectivity.brokersInstall`,emptyTitleKey:`system.connectivity.brokersEmptyTitle`,emptyDescriptionKey:`system.connectivity.brokersEmptyDescription`},{sectionId:`calendars`,kind:`calendar`,labelKey:`system.connectivity.calendars`,icon:ne,installLabelKey:`system.connectivity.calendarsInstall`,emptyTitleKey:`system.connectivity.calendarsEmptyTitle`,emptyDescriptionKey:`system.connectivity.calendarsEmptyDescription`}];function it(e,t,n,r){let i=Ue(w,e.kind),o=t.flatMap(t=>{let r=We(t,i);if(r===null)return[];let o=Ge(t.processState);return[{id:t.addonId,name:t.displayName,fallbackIcon:e.icon,state:o.state,stateLabel:o.label,render:()=>d(Se,{addonId:t.addonId,displayName:t.displayName,capName:r,isActive:t.processState===`running`,badges:a(s,{children:[d(ct,{processState:t.processState}),d(lt,{kind:e.kind,addonId:t.addonId})]}),lead:e.kind===`device-export`?d(D,{addonId:t.addonId}):void 0,panels:st(e.kind,t.addonId,e=>n(`/devices/${e}`)),settingsContent:t.addonId===`waste-collections`?d(et,{addonId:t.addonId,capName:r}):void 0})}]});return{id:e.sectionId,label:r(e.labelKey),entries:o,install:{capability:i[0]??e.kind,label:r(e.installLabelKey)}}}function at({descriptor:e,rows:t,isLoading:r}){let{t:i}=G(),a=me(),o=n(()=>it(e,t,a,i),[e,t,a,i]);return d(Ce,{embedded:!0,icon:e.icon,title:i(e.labelKey),subtitle:null,groups:[o],isLoading:r,emptyTitle:i(e.emptyTitleKey),emptyDescription:i(e.emptyDescriptionKey)})}function ot(){let{t:e}=G(),r=ie(void 0,{refetchInterval:tt}),[i,a]=he(),o=K(`/system/integrations`,{t:e,isAdmin:!0})??{icon:f,title:e(`admin.system.integrations.connectivity`,`Connectivity`)};t(()=>{let e=i.get(`tab`);if(e===null)return;let t=nt[e];t===void 0||t===e||a(e=>{let n=new URLSearchParams(e);return n.set(`tab`,t),n},{replace:!0})},[i,a]);let s=n(()=>(r.data??[]).map(He).filter(e=>e!==null),[r.data]),c=n(()=>rt.map(t=>({id:t.sectionId,label:e(t.labelKey),ownedParams:_e,content:d(at,{descriptor:t,rows:s,isLoading:r.isLoading})})),[r.isLoading,s,e]);return d(ye,{icon:o.icon,title:o.title,subtitle:e(`admin.system.integrations.externalSystemsThisHubTalks`,`External systems this hub talks to — exporters, email, brokers and calendar sources.`),defaultSection:`exporters`,sectionsLabel:`Connectivity sections`,sections:c})}function st(e,t,n){return e===`device-export`?[{id:`devices`,title:W.t(`admin.system.integrations.devices`,`Devices`),icon:C,placement:`end`,content:d(P,{addonId:t,onOpenDevice:n,showSetup:!1})}]:e===`broker`?[{id:`connections`,title:W.t(`admin.system.integrations.connections`,`Connections`),icon:v,content:d(Be,{addonId:t})}]:[]}function ct({processState:e}){let{state:t,label:n}=Ge(e);return d(R,{variant:t===`ok`?`success`:t===`error`?`danger`:`default`,className:`${J} capitalize`,children:n})}function lt({kind:e,addonId:t}){return e===`broker`?d(ut,{addonId:t}):e===`device-export`?d(dt,{addonId:t}):null}function ut({addonId:e}){let{t}=G(),{data:n}=H({addonId:e},{refetchInterval:tt,retry:!1}),r=T.safeParse(n);if(!r.success)return null;let{brokerCount:i,connectedCount:a}=r.data;return d(R,{variant:`info`,className:J,children:a>0?t(`system.connectivity.connectionsConnected`,{count:i,connected:a}):t(`system.connectivity.connections`,{count:i})})}function dt({addonId:e}){let{t}=G(),{data:n}=I({addonId:e},{refetchInterval:tt,retry:!1}),r=E.safeParse(n);if(!r.success)return null;let{linkState:i,exposedDeviceCount:a}=r.data;return d(R,{variant:i===`linked`?`success`:i===`error`?`danger`:`default`,className:J,children:t(`admin.system.integrations.exposed`,`{{linkState}} · {{exposedDeviceCount}} exposed`,{linkState:i,exposedDeviceCount:a})})}export{ot as IntegrationsPage};
1
+ import{$ as e,B as t,G as n,J as r,L as i,S as a,a as o,b as s,o as c,q as l,t as u,x as d}from"./_virtual_mf___mfe_internal__admin_ui_host__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-CEHpkaJP.js";import{Dn as f,It as p,On as m,Pn as h,Q as g,ar as _,bn as v,cn as y,ht as b,ot as ee,tr as te}from"./player-overlays-DFTWiQ8-.js";import{m as ne,o as x}from"./video-vLKHp9E_.js";import{t as S}from"./log-in-CAiH8-Mq.js";import{t as C}from"./monitor-smartphone-D3ZPy75c.js";import{t as re}from"./recycle-DJUuC9xt.js";import{Nt as w,kr as T,sr as E}from"./client-CqsEJzhO.js";import{$ as D,An as O,Bn as k,Dn as A,En as j,Er as ie,L as ae,Ln as M,On as N,Q as P,Tn as F,Ut as oe,Vi as I,Zn as se,_i as L,ar as R,bn as ce,di as le,fi as z,gi as B,hi as ue,jn as V,mi as H,vi as U,yi as de,z as fe,zn as pe}from"./src-CE3hNyCx.js";import{t as W}from"./i18n-B-IeyHf7.js";import{t as G}from"./useTranslation-D3Is_4B6.js";import"./mount-JBC8n4FU.js";import{C as K,L as q,Q as me,et as he,r as ge,s as _e,t as ve}from"./index-mBJW996X.js";import{t as ye}from"./AdminSectionedPage-Bb00eMTj.js";import{t as be}from"./NodeAddonsSettingsPanel-kmgNnVID.js";import{t as xe}from"./BrokerForm-NDMOvAlu.js";import{n as Se,r as J,t as Ce}from"./IntegrationHub-DuVgrEey.js";e();var Y=`kind`,X=`name`,Z=`restore`,Q=`restoreId`;function we(e){return{sections:[{id:`broker-identity`,title:W.t(`helpers.brokerIdentitySchema.title`),columns:1,fields:[{type:`select`,key:Y,label:W.t(`helpers.brokerIdentitySchema.kind`),options:e.map(e=>({value:e.key,label:e.label})),disabled:e.length<=1},{type:`text`,key:X,label:W.t(`helpers.brokerIdentitySchema.name`),placeholder:W.t(`helpers.brokerIdentitySchema.namePlaceholder`),required:!0},{type:`boolean`,key:Z,label:W.t(`helpers.brokerIdentitySchema.restore`),description:W.t(`helpers.brokerIdentitySchema.restoreHint`)},{type:`text`,key:Q,label:W.t(`helpers.brokerIdentitySchema.originalId`),placeholder:`ha_004`,required:!0,showWhen:{field:Z,equals:!0}}]}]}}function Te(e){let t=t=>{let n=e[t];return typeof n==`string`?n.trim():``},n=t(Y);if(n===``)return{ok:!1,problem:`Pick a kind.`};let r=t(X);if(r===``)return{ok:!1,problem:`Enter a name before saving.`};if(e.restore!==!0)return{ok:!0,identity:{kindKey:n,name:r,restoreId:null}};let i=t(Q);return i===``?{ok:!1,problem:`Enter the original id, or turn restore off to create a new broker.`}:{ok:!0,identity:{kindKey:n,name:r,restoreId:i}}}function Ee(e){if(typeof e!=`object`||!e)return!1;let t=e;return t.type===`camstack:broker-oauth`&&typeof t.ok==`boolean`}function De(e,t){return e.split(`{{brokerId}}`).join(encodeURIComponent(t))}function Oe(e,t,n=window){let r=n.location.origin,i=!1,a=e=>{i||(i=!0,n.removeEventListener(`message`,o),window.clearInterval(s),t(e))},o=t=>{t.origin!==r||t.source!==e||Ee(t.data)&&a({ok:t.data.ok,...t.data.brokerId===void 0?{}:{brokerId:t.data.brokerId},...t.data.error===void 0?{}:{error:t.data.error}})};n.addEventListener(`message`,o);let s=window.setInterval(()=>{e.closed&&a({ok:!0})},500);return()=>{i=!0,n.removeEventListener(`message`,o),window.clearInterval(s)}}function ke(e,t,n){let r=g(ge(De(e,t))),i=ve(r);if(i===null){window.location.assign(r);return}Oe(i,e=>{n?.(e)})}var Ae={"home-assistant":`Home Assistant`,mqtt:`MQTT`};function je(e){return Ae[e]??e}function Me(e){return Array.isArray(e)?e.filter(e=>typeof e==`object`&&!!e&&typeof e.addonId==`string`&&Array.isArray(e.kinds)):[]}var Ne={connected:`success`,connecting:`warning`,disconnected:`default`,"auth-failed":`danger`,unreachable:`danger`,error:`danger`};function Pe({status:e}){return d(R,{variant:Ne[e],className:`text-[10px]`,children:e})}function Fe(e){return Array.isArray(e)?e.filter(e=>typeof e==`object`&&!!e&&typeof e.id==`string`):[]}function Ie({title:e,subtitle:t,onClose:n,children:r}){return d(F,{open:!0,onOpenChange:e=>!e&&n(),children:a(A,{width:`md`,placement:`sheet-on-mobile`,scroll:`body`,children:[a(O,{children:[d(V,{children:e}),t&&d(N,{children:t})]}),d(j,{className:`space-y-3 pr-1`,children:r})]})})}function Le({kinds:e,onClose:t,onDone:i}){let{t:o}=G(),s=c(),l=n(()=>we(e.map(e=>({key:$(e),label:e.label}))),[e]),[u,f]=r(()=>({[Y]:$(e[0]),[X]:``,[Z]:!1,[Q]:``})),[p,m]=r(null),h=e.find(e=>$(e)===u.kind)??e[0],g=h?.kind??``,_=h?.addonId,v=h?.interactiveConnectPath,y=le({onSuccess:e=>{s.invalidateQueries({queryKey:[[`broker`,`list`]]});let t=typeof e==`object`&&e&&typeof e.id==`string`?e.id:null;t!==null&&v!==void 0&&v.length>0&&ke(v,t,()=>{s.invalidateQueries({queryKey:[[`broker`,`list`]]})}),i()}}),b=e=>{let t=Te(u);if(!t.ok){m(t.problem);return}m(null);let{name:n,restoreId:r}=t.identity;y.mutate({kind:g,name:n,settings:e,...r===null?{}:{id:r},..._===void 0?{}:{addonId:_}})};return a(Ie,{title:o(`brokers.brokerManager.addBroker`,`Add broker`),subtitle:o(`brokers.brokerManager.registerAMessageBrokerFor`,`Register a message broker for exporters and automations.`),onClose:y.isPending?()=>{}:t,children:[d(q,{schema:l,values:u,onChange:f}),p!==null&&d(M,{message:p}),y.isError&&d(M,{message:y.error instanceof Error?y.error.message:String(y.error)}),g&&d(xe,{kind:g,..._===void 0?{}:{addonId:_},onSubmit:b,onCancel:t,submitLabel:y.isPending?o(`brokers.brokerManager.adding`,`Adding…`):o(`brokers.brokerManager.addBroker`,`Add broker`),disabled:y.isPending},$(h))]})}function $(e){return e===void 0?``:`${e.addonId??``}::${e.kind}`}function Re({broker:e,onClose:t,onDone:r}){let{t:i}=G(),o=c(),s=z({id:e.id,addonId:e.addonId}),l=U({onSuccess:()=>{o.invalidateQueries({queryKey:[[`broker`,`list`]]}),o.invalidateQueries({queryKey:[[`broker`,`getSettings`],{input:{id:e.id,addonId:e.addonId}}]}),r()}}),u=n(()=>{let e=s.data;return e&&typeof e==`object`?{...e}:{}},[s.data]);return d(Ie,{title:i(`brokers.brokerManager.edit`,`Edit {{name}}`,{name:e.name}),subtitle:`${je(e.kind)} · ${e.id}`,onClose:l.isPending?()=>{}:t,children:s.isLoading?a(`div`,{className:`flex items-center gap-2 text-xs text-foreground-subtle`,children:[d(_,{className:`h-3.5 w-3.5 animate-spin`}),` `,i(`brokers.brokerManager.loadingSettings`)]}):s.isError?a(`div`,{className:`space-y-3`,children:[d(M,{message:i(`brokers.brokerManager.loadSettingsFailed`,{message:s.error instanceof Error?s.error.message:i(`common.unknownError`)})}),d(`div`,{className:`flex justify-end`,children:d(k,{variant:`outline`,size:`sm`,onClick:t,children:i(`common.close`,`Close`)})})]}):a(`div`,{className:`space-y-3`,children:[l.isError&&d(M,{message:l.error instanceof Error?l.error.message:String(l.error)}),d(xe,{kind:e.kind,addonId:e.addonId,brokerId:e.id,initialValues:u,onSubmit:t=>{l.mutate({id:e.id,settings:t,addonId:e.addonId})},onCancel:t,submitLabel:l.isPending?i(`brokers.brokerManager.saving`,`Saving…`):i(`common.save`,`Save`),disabled:l.isPending})]})})}function ze({broker:e,interactiveConnectPath:t,interactiveDisconnectPath:n,onEdit:i}){let{t:o}=G(),s=c(),l=se(),[u,f]=r(null),m=de({onSuccess:e=>f(e.ok?{ok:!0}:{ok:!1,error:e.error}),onError:e=>f({ok:!1,error:e instanceof Error?e.message:String(e)})}),g=L({onSuccess:()=>{s.invalidateQueries({queryKey:[[`broker`,`list`]]})}}),v=async()=>{await l({title:o(`brokers.brokerManager.deleteBroker`,`Delete broker`),message:o(`brokers.brokerManager.deleteBrokerIntegrationsThatDepend`,`Delete broker "{{name}}"? Integrations that depend on it will stop working.`,{name:e.name}),confirmLabel:o(`common.delete`,`Delete`),variant:`danger`})&&g.mutate({id:e.id,addonId:e.addonId})},y=t!==void 0&&t.length>0&&e.status!==`connected`,ee=n!==void 0&&n.length>0&&e.status===`connected`;return a(`tr`,{className:`border-b border-border last:border-0`,children:[d(`td`,{className:`px-3 py-2 text-xs text-foreground font-medium`,children:e.name}),d(`td`,{className:`px-3 py-2 text-xs text-foreground-subtle`,children:je(e.kind)}),a(`td`,{className:`px-3 py-2`,children:[d(Pe,{status:e.status}),u&&d(`span`,{className:`ml-2 text-[10px] ${u.ok?`text-success`:`text-danger`}`,children:u.ok?`OK`:u.error??o(`common.failedWord`)})]}),d(`td`,{className:`px-3 py-2`,children:a(`div`,{className:`flex items-center justify-end gap-1.5`,children:[y&&a(k,{variant:`primary`,size:`sm`,onClick:()=>{ke(t,e.id,()=>{s.invalidateQueries({queryKey:[[`broker`,`list`]]})})},title:o(`brokers.brokerManager.signInOpensAPopup`,`Sign in — opens a popup that closes when done`),children:[d(S,{className:`h-3 w-3`}),` `,o(`brokers.brokerManager.signIn`)]}),ee&&a(k,{variant:`outline`,size:`sm`,onClick:()=>{ke(n,e.id,()=>{s.invalidateQueries({queryKey:[[`broker`,`list`]]})})},title:o(`brokers.brokerManager.signOutClearsTheLinked`,`Sign out — clears the linked Google account on this broker`),children:[d(x,{className:`h-3 w-3`}),` `,o(`brokers.brokerManager.signOut`)]}),a(k,{variant:`outline`,size:`sm`,onClick:()=>m.mutate({id:e.id,addonId:e.addonId}),disabled:m.isPending,title:o(`brokers.brokerManager.testConnection`,`Test connection`),children:[m.isPending?d(_,{className:`h-3 w-3 animate-spin`}):d(b,{className:`h-3 w-3`}),o(`brokers.brokerManager.test`,`Test`)]}),a(k,{variant:`outline`,size:`sm`,onClick:()=>i(e),title:o(`common.edit`,`Edit`),children:[d(h,{className:`h-3 w-3`}),` `,o(`common.edit`)]}),a(k,{variant:`outline`,size:`sm`,className:`border-danger/40 text-danger hover:bg-danger/10`,onClick:()=>{v()},disabled:g.isPending,title:o(`common.delete`,`Delete`),children:[g.isPending?d(_,{className:`h-3 w-3 animate-spin`}):d(p,{className:`h-3 w-3`}),o(`common.delete`,`Delete`)]})]})})]})}function Be({addonId:e}={}){let{t}=G(),i=ue({}),o=B(),s=n(()=>Fe(i.data).filter(t=>e===void 0||t.addonId===e),[i.data,e]),[c,l]=r(!1),[u,f]=r(null),p=n(()=>{let t=new Map;for(let n of Me(o.data))if(!(e!==void 0&&n.addonId!==e))for(let e of n.kinds){let r=typeof e.interactiveConnectPath==`string`&&e.interactiveConnectPath.length>0?e.interactiveConnectPath:void 0,i=typeof e.interactiveDisconnectPath==`string`&&e.interactiveDisconnectPath.length>0?e.interactiveDisconnectPath:void 0;t.set(`${n.addonId}::${e.kind}`,{addonId:n.addonId,kind:e.kind,label:e.label,...r===void 0?{}:{interactiveConnectPath:r},...i===void 0?{}:{interactiveDisconnectPath:i}})}for(let e of s)[...t.values()].some(t=>t.kind===e.kind)||t.set(`::${e.kind}`,{kind:e.kind,label:je(e.kind)});return[...t.values()]},[s,o.data,e]),h=n(()=>{let e=new Map;for(let t of p)e.has(t.kind)||e.set(t.kind,{...t.interactiveConnectPath===void 0?{}:{connect:t.interactiveConnectPath},...t.interactiveDisconnectPath===void 0?{}:{disconnect:t.interactiveDisconnectPath}});return e},[p]);return a(`div`,{className:`space-y-3`,children:[d(`div`,{className:`flex items-center justify-end`,children:a(k,{variant:`primary`,size:`sm`,onClick:()=>l(!0),disabled:p.length===0,title:p.length===0?t(`brokers.brokerManager.noBrokerProvidersAvailable`,`No broker providers available`):void 0,children:[d(m,{className:`h-3.5 w-3.5`}),` `,t(`brokers.brokerManager.addBroker`)]})}),d(`div`,{className:`rounded-lg border border-border bg-surface overflow-x-auto`,children:a(`table`,{className:`w-full min-w-[36rem] border-collapse`,children:[d(`thead`,{children:a(`tr`,{className:`border-b border-border bg-background/50`,children:[d(`th`,{className:`px-3 py-2 text-left text-[10px] font-semibold uppercase tracking-wider text-foreground-subtle`,children:t(`brokers.brokerManager.name`,`Name`)}),d(`th`,{className:`px-3 py-2 text-left text-[10px] font-semibold uppercase tracking-wider text-foreground-subtle`,children:t(`brokers.brokerManager.kind`,`Kind`)}),d(`th`,{className:`px-3 py-2 text-left text-[10px] font-semibold uppercase tracking-wider text-foreground-subtle`,children:t(`brokers.brokerManager.status`,`Status`)}),d(`th`,{className:`px-3 py-2 text-right text-[10px] font-semibold uppercase tracking-wider text-foreground-subtle`,children:t(`brokers.brokerManager.actions`,`Actions`)})]})}),a(`tbody`,{children:[i.isLoading&&d(`tr`,{children:a(`td`,{colSpan:4,className:`px-3 py-6 text-center text-xs text-foreground-subtle`,children:[d(_,{className:`inline h-4 w-4 animate-spin`}),` `,t(`brokers.brokerManager.loadingBrokers`)]})}),i.isError&&d(`tr`,{children:a(`td`,{colSpan:4,className:`px-3 py-4 text-center text-xs text-danger`,children:[t(`brokers.brokerManager.failedToLoadBrokers`,`Failed to load brokers:`),` `,i.error instanceof Error?i.error.message:t(`brokers.brokerManager.unknownError`,`Unknown error`)]})}),!i.isLoading&&!i.isError&&s.length===0&&d(`tr`,{children:d(`td`,{colSpan:4,className:`px-3 py-6 text-center text-xs text-foreground-subtle`,children:t(`brokers.brokerManager.noBrokersRegisteredYetAdd`,`No brokers registered yet. Add one to publish device events for downstream automations.`)})}),s.map(e=>{let t=h.get(e.kind);return d(ze,{broker:e,...t?.connect===void 0?{}:{interactiveConnectPath:t.connect},...t?.disconnect===void 0?{}:{interactiveDisconnectPath:t.disconnect},onEdit:f},e.id)})]})]})}),c&&d(Le,{kinds:p,onClose:()=>l(!1),onDone:()=>l(!1)}),u&&d(Re,{broker:u,onClose:()=>f(null),onDone:()=>f(null)})]})}function Ve(e){if(typeof e==`string`)return e;if(typeof e==`object`&&e){let t=e.name;if(typeof t==`string`)return t}return null}function He(e){let t=e,n=t?.manifest;if(n?.id===void 0)return null;let r=(n.capabilities??[]).map(Ve).filter(e=>e!==null);return{addonId:n.id,displayName:n.packageDisplayName??n.name??n.id,capNames:r,processState:t?.process?.state??null}}function Ue(e,t){return Object.entries(e).filter(([,e])=>e===t).map(([e])=>e)}function We(e,t){return t.find(t=>e.capNames.includes(t))??null}function Ge(e){switch(e){case`running`:return{state:`ok`,label:W.t(`helpers.connectivityModel.running`)};case`crashed`:case`failed`:return{state:`error`,label:e};case`stopped`:case`disabled`:return{state:`off`,label:W.t(`helpers.connectivityModel.stopped`)};default:return{state:`unknown`,label:e??W.t(`common.unknownWord`)}}}e();var Ke=[`wasteCollections`,`listSources`],qe=[`wasteCollections`,`listCountries`];function Je(e){return e instanceof Error?e.message:String(e)}function Ye(e){return typeof e!=`object`||!e?!1:Array.isArray(Reflect.get(e,`sections`))}function Xe(e){if(!Array.isArray(e))return[];let t=[];for(let n of e){if(typeof n!=`object`||!n)continue;let e=Reflect.get(n,`id`),r=Reflect.get(n,`label`),i=Reflect.get(n,`module`);if(typeof e!=`string`||typeof r!=`string`||typeof i!=`string`)continue;let a=Reflect.get(n,`argsJson`),o=Reflect.get(n,`enabled`),s=Reflect.get(n,`formValues`),c=Reflect.get(n,`serviceId`),l=Reflect.get(n,`countryId`);t.push({id:e,label:r,module:i,argsJson:typeof a==`string`?a:`{}`,enabled:typeof o==`boolean`?o:!0,formValues:typeof s==`object`&&s&&!Array.isArray(s)?s:void 0,serviceId:typeof c==`string`?c:void 0,countryId:typeof l==`string`?l:void 0})}return t}function Ze(e){return Array.isArray(e)?e.flatMap(e=>{if(typeof e!=`object`||!e)return[];let t=Reflect.get(e,`id`),n=Reflect.get(e,`label`);return typeof t!=`string`||typeof n!=`string`?[]:[{id:t,label:n}]}):[]}function Qe(e){return Array.isArray(e)?e.flatMap(e=>{if(typeof e!=`object`||!e)return[];let t=Reflect.get(e,`id`),n=Reflect.get(e,`label`),r=Reflect.get(e,`module`);if(typeof t!=`string`||typeof n!=`string`||typeof r!=`string`)return[];let i=Reflect.get(e,`title`);return[{id:t,label:n,title:typeof i==`string`&&i.length>0?i:n,module:r}]}):[]}function $e(e,t,n){return{sections:[{id:`picker`,title:W.t(`system.wasteSettingsSources.countryService`,`Country & service`),columns:2,fields:[{type:`select`,key:`countryId`,label:W.t(`system.wasteSettingsSources.country`,`Country`),options:[{value:``,label:W.t(`system.wasteSettingsSources.selectCountry`,`Select country…`)},...e.map(e=>({value:e.id,label:e.label}))]},{type:`select`,key:`serviceId`,label:W.t(`system.wasteSettingsSources.service`,`Service`),options:[{value:``,label:n===``?W.t(`system.wasteSettingsSources.pickACountryFirst`,`Pick a country first`):W.t(`system.wasteSettingsSources.selectService`,`Select service…`)},...t.map(e=>({value:e.id,label:e.label}))]}]}]}}function et({addonId:e,capName:f}){let{t:h}=G(),g=ee(),_=c(),v=se(),y=ae({editKey:`wasteEdit`,newKey:`wasteNew`}),[b,te]=r(!1),[ne,x]=r(null),[S,C]=r({countryId:``,serviceId:``}),[w,T]=r({label:h(`system.wasteSettingsSources.newSource`,`New source`),enabled:!0}),E=l(null),D=typeof S.countryId==`string`?S.countryId:``,O=typeof S.serviceId==`string`?S.serviceId:``,A=i((t,n)=>g.trpcClient.addons.custom.mutate({addonId:e,action:t,input:n}),[e,g]),j=o({queryKey:[...Ke,e],queryFn:async()=>Xe(await A(`listSources`,{}))}),ie=o({queryKey:[...qe,e],queryFn:async()=>Ze(await A(`listCountries`,{}))}),M=o({queryKey:[`wasteCollections`,`listServices`,e,D],enabled:D!==``,queryFn:async()=>Qe(await A(`listServices`,{countryId:D}))}),N=o({queryKey:[`wasteCollections`,`serviceFormSchema`,e,O],enabled:O!==``,queryFn:async()=>A(`serviceFormSchema`,{serviceId:O})}),P=j.data??[],F=ie.data??[],I=M.data??[],L=Ye(N.data)?N.data:void 0,le=n(()=>$e(F,D===``?[]:I,D),[F,I,D]),z=y.state,B=z.mode===`edit`?P.find(e=>e.id===z.id)??null:null;t(()=>{if(y.state.mode===`edit`&&B!==null){let e=`edit:${B.id}`;if(E.current===e)return;E.current=e,x(null),C({countryId:B.countryId??``,serviceId:B.serviceId??``}),T(B.formValues===void 0?{label:B.label,enabled:B.enabled}:{...B.formValues});return}if(y.state.mode===`new`){if(E.current===`new`)return;E.current=`new`,x(null),C({countryId:``,serviceId:``}),T({label:h(`system.wasteSettingsSources.newSource`,`New source`),enabled:!0})}},[B,y.state]),t(()=>{if(y.state.mode!==`new`||O===``)return;let e=I.find(e=>e.id===O);e&&T(t=>{let n=t.label;return typeof n==`string`&&n!==``&&n!==`New source`?t:{...t,label:e.title}})},[y.state.mode,O,I]);let ue=i(e=>{C(t=>{let n=typeof e.countryId==`string`?e.countryId:``;return n===(typeof t.countryId==`string`?t.countryId:``)?e:{countryId:n,serviceId:``}})},[]),V=i(async()=>{await _.invalidateQueries({queryKey:Ke})},[_]),H=u({mutationFn:async e=>A(`deleteSource`,{id:e}),onSuccess:async()=>V()}),U=i(async e=>{await v({title:h(`system.wasteSettingsSources.deleteWasteSource`,`Delete waste source?`),message:h(`system.wasteSettingsSources.removeItsCalendarUnderSystem`,`Remove “{{label}}” ({{id}}). Its calendar under System → Calendars is dropped.`,{label:e.label,id:e.id}),confirmLabel:h(`common.delete`,`Delete`),cancelLabel:h(`common.cancel`,`Cancel`),variant:`danger`})&&(await H.mutateAsync(e.id),y.state.mode===`edit`&&y.state.id===e.id&&(y.close(),E.current=null))},[v,H,y,h]),de=i(async()=>{let e=w.label,t=typeof e==`string`&&e.trim()!==``?e.trim():``;if(t===``){x(`Label is required.`);return}if(O===``){x(`Pick a country and a service.`);return}let n=y.state.mode===`new`,r=B?.id;if(!n&&(r===void 0||r===``)){x(`That source is no longer available.`);return}let i=w.enabled,a={...w};delete a.label,delete a.enabled,te(!0),x(null);try{n?await A(`createSource`,{label:t,serviceId:O,args:a,enabled:typeof i==`boolean`?i:!0}):r!==void 0&&await A(`updateSource`,{id:r,label:t,serviceId:O,args:a,enabled:typeof i==`boolean`?i:!0}),await V(),y.close(),E.current=null}catch(e){x(Je(e))}finally{te(!1)}},[A,B,y,w,V,O]),W=n(()=>[{key:`label`,header:h(`system.wasteSettingsSources.label`,`Label`),sortValue:e=>e.label,render:e=>d(`span`,{className:`text-sm text-foreground`,children:e.label})},{key:`module`,header:h(`system.wasteSettingsSources.module`,`Module`),sortValue:e=>e.module,render:e=>d(`span`,{className:`font-mono text-xs text-foreground-muted`,children:e.module})},{key:`enabled`,header:h(`system.wasteSettingsSources.enabled`,`Enabled`),sortValue:e=>+!!e.enabled,render:e=>d(R,{variant:e.enabled?`success`:`default`,children:e.enabled?h(`system.wasteSettingsSources.on`,`On`):h(`system.wasteSettingsSources.off`,`Off`)})},{key:`actions`,header:``,notSortableReason:`actions`,render:e=>d(k,{type:`button`,size:`sm`,variant:`ghost`,"aria-label":h(`system.wasteSettingsSources.delete`,`Delete {{label}}`,{label:e.label}),"data-testid":`waste-source-delete-${e.id}`,onClick:t=>{t.stopPropagation(),U(e)},children:d(p,{className:`h-3.5 w-3.5 text-danger`})})}],[U,h]),K=y.state.mode===`new`,q=K||B!==null,me=`${O}:${K?`new`:B?.id??`closed`}`;return a(`div`,{className:`flex min-h-0 flex-col gap-4`,"data-testid":`waste-settings-sources`,children:[a(`div`,{className:`flex flex-wrap items-center justify-between gap-2`,children:[d(`p`,{className:`text-sm text-foreground-muted`,children:h(`system.wasteSettingsSources.pickACountryAndA`,`Pick a country and a service — configuration fields come from that HACS source.`)}),a(k,{type:`button`,size:`sm`,"data-testid":`waste-sources-add`,onClick:()=>y.openNew(),children:[d(m,{className:`h-3.5 w-3.5`}),h(`system.wasteSettingsSources.addSource`,`Add source`)]})]}),j.isError?d(`p`,{className:`text-sm text-danger`,children:h(`system.wasteSettingsSources.couldNotLoadSources`,`Could not load sources.`)}):null,j.isPending?d(pe,{className:`h-32 w-full`}):d(oe,{columns:W,rows:P,rowKey:e=>e.id,pageSize:25,emptyMessage:h(`system.wasteSettingsSources.noWasteSourcesYetAdd`,`No waste sources yet. Add one to register a municipal service.`),onRowClick:e=>y.openEdit(e.id),defaultSort:{columnKey:`label`,dir:`asc`}}),d(fe,{open:q,onClose:()=>{y.close(),x(null),E.current=null},title:K?h(`system.wasteSettingsSources.addWasteSource`,`Add waste source`):h(`system.wasteSettingsSources.edit`,`Edit {{value1}}`,{value1:B?.label??`source`}),icon:re,width:`xl`,testId:`waste-source-editor`,error:ne,footer:d(k,{type:`button`,size:`sm`,disabled:b||O===``,onClick:()=>void de(),children:b?h(`system.wasteSettingsSources.saving`,`Saving…`):h(`common.save`,`Save`)}),children:q?a(s,{children:[d(`div`,{"data-testid":`waste-country-service`,children:d(ce,{schema:le,values:S,onChange:ue},`picker:${D}:${I.length}`)}),O!==``&&L!==void 0?d(ce,{schema:L,values:w,onChange:T,bare:!0},me):O!==``&&N.isPending?d(`p`,{className:`text-sm text-foreground-muted`,children:h(`system.wasteSettingsSources.loadingFields`,`Loading fields…`)}):d(`p`,{className:`text-sm text-foreground-muted`,children:h(`system.wasteSettingsSources.chooseACountryAndService`,`Choose a country and service to see the required fields.`)})]}):null}),d(be,{nodeId:`hub`,addonIds:[e],level:`global`,capability:f,hideSectionChrome:!0})]})}e();var tt=1e4,nt={"device-export":`exporters`,exporters:`exporters`,email:`email`,broker:`brokers`,brokers:`brokers`,"message-brokers":`brokers`,calendar:`calendars`,calendars:`calendars`,"calendar-source":`calendars`},rt=[{sectionId:`exporters`,kind:`device-export`,labelKey:`system.connectivity.exporters`,icon:y,installLabelKey:`system.connectivity.exportersInstall`,emptyTitleKey:`system.connectivity.exportersEmptyTitle`,emptyDescriptionKey:`system.connectivity.exportersEmptyDescription`},{sectionId:`email`,kind:`email`,labelKey:`system.connectivity.email`,icon:te,installLabelKey:`system.connectivity.emailInstall`,emptyTitleKey:`system.connectivity.emailEmptyTitle`,emptyDescriptionKey:`system.connectivity.emailEmptyDescription`},{sectionId:`brokers`,kind:`broker`,labelKey:`system.connectivity.brokers`,icon:v,installLabelKey:`system.connectivity.brokersInstall`,emptyTitleKey:`system.connectivity.brokersEmptyTitle`,emptyDescriptionKey:`system.connectivity.brokersEmptyDescription`},{sectionId:`calendars`,kind:`calendar`,labelKey:`system.connectivity.calendars`,icon:ne,installLabelKey:`system.connectivity.calendarsInstall`,emptyTitleKey:`system.connectivity.calendarsEmptyTitle`,emptyDescriptionKey:`system.connectivity.calendarsEmptyDescription`}];function it(e,t,n,r){let i=Ue(w,e.kind),o=t.flatMap(t=>{let r=We(t,i);if(r===null)return[];let o=Ge(t.processState);return[{id:t.addonId,name:t.displayName,fallbackIcon:e.icon,state:o.state,stateLabel:o.label,render:()=>d(Se,{addonId:t.addonId,displayName:t.displayName,capName:r,isActive:t.processState===`running`,badges:a(s,{children:[d(ct,{processState:t.processState}),d(lt,{kind:e.kind,addonId:t.addonId})]}),lead:e.kind===`device-export`?d(D,{addonId:t.addonId}):void 0,panels:st(e.kind,t.addonId,e=>n(`/devices/${e}`)),settingsContent:t.addonId===`waste-collections`?d(et,{addonId:t.addonId,capName:r}):void 0})}]});return{id:e.sectionId,label:r(e.labelKey),entries:o,install:{capability:i[0]??e.kind,label:r(e.installLabelKey)}}}function at({descriptor:e,rows:t,isLoading:r}){let{t:i}=G(),a=me(),o=n(()=>it(e,t,a,i),[e,t,a,i]);return d(Ce,{embedded:!0,icon:e.icon,title:i(e.labelKey),subtitle:null,groups:[o],isLoading:r,emptyTitle:i(e.emptyTitleKey),emptyDescription:i(e.emptyDescriptionKey)})}function ot(){let{t:e}=G(),r=ie(void 0,{refetchInterval:tt}),[i,a]=he(),o=K(`/system/integrations`,{t:e,isAdmin:!0})??{icon:f,title:e(`admin.system.integrations.connectivity`,`Connectivity`)};t(()=>{let e=i.get(`tab`);if(e===null)return;let t=nt[e];t===void 0||t===e||a(e=>{let n=new URLSearchParams(e);return n.set(`tab`,t),n},{replace:!0})},[i,a]);let s=n(()=>(r.data??[]).map(He).filter(e=>e!==null),[r.data]),c=n(()=>rt.map(t=>({id:t.sectionId,label:e(t.labelKey),ownedParams:_e,content:d(at,{descriptor:t,rows:s,isLoading:r.isLoading})})),[r.isLoading,s,e]);return d(ye,{icon:o.icon,title:o.title,subtitle:e(`admin.system.integrations.externalSystemsThisHubTalks`,`External systems this hub talks to — exporters, email, brokers and calendar sources.`),defaultSection:`exporters`,sectionsLabel:`Connectivity sections`,sections:c})}function st(e,t,n){return e===`device-export`?[{id:`devices`,title:W.t(`admin.system.integrations.devices`,`Devices`),icon:C,placement:`end`,content:d(P,{addonId:t,onOpenDevice:n,showSetup:!1})}]:e===`broker`?[{id:`connections`,title:W.t(`admin.system.integrations.connections`,`Connections`),icon:v,content:d(Be,{addonId:t})}]:[]}function ct({processState:e}){let{state:t,label:n}=Ge(e);return d(R,{variant:t===`ok`?`success`:t===`error`?`danger`:`default`,className:`${J} capitalize`,children:n})}function lt({kind:e,addonId:t}){return e===`broker`?d(ut,{addonId:t}):e===`device-export`?d(dt,{addonId:t}):null}function ut({addonId:e}){let{t}=G(),{data:n}=H({addonId:e},{refetchInterval:tt,retry:!1}),r=T.safeParse(n);if(!r.success)return null;let{brokerCount:i,connectedCount:a}=r.data;return d(R,{variant:`info`,className:J,children:a>0?t(`system.connectivity.connectionsConnected`,{count:i,connected:a}):t(`system.connectivity.connections`,{count:i})})}function dt({addonId:e}){let{t}=G(),{data:n}=I({addonId:e},{refetchInterval:tt,retry:!1}),r=E.safeParse(n);if(!r.success)return null;let{linkState:i,exposedDeviceCount:a}=r.data;return d(R,{variant:i===`linked`?`success`:i===`error`?`danger`:`default`,className:J,children:t(`admin.system.integrations.exposed`,`{{linkState}} · {{exposedDeviceCount}} exposed`,{linkState:i,exposedDeviceCount:a})})}export{ot as IntegrationsPage};