@camstack/addon-admin-ui 1.2.451 → 1.2.452

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 (123) hide show
  1. package/dist/assets/{AddonAssetIcon-tSDKYL0K.js → AddonAssetIcon-oAD7HtOX.js} +1 -1
  2. package/dist/assets/Addons-CrYWbUTm.js +4 -0
  3. package/dist/assets/{AdminPage-Bc7EcIQy.js → AdminPage-zTp0nTe3.js} +1 -1
  4. package/dist/assets/{AdminSectionedPage-DorUtSBh.js → AdminSectionedPage-BJn9Df5z.js} +1 -1
  5. package/dist/assets/{AiProfiles-BdYyzFcG.js → AiProfiles-DxIrm9et.js} +2 -2
  6. package/dist/assets/{BrokerForm-Deefp6zP.js → BrokerForm-ZRNTZhIC.js} +1 -1
  7. package/dist/assets/{Build-D_QB0Yce.js → Build-B9eaG5VJ.js} +4 -4
  8. package/dist/assets/{Calendars-BTBqj3kw.js → Calendars-CN2Uhrr5.js} +1 -1
  9. package/dist/assets/{Cluster-qRWUra5C.js → Cluster-BVH4REKi.js} +1 -1
  10. package/dist/assets/{ClusterStepModel-CYnyPKcf.js → ClusterStepModel-yDdJgqvR.js} +1 -1
  11. package/dist/assets/{CompositionEditor-sCKYBpl2.js → CompositionEditor-rMOoN5F5.js} +1 -1
  12. package/dist/assets/{CompositionEditorPage-DzUj_31l.js → CompositionEditorPage-BcSVmFyA.js} +1 -1
  13. package/dist/assets/Data-Dnv7ZfVU.js +2 -0
  14. package/dist/assets/{DeviceDetail-BLnowNRs.js → DeviceDetail-BS5RiGba.js} +2 -2
  15. package/dist/assets/{DeviceDoActionFields-Bffr6IHD.js → DeviceDoActionFields-HRtr_KQg.js} +1 -1
  16. package/dist/assets/{Devices-IJKvm0BP.js → Devices-Bk161POt.js} +1 -1
  17. package/dist/assets/{EmbedPlayerPage-B1o6udpz.js → EmbedPlayerPage-BgVIezZy.js} +1 -1
  18. package/dist/assets/History-FSdRNye9.js +1 -0
  19. package/dist/assets/Identity-C5B6BRyt.js +1 -0
  20. package/dist/assets/IntegrationDetail-SiZK5uRr.js +1 -0
  21. package/dist/assets/{IntegrationHub-Bf4b3i_q.js → IntegrationHub-DHPnaPMA.js} +1 -1
  22. package/dist/assets/Integrations-BkA1KEAY.js +1 -0
  23. package/dist/assets/{Integrations-nFhMQF34.js → Integrations-TxhwCTGP.js} +1 -1
  24. package/dist/assets/{Library-A6WfMhER.js → Library-B9pCHVnZ.js} +1 -1
  25. package/dist/assets/Locations-DW1r5qeE.js +3 -0
  26. package/dist/assets/{Logs-C9J8k6c9.js → Logs-C2BtNaAN.js} +1 -1
  27. package/dist/assets/{MaskShapeCanvas-v8FP28QJ.js → MaskShapeCanvas-CmVqJpmm.js} +1 -1
  28. package/dist/assets/{MotionZonesSettings-Bqg-ZAEs.js → MotionZonesSettings-Cc9tuHmU.js} +1 -1
  29. package/dist/assets/{MyAccess-uX46IK3F.js → MyAccess-C66AWIxq.js} +1 -1
  30. package/dist/assets/{Network-BR-HvAds.js → Network-C9aktmZ0.js} +1 -1
  31. package/dist/assets/{NodeAddonsSettingsPanel-BNTQVCjk.js → NodeAddonsSettingsPanel-BoUIpXuk.js} +1 -1
  32. package/dist/assets/{Notifications-BtCeEFJT.js → Notifications-WCuwxXPI.js} +1 -1
  33. package/dist/assets/{PrivacyMaskSettings-DqyBAWCW.js → PrivacyMaskSettings-CbTGMxxg.js} +1 -1
  34. package/dist/assets/Recordings-VqcEhUuW.js +1 -0
  35. package/dist/assets/{ScanNetworkModal-DzMITtJ8.js → ScanNetworkModal-DjUqTV95.js} +1 -1
  36. package/dist/assets/{SceneMonitorEditor-365WT-vj.js → SceneMonitorEditor-DgEzjukw.js} +1 -1
  37. package/dist/assets/SessionsList-D20NZop0.js +2 -0
  38. package/dist/assets/{Showroom-Ch7an15I.js → Showroom-By5Alv0c.js} +1 -1
  39. package/dist/assets/{System-XW10dOJr.js → System-gRnT7E7Q.js} +1 -1
  40. package/dist/assets/{Terminal-CmDRhqrR.js → Terminal-BOEgbYdP.js} +1 -1
  41. package/dist/assets/{Viewer-2oJvYupj.js → Viewer-l-gmBOag.js} +1 -1
  42. package/dist/assets/{_virtual_mf-localSharedImportMap___mfe_internal__admin_ui_host-BvyGb9Bo.js → _virtual_mf-localSharedImportMap___mfe_internal__admin_ui_host-B0S-_aNb.js} +1 -1
  43. package/dist/assets/{addon-icons-context-Nt5kiIqp.js → addon-icons-context-By6Bm4dX.js} +1 -1
  44. package/dist/assets/{archive-BpVlUMGc.js → archive-CvBthkSB.js} +1 -1
  45. package/dist/assets/{authed-media-CRjjClqw.js → authed-media-o-FqDLbM.js} +1 -1
  46. package/dist/assets/{bell-off-DFWiqigj.js → bell-off-CCvUR5bf.js} +1 -1
  47. package/dist/assets/{board-model-CbfKyLZU.js → board-model-5X7MvWDr.js} +1 -1
  48. package/dist/assets/{boxes-DEZFxpEo.js → boxes-DavjA3V9.js} +1 -1
  49. package/dist/assets/circle-slash-DRfwudv-.js +1 -0
  50. package/dist/assets/client-BXQKDTPp.js +358 -0
  51. package/dist/assets/{cloud-upload-DJX2vjB1.js → cloud-upload-C578qLMo.js} +1 -1
  52. package/dist/assets/crop-DQvSi9nJ.js +1 -0
  53. package/dist/assets/{device-integration-icon-eQMV6gf2.js → device-integration-icon-DTjMxRNo.js} +1 -1
  54. package/dist/assets/device-picker-model-BSSsMgr9.js +1 -0
  55. package/dist/assets/{dist-C44xoxcH.js → dist-DSzxTTFP.js} +1 -1
  56. package/dist/assets/dist-OkV6Go5s.js +358 -0
  57. package/dist/assets/{eraser-BJtJIM79.js → eraser-Bl0TnhZD.js} +1 -1
  58. package/dist/assets/{hard-drive-download-BgY0ewC_.js → hard-drive-download-UeIlWgu6.js} +1 -1
  59. package/dist/assets/{hostInit-BxKKf6O5.js → hostInit-CLS9MdiJ.js} +1 -1
  60. package/dist/assets/i18n-DY7WWkr4.js +1 -0
  61. package/dist/assets/{icons-B7PsYODJ.js → icons-BhEG_9gQ.js} +1 -1
  62. package/dist/assets/{index-B-H1mfMz.js → index-3cHe507L.js} +3 -3
  63. package/dist/assets/{key-Rj556V_5.js → key-B984Bc2m.js} +1 -1
  64. package/dist/assets/{key-round-JtuAp3H5.js → key-round-CLUCf0cS.js} +1 -1
  65. package/dist/assets/{layers-arFC7gbL.js → layers-ClpK9rfN.js} +1 -1
  66. package/dist/assets/{linked-devices-model-Bwz1L9wp.js → linked-devices-model-CbMqjEVT.js} +1 -1
  67. package/dist/assets/{list-ordered-Dam1ZKMc.js → list-ordered-CNNBtODg.js} +1 -1
  68. package/dist/assets/{location-owned-usage-DwnxDZWp.js → location-owned-usage-BOBNcPTd.js} +1 -1
  69. package/dist/assets/{log-in-lVU3BPjL.js → log-in-B0mVo25m.js} +1 -1
  70. package/dist/assets/{memory-stick-Cttq5WM5.js → memory-stick-C2MHfvSi.js} +1 -1
  71. package/dist/assets/{message-square-plus-CaNw_hMf.js → message-square-plus-B8ozbbSm.js} +1 -1
  72. package/dist/assets/{mf-entry-bootstrap-0-ab6954b6.js → mf-entry-bootstrap-0-4e5a0dd7.js} +2 -2
  73. package/dist/assets/{mic-off-it4ki4Jh.js → mic-off-BDRWnndC.js} +1 -1
  74. package/dist/assets/{monitor-off-oHRvN7aD.js → monitor-off-AiaGZyF4.js} +1 -1
  75. package/dist/assets/{monitor-smartphone-CjCMg9jw.js → monitor-smartphone-LZNwDWQS.js} +1 -1
  76. package/dist/assets/mount-BSSsMgr9.js +1 -0
  77. package/dist/assets/notification-schedule-field-DVnPcnI2.js +1 -0
  78. package/dist/assets/{player-overlays-BQ-CPD3k.js → player-overlays-BqM7cQxx.js} +1 -1
  79. package/dist/assets/{recycle-DLgVUrk1.js → recycle-CzMG7f6v.js} +1 -1
  80. package/dist/assets/remoteEntry-DIfLCm9V.js +1 -0
  81. package/dist/assets/{scan-eye-D3WSpR2M.js → scan-eye-DV8G0O69.js} +1 -1
  82. package/dist/assets/{scissors-CfXjajAo.js → scissors-CXyYzi3_.js} +1 -1
  83. package/dist/assets/{search-x-DrZuvHV8.js → search-x-D8hftA1U.js} +1 -1
  84. package/dist/assets/{send-BGZ680If.js → send-kdp5RlxT.js} +1 -1
  85. package/dist/assets/{settings-2-WgIC2cEC.js → settings-2-KSeFExfQ.js} +1 -1
  86. package/dist/assets/{speaker-DIrTXPXW.js → speaker-UjYWgc-l.js} +1 -1
  87. package/dist/assets/src-BGCK3zCb.js +67 -0
  88. package/dist/assets/{timer-reset-Ba4-n5gG.js → timer-reset-BFiLVvIL.js} +1 -1
  89. package/dist/assets/{ungroup-DjxNnRiT.js → ungroup-ZMQs0G6z.js} +1 -1
  90. package/dist/assets/{unlink-Cy4eOOGb.js → unlink-pzv8jDBR.js} +1 -1
  91. package/dist/assets/{usb-Crnw8Rqe.js → usb-DwKyPwkP.js} +1 -1
  92. package/dist/assets/{use-scenes-feed-CqavtElt.js → use-scenes-feed-DBhnjGJG.js} +1 -1
  93. package/dist/assets/{use-stationary-objects-CuD-UCH8.js → use-stationary-objects-D2Hh0fkb.js} +1 -1
  94. package/dist/assets/useEventInvalidation-BSSsMgr9.js +1 -0
  95. package/dist/assets/{useNodeUrlSelection-ChFCBb4B.js → useNodeUrlSelection-Bk5QjgEc.js} +1 -1
  96. package/dist/assets/user-round-pGZtSaR6.js +1 -0
  97. package/dist/assets/{user-x-BDmcZv0z.js → user-x-B3X1pnMb.js} +1 -1
  98. package/dist/assets/{video-JjHo3xW3.js → video-B8eQiZoX.js} +1 -1
  99. package/dist/assets/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__admin_ui_host__remoteEntry-_hash_-3LGiNBfi.js → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__admin_ui_host__remoteEntry-_hash_-DMzkBEt2.js} +2 -2
  100. package/dist/index.html +10 -10
  101. package/dist/server/addon.js +115 -62
  102. package/package.json +1 -1
  103. package/dist/assets/Addons-ofsCoJ4Y.js +0 -4
  104. package/dist/assets/Data-BJuJfR0P.js +0 -2
  105. package/dist/assets/History-su2kJ1JJ.js +0 -1
  106. package/dist/assets/Identity-8srCiX2b.js +0 -1
  107. package/dist/assets/IntegrationDetail-CHtQ-0tZ.js +0 -1
  108. package/dist/assets/Integrations-Cnq7Q1qn.js +0 -1
  109. package/dist/assets/Locations-Dl_YxXoD.js +0 -3
  110. package/dist/assets/Recordings-arOpg17X.js +0 -1
  111. package/dist/assets/SessionsList-CAYqZ393.js +0 -2
  112. package/dist/assets/circle-slash-BvDvmSoU.js +0 -1
  113. package/dist/assets/client-C7mYZlqO.js +0 -358
  114. package/dist/assets/crop-BLfw1NQy.js +0 -1
  115. package/dist/assets/device-picker-model-B7n7uzAw.js +0 -1
  116. package/dist/assets/dist-4Z3hLAqT.js +0 -358
  117. package/dist/assets/i18n-CiEPJn04.js +0 -1
  118. package/dist/assets/mount-B7n7uzAw.js +0 -1
  119. package/dist/assets/notification-schedule-field-DkO0-1Tm.js +0 -1
  120. package/dist/assets/remoteEntry-5tiapUFy.js +0 -1
  121. package/dist/assets/src-DP8JO4HZ.js +0 -67
  122. package/dist/assets/useEventInvalidation-B7n7uzAw.js +0 -1
  123. package/dist/assets/user-round-7xIjUD30.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{Fn as f,It as p,On as m,ht as h,kn as g,ln as _,nr as v,or as y,ot as b,xn as x}from"./player-overlays-BQ-CPD3k.js";import{Dr as S,Xr as ee,Yt as C}from"./client-C7mYZlqO.js";import{h as w,s as T}from"./video-JjHo3xW3.js";import{t as E}from"./log-in-lVU3BPjL.js";import{t as D}from"./monitor-smartphone-CjCMg9jw.js";import{t as te}from"./recycle-DLgVUrk1.js";import{$i as O,$n as k,Ar as ne,Et as A,Gi as j,Ji as M,Ki as re,Qi as ie,Qn as N,Rr as P,Tt as F,Xi as I,Yi as L,Zi as ae,cl as oe,dt as se,er as R,fr as z,gn as ce,hr as B,ir as le,lt as ue,mr as de,oi as V,ot as H,qn as fe,rr as U,tr as pe,xa as me}from"./src-DP8JO4HZ.js";import{t as W}from"./i18n-CiEPJn04.js";import{t as G}from"./useTranslation-D3Is_4B6.js";import{T as K,et as he,i as ge,nt as _e,y as q,z as ve}from"./index-B-H1mfMz.js";import{t as ye}from"./AdminSectionedPage-DorUtSBh.js";import{t as be}from"./NodeAddonsSettingsPanel-BNTQVCjk.js";import{t as xe}from"./BrokerForm-Deefp6zP.js";import{n as Se,r as J,t as Ce}from"./IntegrationHub-Bf4b3i_q.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}}}var Ee={"home-assistant":`Home Assistant`,mqtt:`MQTT`};function De(e){return Ee[e]??e}function Oe(e){return Array.isArray(e)?e.filter(e=>typeof e==`object`&&!!e&&typeof e.addonId==`string`&&Array.isArray(e.kinds)):[]}var ke={connected:`success`,connecting:`warning`,disconnected:`default`,"auth-failed":`danger`,unreachable:`danger`,error:`danger`};function Ae({status:e}){return d(P,{variant:ke[e],className:`text-[10px]`,children:e})}function je(e){return Array.isArray(e)?e.filter(e=>typeof e==`object`&&!!e&&typeof e.id==`string`):[]}function Me({title:e,subtitle:t,onClose:n,children:r}){return d(N,{open:!0,onOpenChange:e=>!e&&n(),children:a(R,{width:`md`,placement:`sheet-on-mobile`,scroll:`body`,children:[a(U,{children:[d(le,{children:e}),t&&d(pe,{children:t})]}),d(k,{className:`space-y-3 pr-1`,children:r})]})})}function Ne({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=j({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&&q(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(Me,{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(ve,{schema:l,values:u,onChange:f}),p!==null&&d(z,{message:p}),y.isError&&d(z,{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 Pe({broker:e,onClose:t,onDone:r}){let{t:i}=G(),o=c(),s=re({id:e.id,addonId:e.addonId}),l=ie({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(Me,{title:i(`brokers.brokerManager.edit`,`Edit {{name}}`,{name:e.name}),subtitle:`${De(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(y,{className:`h-3.5 w-3.5 animate-spin`}),` `,i(`brokers.brokerManager.loadingSettings`)]}):s.isError?a(`div`,{className:`space-y-3`,children:[d(z,{message:i(`brokers.brokerManager.loadSettingsFailed`,{message:s.error instanceof Error?s.error.message:i(`common.unknownError`)})}),d(`div`,{className:`flex justify-end`,children:d(B,{variant:`outline`,size:`sm`,onClick:t,children:i(`common.close`,`Close`)})})]}):a(`div`,{className:`space-y-3`,children:[l.isError&&d(z,{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 Fe({broker:e,interactiveConnectPath:t,interactiveDisconnectPath:n,onEdit:i}){let{t:o}=G(),s=c(),l=ne(),[u,m]=r(null),g=O({onSuccess:e=>m(e.ok?{ok:!0}:{ok:!1,error:e.error}),onError:e=>m({ok:!1,error:e instanceof Error?e.message:String(e)})}),_=ae({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`})&&_.mutate({id:e.id,addonId:e.addonId})},b=t!==void 0&&t.length>0&&e.status!==`connected`,x=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:De(e.kind)}),a(`td`,{className:`px-3 py-2`,children:[d(Ae,{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:[b&&a(B,{variant:`primary`,size:`sm`,onClick:()=>{q(t,e.id,()=>{s.invalidateQueries({queryKey:[[`broker`,`list`]]})})},title:o(`brokers.brokerManager.signInOpensAPopup`,`Sign in — opens a popup that closes when done`),children:[d(E,{className:`h-3 w-3`}),` `,o(`brokers.brokerManager.signIn`)]}),x&&a(B,{variant:`outline`,size:`sm`,onClick:()=>{q(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(T,{className:`h-3 w-3`}),` `,o(`brokers.brokerManager.signOut`)]}),a(B,{variant:`outline`,size:`sm`,onClick:()=>g.mutate({id:e.id,addonId:e.addonId}),disabled:g.isPending,title:o(`brokers.brokerManager.testConnection`,`Test connection`),children:[g.isPending?d(y,{className:`h-3 w-3 animate-spin`}):d(h,{className:`h-3 w-3`}),o(`brokers.brokerManager.test`,`Test`)]}),a(B,{variant:`outline`,size:`sm`,onClick:()=>i(e),title:o(`common.edit`,`Edit`),children:[d(f,{className:`h-3 w-3`}),` `,o(`common.edit`)]}),a(B,{variant:`outline`,size:`sm`,className:`border-danger/40 text-danger hover:bg-danger/10`,onClick:()=>{v()},disabled:_.isPending,title:o(`common.delete`,`Delete`),children:[_.isPending?d(y,{className:`h-3 w-3 animate-spin`}):d(p,{className:`h-3 w-3`}),o(`common.delete`,`Delete`)]})]})})]})}function Ie({addonId:e}={}){let{t}=G(),i=L({}),o=I(),s=n(()=>je(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 Oe(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:De(e.kind)});return[...t.values()]},[s,o.data,e]),m=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(B,{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(g,{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(y,{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=m.get(e.kind);return d(Fe,{broker:e,...t?.connect===void 0?{}:{interactiveConnectPath:t.connect},...t?.disconnect===void 0?{}:{interactiveDisconnectPath:t.disconnect},onEdit:f},e.id)})]})]})}),c&&d(Ne,{kinds:p,onClose:()=>l(!1),onDone:()=>l(!1)}),u&&d(Pe,{broker:u,onClose:()=>f(null),onDone:()=>f(null)})]})}e();function Le({addonId:e,fallback:t}){let n=oe({});if(n.isPending)return d(`div`,{className:`flex justify-center py-8`,children:d(y,{className:`size-6 animate-spin text-muted-foreground`})});if(n.isError)return d(z,{message:`Could not load entry kinds`});let r=n.data.kinds.find(t=>t.owner===e&&t.kind===`brokers`);return r===void 0?t:d(Re,{addonId:e,kind:r})}function Re({addonId:e,kind:t}){let{t:r}=G(),i=c(),o=L({}),l=I(),u=n(()=>{let t=new Map;for(let n of je(o.data))n.addonId===e&&t.set(n.id,n);return t},[o.data,e]),f=n(()=>{let e=new Map;for(let t of Oe(l.data))for(let n of t.kinds){let r=n.interactiveConnectPath,i=n.interactiveDisconnectPath;e.set(`${t.addonId}::${n.kind}`,{...typeof r==`string`&&r.length>0?{connect:r}:{},...typeof i==`string`&&i.length>0?{disconnect:i}:{}})}return e},[l.data]),p=()=>{i.invalidateQueries({queryKey:[[`broker`]]}),i.invalidateQueries({queryKey:[[`recordEntries`]]})};return d(H,{kind:t,extraColumns:n(()=>[{key:`status`,header:r(`brokers.brokerManager.status`,`Status`),nowrap:!0,width:`w-px`,render:e=>{let t=u.get(e.id);return t===void 0?null:d(Ae,{status:t.status})}}],[u,r]),rowActions:e=>{let t=u.get(e.id);if(t===void 0)return null;let n=f.get(`${t.addonId}::${t.kind}`);if(n===void 0)return null;let i=t.status===`connected`;return a(s,{children:[n.connect!==void 0&&!i&&a(B,{variant:`primary`,size:`sm`,"aria-label":r(`brokers.brokerManager.signIn`),onClick:()=>q(n.connect??``,t.id,p),title:r(`brokers.brokerManager.signInOpensAPopup`,`Sign in — opens a popup that closes when done`),children:[d(E,{className:`h-3 w-3`}),d(`span`,{className:`hidden sm:inline`,children:r(`brokers.brokerManager.signIn`)})]}),n.disconnect!==void 0&&i&&a(B,{variant:`outline`,size:`sm`,"aria-label":r(`brokers.brokerManager.signOut`),onClick:()=>q(n.disconnect??``,t.id,p),title:r(`brokers.brokerManager.signOutClearsTheLinked`,`Sign out — clears the linked Google account on this broker`),children:[d(T,{className:`h-3 w-3`}),d(`span`,{className:`hidden sm:inline`,children:r(`brokers.brokerManager.signOut`)})]})]})},showUpdated:!1,minWidthPx:340})}function ze(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 Be(e){let t=e,n=t?.manifest;if(n?.id===void 0)return null;let r=(n.capabilities??[]).map(ze).filter(e=>e!==null);return{addonId:n.id,displayName:n.packageDisplayName??n.name??n.id,capNames:r,processState:t?.process?.state??null}}function Ve(e,t){return Object.entries(e).filter(([,e])=>e===t).map(([e])=>e)}function He(e,t){return t.find(t=>e.capNames.includes(t))??null}function Ue(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 We=[`wasteCollections`,`listSources`],Ge=[`wasteCollections`,`listCountries`];function Ke(e){return e instanceof Error?e.message:String(e)}function qe(e){return typeof e!=`object`||!e?!1:Array.isArray(Reflect.get(e,`sections`))}function Je(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,`enabled`),o=Reflect.get(n,`formValues`),s=Reflect.get(n,`serviceId`),c=Reflect.get(n,`countryId`);t.push({id:e,label:r,module:i,enabled:typeof a==`boolean`?a:!0,formValues:typeof o==`object`&&o&&!Array.isArray(o)?o:void 0,serviceId:typeof s==`string`?s:void 0,countryId:typeof c==`string`?c:void 0})}return t}function Ye(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 Xe(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 Ze(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 Qe({addonId:e,capName:f}){let{t:m}=G(),h=b(),_=c(),v=ne(),y=ue({editKey:`wasteEdit`,newKey:`wasteNew`}),[x,S]=r(!1),[ee,C]=r(null),[w,T]=r({countryId:``,serviceId:``}),[E,D]=r({label:m(`system.wasteSettingsSources.newSource`,`New source`),enabled:!0}),O=l(null),k=typeof w.countryId==`string`?w.countryId:``,A=typeof w.serviceId==`string`?w.serviceId:``,j=i((t,n)=>h.trpcClient.addons.custom.mutate({addonId:e,action:t,input:n}),[e,h]),M=o({queryKey:[...We,e],queryFn:async()=>Je(await j(`listSources`,{}))}),re=o({queryKey:[...Ge,e],queryFn:async()=>Ye(await j(`listCountries`,{}))}),ie=o({queryKey:[`wasteCollections`,`listServices`,e,k],enabled:k!==``,queryFn:async()=>Xe(await j(`listServices`,{countryId:k}))}),N=o({queryKey:[`wasteCollections`,`serviceFormSchema`,e,A],enabled:A!==``,queryFn:async()=>j(`serviceFormSchema`,{serviceId:A})}),F=M.data??[],I=re.data??[],L=ie.data??[],ae=qe(N.data)?N.data:void 0,oe=n(()=>Ze(I,k===``?[]:L,k),[I,L,k]),R=y.state,z=R.mode===`edit`?F.find(e=>e.id===R.id)??null:null;t(()=>{if(y.state.mode===`edit`&&z!==null){let e=`edit:${z.id}`;if(O.current===e)return;O.current=e,C(null),T({countryId:z.countryId??``,serviceId:z.serviceId??``}),D(z.formValues===void 0?{label:z.label,enabled:z.enabled}:{...z.formValues});return}if(y.state.mode===`new`){if(O.current===`new`)return;O.current=`new`,C(null),T({countryId:``,serviceId:``}),D({label:m(`system.wasteSettingsSources.newSource`,`New source`),enabled:!0})}},[z,y.state]),t(()=>{if(y.state.mode!==`new`||A===``)return;let e=L.find(e=>e.id===A);e&&D(t=>{let n=t.label;return typeof n==`string`&&n!==``&&n!==`New source`?t:{...t,label:e.title}})},[y.state.mode,A,L]);let le=i(e=>{T(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:We})},[_]),H=u({mutationFn:async e=>j(`deleteSource`,{id:e}),onSuccess:async()=>V()}),U=i(async e=>{await v({title:m(`system.wasteSettingsSources.deleteWasteSource`,`Delete waste source?`),message:m(`system.wasteSettingsSources.removeItsCalendarUnderSystem`,`Remove “{{label}}” ({{id}}). Its calendar under System → Calendars is dropped.`,{label:e.label,id:e.id}),confirmLabel:m(`common.delete`,`Delete`),cancelLabel:m(`common.cancel`,`Cancel`),variant:`danger`})&&(await H.mutateAsync(e.id),y.state.mode===`edit`&&y.state.id===e.id&&(y.close(),O.current=null))},[v,H,y,m]),pe=i(async()=>{let e=E.label,t=typeof e==`string`&&e.trim()!==``?e.trim():``;if(t===``){C(`Label is required.`);return}if(A===``){C(`Pick a country and a service.`);return}let n=y.state.mode===`new`,r=z?.id;if(!n&&(r===void 0||r===``)){C(`That source is no longer available.`);return}let i=E.enabled,a={...E};delete a.label,delete a.enabled,S(!0),C(null);try{n?await j(`createSource`,{label:t,serviceId:A,args:a,enabled:typeof i==`boolean`?i:!0}):r!==void 0&&await j(`updateSource`,{id:r,label:t,serviceId:A,args:a,enabled:typeof i==`boolean`?i:!0}),await V(),y.close(),O.current=null}catch(e){C(Ke(e))}finally{S(!1)}},[j,z,y,E,V,A]),me=n(()=>[{key:`label`,header:m(`system.wasteSettingsSources.label`,`Label`),sortValue:e=>e.label,render:e=>d(`span`,{className:`text-sm text-foreground`,children:e.label})},{key:`module`,header:m(`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:m(`system.wasteSettingsSources.enabled`,`Enabled`),sortValue:e=>+!!e.enabled,render:e=>d(P,{variant:e.enabled?`success`:`default`,children:e.enabled?m(`system.wasteSettingsSources.on`,`On`):m(`system.wasteSettingsSources.off`,`Off`)})},{key:`actions`,header:``,notSortableReason:`actions`,render:e=>d(B,{type:`button`,size:`sm`,variant:`ghost`,"aria-label":m(`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,m]),W=y.state.mode===`new`,K=W||z!==null,he=`${A}:${W?`new`:z?.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:m(`system.wasteSettingsSources.pickACountryAndA`,`Pick a country and a service — configuration fields come from that HACS source.`)}),a(B,{type:`button`,size:`sm`,"data-testid":`waste-sources-add`,onClick:()=>y.openNew(),children:[d(g,{className:`h-3.5 w-3.5`}),m(`system.wasteSettingsSources.addSource`,`Add source`)]})]}),M.isError?d(`p`,{className:`text-sm text-danger`,children:m(`system.wasteSettingsSources.couldNotLoadSources`,`Could not load sources.`)}):null,M.isPending?d(de,{className:`h-32 w-full`}):d(ce,{columns:me,rows:F,rowKey:e=>e.id,pageSize:25,emptyMessage:m(`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(se,{open:K,onClose:()=>{y.close(),C(null),O.current=null},title:W?m(`system.wasteSettingsSources.addWasteSource`,`Add waste source`):m(`system.wasteSettingsSources.edit`,`Edit {{value1}}`,{value1:z?.label??`source`}),icon:te,width:`xl`,testId:`waste-source-editor`,error:ee,footer:d(B,{type:`button`,size:`sm`,disabled:x||A===``,onClick:()=>void pe(),children:x?m(`system.wasteSettingsSources.saving`,`Saving…`):m(`common.save`,`Save`)}),children:K?a(s,{children:[d(`div`,{"data-testid":`waste-country-service`,children:d(fe,{schema:oe,values:w,onChange:le},`picker:${k}:${L.length}`)}),A!==``&&ae!==void 0?d(fe,{schema:ae,values:E,onChange:D,bare:!0},he):A!==``&&N.isPending?d(`p`,{className:`text-sm text-foreground-muted`,children:m(`system.wasteSettingsSources.loadingFields`,`Loading fields…`)}):d(`p`,{className:`text-sm text-foreground-muted`,children:m(`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 $e=1e4,et={"device-export":`exporters`,exporters:`exporters`,email:`email`,broker:`brokers`,brokers:`brokers`,"message-brokers":`brokers`,calendar:`calendars`,calendars:`calendars`,"calendar-source":`calendars`},tt=[{sectionId:`exporters`,kind:`device-export`,labelKey:`system.connectivity.exporters`,icon:_,installLabelKey:`system.connectivity.exportersInstall`,emptyTitleKey:`system.connectivity.exportersEmptyTitle`,emptyDescriptionKey:`system.connectivity.exportersEmptyDescription`},{sectionId:`email`,kind:`email`,labelKey:`system.connectivity.email`,icon:v,installLabelKey:`system.connectivity.emailInstall`,emptyTitleKey:`system.connectivity.emailEmptyTitle`,emptyDescriptionKey:`system.connectivity.emailEmptyDescription`},{sectionId:`brokers`,kind:`broker`,labelKey:`system.connectivity.brokers`,icon:x,installLabelKey:`system.connectivity.brokersInstall`,emptyTitleKey:`system.connectivity.brokersEmptyTitle`,emptyDescriptionKey:`system.connectivity.brokersEmptyDescription`},{sectionId:`calendars`,kind:`calendar`,labelKey:`system.connectivity.calendars`,icon:w,installLabelKey:`system.connectivity.calendarsInstall`,emptyTitleKey:`system.connectivity.calendarsEmptyTitle`,emptyDescriptionKey:`system.connectivity.calendarsEmptyDescription`}];function nt(e,t,n,r){let i=Ve(C,e.kind),o=t.flatMap(t=>{let r=He(t,i);if(r===null)return[];let o=Ue(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(ot,{processState:t.processState}),d(st,{kind:e.kind,addonId:t.addonId})]}),lead:e.kind===`device-export`?d(A,{addonId:t.addonId}):void 0,panels:at(e.kind,t.addonId,e=>n(`/devices/${e}`)),settingsContent:t.addonId===`waste-collections`?d(Qe,{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 rt({descriptor:e,rows:t,isLoading:r}){let{t:i}=G(),a=he(),o=n(()=>nt(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 it(){let{t:e}=G(),r=V(void 0,{refetchInterval:$e}),[i,a]=_e(),o=K(`/system/integrations`,{t:e,isAdmin:!0})??{icon:m,title:e(`admin.system.integrations.connectivity`,`Connectivity`)};t(()=>{let e=i.get(`tab`);if(e===null)return;let t=et[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(Be).filter(e=>e!==null),[r.data]),c=n(()=>tt.map(t=>({id:t.sectionId,label:e(t.labelKey),ownedParams:ge,content:d(rt,{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 at(e,t,n){return e===`device-export`?[{id:`devices`,title:W.t(`admin.system.integrations.devices`,`Devices`),icon:D,placement:`end`,content:d(F,{addonId:t,onOpenDevice:n,showSetup:!1})}]:e===`broker`?[{id:`connections`,title:W.t(`admin.system.integrations.connections`,`Connections`),icon:x,content:d(Le,{addonId:t,fallback:d(Ie,{addonId:t})})}]:[]}function ot({processState:e}){let{state:t,label:n}=Ue(e);return d(P,{variant:t===`ok`?`success`:t===`error`?`danger`:`default`,className:`${J} capitalize`,children:n})}function st({kind:e,addonId:t}){return e===`broker`?d(ct,{addonId:t}):e===`device-export`?d(lt,{addonId:t}):null}function ct({addonId:e}){let{t}=G(),{data:n}=M({addonId:e},{refetchInterval:$e,retry:!1}),r=ee.safeParse(n);if(!r.success)return null;let{brokerCount:i,connectedCount:a}=r.data;return d(P,{variant:`info`,className:J,children:a>0?t(`system.connectivity.connectionsConnected`,{count:i,connected:a}):t(`system.connectivity.connections`,{count:i})})}function lt({addonId:e}){let{t}=G(),{data:n}=me({addonId:e},{refetchInterval:$e,retry:!1}),r=S.safeParse(n);if(!r.success)return null;let{linkState:i,exposedDeviceCount:a}=r.data;return d(P,{variant:i===`linked`?`success`:i===`error`?`danger`:`default`,className:J,children:t(`admin.system.integrations.exposed`,`{{linkState}} · {{exposedDeviceCount}} exposed`,{linkState:i,exposedDeviceCount:a})})}export{it 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{Fn as f,It as p,On as m,ht as h,kn as g,ln as _,nr as v,or as y,ot as b,xn as x}from"./player-overlays-BqM7cQxx.js";import{Dr as S,Xr as ee,Yt as C}from"./client-BXQKDTPp.js";import{h as w,s as T}from"./video-B8eQiZoX.js";import{t as E}from"./log-in-B0mVo25m.js";import{t as D}from"./monitor-smartphone-LZNwDWQS.js";import{t as te}from"./recycle-CzMG7f6v.js";import{$i as O,$n as k,Ar as ne,Et as A,Gi as j,Ji as M,Ki as re,Qi as ie,Qn as N,Rr as P,Tt as F,Xi as I,Yi as L,Zi as ae,cl as oe,dt as se,er as R,fr as z,gn as ce,hr as B,ir as le,lt as ue,mr as de,oi as V,ot as H,qn as fe,rr as U,tr as pe,xa as me}from"./src-BGCK3zCb.js";import{t as W}from"./i18n-DY7WWkr4.js";import{t as G}from"./useTranslation-D3Is_4B6.js";import{T as K,et as he,i as ge,nt as _e,y as q,z as ve}from"./index-3cHe507L.js";import{t as ye}from"./AdminSectionedPage-BJn9Df5z.js";import{t as be}from"./NodeAddonsSettingsPanel-BoUIpXuk.js";import{t as xe}from"./BrokerForm-ZRNTZhIC.js";import{n as Se,r as J,t as Ce}from"./IntegrationHub-DHPnaPMA.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}}}var Ee={"home-assistant":`Home Assistant`,mqtt:`MQTT`};function De(e){return Ee[e]??e}function Oe(e){return Array.isArray(e)?e.filter(e=>typeof e==`object`&&!!e&&typeof e.addonId==`string`&&Array.isArray(e.kinds)):[]}var ke={connected:`success`,connecting:`warning`,disconnected:`default`,"auth-failed":`danger`,unreachable:`danger`,error:`danger`};function Ae({status:e}){return d(P,{variant:ke[e],className:`text-[10px]`,children:e})}function je(e){return Array.isArray(e)?e.filter(e=>typeof e==`object`&&!!e&&typeof e.id==`string`):[]}function Me({title:e,subtitle:t,onClose:n,children:r}){return d(N,{open:!0,onOpenChange:e=>!e&&n(),children:a(R,{width:`md`,placement:`sheet-on-mobile`,scroll:`body`,children:[a(U,{children:[d(le,{children:e}),t&&d(pe,{children:t})]}),d(k,{className:`space-y-3 pr-1`,children:r})]})})}function Ne({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=j({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&&q(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(Me,{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(ve,{schema:l,values:u,onChange:f}),p!==null&&d(z,{message:p}),y.isError&&d(z,{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 Pe({broker:e,onClose:t,onDone:r}){let{t:i}=G(),o=c(),s=re({id:e.id,addonId:e.addonId}),l=ie({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(Me,{title:i(`brokers.brokerManager.edit`,`Edit {{name}}`,{name:e.name}),subtitle:`${De(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(y,{className:`h-3.5 w-3.5 animate-spin`}),` `,i(`brokers.brokerManager.loadingSettings`)]}):s.isError?a(`div`,{className:`space-y-3`,children:[d(z,{message:i(`brokers.brokerManager.loadSettingsFailed`,{message:s.error instanceof Error?s.error.message:i(`common.unknownError`)})}),d(`div`,{className:`flex justify-end`,children:d(B,{variant:`outline`,size:`sm`,onClick:t,children:i(`common.close`,`Close`)})})]}):a(`div`,{className:`space-y-3`,children:[l.isError&&d(z,{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 Fe({broker:e,interactiveConnectPath:t,interactiveDisconnectPath:n,onEdit:i}){let{t:o}=G(),s=c(),l=ne(),[u,m]=r(null),g=O({onSuccess:e=>m(e.ok?{ok:!0}:{ok:!1,error:e.error}),onError:e=>m({ok:!1,error:e instanceof Error?e.message:String(e)})}),_=ae({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`})&&_.mutate({id:e.id,addonId:e.addonId})},b=t!==void 0&&t.length>0&&e.status!==`connected`,x=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:De(e.kind)}),a(`td`,{className:`px-3 py-2`,children:[d(Ae,{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:[b&&a(B,{variant:`primary`,size:`sm`,onClick:()=>{q(t,e.id,()=>{s.invalidateQueries({queryKey:[[`broker`,`list`]]})})},title:o(`brokers.brokerManager.signInOpensAPopup`,`Sign in — opens a popup that closes when done`),children:[d(E,{className:`h-3 w-3`}),` `,o(`brokers.brokerManager.signIn`)]}),x&&a(B,{variant:`outline`,size:`sm`,onClick:()=>{q(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(T,{className:`h-3 w-3`}),` `,o(`brokers.brokerManager.signOut`)]}),a(B,{variant:`outline`,size:`sm`,onClick:()=>g.mutate({id:e.id,addonId:e.addonId}),disabled:g.isPending,title:o(`brokers.brokerManager.testConnection`,`Test connection`),children:[g.isPending?d(y,{className:`h-3 w-3 animate-spin`}):d(h,{className:`h-3 w-3`}),o(`brokers.brokerManager.test`,`Test`)]}),a(B,{variant:`outline`,size:`sm`,onClick:()=>i(e),title:o(`common.edit`,`Edit`),children:[d(f,{className:`h-3 w-3`}),` `,o(`common.edit`)]}),a(B,{variant:`outline`,size:`sm`,className:`border-danger/40 text-danger hover:bg-danger/10`,onClick:()=>{v()},disabled:_.isPending,title:o(`common.delete`,`Delete`),children:[_.isPending?d(y,{className:`h-3 w-3 animate-spin`}):d(p,{className:`h-3 w-3`}),o(`common.delete`,`Delete`)]})]})})]})}function Ie({addonId:e}={}){let{t}=G(),i=L({}),o=I(),s=n(()=>je(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 Oe(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:De(e.kind)});return[...t.values()]},[s,o.data,e]),m=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(B,{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(g,{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(y,{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=m.get(e.kind);return d(Fe,{broker:e,...t?.connect===void 0?{}:{interactiveConnectPath:t.connect},...t?.disconnect===void 0?{}:{interactiveDisconnectPath:t.disconnect},onEdit:f},e.id)})]})]})}),c&&d(Ne,{kinds:p,onClose:()=>l(!1),onDone:()=>l(!1)}),u&&d(Pe,{broker:u,onClose:()=>f(null),onDone:()=>f(null)})]})}e();function Le({addonId:e,fallback:t}){let n=oe({});if(n.isPending)return d(`div`,{className:`flex justify-center py-8`,children:d(y,{className:`size-6 animate-spin text-muted-foreground`})});if(n.isError)return d(z,{message:`Could not load entry kinds`});let r=n.data.kinds.find(t=>t.owner===e&&t.kind===`brokers`);return r===void 0?t:d(Re,{addonId:e,kind:r})}function Re({addonId:e,kind:t}){let{t:r}=G(),i=c(),o=L({}),l=I(),u=n(()=>{let t=new Map;for(let n of je(o.data))n.addonId===e&&t.set(n.id,n);return t},[o.data,e]),f=n(()=>{let e=new Map;for(let t of Oe(l.data))for(let n of t.kinds){let r=n.interactiveConnectPath,i=n.interactiveDisconnectPath;e.set(`${t.addonId}::${n.kind}`,{...typeof r==`string`&&r.length>0?{connect:r}:{},...typeof i==`string`&&i.length>0?{disconnect:i}:{}})}return e},[l.data]),p=()=>{i.invalidateQueries({queryKey:[[`broker`]]}),i.invalidateQueries({queryKey:[[`recordEntries`]]})};return d(H,{kind:t,extraColumns:n(()=>[{key:`status`,header:r(`brokers.brokerManager.status`,`Status`),nowrap:!0,width:`w-px`,render:e=>{let t=u.get(e.id);return t===void 0?null:d(Ae,{status:t.status})}}],[u,r]),rowActions:e=>{let t=u.get(e.id);if(t===void 0)return null;let n=f.get(`${t.addonId}::${t.kind}`);if(n===void 0)return null;let i=t.status===`connected`;return a(s,{children:[n.connect!==void 0&&!i&&a(B,{variant:`primary`,size:`sm`,"aria-label":r(`brokers.brokerManager.signIn`),onClick:()=>q(n.connect??``,t.id,p),title:r(`brokers.brokerManager.signInOpensAPopup`,`Sign in — opens a popup that closes when done`),children:[d(E,{className:`h-3 w-3`}),d(`span`,{className:`hidden sm:inline`,children:r(`brokers.brokerManager.signIn`)})]}),n.disconnect!==void 0&&i&&a(B,{variant:`outline`,size:`sm`,"aria-label":r(`brokers.brokerManager.signOut`),onClick:()=>q(n.disconnect??``,t.id,p),title:r(`brokers.brokerManager.signOutClearsTheLinked`,`Sign out — clears the linked Google account on this broker`),children:[d(T,{className:`h-3 w-3`}),d(`span`,{className:`hidden sm:inline`,children:r(`brokers.brokerManager.signOut`)})]})]})},showUpdated:!1,minWidthPx:340})}function ze(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 Be(e){let t=e,n=t?.manifest;if(n?.id===void 0)return null;let r=(n.capabilities??[]).map(ze).filter(e=>e!==null);return{addonId:n.id,displayName:n.packageDisplayName??n.name??n.id,capNames:r,processState:t?.process?.state??null}}function Ve(e,t){return Object.entries(e).filter(([,e])=>e===t).map(([e])=>e)}function He(e,t){return t.find(t=>e.capNames.includes(t))??null}function Ue(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 We=[`wasteCollections`,`listSources`],Ge=[`wasteCollections`,`listCountries`];function Ke(e){return e instanceof Error?e.message:String(e)}function qe(e){return typeof e!=`object`||!e?!1:Array.isArray(Reflect.get(e,`sections`))}function Je(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,`enabled`),o=Reflect.get(n,`formValues`),s=Reflect.get(n,`serviceId`),c=Reflect.get(n,`countryId`);t.push({id:e,label:r,module:i,enabled:typeof a==`boolean`?a:!0,formValues:typeof o==`object`&&o&&!Array.isArray(o)?o:void 0,serviceId:typeof s==`string`?s:void 0,countryId:typeof c==`string`?c:void 0})}return t}function Ye(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 Xe(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 Ze(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 Qe({addonId:e,capName:f}){let{t:m}=G(),h=b(),_=c(),v=ne(),y=ue({editKey:`wasteEdit`,newKey:`wasteNew`}),[x,S]=r(!1),[ee,C]=r(null),[w,T]=r({countryId:``,serviceId:``}),[E,D]=r({label:m(`system.wasteSettingsSources.newSource`,`New source`),enabled:!0}),O=l(null),k=typeof w.countryId==`string`?w.countryId:``,A=typeof w.serviceId==`string`?w.serviceId:``,j=i((t,n)=>h.trpcClient.addons.custom.mutate({addonId:e,action:t,input:n}),[e,h]),M=o({queryKey:[...We,e],queryFn:async()=>Je(await j(`listSources`,{}))}),re=o({queryKey:[...Ge,e],queryFn:async()=>Ye(await j(`listCountries`,{}))}),ie=o({queryKey:[`wasteCollections`,`listServices`,e,k],enabled:k!==``,queryFn:async()=>Xe(await j(`listServices`,{countryId:k}))}),N=o({queryKey:[`wasteCollections`,`serviceFormSchema`,e,A],enabled:A!==``,queryFn:async()=>j(`serviceFormSchema`,{serviceId:A})}),F=M.data??[],I=re.data??[],L=ie.data??[],ae=qe(N.data)?N.data:void 0,oe=n(()=>Ze(I,k===``?[]:L,k),[I,L,k]),R=y.state,z=R.mode===`edit`?F.find(e=>e.id===R.id)??null:null;t(()=>{if(y.state.mode===`edit`&&z!==null){let e=`edit:${z.id}`;if(O.current===e)return;O.current=e,C(null),T({countryId:z.countryId??``,serviceId:z.serviceId??``}),D(z.formValues===void 0?{label:z.label,enabled:z.enabled}:{...z.formValues});return}if(y.state.mode===`new`){if(O.current===`new`)return;O.current=`new`,C(null),T({countryId:``,serviceId:``}),D({label:m(`system.wasteSettingsSources.newSource`,`New source`),enabled:!0})}},[z,y.state]),t(()=>{if(y.state.mode!==`new`||A===``)return;let e=L.find(e=>e.id===A);e&&D(t=>{let n=t.label;return typeof n==`string`&&n!==``&&n!==`New source`?t:{...t,label:e.title}})},[y.state.mode,A,L]);let le=i(e=>{T(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:We})},[_]),H=u({mutationFn:async e=>j(`deleteSource`,{id:e}),onSuccess:async()=>V()}),U=i(async e=>{await v({title:m(`system.wasteSettingsSources.deleteWasteSource`,`Delete waste source?`),message:m(`system.wasteSettingsSources.removeItsCalendarUnderSystem`,`Remove “{{label}}” ({{id}}). Its calendar under System → Calendars is dropped.`,{label:e.label,id:e.id}),confirmLabel:m(`common.delete`,`Delete`),cancelLabel:m(`common.cancel`,`Cancel`),variant:`danger`})&&(await H.mutateAsync(e.id),y.state.mode===`edit`&&y.state.id===e.id&&(y.close(),O.current=null))},[v,H,y,m]),pe=i(async()=>{let e=E.label,t=typeof e==`string`&&e.trim()!==``?e.trim():``;if(t===``){C(`Label is required.`);return}if(A===``){C(`Pick a country and a service.`);return}let n=y.state.mode===`new`,r=z?.id;if(!n&&(r===void 0||r===``)){C(`That source is no longer available.`);return}let i=E.enabled,a={...E};delete a.label,delete a.enabled,S(!0),C(null);try{n?await j(`createSource`,{label:t,serviceId:A,args:a,enabled:typeof i==`boolean`?i:!0}):r!==void 0&&await j(`updateSource`,{id:r,label:t,serviceId:A,args:a,enabled:typeof i==`boolean`?i:!0}),await V(),y.close(),O.current=null}catch(e){C(Ke(e))}finally{S(!1)}},[j,z,y,E,V,A]),me=n(()=>[{key:`label`,header:m(`system.wasteSettingsSources.label`,`Label`),sortValue:e=>e.label,render:e=>d(`span`,{className:`text-sm text-foreground`,children:e.label})},{key:`module`,header:m(`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:m(`system.wasteSettingsSources.enabled`,`Enabled`),sortValue:e=>+!!e.enabled,render:e=>d(P,{variant:e.enabled?`success`:`default`,children:e.enabled?m(`system.wasteSettingsSources.on`,`On`):m(`system.wasteSettingsSources.off`,`Off`)})},{key:`actions`,header:``,notSortableReason:`actions`,render:e=>d(B,{type:`button`,size:`sm`,variant:`ghost`,"aria-label":m(`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,m]),W=y.state.mode===`new`,K=W||z!==null,he=`${A}:${W?`new`:z?.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:m(`system.wasteSettingsSources.pickACountryAndA`,`Pick a country and a service — configuration fields come from that HACS source.`)}),a(B,{type:`button`,size:`sm`,"data-testid":`waste-sources-add`,onClick:()=>y.openNew(),children:[d(g,{className:`h-3.5 w-3.5`}),m(`system.wasteSettingsSources.addSource`,`Add source`)]})]}),M.isError?d(`p`,{className:`text-sm text-danger`,children:m(`system.wasteSettingsSources.couldNotLoadSources`,`Could not load sources.`)}):null,M.isPending?d(de,{className:`h-32 w-full`}):d(ce,{columns:me,rows:F,rowKey:e=>e.id,pageSize:25,emptyMessage:m(`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(se,{open:K,onClose:()=>{y.close(),C(null),O.current=null},title:W?m(`system.wasteSettingsSources.addWasteSource`,`Add waste source`):m(`system.wasteSettingsSources.edit`,`Edit {{value1}}`,{value1:z?.label??`source`}),icon:te,width:`xl`,testId:`waste-source-editor`,error:ee,footer:d(B,{type:`button`,size:`sm`,disabled:x||A===``,onClick:()=>void pe(),children:x?m(`system.wasteSettingsSources.saving`,`Saving…`):m(`common.save`,`Save`)}),children:K?a(s,{children:[d(`div`,{"data-testid":`waste-country-service`,children:d(fe,{schema:oe,values:w,onChange:le},`picker:${k}:${L.length}`)}),A!==``&&ae!==void 0?d(fe,{schema:ae,values:E,onChange:D,bare:!0},he):A!==``&&N.isPending?d(`p`,{className:`text-sm text-foreground-muted`,children:m(`system.wasteSettingsSources.loadingFields`,`Loading fields…`)}):d(`p`,{className:`text-sm text-foreground-muted`,children:m(`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 $e=1e4,et={"device-export":`exporters`,exporters:`exporters`,email:`email`,broker:`brokers`,brokers:`brokers`,"message-brokers":`brokers`,calendar:`calendars`,calendars:`calendars`,"calendar-source":`calendars`},tt=[{sectionId:`exporters`,kind:`device-export`,labelKey:`system.connectivity.exporters`,icon:_,installLabelKey:`system.connectivity.exportersInstall`,emptyTitleKey:`system.connectivity.exportersEmptyTitle`,emptyDescriptionKey:`system.connectivity.exportersEmptyDescription`},{sectionId:`email`,kind:`email`,labelKey:`system.connectivity.email`,icon:v,installLabelKey:`system.connectivity.emailInstall`,emptyTitleKey:`system.connectivity.emailEmptyTitle`,emptyDescriptionKey:`system.connectivity.emailEmptyDescription`},{sectionId:`brokers`,kind:`broker`,labelKey:`system.connectivity.brokers`,icon:x,installLabelKey:`system.connectivity.brokersInstall`,emptyTitleKey:`system.connectivity.brokersEmptyTitle`,emptyDescriptionKey:`system.connectivity.brokersEmptyDescription`},{sectionId:`calendars`,kind:`calendar`,labelKey:`system.connectivity.calendars`,icon:w,installLabelKey:`system.connectivity.calendarsInstall`,emptyTitleKey:`system.connectivity.calendarsEmptyTitle`,emptyDescriptionKey:`system.connectivity.calendarsEmptyDescription`}];function nt(e,t,n,r){let i=Ve(C,e.kind),o=t.flatMap(t=>{let r=He(t,i);if(r===null)return[];let o=Ue(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(ot,{processState:t.processState}),d(st,{kind:e.kind,addonId:t.addonId})]}),lead:e.kind===`device-export`?d(A,{addonId:t.addonId}):void 0,panels:at(e.kind,t.addonId,e=>n(`/devices/${e}`)),settingsContent:t.addonId===`waste-collections`?d(Qe,{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 rt({descriptor:e,rows:t,isLoading:r}){let{t:i}=G(),a=he(),o=n(()=>nt(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 it(){let{t:e}=G(),r=V(void 0,{refetchInterval:$e}),[i,a]=_e(),o=K(`/system/integrations`,{t:e,isAdmin:!0})??{icon:m,title:e(`admin.system.integrations.connectivity`,`Connectivity`)};t(()=>{let e=i.get(`tab`);if(e===null)return;let t=et[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(Be).filter(e=>e!==null),[r.data]),c=n(()=>tt.map(t=>({id:t.sectionId,label:e(t.labelKey),ownedParams:ge,content:d(rt,{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 at(e,t,n){return e===`device-export`?[{id:`devices`,title:W.t(`admin.system.integrations.devices`,`Devices`),icon:D,placement:`end`,content:d(F,{addonId:t,onOpenDevice:n,showSetup:!1})}]:e===`broker`?[{id:`connections`,title:W.t(`admin.system.integrations.connections`,`Connections`),icon:x,content:d(Le,{addonId:t,fallback:d(Ie,{addonId:t})})}]:[]}function ot({processState:e}){let{state:t,label:n}=Ue(e);return d(P,{variant:t===`ok`?`success`:t===`error`?`danger`:`default`,className:`${J} capitalize`,children:n})}function st({kind:e,addonId:t}){return e===`broker`?d(ct,{addonId:t}):e===`device-export`?d(lt,{addonId:t}):null}function ct({addonId:e}){let{t}=G(),{data:n}=M({addonId:e},{refetchInterval:$e,retry:!1}),r=ee.safeParse(n);if(!r.success)return null;let{brokerCount:i,connectedCount:a}=r.data;return d(P,{variant:`info`,className:J,children:a>0?t(`system.connectivity.connectionsConnected`,{count:i,connected:a}):t(`system.connectivity.connections`,{count:i})})}function lt({addonId:e}){let{t}=G(),{data:n}=me({addonId:e},{refetchInterval:$e,retry:!1}),r=S.safeParse(n);if(!r.success)return null;let{linkState:i,exposedDeviceCount:a}=r.data;return d(P,{variant:i===`linked`?`success`:i===`error`?`danger`:`default`,className:J,children:t(`admin.system.integrations.exposed`,`{{linkState}} · {{exposedDeviceCount}} exposed`,{linkState:i,exposedDeviceCount:a})})}export{it as IntegrationsPage};