@camstack/addon-admin-ui 1.2.517 → 1.2.518

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 (132) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/dist/assets/{AddonAssetIcon-DaAStKC8.js → AddonAssetIcon-BC78agF0.js} +1 -1
  3. package/dist/assets/{Addons-Do9U7LcM.js → Addons-CQDH0HWD.js} +1 -1
  4. package/dist/assets/{AdminPage-CgFhd3My.js → AdminPage-Bjs-nytk.js} +1 -1
  5. package/dist/assets/{AdminSectionedPage-C9702pKD.js → AdminSectionedPage-C2tP0k-6.js} +1 -1
  6. package/dist/assets/AiProfiles-pD02-18U.js +3 -0
  7. package/dist/assets/{BrokerEditorDialog-BCtpOmtb.js → BrokerEditorDialog-DqKS37Rv.js} +1 -1
  8. package/dist/assets/Build-CS_dj5Hw.js +40 -0
  9. package/dist/assets/{Calendars-CvhWz72R.js → Calendars-DCACjLC6.js} +1 -1
  10. package/dist/assets/{Cluster-GaxjV7h4.js → Cluster-BrqN0cCD.js} +1 -1
  11. package/dist/assets/ComposedDeviceEditDialog-BbJPDw4o.js +1 -0
  12. package/dist/assets/CompositionBlockEditor-Dmmow4DP.js +2 -0
  13. package/dist/assets/{CompositionEditorPage-CZQd9oj4.js → CompositionEditorPage-DP0zujWv.js} +1 -1
  14. package/dist/assets/{Data-CZij0oVZ.js → Data-CqOCFJFz.js} +1 -1
  15. package/dist/assets/DeviceDetail-DkP5CZVE.js +2 -0
  16. package/dist/assets/DeviceDoActionFields-H3tNQT9N.js +1 -0
  17. package/dist/assets/{Devices-60E3KVab.js → Devices-mBnndiKl.js} +1 -1
  18. package/dist/assets/{EmbedPlayerPage-BCjssXwM.js → EmbedPlayerPage-BcZOBNUY.js} +1 -1
  19. package/dist/assets/{History-QHsS9OSz.js → History-DaqaF73n.js} +1 -1
  20. package/dist/assets/Identity-_pfy495m.js +1 -0
  21. package/dist/assets/{IntegrationDetail-Cggj8UuG.js → IntegrationDetail-CoIH_IOT.js} +1 -1
  22. package/dist/assets/{IntegrationHub-YFOb5Q5f.js → IntegrationHub-CBRrUUwz.js} +1 -1
  23. package/dist/assets/{Integrations-CM_r2esc.js → Integrations-BgQD7R9-.js} +1 -1
  24. package/dist/assets/{Integrations-CAGCgM4m.js → Integrations-LJTGYZMx.js} +1 -1
  25. package/dist/assets/{Library-CDBh4UY7.js → Library-DpuCsSIr.js} +1 -1
  26. package/dist/assets/{Locations-C5J-xGpv.js → Locations-itQSSJiL.js} +1 -1
  27. package/dist/assets/{Logs-BzR8S8Az.js → Logs-D1cD43iv.js} +1 -1
  28. package/dist/assets/{MaskShapeCanvas-v1VFSWGn.js → MaskShapeCanvas-uxChMknO.js} +1 -1
  29. package/dist/assets/{MotionZonesSettings-sNv6UeyN.js → MotionZonesSettings--b5THRq8.js} +1 -1
  30. package/dist/assets/{MyAccess-d7f5aurQ.js → MyAccess-CM3VRR_i.js} +1 -1
  31. package/dist/assets/{Network-D5kLXsF4.js → Network-Bu0zlJZn.js} +1 -1
  32. package/dist/assets/{NodeAddonsSettingsPanel-Dul-TVez.js → NodeAddonsSettingsPanel-09f8jHVS.js} +1 -1
  33. package/dist/assets/Notifications-CNGSWjOJ.js +1 -0
  34. package/dist/assets/Pipeline-Bbec-Y6A.js +1 -0
  35. package/dist/assets/{PrivacyMaskSettings-BOFfKtZS.js → PrivacyMaskSettings-C4vaTevi.js} +1 -1
  36. package/dist/assets/{Recordings-CSEh6SKS.js → Recordings-Ccv0flf6.js} +1 -1
  37. package/dist/assets/{RemoteGrid-DwD_77yd.js → RemoteGrid-BEi9hXEQ.js} +1 -1
  38. package/dist/assets/{ScanNetworkModal-DfCSNZP7.js → ScanNetworkModal-Da7Ia5fk.js} +1 -1
  39. package/dist/assets/{SceneMonitorEditor-CYSd3nvA.js → SceneMonitorEditor-CRNON98X.js} +1 -1
  40. package/dist/assets/{SessionsList-e-yTK3Ce.js → SessionsList-BT-nRXks.js} +1 -1
  41. package/dist/assets/{Showroom-BW0s66nO.js → Showroom-B8oIkjzd.js} +1 -1
  42. package/dist/assets/{System-lEmnBarz.js → System-BAxBoDDo.js} +1 -1
  43. package/dist/assets/{Templates-oi3TGvJ_.js → Templates-BzDGxVCB.js} +1 -1
  44. package/dist/assets/{Terminal-DSohGtV9.js → Terminal-DOuAcBhK.js} +1 -1
  45. package/dist/assets/{Viewer-B6FpTku6.js → Viewer-D8Z0j_5f.js} +1 -1
  46. package/dist/assets/{_virtual_mf-localSharedImportMap___mfe_internal__admin_ui_host-DqPNLVRX.js → _virtual_mf-localSharedImportMap___mfe_internal__admin_ui_host-CAe-SPFx.js} +1 -1
  47. package/dist/assets/{addon-icons-context-BAMZN6v3.js → addon-icons-context-BFP9swAt.js} +1 -1
  48. package/dist/assets/{archive-CQSA3no9.js → archive-Ci7cm4G6.js} +1 -1
  49. package/dist/assets/{assignment-candidates-CX47iOH5.js → assignment-candidates-VjT4o6uu.js} +1 -1
  50. package/dist/assets/{authed-media-Bk6ZG2lV.js → authed-media-Cez6z7Na.js} +1 -1
  51. package/dist/assets/{bell-off-ByVFjmad.js → bell-off-BQ5f8XC0.js} +1 -1
  52. package/dist/assets/{board-model-Cij0wyiz.js → board-model-BTA-bFlQ.js} +1 -1
  53. package/dist/assets/{boxes-B8shBGyA.js → boxes-Czy7yEhH.js} +1 -1
  54. package/dist/assets/circle-slash-Bj89nMWC.js +1 -0
  55. package/dist/assets/client-Btf9JC4a.js +674 -0
  56. package/dist/assets/{cloud-upload-knnOuFf0.js → cloud-upload-BA2sS5fo.js} +1 -1
  57. package/dist/assets/crop-Cf489T6c.js +1 -0
  58. package/dist/assets/{device-integration-icon-CXZW9un_.js → device-integration-icon-DSBE3o4D.js} +1 -1
  59. package/dist/assets/device-picker-model-BGDU8PR0.js +1 -0
  60. package/dist/assets/dist-Ca-InGm-.js +674 -0
  61. package/dist/assets/{dist-DWGbpqHP.js → dist-eJJt48HH.js} +1 -1
  62. package/dist/assets/{file-up-DsJKDfNx.js → file-up-CoCeS48c.js} +1 -1
  63. package/dist/assets/{hard-drive-download-3fltBasv.js → hard-drive-download-D1726cbL.js} +1 -1
  64. package/dist/assets/{hostInit-Djg3zVjo.js → hostInit-DrD-30zD.js} +1 -1
  65. package/dist/assets/{i18n-qDGVD_PF.js → i18n-Bz5ob6rD.js} +1 -1
  66. package/dist/assets/{icons-yMzKblPs.js → icons-BMj2QemZ.js} +1 -1
  67. package/dist/assets/{index-DrGgMc78.css → index-C0TfYmoA.css} +1 -1
  68. package/dist/assets/{index-Dvd8RKBK.js → index-DhFn-OXx.js} +3 -3
  69. package/dist/assets/{key-DCYw0FNE.js → key-Cuez9yo6.js} +1 -1
  70. package/dist/assets/{key-round-CTD-QhVl.js → key-round-aeHPqKM8.js} +1 -1
  71. package/dist/assets/{layers-7Ihtoyz5.js → layers-CR_BGB4-.js} +1 -1
  72. package/dist/assets/{linked-devices-model-n5gH_HKu.js → linked-devices-model-DFhvKJk0.js} +1 -1
  73. package/dist/assets/{list-ordered-oYfsQM3w.js → list-ordered-C8f5XMRn.js} +1 -1
  74. package/dist/assets/{location-owned-usage-CT1Figq_.js → location-owned-usage-DtY0j8BQ.js} +1 -1
  75. package/dist/assets/{log-in-BzAjDKMU.js → log-in-CHoY0fr_.js} +1 -1
  76. package/dist/assets/{memory-stick-XgJPnz3h.js → memory-stick-BEIQDnvw.js} +1 -1
  77. package/dist/assets/{message-square-plus-DObXI5UO.js → message-square-plus-BRE3KNcy.js} +1 -1
  78. package/dist/assets/{mf-entry-bootstrap-0-8ecb92b3.js → mf-entry-bootstrap-0-193177ad.js} +2 -2
  79. package/dist/assets/{mic-off-CFZpIFfk.js → mic-off-DdBze9n7.js} +1 -1
  80. package/dist/assets/{monitor-off-610T_Gdj.js → monitor-off-BlV0-S9V.js} +1 -1
  81. package/dist/assets/{monitor-smartphone-Dn0zJRqy.js → monitor-smartphone-dysQUSro.js} +1 -1
  82. package/dist/assets/mount-BGDU8PR0.js +1 -0
  83. package/dist/assets/{player-overlays-CJHEGkWA.js → player-overlays-gMD_rhHz.js} +1 -1
  84. package/dist/assets/{recycle-BDhcl0YV.js → recycle-BA7-S0W8.js} +1 -1
  85. package/dist/assets/remoteEntry-BvdQpL1M.js +1 -0
  86. package/dist/assets/{ruler-DRBBjPda.js → ruler-D9Jk5se7.js} +1 -1
  87. package/dist/assets/{scan-eye-Cq1A21Jj.js → scan-eye-C8pDlR8P.js} +1 -1
  88. package/dist/assets/{scissors-_YyUi2Wc.js → scissors-DXW7xXbW.js} +1 -1
  89. package/dist/assets/{search-x-0cpMKp48.js → search-x-D_xVJpAe.js} +1 -1
  90. package/dist/assets/{send-BPU5cRG9.js → send-rR1Ku0wT.js} +1 -1
  91. package/dist/assets/{settings-2-L8TMaIKQ.js → settings-2-D4IIivH2.js} +1 -1
  92. package/dist/assets/{shapes-DJVtgjGZ.js → shapes-w5Fgi2N8.js} +1 -1
  93. package/dist/assets/{sigma-DPXOWC0b.js → sigma-CaOfCqqr.js} +1 -1
  94. package/dist/assets/{speaker-CokRNflr.js → speaker-CwxMftpn.js} +1 -1
  95. package/dist/assets/src-D55o373U.js +67 -0
  96. package/dist/assets/{step-inspector-model-8FwvV-vd.js → step-inspector-model-DjL5SesH.js} +1 -1
  97. package/dist/assets/{table-2-DBJuUbJh.js → table-2-8ixw9N56.js} +1 -1
  98. package/dist/assets/{timer-reset-D9k5wmF9.js → timer-reset-CKI15cld.js} +1 -1
  99. package/dist/assets/{unlink-Bs2RzKEu.js → unlink-CCyI_xx8.js} +1 -1
  100. package/dist/assets/{usb-BjhR3doW.js → usb-DEn49T2d.js} +1 -1
  101. package/dist/assets/use-device-bound-caps-T07YegIU.js +1 -0
  102. package/dist/assets/{use-scenes-feed-CT1HkH56.js → use-scenes-feed-D5RNpqtT.js} +1 -1
  103. package/dist/assets/{use-stationary-objects-HuzwOvOv.js → use-stationary-objects-DD6qOZ6v.js} +1 -1
  104. package/dist/assets/useEventInvalidation-BGDU8PR0.js +1 -0
  105. package/dist/assets/{useNodeUrlSelection-B82QsLnx.js → useNodeUrlSelection-DR_meIYe.js} +1 -1
  106. package/dist/assets/user-round-Dds3N7A4.js +1 -0
  107. package/dist/assets/{user-x-lD1eMNGr.js → user-x-DQZ1obZM.js} +1 -1
  108. package/dist/assets/{variable-f5kvdTkN.js → variable-BxoapzPU.js} +1 -1
  109. package/dist/assets/{video-DNdx4dbt.js → video-BnPjevi_.js} +1 -1
  110. package/dist/assets/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__admin_ui_host__remoteEntry-_hash_-BwnfAs-v.js → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__admin_ui_host__remoteEntry-_hash_-BhdwB_BG.js} +2 -2
  111. package/dist/index.html +10 -10
  112. package/dist/server/addon.js +24 -1
  113. package/package.json +1 -1
  114. package/dist/assets/AiProfiles-CZMD4KM-.js +0 -3
  115. package/dist/assets/Build-BgRIdgDr.js +0 -40
  116. package/dist/assets/ComposedDeviceEditDialog-B1R5Dm6Q.js +0 -1
  117. package/dist/assets/CompositionBlockEditor-CKIEoswd.js +0 -2
  118. package/dist/assets/DeviceDetail-DIqK-Pxm.js +0 -2
  119. package/dist/assets/DeviceDoActionFields-DAsmzytT.js +0 -1
  120. package/dist/assets/Identity-Ck9bdqfT.js +0 -1
  121. package/dist/assets/Notifications-BCXKW0H1.js +0 -1
  122. package/dist/assets/Pipeline-DQ0gg-q3.js +0 -1
  123. package/dist/assets/circle-slash-CYJP5692.js +0 -1
  124. package/dist/assets/client-B3Uh4h4a.js +0 -674
  125. package/dist/assets/crop-CO-cCOHc.js +0 -1
  126. package/dist/assets/device-picker-model-CLwbjCLX.js +0 -1
  127. package/dist/assets/dist-2sWhwHC7.js +0 -674
  128. package/dist/assets/mount-CLwbjCLX.js +0 -1
  129. package/dist/assets/remoteEntry-BkNPWH4W.js +0 -1
  130. package/dist/assets/src-CzDAA2fz.js +0 -67
  131. package/dist/assets/useEventInvalidation-CLwbjCLX.js +0 -1
  132. package/dist/assets/user-round-reErwwaE.js +0 -1
@@ -1 +1 @@
1
- import{C as e,J as t,K as n,R as r,S as i,V as a,Y as o,a as s,et as c,o 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-CEyXHAdg.js";import{Dn as f,Fn as p,Ht as m,Pn as h,Vn as g,bt as _,cr as v,dt as ee,fr as y,hn as b,st as x}from"./player-overlays-CJHEGkWA.js";import{la as S,tn as te,vi as C}from"./client-B3Uh4h4a.js";import{g as w,s as T}from"./video-DNdx4dbt.js";import{t as E}from"./log-in-BzAjDKMU.js";import{t as D}from"./monitor-smartphone-Dn0zJRqy.js";import{t as ne}from"./recycle-BDhcl0YV.js";import{At as O,Dn as re,Ma as k,Nr as ie,Oa as A,Pa as j,ci as M,dr as N,ei as P,gt as ae,ka as F,kt as I,mt as oe,no as se,zi as L}from"./src-CzDAA2fz.js";import{t as R}from"./i18n-qDGVD_PF.js";import{t as z}from"./useTranslation-BJr-n0es.js";import{T as B,_r as V,g as H,i as U,yr as W}from"./index-Dvd8RKBK.js";import{t as G}from"./AdminSectionedPage-C9702pKD.js";import{n as K,r as q,t as J}from"./BrokerEditorDialog-BCtpOmtb.js";import{t as ce}from"./NodeAddonsSettingsPanel-Dul-TVez.js";import{n as Y,r as X,t as le}from"./IntegrationHub-YFOb5Q5f.js";c();var Z={connected:`success`,connecting:`warning`,disconnected:`default`,"auth-failed":`danger`,unreachable:`danger`,error:`danger`};function Q({status:e}){return i(M,{variant:Z[e],className:`text-[10px]`,children:e})}function ue({broker:t,interactiveConnectPath:n,interactiveDisconnectPath:r,kindLabel:a,onEdit:s}){let{t:c}=z(),u=l(),d=x(),[f,p]=o(null),h=j({onSuccess:e=>p(e.ok?{ok:!0}:{ok:!1,error:e.error}),onError:e=>p({ok:!1,error:e instanceof Error?e.message:String(e)})}),v=k({onSuccess:()=>{u.invalidateQueries({queryKey:[[`broker`,`list`]]})}}),ee=async()=>{await d({title:c(`brokers.brokerManager.deleteBroker`,`Delete broker`),message:c(`brokers.brokerManager.deleteBrokerIntegrationsThatDepend`,`Delete broker "{{name}}"? Integrations that depend on it will stop working.`,{name:t.name}),confirmLabel:c(`common.delete`,`Delete`),variant:`danger`})&&v.mutate({id:t.id,addonId:t.addonId})},b=n!==void 0&&n.length>0&&t.status!==`connected`,S=r!==void 0&&r.length>0&&t.status===`connected`;return e(`tr`,{className:`border-b border-border last:border-0`,children:[i(`td`,{className:`px-3 py-2 text-xs text-foreground font-medium`,children:t.name}),i(`td`,{className:`px-3 py-2 text-xs text-foreground-subtle`,children:a}),e(`td`,{className:`px-3 py-2`,children:[i(Q,{status:t.status}),f&&i(`span`,{className:`ml-2 text-[10px] ${f.ok?`text-success`:`text-danger`}`,children:f.ok?`OK`:f.error??c(`common.failedWord`)})]}),i(`td`,{className:`px-3 py-2`,children:e(`div`,{className:`flex items-center justify-end gap-1.5`,children:[b&&e(P,{variant:`primary`,size:`sm`,onClick:()=>{H(n,t.id,()=>{u.invalidateQueries({queryKey:[[`broker`,`list`]]})})},title:c(`brokers.brokerManager.signInOpensAPopup`,`Sign in — opens a popup that closes when done`),children:[i(E,{className:`h-3 w-3`}),` `,c(`brokers.brokerManager.signIn`)]}),S&&e(P,{variant:`outline`,size:`sm`,onClick:()=>{H(r,t.id,()=>{u.invalidateQueries({queryKey:[[`broker`,`list`]]})})},title:c(`brokers.brokerManager.signOutClearsTheLinked`,`Sign out — clears the linked Google account on this broker`),children:[i(T,{className:`h-3 w-3`}),` `,c(`brokers.brokerManager.signOut`)]}),e(P,{variant:`outline`,size:`sm`,onClick:()=>h.mutate({id:t.id,addonId:t.addonId}),disabled:h.isPending,title:c(`brokers.brokerManager.testConnection`,`Test connection`),children:[h.isPending?i(y,{className:`h-3 w-3 animate-spin`}):i(_,{className:`h-3 w-3`}),c(`brokers.brokerManager.test`,`Test`)]}),e(P,{variant:`outline`,size:`sm`,onClick:()=>s(t),title:c(`common.edit`,`Edit`),children:[i(g,{className:`h-3 w-3`}),` `,c(`common.edit`)]}),e(P,{variant:`outline`,size:`sm`,className:`border-danger/40 text-danger hover:bg-danger/10`,onClick:()=>{ee()},disabled:v.isPending,title:c(`common.delete`,`Delete`),children:[v.isPending?i(y,{className:`h-3 w-3 animate-spin`}):i(m,{className:`h-3 w-3`}),c(`common.delete`,`Delete`)]})]})})]})}function de({addonId:t}={}){let{t:r}=z(),a=F({}),s=n(()=>K(a.data).filter(e=>t===void 0||e.addonId===t),[a.data,t]),[c,l]=o(!1),[u,d]=o(null),{options:f}=q(t===void 0?{}:{addonId:t}),m=n(()=>new Map(f.map(e=>[e.kind,e.label])),[f]),h=n(()=>{let e=new Map;for(let t of f)e.has(t.kind)||e.set(t.kind,{...t.interactiveConnectPath===void 0?{}:{connect:t.interactiveConnectPath},...t.interactiveDisconnectPath===void 0?{}:{disconnect:t.interactiveDisconnectPath}});return e},[f]);return e(`div`,{className:`space-y-3`,children:[i(`div`,{className:`flex items-center justify-end`,children:e(P,{variant:`primary`,size:`sm`,onClick:()=>l(!0),disabled:f.length===0,title:f.length===0?r(`brokers.brokerManager.noBrokerProvidersAvailable`,`No broker providers available`):void 0,children:[i(p,{className:`h-3.5 w-3.5`}),` `,r(`brokers.brokerManager.addBroker`)]})}),i(`div`,{className:`rounded-lg border border-border bg-surface overflow-x-auto`,children:e(`table`,{className:`w-full min-w-[36rem] border-collapse`,children:[i(`thead`,{children:e(`tr`,{className:`border-b border-border bg-background/50`,children:[i(`th`,{className:`px-3 py-2 text-left text-[10px] font-semibold uppercase tracking-wider text-foreground-subtle`,children:r(`brokers.brokerManager.name`,`Name`)}),i(`th`,{className:`px-3 py-2 text-left text-[10px] font-semibold uppercase tracking-wider text-foreground-subtle`,children:r(`brokers.brokerManager.kind`,`Kind`)}),i(`th`,{className:`px-3 py-2 text-left text-[10px] font-semibold uppercase tracking-wider text-foreground-subtle`,children:r(`brokers.brokerManager.status`,`Status`)}),i(`th`,{className:`px-3 py-2 text-right text-[10px] font-semibold uppercase tracking-wider text-foreground-subtle`,children:r(`brokers.brokerManager.actions`,`Actions`)})]})}),e(`tbody`,{children:[a.isLoading&&i(`tr`,{children:e(`td`,{colSpan:4,className:`px-3 py-6 text-center text-xs text-foreground-subtle`,children:[i(y,{className:`inline h-4 w-4 animate-spin`}),` `,r(`brokers.brokerManager.loadingBrokers`)]})}),a.isError&&i(`tr`,{children:e(`td`,{colSpan:4,className:`px-3 py-4 text-center text-xs text-danger`,children:[r(`brokers.brokerManager.failedToLoadBrokers`,`Failed to load brokers:`),` `,a.error instanceof Error?a.error.message:r(`brokers.brokerManager.unknownError`,`Unknown error`)]})}),!a.isLoading&&!a.isError&&s.length===0&&i(`tr`,{children:i(`td`,{colSpan:4,className:`px-3 py-6 text-center text-xs text-foreground-subtle`,children:r(`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 i(ue,{broker:e,...t?.connect===void 0?{}:{interactiveConnectPath:t.connect},...t?.disconnect===void 0?{}:{interactiveDisconnectPath:t.disconnect},kindLabel:m.get(e.kind)??e.kind,onEdit:d},e.id)})]})]})}),c&&i(J,{...t===void 0?{}:{addonId:t},onClose:()=>l(!1),onSaved:()=>l(!1)}),u&&i(J,{broker:u,onClose:()=>d(null),onSaved:()=>d(null)})]})}function fe(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 pe(e){let t=e,n=t?.manifest;if(n?.id===void 0)return null;let r=(n.capabilities??[]).map(fe).filter(e=>e!==null);return{addonId:n.id,displayName:n.packageDisplayName??n.name??n.id,capNames:r,processState:t?.process?.state??null}}function me(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 ge(e){switch(e){case`running`:return{state:`ok`,label:R.t(`helpers.connectivityModel.running`)};case`crashed`:case`failed`:return{state:`error`,label:e};case`stopped`:case`disabled`:return{state:`off`,label:R.t(`helpers.connectivityModel.stopped`)};default:return{state:`unknown`,label:e??R.t(`common.unknownWord`)}}}c();var _e=[`wasteCollections`,`listSources`],ve=[`wasteCollections`,`listCountries`];function ye(e){return e instanceof Error?e.message:String(e)}function be(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,`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 Se(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 Ce(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 we(e,t,n){return{sections:[{id:`picker`,title:R.t(`system.wasteSettingsSources.countryService`,`Country & service`),columns:2,fields:[{type:`select`,key:`countryId`,label:R.t(`system.wasteSettingsSources.country`,`Country`),options:[{value:``,label:R.t(`system.wasteSettingsSources.selectCountry`,`Select country…`)},...e.map(e=>({value:e.id,label:e.label}))]},{type:`select`,key:`serviceId`,label:R.t(`system.wasteSettingsSources.service`,`Service`),options:[{value:``,label:n===``?R.t(`system.wasteSettingsSources.pickACountryFirst`,`Pick a country first`):R.t(`system.wasteSettingsSources.selectService`,`Select service…`)},...t.map(e=>({value:e.id,label:e.label}))]}]}]}}function Te({addonId:c,capName:f}){let{t:h}=z(),g=ee(),_=l(),v=x(),y=oe({editKey:`wasteEdit`,newKey:`wasteNew`}),[b,S]=o(!1),[te,C]=o(null),[w,T]=o({countryId:``,serviceId:``}),[E,D]=o({label:h(`system.wasteSettingsSources.newSource`,`New source`),enabled:!0}),O=t(null),k=typeof w.countryId==`string`?w.countryId:``,A=typeof w.serviceId==`string`?w.serviceId:``,j=r((e,t)=>g.trpcClient.addons.custom.mutate({addonId:c,action:e,input:t}),[c,g]),F=s({queryKey:[..._e,c],queryFn:async()=>xe(await j(`listSources`,{}))}),I=s({queryKey:[...ve,c],queryFn:async()=>Se(await j(`listCountries`,{}))}),se=s({queryKey:[`wasteCollections`,`listServices`,c,k],enabled:k!==``,queryFn:async()=>Ce(await j(`listServices`,{countryId:k}))}),L=s({queryKey:[`wasteCollections`,`serviceFormSchema`,c,A],enabled:A!==``,queryFn:async()=>j(`serviceFormSchema`,{serviceId:A})}),R=F.data??[],B=I.data??[],V=se.data??[],H=be(L.data)?L.data:void 0,U=n(()=>we(B,k===``?[]:V,k),[B,V,k]),W=y.state,G=W.mode===`edit`?R.find(e=>e.id===W.id)??null:null;a(()=>{if(y.state.mode===`edit`&&G!==null){let e=`edit:${G.id}`;if(O.current===e)return;O.current=e,C(null),T({countryId:G.countryId??``,serviceId:G.serviceId??``}),D(G.formValues===void 0?{label:G.label,enabled:G.enabled}:{...G.formValues});return}if(y.state.mode===`new`){if(O.current===`new`)return;O.current=`new`,C(null),T({countryId:``,serviceId:``}),D({label:h(`system.wasteSettingsSources.newSource`,`New source`),enabled:!0})}},[G,y.state]),a(()=>{if(y.state.mode!==`new`||A===``)return;let e=V.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,V]);let K=r(e=>{T(t=>{let n=typeof e.countryId==`string`?e.countryId:``;return n===(typeof t.countryId==`string`?t.countryId:``)?e:{countryId:n,serviceId:``}})},[]),q=r(async()=>{await _.invalidateQueries({queryKey:_e})},[_]),J=u({mutationFn:async e=>j(`deleteSource`,{id:e}),onSuccess:async()=>q()}),Y=r(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 J.mutateAsync(e.id),y.state.mode===`edit`&&y.state.id===e.id&&(y.close(),O.current=null))},[v,J,y,h]),X=r(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=G?.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 q(),y.close(),O.current=null}catch(e){C(ye(e))}finally{S(!1)}},[j,G,y,E,q,A]),le=n(()=>[{key:`label`,header:h(`system.wasteSettingsSources.label`,`Label`),sortValue:e=>e.label,render:e=>i(`span`,{className:`text-sm text-foreground`,children:e.label})},{key:`module`,header:h(`system.wasteSettingsSources.module`,`Module`),sortValue:e=>e.module,render:e=>i(`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=>i(M,{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=>i(P,{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(),Y(e)},children:i(m,{className:`h-3.5 w-3.5 text-danger`})})}],[Y,h]),Z=y.state.mode===`new`,Q=Z||G!==null,ue=`${A}:${Z?`new`:G?.id??`closed`}`;return e(`div`,{className:`flex min-h-0 flex-col gap-4`,"data-testid":`waste-settings-sources`,children:[e(`div`,{className:`flex flex-wrap items-center justify-between gap-2`,children:[i(`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.`)}),e(P,{type:`button`,size:`sm`,"data-testid":`waste-sources-add`,onClick:()=>y.openNew(),children:[i(p,{className:`h-3.5 w-3.5`}),h(`system.wasteSettingsSources.addSource`,`Add source`)]})]}),F.isError?i(`p`,{className:`text-sm text-danger`,children:h(`system.wasteSettingsSources.couldNotLoadSources`,`Could not load sources.`)}):null,F.isPending?i(ie,{className:`h-32 w-full`}):i(re,{columns:le,rows:R,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`}}),i(ae,{open:Q,onClose:()=>{y.close(),C(null),O.current=null},title:Z?h(`system.wasteSettingsSources.addWasteSource`,`Add waste source`):h(`system.wasteSettingsSources.edit`,`Edit {{value1}}`,{value1:G?.label??`source`}),icon:ne,width:`xl`,testId:`waste-source-editor`,error:te,footer:i(P,{type:`button`,size:`sm`,disabled:b||A===``,onClick:()=>void X(),children:b?h(`system.wasteSettingsSources.saving`,`Saving…`):h(`common.save`,`Save`)}),children:Q?e(d,{children:[i(`div`,{"data-testid":`waste-country-service`,children:i(N,{schema:U,values:w,onChange:K},`picker:${k}:${V.length}`)}),A!==``&&H!==void 0?i(N,{schema:H,values:E,onChange:D,bare:!0},ue):A!==``&&L.isPending?i(`p`,{className:`text-sm text-foreground-muted`,children:h(`system.wasteSettingsSources.loadingFields`,`Loading fields…`)}):i(`p`,{className:`text-sm text-foreground-muted`,children:h(`system.wasteSettingsSources.chooseACountryAndService`,`Choose a country and service to see the required fields.`)})]}):null}),i(ce,{nodeId:`hub`,addonIds:[c],level:`global`,capability:f,hideSectionChrome:!0})]})}c();var $=1e4,Ee={"device-export":`exporters`,exporters:`exporters`,email:`email`,broker:`brokers`,brokers:`brokers`,"message-brokers":`brokers`,calendar:`calendars`,calendars:`calendars`,"calendar-source":`calendars`},De=[{sectionId:`exporters`,kind:`device-export`,labelKey:`system.connectivity.exporters`,icon:b,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:f,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 Oe(t,n,r,a){let o=me(te,t.kind),s=n.flatMap(n=>{let a=he(n,o);if(a===null)return[];let s=ge(n.processState);return[{id:n.addonId,name:n.displayName,fallbackIcon:t.icon,state:s.state,stateLabel:s.label,render:()=>i(Y,{addonId:n.addonId,displayName:n.displayName,capName:a,isActive:n.processState===`running`,badges:e(d,{children:[i(Me,{processState:n.processState}),i(Ne,{kind:t.kind,addonId:n.addonId})]}),lead:t.kind===`device-export`?i(O,{addonId:n.addonId}):void 0,panels:je(t.kind,n.addonId,e=>r(`/devices/${e}`)),settingsContent:n.addonId===`waste-collections`?i(Te,{addonId:n.addonId,capName:a}):void 0})}]});return{id:t.sectionId,label:a(t.labelKey),entries:s,install:{capability:o[0]??t.kind,label:a(t.installLabelKey)}}}function ke({descriptor:e,rows:t,isLoading:r}){let{t:a}=z(),o=V(),s=n(()=>Oe(e,t,o,a),[e,t,o,a]);return i(le,{embedded:!0,icon:e.icon,title:a(e.labelKey),subtitle:null,groups:[s],isLoading:r,emptyTitle:a(e.emptyTitleKey),emptyDescription:a(e.emptyDescriptionKey)})}function Ae(){let{t:e}=z(),t=L(void 0,{refetchInterval:$}),[r,o]=W(),s=B(`/system/integrations`,{t:e,isAdmin:!0})??{icon:h,title:e(`admin.system.integrations.connectivity`,`Connectivity`)};a(()=>{let e=r.get(`tab`);if(e===null)return;let t=Ee[e];t===void 0||t===e||o(e=>{let n=new URLSearchParams(e);return n.set(`tab`,t),n},{replace:!0})},[r,o]);let c=n(()=>(t.data??[]).map(pe).filter(e=>e!==null),[t.data]),l=n(()=>De.map(n=>({id:n.sectionId,label:e(n.labelKey),ownedParams:U,content:i(ke,{descriptor:n,rows:c,isLoading:t.isLoading})})),[t.isLoading,c,e]);return i(G,{icon:s.icon,title:s.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:l})}function je(e,t,n){return e===`device-export`?[{id:`devices`,title:R.t(`admin.system.integrations.devices`,`Devices`),icon:D,placement:`end`,content:i(I,{addonId:t,onOpenDevice:n,showSetup:!1})}]:e===`broker`?[{id:`connections`,title:R.t(`admin.system.integrations.connections`,`Connections`),icon:f,content:i(de,{addonId:t})}]:[]}function Me({processState:e}){let{state:t,label:n}=ge(e);return i(M,{variant:t===`ok`?`success`:t===`error`?`danger`:`default`,className:`${X} capitalize`,children:n})}function Ne({kind:e,addonId:t}){return e===`broker`?i(Pe,{addonId:t}):e===`device-export`?i(Fe,{addonId:t}):null}function Pe({addonId:e}){let{t}=z(),{data:n}=A({addonId:e},{refetchInterval:$,retry:!1}),r=S.safeParse(n);if(!r.success)return null;let{brokerCount:a,connectedCount:o}=r.data;return i(M,{variant:`info`,className:X,children:o>0?t(`system.connectivity.connectionsConnected`,{count:a,connected:o}):t(`system.connectivity.connections`,{count:a})})}function Fe({addonId:e}){let{t}=z(),{data:n}=se({addonId:e},{refetchInterval:$,retry:!1}),r=C.safeParse(n);if(!r.success)return null;let{linkState:a,exposedDeviceCount:o}=r.data;return i(M,{variant:a===`linked`?`success`:a===`error`?`danger`:`default`,className:X,children:t(`admin.system.integrations.exposed`,`{{linkState}} · {{exposedDeviceCount}} exposed`,{linkState:a,exposedDeviceCount:o})})}export{Ae as IntegrationsPage};
1
+ import{C as e,J as t,K as n,R as r,S as i,V as a,Y as o,a as s,et as c,o 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-CEyXHAdg.js";import{Dn as f,Fn as p,Ht as m,Pn as h,Vn as g,bt as _,cr as v,dt as ee,fr as y,hn as b,st as x}from"./player-overlays-gMD_rhHz.js";import{tn as S,va as te,yi as C}from"./client-Btf9JC4a.js";import{g as w,s as T}from"./video-BnPjevi_.js";import{t as E}from"./log-in-CHoY0fr_.js";import{t as D}from"./monitor-smartphone-dysQUSro.js";import{t as ne}from"./recycle-BA7-S0W8.js";import{At as O,Dn as re,Ma as k,Nr as ie,Oa as A,Pa as j,ci as M,dr as N,ei as P,gt as ae,ka as F,kt as I,mt as oe,no as se,zi as L}from"./src-D55o373U.js";import{t as R}from"./i18n-Bz5ob6rD.js";import{t as z}from"./useTranslation-BJr-n0es.js";import{T as B,_r as V,g as H,i as U,yr as W}from"./index-DhFn-OXx.js";import{t as G}from"./AdminSectionedPage-C2tP0k-6.js";import{n as K,r as q,t as J}from"./BrokerEditorDialog-DqKS37Rv.js";import{t as ce}from"./NodeAddonsSettingsPanel-09f8jHVS.js";import{n as Y,r as X,t as le}from"./IntegrationHub-CBRrUUwz.js";c();var Z={connected:`success`,connecting:`warning`,disconnected:`default`,"auth-failed":`danger`,unreachable:`danger`,error:`danger`};function Q({status:e}){return i(M,{variant:Z[e],className:`text-[10px]`,children:e})}function ue({broker:t,interactiveConnectPath:n,interactiveDisconnectPath:r,kindLabel:a,onEdit:s}){let{t:c}=z(),u=l(),d=x(),[f,p]=o(null),h=j({onSuccess:e=>p(e.ok?{ok:!0}:{ok:!1,error:e.error}),onError:e=>p({ok:!1,error:e instanceof Error?e.message:String(e)})}),v=k({onSuccess:()=>{u.invalidateQueries({queryKey:[[`broker`,`list`]]})}}),ee=async()=>{await d({title:c(`brokers.brokerManager.deleteBroker`,`Delete broker`),message:c(`brokers.brokerManager.deleteBrokerIntegrationsThatDepend`,`Delete broker "{{name}}"? Integrations that depend on it will stop working.`,{name:t.name}),confirmLabel:c(`common.delete`,`Delete`),variant:`danger`})&&v.mutate({id:t.id,addonId:t.addonId})},b=n!==void 0&&n.length>0&&t.status!==`connected`,S=r!==void 0&&r.length>0&&t.status===`connected`;return e(`tr`,{className:`border-b border-border last:border-0`,children:[i(`td`,{className:`px-3 py-2 text-xs text-foreground font-medium`,children:t.name}),i(`td`,{className:`px-3 py-2 text-xs text-foreground-subtle`,children:a}),e(`td`,{className:`px-3 py-2`,children:[i(Q,{status:t.status}),f&&i(`span`,{className:`ml-2 text-[10px] ${f.ok?`text-success`:`text-danger`}`,children:f.ok?`OK`:f.error??c(`common.failedWord`)})]}),i(`td`,{className:`px-3 py-2`,children:e(`div`,{className:`flex items-center justify-end gap-1.5`,children:[b&&e(P,{variant:`primary`,size:`sm`,onClick:()=>{H(n,t.id,()=>{u.invalidateQueries({queryKey:[[`broker`,`list`]]})})},title:c(`brokers.brokerManager.signInOpensAPopup`,`Sign in — opens a popup that closes when done`),children:[i(E,{className:`h-3 w-3`}),` `,c(`brokers.brokerManager.signIn`)]}),S&&e(P,{variant:`outline`,size:`sm`,onClick:()=>{H(r,t.id,()=>{u.invalidateQueries({queryKey:[[`broker`,`list`]]})})},title:c(`brokers.brokerManager.signOutClearsTheLinked`,`Sign out — clears the linked Google account on this broker`),children:[i(T,{className:`h-3 w-3`}),` `,c(`brokers.brokerManager.signOut`)]}),e(P,{variant:`outline`,size:`sm`,onClick:()=>h.mutate({id:t.id,addonId:t.addonId}),disabled:h.isPending,title:c(`brokers.brokerManager.testConnection`,`Test connection`),children:[h.isPending?i(y,{className:`h-3 w-3 animate-spin`}):i(_,{className:`h-3 w-3`}),c(`brokers.brokerManager.test`,`Test`)]}),e(P,{variant:`outline`,size:`sm`,onClick:()=>s(t),title:c(`common.edit`,`Edit`),children:[i(g,{className:`h-3 w-3`}),` `,c(`common.edit`)]}),e(P,{variant:`outline`,size:`sm`,className:`border-danger/40 text-danger hover:bg-danger/10`,onClick:()=>{ee()},disabled:v.isPending,title:c(`common.delete`,`Delete`),children:[v.isPending?i(y,{className:`h-3 w-3 animate-spin`}):i(m,{className:`h-3 w-3`}),c(`common.delete`,`Delete`)]})]})})]})}function de({addonId:t}={}){let{t:r}=z(),a=F({}),s=n(()=>K(a.data).filter(e=>t===void 0||e.addonId===t),[a.data,t]),[c,l]=o(!1),[u,d]=o(null),{options:f}=q(t===void 0?{}:{addonId:t}),m=n(()=>new Map(f.map(e=>[e.kind,e.label])),[f]),h=n(()=>{let e=new Map;for(let t of f)e.has(t.kind)||e.set(t.kind,{...t.interactiveConnectPath===void 0?{}:{connect:t.interactiveConnectPath},...t.interactiveDisconnectPath===void 0?{}:{disconnect:t.interactiveDisconnectPath}});return e},[f]);return e(`div`,{className:`space-y-3`,children:[i(`div`,{className:`flex items-center justify-end`,children:e(P,{variant:`primary`,size:`sm`,onClick:()=>l(!0),disabled:f.length===0,title:f.length===0?r(`brokers.brokerManager.noBrokerProvidersAvailable`,`No broker providers available`):void 0,children:[i(p,{className:`h-3.5 w-3.5`}),` `,r(`brokers.brokerManager.addBroker`)]})}),i(`div`,{className:`rounded-lg border border-border bg-surface overflow-x-auto`,children:e(`table`,{className:`w-full min-w-[36rem] border-collapse`,children:[i(`thead`,{children:e(`tr`,{className:`border-b border-border bg-background/50`,children:[i(`th`,{className:`px-3 py-2 text-left text-[10px] font-semibold uppercase tracking-wider text-foreground-subtle`,children:r(`brokers.brokerManager.name`,`Name`)}),i(`th`,{className:`px-3 py-2 text-left text-[10px] font-semibold uppercase tracking-wider text-foreground-subtle`,children:r(`brokers.brokerManager.kind`,`Kind`)}),i(`th`,{className:`px-3 py-2 text-left text-[10px] font-semibold uppercase tracking-wider text-foreground-subtle`,children:r(`brokers.brokerManager.status`,`Status`)}),i(`th`,{className:`px-3 py-2 text-right text-[10px] font-semibold uppercase tracking-wider text-foreground-subtle`,children:r(`brokers.brokerManager.actions`,`Actions`)})]})}),e(`tbody`,{children:[a.isLoading&&i(`tr`,{children:e(`td`,{colSpan:4,className:`px-3 py-6 text-center text-xs text-foreground-subtle`,children:[i(y,{className:`inline h-4 w-4 animate-spin`}),` `,r(`brokers.brokerManager.loadingBrokers`)]})}),a.isError&&i(`tr`,{children:e(`td`,{colSpan:4,className:`px-3 py-4 text-center text-xs text-danger`,children:[r(`brokers.brokerManager.failedToLoadBrokers`,`Failed to load brokers:`),` `,a.error instanceof Error?a.error.message:r(`brokers.brokerManager.unknownError`,`Unknown error`)]})}),!a.isLoading&&!a.isError&&s.length===0&&i(`tr`,{children:i(`td`,{colSpan:4,className:`px-3 py-6 text-center text-xs text-foreground-subtle`,children:r(`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 i(ue,{broker:e,...t?.connect===void 0?{}:{interactiveConnectPath:t.connect},...t?.disconnect===void 0?{}:{interactiveDisconnectPath:t.disconnect},kindLabel:m.get(e.kind)??e.kind,onEdit:d},e.id)})]})]})}),c&&i(J,{...t===void 0?{}:{addonId:t},onClose:()=>l(!1),onSaved:()=>l(!1)}),u&&i(J,{broker:u,onClose:()=>d(null),onSaved:()=>d(null)})]})}function fe(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 pe(e){let t=e,n=t?.manifest;if(n?.id===void 0)return null;let r=(n.capabilities??[]).map(fe).filter(e=>e!==null);return{addonId:n.id,displayName:n.packageDisplayName??n.name??n.id,capNames:r,processState:t?.process?.state??null}}function me(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 ge(e){switch(e){case`running`:return{state:`ok`,label:R.t(`helpers.connectivityModel.running`)};case`crashed`:case`failed`:return{state:`error`,label:e};case`stopped`:case`disabled`:return{state:`off`,label:R.t(`helpers.connectivityModel.stopped`)};default:return{state:`unknown`,label:e??R.t(`common.unknownWord`)}}}c();var _e=[`wasteCollections`,`listSources`],ve=[`wasteCollections`,`listCountries`];function ye(e){return e instanceof Error?e.message:String(e)}function be(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,`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 Se(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 Ce(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 we(e,t,n){return{sections:[{id:`picker`,title:R.t(`system.wasteSettingsSources.countryService`,`Country & service`),columns:2,fields:[{type:`select`,key:`countryId`,label:R.t(`system.wasteSettingsSources.country`,`Country`),options:[{value:``,label:R.t(`system.wasteSettingsSources.selectCountry`,`Select country…`)},...e.map(e=>({value:e.id,label:e.label}))]},{type:`select`,key:`serviceId`,label:R.t(`system.wasteSettingsSources.service`,`Service`),options:[{value:``,label:n===``?R.t(`system.wasteSettingsSources.pickACountryFirst`,`Pick a country first`):R.t(`system.wasteSettingsSources.selectService`,`Select service…`)},...t.map(e=>({value:e.id,label:e.label}))]}]}]}}function Te({addonId:c,capName:f}){let{t:h}=z(),g=ee(),_=l(),v=x(),y=oe({editKey:`wasteEdit`,newKey:`wasteNew`}),[b,S]=o(!1),[te,C]=o(null),[w,T]=o({countryId:``,serviceId:``}),[E,D]=o({label:h(`system.wasteSettingsSources.newSource`,`New source`),enabled:!0}),O=t(null),k=typeof w.countryId==`string`?w.countryId:``,A=typeof w.serviceId==`string`?w.serviceId:``,j=r((e,t)=>g.trpcClient.addons.custom.mutate({addonId:c,action:e,input:t}),[c,g]),F=s({queryKey:[..._e,c],queryFn:async()=>xe(await j(`listSources`,{}))}),I=s({queryKey:[...ve,c],queryFn:async()=>Se(await j(`listCountries`,{}))}),se=s({queryKey:[`wasteCollections`,`listServices`,c,k],enabled:k!==``,queryFn:async()=>Ce(await j(`listServices`,{countryId:k}))}),L=s({queryKey:[`wasteCollections`,`serviceFormSchema`,c,A],enabled:A!==``,queryFn:async()=>j(`serviceFormSchema`,{serviceId:A})}),R=F.data??[],B=I.data??[],V=se.data??[],H=be(L.data)?L.data:void 0,U=n(()=>we(B,k===``?[]:V,k),[B,V,k]),W=y.state,G=W.mode===`edit`?R.find(e=>e.id===W.id)??null:null;a(()=>{if(y.state.mode===`edit`&&G!==null){let e=`edit:${G.id}`;if(O.current===e)return;O.current=e,C(null),T({countryId:G.countryId??``,serviceId:G.serviceId??``}),D(G.formValues===void 0?{label:G.label,enabled:G.enabled}:{...G.formValues});return}if(y.state.mode===`new`){if(O.current===`new`)return;O.current=`new`,C(null),T({countryId:``,serviceId:``}),D({label:h(`system.wasteSettingsSources.newSource`,`New source`),enabled:!0})}},[G,y.state]),a(()=>{if(y.state.mode!==`new`||A===``)return;let e=V.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,V]);let K=r(e=>{T(t=>{let n=typeof e.countryId==`string`?e.countryId:``;return n===(typeof t.countryId==`string`?t.countryId:``)?e:{countryId:n,serviceId:``}})},[]),q=r(async()=>{await _.invalidateQueries({queryKey:_e})},[_]),J=u({mutationFn:async e=>j(`deleteSource`,{id:e}),onSuccess:async()=>q()}),Y=r(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 J.mutateAsync(e.id),y.state.mode===`edit`&&y.state.id===e.id&&(y.close(),O.current=null))},[v,J,y,h]),X=r(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=G?.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 q(),y.close(),O.current=null}catch(e){C(ye(e))}finally{S(!1)}},[j,G,y,E,q,A]),le=n(()=>[{key:`label`,header:h(`system.wasteSettingsSources.label`,`Label`),sortValue:e=>e.label,render:e=>i(`span`,{className:`text-sm text-foreground`,children:e.label})},{key:`module`,header:h(`system.wasteSettingsSources.module`,`Module`),sortValue:e=>e.module,render:e=>i(`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=>i(M,{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=>i(P,{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(),Y(e)},children:i(m,{className:`h-3.5 w-3.5 text-danger`})})}],[Y,h]),Z=y.state.mode===`new`,Q=Z||G!==null,ue=`${A}:${Z?`new`:G?.id??`closed`}`;return e(`div`,{className:`flex min-h-0 flex-col gap-4`,"data-testid":`waste-settings-sources`,children:[e(`div`,{className:`flex flex-wrap items-center justify-between gap-2`,children:[i(`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.`)}),e(P,{type:`button`,size:`sm`,"data-testid":`waste-sources-add`,onClick:()=>y.openNew(),children:[i(p,{className:`h-3.5 w-3.5`}),h(`system.wasteSettingsSources.addSource`,`Add source`)]})]}),F.isError?i(`p`,{className:`text-sm text-danger`,children:h(`system.wasteSettingsSources.couldNotLoadSources`,`Could not load sources.`)}):null,F.isPending?i(ie,{className:`h-32 w-full`}):i(re,{columns:le,rows:R,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`}}),i(ae,{open:Q,onClose:()=>{y.close(),C(null),O.current=null},title:Z?h(`system.wasteSettingsSources.addWasteSource`,`Add waste source`):h(`system.wasteSettingsSources.edit`,`Edit {{value1}}`,{value1:G?.label??`source`}),icon:ne,width:`xl`,testId:`waste-source-editor`,error:te,footer:i(P,{type:`button`,size:`sm`,disabled:b||A===``,onClick:()=>void X(),children:b?h(`system.wasteSettingsSources.saving`,`Saving…`):h(`common.save`,`Save`)}),children:Q?e(d,{children:[i(`div`,{"data-testid":`waste-country-service`,children:i(N,{schema:U,values:w,onChange:K},`picker:${k}:${V.length}`)}),A!==``&&H!==void 0?i(N,{schema:H,values:E,onChange:D,bare:!0},ue):A!==``&&L.isPending?i(`p`,{className:`text-sm text-foreground-muted`,children:h(`system.wasteSettingsSources.loadingFields`,`Loading fields…`)}):i(`p`,{className:`text-sm text-foreground-muted`,children:h(`system.wasteSettingsSources.chooseACountryAndService`,`Choose a country and service to see the required fields.`)})]}):null}),i(ce,{nodeId:`hub`,addonIds:[c],level:`global`,capability:f,hideSectionChrome:!0})]})}c();var $=1e4,Ee={"device-export":`exporters`,exporters:`exporters`,email:`email`,broker:`brokers`,brokers:`brokers`,"message-brokers":`brokers`,calendar:`calendars`,calendars:`calendars`,"calendar-source":`calendars`},De=[{sectionId:`exporters`,kind:`device-export`,labelKey:`system.connectivity.exporters`,icon:b,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:f,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 Oe(t,n,r,a){let o=me(S,t.kind),s=n.flatMap(n=>{let a=he(n,o);if(a===null)return[];let s=ge(n.processState);return[{id:n.addonId,name:n.displayName,fallbackIcon:t.icon,state:s.state,stateLabel:s.label,render:()=>i(Y,{addonId:n.addonId,displayName:n.displayName,capName:a,isActive:n.processState===`running`,badges:e(d,{children:[i(Me,{processState:n.processState}),i(Ne,{kind:t.kind,addonId:n.addonId})]}),lead:t.kind===`device-export`?i(O,{addonId:n.addonId}):void 0,panels:je(t.kind,n.addonId,e=>r(`/devices/${e}`)),settingsContent:n.addonId===`waste-collections`?i(Te,{addonId:n.addonId,capName:a}):void 0})}]});return{id:t.sectionId,label:a(t.labelKey),entries:s,install:{capability:o[0]??t.kind,label:a(t.installLabelKey)}}}function ke({descriptor:e,rows:t,isLoading:r}){let{t:a}=z(),o=V(),s=n(()=>Oe(e,t,o,a),[e,t,o,a]);return i(le,{embedded:!0,icon:e.icon,title:a(e.labelKey),subtitle:null,groups:[s],isLoading:r,emptyTitle:a(e.emptyTitleKey),emptyDescription:a(e.emptyDescriptionKey)})}function Ae(){let{t:e}=z(),t=L(void 0,{refetchInterval:$}),[r,o]=W(),s=B(`/system/integrations`,{t:e,isAdmin:!0})??{icon:h,title:e(`admin.system.integrations.connectivity`,`Connectivity`)};a(()=>{let e=r.get(`tab`);if(e===null)return;let t=Ee[e];t===void 0||t===e||o(e=>{let n=new URLSearchParams(e);return n.set(`tab`,t),n},{replace:!0})},[r,o]);let c=n(()=>(t.data??[]).map(pe).filter(e=>e!==null),[t.data]),l=n(()=>De.map(n=>({id:n.sectionId,label:e(n.labelKey),ownedParams:U,content:i(ke,{descriptor:n,rows:c,isLoading:t.isLoading})})),[t.isLoading,c,e]);return i(G,{icon:s.icon,title:s.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:l})}function je(e,t,n){return e===`device-export`?[{id:`devices`,title:R.t(`admin.system.integrations.devices`,`Devices`),icon:D,placement:`end`,content:i(I,{addonId:t,onOpenDevice:n,showSetup:!1})}]:e===`broker`?[{id:`connections`,title:R.t(`admin.system.integrations.connections`,`Connections`),icon:f,content:i(de,{addonId:t})}]:[]}function Me({processState:e}){let{state:t,label:n}=ge(e);return i(M,{variant:t===`ok`?`success`:t===`error`?`danger`:`default`,className:`${X} capitalize`,children:n})}function Ne({kind:e,addonId:t}){return e===`broker`?i(Pe,{addonId:t}):e===`device-export`?i(Fe,{addonId:t}):null}function Pe({addonId:e}){let{t}=z(),{data:n}=A({addonId:e},{refetchInterval:$,retry:!1}),r=te.safeParse(n);if(!r.success)return null;let{brokerCount:a,connectedCount:o}=r.data;return i(M,{variant:`info`,className:X,children:o>0?t(`system.connectivity.connectionsConnected`,{count:a,connected:o}):t(`system.connectivity.connections`,{count:a})})}function Fe({addonId:e}){let{t}=z(),{data:n}=se({addonId:e},{refetchInterval:$,retry:!1}),r=C.safeParse(n);if(!r.success)return null;let{linkState:a,exposedDeviceCount:o}=r.data;return i(M,{variant:a===`linked`?`success`:a===`error`?`danger`:`default`,className:X,children:t(`admin.system.integrations.exposed`,`{{linkState}} · {{exposedDeviceCount}} exposed`,{linkState:a,exposedDeviceCount:o})})}export{Ae as IntegrationsPage};