@camstack/addon-admin-ui 1.2.488 → 1.2.490

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 (141) hide show
  1. package/dist/assets/{AddonAssetIcon-D0sLOBuE.js → AddonAssetIcon-D-9BDtpk.js} +1 -1
  2. package/dist/assets/Addons-51TvRwwb.js +5 -0
  3. package/dist/assets/{AdminPage-Bm98o4hS.js → AdminPage-CdT4_4OP.js} +1 -1
  4. package/dist/assets/{AdminSectionedPage-DJf3yj1e.js → AdminSectionedPage-p7IoxWdQ.js} +1 -1
  5. package/dist/assets/AiProfiles-WM5GT1_g.js +3 -0
  6. package/dist/assets/BrokerEditorDialog-C9R9WJ5j.js +1 -0
  7. package/dist/assets/Build-DmG4Bqo3.js +40 -0
  8. package/dist/assets/{Calendars-B6wuMidY.js → Calendars-CNjiX8AQ.js} +1 -1
  9. package/dist/assets/Cluster-Cs8jI_us.js +1 -0
  10. package/dist/assets/{CompositionBlockEditor-DJDcpaAM.js → CompositionBlockEditor-DM8TH06u.js} +1 -1
  11. package/dist/assets/{CompositionEditorPage-2D6sSx-T.js → CompositionEditorPage-7ZGq3V5I.js} +1 -1
  12. package/dist/assets/Data-B4v6EPpd.js +2 -0
  13. package/dist/assets/DeviceDetail-DN1pAPt3.js +2 -0
  14. package/dist/assets/{DeviceDoActionFields-BIglpx6B.js → DeviceDoActionFields-Bug4MwQJ.js} +1 -1
  15. package/dist/assets/{Devices-B_qA6OPU.js → Devices-KmaQ-LCF.js} +1 -1
  16. package/dist/assets/{EmbedPlayerPage-D4WZcOrL.js → EmbedPlayerPage-BY2XhLHQ.js} +1 -1
  17. package/dist/assets/HelperWizard-Drtw6fE7.js +2 -0
  18. package/dist/assets/History-Cki8lIL-.js +1 -0
  19. package/dist/assets/{Identity-CpsGUQUL.js → Identity-BtyNBp3O.js} +1 -1
  20. package/dist/assets/IntegrationDetail-CDuDFjTz.js +1 -0
  21. package/dist/assets/IntegrationHub-MVJMjpE_.js +1 -0
  22. package/dist/assets/Integrations-DK3VNmwY.js +1 -0
  23. package/dist/assets/Integrations-DylF9Lra.js +1 -0
  24. package/dist/assets/{Library-B5hJS9Eu.js → Library-CThT-nC_.js} +1 -1
  25. package/dist/assets/Locations-hoUXKzbY.js +3 -0
  26. package/dist/assets/{Logs-BMGBLu9D.js → Logs-CuZNCBMH.js} +1 -1
  27. package/dist/assets/{MaskShapeCanvas-C1WSjh5s.js → MaskShapeCanvas-H8Uoh2Rl.js} +1 -1
  28. package/dist/assets/{MotionZonesSettings-BB6LidaW.js → MotionZonesSettings-D0q6jZRy.js} +1 -1
  29. package/dist/assets/MyAccess-DJ_NSf4z.js +2 -0
  30. package/dist/assets/Network-D2CWuowx.js +1 -0
  31. package/dist/assets/{NodeAddonsSettingsPanel-SKEgEbfP.js → NodeAddonsSettingsPanel-ByFvh4Ya.js} +1 -1
  32. package/dist/assets/Notifications-PhkAhPCl.js +1 -0
  33. package/dist/assets/Pipeline-CezBMByn.js +1 -0
  34. package/dist/assets/{PrivacyMaskSettings-CSdKuS75.js → PrivacyMaskSettings-fx9Jt4aq.js} +1 -1
  35. package/dist/assets/Recordings-DR4bIAm9.js +1 -0
  36. package/dist/assets/{ScanNetworkModal-DzV87kuW.js → ScanNetworkModal-BqRIkfLs.js} +1 -1
  37. package/dist/assets/{SceneMonitorEditor-ucsduhsM.js → SceneMonitorEditor-B1yZ0Eu1.js} +1 -1
  38. package/dist/assets/SessionsList-BgP3ZBPl.js +2 -0
  39. package/dist/assets/{Showroom-Bl7Xw5HQ.js → Showroom-H799SxeX.js} +1 -1
  40. package/dist/assets/{System-BwIT8r3c.js → System-CAQNJeVw.js} +1 -1
  41. package/dist/assets/{Terminal-DHnbg7SD.js → Terminal-CJDf-QFe.js} +5 -5
  42. package/dist/assets/{Viewer-ClMEneNi.js → Viewer-bvftBy-T.js} +1 -1
  43. package/dist/assets/{_virtual_mf-localSharedImportMap___mfe_internal__admin_ui_host-CcFWmBqL.js → _virtual_mf-localSharedImportMap___mfe_internal__admin_ui_host-B7Juvi98.js} +1 -1
  44. package/dist/assets/{addon-icons-context-CrIg7jRp.js → addon-icons-context-CZDtt3fG.js} +1 -1
  45. package/dist/assets/{archive-DSecC29S.js → archive-C0MjJGmq.js} +1 -1
  46. package/dist/assets/{assignment-candidates-C23w5MN2.js → assignment-candidates--urRZfaK.js} +1 -1
  47. package/dist/assets/{authed-media-DaZ7aBed.js → authed-media-CQZkp0uZ.js} +1 -1
  48. package/dist/assets/{bell-off-kKEnaAlY.js → bell-off-B11l1KzS.js} +1 -1
  49. package/dist/assets/{board-model-GgYmAssp.js → board-model-BnBpDyVJ.js} +1 -1
  50. package/dist/assets/{boxes-D29FuJd_.js → boxes-B-VqzPaN.js} +1 -1
  51. package/dist/assets/circle-slash-DpPZDUlw.js +1 -0
  52. package/dist/assets/client-BXtMEX7J.js +358 -0
  53. package/dist/assets/{cloud-upload-CNHrN4UO.js → cloud-upload--LDpDxLV.js} +1 -1
  54. package/dist/assets/crop-8n46w7Ev.js +1 -0
  55. package/dist/assets/{device-integration-icon-CL_G93QX.js → device-integration-icon-DcyxPquH.js} +1 -1
  56. package/dist/assets/device-picker-model-BQTVmtuR.js +1 -0
  57. package/dist/assets/dist-DhXv40Tk.js +358 -0
  58. package/dist/assets/{dist-pyNtUJBC.js → dist-oBKSec40.js} +1 -1
  59. package/dist/assets/{eraser-DQdA4r-4.js → eraser-DolDpTaf.js} +1 -1
  60. package/dist/assets/{format-B7ptHU_u.js → format-pVRrtm44.js} +1 -1
  61. package/dist/assets/{hard-drive-download-BWtxkXEP.js → hard-drive-download-Dxd7SImQ.js} +1 -1
  62. package/dist/assets/{hostInit-r7ojSb2_.js → hostInit-CXxiiIY9.js} +1 -1
  63. package/dist/assets/i18n-CI5vBtLY.js +1 -0
  64. package/dist/assets/{icons-CeHJ12H1.js → icons-BXkvTO6P.js} +1 -1
  65. package/dist/assets/index-DTd1apaT.css +2 -0
  66. package/dist/assets/{index-CizVDZHi.js → index-T3VEitv1.js} +3 -3
  67. package/dist/assets/{key-ibd36DX6.js → key-BBVN8veo.js} +1 -1
  68. package/dist/assets/{key-round-Cx5S95mB.js → key-round-DFWP4tGQ.js} +1 -1
  69. package/dist/assets/{layers-f2rCYTNI.js → layers-VCbN12xK.js} +1 -1
  70. package/dist/assets/{linked-devices-model-B5DZflLR.js → linked-devices-model-BuZsJyfK.js} +1 -1
  71. package/dist/assets/{list-ordered-DVEuSX72.js → list-ordered-Bnu2an56.js} +1 -1
  72. package/dist/assets/{location-owned-usage-DRF9VnKV.js → location-owned-usage-CWqIQnLv.js} +1 -1
  73. package/dist/assets/{log-in-YSzSSnpb.js → log-in-QKfmNI9M.js} +1 -1
  74. package/dist/assets/{memory-stick-BxkFX9Lp.js → memory-stick-ByO8UQ_K.js} +1 -1
  75. package/dist/assets/{message-square-plus-CReLm1AI.js → message-square-plus-DiTP4R_X.js} +1 -1
  76. package/dist/assets/{mf-entry-bootstrap-0-96140f20.js → mf-entry-bootstrap-0-4541da62.js} +2 -2
  77. package/dist/assets/{mic-off-CzIbHCeE.js → mic-off-C0mR7Yh9.js} +1 -1
  78. package/dist/assets/{monitor-off-D6AnJas6.js → monitor-off-D4PWqGzI.js} +1 -1
  79. package/dist/assets/{monitor-smartphone-BYEnK_6t.js → monitor-smartphone-CfagfDx-.js} +1 -1
  80. package/dist/assets/mount-BQTVmtuR.js +1 -0
  81. package/dist/assets/{player-overlays-nQJCQERn.js → player-overlays-BiCGuJYq.js} +1 -1
  82. package/dist/assets/{recycle-CWMxz1Q3.js → recycle-By0RJmi2.js} +1 -1
  83. package/dist/assets/remoteEntry-QPteGTQh.js +1 -0
  84. package/dist/assets/{scan-eye-t_4fVxI4.js → scan-eye-BiviIx2-.js} +1 -1
  85. package/dist/assets/{scissors-DL5nVl1a.js → scissors-M9cnfGNe.js} +1 -1
  86. package/dist/assets/{search-x-CbPl9Xi3.js → search-x-BpDq9t4w.js} +1 -1
  87. package/dist/assets/{send-BQl_zLK4.js → send-CeinPhnc.js} +1 -1
  88. package/dist/assets/{settings-2-7F6aVC_u.js → settings-2-D03xdo5Y.js} +1 -1
  89. package/dist/assets/{sigma-kEBBYTCa.js → sigma-BZFLmOnk.js} +1 -1
  90. package/dist/assets/{speaker-CkI0pe60.js → speaker-BhDPU-6o.js} +1 -1
  91. package/dist/assets/src-BjL-Slsn.js +67 -0
  92. package/dist/assets/step-inspector-model-BIqRCy44.js +1 -0
  93. package/dist/assets/{table-2-Cukv2oib.js → table-2-CgTH2D0_.js} +1 -1
  94. package/dist/assets/{timer-reset-hysIbh2s.js → timer-reset-kr9YJtPF.js} +1 -1
  95. package/dist/assets/{ungroup-D4Nql8ck.js → ungroup-DfwG9mBj.js} +1 -1
  96. package/dist/assets/{unlink-DNVVxO6S.js → unlink-BPmdzYDS.js} +1 -1
  97. package/dist/assets/{usb-DNmhv4AW.js → usb-DXw4Me1_.js} +1 -1
  98. package/dist/assets/{use-scenes-feed-QajBxHOY.js → use-scenes-feed-B9V1zhs9.js} +1 -1
  99. package/dist/assets/{use-stationary-objects-AMw862tO.js → use-stationary-objects-ClCDS30T.js} +1 -1
  100. package/dist/assets/useEventInvalidation-BQTVmtuR.js +1 -0
  101. package/dist/assets/{useNodeUrlSelection-B-2x_sVg.js → useNodeUrlSelection-BWBjwQx2.js} +1 -1
  102. package/dist/assets/user-round-Uear1YP1.js +1 -0
  103. package/dist/assets/{user-x-DGZKKLZG.js → user-x-Dv1oqFyS.js} +1 -1
  104. package/dist/assets/{video-DEeXGFHo.js → video-C46Ugbpc.js} +1 -1
  105. package/dist/assets/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__admin_ui_host__remoteEntry-_hash_-Dpshj8Bv.js → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__admin_ui_host__remoteEntry-_hash_-Bi73_PFJ.js} +2 -2
  106. package/dist/index.html +10 -10
  107. package/dist/server/addon.js +21 -5
  108. package/package.json +1 -1
  109. package/dist/assets/Addons-CZCQrk7s.js +0 -5
  110. package/dist/assets/AiProfiles-evs8uf02.js +0 -3
  111. package/dist/assets/BrokerEditorDialog-B4IYR2V5.js +0 -1
  112. package/dist/assets/Build-eOPgiJkS.js +0 -40
  113. package/dist/assets/Cluster-BInnf_-U.js +0 -1
  114. package/dist/assets/Data-DqaIHJmW.js +0 -2
  115. package/dist/assets/DeviceDetail-CjwCeby2.js +0 -2
  116. package/dist/assets/HelperWizard-DpSct7dY.js +0 -2
  117. package/dist/assets/History-Ce6Ogsq9.js +0 -1
  118. package/dist/assets/IntegrationDetail-CBkpemj6.js +0 -1
  119. package/dist/assets/IntegrationHub-HoJLco7C.js +0 -1
  120. package/dist/assets/Integrations-DCVw5Nwp.js +0 -1
  121. package/dist/assets/Integrations-Q-XZjb4J.js +0 -1
  122. package/dist/assets/Locations-C4_IvvDp.js +0 -3
  123. package/dist/assets/MyAccess-Cj2tBcDx.js +0 -2
  124. package/dist/assets/Network-C2KtyX-M.js +0 -1
  125. package/dist/assets/Notifications-DLBWNg7M.js +0 -1
  126. package/dist/assets/Pipeline-ByR1YehD.js +0 -1
  127. package/dist/assets/Recordings-DGVoXt04.js +0 -1
  128. package/dist/assets/SessionsList-Cq-5x1H5.js +0 -2
  129. package/dist/assets/circle-slash-BEdaE_jf.js +0 -1
  130. package/dist/assets/client-CdHPjeIs.js +0 -358
  131. package/dist/assets/crop-E8rhIxyE.js +0 -1
  132. package/dist/assets/device-picker-model-Di8k2vXt.js +0 -1
  133. package/dist/assets/dist-CMh2DitE.js +0 -358
  134. package/dist/assets/i18n-CbVhWDGQ.js +0 -1
  135. package/dist/assets/index-D4id__eL.css +0 -2
  136. package/dist/assets/mount-Di8k2vXt.js +0 -1
  137. package/dist/assets/remoteEntry-CIvYUfKV.js +0 -1
  138. package/dist/assets/src-DVuhwnP3.js +0 -67
  139. package/dist/assets/step-inspector-model-CtgWliQT.js +0 -1
  140. package/dist/assets/useEventInvalidation-Di8k2vXt.js +0 -1
  141. package/dist/assets/user-round-I0Uty2ao.js +0 -1
@@ -1,2 +0,0 @@
1
- import{C as e,J as t,K as n,R as r,S as i,V as a,Y as o,et as s,x as c}from"./_virtual_mf___mfe_internal__admin_ui_host__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-CEyXHAdg.js";import{An as l,Hi as u,It as d,Si as f,T as p,Yn as m,dt as h,kr as g,na as _,ot as v,ut as y,xi as b,zn as x}from"./player-overlays-nQJCQERn.js";import{Ai as S,An as C,Bi as w,Bn as T,Cn as E,Di as D,Dn as O,Ei as k,En as A,Fi as j,Fn as M,Gn as N,Ii as P,In as F,Ji as I,Jn as L,Kn as R,Li as ee,Ln as z,Mi as te,Oi as ne,On as re,Pi as ie,Qi as ae,Qt as oe,Ri as se,Rn as ce,Si as le,Sn as ue,Ti as de,Tn as fe,Vi as pe,Wt as me,Xi as he,Xn as ge,Yi as _e,Yn as ve,Zi as ye,Zt as be,_i as B,di as xe,en as Se,gi as Ce,hi as we,ji as Te,jn as Ee,ki as De,kn as Oe,li as ke,mi as Ae,na as je,oi as Me,pn as Ne,qn as Pe,rr as Fe,tr as Ie,ui as Le,vi as Re,wi as ze,wn as Be,yi as Ve,zi as He,zn as Ue}from"./client-CdHPjeIs.js";import{t as We}from"./boxes-D29FuJd_.js";import{n as Ge,r as Ke,t as qe}from"./sigma-kEBBYTCa.js";import{Ar as Je,Cd as Ye,Er as V,Fn as Xe,Fr as Ze,In as Qe,Ir as $e,Ln as et,Md as tt,Mr as nt,Mt as rt,Nr as it,Pr as at,Qo as ot,Qr as st,R as ct,So as lt,Td as ut,Vr as dt,Wn as ft,Zo as pt,_r as mt,bs as ht,dd as H,di as gt,ei as U,fd as _t,fi as vt,fr as yt,gr as bt,jr as xt,mi as St,mr as Ct,od as W,pi as wt,pr as Tt,s as Et,si as Dt,vr as Ot,xn as kt,xo as At,xt as jt,zr as Mt}from"./src-DVuhwnP3.js";import{t as G}from"./i18n-CbVhWDGQ.js";import{t as K}from"./useTranslation-BJr-n0es.js";import{dr as Nt,h as Pt,ur as Ft}from"./index-CizVDZHi.js";import{n as It}from"./assignment-candidates-C23w5MN2.js";s();function Lt({id:e,...t}){return i(kt,{headingId:`customize-${e}`,...t})}function Rt(e,t){if(e.status===`error`)return{kind:`unknown`,reason:e.error?.message??G.t(`helpers.customize.requestFailed`)};let n=e.data;return e.status===`pending`||n===void 0?{kind:`pending`}:{kind:`known`,value:t(n)}}function zt(e,t){let n=tt.useQueries(n=>e.map(e=>n.deviceManager.listDeviceIdsByCaps({capNames:[e]},{enabled:t})));return It(e.map((e,t)=>{let r=n[t];return{cap:e,query:r===void 0?{status:`pending`}:{status:r.status,data:r.data,error:r.error===null?null:{message:r.error.message}}}}))}function Bt(e,t){let n=rt(e,t);return n.kind===`resolved`?n.integration.name:null}function Vt(e){let t=lt({projection:`slim`},{enabled:e}),{data:r}=ht(void 0,{enabled:e}),i=t.error===null||t.error===void 0?null:t.error.message;return n(()=>Rt({status:t.status,data:t.data,error:i===null?null:{message:i}},e=>e.map(e=>({id:e.id,name:e.name,addonId:e.addonId,stableId:e.stableId,type:e.type,location:e.location,isCamera:e.isCamera,integration:Bt(e,r),parentDeviceId:e.parentDeviceId,primaryChildEntityId:e.primaryChildEntityId??null,role:e.role??null}))),[t.status,t.data,i,r])}function Ht(e){let t=e?.trim()??``;return t.length>0?t:G.t(`helpers.customize.requestFailed`)}function Ut(e){let t=e.data;if(t!==void 0){if(t.state===`not-loaded`)return{kind:`not-loaded`,reason:t.reason};if(t.view===null)return{kind:`none`};let e=Me(t.view.block);return e===null?{kind:`unknown`,reason:G.t(`helpers.customizationRead.notAComposition`,{id:t.view.block.id})}:{kind:`present`,view:t.view,composition:e}}return e.status===`pending`?{kind:`pending`}:e.status===`error`?{kind:`unknown`,reason:Ht(e.error?.message)}:{kind:`pending`}}function q(e){return e.kind===`present`?e.composition:null}var Wt={lastChangedAt:{en:`Last change`,it:`Ultima variazione`},lastFetchedAt:{en:`Last update`,it:`Ultimo aggiornamento`},lastDetectedAt:{en:`Last detection`,it:`Ultimo rilevamento`},lastPressedAt:{en:`Last press`,it:`Ultima pressione`},pressCountSinceStart:{en:`Press count`,it:`Conteggio pressioni`},since:{en:`Since`,it:`Da`}};function Gt(e,t){return t.startsWith(`it`)?e.it:e.en}function Kt(e){if(!(`unit`in e))return;let t=e.unit;return typeof t==`string`&&t.length>0?t:void 0}function qt(e,t){let n=Ne[e]?.noun;return n===void 0?e.split(`-`).filter(e=>e.length>0).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(` `):Gt(n,t)}function J(e,t,n){let r=Ne[e]?.state?.find(e=>e.field===t);if(r!==void 0){let e=Gt(r.label,n),t=Kt(r);return t===void 0?e:`${e} (${t})`}let i=Wt[t];return i===void 0?t:Gt(i,n)}function Jt(e){return Se.find(t=>t.name===e)}function Yt(e){return e===`lastFetchedAt`||e.endsWith(`At`)}function Xt(e){let t=E(e.role);if(t===null||Jt(t)?.status===void 0)return null;let n={};return{target:{kind:`new`,type:e.type,...e.role===null?{}:{role:e.role}},features:[{kind:`fields`,cap:t,fields:n}]}}function Zt(e){return e===null?`incomplete`:ue(Le(e,{lookupCap:ke(Se),sources:new Map,self:null,blockId:null,target:null,peers:[]}).problems)}function Qt(e,t){let n=Jt(e);return n?.status===void 0?[]:Ve(n.status.schema).filter(e=>!Yt(e)&&!t.has(e))}function Y(e,t,n){let r=e?.features??[],i=r.findIndex(e=>e.cap===n.cap);return{target:e?.target??{kind:`existing`,device:t},features:i===-1?[...r,n]:r.map((e,t)=>t===i?n:e)}}function $t(e,t){let n=e.features.filter(e=>e.cap!==t);return n.length===0?null:{target:e.target,features:n}}function X(e,t){let n=e?.features.find(e=>e.cap===t);return n!==void 0&&n.kind===`fields`?n:null}function en(e){return Array.isArray(e)?e.map(en):typeof e!=`object`||!e?e:Object.fromEntries(Object.entries(e).toSorted(([e],[t])=>e.localeCompare(t)).map(([e,t])=>[e,en(t)]))}function tn(e){return JSON.stringify(en(e))}function nn(e,t){switch(e.kind){case`pending`:return{kind:`refused`,reason:G.t(`helpers.customizationSave.notReadYet`)};case`unknown`:return{kind:`refused`,reason:`the customization could not be read: ${e.reason}`};case`not-loaded`:return{kind:`refused`,reason:`the customizations are not loaded yet: ${e.reason}`};case`none`:return t===null?{kind:`noop`}:{kind:`create`,input:{enabled:!0,composition:t}};case`present`:{let n=e.view.block.id;return t===null?{kind:`delete`,blockId:n}:tn(t)===tn(e.composition)?{kind:`noop`}:{kind:`update`,blockId:n,expectedUpdatedAt:e.view.block.updatedAt,composition:t}}}}function rn(){let{t:e}=K(),t=st();return(n,r)=>t({title:e(`customize.assign.removeConfirm.title`),message:r?`${e(`customize.assign.removeConfirm.message`,{what:n})} ${e(`customize.assign.removeConfirm.last`)}`:e(`customize.assign.removeConfirm.message`,{what:n}),confirmLabel:e(`customize.assign.removeConfirm.confirm`),variant:`danger`})}function an(e,t){let n=e===`enum`?`string`:e,r=t.kind===`enum`?`string`:t.kind,i={source:t.source,cap:t.cap,fieldPath:t.fieldPath};return r===n?{kind:`from`,...i}:n===`number`&&r===`string`?{kind:`expression`,expr:`number(x)`,bindings:{x:{kind:`from`,...i}}}:null}function on(e){return e.map(e=>({id:e.id,name:e.name,addonId:e.addonId,stableId:e.stableId,location:e.location,type:e.type,parentDeviceId:e.parentDeviceId}))}function Z(e,t){let n=e;for(let e of t.split(`.`)){if(typeof n!=`object`||!n||Array.isArray(n))return;n=Object.getOwnPropertyDescriptor(n,e)?.value}return n}function sn(e,t,n,r){return r===null?{kind:`from`,source:e,cap:t,fieldPath:n.path}:an(r,{source:e,cap:t,fieldPath:n.path,kind:n.kind})}function cn(e,t,n,r){let i={addonId:e.addonId,stableId:e.stableId};return t.caps.flatMap(e=>e.fields.filter(e=>e.item!==!0).map(t=>({cap:e.cap,path:t.path,kind:t.kind,value:n===null?void 0:Z(n[e.cap],t.path),source:sn(i,e.cap,t,r)})))}function ln(e,t){return t?e===void 0?`—`:e===null?`null`:typeof e==`string`||typeof e==`number`||typeof e==`boolean`?String(e):JSON.stringify(e):`…`}function un(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function dn(e,t){let n=Z(e,t);return n===void 0?{kind:`absent`}:t===`percentage`&&e.binary===!0?{kind:`value`,value:n,binary:!0}:{kind:`value`,value:n}}function fn(e,t,n){return un(t)?dn(t,n):e.status===`error`?{kind:`unknown`,reason:e.error?.message??G.t(`helpers.liveValue.unreadable`)}:e.status===`pending`||e.data===void 0?{kind:`pending`}:e.data===null?{kind:`absent`}:dn(e.data,n)}function pn(e,t,n){if(t.binary===!0&&n.cap===`battery`&&n.path===`percentage`){let t=et(e);return{text:G.t(t?Xe:Qe),tone:t?`warning`:`normal`}}return{text:n.path===`percentage`?`${Math.round(e)} %`:String(e),tone:`normal`}}function mn(e,t,n){let r=e?`active`:`muted`;return t.cap===`contact`&&t.path===`entryOpen`?{text:e?n.open:n.closed,tone:r}:ye[t.cap]===t.path?{text:e?n.active:n.inactive,tone:r}:{text:String(e),tone:`normal`}}function hn(e,t,n){switch(e.kind){case`pending`:return{text:`…`,tone:`muted`};case`unknown`:return{text:`?`,title:e.reason,tone:`warning`};case`absent`:return{text:`—`,tone:`muted`};case`value`:{let r=e.value;return r===null?{text:`—`,tone:`muted`}:typeof r==`boolean`?mn(r,t,n):typeof r==`number`?pn(r,e,t):typeof r==`string`?{text:r,tone:`normal`}:{text:JSON.stringify(r),tone:`normal`}}}}var gn=0;function _n(e){let t=v(),n=pt({deviceId:e?.deviceId??gn,capName:e?.cap??``},{enabled:e!==null}),r=Et(t.trpcClient,e?.deviceId??null,e?.cap??``);return e===null?{kind:`absent`}:fn({status:n.status,data:n.data,error:n.error===null||n.error===void 0?null:{message:n.error.message}},r,e.path)}var vn={muted:`text-foreground-subtle`,active:`text-success`,normal:`text-foreground`,warning:`text-warning`};function yn({target:e}){let{t}=K(),n=_n(e);return e===null?null:i(bn,{display:hn(n,e,{active:t(`customize.assign.value.active`),inactive:t(`customize.assign.value.inactive`),open:t(`customize.assign.value.open`),closed:t(`customize.assign.value.closed`)})})}function bn({display:e}){return i(`span`,{className:`text-xs ${vn[e.tone]}`,title:e.title,children:e.text})}function xn(e){return e===`avg-round-1`?`customize.fieldsCard.aggregate.avg`:`customize.fieldsCard.aggregate.latest`}function Sn(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function Cn(e,t,n){let r=RegExp(`(?<![A-Za-z0-9_])${Sn(t)}(?![A-Za-z0-9_])`,`g`);return e.replace(r,()=>n)}function wn(e,t,n,r,i){let a=Object.keys(t).toSorted((e,t)=>t.length-e.length),o=e;for(let e of a){let a=t[e];if(a===void 0||a.kind!==`from`)continue;let s=n.get(D(a.source))??i,c=J(a.cap,a.fieldPath,r);o=Cn(o,e,`${s} · ${c}`)}return Pn(o)}var Tn=1e3,En=60*Tn,Dn=60*En,On={within:[1],dwell:[1,2],rose:[2]};function kn(e){if(!Number.isInteger(e)||e<Tn)return null;if(e%Dn===0){let t=e/Dn;return t===1?`1 h`:`${t} h`}if(e%En===0){let t=e/En;return t===1?`1 min`:`${t} min`}if(e%Tn===0){let t=e/Tn;return t===1?`1 s`:`${t} s`}return null}function An(e){return/^\d+$/.test(e.trim())?kn(Number(e.trim())):null}function jn(e,t){let n=1,r=t+1,i=null,a=[];for(let o=t+1;o<e.length;o+=1){let t=e[o]??``;if(i!==null){if(t===`\\`){o+=1;continue}t===i&&(i=null);continue}if(t===`"`||t===`'`){i=t;continue}if(t===`(`){n+=1;continue}if(t===`)`){if(--n,n===0){let t=e.slice(r,o);return a.length===0&&t.trim()===``||a.push({text:t}),{args:a,close:o}}continue}t===`,`&&n===1&&(a.push({text:e.slice(r,o)}),r=o+1)}return null}function Mn(e,t){let n=e[t-1];if(n!==void 0&&/[A-Za-z0-9_]/.test(n))return null;for(let n of Object.keys(On)){if(!e.startsWith(n,t))continue;let r=t+n.length,i=e[r];if(i!==void 0&&/[A-Za-z0-9_]/.test(i))continue;let a=r;for(;e[a]===` `||e[a]===`
2
- `;)a+=1;if(e[a]!==`(`)continue;let o=jn(e,a);return o===null?null:{name:n,close:o.close,args:o.args}}return null}function Nn(e){let t=e.args.map(e=>Pn(e.text)),n=On[e.name]??[];if(e.name===`within`){let e=t[1],n=e===void 0?null:An(e);if(n!==null)return`within ${n}`}let r=t.map((e,t)=>n.includes(t)?An(e)??e.trim():e.trim());return`${e.name}(${r.join(`, `)})`}function Pn(e){let t=``,n=0;for(;n<e.length;){let r=Mn(e,n);if(r===null){t+=e[n]??``,n+=1;continue}t+=Nn(r),n=r.close+1}return t}function Fn(e){for(let t=1;;t++){let n=`s${t}`;if(!e.includes(n))return n}}var In={min:`min(a, b, …)`,max:`max(a, b, …)`,abs:`abs(x)`,floor:`floor(x)`,ceil:`ceil(x)`,sqrt:`sqrt(x)`,round:`round(x, digits?)`,pow:`pow(x, y)`,clamp:`clamp(x, lo, hi)`,avg:`avg(a, b, …)`,sum:`sum(a, b, …)`,coalesce:`coalesce(a, b, …)`,age:`age(now, ts)`,convert:`convert(x, "from", "to")`,any:`any(a, b, …)`,all:`all(a, b, …)`,within:`within(ts, ms)`,number:`number(x)`,latest:`latest(ts, …)`,rose:`rose(level, changedAt, debounceMs?)`,count:`count(x)`,dwell:`dwell(active, onForMs, offForMs)`,latchedAt:`latchedAt(value)`,schmitt:`schmitt(x, high, low, onForMs?, offForMs?)`},Ln=/[A-Za-z_][A-Za-z0-9_]*$/;function Rn(e,t,n){let r=Ln.exec(e.slice(0,t))?.[0]??``;if(r===``)return[];let i=n.filter(e=>e.startsWith(r)).toSorted().map(e=>({kind:`binding`,label:e,insert:e,hintKey:null})),a=`now`.startsWith(r)?[{kind:`now`,label:`now`,insert:`now`,hintKey:`compositionEditor.now`}]:[],o=[...he].filter(e=>e.startsWith(r)).toSorted().map(e=>({kind:`builtin`,label:In[e]??e,insert:`${e}(`,hintKey:`compositionEditor.builtins.${e}`}));return[...i,...a,...o].slice(0,8)}function zn(e,t,n){let r=t-(Ln.exec(e.slice(0,t))?.[0]??``).length;return{text:`${e.slice(0,r)}${n.insert}${e.slice(t)}`,cursor:r+n.insert.length}}s();function Bn({label:n,value:r,bindings:a,onChange:s}){let{t:c}=K(),l=t(null),[u,d]=o(r.length),f=Rn(r,u,a);return e(`div`,{className:`flex flex-col gap-1`,children:[e(`label`,{className:`flex flex-col gap-1 text-[11px]`,children:[n,i(`input`,{ref:l,className:`font-mono px-1.5 py-0.5 text-[11px] bg-background border border-border rounded`,value:r,onChange:e=>{s(e.target.value),d(e.target.selectionStart??e.target.value.length)},onSelect:e=>d(e.currentTarget.selectionStart??r.length)})]}),f.length>0&&i(`ul`,{role:`listbox`,"aria-label":c(`compositionEditor.suggestions`),className:`rounded border border-border bg-surface text-[11px]`,children:f.map(t=>e(`li`,{role:`option`,"aria-selected":!1,tabIndex:0,className:`flex justify-between gap-2 px-1 cursor-pointer hover:bg-surface-hover`,onClick:()=>{let e=zn(r,u,t);s(e.text),d(e.cursor),l.current?.focus()},children:[i(`span`,{className:`font-mono`,children:t.label}),t.hintKey!==null&&i(`span`,{className:`text-foreground-subtle`,children:c(t.hintKey)})]},`${t.kind}:${t.label}`))})]})}function Vn(e){return{addonId:e.addonId,stableId:e.stableId}}function Hn(e){return new Map(e.map(e=>[D(Vn(e)),e]))}function Un(e,t,n){if(e.kind===`code`)return{kind:`unavailable`,reason:G.t(`helpers.fieldPreview.codeFields`)};if(e.kind===`series`||e.kind===`expression`&&(Re(e.expr,`rose`)||Re(e.expr,`count`)))return{kind:`runtime-only`};let r=ne(e).filter(e=>t.get(k(e.source,e.cap))?.kind!==`value`).map(de);if(r.length>0)return{kind:`waiting`,missing:r};let i=T({source:e,now:n,read:e=>{let n=t.get(k(e.source,e.cap)),r=n?.kind===`value`?Z(n.slice,e.fieldPath):void 0,i=r===void 0?void 0:_e(r);return i===void 0?{state:`unavailable`,reason:G.t(`helpers.fieldPreview.notReported`,{path:`${e.cap}.${e.fieldPath}`}),fatal:!1}:{state:`fresh`,value:i}}});return i.state===`unavailable`?{kind:`unavailable`,reason:i.reason}:{kind:`value`,value:i.value,stale:i.reason}}s();function Wn({sliceKey:e,deviceId:t,capName:n,onReading:r}){let i=Et(v().trpcClient,t,n);return a(()=>{r(e,i===void 0?{kind:`pending`}:{kind:`value`,slice:i})},[e,i,r]),null}function Gn(e,t){return[...new Map(ne(e).map(e=>[k(e.source,e.cap),e]))].map(([e,n])=>({key:e,read:n,device:t.get(D(n.source))}))}function Kn({source:t}){let{t:n}=K(),a=lt({projection:`slim`}),[s,c]=o(new Map),l=r((e,t)=>{c(n=>new Map([...n,[e,t]]))},[]),u=Gn(t,Hn(a.status===`success`?on(a.data):[])),d=a.status===`success`?u.filter(e=>e.device===void 0).map(e=>D(e.read.source)):[];return e(`div`,{className:`flex flex-wrap items-center gap-2 text-[11px]`,children:[u.map(e=>e.device===void 0?null:i(Wn,{sliceKey:e.key,deviceId:e.device.id,capName:e.read.cap,onReading:l},e.key)),i(`span`,{className:`text-foreground-subtle`,children:n(`compositionEditor.preview.label`)}),a.status===`error`?i(`span`,{className:`text-warning`,children:n(`compositionEditor.preview.devicesFailed`,{reason:a.error?.message??``})}):d.length>0?i(`span`,{className:`text-warning`,children:n(`compositionEditor.preview.unknownDevice`,{sources:d.join(`, `)})}):i(qn,{preview:Un(t,s,Date.now())})]})}function qn({preview:t}){let{t:n}=K();switch(t.kind){case`value`:return e(`strong`,{children:[`→ `,ln(t.value,!0),t.stale===null?``:` (${t.stale})`]});case`unavailable`:return i(`span`,{className:`text-warning`,children:t.reason});case`waiting`:return i(`span`,{className:`text-foreground-subtle`,children:n(`compositionEditor.preview.waiting`,{sources:t.missing.join(`, `)})});case`runtime-only`:return i(`span`,{className:`text-foreground-subtle`,children:n(`compositionEditor.preview.runtimeOnly`)})}}function Jn(e){return e===`identity`||e===`invert`||e===`threshold`||e===`linear`}function Yn(e){return Object.hasOwn(M,e)}function Xn(e){return Yn(e)?M[e].targets:[]}function Zn(e,t){let n=Xn(e).find(e=>e.id===t);return n?.cardinality===`keyedArray`?n.fields??[]:[]}function Qn(e,t){return Xn(e).find(e=>e.id===t)?.traits??[]}function $n(e,t){return e.caps.flatMap(e=>{let n=er(t,e.cap);return e.fields.filter(e=>e.item!==!0).map(t=>({cap:e.cap,path:t.path,kind:t.kind,unit:n,enumValues:t.enumValues??[]}))})}function er(e,t){if(e===null)return null;let n=Z(e[t],`unit`);return typeof n==`string`&&n.length>0?n:null}function tr(e,t){return t.kind===`number`?e.find(e=>e.kind===`numeric`)??null:t.kind===`enum`||t.kind===`string`?e.find(e=>e.kind===`enum`)??null:null}function nr(e,t,n,r){let i=Zn(e,t).find(e=>e.path===n);if(i===void 0)return{ok:!1,reason:`kind`};let a=tr(i.sources,r);if(a===null)return{ok:!1,reason:`kind`};if(a.requiredUnit!==void 0&&r.unit===null)return{ok:!1,reason:`unit-unknown`};if(a.requiredUnit!==void 0&&r.unit!==a.requiredUnit)return{ok:!1,reason:`unit`};if(a.transformKinds.includes(`enum-map`))return{ok:!0,mode:`enum`};let o=a.transformKinds.filter(Jn);return o.length===0||r.kind!==`number`?{ok:!1,reason:`kind`}:{ok:!0,mode:`scalar`,fit:{ok:!0,valueKind:`number`,sourceUnit:a.requiredUnit??null,transforms:o,declared:a.transforms}}}function rr(e,t,n){return Zn(e,t).find(e=>e.path===n)?.enumValues??[]}function ir(e){return e.length===1&&e[0]===`threshold`?`threshold`:e.length===1&&e[0]===`invert`||e.includes(`invert`)&&e.every(e=>e===`identity`||e===`invert`)?`invert`:e.length>1?`choice`:`none`}function ar(e){if(e.transforms.includes(`identity`))return{kind:`identity`};if(e.transforms.includes(`threshold`)){let t=sr(e.declared,`threshold`);if(t!==null)return or(t)}if(e.transforms.includes(`linear`)){let t=sr(e.declared,`linear`);if(t!==null)return or(t)}return{kind:`invert`}}function or(e){switch(e.kind){case`identity`:return{kind:`identity`};case`invert`:return{kind:`invert`};case`threshold`:return{kind:`threshold`,comparison:e.comparison,threshold:e.defaultThreshold,startDwellMs:e.defaultStartDwellMs,stopDwellMs:e.defaultStopDwellMs};case`linear`:return cr(e);case`enum-map`:return{kind:`identity`}}}function sr(e,t){return e.find(e=>e.kind===t)??null}function cr(e){return{kind:`linear`,scale:e.defaultScale,offset:e.defaultOffset,...e.clampMin!==void 0&&e.clampMax!==void 0?{clampMin:e.clampMin,clampMax:e.clampMax}:{}}}function lr(e){let t=Ee({draft:{kind:`scalar`,cap:e.cap,targetId:e.targetId,source:{addonId:e.source.addonId,stableId:e.source.stableId,cap:e.source.cap,fieldPath:e.source.fieldPath},transform:e.transform},device:e.device,apply:e.apply,sourceValueKind:e.source.valueKind,changedAtField:e.source.changedAtField,sourceUnit:e.source.sourceUnit});return t.ok?t.value:null}function ur({control:t,transforms:n,declared:r,unit:a,value:o,onChange:s}){let{t:c}=K();return t===`none`?null:e(`div`,{className:`flex flex-col gap-2`,children:[i(`h3`,{className:`text-[11px] font-medium text-foreground-muted`,children:c(`customize.scalar.stepTransform`)}),t===`choice`&&i(W,{"aria-label":c(`customize.scalar.stepTransform`),value:o.kind,options:n.map(e=>({value:e,label:c(`customize.scalar.transform.${e}`)})),onChange:e=>s(dr(e.target.value,r))}),o.kind===`invert`||t===`invert`&&o.kind!==`threshold`?e(`label`,{className:`flex items-center gap-2 text-[11px] text-foreground`,children:[i(ft,{checked:o.kind===`invert`,onChange:e=>s(e.target.checked?{kind:`invert`}:{kind:`identity`})}),c(`customize.scalar.invert`)]}):null,o.kind===`threshold`&&i(pr,{declared:r,unit:a,value:o,onChange:s}),o.kind===`linear`&&i(hr,{declared:r,value:o,onChange:s})]})}function dr(e,t){let n=sr(t,fr(e));return n===null?e===`invert`?{kind:`invert`}:{kind:`identity`}:or(n)}function fr(e){return e===`invert`||e===`threshold`||e===`linear`||e===`enum-map`?e:`identity`}function pr({declared:t,unit:n,value:r,onChange:a}){let{t:o}=K(),s=n??``,c=sr(t,`threshold`),l=c?.kind===`threshold`?c.comparisons:[];return e(`div`,{className:`flex flex-col gap-2 text-[11px] text-foreground`,children:[l.length>0&&e(`label`,{className:`flex flex-col gap-1`,children:[o(`customize.scalar.comparison`),i(W,{"aria-label":o(`customize.scalar.comparison`),value:r.comparison,options:l.map(e=>({value:e,label:o(`customize.scalar.comparisonValue.${e}`)})),onChange:e=>{let t=l.find(t=>t===e.target.value);t!==void 0&&a({...r,comparison:t})}})]}),i(gr,{label:o(`customize.scalar.threshold`,{unit:s}),value:r.threshold,onChange:e=>a({...r,threshold:e})}),i(gr,{label:o(`customize.scalar.startDwell`),value:r.startDwellMs/1e3,onChange:e=>a({...r,startDwellMs:e*1e3})}),i(gr,{label:o(`customize.scalar.stopDwell`),value:r.stopDwellMs/1e3,onChange:e=>a({...r,stopDwellMs:e*1e3})})]})}function mr(e){return e===null||e.kind!==`linear`||e.clampMin===void 0||e.clampMax===void 0?null:{min:e.clampMin,max:e.clampMax}}function hr({declared:t,value:n,onChange:r}){let{t:a}=K(),o=mr(sr(t,`linear`));return e(`div`,{className:`flex flex-col gap-2 text-[11px] text-foreground`,children:[i(gr,{label:a(`customize.scalar.scale`),value:n.scale,onChange:e=>r({...n,scale:e})}),i(gr,{label:a(`customize.scalar.offset`),value:n.offset,onChange:e=>r({...n,offset:e})}),o!==null&&i(gr,{label:a(`customize.scalar.clampMin`),value:n.clampMin??o.min,onChange:e=>r({...n,clampMin:e,clampMax:n.clampMax??o.max})}),o!==null&&i(gr,{label:a(`customize.scalar.clampMax`),value:n.clampMax??o.max,onChange:e=>r({...n,clampMin:n.clampMin??o.min,clampMax:e})})]})}function gr({label:t,value:n,onChange:r}){return e(`label`,{className:`flex flex-col gap-1`,children:[t,i(H,{type:`number`,value:Number.isFinite(n)?n:0,onChange:e=>{let t=Number(e.target.value);Number.isFinite(t)&&r(t)}})]})}var _r=`kind`,vr=`unit`,yr=`unit-unknown`,br=`compile`,xr=`dwell`,Sr=`no-value`,Cr=`empty`;function wr(e){return`customize.scalar.previewFailure.${e}`}function Tr(e){return e===`compile`||e===`dwell`||e===`no-value`||e===`empty`}function Er(e){return e===`identity`||e===`invert`||e===`threshold`||e===`linear`}function Dr(e,t){let n=Object.entries(M).find(([t])=>t===e)?.[1];return n===void 0?null:n.targets.find(e=>e.id===t)??null}function Or(e,t){return Dr(e,t)?.path??null}function kr(e,t){return e.caps.flatMap(e=>{let n=Ar(t,e.cap);return e.fields.filter(e=>e.item!==!0).map(t=>({cap:e.cap,path:t.path,kind:t.kind,unit:n}))})}function Ar(e,t){if(e===null)return null;let n=Z(e[t],`unit`);return typeof n==`string`&&n.length>0?n:null}function jr(e,t){if(t.kind===`boolean`){let n=ye[t.cap];return n===void 0||n!==t.path?null:t.cap===`switch`?e.find(e=>e.kind===`switch`)??e.find(e=>e.kind===`binary`)??null:e.find(e=>e.kind===`binary`)??e.find(e=>e.kind===`field`&&e.valueKinds?.includes(`boolean`))??null}return t.kind===`number`?e.find(e=>e.kind===`numeric`)??e.find(e=>e.kind===`field`&&e.valueKinds?.includes(`number`))??null:t.kind===`string`?e.find(e=>e.kind===`field`&&e.valueKinds?.includes(`string`))??null:null}function Mr(e,t,n){let r=Dr(e,t);if(r===null||r.cardinality!==`scalar`||n.kind===`enum`)return{ok:!1,reason:_r};let i=jr(r.sources,n);if(i===null)return{ok:!1,reason:_r};if(i.requiredUnit!==void 0&&n.unit===null)return{ok:!1,reason:yr};if(i.requiredUnit!==void 0&&n.unit!==i.requiredUnit)return{ok:!1,reason:vr};let a=i.transformKinds.filter(Er);return a.length===0?{ok:!1,reason:_r}:{ok:!0,valueKind:n.kind,sourceUnit:i.requiredUnit??null,transforms:a,declared:i.transforms}}function Nr(e,t){return t.find(t=>t===e)??null}function Pr({mode:t,modes:n,name:r,onChange:a}){let{t:o}=K();return n.length===0?null:e(`div`,{className:`flex flex-col gap-1`,children:[i(W,{"aria-label":o(`customize.motion.modeFor`,{name:r}),value:t,options:n.map(e=>({value:e,label:o(`customize.motion.mode.${e}`)})),onChange:e=>{let t=Nr(e.target.value,n);t!==null&&a(t)}}),i(`p`,{className:`text-[11px] text-foreground-muted`,children:o(`customize.motion.modeLine.${t}`)})]})}function Fr(e){return e===`single`?`values`:`devices`}function Ir(e){return e<=0?null:`values`}function Lr(){return`devices`}function Rr(e,t){return!e&&(t.seenDevice||t.step!==`devices`)?{seenDevice:!1,step:`devices`}:e&&!t.seenDevice?{seenDevice:!0,step:`values`}:null}function zr(e,t){return e===t}function Br(e,t){return zr(e,t)?void 0:`hidden sm:block`}function Vr({step:t,devices:n,values:r,back:a,onBack:o,done:s,onDone:c}){return e(`div`,{"data-testid":`source-selector`,"data-step":t,className:`flex flex-col gap-3 sm:grid sm:grid-cols-2 sm:gap-4`,children:[e(`div`,{"data-testid":`source-selector-devices`,className:Br(t,`devices`),children:[s!==null&&e(`div`,{className:`mb-2 flex items-center justify-between gap-2 sm:hidden`,children:[i(`p`,{"data-testid":`source-selector-picked-count`,className:`text-[11px] text-foreground-muted`,children:s.countLabel}),i(U,{size:`sm`,"data-testid":`source-selector-done`,disabled:s.disabled,onClick:c,children:s.label})]}),n]}),e(`div`,{"data-testid":`source-selector-values`,className:Br(t,`values`),children:[a!==null&&e(U,{variant:`ghost`,size:`sm`,className:`mb-2 sm:hidden`,"data-testid":`source-selector-back`,"aria-label":a.ariaLabel,onClick:o,children:[i(b,{className:`size-3`}),a.label]}),r]})]})}function Hr(e){return[...new Set(e.accept.map(e=>e.cap))]}function Ur(e,t){let n=new Set(Hr(t)),r=new Set(t.exclude.map(e=>`${e.addonId}/${e.stableId}`)),i=[],a=[];for(let o of e)r.has(`${o.addonId}/${o.stableId}`)||($r(o.type,t.deviceTypes)&&o.caps.some(e=>n.has(e))?i.push(o):a.push(o));return{compatible:i,incompatible:a}}function Wr(e,t){return e.filter(e=>Yr(t,e)&&Xr(t,e))}function Gr(e,t){return t.history.required?e.filter(e=>Yr(t,e)&&!Zr(e)):[]}function Kr(e,t){return e.flatMap(e=>{let n=t.find(t=>t.addonId===e.source.addonId&&t.stableId===e.source.stableId);return n===void 0?[]:[n.id]})}function qr(e){if(e.selectedIds.length>e.request.max)return{members:e.previous.map(ti),refused:`max`,needsField:[]};let t=[];return{members:e.selectedIds.flatMap(n=>{let r=e.devices.find(e=>e.id===n);if(r===void 0)return[];let i=Jr(r,e);return i===null?(t.push(n),[]):[ei(r,i.cap,i.fieldPath)]}),refused:null,needsField:t}}function Jr(e,t){if(t.choiceDeviceId===e.id&&t.choice!==null&&Qr(t.request,t.choice))return t.choice;let n=t.previous.find(t=>t.source.addonId===e.addonId&&t.source.stableId===e.stableId);if(n!==void 0&&Qr(t.request,n))return n;let r=t.request.accept.length===1?t.request.accept[0]:void 0;return r===void 0?null:{cap:r.cap,fieldPath:r.fieldPath}}function Yr(e,t){return e.accept.some(e=>e.cap===t.cap&&e.fieldPath===t.fieldPath&&e.valueKind===t.kind)}function Xr(e,t){return!e.history.required||Zr(t)}function Zr(e){return Ae(e.cap)[e.fieldPath]!==void 0}function Qr(e,t){return e.accept.some(e=>e.cap===t.cap&&e.fieldPath===t.fieldPath)}function $r(e,t){return t.length===0?!0:t.some(t=>t===e)}function ei(e,t,n){return{source:{addonId:e.addonId,stableId:e.stableId},cap:t,fieldPath:n}}function ti(e){return{source:{addonId:e.source.addonId,stableId:e.source.stableId},cap:e.cap,fieldPath:e.fieldPath}}function ni(e){return{id:e.id,name:e.name,type:e.type,stableId:e.stableId,parentDeviceId:e.parentDeviceId??null,...e.location!==void 0&&e.location!==null?{location:e.location}:{},...e.role!==void 0&&e.role!==null?{role:e.role}:{},...e.primaryChildEntityId!==void 0&&e.primaryChildEntityId!==null?{primaryChildEntityId:e.primaryChildEntityId}:{}}}function ri(e,t,n=Mt(`en`)){return Ze(e,`compact`,dt(t),n)}function ii(e){return e.map(e=>({id:e.id,name:e.name,type:e.type,parentDeviceId:e.parentDeviceId,...e.location===null?{}:{location:e.location}}))}s();function ai(e,t){return e===`pending`||t.kind===`pending`?`pending`:e===`error`||t.kind===`unknown`?`failed`:`answered`}function oi(e,t){return e.map(e=>({id:e.id,name:e.name,type:e.type,location:e.location,parentDeviceId:e.parentDeviceId,addonId:e.addonId,stableId:e.stableId,caps:t.get(e.id)??[]}))}function si(e){return e.caps.flatMap(e=>e.fields.flatMap(t=>t.item===!0?[]:[{cap:e.cap,fieldPath:t.path,kind:t.kind}]))}function ci(e,t,n){return t?e==null?n:ln(e,!0):`…`}function li({request:t,enabled:r,members:a,onMembersChange:s,onRefuse:l}){let{t:u,i18n:d}=K(),[p,m]=o(null),[h,g]=o(`devices`),[_,v]=o(!1),y=lt({projection:`slim`}),b=n(()=>y.status===`success`?on(y.data):[],[y.status,y.data]),x=zt(n(()=>Hr(t),[t]),r),S=n(()=>x.kind===`known`?Ur(oi(b,x.value),t):{compatible:[],incompatible:[]},[x,b,t]),C=ai(y.status,x),w=Kr(a,S.compatible),T=S.compatible.find(e=>e.id===p)??null,E=At({deviceId:T?.id??0},{enabled:T!==null}),D=ot({deviceId:T?.id??0},{enabled:T!==null}),O=E.status===`success`?E.data:{caps:[]},k=Wr(si(O),t),A=Gr(si(O),t),j=n(()=>ii(S.compatible.map(ui)),[S.compatible]),M=(e,n,r)=>{if(x.kind!==`known`)return;let i=qr({request:t,devices:S.compatible,selectedIds:e,previous:a,choiceDeviceId:n,choice:r});if(i.refused===`max`){l({code:`max`,max:t.max});return}l(null),s(i.members)};return i(Vr,{step:h,devices:e(`div`,{className:`flex max-h-72 min-h-0 flex-col gap-2 overflow-y-auto sm:max-h-[min(24rem,60vh)]`,children:[i(`h3`,{className:`text-[11px] font-medium text-foreground-muted`,children:u(`helper.pickMembers`)}),y.status===`error`?i(V,{title:u(`customize.picker.devicesFailed`),message:y.error?.message??``}):x.kind===`unknown`?i(V,{title:u(`customize.picker.devicesFailed`),message:x.reason}):i(ct,{devices:j,listState:C,value:w,selection:`multiple`,groupBy:`location`,onChange:e=>{m(e.find(e=>!w.includes(e))??e.at(-1)??null),M(e,null,null)},noun:`device`,showAll:!0,testId:`helper-member-picker`}),S.incompatible.length>0&&e(`div`,{"data-testid":`helper-incompatible-devices`,children:[e(U,{variant:`ghost`,size:`sm`,className:`h-auto w-full justify-start gap-1 px-0 text-[11px] text-foreground-muted`,onClick:()=>v(e=>!e),children:[i(f,{className:`size-3 transition-transform ${_?`rotate-180`:``}`}),u(`customize.sourceSelector.notCompatibleDevices`,{count:S.incompatible.length})]}),_&&i(`ul`,{className:`mt-1 flex flex-col gap-0.5 pl-4 text-[11px] text-foreground-subtle`,children:S.incompatible.map(e=>i(`li`,{children:e.name},e.id))})]})]}),values:i(`div`,{className:`flex min-h-0 flex-col gap-2`,children:T===null?i(`p`,{className:`text-[11px] text-foreground-subtle`,children:u(`helper.pickMembersHint`)}):e(c,{children:[i(`h3`,{className:`text-[11px] font-medium text-foreground`,children:T.name}),E.status===`pending`||D.status===`pending`?i(`p`,{role:`status`,className:`text-[11px] text-foreground-subtle`,children:u(`customize.picker.loadingFields`)}):E.status===`error`?i(V,{title:u(`customize.picker.fieldsFailed`),message:E.error?.message??``}):k.length===0?i(`p`,{className:`text-[11px] text-foreground-muted`,children:u(`helper.noUsableValue`)}):i(`ul`,{className:`flex flex-col gap-1`,children:k.map(t=>{let n=a.some(e=>e.source.addonId===T.addonId&&e.source.stableId===T.stableId&&e.cap===t.cap&&e.fieldPath===t.fieldPath),r=D.status===`success`?Z(D.data[t.cap],t.fieldPath):void 0;return i(`li`,{children:e(`label`,{className:`flex flex-wrap items-center gap-2 text-[11px] text-foreground`,children:[i(`input`,{type:`radio`,name:`helper-member-value`,checked:n,"data-testid":`helper-value-${t.cap}.${t.fieldPath}`,onChange:()=>M(di(w,T.id),T.id,t)}),i(`span`,{children:J(t.cap,t.fieldPath,d.language)}),i(`span`,{className:`text-foreground-muted`,children:ci(r,D.status===`success`,u(`helper.valueUnknown`))})]})},`${t.cap}.${t.fieldPath}`)})}),A.length>0&&i(`p`,{className:`text-[11px] text-foreground-muted`,"data-testid":`helper-no-history`,children:u(`helper.noHistory`)})]})}),back:T===null?null:{label:i(at,{device:T,form:`compact`}),ariaLabel:u(`customize.sourceSelector.backToDevice`,{name:T.name})},onBack:()=>g(Lr()),done:{countLabel:u(`customize.sourceSelector.pickedCount`,{count:w.length}),label:u(`customize.sourceSelector.done`),disabled:w.length===0},onDone:()=>{let e=Ir(w.length);if(e!==null){if(!(p!==null&&w.includes(p))){let e=w[0];e!==void 0&&m(e)}g(e)}}})}function ui(e){return{id:e.id,name:e.name,type:e.type,location:e.location,parentDeviceId:e.parentDeviceId,addonId:e.addonId,stableId:e.stableId,caps:e.caps}}function di(e,t){return e.includes(t)?e:[...e,t]}function fi(e,t){let n=ae[t]??null;if(n===null)return null;let r=e.caps.find(e=>e.cap===t);return r===void 0?null:r.fields.some(e=>e.path===n)?n:null}function pi(e,t,n){let r=ye[t];if(r===void 0||r!==n)return!1;let i=e.caps.find(e=>e.cap===t);return i===void 0||!i.fields.some(e=>e.path===n)?!1:fi(e,t)!==null}function mi(e,t){return t===void 0?null:e.find(e=>e.addonId===t.addonId&&e.stableId===t.stableId)??null}function hi(e,t,n,r,i){let a=e.find(e=>e.addonId===t.addonId&&e.stableId===t.stableId),o=r===`pulse`?ae[n.cap]:void 0;if(a!==void 0&&a.deviceId===t.id&&a.cap===n.cap&&a.fieldPath===n.path&&(r!==`pulse`||a.changedAtField===o))return null;let s=e.filter(e=>!(e.addonId===t.addonId&&e.stableId===t.stableId)),c={deviceId:t.id,addonId:t.addonId,stableId:t.stableId,cap:n.cap,fieldPath:n.path,deviceName:t.name,mode:a?.mode??i,...o===void 0?{}:{changedAtField:o}};return[...s,c]}function gi(e){return`${e.addonId}/${e.stableId}/${e.cap}.${e.fieldPath}`}function _i(e,t){let n=gi(t);return e.filter(e=>gi(e)!==n)}function vi(e,t,n){let r=gi(t);return e.map(e=>gi(e)===r?{...e,mode:n}:e)}function yi({edges:t,edge:n,onChange:r}){let{t:a}=K();return t.length===0?null:e(`label`,{className:`flex flex-col gap-1 text-[11px] text-foreground`,children:[a(`customize.event.edge`),i(W,{"aria-label":a(`customize.event.edge`),value:n,options:t.map(e=>({value:e,label:a(`customize.event.edgeValue.${e}`)})),onChange:e=>{let n=t.find(t=>t===e.target.value);n!==void 0&&r(n)}})]})}function bi({label:t,value:n,onChange:r}){return e(`label`,{className:`flex flex-col gap-1 text-[11px] text-foreground`,children:[t,i(H,{type:`number`,"aria-label":t,value:Number.isFinite(n)?n:0,onChange:e=>{let t=Number(e.target.value);Number.isFinite(t)&&t>=0&&r(t)}})]})}function xi(e){return Object.hasOwn(M,e)}function Si(e,t){return xi(e)?M[e].targets.find(e=>e.id===t)??null:null}function Ci(e){let t=Si(e.cap,e.targetId);if(t===null)return[];if(t.cardinality===`keyedArray`){let t=e.fieldPath;return t===void 0?[]:Zn(e.cap,e.targetId).find(e=>e.path===t)?.sources??[]}return t.sources}function wi(e){return{cap:e.cap,path:e.path,kind:e.kind,unit:e.unit}}function Ti(e,t){return t.kind===`number`?e.find(e=>e.kind===`numeric`)??null:t.kind===`enum`||t.kind===`string`?e.find(e=>e.kind===`enum`)??null:null}function Ei(e){return e===`identity`||e===`invert`||e===`threshold`||e===`linear`}function Di(e,t){if(e.requiredUnit!==void 0&&t.unit===null)return{kind:`incompatible`,reason:`unit-unknown`};if(e.requiredUnit!==void 0&&t.unit!==e.requiredUnit)return{kind:`incompatible`,reason:`unit`};if(e.transformKinds.includes(`enum-map`))return{kind:`conversion`,name:`enum-map`};let n=e.transformKinds.filter(Ei);return n.length===0?{kind:`incompatible`,reason:`kind`}:n.includes(`identity`)?{kind:`direct`}:n.includes(`threshold`)?{kind:`conversion`,name:`threshold`}:n.includes(`linear`)?{kind:`conversion`,name:`scale`}:n.includes(`invert`)?{kind:`conversion`,name:`invert`}:{kind:`incompatible`,reason:`kind`}}function Oi(e,t){if(e.pickerTargetKind!==void 0){let n=e.pickerTargetKind,r={addonId:`x`,stableId:`y`};return(n===null?{kind:`from`,source:r,cap:t.cap,fieldPath:t.path}:an(n,{source:r,cap:t.cap,fieldPath:t.path,kind:t.kind}))===null?{kind:`incompatible`,reason:`kind`}:{kind:`direct`}}if(e.acceptAnyField===!0)return t.kind===`enum`?{kind:`incompatible`,reason:`kind`}:{kind:`direct`};let n=Si(e.cap,e.targetId);if(n?.cardinality===`event`&&t.kind===`boolean`&&jr(Ci(e),wi(t))!==null)return{kind:`direct`};let r=Ci(e);if(r.length===0)return{kind:`incompatible`,reason:`kind`};let i=n?.cardinality===`keyedArray`&&e.fieldPath!==void 0;if(t.kind===`enum`&&!i)return{kind:`incompatible`,reason:`kind`};let a=i?Ti(r,t):jr(r,wi(t));return a===null?{kind:`incompatible`,reason:`kind`}:Di(a,t)}function ki(e,t){let n=F[e];return n===void 0?!1:Object.values(n).includes(t)}function Ai(){return Object.keys(F)}function ji(e,t){if(t.kind===`binary`)return e.some(e=>Object.hasOwn(ye,e));if(t.kind===`switch`)return e.includes(`switch`);if(t.kind===`numeric`){let n=t.requiredUnit;return n===void 0?e.some(e=>Ai().includes(e)||e===`numeric-sensor`):n===`W`?e.some(e=>e===`numeric-sensor`||e===`power-meter`||ki(e,n)):e.some(e=>ki(e,n))}return t.kind===`field`?e.some(e=>Ai().includes(e)||e===`numeric-sensor`||e===`battery`):t.kind===`enum`?e.includes(`consumables`)||e.some(e=>Ai().includes(e)):!1}function Mi(e,t){if(t.pickerTargetKind!==void 0||t.acceptAnyField===!0)return!0;let n=Ci(t);return n.length===0?!1:n.some(t=>ji(e.caps,t))}function Ni(e,t,n){let r=[],i=[];for(let a of e)a.id!==n&&(Mi(a,t)?r.push(a):i.push(a));return{compatible:r,incompatible:i}}function Pi(e,t,n){let r=new Map,i=[];for(let a of e){let e=Oi(t,a),o=J(a.cap,a.path,n),s={cap:a.cap,path:a.path,label:o,currentText:a.currentText,compatibility:e};if(e.kind===`incompatible`){i.push(s);continue}let c=r.get(a.cap)??[];c.push(s),r.set(a.cap,c)}return{groups:[...r.entries()].toSorted(([e],[t])=>e.localeCompare(t)).map(([e,t])=>({cap:e,title:qt(e,n),rows:t.toSorted((e,t)=>e.label.localeCompare(t.label))})),incompatible:i}}function Fi(e){return Si(e.cap,e.targetId)?.cardinality===`keyedArray`&&e.fieldPath!==void 0}function Ii(e){if(e.pickerTargetKind!==void 0)return[];if(e.acceptAnyField===!0)return Ai();let t=Ci(e),n=new Set;for(let e of t)if(e.kind===`binary`)for(let e of Object.keys(ye))n.add(e);else if(e.kind===`switch`)n.add(`switch`);else if(e.kind===`numeric`){n.add(`numeric-sensor`),n.add(`power-meter`);for(let t of Ai())(e.requiredUnit===void 0||ki(t,e.requiredUnit))&&n.add(t)}else if(e.kind===`field`){n.add(`battery`),n.add(`numeric-sensor`);for(let e of Ai())n.add(e)}else if(e.kind===`enum`){n.add(`consumables`);for(let e of Ai())n.add(e)}return[...n]}function Li(e,t,n,r,i){let a=Ci(e);if(a.length===0)return[];let o=kr(t,i).filter(e=>e.kind===`boolean`),s=[];for(let e of o){if(jr(a,e)===null||n===`pulse`&&!pi(t,e.cap,e.path))continue;let o=i===null?void 0:Z(i[e.cap],e.path);s.push({cap:e.cap,path:e.path,kind:`boolean`,unit:null,currentText:ln(o,r)})}return s}function Ri(e,t,n,r,i,a=null){return a===null?e.pickerTargetKind!==void 0&&i!==null?cn(i,t,r,e.pickerTargetKind).map(e=>({cap:e.cap,path:e.path,kind:e.kind,unit:null,currentText:ln(e.value,n)})):(Fi(e)?$n(t,r):kr(t,r)).map(e=>{let t=r===null?void 0:Z(r[e.cap],e.path);return{cap:e.cap,path:e.path,kind:e.kind,unit:e.unit,currentText:ln(t,n)}}):Li(e,t,a,n,r)}s();function zi(e,t){return e===`pending`||t.kind===`pending`?`pending`:e===`error`?`failed`:`answered`}function Bi(e,t){return e.map(e=>({id:e.id,name:e.name,type:e.type,location:e.location,parentDeviceId:e.parentDeviceId,addonId:e.addonId,stableId:e.stableId,caps:t.get(e.id)??[]}))}function Vi(e,t){return e.kind===`direct`?t(`customize.sourceSelector.direct`):e.kind===`conversion`?t(`customize.sourceSelector.withConversion`,{name:t(`customize.scalar.transform.${Hi(e.name)}`)}):``}function Hi(e){return e===`scale`?`linear`:e===`enum-map`?`enumMap`:e}function Ui(e){return e.kind===`members`?i(li,{...e}):i(Wi,{...e})}function Wi(t){let{t:r,i18n:s}=K(),[l,u]=o(`devices`),[d,p]=o(!1),m=Rr(t.device!==null,{seenDevice:d,step:l});m!==null&&(p(m.seenDevice),u(m.step));let[h,g]=o(!1),[_,v]=o(!1),y=lt({projection:`slim`}),b=n(()=>y.status===`success`?on(y.data):[],[y.status,y.data]),x=zt(n(()=>Ii(t.destination),[t.destination]),t.enabled),{compatible:S,incompatible:C}=n(()=>x.kind===`known`?Ni(Bi(b,x.value),t.destination,t.hostId):{compatible:[],incompatible:[]},[x,b,t.destination,t.hostId]),w=zi(y.status,x),T=t.device?.id??0,E=At({deviceId:T}),D=ot({deviceId:t.device===null?0:T}),O=E.status===`success`?E.data:{caps:[]},k=t.kind===`event`?t.shape:null,A=Ri(t.destination,O,D.status===`success`,D.status===`success`?D.data:null,t.device,k),j=t.kind===`event`?t.devicePickerTestId:`source-selector-device-picker`,{groups:M,incompatible:N}=Pi(A,t.destination,s.language),P=Ki(t,O,D.status===`success`?D.data:null),F=e=>{let n=e[0];if(n===void 0){t.onDeviceChange(null),t.kind!==`event`&&t.onFieldChange(null),u(Lr());return}if(t.device?.id!==n){let e=b.find(e=>e.id===n)??null;t.onDeviceChange(e),t.kind!==`event`&&t.onFieldChange(null)}u(Fr(`single`))},I=t.kind===`event`?A[0]??null:null,L=t.kind===`event`?t:null;a(()=>{if(L===null||L.device===null||I===null)return;let e=hi(L.picked,L.device,{cap:I.cap,path:I.path},L.shape,L.sourceModes[0]??`in-addition`);e!==null&&L.onPickedChange(e)},[L,I]);let R=n(()=>ii(S),[S]),ee=e(`div`,{className:`flex max-h-72 min-h-0 flex-col gap-2 overflow-y-auto sm:max-h-[min(24rem,60vh)]`,children:[i(`h3`,{className:`text-[11px] font-medium text-foreground-muted`,children:r(`customize.sourceSelector.pickDevice`,{title:t.destination.title})}),y.status===`error`?i(V,{title:r(`customize.picker.devicesFailed`),message:y.error?.message??``}):i(ct,{devices:R,listState:w,value:t.device===null?[]:[t.device.id],selection:`single`,groupBy:`location`,onChange:F,noun:`device`,showAll:!0,testId:j}),C.length>0&&e(`div`,{"data-testid":`source-incompatible-devices`,children:[e(U,{variant:`ghost`,size:`sm`,className:`h-auto w-full justify-start gap-1 px-0 text-[11px] text-foreground-muted`,onClick:()=>g(e=>!e),children:[i(f,{className:`size-3 transition-transform ${h?`rotate-180`:``}`}),r(`customize.sourceSelector.notCompatibleDevices`,{count:C.length})]}),h&&i(`ul`,{className:`mt-1 flex flex-col gap-0.5 pl-4 text-[11px] text-foreground-subtle`,children:C.map(e=>i(`li`,{children:e.name},e.id))})]})]}),z=t.kind===`event`&&t.picked.length>0?i(`ul`,{"data-testid":`source-picked-list`,className:`flex flex-col gap-2`,children:t.picked.map(n=>e(`li`,{className:`flex flex-col gap-1 text-xs`,children:[e(`span`,{className:`text-foreground`,children:[n.deviceName,` · `,J(n.cap,n.fieldPath,s.language)]}),t.shape===`span`&&n.mode!==void 0&&i(Pr,{mode:n.mode,modes:t.sourceModes,name:n.stableId,onChange:e=>t.onPickedChange(vi(t.picked,n,e))}),i(U,{variant:`ghost`,size:`sm`,onClick:()=>t.onPickedChange(_i(t.picked,n)),children:r(`customize.event.clear`)})]},`${n.addonId}/${n.stableId}/${n.cap}.${n.fieldPath}`))}):null,te=t.kind===`event`?e(`div`,{className:`flex flex-col gap-2`,children:[t.shape===`pulse`&&e(c,{children:[i(yi,{edges:t.edges,edge:t.edge,onChange:t.onEdgeChange}),e(`label`,{className:`flex flex-col gap-1 text-[11px] text-foreground`,children:[r(`customize.event.debounce`),i(H,{type:`number`,"aria-label":r(`customize.event.debounce`),value:Number.isFinite(t.debounceSec)?t.debounceSec:0,onChange:e=>{let n=Number(e.target.value);Number.isFinite(n)&&n>=0&&t.onDebounceSecChange(n)}})]})]}),t.shape===`span`&&e(c,{children:[i(bi,{label:r(`customize.event.timeout`),value:t.timeoutSec,onChange:t.onTimeoutSecChange}),t.cooldownSec!==null&&i(bi,{label:r(`customize.event.cooldown`),value:t.cooldownSec,onChange:t.onCooldownSecChange})]})]}):null;return i(Vr,{step:l,devices:ee,values:e(`div`,{className:`flex min-h-0 flex-col gap-2`,children:[z,t.device!==null&&i(at,{device:t.device,form:`full`,className:`text-[11px] font-medium text-foreground`}),t.device===null?i(`p`,{className:`text-[11px] text-foreground-subtle`,children:r(`customize.sourceSelector.noDevice`)}):E.status===`pending`?i(`p`,{role:`status`,className:`text-[11px] text-foreground-subtle`,children:r(`customize.picker.loadingFields`)}):E.status===`error`?i(V,{title:r(`customize.picker.fieldsFailed`),message:E.error?.message??``}):e(`div`,{className:`flex flex-col gap-3`,children:[t.kind===`event`?i(Ji,{fields:I===null?[]:[I],language:s.language,emptyLabel:r(`customize.sourceSelector.noStateField`)}):null,t.kind!==`event`&&M.map(n=>e(`section`,{"aria-label":n.title,children:[i(`h4`,{className:`text-[10px] font-medium uppercase tracking-wide text-foreground-muted`,children:n.title}),i(`ul`,{className:`mt-1 flex flex-col gap-1`,children:n.rows.map(n=>i(`li`,{children:e(`label`,{className:`flex flex-wrap items-center gap-2 text-[11px] text-foreground`,children:[i(`input`,{type:`radio`,name:`source-value`,checked:t.field?.cap===n.cap&&t.field.path===n.path,"data-testid":`source-value-${n.cap}.${n.path}`,onChange:()=>{if(t.onFieldChange({cap:n.cap,path:n.path}),t.kind===`formula`)return;let e=Gi(t,O,D.status===`success`?D.data:null,n.cap,n.path);e!==null&&e.ok&&t.onTransformChange(ar(e))}}),i(`span`,{children:n.label}),i(`span`,{className:`text-foreground-muted`,children:n.currentText}),i(`span`,{className:`text-foreground-subtle`,children:Vi(n.compatibility,r)})]})},`${n.cap}.${n.path}`))})]},n.cap)),t.kind!==`event`&&N.length>0&&e(`div`,{"data-testid":`source-incompatible-values`,children:[e(U,{variant:`ghost`,size:`sm`,className:`h-auto w-full justify-start gap-1 px-0 text-[11px] text-foreground-muted`,onClick:()=>v(e=>!e),children:[i(f,{className:`size-3 transition-transform ${_?`rotate-180`:``}`}),r(`customize.sourceSelector.otherValues`)]}),_&&i(`ul`,{className:`mt-1 flex flex-col gap-1 pl-4 text-[11px] text-foreground-subtle`,children:N.map(t=>e(`li`,{children:[t.label,` · `,t.currentText]},`${t.cap}.${t.path}`))})]})]}),t.kind===`scalar`&&P!==null&&P.ok&&i(ur,{control:ir(P.transforms),transforms:P.transforms,declared:P.declared,unit:P.sourceUnit,value:t.transform,onChange:t.onTransformChange}),t.kind===`keyed`&&P!==null&&P.ok&&t.field!==null&&i(ur,{control:ir(P.transforms),transforms:P.transforms,declared:P.declared,unit:P.sourceUnit,value:t.transform,onChange:t.onTransformChange}),te]}),back:t.device===null?null:{label:i(at,{device:t.device,form:`compact`}),ariaLabel:r(`customize.sourceSelector.backToDevice`,{name:t.device.name})},onBack:()=>u(Lr()),done:null,onDone:()=>void 0})}function Gi(e,t,n,r,i){if(e.kind===`keyed`){let a=t.caps.flatMap(e=>e.fields.filter(e=>e.item!==!0).map(t=>({cap:e.cap,path:t.path,kind:t.kind,unit:qi(n,e.cap),enumValues:t.enumValues??[]}))).find(e=>e.cap===r&&e.path===i);if(a===void 0)return null;let o=nr(e.destination.cap,e.destination.targetId,e.fieldPath,a);return!o.ok||o.mode!==`scalar`?null:o.fit}let a=t.caps.flatMap(e=>e.fields.filter(e=>e.item!==!0).map(t=>({cap:e.cap,path:t.path,kind:t.kind,unit:qi(n,e.cap)}))).find(e=>e.cap===r&&e.path===i&&(e.kind===`boolean`||e.kind===`number`||e.kind===`string`));if(a===void 0)return null;let o=Mr(e.destination.cap,e.destination.targetId,a);return o.ok?o:null}function Ki(e,t,n){return e.kind===`formula`||e.kind===`event`||e.device===null||e.field===null?null:Gi(e,t,n,e.field.cap,e.field.path)}function qi(e,t){if(e===null)return null;let n=e[t]?.unit;return typeof n==`string`&&n.length>0?n:null}function Ji({fields:t,language:n,emptyLabel:r}){return t.length===0?i(`p`,{className:`text-[11px] text-foreground-subtle`,children:r}):i(`ul`,{className:`flex flex-col gap-1`,children:t.map(t=>e(`li`,{"data-testid":`source-declared-field`,className:`text-[11px] text-foreground`,children:[i(`span`,{className:`font-medium`,children:qt(t.cap,n)}),` · `,J(t.cap,t.path,n),` `,i(`span`,{className:`text-foreground-muted`,children:t.currentText})]},`${t.cap}.${t.path}`))})}function Yi(e,t,n,r,i,a){let o=cn(e,r,i,a).find(e=>e.cap===t&&e.path===n);return o===void 0||o.source===null?null:{device:e,ref:{addonId:e.addonId,stableId:e.stableId},cap:o.cap,path:o.path,kind:o.kind,source:o.source,value:o.value}}s();var Xi=new Map;function Zi(e,t,n,r){return e.kind===`from`?`${t.get(D(e.source))??r} · ${J(e.cap,e.fieldPath,n)}`:``}function Qi({open:t,title:n,fieldPath:r,fieldLabel:a,sourceNames:s=Xi,initial:c,selfNative:l=null,onClose:u,onSave:d}){let{t:f,i18n:p}=K(),[m,h]=o(c.kind===`expression`?c:{kind:`expression`,expr:`null`,bindings:{}}),[g,_]=o(`idle`),[v,y]=o(null),[b,x]=o(null),S=At({deviceId:v?.id??0}),C=ot({deviceId:v?.id??0}),w=S.status===`success`?S.data:{caps:[]},T=Be(m.expr,m.bindings),E=Object.keys(m.bindings);return i(yt,{open:t,onOpenChange:e=>{e||u()},children:e(Ct,{width:`lg`,scroll:`body`,placement:`sheet-on-mobile`,"data-testid":`formula-dialog`,children:[i(mt,{children:i(Ot,{children:n})}),e(Tt,{className:`flex flex-col gap-2`,children:[i(`span`,{className:`text-xs text-foreground`,children:a??J(``,r,p.language)}),i(Bn,{label:f(`compositionEditor.formulaFor`,{path:a??r}),value:m.expr,bindings:E,onChange:e=>h({...m,expr:e})}),i(`ul`,{className:`flex flex-col gap-0.5 text-[11px]`,children:Object.entries(m.bindings).map(([t,n])=>e(`li`,{className:`flex flex-wrap items-center gap-2`,children:[i(`span`,{className:`font-mono`,children:t}),i(`span`,{children:n.kind===`from`?Zi(n,s,p.language,f(`customize.fieldsCard.unknownDevice`)):JSON.stringify(n.value)}),i(U,{size:`sm`,variant:`ghost`,"aria-label":f(`compositionEditor.removeBinding`,{name:t}),onClick:()=>{let{[t]:e,...n}=m.bindings;h({...m,bindings:n})},children:`×`})]},t))}),e(`div`,{className:`flex flex-wrap gap-2`,children:[l!==null&&i(U,{size:`sm`,variant:`outline`,"data-testid":`formula-self-native`,onClick:()=>{let e=Object.keys(m.bindings),t=m.bindings.v===void 0?`v`:Fn(e);h({...m,bindings:{...m.bindings,[t]:{kind:`from`,source:l.source,cap:l.cap,fieldPath:l.fieldPath}}})},children:f(`customize.override.selfNative`)}),i(U,{size:`sm`,variant:`outline`,onClick:()=>_(`add-binding`),children:f(`compositionEditor.addSource`)})]}),T!==null&&i(`p`,{role:`alert`,className:`text-xs text-danger`,children:T}),i(Kn,{source:m}),g===`add-binding`&&e(`div`,{className:`flex flex-col gap-2 border border-border rounded-md p-2`,children:[i(Ui,{kind:`formula`,enabled:t,hostId:-1,destination:{cap:`formula`,targetId:`binding`,title:f(`compositionEditor.addSource`),acceptAnyField:!0},device:v,field:b,onDeviceChange:y,onFieldChange:x}),e(`div`,{className:`flex flex-wrap gap-2`,children:[i(U,{variant:`ghost`,size:`sm`,onClick:()=>_(`idle`),children:f(`customize.picker.cancel`)}),i(U,{size:`sm`,disabled:v===null||b===null,onClick:()=>{if(v===null||b===null)return;let e=Yi(v,b.cap,b.path,w,C.status===`success`?C.data:null,null);if(e===null)return;let t=Fn(E);h({...m,bindings:{...m.bindings,[t]:{kind:`from`,source:e.ref,cap:e.cap,fieldPath:e.path}}}),y(null),x(null),_(`idle`)},children:f(`compositionEditor.addSource`)})]})]})]}),e(bt,{children:[i(U,{variant:`ghost`,onClick:u,children:f(`compositionEditor.cancel`)}),i(U,{"data-testid":`formula-dialog-save`,disabled:T!==null,onClick:()=>{d(m),u()},children:f(`compositionEditor.save`)})]})]})})}s();function $i({open:t,from:n,initialTo:r,onClose:a,onSave:s}){let{t:c}=K(),l=z(n),[u,d]=o(r??l[0]??``),f=l.includes(u)?u:l[0]??``;return i(yt,{open:t,onOpenChange:e=>{e||a()},children:e(Ct,{width:`sm`,scroll:`body`,placement:`sheet-on-mobile`,"data-testid":`convert-unit-dialog`,children:[i(mt,{children:i(Ot,{children:c(`customize.override.convertTitle`)})}),e(Tt,{className:`flex flex-col gap-2`,children:[i(`p`,{className:`text-xs text-foreground`,children:c(`customize.override.convertSummary`,{from:n,to:f})}),l.length>1&&i(W,{"aria-label":c(`customize.override.targetUnit`),value:f,onChange:e=>d(e.target.value),options:l.map(e=>({value:e,label:e}))})]}),e(bt,{children:[i(U,{variant:`ghost`,onClick:a,children:c(`compositionEditor.cancel`)}),i(U,{"data-testid":`convert-unit-publish`,disabled:f===``||f===n,onClick:()=>{s(f),a()},children:c(`customize.override.publish`)})]})]})})}function ea(e,t,n,r,i){return{kind:`expression`,expr:`convert(v, ${JSON.stringify(e)}, ${JSON.stringify(t)})`,bindings:{v:{kind:`from`,source:n,cap:r,fieldPath:i}}}}function ta(e){return{kind:`expression`,expr:JSON.stringify(e),bindings:{}}}function na(e,t,n,r,i,a){let o=X(e,n)??{kind:`fields`,cap:n,fields:{}},s={...o.fields,[r]:i},c=Object.fromEntries(Object.entries(s).filter(([e])=>!a.includes(e)));return Y(e,t,{...o,fields:c})}function ra(e,t,n,r){let i=Ue(t,n);if(i===null||e===null)return[];let a=e.fields[i];return a?.kind===`expression`&&a.expr===JSON.stringify(r)&&i!==n?[i]:[]}function ia(e,t,n,r){let i=X(e,n);if(i===null)return e;let a=new Set(r),o=Object.fromEntries(Object.entries(i.fields).filter(([e])=>!a.has(e)));return Object.keys(o).length===0?$t(e,n):Y(e,t,{...i,fields:o})}s();function aa({deviceId:t,self:n,selfName:r,cap:a,fieldPath:s,label:l,unit:u,valueKind:d=null,handle:f,names:p,toFill:m=!1}){let{t:h,i18n:g}=K(),_=rn(),[v,y]=o(`closed`),b=q(f.state),x=X(b,a),S=x?.fields[s]??null,C=S===null?null:ce(S),w=u===void 0?[]:z(u),T=new Map(p);T.set(D(n),r);let E=()=>y(`closed`),O=(e,t)=>{f.save(na(b,n,a,s,e,t))},k=()=>C?.kind===`convert-unit`?ra(x,a,s,C.to):[];return e(`div`,{className:`flex flex-col gap-1 border-t border-border pt-2 first:border-t-0 first:pt-0`,"data-testid":`override-row-${a}-${s}`,children:[e(`div`,{className:`flex flex-wrap items-center justify-between gap-2`,children:[i(`span`,{className:`text-xs text-foreground`,children:l}),m&&S===null&&i(Dt,{variant:`warning`,children:h(`compositionEditor.toFill`)})]}),e(`div`,{className:`flex flex-wrap items-baseline justify-between gap-2`,children:[i(`span`,{className:`text-xs text-foreground`,children:h(`customize.scalar.effective`)}),i(yn,{target:{deviceId:t,cap:a,path:s}})]}),C===null?i(`p`,{className:`text-xs text-foreground-subtle`,children:h(`customize.override.none`)}):i(ca,{entry:C,names:T,language:g.language,unknownDevice:h(`customize.fieldsCard.unknownDevice`)}),i(`div`,{className:`flex flex-wrap gap-2`,children:C===null?i(sa,{cap:a,fieldPath:s,saving:f.saving,convert:w.length>0,onFrom:()=>y(`from`),onFormula:()=>y(`formula`),onConvert:()=>y(`convert`)}):e(c,{children:[i(U,{variant:`outline`,size:`sm`,disabled:f.saving,onClick:()=>y(oa(C)),children:h(`customize.scalar.change`)}),i(U,{variant:`ghost`,size:`sm`,disabled:f.saving,onClick:()=>{if(b===null)return;let e=ia(b,n,a,[s,...k()]);_(h(`customize.fieldsCard.removeField`,{field:l}),e===null).then(t=>{t&&f.save(e)})},children:h(`customize.scalar.remove`)})]})}),i(yt,{open:v===`from`,onOpenChange:e=>{e||E()},children:e(Ct,{width:`lg`,scroll:`body`,placement:`sheet-on-mobile`,children:[i(mt,{children:i(Ot,{children:l})}),i(Tt,{children:v===`from`&&i(la,{title:h(`customize.override.fromDevice`),hostId:t,valueKind:d??(u===void 0?null:`number`),onCancel:E,onConfirm:e=>{O(e.source,k()),E()}})})]})}),v===`formula`&&i(Qi,{open:!0,title:h(`compositionEditor.formulaFor`,{path:l}),fieldPath:s,fieldLabel:l,sourceNames:T,initial:S?.kind===`expression`?S:{kind:`expression`,expr:`v`,bindings:{}},selfNative:{source:n,cap:a,fieldPath:s},onClose:E,onSave:e=>{O(e,k()),E()}}),v===`convert`&&u!==void 0&&i($i,{open:!0,from:u,initialTo:C?.kind===`convert-unit`?C.to:null,onClose:E,onSave:e=>{let t=Ue(a,s),r=na(b,n,a,s,ea(u,e,n,a,s),[]),i=t===null?r:na(r,n,a,t,ta(e),[]);f.save(i),E()}})]})}function oa(e){return e.kind===`convert-unit`?`convert`:e.kind===`from`?`from`:`formula`}function sa({cap:t,fieldPath:n,saving:r,convert:a,onFrom:o,onFormula:s,onConvert:c}){let{t:l}=K();return e(gt,{children:[i(St,{className:`h-7 px-2.5 text-xs rounded-md border border-border bg-surface text-foreground`,disabled:r,"data-testid":`override-add-${t}-${n}`,children:l(`customize.override.add`)}),e(vt,{children:[i(wt,{onClick:o,children:l(`customize.override.fromDevice`)}),i(wt,{onClick:s,children:l(`customize.override.formula`)}),a&&i(wt,{onClick:c,children:l(`customize.override.convertUnit`)})]})]})}function ca({entry:t,names:n,language:r,unknownDevice:a}){let{t:o}=K();return t.kind===`companion`?i(`span`,{className:`text-xs text-foreground`,children:o(`customize.fieldsCard.now`)}):t.kind===`convert-unit`?e(`p`,{className:`flex flex-wrap items-center gap-1 text-xs text-foreground`,children:[i(`span`,{children:o(`customize.override.convertSummary`,{from:t.from,to:t.to})}),i(Dt,{children:o(`customize.override.convertUnit`)})]}):t.kind===`formula`?e(`p`,{className:`flex flex-wrap items-center gap-1 text-xs text-foreground`,children:[i(`span`,{className:`break-words`,children:wn(t.expr,t.bindings,n,r,a)}),i(Dt,{children:o(`compositionEditor.formula`)})]}):e(`div`,{className:`flex flex-col gap-0.5`,children:[t.sources.map(e=>{let t=D(e.source);return i(`span`,{className:`text-xs text-foreground`,children:o(`customize.fieldsCard.from`,{name:n.get(t)??a,field:J(e.cap,e.fieldPath,r)})},`${t}:${e.cap}:${e.fieldPath}`)}),t.aggregate!==null&&i(`span`,{className:`text-xs text-foreground-muted`,children:o(xn(t.aggregate))})]})}function la({title:t,hostId:n,valueKind:r,onCancel:a,onConfirm:s}){let{t:c}=K(),[l,u]=o(null),[d,f]=o(null),p=At({deviceId:l?.id??0}),m=ot({deviceId:l?.id??0}),h=p.status===`success`?p.data:{caps:[]};return e(`div`,{className:`flex flex-col gap-2`,children:[i(Ui,{kind:`formula`,enabled:!0,hostId:n,destination:{cap:`override`,targetId:`field`,title:t,pickerTargetKind:r},device:l,field:d,onDeviceChange:u,onFieldChange:f}),e(`div`,{className:`flex flex-wrap gap-2`,children:[i(U,{variant:`ghost`,onClick:a,children:c(`customize.picker.cancel`)}),i(U,{disabled:l===null||d===null,onClick:()=>{if(l===null||d===null)return;let e=Yi(l,d.cap,d.path,h,m.status===`success`?m.data:null,r);e!==null&&s(e)},children:c(`customize.override.save`)})]})]})}function ua(e,t){return oe(e,t)}function da({deviceId:t,selfName:n,card:r,handle:a,names:o}){let{t:s,i18n:c}=K(),l=rn(),u=q(a.state),d=c.language,f=qt(r.cap,d),p=new Set(Object.keys(r.entries)),m=Qt(r.cap,p),h=()=>{if(u===null)return;let e=$t(u,r.cap);l(s(`customize.fieldsCard.removeWhat`,{cap:f}),e===null).then(t=>{t&&a.save(e)})},g=(e,s)=>i(aa,{deviceId:t,self:a.target,selfName:n,cap:r.cap,fieldPath:e,label:J(r.cap,e,d),unit:ua(r.cap,e),handle:a,names:o,toFill:s},e);return e(`div`,{className:`flex flex-col gap-3 px-3 py-2 sm:px-4`,children:[m.map(e=>g(e,!0)),Object.keys(r.entries).filter(e=>!m.includes(e)).map(e=>g(e,!1)),i(`div`,{className:`flex flex-wrap gap-2`,children:i(U,{variant:`ghost`,size:`sm`,disabled:a.saving,onClick:h,children:s(`customize.fieldsCard.removeFeature`,{cap:f})})})]})}s();function fa({device:e,handle:t,skipCaps:r}){let{i18n:a}=K(),o=$e(e,`compact`),s=q(t.state),l=Vt(s!==null),u=n(()=>l.kind===`known`?new Map(l.value.map(e=>[D({addonId:e.addonId,stableId:e.stableId}),e.name])):new Map,[l]);if(s===null)return null;let{model:d}=fe(s),f=d.cards.filter(e=>e.card.cardKind===`fields`&&!r.has(e.card.cap));return f.length===0?null:i(c,{children:f.map(n=>{if(n.card.cardKind!==`fields`)return null;let r=n.card,s=qt(r.cap,a.language);return i(Lt,{id:r.cap,icon:We,title:s,testId:`fields-card-${r.cap}`,children:i(da,{deviceId:e.id,selfName:o,card:r,handle:t,names:u})},r.cap)})})}function pa(){return Object.entries(M).flatMap(([e,t])=>t.targets.filter(e=>e.cardinality===`event`).map(t=>({cap:e,pulse:ma(t),span:ha(t)})).filter(e=>e.pulse!==null||e.span!==null))}function ma(e){return e.shape===`pulse`?e.timestampPath===void 0||e.counterPath===void 0||e.debounceMs===void 0||e.edges===void 0||e.defaultEdge===void 0||!e.edges.includes(e.defaultEdge)?null:{id:e.id,timestampPath:e.timestampPath,counterPath:e.counterPath,debounceMs:e.debounceMs,edges:e.edges,defaultEdge:e.defaultEdge,apply:`add`,deviceTypes:e.deviceTypes}:null}function ha(e){return e.shape!==`span`||e.timeoutMs===void 0||e.applyAuthority?.kind!==`camera-sensors`?null:{id:e.id,timeoutMs:e.timeoutMs,cooldownMs:e.cooldownMs??null,sourceModes:e.sourceModes??[`in-addition`],deviceTypes:e.deviceTypes}}function ga(e,t){return e===`Native`||e.startsWith(`Native`)?`customize.assign.native`:e===`pending`?`customize.event.checking`:e===`unknown`||e===`unreadable`?`customize.event.badge.unavailable`:`customize.event.badge.${t}`}function _a(e){return new Set(e.filter(e=>{let t=e.nativeAddonId?.trim()??``;return t!==``&&t!==`composer`}).map(e=>e.capName))}function va(e,t){return{cap:e,apply:t.apply,authority:t.applyAuthority?.kind??`composition-claim`,nativeItemsReadOnly:t.nativeItems===`read-only`}}function ya(e){return e.kind===`known`?null:e}function ba(e,t){return e.composable.kind===`known`?e.composable.value.has(t)?{kind:`present`,mode:`add`}:{kind:`absent`}:e.composable}function xa(e){if(e.deviceType!==je.Camera)return{kind:`absent`};switch(e.cameraSensors){case`pending`:return{kind:`pending`};case`unknown`:return{kind:`unknown`,reason:G.t(`helpers.assignmentAvailability.sensorsUnchecked`)};case`absent`:return{kind:`absent`};case`present`:return{kind:`present`,mode:`add`}}}function Sa(e,t){if(e.authority===`camera-sensors`)return xa(t);let n=ya(t.nativeCaps);if(n!==null)return n;let r=t.nativeCaps.kind===`known`?t.nativeCaps.value:new Set;return e.nativeItemsReadOnly?ba(t,e.cap):r.has(e.cap)?{kind:`absent`}:ba(t,e.cap)}s();var Ca=new Map;function wa({handle:t,cap:n,fieldPath:r,itemKey:a,label:s,testId:l,sourceNames:u=Ca}){let{t:d,i18n:f}=K(),p=J(n,r,f.language),[m,h]=o(!1),g=q(t.state),_=X(g,n),v=a===void 0?_?.fields[r]:_?.items?.[a]?.fields[r];if(v===void 0)return null;let y=async e=>{if(_===null)return;let n;if(a===void 0)n={..._,fields:{..._.fields,[r]:e}};else{let t=_.items?.[a];if(t===void 0)return;n={..._,items:{..._.items,[a]:{...t,fields:{...t.fields,[r]:e}}}}}await t.save(Y(g,t.target,n))};return e(c,{children:[i(U,{variant:`ghost`,size:`sm`,"data-testid":l??`formula-entry-${n}-${r}`,onClick:()=>h(!0),children:s??d(`compositionEditor.formula`)}),i(Qi,{open:m,title:d(`compositionEditor.formulaFor`,{path:p}),fieldPath:r,fieldLabel:p,sourceNames:u,initial:v,onClose:()=>h(!1),onSave:e=>void y(e)})]})}function Ta({name:t,detail:n,meta:r,value:a,shown:o,readout:s,problem:c,onRemove:l,removeLabel:u,busy:d=!1}){return e(`li`,{className:`${p} grid grid-cols-[minmax(0,1fr)_auto] items-center gap-x-3 gap-y-1 sm:grid-cols-[minmax(0,2fr)_minmax(0,1fr)_minmax(0,1fr)_1.75rem]`,children:[e(`div`,{className:`min-w-0`,children:[i(`div`,{className:`text-xs text-foreground break-words`,children:t}),n!==null&&i(`div`,{className:`text-[11px] text-foreground-subtle break-words`,children:n}),c!==void 0&&i(`div`,{role:`alert`,className:`text-[11px] text-warning break-words`,children:c})]}),i(`div`,{className:`row-start-2 col-start-1 text-[11px] text-foreground-subtle empty:hidden sm:row-start-auto sm:col-start-auto sm:empty:block`,children:r}),i(`div`,{className:`row-start-3 col-start-1 empty:hidden sm:row-start-auto sm:col-start-auto sm:empty:block`,children:s===void 0?o===void 0?i(yn,{target:a}):o!==null&&i(bn,{display:o}):s}),i(`div`,{className:`row-start-1 col-start-2 flex justify-end sm:row-start-auto sm:col-start-auto`,children:l!==void 0&&i(_t,{icon:h,variant:`ghost`,size:`sm`,"aria-label":u,disabled:d,onClick:l})})]})}function Ea(e){return e.toLowerCase().normalize(`NFD`).replace(/[\u0300-\u036f]/g,``).replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``).slice(0,48)}function Da({preview:t}){let{t:n}=K();return e(`p`,{className:`text-[11px] text-foreground`,"data-testid":`scalar-preview`,children:[e(`span`,{className:`text-foreground-muted`,children:[n(`customize.scalar.preview`),` `]}),t.kind===`pending`&&i(`span`,{children:`…`}),t.kind===`value`&&i(`span`,{children:t.text}),t.kind===`dwell`&&i(`span`,{children:n(`customize.scalar.previewDwell`,{value:t.sourceText,level:t.active?n(`customize.scalar.thresholdActive`):n(`customize.scalar.thresholdClear`),countdown:n(t.active?`customize.scalar.runningIn`:`customize.scalar.stopsAfter`,{seconds:Math.round(t.countdownMs/1e3)})})}),t.kind===`failed`&&i(`span`,{title:Tr(t.reason)?n(wr(t.reason)):t.reason,className:`text-warning`,children:`?`})]})}function Oa(e){return!e.ok||e.mode===`enum`?{kind:`identity`}:ar(e.fit)}function ka(e,t){return Object.fromEntries(e.map(e=>[e,t.includes(e)?e:null]))}function Aa(e){let t={draft:{kind:`keyedArray`,cap:e.cap,targetId:e.targetId,key:e.key,label:e.label.trim(),fieldPath:e.fieldPath,source:{addonId:e.source.addonId,stableId:e.source.stableId,cap:e.source.cap,fieldPath:e.source.fieldPath},transform:e.transform},sourceValueKind:e.source.valueKind,sourceUnit:null,literals:e.literals},n=O({cap:e.cap,targetId:e.targetId,device:e.device,apply:e.apply,items:[t]});return n.ok?n.value:null}function ja(e,t,n){return(Zn(e,t).find(e=>e.path===n)?.literals??[]).map(e=>e.path)}function Ma(e,t,n,r){return Zn(e,t).find(e=>e.path===n)?.literals?.find(e=>e.path===r)?.values??[]}function Na(e,t,n){return rr(e,t,n)}s();var Pa={level:`customize.keyed.field.level`,"remaining.value":`customize.keyed.field.remaining`,status:`customize.keyed.field.status`};function Fa(t){let{t:n}=K(),r=t.mode===`change`?n(`customize.keyed.changeTitle`):n(`customize.keyed.addTitle`);return i(yt,{open:t.open,onOpenChange:e=>e?void 0:t.onClose(),children:e(Ct,{width:`xl`,placement:`sheet-on-mobile`,scroll:`body`,"aria-label":r,children:[i(mt,{children:i(Ot,{children:r})}),t.open&&i(Ia,{...t,heading:r})]})})}function Ia(t){let{t:r,i18n:a}=K(),s=Qn(t.cap,t.targetId),l=Zn(t.cap,t.targetId),[u,d]=o(t.seed?.label??``),[f,p]=o(t.seed?.key??``),[m,h]=o(t.mode===`change`),[g,_]=o(t.seed?.fieldPath??l[0]?.path??``),[v,y]=o(()=>Object.fromEntries(s.map(e=>[e.path,t.seed?.literals.find(t=>t.path===e.path)?.value??e.defaultValue]))),[b,x]=o(t.seed?.literals.find(e=>e.path===`remaining.kind`)?.value??Ma(t.cap,t.targetId,`remaining.value`,`remaining.kind`)[0]??``),S=lt({projection:`slim`}),C=n(()=>S.status===`success`?on(S.data):[],[S.status,S.data]),w=Wa(t.seed,C),[T,E]=o(null),[D,O]=o(!1);!D&&w!==null&&(E(w),O(!0));let k=At({deviceId:T?.id??0}),A=ot({deviceId:T?.id??0}),j=$n(k.status===`success`?k.data:{caps:[]},A.status===`success`?A.data:null),[M,N]=o(t.seed===null?null:`${t.seed.source.cap}.${t.seed.source.fieldPath}`),[P,F]=o(t.seed?.transform??{kind:`identity`}),[I,L]=o(()=>t.seed?.transform.kind===`enum-map`?t.seed.transform.mapping:{}),R=j.find(e=>`${e.cap}.${e.path}`===M)??null,ee=R===null?null:nr(t.cap,t.targetId,g,R),z=m?f:Ea(u),te=Ra(t.cap,t.targetId,g,v,b),ne=za(T,R,ee,I,P),re=ne===null?null:Aa({cap:t.cap,targetId:t.targetId,device:t.target,apply:t.apply,key:z,label:u,fieldPath:g,source:ne,transform:ne.transform,literals:te}),ie=Ba(re,z,g,R,A.status===`success`?A.data:null),ae=e=>{if(e===null){N(null);return}let n=j.find(t=>t.cap===e.cap&&t.path===e.path);n!==void 0&&se(n,nr(t.cap,t.targetId,g,n))},oe=e=>{d(e),m||p(Ea(e))};return e(c,{children:[e(Tt,{className:`flex flex-col gap-3 p-2 sm:p-4`,children:[e(`label`,{className:`flex flex-col gap-1 text-xs text-foreground`,children:[r(`customize.keyed.name`),i(H,{value:u,onChange:e=>oe(e.target.value)})]}),e(`label`,{className:`flex flex-col gap-1 text-xs text-foreground`,children:[r(`customize.keyed.key`),i(H,{value:z,disabled:t.mode===`change`,onChange:e=>{h(!0),p(e.target.value)}})]}),e(`label`,{className:`flex flex-col gap-1 text-xs text-foreground`,children:[r(`customize.keyed.assignField`),i(W,{value:g,options:l.map(e=>({value:e.path,label:r(Pa[e.path]??e.path)})),onChange:e=>{_(e.target.value),E(null),N(null),F({kind:`identity`})}})]}),s.map(t=>e(`label`,{className:`flex flex-col gap-1 text-xs text-foreground`,children:[r(`customize.keyed.trait.${t.path}`),i(W,{value:v[t.path]??t.defaultValue,options:t.values.map(e=>({value:e,label:r(`customize.keyed.value.${e}`)})),onChange:e=>y(n=>({...n,[t.path]:e.target.value}))})]},t.path)),ja(t.cap,t.targetId,g).map(n=>e(`label`,{className:`flex flex-col gap-1 text-xs text-foreground`,children:[r(`customize.keyed.unit`),i(W,{value:b,options:Ma(t.cap,t.targetId,g,n).map(e=>({value:e,label:r(`customize.keyed.value.${e}`)})),onChange:e=>x(e.target.value)})]},n)),i(Ui,{kind:`keyed`,enabled:t.open,hostId:t.host.id,fieldPath:g,destination:{cap:t.cap,targetId:t.targetId,fieldPath:g,title:r(Pa[g]??g)},device:T,field:Ua(M),transform:P,onDeviceChange:e=>{E(e),N(null),F({kind:`identity`})},onFieldChange:ae,onTransformChange:F}),ee?.ok===!0&&ee.mode===`enum`&&R!==null&&i(La,{values:R.enumValues,outputs:Na(t.cap,t.targetId,g),mapping:I,onChange:L}),ie!==null&&i(Da,{preview:ie})]}),e(bt,{className:`flex flex-wrap gap-2`,children:[i(U,{variant:`ghost`,onClick:t.onClose,children:r(`customize.scalar.cancel`)}),i(U,{"data-testid":`keyed-save-item`,disabled:!t.canSave||re===null||z===``,onClick:()=>{re!==null&&t.onSave(re,z)},children:r(`customize.keyed.save`)})]})]});function se(e,n){if(n.ok){if(N(`${e.cap}.${e.path}`),n.mode===`enum`){let n=ka(e.enumValues,Na(t.cap,t.targetId,g));L(n),F({kind:`enum-map`,mapping:{...n}});return}F(Oa(n))}}}function La(t){let{t:n}=K();return i(`div`,{className:`flex flex-col gap-1`,children:t.values.map(r=>e(`label`,{className:`flex flex-wrap items-center gap-2 text-xs text-foreground`,children:[r,i(W,{value:t.mapping[r]??``,options:[{value:``,label:n(`customize.keyed.unmapped`)},...t.outputs.map(e=>({value:e,label:n(`customize.keyed.value.${e}`)}))],onChange:e=>t.onChange({...t.mapping,[r]:e.target.value===``?null:e.target.value})})]},r))})}function Ra(e,t,n,r,i){let a=Object.entries(r).map(([e,t])=>({path:e,value:t})),o=ja(e,t,n).flatMap(e=>i===``?[]:[{path:e,value:i}]);return[...a,...o]}function za(e,t,n,r,i){return e===null||t===null||n===null||!n.ok?null:n.mode===`enum`?Object.keys(r).length===0?null:{addonId:e.addonId,stableId:e.stableId,cap:t.cap,fieldPath:t.path,valueKind:`enum`,transform:{kind:`enum-map`,mapping:{...r}}}:{addonId:e.addonId,stableId:e.stableId,cap:t.cap,fieldPath:t.path,valueKind:`number`,transform:i}}function Ba(e,t,n,r,i){if(e===null||r===null)return null;let a=e.items?.[t]?.fields[n];if(a===void 0)return{kind:`failed`,reason:`compile`};if(i===null)return{kind:`pending`};let o=Z(i[r.cap],r.path);if(a.kind===`from`)return Va(o);if(a.kind!==`expression`)return{kind:`failed`,reason:`compile`};let s=Ha(o);if(s===void 0)return{kind:`failed`,reason:`no-value`};let c=I(a.expr,{x:s},Date.now());return c.ok?Va(c.value):{kind:`failed`,reason:c.error}}function Va(e){return typeof e==`number`&&Number.isFinite(e)?{kind:`value`,text:String(e)}:typeof e==`string`&&e.length>0?{kind:`value`,text:e}:{kind:`failed`,reason:`empty`}}function Ha(e){if(typeof e==`number`||typeof e==`string`||typeof e==`boolean`)return e;if(e===null)return null}function Ua(e){if(e===null)return null;let t=e.indexOf(`.`);return t<=0?null:{cap:e.slice(0,t),path:e.slice(t+1)}}function Wa(e,t){return e===null?null:t.find(t=>t.addonId===e.source.addonId&&t.stableId===e.source.stableId)??null}var Ga=`consumables`,Ka=`items`,qa=Fe.shape.items;function Ja(e){let t=e.split(`.`).pop()??e,n=t.replace(/Level$/,``);return n===``?t:n}function Ya(e){let t=e.replace(/([a-z0-9])([A-Z])/g,`$1 $2`).toLowerCase();return t.charAt(0).toUpperCase()+t.slice(1)}function Xa(e,t){return e.caps.filter(e=>t.has(e.cap)&&e.cap!==`consumables`).flatMap(e=>e.fields.filter(e=>e.item!==!0&&nt(e)).map(t=>({kind:`field`,key:Ja(t.path),cap:e.cap,path:t.path})))}function Za(e){switch(e.kind){case`pending`:return{kind:`pending`};case`unknown`:return{kind:`unknown`,reason:e.reason};case`absent`:return{kind:`known`,value:[]};case`value`:{if(e.value===null)return{kind:`known`,value:[]};let t=qa.safeParse(e.value);return t.success?{kind:`known`,value:t.data.map(e=>({kind:`item`,key:e.key,item:e}))}:{kind:`unknown`,reason:t.error.message}}}}function Qa(e,t,n){if(e.kind!==`known`)return e;if(t.kind!==`known`)return t;let r=Xa(t.value,e.value);if(!e.value.has(`consumables`)||n===null)return{kind:`known`,value:r};let i=Za(n);return i.kind===`known`?{kind:`known`,value:[...r,...i.value]}:i}function $a(e){return e.defaults.map(t=>t.kind===`field`?i(eo,{deviceId:e.deviceId,entry:t},`field:${t.cap}.${t.path}`):i(no,{entry:t},`item:${t.key}`))}function eo(e){let{t}=K(),n=_n({deviceId:e.deviceId,cap:e.entry.cap,path:e.entry.path});return i(Ta,{name:t(`customize.consumables.fields.${e.entry.key}`,{defaultValue:Ya(e.entry.key)}),detail:t(`customize.consumables.builtIn`),meta:t(`customize.assign.native`),value:null,readout:i(to,{value:n}),removeLabel:``})}function to(e){switch(e.value.kind){case`pending`:return i(bn,{display:{text:`…`,tone:`muted`}});case`unknown`:return i(bn,{display:{text:`?`,title:e.value.reason,tone:`warning`}});case`absent`:return i(Je,{level:null,size:`sm`});case`value`:return i(Je,{level:it(e.value.value),size:`sm`})}}function no(e){let{t}=K(),{item:n}=e.entry,r=n.level===null?n.status===`replace`?t(`uiLibrary.consumablesPanel.replace`):void 0:`${Math.round(n.level)} %`;return i(Ta,{name:n.label,detail:t(`customize.consumables.builtIn`),meta:t(`customize.assign.native`),value:null,readout:i(Je,{level:xt(n),label:r,size:`sm`}),removeLabel:``})}s();var ro={consumables:x};function io(){return Object.entries(M).flatMap(([e,t])=>t.targets.filter(e=>e.cardinality===`keyedArray`).map(t=>({cap:e,target:t})))}function ao(t){let{t:n,i18n:r}=K(),a=rn(),[s,l]=o(null),[u,d]=o(null),f=q(t.handle.state),p=X(f,t.cap),m=co(t.handle,p),h=m.kind===`known`&&m.value!==null?A(m.value,t.cap,t.target.id):null,g=Vt(h!==null),_=lo(h,g),v=me({cap:t.cap,targetId:t.target.id,device:t.handle.target,stored:m,sourcePresence:_,sourceUnknownReason:g.kind===`unknown`?g.reason:null});if(!so(t,p))return null;let y=t.handle.state.kind===`none`||t.handle.state.kind===`present`,b=t.availability.kind===`present`&&y,x=n(`customize.keyed.title.${t.cap}`),S=po(n,v.text,v.assignedCount),C=async e=>{let n=await t.handle.save(e);d(n.kind===`refused`?n.reason:null)},w=async e=>{if(f===null||p===null)return;let r=Oe(p,e.key),i=r===null?$t(f,t.cap):Y(f,t.handle.target,r);await a(n(`customize.consumables.removeWhat`,{name:e.label}),i===null)&&await C(i)},T=s!==null&&s!==`add`?fo(h,s):null;return e(c,{children:[i(Lt,{id:t.cap,icon:ro[t.cap],title:x,testId:`keyed-card-${t.cap}`,actions:i(Dt,{children:S}),children:e(`div`,{className:`flex flex-col gap-2 px-3 py-2 sm:px-4`,children:[t.defaults.kind===`known`&&i($a,{deviceId:t.device.id,defaults:t.defaults.value}),t.defaults.kind===`unknown`&&i(V,{title:n(`customize.consumables.builtIn`),message:n(`customize.consumables.builtInUnreadable`,{reason:t.defaults.reason})}),h?.items.map(e=>i(oo,{deviceId:t.device.id,cap:t.cap,item:e,language:r.language,sourceName:uo(e,g),saving:t.handle.saving,onChange:()=>l(e.key),onRemove:()=>void w(e),handle:t.handle},e.key)),u!==null&&i(`p`,{role:`alert`,className:`text-xs text-danger break-words`,children:u}),b&&i(U,{variant:`outline`,size:`sm`,"data-testid":`keyed-add-${t.cap}`,disabled:t.handle.saving,onClick:()=>l(`add`),children:n(`customize.keyed.add`)})]})}),i(Fa,{open:s!==null,mode:s===`add`?`add`:`change`,cap:t.cap,targetId:t.target.id,host:t.device,target:t.handle.target,apply:`add`,seed:T,canSave:y&&!t.handle.saving,onClose:()=>l(null),onSave:(e,r)=>{if(s===`add`&&p?.items!==void 0&&p.items[r]!==void 0){d(n(`customize.keyed.duplicateKey`,{key:r}));return}let i=re(p,e,r);l(null),i!==null&&(d(null),C(Y(f,t.handle.target,i)))}})]})}function oo(t){let{t:n}=K(),r=t.item.compile,a=t.item.recognized&&r!==null,o=r===null?``:J(r.draft.source.cap,r.draft.source.fieldPath,t.language),s=a?[t.sourceName??``,o].filter(e=>e.length>0).join(` · `):n(`customize.consumables.otherFormula`),c=r===null?null:ze(le,t.item.key,r.draft.fieldPath);return e(`div`,{className:`flex flex-col gap-1`,"data-testid":`keyed-row-${t.item.key}`,children:[i(Ta,{name:t.item.label,detail:s,meta:a?n(`customize.keyed.assigned`):null,value:c===null?null:{deviceId:t.deviceId,cap:t.cap,path:c},readout:c===null?null:i(yn,{target:{deviceId:t.deviceId,cap:t.cap,path:c}}),removeLabel:``}),e(`div`,{className:`flex flex-wrap gap-2`,children:[a&&i(U,{variant:`outline`,size:`sm`,disabled:t.saving,onClick:t.onChange,children:n(`customize.keyed.change`)}),a&&i(U,{variant:`ghost`,size:`sm`,disabled:t.saving,onClick:t.onRemove,children:n(`customize.keyed.remove`)}),!a&&i(wa,{handle:t.handle,cap:t.cap,itemKey:t.item.key,fieldPath:`status`})]})]})}function so(e,t){return e.target.deviceTypes.includes(e.device.type)?e.availability.kind!==`absent`||e.defaults.kind!==`known`||e.defaults.value.length>0?!0:t!==null:!1}function co(e,t){return e.state.kind===`pending`?{kind:`pending`}:e.state.kind===`unknown`||e.state.kind===`not-loaded`?{kind:`unknown`,reason:e.state.reason}:{kind:`known`,value:t}}function lo(e,t){let n=(e?.items??[]).filter(e=>e.recognized&&e.compile!==null);return n.length===0?`present`:t.kind===`pending`?`pending`:t.kind===`unknown`?`unknown`:n.every(e=>{let n=e.compile?.draft.source;if(n===void 0)return!1;let r=D(n);return t.value.some(e=>D({addonId:e.addonId,stableId:e.stableId})===r)})?`present`:`absent`}function uo(e,t){let n=e.compile?.draft.source;if(n===void 0||t.kind!==`known`)return null;let r=D(n);return t.value.find(e=>D({addonId:e.addonId,stableId:e.stableId})===r)?.name??null}function fo(e,t){let n=e?.items.find(e=>e.key===t),r=n?.compile;return n===void 0||r==null?null:{key:n.key,label:n.label,fieldPath:r.draft.fieldPath,literals:r.literals,source:{addonId:r.draft.source.addonId,stableId:r.draft.source.stableId,cap:r.draft.source.cap,fieldPath:r.draft.source.fieldPath,valueKind:r.sourceValueKind},transform:r.draft.transform}}function po(e,t,n){return t===`Native`?e(`customize.keyed.badge.native`):t===`pending`?e(`customize.keyed.badge.pending`):t===`unknown`?e(`customize.keyed.badge.unknown`):t.endsWith(`assigned`)?e(`customize.keyed.badge.assigned`,{count:n}):t}function mo(e){return i(c,{children:io().map(t=>t.target.deviceTypes.includes(e.device.type)?i(ao,{device:e.device,handle:e.handle,availability:Sa(va(t.cap,t.target),e.facts),cap:t.cap,target:t.target,defaults:e.defaults},t.cap):null)})}function ho(e){let t=lr(e);if(t===null)return{kind:`failed`,reason:br};if(e.transform.kind===`threshold`)return go(e.transform,e);let n=Or(e.cap,e.targetId),r=n===null?void 0:t.fields[n];if(r===void 0)return{kind:`failed`,reason:br};if(r.kind===`from`)return vo(e.sourceValue);if(r.kind!==`expression`)return{kind:`failed`,reason:br};if(r.expr.startsWith(`dwell(`))return{kind:`failed`,reason:xr};let i=_o(e.sourceValue);if(i===void 0)return{kind:`failed`,reason:Sr};let a=I(r.expr,{x:i},e.nowMs);return a.ok?vo(a.value):{kind:`failed`,reason:a.error}}function go(e,t){if(typeof t.sourceValue!=`number`||!Number.isFinite(t.sourceValue))return{kind:`failed`,reason:Sr};let n=e.comparison===`gte`?t.sourceValue>=e.threshold:t.sourceValue<=e.threshold,r=t.source.sourceUnit;return{kind:`dwell`,sourceText:r===null?String(t.sourceValue):`${t.sourceValue} ${r}`,active:n,countdownMs:n?e.startDwellMs:e.stopDwellMs}}function _o(e){if(typeof e==`number`||typeof e==`string`||typeof e==`boolean`)return e;if(e===null)return null}function vo(e){return e==null||typeof e==`number`&&!Number.isFinite(e)?{kind:`failed`,reason:Cr}:typeof e==`number`||typeof e==`string`||typeof e==`boolean`?{kind:`value`,text:String(e)}:{kind:`failed`,reason:Cr}}s();function yo(t){let{t:n}=K(),r=t.mode===`change`?n(`customize.scalar.changeTitle`,{title:t.title}):n(`customize.scalar.addTitle`,{title:t.title});return i(yt,{open:t.open,onOpenChange:e=>e?void 0:t.onClose(),children:e(Ct,{width:`xl`,placement:`sheet-on-mobile`,scroll:`body`,"aria-label":r,children:[i(mt,{children:i(Ot,{children:r})}),t.open&&i(bo,{...t,heading:r})]})})}function bo(t){let{t:r}=K(),a=lt({projection:`slim`}),s=n(()=>a.status===`success`?on(a.data):[],[a.status,a.data]),l=Co(t.seed,s),[u,d]=o(null),[f,p]=o(!1);!f&&l!==null&&(d(l),p(!0));let m=At({deviceId:u?.id??0}),h=ot({deviceId:u?.id??0}),g=m.status===`success`?m.data:{caps:[]},_=kr(g,h.status===`success`?h.data:null),[v,y]=o(wo(t.seed)),[b,x]=o(t.seed?.transform??{kind:`identity`}),S=v===null?null:(()=>{let[e,t]=v.split(`.`);return e===void 0||t===void 0?null:{cap:e,path:t}})(),C=_.find(e=>xo(e)===v)??null,w=C===null?null:Mr(t.cap,t.targetId,C),T=C===null||w===null||!w.ok?null:So(u,C,w,g),E=T===null?null:lr({cap:t.cap,targetId:t.targetId,device:t.target,apply:t.apply,source:T,transform:b}),D=C===null||h.status!==`success`||u===null?void 0:Z(h.data[C.cap],C.path),O=T===null?null:h.status===`pending`?{kind:`pending`}:ho({cap:t.cap,targetId:t.targetId,device:t.target,apply:t.apply,source:T,transform:b,sourceValue:D,nowMs:Date.now()});return e(c,{children:[e(Tt,{className:`flex flex-col gap-3 p-2 sm:p-4`,children:[i(Ui,{kind:`scalar`,enabled:t.open,hostId:t.host.id,destination:{cap:t.cap,targetId:t.targetId,title:t.title},device:u,field:S,transform:b,onDeviceChange:e=>{d(e),y(null),x({kind:`identity`})},onFieldChange:e=>{if(e===null){y(null);return}y(`${e.cap}.${e.path}`)},onTransformChange:x}),O!==null&&i(Da,{preview:O})]}),e(bt,{className:`flex flex-wrap gap-2`,children:[i(U,{variant:`ghost`,onClick:t.onClose,children:r(`customize.scalar.cancel`)}),i(U,{"data-testid":`scalar-save-override`,disabled:!t.canSave||E===null,onClick:()=>{E!==null&&t.onSave(E)},children:r(`customize.scalar.save`)})]})]})}function xo(e){return`${e.cap}.${e.path}`}function So(e,t,n,r){if(e===null||t.kind!==`boolean`&&t.kind!==`number`&&t.kind!==`string`)return null;let i=r.caps.find(e=>e.cap===t.cap),a=t.kind===`boolean`&&i?.fields.some(e=>e.path===`lastChangedAt`)?`lastChangedAt`:null;return{addonId:e.addonId,stableId:e.stableId,cap:t.cap,fieldPath:t.path,valueKind:t.kind,sourceUnit:n.sourceUnit,changedAtField:a}}function Co(e,t){return e===null?null:t.find(t=>t.addonId===e.source.addonId&&t.stableId===e.source.stableId)??null}function wo(e){return e===null?null:`${e.source.cap}.${e.source.fieldPath}`}var To=`Assigned · `;function Eo(e,t){if(e===`Native`)return{kind:`native`};if(e===`Native · source missing`)return{kind:`released`};if(e===`pending`)return{kind:`pending`};if(e===`unknown`)return{kind:`unknown`};if(e.startsWith(To)){let n=e.slice(11);return{kind:`assigned`,source:t??n}}return{kind:`unknown`}}s();var Do={id:0,name:``,type:`unknown`,stableId:``,parentDeviceId:null},Oo={battery:u,"running-state":_};function ko(){return Object.entries(M).flatMap(([e,t])=>t.targets.filter(e=>e.cardinality===`scalar`).map(t=>({cap:e,target:t})))}function Ao({device:t,handle:n,availability:r,cap:a,target:s}){let{t:l,i18n:u}=K(),d=rn(),[f,p]=o(!1),[m,h]=o(null),g=l(`customize.scalar.caps.${a}`),_=s.path??s.id,v=q(n.state),y=Mo(n,X(v,a)),b=y.kind===`known`&&y.value!==null?C({feature:y.value,device:n.target,cap:a,targetId:s.id}):null,x=b!==null,S=Vt(x),w=b===null||S.kind!==`known`?null:S.value.find(e=>D({addonId:e.addonId,stableId:e.stableId})===D(b.draft.source))??null,T=$e(w===null?Do:ni(w),`compact`),E=w===null?null:T,O=$e(t,`full`),k=No(x,S.kind,w!==null),A=be({cap:a,targetId:s.id,device:n.target,stored:y,sourcePresence:k,sourceUnknownReason:S.kind===`unknown`?S.reason:null}),j=Eo(A.text,E),M=n.state.kind===`none`||n.state.kind===`present`,N=r.kind===`present`?r.mode:null;if(r.kind===`absent`||!s.deviceTypes.includes(t.type))return null;let P=async e=>{let t=await n.save(e);h(t.kind===`refused`?t.reason:null)},F=async()=>{if(v===null)return;let e=$t(v,a);await d(l(`customize.scalar.removeWhat`,{name:E??(b===null?O:D(b.draft.source))}),e===null)&&await P(e)},I=b===null?null:{source:{addonId:b.draft.source.addonId,stableId:b.draft.source.stableId,cap:b.draft.source.cap,fieldPath:b.draft.source.fieldPath,valueKind:b.sourceValueKind,sourceUnit:b.sourceUnit,changedAtField:b.changedAtField},transform:b.draft.transform},L=j.kind===`assigned`?l(`customize.scalar.badge.assigned`,{source:j.source}):l(`customize.scalar.badge.${j.kind}`);return e(c,{children:[i(Lt,{id:a,icon:Oo[a],title:g,testId:`scalar-card-${a}`,actions:i(Dt,{children:L}),children:i(jo,{availability:r,answered:M,deviceId:t.id,cap:a,path:_,recognized:x,stored:y,presence:k,released:A.status.state===`released`,sourceName:E,sourceCap:b?.draft.source.cap??``,sourceField:b===null?``:J(b.draft.source.cap,b.draft.source.fieldPath,u.language),sourcePath:b?.draft.source.fieldPath??``,sourceDeviceId:w?.id??null,error:m,saving:n.saving,mode:N,onOpen:()=>p(!0),onRemove:()=>void F(),handle:n})}),N!==null&&i(yo,{open:f,mode:I===null?`add`:`change`,title:g,cap:a,targetId:s.id,host:t,target:n.target,apply:N,seed:I,canSave:M&&!n.saving,onClose:()=>p(!1),onSave:e=>{p(!1),P(Y(v,n.target,e))}})]})}function jo(t){let{t:n}=K();if(t.availability.kind===`pending`||t.availability.kind===`present`&&!t.answered)return i(`p`,{role:`status`,className:`px-3 py-2 text-xs text-foreground-subtle sm:px-4`,children:n(`customize.scalar.checking`)});if(t.availability.kind===`unknown`)return i(`div`,{className:`px-3 py-2 sm:px-4`,children:i(V,{title:n(`customize.scalar.unreadable`),message:t.availability.reason})});let r=t.stored.kind===`known`&&t.stored.value===null,a=!t.recognized&&t.stored.kind===`known`&&t.stored.value!==null;return e(`div`,{className:`flex flex-col gap-2 px-3 py-2 sm:px-4`,children:[e(`div`,{className:`flex flex-wrap items-baseline justify-between gap-2`,children:[i(`span`,{className:`text-xs text-foreground`,children:n(`customize.scalar.effective`)}),i(yn,{target:{deviceId:t.deviceId,cap:t.cap,path:t.path}})]}),t.released&&i(`p`,{className:`text-xs text-foreground`,children:n(`customize.scalar.released`)}),t.presence===`unknown`&&t.recognized&&i(V,{title:n(`customize.scalar.sourceUnreadable`),message:n(`customize.scalar.sourceHeld`,{name:t.sourceName??t.sourceCap})}),t.recognized&&!t.released&&e(`div`,{className:`flex flex-wrap items-baseline justify-between gap-2`,children:[i(`span`,{className:`text-xs text-foreground`,children:n(`customize.scalar.override`,{name:t.sourceName??`…`,field:t.sourceField})}),t.sourceDeviceId!==null&&i(yn,{target:{deviceId:t.sourceDeviceId,cap:t.sourceCap,path:t.sourcePath}})]}),a&&e(`p`,{className:`text-xs text-foreground flex flex-wrap items-center gap-1`,children:[n(`customize.scalar.otherFormula`),i(wa,{handle:t.handle,cap:t.cap,fieldPath:t.path})]}),r&&i(`p`,{className:`text-xs text-foreground-subtle`,children:n(`customize.scalar.noOverride`)}),t.error!==null&&i(`p`,{role:`alert`,className:`text-xs text-danger break-words`,children:t.error}),e(`div`,{className:`flex flex-wrap gap-2`,children:[t.recognized&&i(U,{variant:`outline`,size:`sm`,"data-testid":`scalar-change-${t.cap}`,onClick:t.onOpen,disabled:t.saving,children:t.released?n(`customize.scalar.chooseAnother`):n(`customize.scalar.change`)}),t.recognized&&i(U,{variant:`ghost`,size:`sm`,onClick:t.onRemove,disabled:t.saving,children:n(`customize.scalar.remove`)}),r&&i(U,{variant:`outline`,size:`sm`,"data-testid":`scalar-add-${t.cap}`,disabled:t.saving||t.mode===null,onClick:t.onOpen,children:n(`customize.scalar.add`)})]})]})}function Mo(e,t){return e.state.kind===`pending`?{kind:`pending`}:e.state.kind===`unknown`||e.state.kind===`not-loaded`?{kind:`unknown`,reason:e.state.reason}:{kind:`known`,value:t}}function No(e,t,n){return e?t===`pending`?`pending`:t===`unknown`?`unknown`:n?`present`:`absent`:`present`}function Po({device:e,handle:t,facts:n}){return i(c,{children:ko().map(r=>r.target.deviceTypes.includes(e.type)?i(Ao,{device:e,handle:t,availability:Sa(va(r.cap,r.target),n),cap:r.cap,target:r.target},r.cap):null)})}var Fo=[`threshold`,`sum`,`difference`,`ratio`,`expression`,`derivative`];function Io(){return Fo}function Lo(e){return Fo.some(t=>t===e)}function Ro(e){return e===`sum`||e===`difference`||e===`ratio`?{kind:`arithmetic`,op:e}:{kind:e}}var zo=[`temperature`,`humidity`,`pressure`,`illuminance`,`power`,`energy`,`battery`,`numeric`],Bo=[`motion`,`contact`,`leak`,`smoke`,`occupancy`,`binary`],Vo=L,Ho=[w],Uo=`was refused — `,Wo=/^(.+?) \[([a-z0-9-]+)\]: (.+)$/;function Go(){return[{id:`readings`,templateIds:zo},{id:`binary`,templateIds:Bo},{id:`actuators`,templateIds:Vo},{id:`appliances`,templateIds:Ho}]}var Ko={appliance:null,thresholdWatts:0,startDwellMs:0,stopDwellMs:0};function qo(e){if(e===`appliance`){let t=se.washer;return{kind:`group`,templateId:e,aggregate:`any`,active:null,appliance:`washer`,thresholdWatts:t.thresholdWatts,startDwellMs:t.startDwellMs,stopDwellMs:t.stopDwellMs,name:``,room:``,members:[]}}let t=B(e);return t===null?null:{kind:`group`,templateId:e,aggregate:t.defaultAggregate,active:t.family===`actuator`?`at-least-one`:null,...Ko,name:``,room:``,members:[]}}function Jo(e){return e.kind===`group`?qo(e.templateId):e.kind===`appliance`?qo(w):e.kind===`statistic`?{kind:`statistic`,stat:`mean`,window:{kind:`rolling`,span:`24h`},name:``,room:``,source:null}:e.kind===`threshold`?{kind:`threshold`,high:0,low:0,onForMs:0,offForMs:0,name:``,room:``,source:null}:e.kind===`arithmetic`?{kind:`arithmetic`,op:e.op,name:``,room:``,inputs:[]}:e.kind===`expression`?{kind:`expression`,expr:``,output:`number`,name:``,room:``,inputs:[]}:e.kind===`derivative`?{kind:`derivative`,window:{kind:`rolling`,span:`1h`},per:`hour`,name:``,room:``,source:null}:{kind:`integral`,reset:`daily`,name:``,room:``,source:null}}function Yo(e,t,n){if(e.kind===`appliance`)return{kind:`group`,templateId:w,aggregate:`any`,active:null,appliance:e.appliance,thresholdWatts:e.thresholdWatts,startDwellMs:e.startDwellMs,stopDwellMs:e.stopDwellMs,name:t,room:n,members:[Q(e.member)]};if(e.kind===`statistic`)return{kind:`statistic`,stat:e.stat,window:e.window,name:t,room:n,source:Q(e.source)};if(e.kind===`integral`)return{kind:`integral`,reset:e.reset,name:t,room:n,source:Q(e.source)};if(e.kind===`threshold`)return{kind:`threshold`,high:e.high,low:e.low,onForMs:e.onForMs,offForMs:e.offForMs,name:t,room:n,source:Q(e.source)};if(e.kind===`arithmetic`)return{kind:`arithmetic`,op:e.op,name:t,room:n,inputs:e.inputs.map(Q)};if(e.kind===`expression`)return{kind:`expression`,expr:e.expr,output:e.output,name:t,room:n,inputs:e.inputs.map(e=>({name:e.name,member:Q(e.member)}))};if(e.kind===`derivative`)return{kind:`derivative`,window:Ms(e.window),per:e.per,name:t,room:n,source:Q(e.source)};let r=B(e.templateId);return r===null||!r.aggregates.includes(e.aggregate)||r.family===`actuator`&&e.active===void 0||r.family!==`actuator`&&e.active!==void 0?null:{kind:`group`,templateId:e.templateId,aggregate:e.aggregate,active:e.active??null,...Ko,name:t,room:n,members:e.members.map(Q)}}function Xo(e){return e.helper!==void 0}function Zo(e,t){if(e.templateId===`appliance`)return e;let n=B(e.templateId);return n===null||!n.aggregates.includes(t)?e:{...e,aggregate:t}}function Qo(e,t){if(e.templateId===`appliance`)return e;let n=B(e.templateId);return n===null||n.family!==`actuator`?e:{...e,active:t,aggregate:we(t)}}function $o(e,t){return{...e,name:t}}function es(e,t){return t===e.templateId?e:qo(t)??e}function ts(e,t){if(e.templateId!==`appliance`)return e;let n=se[t];return{...e,appliance:t,thresholdWatts:n.thresholdWatts,startDwellMs:n.startDwellMs,stopDwellMs:n.stopDwellMs}}function ns(e){if(e.kind===`statistic`||e.kind===`integral`)return N(e.kind);if(e.kind===`threshold`)return R(`threshold`);if(e.kind===`arithmetic`)return R(e.op);if(e.kind===`expression`)return R(`expression`);if(e.kind===`derivative`)return R(`derivative`);if(e.templateId===`appliance`)return pe();let t=B(e.templateId);return t===null?null:Pe(t)}function rs(e){return e.kind===`statistic`?Es(e):e.kind===`integral`?Ds(e):e.kind===`threshold`?Os(e):e.kind===`arithmetic`?ks(e):e.kind===`expression`?As(e):e.kind===`derivative`?js(e):e.templateId===`appliance`?is(e):as(e)}function is(e){let t=e.members[0];return t===void 0||e.appliance===null?null:{kind:`appliance`,templateId:w,appliance:e.appliance,thresholdWatts:e.thresholdWatts,startDwellMs:e.startDwellMs,stopDwellMs:e.stopDwellMs,member:Q(t)}}function as(e){if(e.templateId===`appliance`)return null;let t=B(e.templateId)?.family===`actuator`&&e.active!==null;return{kind:`group`,templateId:e.templateId,aggregate:t&&e.active!==null?we(e.active):e.aggregate,...t&&e.active!==null?{active:e.active}:{},members:e.members.map(Q)}}var os={code:`member-constraint`,path:`helper.member`,message:`an appliance helper needs one power reading`},ss={code:`member-constraint`,path:`helper.source`,message:`pick one reading that declares history`},cs={code:`member-constraint`,path:`helper.source`,message:`pick one reading`},ls={code:`member-constraint`,path:`helper.inputs`,message:`pick the readings this helper combines`};function us(e){return e.kind===`group`?e.templateId===`appliance`?os:ls:e.kind===`threshold`?cs:e.kind===`arithmetic`||e.kind===`expression`?ls:ss}function ds(e){let t=rs(e);return t===null?{ok:!1,problems:[us(e)]}:xe(t)}async function fs(e,t){let n=ds(e);if(!n.ok)return ms(n.problems);try{return await t(n.composition,e.name.trim()),[]}catch(e){return hs(e instanceof Error?e.message:String(e))}}function ps(e){return e.kind===`statistic`||e.kind===`integral`||e.kind===`derivative`?e.source!==null:e.kind===`threshold`?e.source!==null&&e.low<=e.high:e.kind===`arithmetic`?e.op===`sum`?e.inputs.length>=2:e.inputs.length===2:e.kind===`expression`?e.inputs.length>=1&&e.expr.trim()!==``:e.templateId===`appliance`?e.members.length===1:e.members.length>=1&&e.members.length<=64}function ms(e){return e.map(e=>({path:e.path,code:e.code,message:e.message}))}function hs(e){let t=e.indexOf(Uo),n=(t===-1?e:e.slice(t+14)).split(/; (?=[^;]*\[[a-z0-9-]+\]:)/).flatMap(Bs);return n.length>0?n:[{path:``,code:`refused`,message:e}]}function gs(e,t){if(e.kind===`pending`)return{kind:`pending`};if(e.kind===`error`)return{kind:`unavailable`,message:e.message};let n=e.caps[t.outputCap];if(n===void 0)return{kind:`empty`};let r=n[t.outputField];return typeof r==`number`&&Number.isFinite(r)?{kind:`number`,value:r,unit:t.baseUnit}:typeof r==`boolean`?{kind:`boolean`,value:r}:{kind:`empty`}}function _s(e){if(e.kind===`pending`)return{kind:`pending`};if(e.kind===`error`)return{kind:`unavailable`,message:e.message};let t=e.caps[`group-status`];if(t===void 0)return{kind:`absent`};let n=zs(t.included),r=zs(t.excluded),i=zs(t.total);return n===null||r===null||i===null?{kind:`absent`}:{kind:`ready`,included:n,excluded:r,total:i}}function vs(e,t){if(t.length===0||t.some(e=>e.kind===`pending`))return{kind:`pending`};if(t.some(e=>e.kind===`error`)||!ys(e))return{kind:`unavailable`};let n=t.flatMap(e=>e.kind===`ready`?[e]:[]),r=ge(e,n),i=e===`light`&&r.some(e=>e.cap===`color`)?Ce(n.map(e=>e.features)):ve(e,n.map(e=>e.features));return{kind:`ready`,methods:r.map(e=>`${e.cap}.${e.method}`),modes:[...i]}}function ys(e){return L.some(t=>t===e)}function bs(e){if(e.kind===`pending`)return{kind:`pending`};if(e.kind===`error`)return{kind:`unavailable`,message:e.message};let t=e.caps[`group-commands`];if(t===void 0)return{kind:`none`};let n=Ie.safeParse(t);return n.success?n.data.results.length===0?{kind:`none`}:{kind:`rows`,rows:n.data.results.map(e=>({deviceId:e.deviceId,cap:e.cap,method:e.method,ok:e.ok,error:e.error??null,at:e.at}))}:{kind:`unavailable`,message:`group-commands`}}function xs(e,t,n,r,i=!1){if(e===`pending`)return`pending`;if(e===`error`)return`error`;let a=t?.[n];if(a===void 0)return`missing`;let o=a[r];return typeof o==`number`&&Number.isFinite(o)||typeof o==`boolean`||i&&typeof o==`string`&&o!==``?`value`:o===void 0?`missing`:`empty`}function Ss(e){return e.fleet===`answered`?e.deviceOnline===null||e.deviceOnline===!1?`excluded`:e.field===`pending`||e.field===`error`?`unknown`:e.field===`value`?`reporting`:`excluded`:`unknown`}function Cs(e){return e.some(e=>e.presence===`unknown`)?{kind:`pending`}:{kind:`named`,names:e.flatMap(e=>e.presence===`excluded`?[e.name]:[])}}function ws(e){if(!Ts(e))return{};let t={};for(let[n,r]of Object.entries(e))Ts(r)&&(t[n]=r);return t}function Ts(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Es(e){return e.source===null?null:{kind:`statistic`,stat:e.stat,window:Rs(e.window),source:Q(e.source)}}function Ds(e){if(e.source===null)return null;let t=e.source.cap===`power-meter`&&e.source.fieldPath===`watts`;return{kind:`integral`,reset:e.reset,output:t?`energy`:`meter`,source:Q(e.source)}}function Os(e){return e.source===null?null:{kind:`threshold`,source:Q(e.source),high:e.high,low:e.low,onForMs:e.onForMs,offForMs:e.offForMs}}function ks(e){return e.inputs.length===0?null:{kind:`arithmetic`,op:e.op,inputs:e.inputs.map(Q)}}function As(e){return e.inputs.length===0?null:{kind:`expression`,expr:e.expr.trim(),output:e.output,inputs:e.inputs.map(e=>({name:e.name,member:Q(e.member)}))}}function js(e){return e.source===null?null:{kind:`derivative`,window:Ms(e.window),per:e.per,source:Q(e.source)}}function Ms(e){return e.customMinutes===void 0?{kind:`rolling`,span:e.span}:{kind:`rolling`,span:e.span,customMinutes:e.customMinutes}}var Ns=`abcdefghijklmnopqrstuvwxyz`;function Ps(e){return`${e.source.addonId}/${e.source.stableId}/${e.cap}.${e.fieldPath}`}function Fs(e){for(let t=0;t<64;t++)for(let n of Ns){let r=t===0?n:`${n}${t}`;if(!e.has(r))return r}return`input${e.size+1}`}function Is(e){return e.kind===`group`?e.members:e.kind===`arithmetic`?e.inputs:e.kind===`expression`?e.inputs.map(e=>e.member):e.source===null?[]:[e.source]}function Ls(e,t){if(e.kind===`group`)return{...e,members:t};if(e.kind===`arithmetic`)return{...e,inputs:t};if(e.kind===`expression`){let n=new Map(e.inputs.map(e=>[Ps(e.member),e.name])),r=new Set,i=[],a=new Set(n.values());for(let[e,o]of t.entries()){let t=n.get(Ps(o)),s=Ns[e]??``,c=t!==void 0&&!r.has(t)?t:s!==``&&!r.has(s)&&!a.has(s)?s:Fs(new Set([...r,...a]));r.add(c),i.push({name:c,member:o})}return{...e,inputs:i}}return{...e,source:t[0]??null}}function Rs(e){return e.kind===`calendar`?{kind:`calendar`,period:e.period}:e.customMinutes===void 0?{kind:`rolling`,span:e.span}:{kind:`rolling`,span:e.span,customMinutes:e.customMinutes}}function Q(e){return{source:{addonId:e.source.addonId,stableId:e.source.stableId},cap:e.cap,fieldPath:e.fieldPath}}function zs(e){return typeof e!=`number`||!Number.isInteger(e)||e<0?null:e}function Bs(e){let t=Wo.exec(e.trim());if(t===null)return[];let n=t[1],r=t[2],i=t[3];return n===void 0||r===void 0||i===void 0?[]:[{path:n,code:r,message:i}]}function Vs({onPick:e}){let{t}=K();return i(`div`,{"data-testid":`helper-template-picker`,children:i(jt,{emptyMessage:t(`helper.noTemplates`),onPick:t=>{if(t===`statistic`||t===`integral`){e({kind:t});return}if(t===`appliance`){e({kind:`appliance`});return}if(Lo(t)){e(Ro(t));return}qs(t)&&e({kind:`group`,templateId:t})},groups:[...Js(t),{id:`math`,label:t(`helper.group.math`),tiles:Io().map(e=>Ws(e,t))},{id:`history`,label:t(`helper.group.history`),tiles:[Hs(`statistic`,Ke,t),Hs(`integral`,y,t)]}]})})}function Hs(e,t,n){let r=n(`helper.template.${e}`);return{key:e,label:r,testId:`helper-template-${e}`,icon:i(t,{className:`h-5 w-5 text-foreground-muted`,"aria-hidden":!0}),detailLabel:n(`helper.detailsOf`,{name:r}),detail:i(Ks,{id:e})}}var Us={threshold:g,sum:l,difference:m,ratio:Ge,expression:qe,derivative:d};function Ws(e,t){let n=t(`helper.template.${e}`),r=Us[e];return{key:e,label:n,testId:`helper-template-${e}`,icon:i(r,{className:`h-5 w-5 text-foreground-muted`,"aria-hidden":!0}),detailLabel:t(`helper.detailsOf`,{name:n}),detail:i(Gs,{id:e})}}function Gs({id:t}){let{t:n}=K();return e(`div`,{className:`max-w-xs space-y-1 text-xs`,children:[i(`p`,{className:`text-foreground-muted`,children:n(`helper.detail.${t}`)}),t===`derivative`&&i(`p`,{className:`text-foreground-subtle`,children:n(`helper.detail.history`)}),t===`expression`&&i(`p`,{className:`text-foreground-subtle`,children:n(`helper.detail.expressionStale`)})]})}function Ks({id:t}){let{t:n}=K();return e(`div`,{className:`max-w-xs space-y-1 text-xs`,children:[i(`p`,{className:`text-foreground-muted`,children:n(`helper.detail.${t}`)}),i(`p`,{className:`text-foreground-subtle`,children:n(`helper.detail.history`)})]})}function qs(e){return te.some(t=>t===e)}function Js(e){return Go().map(t=>({id:t.id,label:e(`helper.group.${t.id}`),tiles:Ys(t.templateIds,e)}))}function Ys(e,t){let n=[];for(let r of e){let e=Xs(r,t);e!==null&&n.push(e)}return n}function Xs(e,t){if(e===`appliance`)return Zs(t);if(!qs(e))return null;let n=B(e);if(n===null)return null;let r=t(`helper.template.${e}`),a=n.role===void 0?ut(n.deviceType).icon:Ye(n.role).icon;return{key:e,label:r,testId:`helper-template-${e}`,icon:i(a,{className:`h-5 w-5 text-foreground-muted`,"aria-hidden":!0}),detailLabel:t(`helper.detailsOf`,{name:r}),detail:i($s,{templateId:e})}}function Zs(e){let t=e(`helper.template.appliance`),n=ut(je.Washer).icon;return{key:w,label:t,testId:`helper-template-appliance`,icon:i(n,{className:`h-5 w-5 text-foreground-muted`,"aria-hidden":!0}),detailLabel:e(`helper.detailsOf`,{name:t}),detail:i(Qs,{})}}function Qs(){let{t:e}=K();return i(`div`,{className:`max-w-xs text-xs`,children:i(`p`,{className:`text-foreground-muted`,children:e(`helper.template.applianceSummary`)})})}function $s({templateId:t}){let{t:n}=K(),r=B(t);if(r===null)return null;let a=r.family===`actuator`?De.map(e=>n(`helper.active.${e}`)):r.aggregates.map(e=>n(`helper.aggregate.${e}`)),o=r.commandCaps.filter(e=>e!==`switch`);return e(`div`,{className:`max-w-xs space-y-1 text-xs`,children:[i(`p`,{className:`font-medium text-foreground`,children:n(`helper.supportedOperations`)}),i(`p`,{className:`text-foreground-muted`,children:a.join(`, `)}),o.length>0&&e(c,{children:[i(`p`,{className:`font-medium text-foreground`,children:n(`helper.sharedCaps`)}),i(`p`,{className:`text-foreground-muted`,children:o.map(e=>n(`helper.cap.${e}`)).join(`, `)})]}),r.id===`lock`&&i(`p`,{className:`text-foreground-subtle`,children:n(`helper.detail.lockConfirm`)}),i(`p`,{className:`text-foreground-subtle`,children:n(`helper.offlineCounted`)})]})}s();function ec({initial:t,start:n,purpose:r,saving:s,onSave:l,onDraftChange:u}){let{t:d}=K(),[f,p]=o(t===null?`template`:n),[m,h]=o(t),[g,_]=o([]),[v,y]=o(null);a(()=>{u?.(m)},[m,u]);let b=e=>{h(t=>e.kind===`group`&&t?.kind===`group`&&t.templateId!==`appliance`?es(t,e.templateId):Jo(e)),_([]),y(null),p(`parameters`)},x=e=>{if(m===null)return;let t=m;(async()=>{let n=await l(t,e);if(n.kind===`refused`){_(n.lines);return}e===`again`&&(y({deviceId:n.deviceId,name:t.name.trim()}),h(null),p(`template`),_([]))})()},S=m===null?null:ns(m),C=m!==null&&m.kind===`group`&&m.templateId!==`appliance`?B(m.templateId):null,w=m===null?[]:Is(m);return e(`div`,{className:`flex flex-col gap-3`,"data-testid":`helper-wizard`,children:[v!==null&&i(`p`,{role:`status`,className:`text-xs text-foreground`,"data-testid":`helper-created`,children:i(Ft,{i18nKey:`helper.created`,values:{name:v.name===``?d(`helper.newHelper`):v.name},components:{device:i(Nt,{to:Pt(v.deviceId),className:`text-primary hover:underline`})}})}),i(`p`,{className:`text-[11px] text-foreground-muted`,children:d(yc(f,m))}),f===`template`&&i(Vs,{onPick:b}),f===`parameters`&&m?.kind===`group`&&m.templateId===`appliance`&&i(nc,{draft:m,onDraft:e=>h(e)}),f===`parameters`&&m?.kind===`group`&&C!==null&&e(`div`,{className:`grid grid-cols-1 gap-2 sm:grid-cols-2`,children:[C.family===`actuator`&&m.active!==null?e(`label`,{className:`flex flex-col gap-1 text-[11px]`,children:[d(`helper.criterion`),i(W,{"aria-label":d(`helper.criterion`),"data-testid":`helper-criterion`,value:m.active,onChange:e=>{let t=De.find(t=>t===e.target.value);t!==void 0&&h(Qo(m,t))},options:De.map(e=>({value:e,label:d(`helper.active.${e}`)}))})]}):e(`label`,{className:`flex flex-col gap-1 text-[11px]`,children:[d(`helper.reducer`),i(W,{"aria-label":d(`helper.reducer`),"data-testid":`helper-reducer`,value:m.aggregate,onChange:e=>{let t=C.aggregates.find(t=>t===e.target.value);t!==void 0&&h(Zo(m,t))},options:C.aggregates.map(e=>({value:e,label:d(`helper.aggregate.${e}`)}))})]}),e(`label`,{className:`flex flex-col gap-1 text-[11px]`,children:[d(`helper.name`),i(H,{"aria-label":d(`helper.name`),"data-testid":`helper-name`,value:m.name,onChange:e=>h($o(m,e.target.value))})]})]}),f===`parameters`&&m?.kind===`statistic`&&i(sc,{draft:m,onChange:h}),f===`parameters`&&m?.kind===`integral`&&i(lc,{draft:m,onChange:h}),f===`parameters`&&m?.kind===`threshold`&&i(dc,{draft:m,onChange:h}),f===`parameters`&&m?.kind===`derivative`&&i(mc,{draft:m,onChange:h}),f===`parameters`&&m?.kind===`arithmetic`&&i(`div`,{className:`grid grid-cols-1 gap-2 sm:grid-cols-2`,"data-testid":`helper-math-parameters`,children:i(_c,{name:m.name,onChange:e=>h({...m,name:e})})}),f===`parameters`&&m?.kind===`expression`&&i(hc,{draft:m,onChange:h}),f===`members`&&m!==null&&S!==null&&i(Ui,{kind:`members`,request:S,enabled:!0,members:w,onMembersChange:e=>h(Ls(m,e)),onRefuse:e=>_(e===null?[]:[{path:`helper.members`,code:`member-constraint`,message:d(`helper.maxMembers`,{max:e.max})}])}),f===`members`&&m?.kind===`expression`&&i(gc,{draft:m,onChange:h}),f===`members`&&(m?.kind===`arithmetic`||m?.kind===`threshold`)&&i(`p`,{className:`text-[11px] text-foreground-muted`,"data-testid":`helper-math-hint`,children:d(vc(m))}),i(bc,{lines:g}),e(`div`,{className:`flex flex-wrap gap-2`,children:[f===`members`&&i(U,{variant:`ghost`,onClick:()=>p(`parameters`),children:d(`helper.back`)}),f===`parameters`&&m!==null&&i(U,{"data-testid":`helper-to-members`,disabled:m.name.trim()===``,onClick:()=>{_([]),p(`members`)},children:d(`helper.next`)}),f===`members`&&m!==null&&r===`edit`&&i(U,{"data-testid":`helper-save`,disabled:!ps(m)||s,onClick:()=>x(`open`),children:d(`helper.save`)}),f===`members`&&m!==null&&r===`create`&&e(c,{children:[i(U,{"data-testid":`helper-save-open`,disabled:!ps(m)||s,onClick:()=>x(`open`),children:d(`helper.saveOpen`)}),i(U,{variant:`outline`,"data-testid":`helper-save-more`,disabled:!ps(m)||s,onClick:()=>x(`again`),children:d(`helper.saveMore`)})]})]})]})}var tc=6e4;function nc({draft:t,onDraft:n}){let{t:r}=K(),a=t.appliance??`washer`;return e(`div`,{className:`grid grid-cols-1 gap-2 sm:grid-cols-2`,children:[e(`label`,{className:`flex flex-col gap-1 text-[11px]`,children:[r(`helper.applianceType`),i(W,{"aria-label":r(`helper.applianceType`),"data-testid":`helper-appliance`,value:a,onChange:e=>{let r=He.find(t=>t===e.target.value);r!==void 0&&n(ts(t,r))},options:He.map(e=>({value:e,label:r(`helper.appliance.${e}`)}))})]}),e(`label`,{className:`flex flex-col gap-1 text-[11px]`,children:[r(`helper.name`),i(H,{"aria-label":r(`helper.name`),"data-testid":`helper-name`,value:t.name,onChange:e=>n({...t,name:e.target.value})})]}),i(oc,{label:r(`helper.threshold`),testId:`helper-threshold`,value:String(t.thresholdWatts),onValue:e=>{let r=ac(e);r!==null&&n({...t,thresholdWatts:r})}}),i(oc,{label:r(`helper.startDwell`),testId:`helper-start-dwell`,value:rc(t.startDwellMs),onValue:e=>{let r=ic(e);r!==null&&n({...t,startDwellMs:r})}}),i(oc,{label:r(`helper.stopDwell`),testId:`helper-stop-dwell`,value:rc(t.stopDwellMs),onValue:e=>{let r=ic(e);r!==null&&n({...t,stopDwellMs:r})}})]})}function rc(e){return String(e/tc)}function ic(e){let t=Number(e);return!Number.isFinite(t)||t<0?null:Math.round(t*tc)}function ac(e){let t=Number(e);return!Number.isFinite(t)||t<=0?null:t}function oc({label:t,testId:n,value:r,onValue:a}){return e(`label`,{className:`flex flex-col gap-1 text-[11px]`,children:[t,i(H,{type:`number`,min:0,step:`any`,"aria-label":t,"data-testid":n,value:r,onChange:e=>a(e.target.value)})]})}function sc({draft:t,onChange:n}){let{t:r}=K(),a=t.window.kind===`rolling`;return e(`div`,{className:`grid grid-cols-1 gap-2 sm:grid-cols-2`,"data-testid":`helper-statistic-parameters`,children:[i($,{label:r(`helper.stat`),children:i(W,{"aria-label":r(`helper.stat`),"data-testid":`helper-stat`,value:t.stat,onChange:e=>{let r=ee.find(t=>t===e.target.value);r!==void 0&&n({...t,stat:r})},options:ee.map(e=>({value:e,label:r(`helper.statName.${e}`)}))})}),i($,{label:r(`helper.range`),children:i(W,{"aria-label":r(`helper.range`),"data-testid":`helper-range-kind`,value:t.window.kind,onChange:e=>{e.target.value===`calendar`&&n({...t,window:{kind:`calendar`,period:`today`}}),e.target.value===`rolling`&&n({...t,window:{kind:`rolling`,span:`24h`}})},options:[{value:`rolling`,label:r(`helper.rangeKind.rolling`)},{value:`calendar`,label:r(`helper.rangeKind.calendar`)}]})}),a?i($,{label:r(`helper.span`),children:i(W,{"aria-label":r(`helper.span`),"data-testid":`helper-span`,value:t.window.span,onChange:e=>{let r=P.find(t=>t===e.target.value);r!==void 0&&n({...t,window:cc(r,t)})},options:P.map(e=>({value:e,label:r(`helper.spanName.${e}`)}))})}):i($,{label:r(`helper.period`),children:i(W,{"aria-label":r(`helper.period`),"data-testid":`helper-period`,value:t.window.period,onChange:e=>{let r=ie.find(t=>t===e.target.value);r!==void 0&&n({...t,window:{kind:`calendar`,period:r}})},options:ie.map(e=>({value:e,label:r(`helper.periodName.${e}`)}))})}),t.window.kind===`rolling`&&t.window.span===`custom`&&i($,{label:r(`helper.customMinutes`),children:i(H,{"aria-label":r(`helper.customMinutes`),"data-testid":`helper-custom-minutes`,inputMode:`numeric`,value:t.window.customMinutes===void 0?``:String(t.window.customMinutes),onChange:e=>{let r=Number.parseInt(e.target.value,10);n({...t,window:{kind:`rolling`,span:`custom`,...Number.isFinite(r)?{customMinutes:r}:{}}})}})}),i(_c,{name:t.name,onChange:e=>n({...t,name:e})})]})}function cc(e,t){if(e!==`custom`)return{kind:`rolling`,span:e};let n=t.window.kind===`rolling`?t.window.customMinutes:void 0;return n===void 0?{kind:`rolling`,span:e}:{kind:`rolling`,span:e,customMinutes:n}}function lc({draft:t,onChange:n}){let{t:r}=K();return e(`div`,{className:`grid grid-cols-1 gap-2 sm:grid-cols-2`,"data-testid":`helper-integral-parameters`,children:[i($,{label:r(`helper.reset`),children:i(W,{"aria-label":r(`helper.reset`),"data-testid":`helper-reset`,value:t.reset,onChange:e=>{let r=j.find(t=>t===e.target.value);r!==void 0&&n({...t,reset:r})},options:j.map(e=>({value:e,label:r(`helper.resetName.${e}`)}))})}),i(_c,{name:t.name,onChange:e=>n({...t,name:e})})]})}var uc=1e3;function dc({draft:t,onChange:n}){let{t:r}=K(),a=t.low>t.high;return e(`div`,{className:`grid grid-cols-1 gap-2 sm:grid-cols-2`,"data-testid":`helper-threshold-parameters`,children:[i(pc,{label:r(`helper.highEdge`),testId:`helper-high`,value:t.high,onValue:e=>n({...t,high:e})}),i(pc,{label:r(`helper.lowEdge`),testId:`helper-low`,value:t.low,onValue:e=>n({...t,low:e})}),i(oc,{label:r(`helper.onDelay`),testId:`helper-on-delay`,value:String(t.onForMs/uc),onValue:e=>{let r=fc(e);r!==null&&n({...t,onForMs:r})}}),i(oc,{label:r(`helper.offDelay`),testId:`helper-off-delay`,value:String(t.offForMs/uc),onValue:e=>{let r=fc(e);r!==null&&n({...t,offForMs:r})}}),i(_c,{name:t.name,onChange:e=>n({...t,name:e})}),a&&i(`p`,{role:`alert`,className:`text-xs text-danger sm:col-span-2`,"data-testid":`helper-edges`,children:r(`helper.edgesReversed`)})]})}function fc(e){let t=Number(e);return!Number.isFinite(t)||t<0?null:Math.round(t*uc)}function pc({label:t,testId:n,value:r,onValue:a}){return e(`label`,{className:`flex flex-col gap-1 text-[11px]`,children:[t,i(H,{type:`number`,step:`any`,"aria-label":t,"data-testid":n,value:String(r),onChange:e=>{let t=Number(e.target.value);e.target.value!==``&&Number.isFinite(t)&&a(t)}})]})}function mc({draft:t,onChange:n}){let{t:r}=K();return e(`div`,{className:`grid grid-cols-1 gap-2 sm:grid-cols-2`,"data-testid":`helper-derivative-parameters`,children:[i($,{label:r(`helper.span`),children:i(W,{"aria-label":r(`helper.span`),"data-testid":`helper-span`,value:t.window.span,onChange:e=>{let r=P.find(t=>t===e.target.value);r!==void 0&&n({...t,window:r===`custom`?{kind:`rolling`,span:r,customMinutes:t.window.customMinutes??60}:{kind:`rolling`,span:r}})},options:P.map(e=>({value:e,label:r(`helper.spanName.${e}`)}))})}),t.window.span===`custom`&&i($,{label:r(`helper.customMinutes`),children:i(H,{"aria-label":r(`helper.customMinutes`),"data-testid":`helper-custom-minutes`,inputMode:`numeric`,value:t.window.customMinutes===void 0?``:String(t.window.customMinutes),onChange:e=>{let r=Number.parseInt(e.target.value,10);n({...t,window:{kind:`rolling`,span:`custom`,...Number.isFinite(r)?{customMinutes:r}:{}}})}})}),i($,{label:r(`helper.per`),children:i(W,{"aria-label":r(`helper.per`),"data-testid":`helper-per`,value:t.per,onChange:e=>{let r=S.find(t=>t===e.target.value);r!==void 0&&n({...t,per:r})},options:S.map(e=>({value:e,label:r(`helper.perName.${e}`)}))})}),i(_c,{name:t.name,onChange:e=>n({...t,name:e})})]})}function hc({draft:t,onChange:n}){let{t:r}=K();return e(`div`,{className:`grid grid-cols-1 gap-2 sm:grid-cols-2`,"data-testid":`helper-expression-parameters`,children:[i($,{label:r(`helper.exprOutput`),children:i(W,{"aria-label":r(`helper.exprOutput`),"data-testid":`helper-expr-output`,value:t.output,onChange:e=>{let r=Te.find(t=>t===e.target.value);r!==void 0&&n({...t,output:r})},options:Te.map(e=>({value:e,label:r(`helper.exprOutputName.${e}`)}))})}),i(_c,{name:t.name,onChange:e=>n({...t,name:e})}),i(`p`,{className:`text-[11px] text-foreground-muted sm:col-span-2`,"data-testid":`helper-stale-note`,children:r(`helper.detail.expressionStale`)})]})}function gc({draft:t,onChange:n}){let{t:r}=K();return t.inputs.length===0?null:e(`div`,{className:`flex flex-col gap-2`,"data-testid":`helper-expression-editor`,children:[i(`ul`,{className:`flex flex-col gap-1`,children:t.inputs.map((a,o)=>e(`li`,{className:`flex items-center gap-2 text-[11px]`,children:[i(H,{className:`w-24 font-mono`,"aria-label":r(`helper.inputName`),"data-testid":`helper-input-name-${o}`,value:a.name,onChange:e=>n({...t,inputs:t.inputs.map((t,n)=>n===o?{...t,name:e.target.value}:t)})}),e(`span`,{className:`truncate text-foreground-muted`,children:[a.member.source.stableId,` · `,a.member.cap,`.`,a.member.fieldPath]})]},`${a.member.source.addonId}/${a.member.source.stableId}/${a.member.cap}.${a.member.fieldPath}`))}),i(Bn,{label:r(`helper.expr`),value:t.expr,bindings:t.inputs.map(e=>e.name),onChange:e=>n({...t,expr:e})})]})}function _c({name:e,onChange:t}){let{t:n}=K();return i($,{label:n(`helper.name`),children:i(H,{"aria-label":n(`helper.name`),"data-testid":`helper-name`,value:e,onChange:e=>t(e.target.value)})})}function vc(e){return e.kind===`arithmetic`?`helper.hint.${e.op}`:`helper.hint.threshold`}function yc(e,t){if(t?.kind===`threshold`||t?.kind===`arithmetic`||t?.kind===`expression`||t?.kind===`derivative`){if(e===`parameters`)return`helper.step.math.${t.kind}.parameters`;if(e===`members`)return`helper.step.math.${t.kind}.members`}if(t?.kind===`statistic`||t?.kind===`integral`){if(e===`parameters`)return`helper.step.historyParameters`;if(e===`members`)return`helper.step.historySource`}if(t?.kind===`group`&&t.templateId===`appliance`){if(e===`parameters`)return`helper.step.appliance`;if(e===`members`)return`helper.step.applianceMembers`}return`helper.step.${e}`}function $({label:t,children:n}){return e(`label`,{className:`flex flex-col gap-1 text-[11px]`,children:[t,n]})}function bc({lines:t}){return t.length===0?null:i(`ul`,{role:`alert`,className:`flex flex-col gap-1`,"data-testid":`helper-refusals`,children:t.map(t=>e(`li`,{className:`text-xs text-danger`,children:[i(`span`,{className:`font-medium`,children:t.code}),t.message===``?``:` — ${t.message}`]},`${t.path}:${t.code}:${t.message}`))})}export{ni as A,Xt as B,_a as C,fa as D,pa as E,rn as F,Vt as G,J as H,X as I,Rt as K,nn as L,_n as M,Z as N,Ui as O,on as P,Y as R,Sa as S,ga as T,q as U,Zt as V,Ut as W,io as _,_s as a,Qa as b,Cs as c,vs as d,ws as f,mo as g,ko as h,xs as i,ri as j,mi as k,gs as l,Po as m,bs as n,Xo as o,fs as p,Lt as q,Yo as r,Ss as s,ec as t,hs as u,Ga as v,va as w,wa as x,Ka as y,$t as z};
@@ -1 +0,0 @@
1
- import{C as e,K as t,S as n,Y as r,et as i,i as a,x as o}from"./_virtual_mf___mfe_internal__admin_ui_host__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-CEyXHAdg.js";import{Lt as s,br as c,ca as l,dt as u,gn as d,ot as f,sr as p,wi as m,xn as h}from"./player-overlays-nQJCQERn.js";import{fr as g,na as _}from"./client-CdHPjeIs.js";import{$r as v,A as y,C as b,Cn as x,D as S,Dd as C,Dr as w,E as T,Er as E,Fr as D,Hr as O,M as k,N as A,O as j,Or as ee,P as M,Qr as te,Rr as N,S as ne,So as P,Xa as re,Za as ie,_ as ae,_r as oe,au as se,b as F,d as ce,ei as I,f as le,fr as ue,gr as de,h as fe,j as pe,k as me,kr as L,m as he,mn as ge,mr as _e,pn as ve,pr as ye,si as R,u as be,v as xe,vr as Se,w as Ce,wn as z,wr as we,x as B,xn as V}from"./src-DVuhwnP3.js";import{t as H}from"./useTranslation-BJr-n0es.js";import{gr as Te}from"./index-CizVDZHi.js";import{t as Ee}from"./AdminPage-Bm98o4hS.js";i();function U(e,t){return e.scope===``?e.displayName:`${e.displayName} · ${t?.(e)??e.scope}`}function De(e,t,n){let r=[];for(let{device:t,series:i}of e)for(let e of i){let i={subject:{kind:`device`,deviceId:t.id},key:e.key,scope:e.scope};r.push({id:B(i),ref:i,info:e,subjectName:t.name,location:t.location??``,nodeId:``,metric:U(e,n)})}for(let{node:e,series:i}of t)for(let t of i){let i={subject:{kind:`node`,nodeId:e.id},key:t.key,scope:t.scope};r.push({id:B(i),ref:i,info:t,subjectName:e.name,location:``,nodeId:e.id,metric:U(t,n)})}return r}function Oe(e){return[e.subjectName,e.location,e.metric,e.info.key,e.info.unit??``,e.nodeId].join(` `)}function W(e,t,n){if(e.ref.subject.kind!==`device`||t===null)return e.subjectName;let r=t.byId.get(e.ref.subject.deviceId);return r===void 0?e.subjectName:D(r,`compact`,t,n)}var ke=[`energy`,`temperatures`,`nodes`,`storage`],Ae=new Set([`cap:temperature-sensor.celsius`,`cap:climate-control.currentTemp`]),G=[`addon:metrics-native/node-cpu-percent`,`addon:metrics-native/node-memory-percent`],je=`addon:storage-orchestrator/location-used-percent`;function Me(e,t){let n=(e,n)=>{let r=t.filter(e);return F((n?[...r].sort(n):r).map(e=>e.ref))};switch(e){case`energy`:return n(e=>e.ref.subject.kind===`device`&&e.info.key===`derived:energy.kwh`);case`temperatures`:return n(e=>e.ref.subject.kind===`device`&&Ae.has(e.info.key)&&e.info.scope===``,(e,t)=>e.location.localeCompare(t.location)||e.subjectName.localeCompare(t.subjectName));case`nodes`:return n(e=>e.ref.subject.kind===`node`&&G.includes(e.info.key)&&e.info.scope===``,(e,t)=>G.indexOf(e.info.key)-G.indexOf(t.info.key)||e.subjectName.localeCompare(t.subjectName));case`storage`:return n(e=>e.ref.subject.kind===`node`&&e.info.key===je)}}function Ne(e,t){let n=new Map(t.map(e=>[e.id,e])),r=[],i=[],a=[],o=[];for(let t of F(e)){let e=n.get(B(t));if(e===void 0){o.push(t);continue}e.info.key===`derived:energy.kwh`?a.push(e):e.info.kind===`boolean`||e.info.kind===`enum`?i.push(e):r.push(e)}return{lines:r,states:i,energy:a,missing:o}}function K(e){return e.subject.kind===`device`?{deviceId:e.subject.deviceId,key:e.key,scope:e.scope}:{forNodeId:e.subject.nodeId,key:e.key,scope:e.scope}}var q=`history-page`;function Pe({part:r,window:i}){let{t:a}=H(),o=l(),s=O(),c=N(),u=e=>`${W(e,s,c)} · ${e.metric}`,d=t(()=>[...r.lines,...r.states,...r.energy],[r]),f=he(t(()=>d.map(e=>K(e.ref)),[d]),i,!1),p=e=>f.status===`ok`?f.data.current.get(le(K(e.ref))):void 0,h=e=>{let t=p(e);return t?.ok?t.result:void 0};if(d.length===0)return n(w,{icon:m,title:a(`history.page.emptyTitle`,`Pick series to compare`),description:a(`history.page.emptyHint`,`Choose up to 24 series on the left, or start from a panel above.`)});if(f.status===`error`)return n(E,{title:a(`history.page.readFailed`,`History could not be read`),message:f.error});let g=f.status===`pending`,_=d.map(e=>({c:e,e:p(e)})).filter(e=>e.e?.ok===!1),v=r.lines.map((e,t)=>{let n=h(e),r=S(e.info,n,i.from);return{id:e.id,label:u(e),unit:e.info.unit,colorIndex:t,points:r.points,gapMs:r.gapMs,interpolation:r.held&&n?.resolution===`raw`?`step`:`linear`}}),y=r.states.map((e,t)=>{let n=j(e.info,h(e),i.from,i.to),r=Ce(e.info.key,o);return{id:e.id,label:u(e),kind:e.info.kind===`boolean`?`boolean`:`enum`,colorIndex:e.info.kind===`boolean`?t:0,states:n.states,segments:n.segments,totals:n.totals,stateLabel:e.info.kind===`boolean`?e=>e===`true`?r.on:r.off:void 0}}),b=r.energy.map(e=>({c:e,...T(h(e))})),x=b[0]?.bucketMs??36e5,C=[...new Set(b.flatMap(e=>e.buckets.map(e=>e.t)))].sort((e,t)=>e-t).map(e=>({t:e,values:b.map(t=>t.buckets.find(t=>t.t===e)?.values[0]??null)}));return e(`div`,{className:`space-y-5 min-w-0`,children:[_.length>0&&n(E,{title:a(`history.page.someFailed`,`Some series could not be read`),message:_.map(e=>`${u(e.c)}: ${e.e.error}`).join(` · `)}),v.length>0&&n(M,{title:a(`history.page.lines`,`Measurements`),series:v,range:i,height:260,syncKey:q,pending:g}),b.length>0&&n(we,{title:a(`history.page.energy`,`Energy`),layers:b.map((e,t)=>({id:e.c.id,label:W(e.c,s,c),colorIndex:t})),buckets:C,bucketMs:x,range:i,unit:`kWh`,showTotal:!0,height:160,syncKey:q,pending:g}),y.length>0&&n(A,{title:y.length===1?y[0]?.label??``:a(`history.page.states`,`States`),rows:y,range:i,syncKey:q,pending:g})]})}function Fe(e,t){let n=[];for(let r=0;r<e.length;r+=t)n.push(e.slice(r,r+t));return n}async function Ie(e,t){let n=[];for(let r of Fe(e,50))try{let{results:e}=await t(r),i=new Map(e.map(e=>[e.seriesId,e]));for(let e of r)n.push(i.get(e)??{seriesId:e,ok:!1,reason:`not-found`})}catch(e){let t=e instanceof Error?e.message:String(e);for(let e of r)n.push({seriesId:e,ok:!1,reason:`request-failed`,message:t})}return n}function J(e){return e.raw+e[`5m`]+e[`1h`]+e[`1d`]}function Le(e){return e.reduce((e,t)=>t.ok?{...e,deleted:e.deleted+1,points:e.points+J(t.deleted)}:{...e,refused:e.refused+1},{deleted:0,refused:0,points:0})}function Re(e,t){let n=new Map(e.map(e=>[e.seriesId,e]));return t.flatMap(e=>{let t=n.get(e.seriesId);return t===void 0?[]:[{series:t,outcome:e}]})}var Y=e=>new Date(e).toLocaleDateString(void 0,{dateStyle:`short`});function X(e,t,n){let r=t.get(e.deviceId);return r===void 0?e.reason===`device-gone`?n(`history.orphans.deviceRemoved`,`#{{id}} (removed)`,{id:e.deviceId}):n(`history.orphans.deviceId`,`#{{id}}`,{id:e.deviceId}):r}function Z(e){let t=e.displayName??e.key;return e.scope===``?t:`${t} · ${e.scope}`}function Q(t,r,i){return{key:`series`,header:i(`history.orphans.colSeries`,`Series`),render:a=>{let o=t(a);return e(`div`,{className:`min-w-0 max-w-[16rem]`,children:[n(`div`,{className:`truncate text-foreground`,title:o.key,children:Z(o)}),n(`div`,{className:`truncate text-[10px] text-foreground-subtle`,children:X(o,r,i)})]})},sortValue:e=>`${X(t(e),r,i)} ${Z(t(e))}`}}var ze=[`raw`,`5m`,`1h`,`1d`];function Be(e,t){return e===`raw`?t(`history.orphans.colRaw`,`Raw points`):e===`5m`?t(`history.orphans.col5m`,`5 min`):e===`1h`?t(`history.orphans.col1h`,`1 h`):t(`history.orphans.col1d`,`1 day`)}function Ve(t,r){return[Q(e=>e,t,r),{key:`reason`,header:r(`history.orphans.colReason`,`Reason`),render:t=>e(`div`,{className:`flex flex-col items-start gap-0.5`,children:[n(R,{variant:t.reason===`device-gone`?`warning`:`neutral`,className:`text-[10px]`,children:t.reason===`device-gone`?r(`history.orphans.deviceGone`,`Device removed`):r(`history.orphans.undeclared`,`No longer declared`)}),t.missingSince!==null&&n(`span`,{className:`text-[10px] text-foreground-subtle`,children:r(`history.orphans.since`,`since {{date}}`,{date:Y(t.missingSince)})})]}),sortValue:e=>e.reason},{key:`span`,header:r(`history.orphans.colSpan`,`Recorded`),render:t=>e(`span`,{className:`tabular-nums text-foreground-muted`,children:[Y(t.firstTs),` → `,Y(t.lastTs)]}),sortValue:e=>e.lastTs},...ze.map(e=>({key:`rows-${e}`,header:Be(e,r),align:`right`,render:t=>n(`span`,{className:`tabular-nums text-foreground-muted`,children:t.rows[e].toLocaleString()}),sortValue:t=>t.rows[e]}))]}function He(e,t){if(e.ok)return n(R,{variant:`success`,className:`text-[10px]`,children:t(`history.orphans.deleted`,{count:J(e.deleted),points:J(e.deleted).toLocaleString(),defaultValue_one:`Deleted · {{points}} point`,defaultValue_other:`Deleted · {{points}} points`})});let r=e.reason===`request-failed`?t(`history.orphans.requestFailed`,`Not sent: {{message}}`,{message:e.message}):e.reason===`not-orphan`?t(`history.orphans.refusedNotOrphan`,`Kept: no longer orphan`):e.reason===`not-found`?t(`history.orphans.refusedNotFound`,`Already gone`):t(`history.orphans.refusedFailed`,`The hub could not delete it`);return n(R,{variant:e.reason===`not-found`?`neutral`:`warning`,className:`text-[10px]`,children:r})}function Ue(e,t){return[Q(e=>e.series,e,t),{key:`result`,header:t(`history.orphans.colResult`,`Result`),render:e=>He(e.outcome,t),sortValue:e=>+!e.outcome.ok}]}i();function We({open:i,onClose:a,list:o,deviceNames:c,onDelete:l,onRefresh:u,refreshing:d}){let{t:f}=H(),m=te(),[g,_]=r(new Set),[v,y]=r(!1),[b,S]=r([]),C=t(()=>Ve(c,f),[c,f]),w=t(()=>Ue(c,f),[c,f]),T=t(()=>new Set(o.series.map(e=>String(e.seriesId))),[o.series]),E=[...g].filter(e=>T.has(e)).map(Number),D=Le(b.map(e=>e.outcome)),O=async()=>{if(await m({title:f(`history.orphans.confirmTitle`,{count:E.length,defaultValue_one:`Delete {{count}} series`,defaultValue_other:`Delete {{count}} series`}),message:f(`history.orphans.confirmMessage`,`Every recorded point of these series is removed from the hub. This cannot be undone.`),confirmLabel:f(`history.orphans.confirmLabel`,`Delete`),variant:`danger`})){y(!0);try{let e=await Ie(E,l);S(Re(o.series,e)),_(new Set)}finally{y(!1),u()}}};return n(ue,{open:i,onOpenChange:e=>!e&&a(),children:e(_e,{width:`xl`,placement:`sheet-on-mobile`,scroll:`body`,"data-testid":`orphan-series-dialog`,children:[n(oe,{children:n(Se,{children:f(`history.orphans.title`,`Series no longer linked to a device`)})}),e(ye,{className:`space-y-3`,children:[n(`p`,{className:`text-xs text-foreground-muted`,children:f(`history.orphans.intro`,`Nothing records into these series any more: their device was removed, or no capability declares them now. Select the ones to delete.`)}),o.truncated&&e(`div`,{className:`flex flex-wrap items-center gap-2`,"data-testid":`orphan-truncated`,children:[n(`p`,{className:`text-xs text-warning`,children:f(`history.orphans.truncated`,`More series are unlinked than are listed here. Delete these, then load the rest.`)}),e(I,{size:`sm`,variant:`outline`,onClick:u,disabled:d,children:[n(h,{className:`h-3 w-3`,"aria-hidden":!0}),f(`history.orphans.loadAgain`,`Load again`)]})]}),b.length>0&&e(`div`,{className:`space-y-2`,"data-testid":`orphan-outcomes`,children:[n(`p`,{className:`text-xs text-foreground`,"aria-live":`polite`,children:f(`history.orphans.summary`,{count:D.deleted,refused:D.refused,points:D.points.toLocaleString(),defaultValue_one:`{{count}} series deleted ({{points}} points), {{refused}} kept.`,defaultValue_other:`{{count}} series deleted ({{points}} points), {{refused}} kept.`})}),n(x,{columns:w,rows:b,rowKey:e=>String(e.series.seriesId),minWidthPx:420,maxBodyHeight:`max-h-[60vh]`,emptyMessage:``})]}),n(x,{columns:C,rows:o.series,rowKey:e=>String(e.seriesId),minWidthPx:760,maxBodyHeight:z,defaultSort:{columnKey:`series`,dir:`asc`},emptyMessage:f(`history.orphans.empty`,`Every series is linked to a device.`),selection:{selected:g,onChange:_,rowLabel:e=>`${Z(e)} — ${X(e,c,f)}`,pageLabel:f(`history.orphans.selectAll`,`Select every listed series`)}})]}),e(de,{children:[n(`span`,{className:`mr-auto text-[11px] tabular-nums text-foreground`,"aria-live":`polite`,children:f(`history.orphans.selected`,{count:E.length,defaultValue_one:`{{count}} selected`,defaultValue_other:`{{count}} selected`})}),n(I,{variant:`ghost`,size:`sm`,onClick:a,children:f(`history.orphans.close`,`Close`)}),e(I,{variant:`danger`,size:`sm`,disabled:E.length===0||v,onClick:()=>void O(),children:[v?n(p,{className:`h-3 w-3 animate-spin`,"aria-hidden":!0}):n(s,{className:`h-3 w-3`,"aria-hidden":!0}),f(`history.orphans.deleteSelected`,`Delete selected`)]})]})]})})}i();var Ge=5*6e4;function Ke({enabled:i}){let{t:a}=H(),[s,c]=r(!1),l=ie({},{enabled:i,staleTime:Ge}),u=P({projection:`slim`},{enabled:i}),d=re(),f=t(()=>new Map((u.data??[]).map(e=>[e.id,e.name])),[u.data]),p=e=>d.mutateAsync({seriesIds:[...e]});if(!i||l.status===`pending`)return null;if(l.status===`error`)return n(E,{variant:`warning`,title:a(`history.orphans.checkFailedTitle`,`Could not check for unlinked series`),message:l.error.message,onRetry:()=>void l.refetch()});let m=l.data;if(m.series.length===0&&!s)return null;let h=m.series.length;return e(o,{children:[h>0&&n(E,{variant:`warning`,message:m.truncated?a(`history.orphans.noticeMore`,{count:h,defaultValue_one:`More than {{count}} series are no longer linked to a device.`,defaultValue_other:`More than {{count}} series are no longer linked to a device.`}):a(`history.orphans.notice`,{count:h,defaultValue_one:`{{count}} series is no longer linked to a device.`,defaultValue_other:`{{count}} series are no longer linked to a device.`}),action:n(I,{size:`sm`,variant:`outline`,onClick:()=>c(!0),children:a(`history.orphans.review`,`Review`)})}),n(We,{open:s,onClose:()=>c(!1),list:m,deviceNames:f,onDelete:p,onRefresh:()=>void l.refetch(),refreshing:l.isFetching})]})}i();var qe=`device`,Je=`node`;function Ye({catalog:r,selected:i,onChange:a,loading:o}){let{t:s}=H(),c=O(),l=N(),u=e=>W(e,c,l),d=ve(r,{searchText:e=>[Oe(e)],facetGroups:[{id:`subject`,value:e=>e.ref.subject.kind===`device`?qe:Je},{id:`room`,value:e=>e.location},{id:`unit`,value:e=>e.info.unit??``}]}),f=t(()=>[{key:`metric`,header:s(`history.picker.series`,`Series`),render:t=>e(`div`,{className:`min-w-0`,children:[n(`div`,{className:`truncate text-foreground`,children:t.metric}),n(`div`,{className:`truncate text-[10px] text-foreground-subtle`,children:t.location===``?u(t):`${u(t)} · ${t.location}`})]}),sortValue:e=>`${e.subjectName} ${e.metric}`},{key:`unit`,header:s(`history.picker.unit`,`Unit`),render:e=>n(`span`,{className:`text-foreground-muted`,children:e.info.unit??`—`}),sortValue:e=>e.info.unit??``}],[s,c,l]),p=i.size>=24;return e(`div`,{className:`space-y-2 min-w-0`,children:[n(ge,{state:d.state,facets:[],groups:[{...d.groups.find(e=>e.id===`subject`)??{id:`subject`,facets:[],selected:[]},label:s(`history.picker.subject`,`Source`),facetLabel:e=>e===qe?s(`history.picker.devices`,`Devices`):s(`history.picker.nodes`,`Nodes`)},{...d.groups.find(e=>e.id===`room`)??{id:`room`,facets:[],selected:[]},label:s(`history.picker.room`,`Room`),facetLabel:e=>e===``?s(`history.picker.noRoom`,`No room`):e},{...d.groups.find(e=>e.id===`unit`)??{id:`unit`,facets:[],selected:[]},label:s(`history.picker.metricType`,`Unit`),facetLabel:e=>e===``?s(`history.picker.noUnit`,`States & counts`):e}],labels:{searchPlaceholder:s(`history.picker.search`,`Search device, room, metric or node…`),searchLabel:s(`history.picker.searchLabel`,`Search series`),facetsLabel:s(`history.picker.facets`,`Filters`),clearLabel:s(`history.picker.clear`,`Clear`)},onSearch:d.setSearch,onToggleFacet:d.toggleFacet,onToggleGroupFacet:d.toggleGroupFacet,onClear:d.clear}),n(`p`,{className:`text-[10px] text-foreground-subtle`,"aria-live":`polite`,children:s(`history.picker.count`,`{{count}} of {{max}} selected`,{count:i.size,max:24})}),n(x,{columns:f,rows:d.rows,rowKey:e=>e.id,maxBodyHeight:z,pageSize:50,defaultSort:{columnKey:`metric`,dir:`asc`},emptyMessage:o?s(`history.picker.loading`,`Reading the series of every device…`):d.active?s(`history.picker.emptyFiltered`,`No series match these filters.`):s(`history.picker.empty`,`Nothing is recorded yet.`),selection:{selected:i,onChange:e=>{let t=[...e].filter(e=>i.has(e)),n=[...e].filter(e=>!i.has(e));a(new Set([...t,...n].slice(0,24)))},isSelectable:e=>i.has(e.id)||!p,rowLabel:e=>`${u(e)} · ${e.metric}`,pageLabel:s(`history.picker.selectPage`,`Select every series on this page`)}})]})}i();var Xe=new Set([_.Hub,_.Container]),$=5*6e4;function Ze(){let{t:r}=H(),i=ee(`device-history`),[a,o]=Te(),s=t(()=>F(a.getAll(`s`).flatMap(e=>{let t=ae(e);return t===null?[]:[t]})),[a]),l=a.get(`window`),f=pe(l)?l:`7d`,p=me(a.get(`range`)),h=(e,t,n)=>{let r=new URLSearchParams;for(let t of F(e))r.append(`s`,xe(t));t!==`7d`&&r.set(`window`,t);let i=n===void 0?a.get(`range`):n;t===`custom`&&i&&r.set(`range`,i),o(r,{replace:!0})},g=Qe(i===`present`),_=k(f,Date.now(),p),x=k(f,ce(Date.now(),_.to-_.from),p),S=t(()=>Ne(s,g.candidates),[s,g.candidates]),C=t(()=>new Set(s.map(B)),[s]),T=be(),D=v(),O=te(),A=async()=>{let e=await D({title:r(`history.page.saveTitle`,`Save as panel`),label:r(`history.page.saveName`,`Panel name`),confirmLabel:r(`history.page.save`,`Save`)});e===null||e.trim()===``||await T.update(t=>ne(t,{id:`panel-${Date.now().toString(36)}`,name:e.trim().slice(0,80),window:f,selection:[...s]}))},j=async(e,t)=>{await O({title:r(`history.page.deleteTitle`,`Delete panel`),message:r(`history.page.deleteMessage`,`The panel "{{name}}" is removed from your account.`,{name:t}),confirmLabel:r(`history.page.delete`,`Delete`),variant:`danger`})&&await T.update(t=>b(t,e))},M=e=>e===`energy`?r(`history.panels.energy`,`Total energy`):e===`temperatures`?r(`history.panels.temperatures`,`Temperatures by room`):e===`nodes`?r(`history.panels.nodes`,`Cluster nodes`):r(`history.panels.storage`,`Storage locations`);return n(Ee,{icon:m,title:r(`history.page.title`,`History`),subtitle:r(`history.page.subtitle`,`What devices, nodes and storage recorded over time, side by side.`),actions:i===`present`?e(I,{size:`sm`,variant:`outline`,onClick:()=>void A(),disabled:s.length===0||!T.writable,children:[n(d,{className:`h-3.5 w-3.5`,"aria-hidden":`true`}),r(`history.page.saveTitle`,`Save as panel`)]}):void 0,children:i===`pending`?n(L,{className:`h-64 w-full`}):i===`unknown`?n(E,{title:r(`history.page.presenceUnknownTitle`,`Could not reach the hub`),message:r(`history.page.presenceUnknown`,`The hub did not say whether device history is installed. Try again in a moment.`)}):i===`absent`?n(w,{icon:c,title:r(`history.page.absentTitle`,`Device history is not running on this hub`),description:r(`history.page.absent`,`Nothing is recorded until the device-history system addon is enabled.`)}):e(`div`,{className:`space-y-3 sm:space-y-4`,children:[n(Ke,{enabled:i===`present`}),e(`div`,{className:`flex flex-wrap items-center gap-2`,role:`group`,"aria-label":r(`history.page.panels`,`Panels`),children:[ke.map(e=>n(I,{size:`sm`,variant:`outline`,disabled:g.status!==`ok`,onClick:()=>h(Me(e,g.candidates),f),children:M(e)},e)),T.value.panels.map(t=>e(`span`,{className:`inline-flex items-center`,children:[n(I,{size:`sm`,variant:`secondary`,onClick:()=>h(t.selection,t.window,null),children:t.name}),n(I,{size:`sm`,variant:`ghost`,"aria-label":r(`history.page.deleteNamed`,`Delete panel {{name}}`,{name:t.name}),onClick:()=>void j(t.id,t.name),disabled:!T.writable,children:n(u,{className:`h-3.5 w-3.5`,"aria-hidden":`true`})})]},t.id))]}),e(`div`,{className:`grid grid-cols-1 gap-3 sm:gap-4 xl:grid-cols-5`,children:[n(`div`,{className:`min-w-0 xl:col-span-2`,children:n(V,{headingId:`history-picker`,title:r(`history.picker.title`,`Series`),children:n(`div`,{className:`p-2 sm:p-3`,children:g.status===`error`?n(E,{message:g.error}):n(Ye,{catalog:g.candidates,loading:g.status===`pending`,selected:C,onChange:e=>{let t=s.filter(t=>e.has(B(t))),n=g.candidates.filter(t=>e.has(t.id)&&!C.has(t.id)).map(e=>e.ref);h([...t,...n],f)}})})})}),n(`div`,{className:`min-w-0 xl:col-span-3`,children:n(V,{headingId:`history-overlay`,title:r(`history.page.overlay`,`Overlay`),actions:s.length>0?n(I,{size:`sm`,variant:`ghost`,onClick:()=>h([],f),children:r(`history.page.clear`,`Clear`)}):void 0,children:e(`div`,{className:`p-2 sm:p-3 space-y-3 min-w-0`,children:[n(fe,{value:f,onChange:e=>h(s,e),custom:p,onCustomChange:e=>h(s,`custom`,y(e))}),g.status===`pending`&&s.length>0?n(L,{className:`h-64 w-full`}):n(Pe,{part:S,window:x}),S.missing.length>0&&g.status===`ok`&&n(`p`,{className:`text-[11px] text-foreground-subtle`,children:r(`history.page.missing`,{count:S.missing.length,defaultValue_one:`{{count}} selected series is no longer recorded.`,defaultValue_other:`{{count}} selected series are no longer recorded.`})})]})})})]})]})})}function Qe(e){let{t:n}=H(),r=n(`history.picker.wholeFrame`,`Whole frame`),i=f().trpcClient,o=P({projection:`slim`},{enabled:e}),{nodes:s}=C(),c=t(()=>(o.data??[]).filter(e=>!Xe.has(String(e.type))),[o.data]),l=a({queries:c.map(t=>({queryKey:[`device-history`,`listSeries`,t.id],queryFn:()=>i.deviceHistory.listSeries.query({deviceId:t.id}),enabled:e,staleTime:$}))}),u=a({queries:s.map(t=>({queryKey:[`device-history`,`listNodeSeries`,t.id],queryFn:()=>i.deviceHistory.listNodeSeries.query({forNodeId:t.id}),enabled:e,staleTime:$}))}),d=se({},{enabled:e,staleTime:$}),p=t(()=>new Map((d?.data??[]).map(e=>[e.id,e.displayName])),[d?.data]),m=l.map(e=>e.data),h=u.map(e=>e.data),_=t(()=>De(c.flatMap((e,t)=>{let n=m[t];return n===void 0?[]:[{device:{id:e.id,name:e.name,location:e.location??null},series:n}]}),s.flatMap((e,t)=>{let n=h[t];return n===void 0?[]:[{node:{id:e.id,name:e.name},series:n}]}),e=>{if(e.key!==`addon:pipeline-analytics/occupancy`)return p.get(e.scope)??e.scope;let{zoneId:t,className:n}=g(e.scope),i=t===``?r:t;return n===void 0?i:`${i} · ${n}`}),[c,s,p,[...l,...u].map(e=>e.dataUpdatedAt).join(`,`),r]);return o.status===`error`?{status:`error`,error:o.error.message,candidates:[]}:{status:o.status===`pending`||l.some(e=>e.isPending)||u.some(e=>e.isPending)?`pending`:`ok`,error:``,candidates:_}}export{Ze as HistoryPage};
@@ -1 +0,0 @@
1
- import{C as e,J as t,K as n,R as r,S as i,V as a,Y as o,et as s,o as c}from"./_virtual_mf___mfe_internal__admin_ui_host__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-CEyXHAdg.js";import{An as l,Br as u,Ci as d,Lt as f,Pt as p,Si as m,Zi as h,bi as g,ca as _,ci as v,dn as y,dt as b,ht as x,mi as S,mn as C,ot as w,sr as T,wn as ee,xn as E,yn as D,zr as O}from"./player-overlays-nQJCQERn.js";import{na as te}from"./client-CdHPjeIs.js";import{t as k}from"./search-x-CbPl9Xi3.js";import{Ao as A,At as ne,Cs as j,Ed as re,En as ie,Er as M,Gn as N,Ii as P,Mo as F,Nt as ae,Sa as I,Sd as L,So as oe,Un as R,Yo as z,_i as B,_o as V,_r as H,_s as U,ba as W,bs as se,co as ce,dd as le,ei as G,eo as K,fr as ue,gn as de,gr as fe,gs as pe,io as me,jt as q,lo as J,mo as he,mr as ge,no as _e,oo as ve,or as Y,po as ye,pr as be,ro as xe,tn as Se,to as Ce,va as we,vi as Te,vr as Ee,vs as De,xs as Oe,ys as ke}from"./src-DVuhwnP3.js";import{t as X}from"./useTranslation-BJr-n0es.js";import{n as Ae}from"./addon-icons-context-CrIg7jRp.js";import{P as je,gr as Me,hr as Ne,mr as Pe,ur as Fe}from"./index-CizVDZHi.js";import{t as Ie}from"./device-integration-icon-CL_G93QX.js";import{a as Le,i as Re,r as ze,t as Be}from"./ScanNetworkModal-DzV87kuW.js";import{t as Ve}from"./NodeAddonsSettingsPanel-SKEgEbfP.js";s();function He(e){let t=[];for(let n of e)n.type===`probe`&&t.push(n.key),n.type===`group`&&`fields`in n&&t.push(...He(n.fields));return t}function Z(e,t,i){let[a,s]=o(`idle`),[c,l]=o({}),u=n(()=>{let t=[];for(let n of e.sections)t.push(...He(n.fields));return t},[e]),d=u.length>0&&i!==void 0,f=r(e=>{l(t=>{if(!t[e])return t;let n={...t};return delete n[e],n})},[]);return{testAllStatus:a,hasProbeFields:d,probeResults:c,handleTestAll:r(async()=>{if(!i)return;let e=u.filter(e=>{let n=t[e];return n!=null&&String(n).trim()!==``});if(e.length===0)return;s(`testing`);let n={};for(let t of e)n[t]={status:`probing`};l(n);let r=await Promise.allSettled(e.map(async e=>{try{return{key:e,result:await i(e,t[e])}}catch(t){return{key:e,result:{status:`error`,error:t instanceof Error?t.message:String(t)}}}})),a={};for(let e of r)if(e.status===`fulfilled`){let{key:t,result:n}=e.value;a[t]={status:n.status===`ok`?`ok`:`error`,result:n}}l(a),s(`idle`)},[i,u,t]),clearProbeResult:f}}s();function Ue(e){let t=[];for(let n of e)`required`in n&&n.required===!0&&`key`in n&&n.key&&t.push(n.key),n.type===`group`&&`fields`in n&&t.push(...Ue(n.fields));return t}function We(e){return e==null?!0:typeof e==`string`?e.trim()===``:!1}function Q(e,t={}){for(let n of e){if(n.type===`group`&&`fields`in n){Q(n.fields,t);continue}`key`in n&&n.key&&`default`in n&&n.default!==void 0&&(t[n.key]=n.default)}return t}function $(){return typeof crypto<`u`&&typeof crypto.randomUUID==`function`?`probe-${crypto.randomUUID()}`:`probe-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,10)}`}function Ge({open:t,integrationId:s,addonId:l,onClose:u}){let{t:d}=X(),f=c(),[h,g]=o({}),[_,v]=o(!1),[y,S]=o(null),[w,ee]=o($),E=A({addonId:l},{enabled:t}),D=E.data?.deviceType??null,O=V({addonId:l,type:D??te.Camera},{enabled:t&&E.isSuccess&&D!==null}),k=O.data??null;a(()=>{t&&(g(k?Q(k.sections.flatMap(e=>e.fields)):{}),ee($()),v(!1),S(null))},[t,s,k]);let ne=n(()=>({...h,_probeRequestId:w}),[h,w]),j=ce({onSuccess:()=>{f.invalidateQueries({queryKey:[[`deviceManager`]]})}}),re=z(),ie=r(async(e,t)=>{v(!0);let n=await re.mutateAsync({addonId:l,type:D??te.Camera,key:e,value:t,formValues:ne});return n.status===`ok`&&n.suggestedValues&&g(e=>{let t=!1,r={...e};for(let[i,a]of Object.entries(n.suggestedValues??{}))We(e[i])&&!We(a)&&(r[i]=a,t=!0);return t?r:e}),n},[re,l,ne,D]),{testAllStatus:M,hasProbeFields:N,probeResults:P,handleTestAll:F,clearProbeResult:ae}=Z(k??{sections:[]},h,ie);async function I(e){S(null);try{await j.mutateAsync({addonId:l,type:D??te.Camera,config:h,integrationId:s}),e?g(k?Q(k.sections.flatMap(e=>e.fields)):{}):u()}catch(e){S(e instanceof Error?e.message:String(e))}}if(!t)return null;let L=Ue((k?.sections??[]).flatMap(e=>e.fields)).filter(e=>We(h[e])),oe=L.length===0,R=E.isLoading||D!==null&&O.isLoading,B=E.isError||E.isSuccess&&D===null||O.isError||O.isSuccess&&k===null;return e(`div`,{className:`fixed inset-0 z-50 flex items-center justify-center`,children:[i(`div`,{className:`absolute inset-0 bg-black/60`,onClick:u}),e(`div`,{className:`relative z-10 flex w-full max-w-2xl flex-col max-h-[calc(90dvh-2*max(env(safe-area-inset-top),env(safe-area-inset-bottom)))] rounded-xl border border-border bg-background shadow-2xl`,children:[e(`div`,{className:`flex items-center justify-between border-b border-border px-5 py-4 shrink-0`,children:[i(`h2`,{className:`text-sm font-semibold text-foreground`,children:d(`integrations.addDevice`)}),i(`button`,{onClick:u,className:`rounded-md p-1 text-foreground-subtle hover:text-foreground hover:bg-surface-hover transition-colors`,children:i(b,{className:`h-4 w-4`})})]}),i(`div`,{className:`flex-1 min-h-0 overflow-y-auto px-5 py-4 space-y-3`,children:R?i(`div`,{className:`flex items-center justify-center py-8`,children:i(T,{className:`h-5 w-5 animate-spin text-primary`})}):B?e(`div`,{className:`flex items-start gap-3 rounded-lg border border-destructive/40 bg-destructive/10 px-4 py-3`,children:[i(p,{className:`h-4 w-4 text-destructive mt-0.5 shrink-0`}),e(`div`,{className:`space-y-1`,children:[i(`p`,{className:`text-xs font-medium text-destructive`,children:d(`integrations.addDeviceDialog.providerUnavailable`,`Provider unavailable`)}),i(`p`,{className:`text-xs text-foreground-subtle`,children:i(Fe,{i18nKey:`integrations.addDeviceDialog.notReady`,values:{addonId:l},components:{mono:i(`span`,{className:`font-mono`})}})})]})]}):i(je,{schema:k,values:h,onChange:g,onTestField:ie,probeResults:P,onClearProbe:ae})}),!B&&!R&&e(`div`,{className:`border-t border-border bg-surface/50 shrink-0`,children:[e(`button`,{type:`button`,onClick:()=>v(e=>!e),className:`flex w-full items-center justify-between px-5 py-2 text-[11px] text-foreground-subtle hover:text-foreground hover:bg-surface-hover transition-colors`,children:[e(`span`,{className:`flex items-center gap-2`,children:[i(C,{className:`h-3.5 w-3.5`}),d(`integrations.addDeviceDialog.testLogs`,`Test logs`),i(`span`,{className:`font-mono text-[9px] opacity-60`,children:w.slice(0,14)})]}),i(m,{className:`h-3.5 w-3.5 transition-transform ${_?`rotate-180`:``}`})]}),_&&i(`div`,{className:`border-t border-border max-h-64 overflow-hidden`,children:i(Se,{addonId:l,requestId:w,limit:50,maxHeight:`max-h-64`,showFilters:!1,showScope:!1,className:`border-0 rounded-none`})})]}),!B&&!R&&(y||L.length>0)&&i(`div`,{className:`border-t border-destructive/30 bg-destructive/5 px-5 py-2 shrink-0`,children:e(`div`,{className:`flex items-start gap-2`,children:[i(p,{className:`h-3.5 w-3.5 text-destructive mt-0.5 shrink-0`}),i(`p`,{className:`text-[11px] text-destructive`,children:y||d(`integrations.addDeviceDialog.required`,`Required: {{value1}}`,{value1:L.join(`, `)})})]})}),e(`div`,{className:`flex items-center justify-between border-t border-border px-5 py-3 shrink-0`,children:[e(`div`,{className:`flex items-center gap-2`,children:[i(`button`,{onClick:u,className:`rounded-lg border border-border px-3 py-1.5 text-xs text-foreground-subtle hover:text-foreground transition-colors`,children:d(`integrations.cancel`)}),!B&&N&&e(`button`,{type:`button`,onClick:F,disabled:M===`testing`,className:`inline-flex items-center gap-1.5 rounded-lg border border-border px-3 py-1.5 text-xs font-medium text-foreground-subtle hover:text-foreground hover:bg-surface-hover transition-colors disabled:opacity-50`,children:[M===`testing`?i(T,{className:`h-3.5 w-3.5 animate-spin`}):i(x,{className:`h-3.5 w-3.5`}),d(`integrations.addDeviceDialog.testAll`,`Test All`)]})]}),e(`div`,{className:`flex items-center gap-2`,children:[i(`button`,{onClick:()=>I(!0),disabled:B||!oe||j.isPending,className:`rounded-lg border border-border px-3 py-1.5 text-xs text-foreground hover:bg-surface-hover transition-colors disabled:opacity-50`,children:d(`integrations.saveAndNew`)}),i(`button`,{onClick:()=>I(!1),disabled:B||!oe||j.isPending,className:`rounded-lg bg-primary px-4 py-1.5 text-xs font-medium text-primary-foreground shadow-sm disabled:opacity-50`,children:j.isPending?d(`integrations.saving`):d(`integrations.save`)})]})]})]})]})}s();var Ke=`matter`,qe=[`discovering`,`pase`,`commissioning`,`done`];function Je(e){return!(typeof e!=`object`||!e||!(`phase`in e)||typeof e.phase!=`string`)}function Ye(e,t){return e===`code-expired`||t?.includes(`matter-commission:code-expired`)?{key:`integrations.addMatter.failure.expired`,defaultValue:`The pairing code expired. Share the device again and paste the new code.`}:e===`device-not-found`||t?.includes(`matter-commission:device-not-found`)?{key:`integrations.addMatter.failure.notFound`,defaultValue:`No Matter device with that code was found on the network.`}:e===`wrong-code`||t?.includes(`matter-commission:wrong-code`)?{key:`integrations.addMatter.failure.wrongCode`,defaultValue:`The pairing code was rejected.`}:e===`invalid-code`||t?.includes(`invalid pairing code`)?{key:`integrations.addMatter.failure.invalid`,defaultValue:`Enter an 11-digit or 21-digit manual code, or a code that starts with MT:.`}:{key:`integrations.addMatter.failure.unknown`,defaultValue:t??`Commissioning failed.`}}function Xe({onClose:t,onCommissioned:n}){let{t:r}=X(),s=W({kind:Ke}),[c,l]=o(null),u=s.data?.length??0,d=c??s.data?.[0]?.id??null,f=I(),[p,m]=o(``),[h,g]=o({phase:`idle`,failure:null,message:null}),_=h.phase===`discovering`||h.phase===`pase`||h.phase===`commissioning`,v=we({brokerId:d??``,key:`commission`},{enabled:d!==null&&_,refetchInterval:_?400:!1});a(()=>{_&&Je(v.data)&&v.data.phase!==`idle`&&g({phase:v.data.phase,failure:typeof v.data.failure==`string`?v.data.failure:null,message:typeof v.data.message==`string`?v.data.message:null})},[_,v.data]);let y=()=>{d!==null&&(g({phase:`discovering`,failure:null,message:null}),f.mutate({brokerId:d,target:{action:`commissionNode`},payload:{pairingCode:p.trim()}},{onSuccess:()=>g({phase:`done`,failure:null,message:null}),onError:e=>{let t=e instanceof Error?e.message:`Commissioning failed.`;g({phase:`failed`,failure:t.includes(`matter-commission:`)?t.split(`matter-commission:`)[1]?.split(`:`)[0]??`unknown`:t.includes(`invalid pairing code`)?`invalid-code`:`unknown`,message:t})}}))},b=h.phase===`failed`?Ye(h.failure,h.message):null,x=b===null?null:r(b.key,{defaultValue:b.defaultValue}),S=(s.isSuccess===!0||s.data!==void 0)&&d===null;return i(ue,{open:!0,onOpenChange:e=>!e&&t(),children:e(ge,{width:`md`,placement:`sheet-on-mobile`,scroll:`body`,children:[i(H,{children:i(Ee,{children:r(`integrations.addMatter.title`,{defaultValue:`Add Matter device`})})}),e(be,{className:`space-y-4`,children:[i(`p`,{className:`text-xs text-foreground-subtle`,children:r(`integrations.addMatter.help`,{defaultValue:`In Home Assistant, open the device and choose Share device. Paste the numeric code or the MT: code here. The device stays in Home Assistant.`})}),(S||u>1)&&!_&&h.phase!==`done`&&e(`div`,{className:`space-y-1.5`,children:[i(N,{children:r(`integrations.addMatter.broker`,{defaultValue:`Matter fabric`})}),i(Le,{kind:Ke,value:d,onChange:l})]}),!S&&e(`div`,{className:`space-y-1.5`,children:[i(N,{htmlFor:`matter-pairing-code`,children:r(`integrations.addMatter.code`,{defaultValue:`Pairing code`})}),i(le,{id:`matter-pairing-code`,value:p,autoComplete:`off`,spellCheck:!1,placeholder:`34970112332`,disabled:_||h.phase===`done`,onChange:e=>m(e.target.value)})]}),h.phase!==`idle`&&i(`ol`,{className:`space-y-1`,"aria-label":r(`integrations.addMatter.progress`,{defaultValue:`Commissioning progress`}),children:qe.map(t=>{let n=h.phase===t;return e(`li`,{className:`text-xs ${n?`text-foreground font-medium`:`text-foreground-subtle`}`,children:[n&&_?i(T,{className:`mr-1 inline h-3 w-3 animate-spin`}):null,r(`integrations.addMatter.phase.${t}`,{defaultValue:t===`discovering`?`Discovering`:t===`pase`?`PASE`:t===`commissioning`?`Commissioning`:`Done`})]},t)})}),x!==null&&i(M,{message:x})]}),e(fe,{children:[i(G,{variant:`ghost`,size:`sm`,onClick:t,children:r(`common.close`,{defaultValue:`Close`})}),h.phase===`done`?i(G,{size:`sm`,onClick:n,children:r(`integrations.adoptDevices`,{defaultValue:`Adopt devices`})}):i(G,{size:`sm`,disabled:_||S||p.trim().length===0,onClick:y,children:_?r(`integrations.addMatter.working`,{defaultValue:`Adding…`}):r(`integrations.addMatter.submit`,{defaultValue:`Add device`})})]})]})})}var Ze=1500;function Qe({addonId:t,integrationId:n,jobId:r,onFinished:a}){let{t:o}=X(),s=K(),c=(xe({addonId:t,integrationId:n},{refetchInterval:e=>(e.state.data??[]).some(e=>e.state===`running`)?Ze:!1}).data??[]).find(e=>e.jobId===r);if(!c)return null;let l=c.state===`running`,u=c.processed,d=c.total>0?Math.round(u/c.total*100):0;!l&&c.finishedAt!==null&&a();let f=[`${u}/${c.total} ${o(`integrations.adoptJobProcessed`,{defaultValue:`processed`})}`];c.adopted>0&&f.push(`${c.adopted} ${o(`integrations.adoptJobAdded`,{defaultValue:`added`})}`),c.alreadyAdopted>0&&f.push(`${c.alreadyAdopted} ${o(`integrations.adoptJobSkipped`,{defaultValue:`already there`})}`),c.failed>0&&f.push(`${c.failed} ${o(`integrations.adoptJobFailed`,{defaultValue:`failed`})}`);let m=f.join(` · `);return e(`div`,{className:`border-t border-border px-5 py-3 shrink-0 space-y-2`,children:[e(`div`,{className:`flex items-center gap-2`,children:[l?i(T,{className:`h-3.5 w-3.5 animate-spin text-primary shrink-0`}):c.failed>0?i(p,{className:`h-3.5 w-3.5 text-destructive shrink-0`}):c.state===`cancelled`?i(v,{className:`h-3.5 w-3.5 text-foreground-subtle shrink-0`}):i(S,{className:`h-3.5 w-3.5 text-primary shrink-0`}),i(`p`,{className:`text-[11px] text-foreground`,children:m}),l&&i(`button`,{onClick:()=>s.mutate({jobId:r}),className:`ml-auto rounded-lg border border-border px-2 py-1 text-[11px] text-foreground-subtle hover:text-foreground transition-colors`,children:o(`integrations.adoptJobCancel`,{defaultValue:`Stop`})})]}),i(`div`,{className:`h-1 w-full rounded-full bg-border overflow-hidden`,children:i(`div`,{className:`h-full bg-primary transition-all`,style:{width:`${d}%`},role:`progressbar`,"aria-valuenow":d,"aria-valuemin":0,"aria-valuemax":100})}),c.results.filter(e=>e.outcome===`failed`).slice(0,5).map(t=>e(`p`,{className:`text-[11px] text-destructive`,children:[t.childNativeId,`: `,t.error]},t.childNativeId))]})}function $e(e){let t=e.metadata;return[e.name,e.childNativeId,t.model,t.manufacturer,t.integration,t.externalLocation].filter(e=>typeof e==`string`&&e.length>0).join(` `)}s();var et=`devices`;function tt(e){return{id:et,label:e(`integrations.adoptDevicesModal.defaultFilter`),isDefault:!0}}var nt=2e4,rt=100;function it({addonId:n,integrationId:s,onClose:l}){let u=_(),{t:f}=X(),m=c(),[h,g]=o(new Set),[v,y]=o(new Set),[x,S]=o(new Map),[C,w]=o(null),{data:ee}=De(),E=(ee??[]).find(e=>e.addonId===n)?.supportsLocationImport??!1,[O,te]=o(!0),k=Ce({addonId:n,integrationId:s}).data?.filters,A=k&&k.length>0?k:[tt(f)],[j,ie]=o(A.find(e=>e.isDefault)?.id??(A.some(e=>e.id===et)?et:A[0].id)),M=j!==et,N=me(),P=_e({addonId:n,integrationId:s,page:1,pageSize:nt,filter:j}),F=P.refetch,ae=N.mutate,I=r(()=>{ae({addonId:n,integrationId:s},{onSettled:()=>{F()}})},[ae,n,s,F]),oe=t(null);a(()=>{let e=`${n}::${s}`;oe.current===e||P.isLoading||(oe.current=e,(P.data?.candidates.length??0)===0&&I())},[n,s,P.isLoading,P.data,I]);let R=N.isPending,z=N.isError?N.error instanceof Error?N.error.message:String(N.error):null,B=typeof N.data?.lastError==`string`&&N.data.lastError.length>0?N.data.lastError:null,V=P.data?.candidates??[],H=P.isError?P.error instanceof Error?P.error.message:String(P.error):null,U=ve(),[W,se]=o(null),ce=r(e=>{e.alreadyAdopted||g(t=>{let n=new Set(t);return n.has(e.childNativeId)?n.delete(e.childNativeId):n.add(e.childNativeId),n})},[]),le=r(e=>{y(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},[]),G=r((e,t)=>{S(n=>{let r=new Map(n),i=r.get(e)?.hiddenChildIds??new Set,a=new Set(i);return a.has(t)?a.delete(t):a.add(t),a.size===0?r.delete(e):r.set(e,{hiddenChildIds:a}),r})},[]),K=r(e=>{let t={};for(let n of e){let e=x.get(n);e&&e.hiddenChildIds.size>0&&(t[n]={hiddenChildIds:[...e.hiddenChildIds]})}return Object.keys(t).length>0?t:void 0},[x]),ue=r(async()=>{w(null);let e=[...h];if(e.length!==0)try{let t=K(e),{jobId:r}=await U.mutateAsync({addonId:n,integrationId:s,filter:j,childNativeIds:e,...t?{perCandidate:t}:{},...E?{importLocations:O}:{}});se(r),g(new Set),S(new Map)}catch(e){w(e instanceof Error?e.message:String(e))}},[h,K,U,n,s,j,E,O]),de=t(null),fe=r(()=>{W===null||de.current===W||(de.current=W,F(),m.invalidateQueries({queryKey:[[`integrations`]]}),m.invalidateQueries({queryKey:[[`deviceManager`]]}))},[W,F,m]),pe=r(e=>{ie(e),g(new Set),y(new Set),S(new Map),w(null)},[]),q=h.size,J=W!==null&&q===0&&!U.isPending;return e(`div`,{className:`fixed inset-0 z-50 flex items-center justify-center`,children:[i(`div`,{className:`absolute inset-0 bg-black/60`,onClick:l}),e(`div`,{className:`relative z-10 flex w-full max-w-3xl flex-col h-[85vh] rounded-xl border border-border bg-background shadow-2xl`,children:[e(`div`,{className:`flex items-center justify-between border-b border-border px-5 py-4 shrink-0`,children:[e(`div`,{className:`min-w-0`,children:[i(`h2`,{className:`text-sm font-semibold text-foreground`,children:f(`integrations.adoptDevices`,{defaultValue:`Adopt devices`})}),i(`p`,{className:`text-[11px] text-foreground-subtle mt-0.5`,children:f(`integrations.adoptDevicesHint`,{defaultValue:`Preview the candidate devices and add the ones you want.`})})]}),e(`div`,{className:`flex items-center gap-3 shrink-0`,children:[E&&e(`label`,{className:`flex items-center gap-1.5 cursor-pointer text-[11px] text-foreground-subtle hover:text-foreground transition-colors`,children:[i(`input`,{type:`checkbox`,checked:O,onChange:e=>te(e.target.checked),className:`accent-primary`}),f(`integrations.importLocations`,{defaultValue:`Import locations from the integration`})]}),i(`button`,{onClick:l,className:`rounded-md p-1 text-foreground-subtle hover:text-foreground hover:bg-surface-hover transition-colors`,"aria-label":f(`common.close`,`Close`),children:i(b,{className:`h-4 w-4`})})]})]}),e(`div`,{className:`flex-1 min-h-0 px-5 py-3 flex flex-col gap-2 overflow-hidden`,children:[(z??H??B)&&V.length===0&&i(`div`,{className:`rounded-lg border border-destructive/30 bg-destructive/5 px-4 py-3 shrink-0`,children:e(`div`,{className:`flex items-start gap-2`,children:[i(p,{className:`h-3.5 w-3.5 text-destructive mt-0.5 shrink-0`}),e(`div`,{className:`min-w-0`,children:[i(`p`,{className:`text-xs font-medium text-destructive`,children:f(`integrations.adoptRefreshFailed`,{defaultValue:`Could not discover devices.`})}),i(`p`,{className:`text-[11px] text-destructive/90 mt-0.5`,children:z??H??B})]})]})}),A.length>1&&i(at,{filters:A,activeFilter:j,onSelect:pe}),i(`div`,{className:`flex-1 min-h-0`,children:i(ne,{mode:`generic`,items:V,pageSize:rt,getKey:e=>e.childNativeId,getSearchText:$e,getFilterType:e=>e.type,filterOptions:L(u),filterLabel:f(`integrations.adoptColType`,{defaultValue:`Type`}),isLoading:P.isLoading||R&&V.length===0,searchPlaceholder:f(`integrations.adoptSearch`,{defaultValue:`Search candidates…`}),emptyLabel:(z??H??B)&&V.length===0?``:f(`integrations.adoptNoCandidates`,{defaultValue:`No candidate devices found.`}),toolbar:e(`button`,{type:`button`,onClick:I,disabled:R,title:f(`integrations.adoptRefreshTitle`,{defaultValue:`Re-scan Home Assistant for devices`}),className:`inline-flex items-center gap-1.5 rounded-lg border border-border bg-surface px-2.5 py-1.5 text-xs text-foreground-subtle hover:text-foreground hover:bg-surface-hover transition-colors disabled:opacity-60 shrink-0`,children:[i(D,{className:`h-3.5 w-3.5 ${R?`animate-spin`:``}`}),f(`integrations.adoptRefresh`,{defaultValue:`Refresh`})]}),columns:[{key:`name`,header:f(`integrations.adoptColName`,{defaultValue:`Name`}),headerClassName:`w-[55%]`,cell:e=>i(ot,{candidate:e,expandable:!M,expanded:v.has(e.childNativeId),onToggleExpand:()=>le(e.childNativeId),adoptedLabel:f(`integrations.adoptAlready`,{defaultValue:`Adopted`})})},{key:`type`,header:f(`integrations.adoptColType`,{defaultValue:`Type`}),headerClassName:`w-[30%] hidden sm:table-cell`,cellClassName:`hidden sm:table-cell`,cell:t=>{let n=re(t.type,u),r=n.icon;return e(`span`,{className:`inline-flex items-center gap-1.5 text-[10px] text-foreground-subtle`,children:[i(r,{className:`h-3.5 w-3.5 shrink-0`}),n.label]})}},{key:`select`,header:``,headerClassName:`w-[15%] text-right`,cellClassName:`text-right`,cell:e=>i(`div`,{className:`flex items-center justify-end`,children:i(`button`,{onClick:()=>ce(e),disabled:e.alreadyAdopted,"aria-label":h.has(e.childNativeId)?f(`integrations.adoptDevicesModal.deselect`,`Deselect`):f(`integrations.adoptDevicesModal.select`,`Select`),className:`inline-flex h-5 w-5 items-center justify-center rounded border ${h.has(e.childNativeId)?`border-primary bg-primary`:`border-border`} ${e.alreadyAdopted?`cursor-not-allowed opacity-50`:``}`,children:h.has(e.childNativeId)&&i(d,{className:`h-3 w-3 text-primary-foreground`})})})}],isExpanded:e=>!M&&v.has(e.childNativeId),renderExpanded:M?void 0:e=>i(st,{candidate:e,hiddenChildIds:x.get(e.childNativeId)?.hiddenChildIds??new Set,onToggleChildHidden:t=>G(e.childNativeId,t)}),rowClassName:e=>e.alreadyAdopted?`opacity-60`:h.has(e.childNativeId)?`bg-primary/5`:``})})]}),C&&i(`div`,{className:`border-t border-destructive/30 bg-destructive/5 px-5 py-2 shrink-0`,children:e(`div`,{className:`flex items-start gap-2`,children:[i(p,{className:`h-3.5 w-3.5 text-destructive mt-0.5 shrink-0`}),i(`p`,{className:`text-[11px] text-destructive`,children:C})]})}),W!==null&&i(Qe,{addonId:n,integrationId:s,jobId:W,onFinished:fe}),e(`div`,{className:`flex items-center justify-between border-t border-border px-5 py-3 shrink-0`,children:[i(`div`,{}),e(`div`,{className:`flex items-center gap-2`,children:[i(`button`,{onClick:l,className:`rounded-lg border border-border px-3 py-1.5 text-xs text-foreground-subtle hover:text-foreground transition-colors`,children:f(`integrations.cancel`,{defaultValue:`Cancel`})}),e(`button`,{onClick:J?l:ue,disabled:!J&&(q===0||U.isPending),className:`inline-flex items-center gap-1.5 rounded-lg bg-primary px-4 py-1.5 text-xs font-medium text-primary-foreground shadow-sm disabled:opacity-50 disabled:cursor-not-allowed`,children:[U.isPending&&i(T,{className:`h-3.5 w-3.5 animate-spin`}),J?f(`integrations.close`,{defaultValue:`Close`}):f(`integrations.addSelected`,{defaultValue:`Add selected`}),!J&&q>0?` (${q})`:``]})]})]})]})]})}function at({filters:e,activeFilter:t,onSelect:n}){let{t:r}=X();return i(`div`,{role:`tablist`,"aria-label":r(`integrations.adoptDevicesModal.discoveryGranularity`,`Discovery granularity`),className:`inline-flex shrink-0 self-start rounded-lg border border-border bg-surface p-0.5`,children:e.map(e=>{let r=e.id===t;return i(`button`,{type:`button`,role:`tab`,"aria-selected":r,onClick:()=>n(e.id),className:`rounded-md px-3 py-1 text-xs font-medium transition-colors ${r?`bg-primary text-primary-foreground shadow-sm`:`text-foreground-subtle hover:text-foreground hover:bg-surface-hover`}`,children:e.label},e.id)})})}function ot({candidate:t,expandable:n,expanded:r,onToggleExpand:a,adoptedLabel:o}){let{t:s}=X(),c=(t.children??[]).length;return e(`div`,{className:`flex items-center gap-2.5 min-w-0`,children:[n&&c>0?e(`button`,{type:`button`,onClick:a,"aria-label":r?s(`integrations.adoptDevicesModal.collapse`,`Collapse`):s(`integrations.adoptDevicesModal.expand`,`Expand`),"aria-expanded":r,className:`flex h-5 flex-shrink-0 items-center justify-center gap-0.5 rounded px-0.5 text-[10px] text-foreground-subtle transition-colors hover:bg-surface-hover hover:text-foreground`,children:[i(r?m:g,{className:`h-3.5 w-3.5`}),c]}):i(`span`,{className:`flex h-5 w-5 flex-shrink-0 items-center justify-center text-foreground-subtle/40`,children:`—`}),i(`span`,{className:`truncate text-xs font-medium text-foreground`,children:t.name}),t.alreadyAdopted&&i(`span`,{className:`rounded-full bg-success/10 px-2 py-0.5 text-[9px] font-medium text-success shrink-0`,children:o})]})}function st({candidate:t,hiddenChildIds:n,onToggleChildHidden:r}){let{t:a}=X(),o=t.children??[];return o.length===0?null:i(`div`,{className:`space-y-1 py-1`,children:o.map(t=>{let o=n.has(t.childNativeId),s=t.capabilities??[];return e(`div`,{className:`flex items-center gap-2 rounded px-2 py-1 ${o?`opacity-50`:``}`,children:[i(`span`,{className:`text-[11px] text-foreground truncate flex-1 min-w-0`,children:t.name}),s.length>0&&i(`span`,{className:`text-[9px] text-foreground-subtle truncate`,children:s.join(`, `)}),i(`button`,{onClick:()=>r(t.childNativeId),"aria-label":o?a(`integrations.adoptDevicesModal.showChild`,`Show child`):a(`integrations.adoptDevicesModal.hideChild`,`Hide child`),title:o?a(`integrations.adoptDevicesModal.showAfterAdopt`,`Show after adopt`):a(`integrations.adoptDevicesModal.hideAfterAdopt`,`Hide after adopt`),className:`flex h-5 w-5 items-center justify-center rounded text-foreground-subtle hover:text-foreground hover:bg-surface-hover transition-colors flex-shrink-0`,children:i(o?u:O,{className:`h-3 w-3`})})]},t.childNativeId)})})}s();function ct(e){let t=[];for(let n of e){if(n.type===`group`){t.push(...ct(n.fields));continue}`key`in n&&typeof n.key==`string`&&t.push(n.key)}return t}function lt(e,t){if(!e)return{};let n=new Set(e.sections.flatMap(e=>ct(e.fields))),r={};for(let e of n)Object.prototype.hasOwnProperty.call(t,e)&&(r[e]=t[e]);return r}function ut(e){return{...e.tabs?{tabs:e.tabs}:{},sections:e.sections.map(e=>({...e,fields:e.fields.map(e=>{if(`value`in e){let{value:t,...n}=e;return n}return e})}))}}function dt({integrationId:t,addonId:r,name:a,kind:o,mode:s,brokerKind:l,canTest:u=!1,trpc:d,onClose:f}){let{t:p}=X(),m=c(),{data:h,isLoading:g}=ke({id:t},{enabled:s===`account`||s===`broker`}),_=n(()=>{let e=h?.brokerId;return typeof e==`string`?e:null},[h]),{data:v,isLoading:y}=B({addonId:r,nodeId:`hub`},{enabled:s===`account`}),b=n(()=>v?ut(v):null,[v]),x=Oe(),S=(e,n)=>{x.mutate({id:t,settings:e,...n?{secretKeys:[...n]}:{}},{onSuccess:()=>{m.invalidateQueries(),f()}})};return i(ue,{open:!0,onOpenChange:e=>!e&&f(),children:e(ge,{width:`lg`,placement:`sheet-on-mobile`,scroll:`body`,children:[i(H,{children:e(Ee,{children:[p(`integrations.editConfig`,{defaultValue:`Edit configuration`}),` — `,a]})}),i(be,{children:s===`broker`?l?e(`div`,{className:`space-y-3`,children:[i(`p`,{className:`text-[11px] text-foreground-subtle`,children:p(`integrations.relinkBrokerHelp`,{defaultValue:`Choose the broker this integration connects through. Picking a different broker re-points it and restarts the addon.`})}),_&&e(`p`,{className:`text-[11px] text-foreground`,children:[p(`integrations.currentBroker`,{defaultValue:`Current broker`}),`:`,` `,i(`span`,{className:`font-mono text-foreground-subtle`,children:_})]}),x.isPending?e(`div`,{className:`flex items-center gap-2 text-[11px] text-foreground-subtle`,children:[i(T,{className:`h-3 w-3 animate-spin`}),p(`integrations.saving`,{defaultValue:`Saving…`})]}):i(Re,{kind:l,onResolved:e=>{S({brokerId:e})},onBack:f}),x.isError&&i(`p`,{className:`text-[11px] text-danger`,children:p(`integrations.relinkFailed`,{defaultValue:`Failed to update broker link.`})})]}):i(`p`,{className:`text-[11px] text-danger`,children:p(`integrations.noBrokerKind`,{defaultValue:`This integration declares device-adoption but its addon manifest has no brokerKind.`})}):s===`account`?g||y?e(`div`,{className:`flex items-center gap-2 text-[11px] text-foreground-subtle`,children:[i(T,{className:`h-3 w-3 animate-spin`}),p(`integrations.loading`,{defaultValue:`Loading…`})]}):i(ze,{addonId:r,configSchema:b,canTest:u,initialName:a,initialConfig:lt(b,h??{}),submitLabel:p(`integrations.save`,{defaultValue:`Save`}),hideName:!0,onSave:({config:e,secretKeys:t})=>S(e,t),onBack:f}):i(Y,{trpc:d,addonId:r,nodeId:`hub`,title:a})})]})})}function ft(e){return e==null?!1:e.sections.some(e=>e.fields.length>0)}s();function pt(){let{t}=X(),{integrationId:s}=Ne(),u=c(),d=Pe(),[p,m]=Me(),g=w(),[_,v]=o(!1),[b,x]=o(!1),[S,D]=o(!1),O=r(e=>{D(!1),d(`/integrations`,{state:{integrationSeed:e}})},[d]),[te,A]=o(!1),[re,M]=o(!1),{data:N,isLoading:I}=U({id:s??``},{enabled:!!s}),{data:L}=B({addonId:N?.addonId??``,nodeId:`hub`},{enabled:!!N?.addonId}),{data:z,isSuccess:V}=De(),W=n(()=>{let e=N?.addonId;return!e||!V?null:(z??[]).find(t=>t.addonId===e)?.kind===`device-adoption`?`device-adoption`:`device-provider`},[z,N?.addonId,V]),{data:ce}=ye({}),le=n(()=>(ce?.providers??[]).some(e=>e.addonId===N?.addonId),[ce,N?.addonId]),G=W!==null,K=N?.info?.fixed===!0,fe=n(()=>{let e=N?.addonId;return!e||!V?null:(z??[]).find(t=>t.addonId===e)?.brokerKind??null},[z,N?.addonId,V]),me=fe===`matter`,_e=G?me?t(`integrations.addMatter.title`,{defaultValue:`Add Matter device`}):W===`device-adoption`?t(`integrations.adoptDevices`,{defaultValue:`Adopt devices`}):t(`integrations.addDevice`):t(`integrations.addDeviceLoading`,{defaultValue:`Loading…`}),ve=n(()=>{let e=N?.addonId;return!e||!V?!1:(z??[]).find(t=>t.addonId===e)?.canTest===!0},[z,N?.addonId,V]),Y=n(()=>{let e=N?.addonId;return!e||!V?null:(z??[]).find(t=>t.addonId===e)?.mode??null},[z,N?.addonId,V]);a(()=>{p.get(`add`)===`1`&&G&&(x(!1),v(!0),m(e=>{let t=new URLSearchParams(e);return t.delete(`add`),t},{replace:!0}))},[p,G,m]);let xe=L!=null&&Array.isArray(L.sections)&&L.sections.some(e=>e.fields.length>0),{data:Ce}=Te({addonId:N?.addonId??``,nodeId:`hub`},{enabled:!!N?.addonId&&Y!==`account`}),we=Y!==null&&Y!==`account`&&ft(Ce),Oe=n(()=>N?.addonId?[N.addonId]:[],[N?.addonId]),{data:ke}=oe({projection:`slim`},{refetchInterval:3e4}),Ae=[[`integrations`,`get`],{input:{id:s??``},type:`query`}],je=j({onMutate:async e=>{await u.cancelQueries({queryKey:Ae});let t=u.getQueryData(Ae);return t!=null&&u.setQueryData(Ae,{...t,enabled:e.enabled}),{previous:t}},onError:(e,t,n)=>{let r=n;r?.previous!=null&&u.setQueryData(Ae,r.previous)},onSettled:()=>{u.invalidateQueries({queryKey:[[`integrations`]]}),u.invalidateQueries({queryKey:[[`deviceManager`]]})}}),Fe=pe({onSuccess:()=>{u.invalidateQueries({queryKey:[[`integrations`]]}),u.invalidateQueries({queryKey:[[`deviceManager`]]}),d(`/integrations`)}}),Le=P({onSuccess:()=>{u.invalidateQueries({queryKey:[[`integrations`]]}),u.invalidateQueries({queryKey:[[`deviceManager`]]})}}),Re=F({onSuccess:()=>{u.invalidateQueries({queryKey:[[`deviceManager`]]})}}),ze=J({onSuccess:()=>{u.invalidateQueries({queryKey:[[`deviceManager`]]})}}),He=he({onSuccess:()=>{u.invalidateQueries({queryKey:[[`deviceManager`]]})}}),Z=n(()=>ke??[],[ke]),Ue=n(()=>{let e=new Map;for(let t of Z)e.set(t.id,{id:t.id,name:t.name??t.stableId??`#${String(t.id)}`});return e},[Z]),We=r(e=>Ue.get(e)??null,[Ue]),{data:Q}=se(void 0),$=n(()=>q(Q),[Q]),Ke=r(e=>d(`/devices/${String(e)}`),[d]),qe=n(()=>{let e=N?.id;return e?Z.filter(t=>{let n=$(t);return n.kind===`resolved`&&n.integration.id===e}):[]},[Z,N?.id,$]),Je=n(()=>Q===void 0?null:ae(qe).length,[Q,qe])??`…`;return I?e(`div`,{className:`p-4`,children:[i(`div`,{className:`h-16 rounded-lg bg-surface animate-pulse mb-4`}),i(`div`,{className:`h-40 rounded-lg bg-surface animate-pulse`})]}):N?e(`div`,{className:`p-4 space-y-4 overflow-x-hidden`,children:[i(ie,{items:[{label:t(`integrationDetail.integrations`,`Integrations`),onClick:()=>d(`/integrations`)},{label:N.name}]}),e(`div`,{className:`flex flex-wrap items-center justify-between gap-3`,children:[e(`div`,{className:`flex items-center gap-3 min-w-0`,children:[i(mt,{addonId:N.addonId}),e(`div`,{className:`min-w-0`,children:[i(`h1`,{className:`text-lg font-semibold text-foreground truncate`,children:N.name}),e(`p`,{className:`text-[11px] text-foreground-subtle mt-0.5 truncate`,children:[N.addonId,` · `,Je,` `,t(`integrations.devices`)]})]})]}),e(`div`,{className:`flex flex-wrap items-center justify-end gap-2`,children:[le&&e(`button`,{onClick:()=>D(!0),className:`flex items-center gap-1.5 rounded-lg border border-border bg-surface px-2.5 py-1.5 text-xs font-medium text-foreground-subtle hover:text-foreground hover:bg-surface-hover transition-colors`,title:t(`integrationDetail.scanTheNetworkForDevices`,`Scan the network for devices (incl. a different subnet)`),children:[i(ee,{className:`h-3.5 w-3.5`}),t(`integrationDetail.scanNetwork`,`Scan network`)]}),!K&&e(`button`,{onClick:()=>{x(!1),v(!0)},disabled:!G,className:`flex items-center gap-1.5 rounded-lg bg-primary px-3 py-1.5 text-xs font-medium text-primary-foreground shadow-sm disabled:opacity-50 disabled:cursor-not-allowed`,title:_e,children:[i(l,{className:`h-3.5 w-3.5`}),_e]}),e(`div`,{className:`inline-flex items-center gap-2 rounded-lg border px-3 py-1.5 transition-colors ${je.isPending?`opacity-60`:``} ${N.enabled?`border-success/30 bg-success/5`:`border-border bg-surface`}`,title:t(`integrations.toggleHint`,{defaultValue:`Click to toggle`}),children:[i(R,{checked:N.enabled,onCheckedChange:e=>je.mutate({id:s,enabled:e}),disabled:je.isPending,"aria-label":N.enabled?t(`integrationDetail.disableIntegration`,`Disable integration`):t(`integrationDetail.enableIntegration`,`Enable integration`)}),i(`span`,{className:`text-[11px] font-medium ${N.enabled?`text-success`:`text-foreground-subtle`}`,children:N.enabled?t(`integrationDetail.enabled`,`Enabled`):t(`integrationDetail.disabled`,`Disabled`)}),je.isPending&&i(T,{className:`h-3 w-3 animate-spin text-foreground-subtle`})]}),Y!==`standalone`&&(xe||W===`device-adoption`)&&e(`button`,{onClick:()=>A(!0),className:`flex items-center gap-1.5 rounded-lg border border-border bg-surface px-3 py-1.5 text-[11px] text-foreground-subtle hover:text-foreground hover:bg-surface-hover transition-colors`,children:[i(y,{className:`h-3 w-3`}),t(`integrations.config`)]}),e(`button`,{onClick:()=>M(!0),className:`flex items-center gap-1.5 rounded-lg border border-border bg-surface px-3 py-1.5 text-[11px] text-foreground-subtle hover:text-foreground hover:bg-surface-hover transition-colors`,title:t(`integrations.logs`,{defaultValue:`View logs`}),children:[i(C,{className:`h-3 w-3`}),t(`integrations.logs`,{defaultValue:`Logs`})]}),i(de,{label:t(`integrationDetail.restart`,`Restart`),icon:E,title:t(`integrationDetail.restart2`,`Restart "{{name}}"?`,{name:N.name}),description:t(`integrationDetail.restartingTheAddonWillBriefly`,`Restarting the addon will briefly disconnect every device backed by it ({{topLevelCountLabel}} active). Streams will reconnect automatically.`,{topLevelCountLabel:Je}),confirmLabel:t(`integrationDetail.restart`,`Restart`),triggerVariant:`outline`,confirmVariant:`danger`,disabled:Le.isPending,action:()=>Le.mutateAsync({addonId:N.addonId})}),!K&&s&&i(de,{label:t(`integrations.delete`,{defaultValue:`Delete`}),icon:f,title:t(`integrations.deleteTitle`,{defaultValue:`Delete integration?`}),description:t(`integrations.deleteWarning`,{defaultValue:`This removes the integration "{{name}}" and its {{count}} device(s). The addon will restart. This cannot be undone.`,name:N.name,count:Je}),confirmLabel:t(`integrations.confirmDelete`,{defaultValue:`Delete integration`}),triggerVariant:`outline`,confirmVariant:`danger`,className:`border-danger bg-danger/10 text-danger hover:bg-danger hover:text-background`,disabled:Fe.isPending,action:()=>Fe.mutateAsync({id:s})})]})]}),we&&i(Ve,{nodeId:null,addonIds:Oe,level:`global`,surface:`integration`,title:t(`integrations.settings`,{defaultValue:`Settings`})}),i(ne,{context:`integration-detail`,devices:Z,trpc:g.trpcClient,integrationOf:$,forceIntegrationId:N.id,urlScope:`root`,lsKey:`integration-detail:${N.addonId}`,resolveIntegrationIcon:Ie,resolveParent:We,onNavigate:Ke,batchActions:{remove:Re.mutate,disable:ze.mutate,enable:He.mutate},...K?{}:{onDeleteDevice:e=>Re.mutate({deviceId:e.id})}}),_&&s&&me&&!b&&i(Xe,{onClose:()=>v(!1),onCommissioned:()=>x(!0)}),_&&s&&W===`device-adoption`&&(!me||b)&&i(it,{addonId:N.addonId,integrationId:s,onClose:()=>{v(!1),x(!1)}}),_&&s&&W===`device-provider`&&i(Ge,{open:_,integrationId:s,addonId:N.addonId,onClose:()=>v(!1)}),S&&N&&i(Be,{open:S,scope:{addonId:N.addonId,label:N.name},onClose:()=>D(!1),onSetupIntegration:O}),te&&s&&W!==null&&Y!==null&&i(dt,{integrationId:s,addonId:N.addonId,name:N.name,kind:W,mode:Y,brokerKind:fe,canTest:ve,trpc:g.trpcClient,onClose:()=>A(!1)}),re&&i(ue,{open:!0,onOpenChange:e=>!e&&M(!1),children:e(ge,{width:`lg`,placement:`sheet-on-mobile`,scroll:`body`,className:`md:max-w-5xl md:h-[80vh]`,children:[i(H,{className:`mb-0`,children:e(Ee,{className:`flex items-center gap-2 min-w-0`,children:[i(C,{className:`h-4 w-4 text-primary shrink-0`}),i(`span`,{className:`truncate`,children:N.name}),e(`span`,{className:`text-[10px] text-foreground-subtle font-mono truncate font-normal`,children:[N.addonId,s?` · ${s}`:``]})]})}),i(be,{className:`min-h-0 overflow-hidden p-0`,children:i(Se,{addonId:N.addonId,limit:200,maxHeight:`max-h-full`,showScope:!1,className:`h-full border-0 rounded-none`})})]})})]}):e(`div`,{className:`flex flex-col items-center justify-center py-20 px-6 text-center gap-4`,children:[i(`div`,{className:`flex h-12 w-12 items-center justify-center rounded-full bg-foreground-subtle/10`,children:i(k,{className:`h-6 w-6 text-foreground-subtle`})}),e(`div`,{className:`space-y-1 max-w-sm`,children:[i(`h2`,{className:`text-sm font-semibold text-foreground`,children:t(`integrations.integrationNotFound`,{defaultValue:`Integration not found`})}),i(`p`,{className:`text-[11px] text-foreground-subtle`,children:t(`integrations.integrationNotFoundHint`,{defaultValue:`The integration "{{id}}" does not exist. It may have been deleted, or the URL may be wrong.`,id:s??``})})]}),e(`button`,{onClick:()=>d(`/integrations`),className:`inline-flex items-center gap-1.5 rounded-lg border border-border bg-surface px-3 py-1.5 text-[11px] font-medium text-foreground hover:bg-surface-hover transition-colors`,children:[i(h,{className:`h-3 w-3`}),t(`integrations.backToList`,{defaultValue:`Back to integrations`})]})]})}function mt({addonId:e}){let t=Ae(e),[n,r]=o(!1);return!t||n?null:i(`img`,{src:t,alt:``,className:`h-8 w-8 rounded-lg shrink-0`,onError:()=>r(!0)})}export{pt as IntegrationDetailPage};
@@ -1 +0,0 @@
1
- import{C as e,J as t,K as n,S as r,V as i,Y as a,et as o,k as s,o as c,x as l,z as u}from"./_virtual_mf___mfe_internal__admin_ui_host__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-CEyXHAdg.js";import{An as d,Pt as f,Ri as p,V as m,Xt as h,jn as g,mn as _,sr as v,ur as y,xn as b}from"./player-overlays-nQJCQERn.js";import{Lr as x}from"./client-CdHPjeIs.js";import{t as S}from"./settings-2-7F6aVC_u.js";import{Dr as C,Er as ee,Hi as te,Ii as w,ei as T,en as E,gn as D,si as O,tn as k,xn as ne,xr as A}from"./src-DVuhwnP3.js";import{t as j}from"./useTranslation-BJr-n0es.js";import{c as re,d as M,dr as N,gr as P,o as F,r as I,s as L,u as R,ur as z}from"./index-CizVDZHi.js";import{t as B}from"./AdminPage-Bm98o4hS.js";import{t as V}from"./NodeAddonsSettingsPanel-SKEgEbfP.js";import{t as H}from"./AddonAssetIcon-D0sLOBuE.js";o();function U(e){let{ids:t,answered:r,legacyGroupParam:i=null,groupFirst:a}=e,[o]=P(),s=o.get(F),c=i===null?null:o.get(i),l=o.get(L),u=n(()=>R({ids:t,requested:s,answered:r,legacyGroup:c,...a===void 0?{}:{groupFirst:a}}),[t,s,r,c,a]),d=n(()=>(e,t)=>`?${M(o,e,i,t??null).toString()}`,[o,i]);return{...u,requestedSection:l,hrefFor:d}}var W=[[[`addons`,`listCapabilityProviders`]],[[`addons`,`list`]]],G=`text-[10px]`;function K({isActive:e}){let{t}=j();return r(O,{variant:e?`success`:`default`,className:G,children:e?t(`integrationHub.addonControls.enabled`,`Enabled`):t(`integrationHub.addonControls.disabled`,`Disabled`)})}function q({capName:t,addonId:n,isActive:i}){let{t:a}=j(),o=c(),s=te({onSuccess:()=>{for(let e of W)o.invalidateQueries({queryKey:e})}}),l=s.isPending;return e(T,{size:`sm`,variant:i?`secondary`:`primary`,disabled:l,onClick:()=>s.mutate({capName:t,addonId:n,enabled:!i}),children:[l?r(v,{className:`h-3 w-3 animate-spin`}):r(i?h:g,{className:`h-3 w-3`}),i?a(`common.disable`,`Disable`):a(`common.enable`,`Enable`)]})}function ie({addonId:e,displayName:t}){let{t:n}=j(),i=c(),a=w({onSuccess:()=>{for(let e of W)i.invalidateQueries({queryKey:e})}});return r(D,{label:n(`integrationHub.addonControls.restart`,`Restart`),icon:b,size:`sm`,title:n(`integrationHub.addonControls.restart2`,`Restart "{{displayName}}"?`,{displayName:t}),description:n(`integrationHub.addonControls.restartingTheAddonBouncesIts`,`Restarting the addon bounces its subprocess — the provider will briefly drop and reconnect automatically.`),confirmLabel:n(`integrationHub.addonControls.restart`,`Restart`),triggerVariant:`ghost`,confirmVariant:`danger`,disabled:a.isPending,action:()=>a.mutateAsync({addonId:e})})}o();var J=600,Y=s(null);function X({id:n,title:i,icon:a,actions:o,framed:s=!1,children:c}){let{t:d}=j(),f=u(Y),p=t(null),h=`integration-section-${n}`;ae(p,f,n);let g=e(l,{children:[f===null?null:r(N,{to:f.sectionHref(n),"aria-label":d(`integrationHub.integrationSection.linkTo`,`Link to {{title}}`,{title:i}),title:d(`integrationHub.integrationSection.linkTo`,`Link to {{title}}`,{title:i}),className:`rounded p-0.5 text-foreground-subtle/60 hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/40`,children:r(y,{className:`h-3 w-3`,"aria-hidden":!0})}),o]});return s?r(`div`,{ref:p,className:`scroll-mt-4`,children:r(ne,{headingId:h,title:i,icon:a,actions:g,children:c})}):e(`section`,{ref:p,"aria-labelledby":h,className:`scroll-mt-4 space-y-2`,children:[e(`header`,{className:`flex min-h-7 flex-wrap items-center gap-2 px-0.5`,children:[a!==void 0&&r(a,{className:`h-3.5 w-3.5 shrink-0 text-foreground-subtle`,"aria-hidden":!0}),r(`h2`,{id:h,className:`${m} min-w-0 flex-1`,children:i}),g]}),c]})}function ae(e,t,n){let r=t?.requestedSection===n,a=t?.integrationId;i(()=>{if(!r)return;let t=()=>e.current?.scrollIntoView?.({block:`start`});t();let n=!1,i=()=>{n=!0},a=[`wheel`,`touchmove`,`keydown`];for(let e of a)window.addEventListener(e,i,{once:!0,passive:!0});let o=window.setTimeout(()=>{n||t()},J);return()=>{window.clearTimeout(o);for(let e of a)window.removeEventListener(e,i)}},[r,a,e])}o();var Z=`max-h-72`;function oe({addonId:t,displayName:n,capName:i,isActive:a,badges:o,primaryAction:s,error:c=null,lead:l,panels:u=[],settingsContent:d}){let{t:f}=j(),p=u.filter(e=>e.placement!==`end`),m=u.filter(e=>e.placement===`end`);return e(`div`,{className:`flex flex-col gap-4`,children:[r(se,{addonId:t,displayName:n,capName:i,isActive:a,badges:o,primaryAction:s}),c!==null&&r(ee,{message:c}),l,r(Q,{panels:p}),r(X,{id:re,title:f(`integrationHub.addonIntegrationBody.settings`,`Settings`),icon:S,children:d===void 0?r(V,{nodeId:`hub`,addonIds:[t],level:`global`,capability:i}):d}),r(le,{addonId:t}),r(Q,{panels:m})]})}function Q({panels:e}){return r(l,{children:e.map(e=>r(X,{id:e.id,title:e.title,icon:e.icon,children:e.content},e.id))})}function se({addonId:t,displayName:n,capName:i,isActive:a,badges:o,primaryAction:s}){return e(`div`,{className:`flex flex-wrap items-center justify-between gap-2 rounded-lg border border-border bg-surface px-2 py-1.5 sm:px-3`,"data-testid":`integration-status-strip`,children:[e(`div`,{className:`flex min-w-0 flex-wrap items-center gap-1.5`,children:[r(K,{isActive:a}),o,r(`span`,{className:`break-all font-mono text-[11px] text-foreground-subtle`,children:t})]}),e(`div`,{className:`flex flex-wrap items-center justify-end gap-1`,children:[s,r(q,{capName:i,addonId:t,isActive:a}),r(ie,{addonId:t,displayName:n})]})]})}var ce=[{kind:`logs`,labelKey:`common.logs`,icon:_},{kind:`events`,labelKey:`common.events`,icon:p}];function le({addonId:t}){let{t:n}=j(),[i,o]=a(`logs`);return r(X,{id:I,title:n(`integrationHub.addonIntegrationBody.activity`,`Activity`),framed:!0,actions:r(`div`,{role:`group`,"aria-label":n(`integrationHub.addonIntegrationBody.activityStream`,`Activity stream`),className:`flex items-center gap-1`,children:ce.map(({kind:t,labelKey:a,icon:s})=>e(`button`,{type:`button`,"aria-pressed":i===t,onClick:()=>o(t),className:`inline-flex items-center gap-1 rounded px-2 py-0.5 text-[11px] font-medium transition-colors ${i===t?`bg-primary/10 text-primary`:`text-foreground-subtle hover:bg-surface-hover hover:text-foreground`}`,children:[r(s,{className:`h-3 w-3`,"aria-hidden":!0}),n(a)]},t))}),children:i===`logs`?r(k,{addonId:t,maxHeight:Z,showFilters:!1}):r(E,{addonId:t,category:`addon.*`,maxHeight:Z})})}var ue=`inline-flex min-w-0 max-w-full items-center gap-1.5 rounded-full border py-1 pl-1 pr-2.5 text-xs transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/40`,de=`border-primary bg-primary/10 text-primary font-medium`,fe=`border-border bg-surface text-foreground-subtle hover:bg-surface-hover hover:text-foreground`,pe={ok:`bg-success`,off:`bg-foreground-subtle/60`,error:`bg-danger`,unknown:`border border-foreground-subtle bg-transparent`};function $({label:t,groups:n,selectedId:i,hrefFor:a}){let o=n.length>1;return r(`nav`,{"aria-label":t,className:o?`flex flex-col gap-2 sm:grid sm:grid-cols-[max-content_minmax(0,1fr)] sm:items-start sm:gap-x-3`:`flex flex-col`,children:n.map(t=>e(`div`,{role:`group`,"aria-label":t.label,className:o?`flex min-w-0 flex-col gap-1 sm:col-span-2 sm:grid sm:grid-cols-subgrid sm:items-start`:`min-w-0`,children:[o&&r(`span`,{className:`text-[10px] font-semibold uppercase tracking-wider text-foreground-subtle sm:pt-2`,children:t.label}),e(`div`,{className:`flex min-w-0 flex-wrap items-center gap-1.5`,children:[t.entries.map(e=>r(me,{entry:e,current:e.id===i,href:a(e.id)},e.id)),t.install&&e(N,{to:x(t.install.capability),className:`inline-flex min-w-0 max-w-full items-center gap-1.5 rounded-full border py-1 pl-1 pr-2.5 text-xs transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/40 border-dashed border-border pl-2 text-foreground-subtle hover:border-primary/50 hover:text-foreground`,children:[r(d,{className:`h-3.5 w-3.5 shrink-0`,"aria-hidden":!0}),r(`span`,{className:`truncate`,children:t.install.label})]})]})]},t.id))})}function me({entry:t,current:n,href:i}){let a=t.state===`ok`;return e(N,{to:i,"aria-current":n?`true`:void 0,className:`${ue} ${n?de:fe}`,"data-testid":`integration-pill-${t.id}`,children:[r(H,{addonId:t.id,fallback:t.fallbackIcon,tileClassName:``,size:`sm`}),r(`span`,{className:`truncate`,children:t.name}),t.showState!==!1&&r(he,{entry:t,quiet:a})]})}function he({entry:t,quiet:n}){return e(l,{children:[r(`span`,{className:`h-1.5 w-1.5 shrink-0 rounded-full ${pe[t.state]}`,"aria-hidden":!0}),r(`span`,{className:n?`sr-only`:`shrink-0 text-[10px] font-normal text-foreground-subtle`,children:t.stateLabel})]})}o();function ge({icon:t,title:i,subtitle:a,groups:o,isLoading:s,emptyTitle:c,emptyDescription:u,legacyGroupParam:d,trailing:f,embedded:p=!1}){let{t:m}=j(),h=n(()=>o.flatMap(e=>e.entries),[o]),g=n(()=>h.map(e=>e.id),[h]),_=n(()=>{let e={};for(let t of o){let n=t.entries[0];n!==void 0&&(e[t.id]=n.id)}return e},[o]),v=U({ids:g,answered:!s,legacyGroupParam:d??null,groupFirst:_}),y=h.find(e=>e.id===v.selectedId)??null,b=n(()=>y===null?null:{integrationId:y.id,requestedSection:v.requestedSection,sectionHref:e=>v.hrefFor(y.id,e)},[y,v]),x=s?null:r($,{label:m(`integrationHub.integrationHub.integrations`,`{{title}} integrations`,{title:i}),groups:o,selectedId:v.selectedId,hrefFor:e=>v.hrefFor(e)}),S=s?r(A,{children:r(`div`,{className:`p-6 text-sm text-foreground-subtle`,children:m(`common.loading`,`Loading…`)})}):e(l,{children:[v.staleId!==null&&r(ve,{staleId:v.staleId,shownName:y?.name??null}),y!==null&&b!==null?r(Y.Provider,{value:b,children:r(`div`,{role:`region`,"aria-label":y.name,"data-testid":`integration-body`,children:y.render()},y.id)}):r(_e,{groups:o,title:c,description:u}),f]});return p?e(`div`,{className:`space-y-3`,"data-testid":`integration-hub-embedded`,children:[x,S]}):r(B,{icon:t,title:i,subtitle:a,nav:x,children:S})}function _e({groups:t,title:n,description:i}){let a=t.find(e=>e.install!==void 0)?.install;return r(A,{children:r(C,{title:n,description:i,action:a?r(N,{to:x(a.capability),children:e(T,{variant:`primary`,size:`sm`,children:[r(d,{className:`mr-1 h-3.5 w-3.5`}),a.label]})}):void 0})})}function ve({staleId:t,shownName:n}){let{t:i}=j();return e(`div`,{role:`status`,className:`flex items-start gap-2 rounded-md border border-warning/30 bg-warning/5 px-3 py-2 text-[11px] text-foreground-subtle`,children:[r(f,{className:`mt-0.5 h-3.5 w-3.5 shrink-0 text-warning`,"aria-hidden":!0}),e(`span`,{children:[r(z,{i18nKey:`integrationHub.staleIntegration.notice`,values:{id:t},components:{mono:r(`span`,{className:`font-mono text-foreground`})}}),n!==null&&e(l,{children:[` `,r(z,{i18nKey:`integrationHub.staleIntegration.showing`,values:{name:n},components:{b:r(`span`,{className:`font-medium text-foreground`})}})]})]})]})}export{U as i,oe as n,G as r,ge as t};
@@ -1 +0,0 @@
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{An as f,In as p,Lt as m,Sn as h,ht as g,kn as _,ot as v,rr as y,sr as b,un as x}from"./player-overlays-nQJCQERn.js";import{$r as S,$t as ee,Hi as C}from"./client-CdHPjeIs.js";import{h as w,s as T}from"./video-DEeXGFHo.js";import{t as E}from"./log-in-YSzSSnpb.js";import{t as D}from"./monitor-smartphone-BYEnK_6t.js";import{t as te}from"./recycle-CWMxz1Q3.js";import{Ai as O,Ca as k,Cn as ne,Er as A,Ka as j,Ot as M,Qr as N,Ta as P,Ul as re,ba as F,ei as I,ht as ie,kr as ae,kt as L,pt as oe,si as R,sr as se,ut as z,xa as B,ya as V}from"./src-DVuhwnP3.js";import{t as H}from"./i18n-CbVhWDGQ.js";import{t as U}from"./useTranslation-BJr-n0es.js";import{S as W,g as G,gr as ce,i as K,mr as q}from"./index-CizVDZHi.js";import{t as J}from"./AdminSectionedPage-DJf3yj1e.js";import{i as le,n as Y,r as X,t as Z}from"./BrokerEditorDialog-B4IYR2V5.js";import{t as ue}from"./NodeAddonsSettingsPanel-SKEgEbfP.js";import{n as de,r as Q,t as fe}from"./IntegrationHub-HoJLco7C.js";c();var pe={connected:`success`,connecting:`warning`,disconnected:`default`,"auth-failed":`danger`,unreachable:`danger`,error:`danger`};function me({status:e}){return i(R,{variant:pe[e],className:`text-[10px]`,children:e})}function he({broker:t,interactiveConnectPath:n,interactiveDisconnectPath:r,kindLabel:a,onEdit:s}){let{t:c}=U(),u=l(),d=N(),[f,h]=o(null),_=P({onSuccess:e=>h(e.ok?{ok:!0}:{ok:!1,error:e.error}),onError:e=>h({ok:!1,error:e instanceof Error?e.message:String(e)})}),v=k({onSuccess:()=>{u.invalidateQueries({queryKey:[[`broker`,`list`]]})}}),y=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})},x=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(me,{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:[x&&e(I,{variant:`primary`,size:`sm`,onClick:()=>{G(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(I,{variant:`outline`,size:`sm`,onClick:()=>{G(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(I,{variant:`outline`,size:`sm`,onClick:()=>_.mutate({id:t.id,addonId:t.addonId}),disabled:_.isPending,title:c(`brokers.brokerManager.testConnection`,`Test connection`),children:[_.isPending?i(b,{className:`h-3 w-3 animate-spin`}):i(g,{className:`h-3 w-3`}),c(`brokers.brokerManager.test`,`Test`)]}),e(I,{variant:`outline`,size:`sm`,onClick:()=>s(t),title:c(`common.edit`,`Edit`),children:[i(p,{className:`h-3 w-3`}),` `,c(`common.edit`)]}),e(I,{variant:`outline`,size:`sm`,className:`border-danger/40 text-danger hover:bg-danger/10`,onClick:()=>{y()},disabled:v.isPending,title:c(`common.delete`,`Delete`),children:[v.isPending?i(b,{className:`h-3 w-3 animate-spin`}):i(m,{className:`h-3 w-3`}),c(`common.delete`,`Delete`)]})]})})]})}function ge({addonId:t}={}){let{t:r}=U(),a=F({}),s=n(()=>Y(a.data).filter(e=>t===void 0||e.addonId===t),[a.data,t]),[c,l]=o(!1),[u,d]=o(null),{options:p}=le(t===void 0?{}:{addonId:t}),m=n(()=>new Map(p.map(e=>[e.kind,e.label])),[p]),h=n(()=>{let e=new Map;for(let t of p)e.has(t.kind)||e.set(t.kind,{...t.interactiveConnectPath===void 0?{}:{connect:t.interactiveConnectPath},...t.interactiveDisconnectPath===void 0?{}:{disconnect:t.interactiveDisconnectPath}});return e},[p]);return e(`div`,{className:`space-y-3`,children:[i(`div`,{className:`flex items-center justify-end`,children:e(I,{variant:`primary`,size:`sm`,onClick:()=>l(!0),disabled:p.length===0,title:p.length===0?r(`brokers.brokerManager.noBrokerProvidersAvailable`,`No broker providers available`):void 0,children:[i(f,{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(b,{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(he,{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(Z,{...t===void 0?{}:{addonId:t},onClose:()=>l(!1),onSaved:()=>l(!1)}),u&&i(Z,{broker:u,onClose:()=>d(null),onSaved:()=>d(null)})]})}c();function _e({addonId:e,fallback:t}){let{t:n}=U(),r=re({});if(r.isPending)return i(`div`,{className:`flex justify-center py-8`,children:i(b,{className:`size-6 animate-spin text-muted-foreground`})});if(r.isError)return i(A,{message:n(`brokers.brokerRecordEntriesPanel.loadKindsFailed`,`Could not load entry kinds`)});let a=r.data.kinds.find(t=>t.owner===e&&t.kind===`brokers`);return a===void 0?t:i(ve,{addonId:e,kind:a})}function ve({addonId:t,kind:r}){let{t:a}=U(),o=l(),s=F({}),c=B(),u=n(()=>{let e=new Map;for(let n of Y(s.data))n.addonId===t&&e.set(n.id,n);return e},[s.data,t]),f=n(()=>{let e=new Map;for(let t of X(c.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},[c.data]),p=()=>{o.invalidateQueries({queryKey:[[`broker`]]}),o.invalidateQueries({queryKey:[[`recordEntries`]]})};return i(z,{kind:r,extraColumns:n(()=>[{key:`status`,header:a(`brokers.brokerManager.status`,`Status`),nowrap:!0,width:`w-px`,render:e=>{let t=u.get(e.id);return t===void 0?null:i(me,{status:t.status})}}],[u,a]),rowActions:t=>{let n=u.get(t.id);if(n===void 0)return null;let r=f.get(`${n.addonId}::${n.kind}`);if(r===void 0)return null;let o=n.status===`connected`;return e(d,{children:[r.connect!==void 0&&!o&&e(I,{variant:`primary`,size:`sm`,"aria-label":a(`brokers.brokerManager.signIn`),onClick:()=>G(r.connect??``,n.id,p),title:a(`brokers.brokerManager.signInOpensAPopup`,`Sign in — opens a popup that closes when done`),children:[i(E,{className:`h-3 w-3`}),i(`span`,{className:`hidden sm:inline`,children:a(`brokers.brokerManager.signIn`)})]}),r.disconnect!==void 0&&o&&e(I,{variant:`outline`,size:`sm`,"aria-label":a(`brokers.brokerManager.signOut`),onClick:()=>G(r.disconnect??``,n.id,p),title:a(`brokers.brokerManager.signOutClearsTheLinked`,`Sign out — clears the linked Google account on this broker`),children:[i(T,{className:`h-3 w-3`}),i(`span`,{className:`hidden sm:inline`,children:a(`brokers.brokerManager.signOut`)})]})]})},showUpdated:!1,minWidthPx:340})}function ye(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(ye).filter(e=>e!==null);return{addonId:n.id,displayName:n.packageDisplayName??n.name??n.id,capNames:r,processState:t?.process?.state??null}}function xe(e,t){return Object.entries(e).filter(([,e])=>e===t).map(([e])=>e)}function Se(e,t){return t.find(t=>e.capNames.includes(t))??null}function Ce(e){switch(e){case`running`:return{state:`ok`,label:H.t(`helpers.connectivityModel.running`)};case`crashed`:case`failed`:return{state:`error`,label:e};case`stopped`:case`disabled`:return{state:`off`,label:H.t(`helpers.connectivityModel.stopped`)};default:return{state:`unknown`,label:e??H.t(`common.unknownWord`)}}}c();var we=[`wasteCollections`,`listSources`],Te=[`wasteCollections`,`listCountries`];function Ee(e){return e instanceof Error?e.message:String(e)}function De(e){return typeof e!=`object`||!e?!1:Array.isArray(Reflect.get(e,`sections`))}function Oe(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 ke(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 Ae(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 je(e,t,n){return{sections:[{id:`picker`,title:H.t(`system.wasteSettingsSources.countryService`,`Country & service`),columns:2,fields:[{type:`select`,key:`countryId`,label:H.t(`system.wasteSettingsSources.country`,`Country`),options:[{value:``,label:H.t(`system.wasteSettingsSources.selectCountry`,`Select country…`)},...e.map(e=>({value:e.id,label:e.label}))]},{type:`select`,key:`serviceId`,label:H.t(`system.wasteSettingsSources.service`,`Service`),options:[{value:``,label:n===``?H.t(`system.wasteSettingsSources.pickACountryFirst`,`Pick a country first`):H.t(`system.wasteSettingsSources.selectService`,`Select service…`)},...t.map(e=>({value:e.id,label:e.label}))]}]}]}}function Me({addonId:c,capName:p}){let{t:h}=U(),g=v(),_=l(),y=N(),b=oe({editKey:`wasteEdit`,newKey:`wasteNew`}),[x,S]=o(!1),[ee,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]),M=s({queryKey:[...we,c],queryFn:async()=>Oe(await j(`listSources`,{}))}),P=s({queryKey:[...Te,c],queryFn:async()=>ke(await j(`listCountries`,{}))}),re=s({queryKey:[`wasteCollections`,`listServices`,c,k],enabled:k!==``,queryFn:async()=>Ae(await j(`listServices`,{countryId:k}))}),F=s({queryKey:[`wasteCollections`,`serviceFormSchema`,c,A],enabled:A!==``,queryFn:async()=>j(`serviceFormSchema`,{serviceId:A})}),L=M.data??[],z=P.data??[],B=re.data??[],V=De(F.data)?F.data:void 0,H=n(()=>je(z,k===``?[]:B,k),[z,B,k]),W=b.state,G=W.mode===`edit`?L.find(e=>e.id===W.id)??null:null;a(()=>{if(b.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(b.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,b.state]),a(()=>{if(b.state.mode!==`new`||A===``)return;let e=B.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}})},[b.state.mode,A,B]);let ce=r(e=>{T(t=>{let n=typeof e.countryId==`string`?e.countryId:``;return n===(typeof t.countryId==`string`?t.countryId:``)?e:{countryId:n,serviceId:``}})},[]),K=r(async()=>{await _.invalidateQueries({queryKey:we})},[_]),q=u({mutationFn:async e=>j(`deleteSource`,{id:e}),onSuccess:async()=>K()}),J=r(async e=>{await y({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 q.mutateAsync(e.id),b.state.mode===`edit`&&b.state.id===e.id&&(b.close(),O.current=null))},[y,q,b,h]),le=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=b.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 K(),b.close(),O.current=null}catch(e){C(Ee(e))}finally{S(!1)}},[j,G,b,E,K,A]),Y=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(R,{variant:e.enabled?`success`:`default`,children:e.enabled?h(`system.wasteSettingsSources.on`,`On`):h(`system.wasteSettingsSources.off`,`Off`)})},{key:`actions`,header:``,notSortableReason:`actions`,render:e=>i(I,{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(),J(e)},children:i(m,{className:`h-3.5 w-3.5 text-danger`})})}],[J,h]),X=b.state.mode===`new`,Z=X||G!==null,de=`${A}:${X?`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(I,{type:`button`,size:`sm`,"data-testid":`waste-sources-add`,onClick:()=>b.openNew(),children:[i(f,{className:`h-3.5 w-3.5`}),h(`system.wasteSettingsSources.addSource`,`Add source`)]})]}),M.isError?i(`p`,{className:`text-sm text-danger`,children:h(`system.wasteSettingsSources.couldNotLoadSources`,`Could not load sources.`)}):null,M.isPending?i(ae,{className:`h-32 w-full`}):i(ne,{columns:Y,rows:L,rowKey:e=>e.id,pageSize:25,emptyMessage:h(`system.wasteSettingsSources.noWasteSourcesYetAdd`,`No waste sources yet. Add one to register a municipal service.`),onRowClick:e=>b.openEdit(e.id),defaultSort:{columnKey:`label`,dir:`asc`}}),i(ie,{open:Z,onClose:()=>{b.close(),C(null),O.current=null},title:X?h(`system.wasteSettingsSources.addWasteSource`,`Add waste source`):h(`system.wasteSettingsSources.edit`,`Edit {{value1}}`,{value1:G?.label??`source`}),icon:te,width:`xl`,testId:`waste-source-editor`,error:ee,footer:i(I,{type:`button`,size:`sm`,disabled:x||A===``,onClick:()=>void le(),children:x?h(`system.wasteSettingsSources.saving`,`Saving…`):h(`common.save`,`Save`)}),children:Z?e(d,{children:[i(`div`,{"data-testid":`waste-country-service`,children:i(se,{schema:H,values:w,onChange:ce},`picker:${k}:${B.length}`)}),A!==``&&V!==void 0?i(se,{schema:V,values:E,onChange:D,bare:!0},de):A!==``&&F.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(ue,{nodeId:`hub`,addonIds:[c],level:`global`,capability:p,hideSectionChrome:!0})]})}c();var $=1e4,Ne={"device-export":`exporters`,exporters:`exporters`,email:`email`,broker:`brokers`,brokers:`brokers`,"message-brokers":`brokers`,calendar:`calendars`,calendars:`calendars`,"calendar-source":`calendars`},Pe=[{sectionId:`exporters`,kind:`device-export`,labelKey:`system.connectivity.exporters`,icon:x,installLabelKey:`system.connectivity.exportersInstall`,emptyTitleKey:`system.connectivity.exportersEmptyTitle`,emptyDescriptionKey:`system.connectivity.exportersEmptyDescription`},{sectionId:`email`,kind:`email`,labelKey:`system.connectivity.email`,icon:y,installLabelKey:`system.connectivity.emailInstall`,emptyTitleKey:`system.connectivity.emailEmptyTitle`,emptyDescriptionKey:`system.connectivity.emailEmptyDescription`},{sectionId:`brokers`,kind:`broker`,labelKey:`system.connectivity.brokers`,icon:h,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 Fe(t,n,r,a){let o=xe(ee,t.kind),s=n.flatMap(n=>{let a=Se(n,o);if(a===null)return[];let s=Ce(n.processState);return[{id:n.addonId,name:n.displayName,fallbackIcon:t.icon,state:s.state,stateLabel:s.label,render:()=>i(de,{addonId:n.addonId,displayName:n.displayName,capName:a,isActive:n.processState===`running`,badges:e(d,{children:[i(ze,{processState:n.processState}),i(Be,{kind:t.kind,addonId:n.addonId})]}),lead:t.kind===`device-export`?i(L,{addonId:n.addonId}):void 0,panels:Re(t.kind,n.addonId,e=>r(`/devices/${e}`)),settingsContent:n.addonId===`waste-collections`?i(Me,{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 Ie({descriptor:e,rows:t,isLoading:r}){let{t:a}=U(),o=q(),s=n(()=>Fe(e,t,o,a),[e,t,o,a]);return i(fe,{embedded:!0,icon:e.icon,title:a(e.labelKey),subtitle:null,groups:[s],isLoading:r,emptyTitle:a(e.emptyTitleKey),emptyDescription:a(e.emptyDescriptionKey)})}function Le(){let{t:e}=U(),t=O(void 0,{refetchInterval:$}),[r,o]=ce(),s=W(`/system/integrations`,{t:e,isAdmin:!0})??{icon:_,title:e(`admin.system.integrations.connectivity`,`Connectivity`)};a(()=>{let e=r.get(`tab`);if(e===null)return;let t=Ne[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(be).filter(e=>e!==null),[t.data]),l=n(()=>Pe.map(n=>({id:n.sectionId,label:e(n.labelKey),ownedParams:K,content:i(Ie,{descriptor:n,rows:c,isLoading:t.isLoading})})),[t.isLoading,c,e]);return i(J,{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 Re(e,t,n){return e===`device-export`?[{id:`devices`,title:H.t(`admin.system.integrations.devices`,`Devices`),icon:D,placement:`end`,content:i(M,{addonId:t,onOpenDevice:n,showSetup:!1})}]:e===`broker`?[{id:`connections`,title:H.t(`admin.system.integrations.connections`,`Connections`),icon:h,content:i(_e,{addonId:t,fallback:i(ge,{addonId:t})})}]:[]}function ze({processState:e}){let{state:t,label:n}=Ce(e);return i(R,{variant:t===`ok`?`success`:t===`error`?`danger`:`default`,className:`${Q} capitalize`,children:n})}function Be({kind:e,addonId:t}){return e===`broker`?i(Ve,{addonId:t}):e===`device-export`?i(He,{addonId:t}):null}function Ve({addonId:e}){let{t}=U(),{data:n}=V({addonId:e},{refetchInterval:$,retry:!1}),r=C.safeParse(n);if(!r.success)return null;let{brokerCount:a,connectedCount:o}=r.data;return i(R,{variant:`info`,className:Q,children:o>0?t(`system.connectivity.connectionsConnected`,{count:a,connected:o}):t(`system.connectivity.connections`,{count:a})})}function He({addonId:e}){let{t}=U(),{data:n}=j({addonId:e},{refetchInterval:$,retry:!1}),r=S.safeParse(n);if(!r.success)return null;let{linkState:a,exposedDeviceCount:o}=r.data;return i(R,{variant:a===`linked`?`success`:a===`error`?`danger`:`default`,className:Q,children:t(`admin.system.integrations.exposed`,`{{linkState}} · {{exposedDeviceCount}} exposed`,{linkState:a,exposedDeviceCount:o})})}export{Le as IntegrationsPage};
@@ -1 +0,0 @@
1
- import{C as e,J as t,K as n,R as r,S as i,V as a,Y as o,et as s,o as c,x as l}from"./_virtual_mf___mfe_internal__admin_ui_host__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-CEyXHAdg.js";import{An as u,Ci as d,Oi as f,Si as p,bi as m,dn as h,dt as g,kn as _,ot as v,pn as y,pr as ee,sr as b,wn as x,xn as te}from"./player-overlays-nQJCQERn.js";import{t as ne}from"./table-2-Cukv2oib.js";import{$a as re,At as S,Er as C,F as ie,Nt as ae,So as oe,_i as se,at as w,bs as ce,dd as T,do as E,ei as D,fd as O,hs as le,jt as ue,r as k,vs as A,yd as j}from"./src-DVuhwnP3.js";import{t as M}from"./i18n-CbVhWDGQ.js";import{t as N}from"./useTranslation-BJr-n0es.js";import{cr as P,gr as F,mr as de,pr as fe}from"./index-CizVDZHi.js";import{t as I}from"./AdminPage-Bm98o4hS.js";import"./useEventInvalidation-Di8k2vXt.js";import{t as L}from"./device-integration-icon-CL_G93QX.js";import{i as pe,n as me,r as R,t as he}from"./ScanNetworkModal-DzV87kuW.js";s();function ge({rows:t,isExpanded:r,onToggleExpand:a,onOpen:s,renderExpanded:c,searchPlaceholder:l,emptyLabel:u}){let[d,f]=o(``),p=n(()=>{let e=d.trim().toLowerCase();return e.length===0?t:t.filter(t=>`${t.name} ${t.addonId}`.toLowerCase().includes(e))},[d,t]);return e(`div`,{className:`space-y-3`,children:[e(`div`,{className:`relative`,children:[i(y,{className:`pointer-events-none absolute left-2.5 top-1/2 h-3.5 w-3.5 -translate-y-1/2 text-foreground-subtle`,"aria-hidden":!0}),i(T,{type:`search`,value:d,onChange:e=>f(e.target.value),placeholder:l,"aria-label":l,className:`pl-8`})]}),p.length===0?i(`p`,{className:`py-8 text-center text-xs text-foreground-subtle`,children:u}):i(`div`,{className:`grid grid-cols-1 gap-2 sm:grid-cols-2 sm:gap-3 lg:grid-cols-3`,children:p.map(e=>i(_e,{integration:e,expanded:r(e),onToggleExpand:a,onOpen:s,renderExpanded:c},e.id))})]})}function _e({integration:t,expanded:n,onToggleExpand:r,onOpen:a,renderExpanded:o}){return e(`article`,{"data-testid":`integration-card-${t.id}`,className:j(`flex min-w-0 flex-col gap-2 overflow-x-clip rounded-lg border border-border bg-surface p-3`,n&&`sm:col-span-2 lg:col-span-3`),children:[i(ve,{integration:t,expanded:n,onToggleExpand:r,onOpen:a}),n?i(`div`,{className:`min-w-0`,children:o(t)}):null]})}function ve({integration:t,expanded:n,onToggleExpand:r,onOpen:a}){let{t:o}=N(),s=n?o(`integrations.integrationColumns.collapse`,`Collapse`):o(`integrations.integrationColumns.expand`,`Expand`);return e(`div`,{className:`relative flex min-w-0 items-stretch gap-3`,children:[i(D,{type:`button`,variant:`ghost`,"aria-label":o(`integrations.openNamed`,{name:t.name,defaultValue:`Open {{name}}`}),onClick:()=>a(t),className:`absolute inset-0 z-0 h-auto w-auto rounded-lg p-0 focus-visible:ring-2 focus-visible:ring-primary`}),i(z,{integration:t}),e(`div`,{className:`pointer-events-none relative z-10 flex min-w-0 flex-1 flex-col items-start gap-1.5`,children:[i(w,{status:t.status,className:`shrink-0`}),i(`p`,{className:`text-[11px] text-foreground-muted`,children:o(`integrations.integrationColumns.deviceCount`,{count:t.deviceCount})}),i(`div`,{className:`pointer-events-auto mt-auto self-end`,children:i(O,{type:`button`,variant:`ghost`,size:`sm`,icon:n?p:m,"aria-label":s,"aria-expanded":n,onClick:e=>V(e,t.addonId,r)})})]})]})}function z({integration:t}){return e(`div`,{className:`pointer-events-none relative z-10 flex w-28 shrink-0 flex-col items-center gap-1 lg:w-24`,children:[i(P,{type:t.addonId,size:`xl`}),i(`p`,{className:`w-full text-center text-xs font-semibold text-foreground`,children:t.name}),i(B,{addonId:t.addonId})]})}function B({addonId:t}){return i(`p`,{className:`w-full text-center text-[10px] leading-tight text-foreground-subtle`,children:t.split(`-`).map((t,n)=>e(`span`,{children:[n>0?e(l,{children:[`-`,i(`wbr`,{})]}):null,t]},`${t}-${String(n)}`))})}function V(e,t,n){e.stopPropagation(),n(t)}s();var H=`camstack.admin.integrations.view`;function U(e){return e===`table`||e===`grid`}function W(){try{return typeof window>`u`?null:window.localStorage}catch{return null}}function G(e=W()){if(e===null)return`table`;try{let t=e.getItem(H);return U(t)?t:`table`}catch{return`table`}}function K(e,t=W()){if(t!==null)try{t.setItem(H,e)}catch{}}function ye(){let[e,t]=o(()=>G());return[e,r(e=>{t(e),K(e)},[])]}s();function q(e=!0){a(()=>{if(!e)return;let t=document.body.style.overflow;return document.body.style.overflow=`hidden`,()=>{document.body.style.overflow=t}},[e])}s();function be(e,t){let[n,r]=o(!1);return a(()=>{if(!e){r(!1);return}r(!1);let n=setTimeout(()=>r(!0),t);return()=>clearTimeout(n)},[e,t]),n}s();function xe({providerId:t,onImport:n,onSkip:r}){let{t:s}=N(),[c,l]=o(new Set),u=E(),p=u.data,m=u.isPending||!u.data&&!u.isError;a(()=>{t&&(u.isPending||u.data||u.mutate({addonId:t}))},[t,u]);function h(e){l(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})}if(m)return e(`div`,{className:`flex flex-col items-center py-12`,children:[i(`div`,{className:`h-6 w-6 animate-spin rounded-full border-2 border-primary border-t-transparent`}),i(`p`,{className:`mt-3 text-xs text-foreground-subtle`,children:s(`integrations.searchingDevices`)})]});let g=p??[];return e(`div`,{className:`space-y-4`,children:[i(`p`,{className:`text-xs text-foreground-subtle`,children:g.length>0?s(`integrations.foundDevices`,{count:g.length}):s(`integrations.noDevicesFound`)}),g.length>0&&i(`div`,{className:`space-y-1.5 max-h-64 overflow-y-auto`,children:g.map(t=>{let n=t.stableId,r=t.suggestedName??n,a=c.has(n),o=t.alreadyOnboarded===!0;return e(`button`,{onClick:()=>{o||h(n)},disabled:o,title:o?s(`integrations.alreadyAddedHint`,{defaultValue:`Already added as "{{name}}" — re-adding would overwrite its settings.`,name:t.onboardedName??r}):void 0,className:`flex w-full items-center gap-3 rounded-lg border p-3 text-left transition-colors ${o?`border-border bg-surface opacity-60 cursor-not-allowed`:a?`border-primary/40 bg-primary/5`:`border-border bg-surface hover:border-foreground-subtle/30`}`,children:[i(`div`,{className:`flex h-5 w-5 items-center justify-center rounded border flex-shrink-0 ${a&&!o?`border-primary bg-primary`:`border-border`}`,children:a&&!o&&i(d,{className:`h-3 w-3 text-primary-foreground`})}),i(f,{className:`h-3.5 w-3.5 text-foreground-subtle flex-shrink-0`}),i(`span`,{className:`text-xs font-medium text-foreground truncate`,children:r}),o&&i(`span`,{className:`ml-auto flex-shrink-0 rounded bg-surface-muted px-1.5 py-0.5 text-[10px] font-medium text-foreground-subtle`,children:s(`integrations.alreadyAdded`,{defaultValue:`Already added`})})]},n)})}),e(`div`,{className:`flex items-center justify-between pt-2`,children:[i(`button`,{onClick:r,className:`rounded-lg border border-border px-3 py-1.5 text-xs text-foreground-subtle hover:text-foreground transition-colors`,children:s(`integrations.skip`)}),g.length>0&&e(`button`,{onClick:()=>n(Array.from(c)),disabled:c.size===0,className:`rounded-lg bg-primary px-4 py-1.5 text-xs font-medium text-primary-foreground shadow-sm disabled:opacity-50`,children:[s(`integrations.importSelected`),` (`,c.size,`)`]})]})]})}var J=`(hover: none) and (pointer: coarse)`;function Y(){if(typeof window>`u`||typeof window.matchMedia!=`function`)return!0;try{return!window.matchMedia(J).matches}catch{return!0}}s();function X({onSelect:r,onClose:s,pendingAddonId:c=null}){let{t:l}=N(),u=de(),[d,f]=o(``),p=t(null),{data:m,isLoading:g}=A();a(()=>{g||!Y()||p.current?.focus()},[g]);let _=n(()=>{let e=m??[],t=d.trim().toLowerCase();return t.length===0?e:e.filter(e=>`${e.name} ${e.description??``} ${e.addonId}`.toLowerCase().includes(t))},[m,d]);if(g)return i(`div`,{className:`grid grid-cols-2 gap-2 p-2`,children:[1,2,3,4].map(e=>i(`div`,{className:`h-24 rounded-lg bg-surface animate-pulse`},e))});let v=c!==null;return e(`div`,{className:`space-y-3`,"data-testid":`provider-picker`,children:[e(`div`,{className:`relative`,children:[i(y,{className:`pointer-events-none absolute left-2.5 top-1/2 h-3.5 w-3.5 -translate-y-1/2 text-foreground-subtle`,"aria-hidden":!0}),i(T,{ref:p,type:`search`,value:d,onChange:e=>f(e.target.value),placeholder:l(`integrations.searchProviders`,`Search integrations…`),className:`pl-8`,"data-testid":`provider-picker-search`,"aria-label":l(`integrations.searchProviders`,`Search integrations…`)})]}),i(`div`,{className:`grid grid-cols-2 gap-2`,children:_.map(t=>{let n=t.instanceMode===`unique`&&t.existingInstances.length>0,a=c===t.addonId,o=v;return e(`button`,{type:`button`,disabled:o,"data-testid":`provider-pick-${t.addonId}`,onClick:()=>{if(!o)if(n){let e=t.existingInstances[0].id;s(),u(`/integrations/${e}`)}else r(t.addonId,t.instanceMode,t.discoveryMode,t.name,t.kind,t.brokerKind,t.mode,t.canTest)},className:`flex flex-col items-center gap-1.5 rounded-lg border border-border bg-surface px-3 py-3 text-center text-xs hover:border-primary/50 hover:bg-surface-hover transition-colors disabled:opacity-60 disabled:cursor-not-allowed disabled:hover:border-border`,children:[t.iconUrl?i(`div`,{className:`flex h-9 w-9 items-center justify-center rounded-lg flex-shrink-0`,style:{backgroundColor:`${t.color}15`},children:i(`img`,{src:t.iconUrl,alt:``,className:`h-5 w-5`})}):i(`div`,{className:`flex h-9 w-9 items-center justify-center rounded-lg flex-shrink-0`,style:{backgroundColor:`${t.color}15`},children:i(`span`,{className:`text-sm`,style:{color:t.color},children:`◉`})}),i(`p`,{className:`w-full truncate text-xs font-semibold text-foreground`,children:t.name}),t.description?i(`p`,{className:`w-full line-clamp-2 text-[10px] text-foreground-subtle`,children:t.description}):null,a?i(b,{className:`h-4 w-4 animate-spin text-primary`}):n?e(`span`,{className:`flex items-center gap-1 text-[10px] font-medium text-foreground-subtle`,children:[i(h,{className:`h-3 w-3`}),l(`integrations.manage`)]}):null]},t.addonId)})}),_.length===0&&i(`div`,{className:`py-8 text-center text-xs text-foreground-subtle`,children:(m??[]).length===0?l(`integrations.noProviders`):l(`integrations.noProvidersMatch`,`No integrations match your search.`)})]})}s();function Se(e){let t=e=>{if(e.type===`separator`||e.type===`info`||e.type===`button`)return e;if(e.type===`group`)return{...e,fields:e.fields.map(e=>t(e))};let{value:n,...r}=e;return r};return{...e.tabs?{tabs:e.tabs}:{},sections:e.sections.map(e=>({...e,fields:e.fields.map(t)}))}}var Ce=2e4;function we({open:t,onClose:r,seed:s=null}){let{t:u}=N(),d=de(),f=c(),[p,m]=o(`picker`),[h,_]=o(null),[v,y]=o(null),[ee,x]=o(`manual`),[te,ne]=o(null),[S,C]=o(``),[ie,ae]=o(null),[oe,w]=o(null),[ce,T]=o(!1),[D,O]=o({}),[ue,k]=o(``),j=s?.config.host,M=s===null?``:`${s.addonId}\0${s.name}\0${typeof j==`string`?j:``}`;t&&s!==null&&ue!==M&&(k(M),_(s.addonId),C(s.name),O({...s.config}),m(`config`));let P=A(void 0,{enabled:t&&s!==null}),{data:F}=se({addonId:h??``,nodeId:`hub`},{enabled:h!=null}),fe=n(()=>F?Se(F):null,[F]),I=le({onSuccess:()=>f.invalidateQueries({queryKey:[[`integrations`]]})}),L=E(),me=L.data;a(()=>{if(!t||s===null)return;let e=P.data?.find(e=>e.addonId===s.addonId);e&&(T(e.canTest),x(e.discoveryMode))},[t,s,P.data]),a(()=>{p!==`discovery`||!v||!h||L.isPending||L.data||L.mutate({addonId:h})},[p,v,h,L]);let he=re({onSuccess:()=>f.invalidateQueries({queryKey:[[`deviceManager`]]})});function ge(e,t,n,r,i,a,o,s){if(!I.isPending){if(_(e),T(s),x(n),C(r),w(null),o===`broker`){if(!a){w(`Addon '${e}' declares mode 'broker' but no brokerKind in its manifest`);return}ne(a),m(`broker`);return}if(o===`account`){m(`config`);return}_e(e,r)}}async function _e(e,t){try{let n=await I.mutateAsync({addonId:e,name:t,settings:{}});r(),H(),d(`/integrations/${n.id}?add=1`)}catch{}}async function ve(e){if(h)try{let t=await I.mutateAsync({addonId:h,name:e.name,settings:e.config,secretKeys:[...e.secretKeys]});y(t.id),ae(t.id),ee===`auto`||ee===`both`?m(`discovery`):V(t.id,{openAdd:!0})}catch{}}async function z(e){if(h)try{let t=await I.mutateAsync({addonId:h,name:S,settings:{brokerId:e}});ae(t.id),y(t.id),V(t.id)}catch{}}async function B(e){if(h){for(let t of e){let e=me?.find(e=>e.stableId===t);e&&await he.mutateAsync({addonId:h,candidate:e,...ie===null?{}:{integrationId:ie}})}V()}}function V(e,t){let n=e??v??h;r(),H(),n&&d(t?.openAdd===!0?`/integrations/${n}?add=1`:`/integrations/${n}`)}function H(){m(`picker`),_(null),y(null),x(`manual`),ne(null),C(``),ae(null),w(null),T(!1),O({}),k(``)}function U(){r(),H()}q(t);let W=I.isPending,G=be(W,Ce);if(!t)return null;let K={picker:u(`integrations.newIntegration`),config:u(`integrations.configureIntegration`),discovery:u(`integrations.importDevices`),broker:u(`integrations.connectBroker`,{defaultValue:`Connect a broker`})},ye=W?h:null,J=I.error,Y=W&&!G;return e(`div`,{className:`fixed inset-0 z-50 flex items-center justify-center`,children:[i(`div`,{className:`absolute inset-0 bg-black/60`,onClick:Y?void 0:U}),e(`div`,{className:`relative z-10 w-full max-w-lg max-h-[calc(85dvh-2*max(env(safe-area-inset-top),env(safe-area-inset-bottom)))] rounded-xl border border-border bg-background shadow-2xl flex flex-col overflow-hidden`,children:[e(`div`,{className:`flex items-center justify-between border-b border-border px-5 py-4 flex-shrink-0`,children:[i(`h2`,{className:`text-sm font-semibold text-foreground`,children:K[p]}),i(`button`,{onClick:U,disabled:Y,className:`rounded-md p-1 text-foreground-subtle hover:text-foreground hover:bg-surface-hover transition-colors disabled:opacity-40 disabled:cursor-not-allowed`,children:i(g,{className:`h-4 w-4`})})]}),e(`div`,{className:`px-5 py-4 flex-1 overflow-y-auto overscroll-contain`,children:[J&&!W&&i(`div`,{className:`mb-3 rounded-lg border border-destructive/40 bg-destructive/10 px-3 py-2 text-xs text-destructive`,children:J instanceof Error?J.message:String(J)}),p===`picker`&&e(l,{children:[oe&&i(`div`,{className:`mb-3 rounded-lg border border-destructive/40 bg-destructive/10 px-3 py-2 text-xs text-destructive`,children:oe}),i(X,{onSelect:ge,onClose:U,pendingAddonId:ye})]}),p===`config`&&h&&i(R,{addonId:h,configSchema:fe??null,canTest:ce,initialName:typeof D.host==`string`?S:void 0,initialConfig:{...D},onSave:ve,onBack:()=>{O({}),m(`picker`)}},M.length>0?M:h),p===`broker`&&te&&i(pe,{kind:te,onResolved:e=>{z(e)},onBack:()=>m(`picker`)}),p===`discovery`&&v&&i(xe,{providerId:v,onImport:B,onSkip:V})]}),W&&e(`div`,{className:`absolute inset-0 z-20 flex flex-col items-center justify-center gap-2 rounded-xl bg-background/85 backdrop-blur-sm px-6 text-center`,children:[i(b,{className:`h-6 w-6 animate-spin text-primary`}),i(`p`,{className:`text-xs font-medium text-foreground`,children:u(`integrations.creating`,{defaultValue:`Creating integration…`})}),!G&&i(`p`,{className:`text-[10px] text-foreground-subtle`,children:u(`integrations.creatingHint`,{defaultValue:`Waiting for the addon to restart and register`})}),G&&e(l,{children:[i(`p`,{className:`text-[10px] text-foreground-subtle max-w-xs`,children:u(`integrations.creatingOverdue`,{defaultValue:`This is taking longer than expected. The integration may already have been created — close this dialog and refresh to check.`})}),i(`button`,{onClick:U,className:`mt-1 rounded-md border border-border bg-surface px-3 py-1.5 text-[11px] font-medium text-foreground hover:bg-surface-hover transition-colors`,children:u(`integrations.closeAndRefresh`,{defaultValue:`Close`})})]})]})]})]})}function Te({integration:t,expanded:n,onToggleExpand:r}){let{t:a}=N();return e(`div`,{className:`flex items-center gap-2.5`,children:[i(`button`,{type:`button`,onClick:e=>{e.stopPropagation(),r(t.addonId)},"aria-label":n?a(`integrations.integrationColumns.collapse`,`Collapse`):a(`integrations.integrationColumns.expand`,`Expand`),"aria-expanded":n,className:`flex h-5 w-5 flex-shrink-0 items-center justify-center rounded text-foreground-subtle transition-colors hover:bg-surface-hover hover:text-foreground`,children:i(n?p:m,{className:`h-3.5 w-3.5`})}),i(P,{type:t.addonId,size:`sm`}),e(`div`,{className:`flex min-w-0 flex-col`,children:[i(`span`,{className:`truncate text-xs font-semibold text-foreground`,children:t.name}),i(`span`,{className:`truncate text-[10px] text-foreground-subtle`,children:t.addonId})]})]})}function Ee(e){let{isExpanded:t,onToggleExpand:n}=e;return[{key:`name`,header:M.t(`integrations.integrationColumns.integration`,`Integration`),headerClassName:`w-[55%]`,cell:e=>i(Te,{integration:e,expanded:t(e),onToggleExpand:n})},{key:`devices`,header:M.t(`integrations.integrationColumns.devices`,`Devices`),headerClassName:`w-[15%]`,cellClassName:`text-[11px] text-foreground-subtle`,cell:e=>M.t(`integrations.integrationColumns.deviceCount`,{count:e.deviceCount})},{key:`status`,header:M.t(`integrations.integrationColumns.status`,`Status`),headerClassName:`w-[15%]`,cell:e=>i(w,{status:e.status})}]}s();function De(e){if(!e.enabled)return`disabled`;switch(e.processState){case`running`:return`running`;default:return`stopped`}}var Z=`expand`;function Oe(){let{t}=N(),s=de(),c=fe(),d=v(),[f]=F(),[p,m]=ye(),[h,g]=o(!1),[y,b]=o(null),re=r(()=>{b(null),g(!0)},[]),se=r(()=>{g(!1),b(null)},[]),w=r(e=>{E(!1),b(e),g(!0)},[]),[T,E]=o(!1);a(()=>{let e=me(c.state);e!==null&&(b(e),g(!0),s(`/integrations`,{replace:!0,state:null}))},[c.state,s]);let D=f.get(`setup`);a(()=>{D===null||D.length===0||(b({addonId:D,name:D,config:{}}),g(!0))},[D]);let O=r(()=>E(!0),[]),le=r(()=>E(!1),[]);k([`integrations`],[`integration.enabled`,`integration.disabled`,`integration.deleted`,`provider.started`,`provider.stopped`,`addon.installed`,`addon.uninstalled`,`addon.started`,`addon.stopped`,`addon.updated`]),k([`deviceManager`],[`device.registered`,`device.unregistered`,`device.online`,`device.offline`,`device.disabled`,`device.enabled`]);let{data:A,isLoading:M,isError:P,refetch:pe}=ce(void 0),{data:R,isLoading:_e,isError:ve,refetch:z}=oe({projection:`slim`}),B=n(()=>R??[],[R]),V=n(()=>A??[],[A]),H=n(()=>{let e=new Map;for(let t of B)e.set(t.id,{id:t.id,name:t.name??t.stableId??`#${String(t.id)}`});return e},[B]),U=n(()=>ue(A),[A]),W=n(()=>{let e=new Map;for(let t of ae(B)){let n=U(t);if(n.kind!==`resolved`)continue;let r=n.integration.id;e.set(r,(e.get(r)??0)+1)}return e},[B,U]),G=n(()=>V.map(e=>({id:e.id,addonId:e.addonId,name:e.name,enabled:e.enabled,status:De(e),deviceCount:W.get(e.id)??0})),[V,W]),K=f.get(Z),q=r(e=>{let t=new URLSearchParams(window.location.search);t.get(Z)===e?t.delete(Z):t.set(Z,e);let n=t.toString(),r=`${window.location.pathname}${n?`?${n}`:``}${window.location.hash}`;window.history.replaceState(window.history.state,``,r),window.dispatchEvent(new PopStateEvent(`popstate`))},[]),be=r(e=>s(`/integrations/${e.id}`),[s]),xe=r(e=>H.get(e)??null,[H]),J=r(e=>s(`/devices/${String(e)}`),[s]),Y=r(e=>i(S,{context:`integration-detail`,devices:B,trpc:d.trpcClient,integrationOf:U,forceIntegrationId:e.id,urlScope:`nested`,lsKey:`integrations:nested:${e.addonId}`,resolveIntegrationIcon:L,resolveParent:xe,onNavigate:J}),[B,d.trpcClient,U,xe,J]),X=r(e=>K===e.addonId,[K]),Se=n(()=>Ee({isExpanded:X,onToggleExpand:q}),[X,q]),Ce=r(e=>`${e.name} ${e.addonId}`,[]),Te=r(e=>e.addonId,[]),Oe=r(()=>{pe(),z()},[pe,z]),Q=P===!0||ve===!0,$=!Q&&(M||_e||A===void 0||R===void 0),ke=V.length>0,Ae=[{id:`table`,label:t(`integrations.viewTable`,`Table`),icon:ne},{id:`grid`,label:t(`integrations.viewGrid`,`Grid`),icon:ee}];return e(I,{icon:_,title:t(`nav.integrations`,`Integrations`),actions:e(l,{children:[i(ie,{ariaLabel:t(`integrations.viewLabel`,`Layout`),value:p,onChange:m,options:Ae,testId:`integrations-view`}),i(`button`,{onClick:Oe,disabled:$,className:`flex items-center gap-1 rounded-lg border border-border bg-surface px-2.5 py-1.5 text-xs font-medium text-foreground-subtle hover:text-foreground hover:bg-surface-hover transition-colors disabled:opacity-50`,title:t(`common.refresh`,`Refresh`),children:i(te,{className:j(`h-3.5 w-3.5`,$&&`animate-spin`)})}),e(`button`,{onClick:O,className:`flex items-center gap-1.5 rounded-lg border border-border bg-surface px-2.5 py-1.5 text-xs font-medium text-foreground-subtle hover:text-foreground hover:bg-surface-hover transition-colors`,title:t(`integrations.scanTheLocalNetworkFor`,`Scan the local network for devices`),children:[i(x,{className:`h-3.5 w-3.5`}),t(`integrations.scanNetwork`,`Scan network`)]}),e(`button`,{onClick:re,className:`flex items-center gap-1.5 rounded-lg bg-primary px-3 py-1.5 text-xs font-medium text-primary-foreground shadow-sm`,children:[i(u,{className:`h-3.5 w-3.5`}),t(`integrations.newIntegration`,`New Integration`)]})]}),children:[Q&&i(C,{message:t(`integrations.loadFailed`,`Integrations could not be loaded.`),onRetry:Oe}),$&&i(`div`,{className:`space-y-2`,"data-testid":`integrations-pending`,children:[1,2,3].map(e=>i(`div`,{className:`h-12 rounded-lg border border-border bg-surface animate-pulse`},e))}),!Q&&!$&&!ke&&e(`div`,{className:`flex flex-col items-center py-20 text-foreground-subtle`,children:[i(`p`,{className:`text-sm`,children:t(`integrations.noIntegrationsConfigured`,`No integrations configured.`)}),i(`p`,{className:`text-xs mt-1`,children:t(`integrations.clickNewIntegrationToConnect`,`Click "New Integration" to connect cameras and devices.`)})]}),!Q&&!$&&ke&&p===`table`&&i(S,{mode:`generic`,items:G,getKey:Te,getSearchText:Ce,columns:Se,onRowClick:be,isExpanded:X,renderExpanded:Y,searchPlaceholder:t(`integrations.search`,{defaultValue:`Search integrations…`}),emptyLabel:t(`integrations.empty`,{defaultValue:`No integrations found.`})}),!Q&&!$&&ke&&p===`grid`&&i(ge,{rows:G,isExpanded:X,onToggleExpand:q,onOpen:be,renderExpanded:Y,searchPlaceholder:t(`integrations.search`,{defaultValue:`Search integrations…`}),emptyLabel:t(`integrations.empty`,{defaultValue:`No integrations found.`})}),i(we,{open:h,onClose:se,seed:y}),i(he,{open:T,onClose:le,onSetupIntegration:w})]})}export{Oe as IntegrationsPage};