@camstack/addon-admin-ui 1.2.459 → 1.2.461

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 (152) hide show
  1. package/dist/assets/{AddonAssetIcon-BJEJ1k08.js → AddonAssetIcon-CmEqgzfX.js} +1 -1
  2. package/dist/assets/Addons-CVkkdf3V.js +4 -0
  3. package/dist/assets/{AdminPage-COkr2pSl.js → AdminPage-N36spL8r.js} +1 -1
  4. package/dist/assets/{AdminSectionedPage-DacqZ038.js → AdminSectionedPage-B4DO1cch.js} +1 -1
  5. package/dist/assets/AiProfiles-Dm1A5qaJ.js +3 -0
  6. package/dist/assets/BrokerForm-BDBUNSWe.js +1 -0
  7. package/dist/assets/Build-Btk8hgSX.js +40 -0
  8. package/dist/assets/Calendars-C4GvODYM.js +1 -0
  9. package/dist/assets/{Cluster-9x8btsN4.js → Cluster-CUaBA2On.js} +1 -1
  10. package/dist/assets/CompositionEditor-Kq2kEnnh.js +1 -0
  11. package/dist/assets/CompositionEditorPage-D89-6PCw.js +1 -0
  12. package/dist/assets/Data-B49CFnpf.js +2 -0
  13. package/dist/assets/DeviceDetail-BPyZ6uyd.js +2 -0
  14. package/dist/assets/DeviceDoActionFields-zsHf4EON.js +1 -0
  15. package/dist/assets/Devices-DHWIbLrr.js +1 -0
  16. package/dist/assets/{EmbedPlayerPage-yV8Ghwca.js → EmbedPlayerPage-C3Riyl8J.js} +1 -1
  17. package/dist/assets/History-g1qlGuSi.js +1 -0
  18. package/dist/assets/Identity-DWlP85j-.js +1 -0
  19. package/dist/assets/IntegrationDetail-y7qRdb6V.js +1 -0
  20. package/dist/assets/IntegrationHub-D4VoDe9W.js +1 -0
  21. package/dist/assets/Integrations-ByoGCmDg.js +1 -0
  22. package/dist/assets/Integrations-YNiehsXN.js +1 -0
  23. package/dist/assets/Library-BF596aV_.js +1 -0
  24. package/dist/assets/Locations-CWErnyPW.js +3 -0
  25. package/dist/assets/{Logs--6yOXDdG.js → Logs-CQcRBcxc.js} +1 -1
  26. package/dist/assets/{MaskShapeCanvas-BFRANocL.js → MaskShapeCanvas-CBe03CMO.js} +1 -1
  27. package/dist/assets/{MotionZonesSettings-DAR1lGRc.js → MotionZonesSettings-Ci1jf-Mm.js} +1 -1
  28. package/dist/assets/MyAccess-DUFCQyd0.js +2 -0
  29. package/dist/assets/Network-CfC1bac2.js +1 -0
  30. package/dist/assets/NodeAddonsSettingsPanel-CxfoWry5.js +1 -0
  31. package/dist/assets/Notifications-BqYoqEfY.js +1 -0
  32. package/dist/assets/Pipeline-D8nt-Y81.js +1 -0
  33. package/dist/assets/{PrivacyMaskSettings-CFjaiNPa.js → PrivacyMaskSettings-DSh1TEIJ.js} +1 -1
  34. package/dist/assets/Recordings-D2QgV6gh.js +1 -0
  35. package/dist/assets/ScanNetworkModal-Ba_B2lf-.js +1 -0
  36. package/dist/assets/{SceneMonitorEditor-CtObZ92A.js → SceneMonitorEditor-Dn0NH3UY.js} +1 -1
  37. package/dist/assets/SessionsList-Bik0vNoP.js +2 -0
  38. package/dist/assets/Showroom-BFwRdZBU.js +1 -0
  39. package/dist/assets/System-DSqTdlP0.js +1 -0
  40. package/dist/assets/{Terminal-CfhgVSfX.js → Terminal-DviYZMzd.js} +3 -3
  41. package/dist/assets/{Viewer-DOy7SpD5.js → Viewer-BqGWuKOT.js} +1 -1
  42. package/dist/assets/{_virtual_mf-localSharedImportMap___mfe_internal__admin_ui_host-FGBBI8DM.js → _virtual_mf-localSharedImportMap___mfe_internal__admin_ui_host-C-OpByVg.js} +1 -1
  43. package/dist/assets/{addon-icons-context-zSgVMYOT.js → addon-icons-context-Dk7L05cY.js} +1 -1
  44. package/dist/assets/{archive-CCdQLR92.js → archive-S-zO_vQF.js} +1 -1
  45. package/dist/assets/{authed-media-BnRlGkoA.js → authed-media-Cpc0v-lW.js} +1 -1
  46. package/dist/assets/{bell-off-CqtliYfE.js → bell-off-B0BNkY5Q.js} +1 -1
  47. package/dist/assets/{board-model-DcXa88Au.js → board-model-BLL_cD-z.js} +1 -1
  48. package/dist/assets/{boxes-DQn7OALq.js → boxes-B89A109J.js} +1 -1
  49. package/dist/assets/circle-slash-DtOy5nTT.js +1 -0
  50. package/dist/assets/client-B741nZQJ.js +358 -0
  51. package/dist/assets/{cloud-upload-Ds0DBFF4.js → cloud-upload-EnqEFlW5.js} +1 -1
  52. package/dist/assets/crop-BM88jjat.js +1 -0
  53. package/dist/assets/device-integration-icon-DpIPAgxb.js +1 -0
  54. package/dist/assets/device-picker-model-BIknMBUl.js +1 -0
  55. package/dist/assets/{dist-DGtsAF0e.js → dist-CnH0kuMY.js} +1 -1
  56. package/dist/assets/dist-xq0sTO1C.js +358 -0
  57. package/dist/assets/{eraser-CBhjXP5B.js → eraser-CTiJOqJH.js} +1 -1
  58. package/dist/assets/format-3n872UoD.js +1 -0
  59. package/dist/assets/{hard-drive-download-Bbqt0BU7.js → hard-drive-download-B-xmEXyG.js} +1 -1
  60. package/dist/assets/{hostInit-DYH0aGPp.js → hostInit-CGuLmCP7.js} +1 -1
  61. package/dist/assets/i18n-SRLxy4I7.js +1 -0
  62. package/dist/assets/{icons-CIAj8beD.js → icons-D1XGgPoq.js} +1 -1
  63. package/dist/assets/index-Av4-A8rY.js +4 -0
  64. package/dist/assets/index-DhkrLRVh.css +2 -0
  65. package/dist/assets/{key-BrmsyfQ2.js → key-BEqu-lXr.js} +1 -1
  66. package/dist/assets/{key-round-DupHhW0i.js → key-round-Bx5_IMpS.js} +1 -1
  67. package/dist/assets/{layers-jV4_DPMS.js → layers-Dl1ZfXjR.js} +1 -1
  68. package/dist/assets/linked-devices-model-7z16tmo3.js +1 -0
  69. package/dist/assets/{list-ordered-DOEvj-y0.js → list-ordered-Dgp6etRJ.js} +1 -1
  70. package/dist/assets/location-owned-usage-bGdU9_ER.js +1 -0
  71. package/dist/assets/{log-in-CcPfrqgr.js → log-in-D8cVgea3.js} +1 -1
  72. package/dist/assets/{memory-stick-q_w6rp-t.js → memory-stick-9OcSMd1G.js} +1 -1
  73. package/dist/assets/{message-square-plus-9n6eNHhb.js → message-square-plus-C4vA4iYJ.js} +1 -1
  74. package/dist/assets/{mf-entry-bootstrap-0-44ebd2c3.js → mf-entry-bootstrap-0-6251002a.js} +2 -2
  75. package/dist/assets/{mic-off-D8Z3zvJC.js → mic-off-3EqpKDCs.js} +1 -1
  76. package/dist/assets/{monitor-off-ChiwdYm2.js → monitor-off-BnrglR7J.js} +1 -1
  77. package/dist/assets/{monitor-smartphone-5A2YPeJg.js → monitor-smartphone-CjzyjUlp.js} +1 -1
  78. package/dist/assets/mount-BIknMBUl.js +1 -0
  79. package/dist/assets/{player-overlays-B2uKzPiF.js → player-overlays-C2qGnksg.js} +1 -1
  80. package/dist/assets/{recycle-lkNup4GK.js → recycle-tvZPZI99.js} +1 -1
  81. package/dist/assets/remoteEntry-C-4WYf0M.js +1 -0
  82. package/dist/assets/{scan-eye-CJpdZenM.js → scan-eye-6_8sPy1t.js} +1 -1
  83. package/dist/assets/{scissors-v8FUfmH0.js → scissors-BYLfeqTv.js} +1 -1
  84. package/dist/assets/{search-x-CJx173bU.js → search-x-CLjmzP4o.js} +1 -1
  85. package/dist/assets/{send-XYAWcADm.js → send-CcDHb3r4.js} +1 -1
  86. package/dist/assets/{settings-2-Bgu4fxha.js → settings-2-G-7M0you.js} +1 -1
  87. package/dist/assets/{speaker-ofUzLdUT.js → speaker-CaxICJfu.js} +1 -1
  88. package/dist/assets/src-D1steZEF.js +67 -0
  89. package/dist/assets/step-inspector-model-p9HUQGve.js +1 -0
  90. package/dist/assets/{timer-reset-D-5iU9l-.js → timer-reset-D0SmO8M1.js} +1 -1
  91. package/dist/assets/{ungroup-DD3pb37b.js → ungroup-BjWmPSAJ.js} +1 -1
  92. package/dist/assets/{unlink-xgj0DHXA.js → unlink-8CYYb6J2.js} +1 -1
  93. package/dist/assets/{usb-COQJ7FVk.js → usb-vxNmd1OO.js} +1 -1
  94. package/dist/assets/{use-scenes-feed-Cr8WJGCC.js → use-scenes-feed-BepTQeVo.js} +1 -1
  95. package/dist/assets/{use-stationary-objects-kiH5Q2gT.js → use-stationary-objects-Dnn6yNrY.js} +1 -1
  96. package/dist/assets/useEventInvalidation-BIknMBUl.js +1 -0
  97. package/dist/assets/useNodeUrlSelection-i_Uu58Pu.js +1 -0
  98. package/dist/assets/user-round-DD5YK-sO.js +1 -0
  99. package/dist/assets/{user-x-CBuwxTd8.js → user-x-_Ch_VgmF.js} +1 -1
  100. package/dist/assets/{video-CCbgIO_h.js → video-CnGFIENR.js} +1 -1
  101. package/dist/assets/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__admin_ui_host__remoteEntry-_hash_-CxTajz7L.js → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__admin_ui_host__remoteEntry-_hash_-sNr_TQNF.js} +2 -2
  102. package/dist/index.html +10 -11
  103. package/dist/server/addon.js +190 -91
  104. package/package.json +1 -1
  105. package/dist/assets/Addons-DHanUVT2.js +0 -4
  106. package/dist/assets/AiProfiles-00eup-gf.js +0 -3
  107. package/dist/assets/BrokerForm-BZXEvLK0.js +0 -1
  108. package/dist/assets/Build-C-5lgbq3.js +0 -40
  109. package/dist/assets/Calendars-BkpP1D2U.js +0 -1
  110. package/dist/assets/CompositionEditor-r0DF2l8O.js +0 -1
  111. package/dist/assets/CompositionEditorPage-ZgZUzIco.js +0 -1
  112. package/dist/assets/Data-CRUK3PE2.js +0 -2
  113. package/dist/assets/DeviceDetail-B-WDYuF4.js +0 -2
  114. package/dist/assets/DeviceDoActionFields-B6h8uYuA.js +0 -1
  115. package/dist/assets/Devices--JO66DyO.js +0 -1
  116. package/dist/assets/History-BwlSzH55.js +0 -1
  117. package/dist/assets/Identity-BWhaEMdv.js +0 -1
  118. package/dist/assets/IntegrationDetail-CQTl55bJ.js +0 -1
  119. package/dist/assets/IntegrationHub-1t9XtENg.js +0 -1
  120. package/dist/assets/Integrations-BsHioywX.js +0 -1
  121. package/dist/assets/Integrations-DAZG8yCP.js +0 -1
  122. package/dist/assets/Library-I8I-H4B0.js +0 -1
  123. package/dist/assets/Locations-DpID1z6R.js +0 -3
  124. package/dist/assets/MyAccess-BlPaAQNJ.js +0 -2
  125. package/dist/assets/Network-68PrEWb3.js +0 -1
  126. package/dist/assets/NodeAddonsSettingsPanel-BU9D0unj.js +0 -1
  127. package/dist/assets/Notifications-BHMdjbhb.js +0 -1
  128. package/dist/assets/Pipeline-BntRM_Gg.js +0 -1
  129. package/dist/assets/Recordings-B0PFCiE6.js +0 -1
  130. package/dist/assets/ScanNetworkModal-KVlo34E_.js +0 -1
  131. package/dist/assets/SessionsList-BqQzJQzH.js +0 -2
  132. package/dist/assets/Showroom-BpbWCBms.js +0 -1
  133. package/dist/assets/System-Bi2UJjp7.js +0 -1
  134. package/dist/assets/circle-slash-BqXxDfpK.js +0 -1
  135. package/dist/assets/client-DUabg_ow.js +0 -358
  136. package/dist/assets/crop-Cfvx74Ee.js +0 -1
  137. package/dist/assets/device-integration-icon-Bb8AOXEF.js +0 -1
  138. package/dist/assets/device-picker-model-BtgtDdnV.js +0 -1
  139. package/dist/assets/dist-BgJn1_Ws.js +0 -358
  140. package/dist/assets/i18n-aZ2iCAl5.js +0 -1
  141. package/dist/assets/index-DKfAHLRf.js +0 -4
  142. package/dist/assets/index-I9On1g0c.css +0 -2
  143. package/dist/assets/linked-devices-model-Wflvd004.js +0 -1
  144. package/dist/assets/location-owned-usage-D3Zl9d5o.js +0 -1
  145. package/dist/assets/mount-BtgtDdnV.js +0 -1
  146. package/dist/assets/notification-schedule-field-BGziM8ff.js +0 -1
  147. package/dist/assets/remoteEntry-DwoMnkvg.js +0 -1
  148. package/dist/assets/src-N0x0aMoc.js +0 -67
  149. package/dist/assets/step-inspector-model-C7JCmVfz.js +0 -1
  150. package/dist/assets/useEventInvalidation-BtgtDdnV.js +0 -1
  151. package/dist/assets/useNodeUrlSelection-DpqDFKVD.js +0 -1
  152. package/dist/assets/user-round-Dy1LJO0f.js +0 -1
@@ -0,0 +1,2 @@
1
+ import{$ as e,B as t,G as n,J as r,L as i,S as a,a as o,b as s,o as c,q as l,t as u,x as d}from"./_virtual_mf___mfe_internal__admin_ui_host__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-CEHpkaJP.js";import{Br as f,Cr as p,D as m,Di as h,En as g,G as _,Gn as v,It as y,J as b,Jn as x,Jr as S,K as C,Kn as w,Li as T,O as E,Ri as D,Rn as O,Si as k,St as A,T as j,V as M,Vi as N,W as P,Xn as F,Xr as ee,Z as I,Zt as te,_t as L,bn as ne,cr as R,dn as re,dt as ie,en as z,ht as B,li as V,lr as H,or as ae,ot as U,pi as oe,pn as se,q as ce,r as le,sa as ue,t as de,ta as fe,vn as pe,xn as me,yn as he,z as ge,zn as _e,zr as ve}from"./player-overlays-C2qGnksg.js";import{$i as ye,$t as be,An as xe,Bn as Se,Gn as Ce,Gt as we,Jt as Te,Kn as Ee,Kr as De,Kt as Oe,Ln as ke,Mn as W,Or as Ae,Qi as je,Qr as Me,Qt as Ne,Rn as Pe,Sn as Fe,Ut as Ie,Vr as Le,Wt as Re,Xr as ze,Xt as Be,Yn as Ve,Yt as He,Zt as Ue,_i as We,ai as G,an as Ge,bi as K,en as Ke,gi as qe,ii as Je,in as Ye,jn as Xe,ni as Ze,nn as Qe,on as $e,pi as et,qt as tt,rn as nt,tn as rt,u as it,xi as q,yi as at}from"./client-B741nZQJ.js";import{t as ot}from"./archive-S-zO_vQF.js";import{i as st,n as ct,r as lt,t as ut}from"./scan-eye-6_8sPy1t.js";import{t as dt}from"./bell-off-B0BNkY5Q.js";import{t as ft}from"./boxes-B89A109J.js";import{n as pt}from"./video-CnGFIENR.js";import{t as mt}from"./circle-slash-DtOy5nTT.js";import{t as ht}from"./layers-Dl1ZfXjR.js";import{$o as gt,$u as _t,An as vt,Ao as yt,Ca as bt,Co as xt,Cr as St,Da as Ct,Dn as wt,Dt as Tt,Ea as Et,Ec as Dt,En as Ot,Eo as kt,F as At,Fr as J,Ft as jt,Gc as Mt,Gr as Nt,Gs as Pt,Gt as Ft,Gu as It,Ha as Lt,Hc as Rt,Hr as zt,Ht as Bt,Hu as Vt,It as Ht,J as Ut,Ja as Wt,Kt as Gt,L as Kt,Ls as qt,Mi as Jt,Mn as Yt,Mt as Xt,Nn as Zt,Nr as Qt,Nt as $t,Nu as en,Oa as tn,Or as nn,Pn as rn,Q as an,Qa as on,Qu as sn,Ra as cn,Rn as ln,Rt as un,Ru as dn,Sc as fn,Sr as pn,Tn as mn,Uc as hn,Ut as gn,Uu as _n,Vc as vn,Vt as yn,Vu as bn,Wc as xn,Wr as Sn,Xt as Cn,Xu as wn,Yo as Tn,Yt as En,Z as Dn,Za as On,Zr as kn,Zt as An,_t as jn,a as Mn,an as Nn,ba as Pn,bc as Fn,br as In,bt as Ln,c as Rn,cr as zn,el as Bn,eo as Vn,es as Hn,et as Un,fn as Wn,fr as Gn,gi as Kn,gn as qn,go as Jn,gr as Y,ha as Yn,hl as Xn,i as Zn,id as Qn,ir as $n,jc as er,jn as tr,jt as nr,kn as rr,ko as ir,kt as ar,l as or,la as sr,lr as cr,ma as lr,mn as ur,no as dr,nr as fr,nt as pr,o as mr,or as hr,pr as gr,q as _r,qa as vr,qs as yr,qt as br,r as xr,rr as Sr,rt as Cr,s as wr,so as Tr,sr as Er,to as Dr,tr as Or,ts as kr,tt as Ar,ua as jr,uc as Mr,uo as Nr,ur as Pr,vc as Fr,vr as Ir,wa as Lr,wn as Rr,xr as zr,xt as Br,yc as Vr,yn as Hr,zn as Ur,zt as Wr,zu as Gr}from"./src-D1steZEF.js";import{t as X}from"./i18n-SRLxy4I7.js";import{t as Z}from"./useTranslation-D3Is_4B6.js";import"./mount-BIknMBUl.js";import{A as Kr,F as qr,I as Jr,M as Yr,N as Xr,P as Zr,_r as Qr,ar as $r,dr as ei,fr as ti,g as ni,h as ri,hr as ii,ir as ai,j as oi,lr as si,mr as ci,or as li,p as ui,pr as di,sr as fi,ur as pi,vr as mi,yr as hi}from"./index-Av4-A8rY.js";import{a as gi,d as _i,i as vi,n as yi,o as bi,r as xi,s as Si,t as Ci,u as wi}from"./CompositionEditor-Kq2kEnnh.js";import{_ as Ti,b as Ei,i as Di,m as Oi,o as ki,t as Ai}from"./step-inspector-model-p9HUQGve.js";import"./useEventInvalidation-BIknMBUl.js";import{t as ji}from"./use-stationary-objects-Dnn6yNrY.js";import{a as Mi,c as Ni,i as Pi,l as Fi,n as Ii,o as Li,r as Ri,s as zi,t as Bi,u as Vi}from"./linked-devices-model-7z16tmo3.js";import{n as Hi,t as Ui}from"./format-3n872UoD.js";import{t as Wi}from"./authed-media-Cpc0v-lW.js";e();function Gi(e){if(typeof e!=`object`||!e)return null;let t=e,n=t.id,r=t.label;if(typeof n!=`string`||typeof r!=`string`)return null;let i=t.available===!0,a=t.enabled,o=t.unavailableReason;return{id:n,label:r,costWhenOff:typeof t.costWhenOff==`string`?t.costWhenOff:``,on:i&&typeof a==`boolean`?a:null,available:i,unavailableReason:typeof o==`string`?o:null}}function Ki(e){if(typeof e!=`object`||!e)return null;let t=e.switches;if(!Array.isArray(t))return null;let n=t.map(Gi).filter(e=>e!==null);return n.length===0?null:n}var qi=[[/privacy|mask/i,`privacy`],[/microphone|mic\b/i,`microphone`],[/speaker|broker audio|stream audio/i,`speaker`],[/audio/i,`listening`],[/object|detect/i,`detection`],[/event/i,`archive`],[/record/i,`recording`],[/notif/i,`notifications`],[/stream|broker/i,`stream`]];function Ji(e){for(let[t,n]of qi)if(t.test(e))return n;return`generic`}function Yi(e){let t=e.filter(e=>e.on===!1).map(e=>e.id),n=e.filter(e=>e.on===null).map(e=>e.id),r=t=>t.map(t=>e.find(e=>e.id===t)?.label??t).join(`, `),i=[];return t.length>0&&i.push(X.t(`helpers.cameraSwitchRows.off`,{list:r(t)})),n.length>0&&i.push(X.t(`helpers.cameraSwitchRows.unknown`,{list:r(n)})),{offIds:t,unknownIds:n,summary:i.length===0?X.t(`helpers.cameraSwitchRows.allOn`):i.join(` · `)}}var Xi={stream:me,detection:ut,privacy:ve,microphone:F,speaker:A,listening:ct,archive:ot,recording:lt,notifications:T,generic:z};function Zi({deviceId:e}){let{t}=Z(),n=c(),o=Number.isFinite(e),[s,l]=r(null),[u,f]=r(!1),p=fn({deviceId:e},{enabled:o});xr([`pipelineOrchestrator`,`getCameraSwitches`],[`capability.binding-changed`]);let m=Ki(p.data),h=Mt({onError:(t,r)=>{console.error(`[CameraFunctionSwitches] switch write failed — reverting`,{tags:{deviceId:e},meta:{switchId:r.switchId,error:t instanceof Error?t.message:String(t)}}),n.invalidateQueries({queryKey:[[`pipelineOrchestrator`,`getCameraSwitches`]]}),l({id:r.switchId,message:t instanceof Error?t.message:String(t)})},onSuccess:()=>{l(null),n.invalidateQueries({queryKey:[[`pipelineOrchestrator`]]}),n.invalidateQueries({queryKey:[[`deviceManager`]]}),n.invalidateQueries({queryKey:[[`recording`]]})}}),g=i(t=>{!t.available||t.on===null||h.mutate({deviceId:e,switchId:t.id,enabled:!t.on})},[e,h]);if(m===null)return null;let _=Yi(m),v=e=>s?.id===e.id?s.message:null;return a(bn,{open:u,onOpenChange:f,children:[a(_n,{"aria-label":t(`device.cameraFunctionSwitches.cameraFunctions`,`Camera functions`),title:_.summary,className:`inline-flex items-center gap-1 rounded-lg border px-2 py-1.5 text-[11px] font-medium transition-colors ${s===null?_.offIds.length>0?`border-warning/40 text-warning hover:bg-warning/10`:`border-border text-foreground-subtle hover:text-foreground hover:bg-surface-hover`:`border-danger/50 text-danger bg-danger/5`}`,children:[d(z,{className:`h-3.5 w-3.5`}),d(`span`,{className:`hidden lg:inline`,children:t(`device.cameraFunctionSwitches.functions`,`Functions`)}),_.offIds.length>0&&d(`span`,{className:`rounded bg-warning/20 px-1 text-[9px] font-semibold uppercase tracking-wide`,children:t(`device.cameraFunctionSwitches.offCount`,{count:_.offIds.length})})]}),a(Vt,{align:`end`,className:`min-w-[240px] max-h-[60vh] overflow-y-auto p-1`,children:[d(`div`,{className:`px-2 py-1 text-[10px] uppercase tracking-wider text-foreground-subtle`,children:t(`device.cameraFunctionSwitches.cameraFunctions`,`Camera functions`)}),d(`ul`,{className:`space-y-0.5`,children:m.map(e=>d(`li`,{children:d(Qi,{row:e,failure:v(e),onToggle:()=>g(e)})},e.id))})]})]})}function Qi({row:e,failure:t,onToggle:n}){let{t:r}=Z(),i=Xi[Ji(e.label)],o=e.on===null,s=e.on===!1,c=t===null?o?e.unavailableReason??`The source that owns this did not answer.`:e.costWhenOff:`Write failed: ${t}`,l=t===null?o?e.unavailableReason??`unknown`:null:`write failed`;return a(`button`,{type:`button`,role:`switch`,"aria-label":e.label,"aria-checked":e.on===!0,disabled:!e.available,onClick:n,title:c,className:`flex w-full items-center gap-2 rounded-md px-2 py-1 text-left text-[12px] text-foreground transition-colors hover:bg-surface-hover disabled:opacity-40 disabled:cursor-not-allowed`,children:[d(i,{className:`h-3.5 w-3.5 shrink-0 ${t===null?o?`text-foreground-subtle/50`:s?`text-warning`:`text-success`:`text-danger`}`}),a(`span`,{className:`flex-1 min-w-0 truncate`,children:[e.label,l!==null&&a(`span`,{className:`ml-1 text-[10px] text-foreground-subtle`,children:[`· `,l]})]}),d(`span`,{className:`shrink-0 rounded px-1 py-0.5 text-[9px] font-semibold uppercase tracking-wide ${o?`bg-surface-hover text-foreground-subtle/60`:s?`bg-warning/20 text-warning`:`bg-success/20 text-success`}`,children:o?`—`:r(s?`common.off`:`common.on`)})]})}function $i({deviceId:e}){let t=un(U().trpcClient,e);return t===null?null:a(`a`,{href:t.url,target:`_blank`,rel:`noopener noreferrer`,title:`${t.label} — ${t.host}`,className:`inline-flex items-center gap-1.5 rounded-lg px-2 sm:px-2.5 py-1.5 text-[11px] font-medium border border-border text-foreground-subtle hover:text-foreground hover:bg-surface-hover transition-colors`,children:[d(f,{className:`h-3.5 w-3.5`}),d(`span`,{className:`hidden sm:inline`,children:t.label})]})}function ea({parentDeviceId:e}){let{t}=Z(),n=Qr(),r=U(),{data:i,isLoading:o,isError:s}=fi(e),{data:c}=On({deviceId:e},{enabled:Number.isFinite(e)});if(o)return d(`div`,{className:`rounded-lg border border-border bg-surface p-3`,children:d(`p`,{className:`text-[10px] text-foreground-subtle`,children:t(`common.loading`,{defaultValue:`Loading…`})})});if(s)return d(`div`,{className:`rounded-lg border border-border bg-surface p-3`,children:d(`p`,{className:`text-[10px] text-warning`,children:t(`integrations.childrenLoadError`,{defaultValue:`Failed to load children`})})});let l=(i??[]).filter(e=>e.display?.hidden!==!0);if(l.length===0)return null;let u=$t(c?.stableId??``,l,c?.childLayout),f=u.ungrouped,p=e=>n(`/devices/${String(e)}`),m=c?.name??``,h=(e,t)=>d(nr,{trpc:r.trpcClient,device:{...t,name:Wr(t,m)},variant:`minimal`,onNavigate:p},e),g=f.some(e=>!!e.role),_=f.some(e=>!e.role),v=g&&!_?t(`device.accessories`,{defaultValue:`Accessories`}):!g&&_?t(`device.adoptedDevices`,{defaultValue:`Adopted devices`}):t(`device.children`,{defaultValue:`Children`}),y=f.length>0?a(`div`,{className:`rounded-lg border border-border bg-surface p-3`,children:[d(`div`,{className:`text-[10px] font-semibold uppercase tracking-wide text-foreground-subtle mb-1.5`,children:v}),d(`div`,{className:`space-y-1`,children:f.map(e=>h(e.id,e))})]}):null,b=u.disabledSection===void 0?null:d(Xt,{title:t(`device.disabledSection`,{defaultValue:`Disabled`}),count:u.disabledSection.children.length,defaultOpen:!1,children:d(`div`,{className:`opacity-60 space-y-1`,children:u.disabledSection.children.map(e=>h(e.id,e))})},u.disabledSection.title);if(u.sections.length===0)return b===null?y:a(`div`,{className:`space-y-2`,children:[y,b]});let x=_&&!g;return a(`div`,{className:`space-y-2`,children:[x?y:null,u.sections.map(e=>d(Xt,{title:e.title,count:e.children.length,defaultOpen:e.defaultOpen,children:e.children.map(e=>h(e.id,e))},e.title)),x?null:y,b]})}function ta({deviceId:e}){let t=U(),{data:n,isLoading:r}=li(e),{data:i,isLoading:a}=fi(e),o=r||a,s=(i??[]).map(e=>({id:e.id,stableId:e.stableId,type:e.type,name:e.name,features:e.features,...e.sourceInfo?{sourceInfo:{id:e.sourceInfo.id}}:{}})),c=typeof n?.linkDeviceId==`number`?n.linkDeviceId:null,l=typeof n?.primaryChildEntityId==`string`?n.primaryChildEntityId:null;return o?d(`div`,{className:`h-full min-h-32 w-full animate-pulse rounded-lg bg-surface`,"aria-hidden":`true`}):d(`div`,{className:`flex h-full w-full flex-col`,children:d(yn,{trpc:t.trpcClient,children:s,linkDeviceId:c,primaryChildEntityId:l})})}e();function na({dev:e,busy:t,setBusy:n}){let{t:i}=Z(),o=e?.motionTrigger,s=b(e?.state.motionTrigger),[c,l]=r(!1);if(!o)return null;let u=s?.enabled===!0,f=s!==void 0,p=async()=>{if(t||!f)return;let e=!u;n(!0),l(!0);try{await o.setMotionTrigger({enabled:e})}finally{n(!1),l(!1)}},m=c?u?`Disabling…`:`Enabling…`:f?u?`On motion: on`:`On motion: off`:`On motion: …`;return a(`button`,{type:`button`,onClick:()=>{p()},disabled:t||!f,title:f?u?i(`hero.motionTriggerToggle.disableTriggerOnMotion`,`Disable trigger on motion`):i(`hero.motionTriggerToggle.enableTriggerOnMotion`,`Enable trigger on motion`):i(`hero.motionTriggerToggle.awaitingState`,`Awaiting state…`),"aria-pressed":u,className:`inline-flex items-center gap-1.5 rounded-full border px-2.5 py-1 text-[11px] font-medium transition-colors disabled:cursor-not-allowed disabled:opacity-50 ${u?`border-primary/50 bg-primary/15 text-primary`:`border-border bg-surface text-foreground-subtle hover:text-foreground`}`,children:[d(fe,{className:`h-3 w-3`}),d(`span`,{children:m})]})}e();function Q({deviceId:e,deviceType:t,features:n}){let i=U(),o=Ft(t)?.HeroCard??Gt,s=C(i.trpcClient,e),c=b(s?.state.deviceStatus),[l,u]=r(!1),f=c!==void 0&&c.online===!1,p=f?c.lastChangedAt:null;return a(`div`,{className:`flex h-full w-full flex-col items-stretch gap-3 p-3 sm:p-4`,children:[f?d(`div`,{className:`flex justify-center`,children:d(gn,{lastChangedAt:p})}):null,d(o,{trpc:i.trpcClient,deviceId:e,features:n}),d(`div`,{className:`flex justify-center`,children:d(na,{dev:s,busy:l,setBusy:u})})]})}function ra({deviceId:e,features:t}){return d(`div`,{className:`flex h-full w-full flex-col items-stretch gap-3 p-3 sm:p-4`,children:d(br,{trpc:U().trpcClient,deviceId:e,features:t})})}function ia({deviceId:e,features:t}){return d(`div`,{className:`flex h-full w-full flex-col items-stretch p-3 sm:p-4`,children:d(Gt,{trpc:U().trpcClient,deviceId:e,features:t})})}function aa(e){if(!e)return null;let t=e.channel;return typeof t!=`number`||!Number.isInteger(t)||t<0?null:t}function oa(e){if(!e)return null;let t=aa(e.data);return t===null?e.eventType:X.t(`helpers.eventEmitterFormat.buttonHeadline`,{channel:String(t),eventType:e.eventType})}var sa=1e3,ca=60*sa,la=60*ca,ua=24*la;function da(e,t){if(e==null||e<=0)return`—`;let n=t-e;return n<sa?X.t(`helpers.relativeTime.justNow`):n<ca?X.t(`helpers.relativeTime.secondsAgo`,{count:Math.floor(n/sa)}):n<la?X.t(`helpers.relativeTime.minutesAgo`,{count:Math.floor(n/ca)}):n<ua?X.t(`helpers.relativeTime.hoursAgo`,{count:Math.floor(n/la)}):X.t(`helpers.relativeTime.daysAgo`,{count:Math.floor(n/ua)})}e();var fa=1500,pa=15e3,ma=1e3;function ha({deviceId:e}){let{t:n}=Z(),i=C(U().trpcClient,e)?.state.eventEmitter,o=b(i);t(()=>{if(!i)return;i.refresh();let e=setInterval(()=>{i.refresh()},pa);return()=>{clearInterval(e)}},[i]);let s=o?.lastEvent??null,c=s?.seq??null,u=l(null),[f,m]=r(!1);t(()=>{if(c===null)return;let e=u.current;if(u.current=c,e===null||e===c)return;m(!0);let t=setTimeout(()=>{m(!1)},fa);return()=>{clearTimeout(t)}},[c]);let[h,g]=r(()=>Date.now());t(()=>{let e=setInterval(()=>{g(Date.now())},ma);return()=>{clearInterval(e)}},[]);let _=oa(s),y=o?.eventTypes??[],x=o?.eventCountSinceStart??0,S=o!==void 0,w=aa(s?.data);return a(`div`,{className:`flex h-full w-full flex-col items-center justify-center gap-3 p-4`,children:[d(`div`,{"data-testid":`event-emitter-indicator`,"data-flashing":String(f),className:`flex h-24 w-24 items-center justify-center rounded-full border-2 transition-all ${f?`border-primary bg-primary/20 text-primary shadow-lg shadow-primary/30 scale-105`:`border-border bg-surface text-foreground-subtle`}`,"aria-live":`polite`,title:_??n(`hero.eventEmitterHero.noPressRecorded`,`No press recorded`),children:d(f?v:p,{className:`h-10 w-10`})}),a(`div`,{className:`text-center`,children:[w!==null&&d(`div`,{className:`text-xs font-semibold uppercase tracking-wide text-primary`,children:n(`hero.eventEmitterHero.button`,`Button {{value1}}`,{value1:String(w)})}),d(`div`,{"data-testid":`event-emitter-headline`,className:`text-sm font-semibold ${_?`text-foreground`:`text-foreground-subtle`}`,children:_??(S?n(`hero.eventEmitterHero.noPressRecorded`,`No press recorded`):n(`hero.eventEmitterHero.awaitingState`,`Awaiting state…`))}),d(`div`,{className:`text-[10px] text-foreground-subtle mt-0.5`,children:s?da(s.timestamp,h):n(`hero.eventEmitterHero.waitingForTheFirstEvent`,`Waiting for the first event`)})]}),y.length>0&&d(`div`,{className:`flex max-w-full flex-wrap justify-center gap-1`,children:y.map(e=>d(`span`,{"data-testid":`event-emitter-chip`,className:`rounded-full border px-2 py-0.5 text-[10px] font-medium ${e===s?.eventType?`border-primary bg-primary/15 text-primary`:`border-border bg-surface text-foreground-subtle`}`,children:e},e))}),d(`div`,{className:`text-[10px] text-foreground-subtle`,children:n(`hero.eventEmitterHero.sinceStart`,{count:x})})]})}function ga({deviceName:e,deviceType:t,provider:n,isOnline:r,features:i}){let{t:o}=Z();return a(`div`,{className:`flex h-full w-full flex-col items-center justify-center gap-3 rounded-lg border border-dashed border-border bg-surface p-6 text-center`,children:[d(ti,{type:n,size:`lg`}),a(`div`,{children:[d(`div`,{className:`text-sm font-semibold text-foreground`,children:e}),d(`div`,{className:`text-[10px] text-foreground-subtle uppercase tracking-wider mt-0.5`,children:t})]}),a(`div`,{className:`flex items-center gap-2 flex-wrap justify-center`,children:[d(Cr,{status:r?`online`:`offline`}),i.length>0&&d(di,{capabilities:i})]}),d(`div`,{className:`text-[10px] text-foreground-subtle italic max-w-xs mt-1`,children:o(`hero.genericHero.noLiveViewForThis`,`No live view for this device type. Use the Config tab or the shortcut row to interact.`)})]})}e();function _a({deviceId:e}){let{t}=Z(),r=c(),i=bt({deviceId:e},{refetchInterval:1e4,retry:!1}),o=Lr({onSuccess:()=>{r.invalidateQueries({queryKey:[[`deviceDiscovery`,`listDiscovered`]]}),r.invalidateQueries({queryKey:[[`deviceDiscovery`,`getStatus`]]})}}),s=n(()=>va(i.data??[]),[i.data]);return a(`div`,{className:`flex h-full w-full flex-col gap-3 p-3 sm:p-4`,children:[a(`div`,{className:`flex flex-wrap items-stretch gap-2 sm:gap-3`,children:[d(ya,{label:t(`hero.hubHero.discovered`,`Discovered`),value:s.total,icon:d(_e,{className:`h-3.5 w-3.5`})}),d(ya,{label:t(`hero.hubHero.adopted`,`Adopted`),value:s.adopted,accent:`success`}),d(ya,{label:t(`hero.hubHero.available`,`Available`),value:s.available,accent:s.available>0?`primary`:void 0}),a(`button`,{type:`button`,onClick:()=>{o.mutateAsync({deviceId:e}).catch(()=>{})},disabled:o.isPending,className:`inline-flex items-center justify-center gap-1.5 rounded-lg border border-border px-3 py-2 text-xs font-medium text-foreground-subtle hover:text-foreground hover:bg-surface-hover transition-colors disabled:opacity-50 self-stretch shrink-0`,children:[o.isPending?d(ae,{className:`h-3.5 w-3.5 animate-spin`}):d(ne,{className:`h-3.5 w-3.5`}),d(`span`,{className:`hidden sm:inline`,children:t(`hero.hubHero.discover`,`Discover`)})]})]}),a(`div`,{className:`flex flex-wrap items-center gap-x-3 gap-y-1 text-[11px] text-foreground-subtle border-t border-border-subtle pt-2`,children:[d(ba,{icon:d(B,{className:`h-3 w-3 text-emerald-500`}),label:t(`hero.hubHero.online`,`{{online}} online`,{online:s.online})}),d(ba,{icon:d(w,{className:`h-3 w-3 text-amber-500`}),label:t(`hero.hubHero.sleeping`,`{{sleeping}} sleeping`,{sleeping:s.sleeping})}),d(ba,{icon:d(L,{className:`h-3 w-3 text-destructive`}),label:t(`hero.hubHero.offline`,`{{offline}} offline`,{offline:s.offline})}),s.unknown>0?d(ba,{icon:d(V,{className:`h-3 w-3 text-foreground-subtle`}),label:t(`hero.hubHero.unknown`,`{{unknown}} unknown`,{unknown:s.unknown})}):null]})]})}function va(e){let t={total:e.length,adopted:0,available:0,online:0,sleeping:0,offline:0,unknown:0};for(let n of e)n.alreadyAdopted?t.adopted+=1:t.available+=1,t[n.status]+=1;return t}function ya({label:e,value:t,icon:n,accent:r}){return a(`div`,{className:`flex flex-1 basis-[140px] min-w-0 flex-col gap-1 rounded-lg border px-2 py-1.5 sm:px-3 sm:py-2 ${r===`success`?`bg-emerald-500/10 border-emerald-500/30 text-emerald-500`:r===`primary`?`bg-primary/10 border-primary/30 text-primary`:`bg-surface-hover border-border text-foreground`}`,children:[a(`div`,{className:`flex items-center gap-1.5 text-[10px] uppercase tracking-wider opacity-70 truncate`,children:[n,d(`span`,{className:`truncate`,children:e})]}),d(`div`,{className:`text-xl sm:text-2xl font-semibold tabular-nums leading-none`,children:t})]})}function ba({icon:e,label:t}){return a(`span`,{className:`inline-flex items-center gap-1`,children:[e,d(`span`,{children:t})]})}var xa={[q.Switch]:Q,[q.Siren]:Q,[q.Light]:Q,[q.Sensor]:Q,[q.Button]:Q,[q.Hub]:_a,[q.Cover]:ra,[q.Valve]:Q,[q.Humidifier]:Q,[q.WaterHeater]:Q,[q.Container]:ta,[q.Lock]:Q,[q.Fan]:Q,[q.Thermostat]:Q,[q.Climate]:Q,[q.MediaPlayer]:Q,[q.Control]:Q,[q.AlarmPanel]:Q,[q.EventEmitter]:ha,[q.Notifier]:ia,[q.Script]:Q,[q.Automation]:Q,[q.Presence]:Q,[q.Update]:Q,[q.Vacuum]:Q,[q.LawnMower]:Q,[q.Weather]:Q,[q.Image]:Q,[q.PetFeeder]:Q,[q.Dishwasher]:Q};function Sa(e){return xa[e]??ga}function Ca({deviceId:e}){let t=ce(U().trpcClient,e,e=>e.runningState);return d(Ot,{running:t===void 0||t.running===null?null:t.running,since:t?.since??null,phase:t?.phase??null,className:`px-3 pt-2 sm:px-4`})}function wa(e){let t=Sa(e.deviceType);return a(s,{children:[d(Ca,{deviceId:e.deviceId}),d(t,{...e})]})}function Ta({deviceId:e,widgets:t}){return t.length===0?null:d(`div`,{className:`flex flex-col gap-3 px-3 pb-3 sm:px-4 sm:pb-4`,"data-testid":`device-hero-widgets`,children:t.map(t=>{let n=d(Or,{widgetId:t.widgetId,deviceId:t.deviceId});return d(`div`,{children:t.deviceId===e?n:d(nn,{deviceId:t.deviceId,children:n})},t.widgetId)})})}function Ea(e){return e.sections.filter(e=>e.location===`hero`).flatMap(t=>t.fields.flatMap(n=>{if(typeof n!=`object`||!n)return[];let r=Reflect.get(n,`type`),i=Reflect.get(n,`widgetId`);return r!==`widget`||typeof i!=`string`||i.length===0?[]:[{widgetId:i,deviceId:e.deviceId,order:t.order??0}]}))}function Da(e){let t=Ea(e),n=new Set(t.map(e=>e.widgetId)),r=e.child===void 0?[]:Ea(e.child),i=[...t,...r.filter(e=>!n.has(e.widgetId))],a=new Set;return i.filter(e=>a.has(e.widgetId)?!1:(a.add(e.widgetId),!0)).sort((e,t)=>e.order-t.order)}function Oa(e){return mr(U().trpcClient,e)}e();function ka(e){let[n,a]=r(`idle`),[o,s]=r(null),c=l(null),u=l(null),d=l(null),f=l(!0),p=Hn(),m=gt(),h=kr(),g=i(()=>{if(c.current){try{c.current.close()}catch{}c.current=null}if(u.current){for(let e of u.current.getTracks())try{e.stop()}catch{}u.current=null}d.current=null},[]),_=i(async()=>{if(n===`idle`)return;a(`stopping`);let t=d.current;if(t&&e!==null)try{await Promise.race([h.mutateAsync({deviceId:e,sessionId:t}),new Promise((e,t)=>setTimeout(()=>t(Error(`server stopSession timeout`)),2e3))])}catch(e){console.warn(`[intercom] server stopSession failed (continuing teardown)`,e)}g(),f.current&&(a(`idle`),s(null))},[n,e,h,g]),v=i(async()=>{if(e===null||n!==`idle`&&n!==`error`)return;s(null);let t=null,r=null,i=null;try{a(`requesting-mic`),t=await navigator.mediaDevices.getUserMedia({audio:!0,video:!1}),u.current=t,a(`starting`);let n=await p.mutateAsync({deviceId:e});i=n.sessionId,d.current=i,a(`connecting`),r=new RTCPeerConnection,c.current=r,r.oniceconnectionstatechange=()=>{if(!f.current)return;let e=r.iceConnectionState;e===`connected`||e===`completed`?a(`talking`):(e===`failed`||e===`closed`||e===`disconnected`)&&f.current&&(s(e===`failed`?`WebRTC connection failed`:null),_())};for(let e of t.getAudioTracks())r.addTrack(e,t);await r.setRemoteDescription({type:`offer`,sdp:n.sdpOffer});let o=await r.createAnswer();await r.setLocalDescription(o);let l=r.localDescription?.sdp??o.sdp??``;await m.mutateAsync({deviceId:e,sessionId:i,sdpAnswer:l})}catch(n){let o=n instanceof Error?n.message:String(n);if(console.warn(`[intercom] start failed`,n),r)try{r.close()}catch{}if(t)for(let e of t.getTracks())try{e.stop()}catch{}if(c.current=null,u.current=null,i!==null)try{await h.mutateAsync({deviceId:e,sessionId:i})}catch{}d.current=null,f.current&&(s(o),a(`error`))}},[e,n,p,m,h,_]);return t(()=>(f.current=!0,()=>{f.current=!1;let t=d.current;if(t!==null&&e!==null&&h.mutate({deviceId:e,sessionId:t}),c.current){try{c.current.close()}catch{}c.current=null}if(u.current){for(let e of u.current.getTracks())try{e.stop()}catch{}u.current=null}d.current=null}),[e]),{state:n,error:o,start:v,stop:_,isTalking:n===`talking`}}e();var Aa=0;function $(){return++Aa}function ja(e){switch(e.type){case`system`:return`system`;case`device`:return`#${e.deviceId}`;case`provider`:return e.providerId;case`addon`:return e.addonId}}function Ma(e){return[``,`Commands`,` help Show this help`,` examples Show usage examples for the current scope`,` context Show every available variable + full API surface`,` clear Clear terminal (also Ctrl+L)`,``,`Shortcuts`,` Enter Execute expression`,` Arrow Up/Down Navigate command history`,` Ctrl+L Clear terminal`,``,`Try: ${{system:` sm.summary() // fleet overview`,device:` device.state.battery.value?.sleeping // sync read`,provider:` devices.map(d => d.name)`,addon:` manifest.version`}[e.type]}`,``,`Top-level objects: sm (SystemMirror), DeviceType, Math, JSON, Date, …`]}function Na(e){switch(e.type){case`device`:return[``,`── State (sync, zero round-trip) ─────────────────────────`,` device.state.battery.value`,` device.state.battery.value?.percentage`,` device.state.motion.value?.detected`,``,`── Actions (async, through wrapper chain) ────────────────`,` await device.snapshot.getSnapshot({})`,` await device.ptz.move({ direction: 'left', steps: 1 })`,` await device.switch.setState({ on: true })`,``,`── Wait for condition ───────────────────────────────────`,` await sm.waitForState(deviceId, 'battery', s => !s.sleeping, 30_000)`,``,`── Subscribe to changes ─────────────────────────────────`,` const off = device.state.battery.subscribe(s => console.log(s))`,``,`── Quick info ───────────────────────────────────────────`,` info.name device name`,` info.addonId owning addon`,` sm.dump(deviceId) full debug dump`];case`system`:return[``,`── Lookups ──────────────────────────────────────────────`,` sm.getDeviceById(8)`,` sm.getDeviceByName('Sala da pranzo')`,` sm.getDevicesByAddon('reolink')`,` sm.getDevicesByType(DeviceType.Camera)`,``,`── Filters (typed query) ────────────────────────────────`,` sm.query({ addonId: 'reolink', online: true })`,` sm.query({ caps: ['battery', 'snapshot'] })`,` sm.query({ name: /^Cam-/ })`,``,`── Cross-device ─────────────────────────────────────────`,` sm.whereState('battery', s => s.percentage < 20).length`,` sm.mapState('battery', s => s.percentage)`,` sm.countByCap('snapshot')`,``,`── Batch action ─────────────────────────────────────────`,` await sm.invokeCap('snapshot', 'getSnapshot', {}, { parallelism: 4 })`,``,`── Listen ───────────────────────────────────────────────`,` sm.listenCap('motion', (id, s) => console.log(id, s))`,` sm.onDeviceAdded((id, info) => console.log('+', info.name))`,``,`── Diagnostics ──────────────────────────────────────────`,` sm.summary()`,` sm.dump(8)`];case`provider`:return[``,` devices.map(d => d.name)`,` await getIntegration()`,` sm.getDevicesByAddon('<this-addon-id>').length`];case`addon`:return[``,` manifest.name`,` manifest.version`,` declaration`]}}function Pa(e){let t=[``,`Scope: ${e.type}`,``];switch(e.type){case`system`:return[...t,`Primary API — sm (SystemMirror):`,` sm.getDeviceById(id) DeviceProxy | null (sync)`,` sm.getDeviceByName(name) DeviceProxy | null`,` sm.getDeviceByStableId(sid) DeviceProxy | null`,` sm.getAllDevices() readonly DeviceProxy[]`,` sm.getDeviceInfo(id) DeviceInfo | null`,` sm.summary() fleet stats`,``,`Filters — sm.query({...}):`,` sm.query({ addonId: 'reolink', online: true })`,` sm.query({ caps: ['battery', 'snapshot'] }) // ALL caps required`,` sm.query({ anyCap: ['ptz', 'motion'] }) // ANY cap`,` sm.query({ name: { contains: 'sala' } }) // case-insensitive`,` sm.query({ name: /^Cam-\\d+$/ })`,` sm.query({ type: DeviceType.Camera })`,` sm.query({ parentDeviceId: 8 }) // accessories of cam 8`,` sm.query({ where: (info, dev) => dev.state.battery.value?.sleeping })`,``,`State queries:`,` sm.whereState('battery', s => s.percentage < 20)`,` sm.mapState('battery', s => s.percentage)`,` sm.findState('motion', s => s.detected)`,` sm.countByCap('snapshot')`,``,`Listeners (return unsubscribe fn):`,` sm.listen((id, cap, slice) => …) // every state change`,` sm.listenCap('motion', (id, slice) => …)`,` sm.listenDevice(8, (id, cap, slice) => …)`,` sm.onDeviceAdded((id, info) => …)`,` sm.onDeviceRemoved((id, info) => …)`,``,`Wait primitives:`,` await sm.waitForState(8, 'battery', s => !s.sleeping, 30_000)`,` await sm.waitForDevice(99, 30_000)`,``,`Batch:`,` await sm.invokeCap('snapshot', 'getSnapshot', {}, { parallelism: 4 })`,` await sm.forEachCap('reboot', d => d.reboot.reboot({}))`,``,`Diagnostics:`,` sm.dump(8) debug dump (one device)`,` sm.dump() full fleet dump`,` sm.summary() breakdown by cap/addon/type`,``,`Legacy: deviceRegistry, addonRegistry, eventBus, devices(), addons()`];case`device`:return[...t,`Pre-bound variables:`,` device DeviceProxy for this device (sync state + async methods)`,` deviceId number`,` info DeviceInfo metadata (name, addonId, type, online, …)`,` sm SystemMirror (full cluster view)`,` rawDevice legacy IDevice instance (escape hatch)`,``,`Reactive state (sync, zero round-trip):`,` device.state.battery.value BatteryStatus | undefined`,` device.state.battery.value?.sleeping`,` device.state.battery.value?.percentage`,` device.state.motion.value?.detected`,` device.state.switch.value?.on`,` device.state.brightness.value?.percentage`,` device.state.doorbell.value?.lastPressedAt`,``,`Cap actions (async, through wrapper chain):`,` await device.snapshot.getSnapshot({})`,` await device.snapshot.getSnapshot({ streamId: 'high' })`,` await device.ptz.move({ direction: 'left', steps: 1 })`,` await device.ptz.goToPreset({ presetId: 'home' })`,` await device.switch.setState({ on: true })`,` await device.brightness.setBrightness({ percentage: 60 })`,` await device.reboot.reboot({})`,``,`Subscribe to slice changes:`,` const off = device.state.battery.subscribe(s => console.log(s))`,` // off() to unsubscribe`,``,`Wait for a state condition:`,` await sm.waitForState(deviceId, 'battery', s => !s.sleeping, 30_000)`,``,`Diagnostics:`,` info.name device name`,` info.addonId which addon owns it`,` info.online transport health`,` sm.dump(deviceId) full debug dump (binding + state + info)`];case`provider`:return[...t,`Pre-bound variables:`,` devices Devices belonging to this provider (raw IDevice[])`,` getIntegration() Integration metadata`,``,`For typed device access use the SystemMirror:`,` await getSystemMirror()`,` sm.getDevicesByAddon('this-addon-id')`];case`addon`:return[...t,`Pre-bound variables:`,` manifest { name, version, ... }`,` declaration addon declaration`,` source addon source location`,``,`Examples:`,` manifest.name`,` manifest.version`]}}function Fa({scope:e,greeting:n,className:o}){let{t:s}=Z(),c=U(),[f,p]=r(()=>{let t=[];return n&&t.push({id:$(),kind:`info`,text:n}),t.push({id:$(),kind:`info`,text:`scope: ${ja(e)} — type help or context for available commands`}),t}),[m,h]=r(``),[g,_]=r([]),[v,y]=r(-1),b=l(null),x=l(null);t(()=>{let e=x.current;e&&(e.scrollTop=e.scrollHeight)},[f]);let S=i(()=>{b.current?.focus()},[]),C=u({mutationFn:t=>c.trpcClient.repl.execute.mutate({code:t,scope:e}),onSuccess:e=>{let t=e??{},n=typeof t.output==`string`?t.output:e==null?`undefined`:typeof e==`string`?e:JSON.stringify(e,null,2),r=t.type===`error`;p(e=>[...e,{id:$(),kind:r?`error`:`result`,text:n}])},onError:e=>{let t=e instanceof Error?e.message:String(e);p(e=>[...e,{id:$(),kind:`error`,text:t}])}});function w(t){let n=t.trim();if(n){if(n===`clear`){p([{id:$(),kind:`info`,text:`scope: ${ja(e)}`}]),h(``);return}if(n===`help`){p(t=>[...t,{id:$(),kind:`input`,text:`> ${n}`},...Ma(e).map(e=>({id:$(),kind:`info`,text:e}))]),h(``);return}if(n===`context`){p(t=>[...t,{id:$(),kind:`input`,text:`> ${n}`},...Pa(e).map(e=>({id:$(),kind:`info`,text:e}))]),h(``);return}if(n===`examples`){p(t=>[...t,{id:$(),kind:`input`,text:`> ${n}`},...Na(e).map(e=>({id:$(),kind:`info`,text:e}))]),h(``);return}_(e=>[...e,n]),y(-1),p(e=>[...e,{id:$(),kind:`input`,text:`> ${n}`}]),h(``),C.mutate(n)}}function T(t){if(t.key===`Enter`){t.preventDefault(),w(m);return}if(t.key===`ArrowUp`){if(t.preventDefault(),g.length===0)return;let e=v===-1?g.length-1:Math.max(0,v-1);y(e),h(g[e]??``);return}if(t.key===`ArrowDown`){if(t.preventDefault(),v===-1)return;let e=v+1;e>=g.length?(y(-1),h(``)):(y(e),h(g[e]??``));return}t.ctrlKey&&t.key===`l`&&(t.preventDefault(),p([{id:$(),kind:`info`,text:`scope: ${ja(e)}`}]))}let E={input:`text-zinc-300`,result:`text-emerald-300`,error:`text-red-300`,info:`text-zinc-400`};return a(`div`,{className:`flex flex-col bg-[#0c0a09] rounded-lg border border-border overflow-hidden font-mono text-xs ${o??``}`,onClick:S,children:[a(`div`,{ref:x,className:`flex-1 overflow-y-auto p-3 space-y-1 min-h-[120px]`,children:[f.map(e=>d(`pre`,{className:`whitespace-pre-wrap break-words leading-relaxed ${E[e.kind]}`,children:e.text},e.id)),C.isPending&&d(`span`,{className:`text-zinc-500 animate-pulse`,children:s(`shared.replTerminal.thinking`,`…thinking`)})]}),a(`div`,{className:`flex items-center gap-2 border-t border-zinc-800 px-3 py-2 bg-[#0c0a09]`,children:[d(`span`,{className:`text-emerald-400 flex-shrink-0 select-none font-bold`,children:s(`shared.replTerminal.text`,`>`)}),d(`input`,{ref:b,value:m,onChange:e=>h(e.target.value),onKeyDown:T,disabled:C.isPending,placeholder:`device.state.battery.value`,autoFocus:!0,className:`flex-1 bg-transparent text-zinc-100 placeholder:text-zinc-600 focus:outline-none caret-emerald-400 disabled:opacity-50`,spellCheck:!1,autoComplete:`off`,autoCorrect:`off`,autoCapitalize:`off`})]})]})}function Ia(e,t){return e===null?null:{playbackUrl:e.url,...e.format===void 0?{}:{playbackFormat:e.format},playbackAuthToken:t,...e.label===void 0?{}:{playbackLabel:e.label}}}e();function La({deviceId:e,intercomAvailable:t=!1}){let r=U(),i=typeof window<`u`?I():``,a=Number.isFinite(e),o=Oa(a?e:null),c=ji(a?[e]:[]),l=n(()=>{if(!a)return;let e=[];for(let t of c.rows){let n=Mn(t);n!==null&&e.push(n)}return e},[a,c.rows]),{streams:u,pipelineMetrics:f,createSession:p,sendAnswer:m,handleOffer:h,getIceServers:g,addIceCandidate:v,getIceCandidates:y,closeSession:b,getSessionState:x,applyDownlinkProbe:S}=Wn(r.trpcClient,a?e:null),C=_(a?e:null,{width:Ha}),w=ka(a&&t?e:null),T=w.state===`requesting-mic`||w.state===`starting`||w.state===`connecting`||w.state===`stopping`,E=w.isTalking||T,D=()=>{w.state===`idle`||w.state===`error`?w.start():w.state!==`stopping`&&w.stop()},O=le(),k=gr(),A=typeof window<`u`?window.localStorage.getItem(`camstack_admin_token`):null,j=Ia(k.request,A),M=O.length>0?d(s,{children:O.map(e=>d(`div`,{className:`absolute inset-0`,children:e.node},e.id))}):null;return d(_r,{serverUrl:i,createSession:p,sendAnswer:m,handleOffer:h,getIceServers:g,addIceCandidate:v,getIceCandidates:y,closeSession:b,getSessionState:x,applyDownlinkProbe:S,...j===null?{}:{...j,onExitPlayback:()=>k.clear()},streams:u,pipelineMetrics:f,phase:o.phase,detections:o,...l===void 0?{}:{stationaryObjects:l},defaultShowDetections:!0,defaultShowMotion:!0,showPlayStop:!0,snapshotSrc:C.src,...C.src?{posterUrl:C.src}:{},snapshotLoading:C.loading,onRefreshSnapshot:C.refresh,intercomAvailable:t,intercomShown:E,onIntercomToggle:D,extraOverlay:M,chromeless:!0,className:`h-full`})}function Ra({deviceId:e,containerDeviceId:t}){let{t:n}=Z();return Number.isFinite(e)?d(`div`,{className:`flex flex-col h-full`,children:d(An,{...t===void 0?{deviceId:e}:{containerDeviceId:t},limit:50,maxHeight:`max-h-full`,showScope:!1,showFilters:!1})}):d(`div`,{className:`flex items-center justify-center h-full text-[11px] text-foreground-subtle italic`,children:n(`device.panelContent.notLoaded`,{id:e})})}function za({deviceId:e}){let{t}=Z();if(!Number.isFinite(e))return d(`div`,{className:`flex items-center justify-center h-full text-[11px] text-foreground-subtle italic`,children:t(`device.panelContent.notLoaded`,{id:e})});let n=[`CamStack REPL — device #${e}`,``,` device.state.battery.value sync state read`,` await device.snapshot.getSnapshot({}) cap action`,``,` type 'examples' for more, 'context' for the full API`].join(`
2
+ `);return d(Fa,{scope:{type:`device`,deviceId:e},greeting:n,className:`h-full border-0 rounded-none`})}function Ba({deviceId:e}){let{t}=Z();return Number.isFinite(e)?d(`div`,{className:`flex flex-col h-full overflow-y-auto`,children:d(Cn,{deviceId:e,limit:50,maxHeight:`max-h-full`})}):d(`div`,{className:`flex items-center justify-center h-full text-[11px] text-foreground-subtle italic`,children:t(`device.panelContent.notLoaded`,{id:e})})}function Va({deviceId:e}){let{t}=Z();return Number.isFinite(e)?d(`div`,{className:`flex flex-col h-full overflow-y-auto`,children:d(En,{deviceId:e,limit:50,maxHeight:`max-h-full`})}):d(`div`,{className:`flex items-center justify-center h-full text-[11px] text-foreground-subtle italic`,children:t(`device.panelContent.notLoaded`,{id:e})})}var Ha=960;function Ua({onAdvanced:e}){let{t}=Z();return e===void 0?null:d(`button`,{type:`button`,className:`rounded text-left text-[11px] text-primary hover:underline focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-primary`,onClick:e,children:t(`customize.advancedLink`)})}function Wa(e){if(e.status===`pending`)return{kind:`pending`};if(e.status===`error`)return{kind:`unknown`,reason:e.error?.message??X.t(`helpers.customize.requestFailed`)};let t=e.data;if(t===void 0)return{kind:`pending`};if(t.state===`not-loaded`)return{kind:`not-loaded`,reason:t.reason};if(t.view===null)return{kind:`none`};let n=De(t.view.block);return n===null?{kind:`unknown`,reason:X.t(`helpers.customizationRead.notAComposition`,{id:t.view.block.id})}:{kind:`present`,view:t.view,composition:n}}function Ga(e){return e.kind===`present`?e.composition:null}function Ka(e,t){let{hidden:n,...r}=e??{},i=t?{...r,hidden:!0}:r;return Object.keys(i).length===0?null:i}function qa(e){return typeof e.linkDeviceId==`number`}var Ja=new Set(Object.values(K));function Ya(e){return Ja.has(e)}var Xa={[q.Switch]:[K.Siren,K.Floodlight,K.Spotlight,K.PirSensor,K.Chime,K.Autotrack,K.Nightvision,K.PrivacyMask,K.BinaryHelper],[q.Light]:[K.Floodlight,K.Spotlight,K.Nightvision],[q.Siren]:[K.Siren],[q.Button]:[K.Doorbell],[q.Sensor]:[K.MotionSensor,K.ContactSensor,K.LeakSensor,K.SmokeSensor,K.COSensor,K.GasSensor,K.TamperSensor,K.VibrationSensor,K.ConnectivitySensor,K.SoundSensor,K.BinarySensor,K.TemperatureSensor,K.HumiditySensor,K.AmbientLightSensor,K.PressureSensor,K.WindSensor,K.RainSensor,K.UvSensor,K.SolarRadiationSensor,K.SoilMoistureSensor,K.PowerSensor,K.EnergySensor,K.VoltageSensor,K.CurrentSensor,K.AirQualitySensor,K.BatterySensor,K.NumericSensor,K.EnumSensor,K.DateTimeSensor,K.GenericSensor],[q.Control]:[K.NumericControl,K.SelectControl,K.TextControl,K.DateTimeControl],[q.Notifier]:[K.MobilePushNotifier,K.MessagingNotifier,K.EmailNotifier,K.GenericNotifier]};function Za(e){for(let t of Object.values(q))if(t===e)return!0;return!1}function Qa(e){return Za(e)?Xa[e]??[]:[]}function $a(e,t){let n=Qa(t);return e==null||e===``||n.includes(e)?n:[...n,e]}e();function eo({device:e}){let{t}=Z(),n=ue(),i=c(),[o,s]=r(null),l=()=>s(null),u={onSuccess:()=>{l(),i.invalidateQueries({queryKey:[[`deviceManager`]]})},onError:e=>s(e.message)},f=xt(),p=Jn(),h=e.display?.hidden===!0;return a(`section`,{"aria-label":t(`customize.identity.title`),className:`${E} ${m}`,children:[a(`div`,{className:`grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-4`,children:[d(pi,{deviceId:e.id,initialName:e.name,label:t(`customize.identity.name`),layout:`stacked`,onError:s,onSaved:l,onCancel:l}),d(si,{deviceId:e.id,initialLocation:e.location,label:t(`customize.identity.room`),layout:`stacked`,onError:s,onSaved:l,onCancel:l}),d(ei,{label:t(`customize.identity.hidden`),layout:`stacked`,value:d(rn,{"aria-label":t(`deviceDisplay.hideFromLists`),checked:h,disabled:p.isPending,onChange:t=>p.mutate({deviceId:e.id,display:Ka(e.display,t.target.checked)},u)})}),d(ei,{label:t(`customize.identity.role`),layout:`stacked`,value:qa(e)?d(`span`,{children:to(e.role,t(`customize.identity.noRole`),n)}):d(en,{"aria-label":t(`customize.identity.role`),value:e.role??``,disabled:f.isPending,options:[{value:``,label:t(`customize.identity.noRole`)},...$a(e.role,e.type).map(e=>({value:e,label:to(e,t(`customize.identity.noRole`),n)}))],onChange:t=>f.mutate({deviceId:e.id,role:t.target.value===``?null:t.target.value},u)})})]}),o!==null&&d(`p`,{role:`alert`,className:`mt-2 text-xs text-danger break-words`,children:o})]})}function to(e,t,n){return e==null||e===``?t:Ya(e)?wn(e,n).label:e}function no(e){return new Set(e.filter(e=>{let t=e.nativeAddonId?.trim()??``;return t!==``&&t!==`composer`}).map(e=>e.capName))}function ro(e,t){return{cap:e,apply:t.apply,authority:t.applyAuthority?.kind??`composition-claim`,nativeItemsReadOnly:t.nativeItems===`read-only`}}function io(e){return e.kind===`known`?null:e}function ao(e,t){return e.composable.kind===`known`?e.composable.value.has(t)?{kind:`present`,mode:`add`}:{kind:`absent`}:e.composable}function oo(e){if(e.deviceType!==q.Camera)return{kind:`absent`};switch(e.cameraSensors){case`pending`:return{kind:`pending`};case`unknown`:return{kind:`unknown`,reason:X.t(`helpers.assignmentAvailability.sensorsUnchecked`)};case`absent`:return{kind:`absent`};case`present`:return{kind:`present`,mode:`add`}}}function so(e,t){if(e.authority===`camera-sensors`)return oo(t);let n=io(t.nativeCaps);if(n!==null)return n;let r=t.nativeCaps.kind===`known`?t.nativeCaps.value:new Set;return e.nativeItemsReadOnly?ao(t,e.cap):e.apply===`add`?r.has(e.cap)?{kind:`absent`}:ao(t,e.cap):r.has(e.cap)?{kind:`present`,mode:`replace`}:ao(t,e.cap)}function co(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function lo(e,t){let n=bi(e,t);return n===void 0?{kind:`absent`}:{kind:`value`,value:n}}function uo(e,t,n){return co(t)?lo(t,n):e.status===`error`?{kind:`unknown`,reason:e.error?.message??X.t(`helpers.liveValue.unreadable`)}:e.status===`pending`||e.data===void 0?{kind:`pending`}:e.data===null?{kind:`absent`}:lo(e.data,n)}function fo(e,t,n){let r=e?`active`:`muted`;return t.cap===`contact`&&t.path===`entryOpen`?{text:e?n.open:n.closed,tone:r}:qe[t.cap]===t.path?{text:e?n.active:n.inactive,tone:r}:{text:String(e),tone:`normal`}}function po(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`?fo(r,t,n):typeof r==`number`?{text:t.path===`percentage`?`${Math.round(r)} %`:String(r),tone:`normal`}:typeof r==`string`?{text:r,tone:`normal`}:{text:JSON.stringify(r),tone:`normal`}}}}var mo=0;function ho(e){let t=U(),n=ir({deviceId:e?.deviceId??mo,capName:e?.cap??``},{enabled:e!==null}),r=wr(t.trpcClient,e?.deviceId??null,e?.cap??``);return e===null?{kind:`absent`}:uo({status:n.status,data:n.data,error:n.error===null||n.error===void 0?null:{message:n.error.message}},r,e.path)}var go={muted:`text-foreground-subtle`,active:`text-success`,normal:`text-foreground`,warning:`text-warning`};function _o({target:e}){let{t}=Z(),n=ho(e);return e===null?null:d(vo,{display:po(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 vo({display:e}){return d(`span`,{className:`text-xs ${go[e.tone]}`,title:e.title,children:e.text})}function yo({name:e,detail:t,meta:n,value:r,shown:i,readout:o,problem:s,onRemove:c,removeLabel:l,busy:u=!1}){return a(`li`,{className:`${j} 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:[a(`div`,{className:`min-w-0`,children:[d(`div`,{className:`text-xs text-foreground break-words`,children:e}),t!==null&&d(`div`,{className:`text-[11px] text-foreground-subtle break-words`,children:t}),s!==void 0&&d(`div`,{role:`alert`,className:`text-[11px] text-warning break-words`,children:s})]}),d(`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:n}),d(`div`,{className:`row-start-3 col-start-1 empty:hidden sm:row-start-auto sm:col-start-auto sm:empty:block`,children:o===void 0?i===void 0?d(_o,{target:r}):i!==null&&d(vo,{display:i}):o}),d(`div`,{className:`row-start-1 col-start-2 flex justify-end sm:row-start-auto sm:col-start-auto`,children:c!==void 0&&d(Gr,{icon:ie,variant:`ghost`,size:`sm`,"aria-label":l,disabled:u,onClick:c})})]})}function bo(e,t){if(e.status===`error`)return{kind:`unknown`,reason:e.error?.message??X.t(`helpers.customize.requestFailed`)};let n=e.data;return e.status===`pending`||n===void 0?{kind:`pending`}:{kind:`known`,value:t(n)}}function xo(e,t){let n=Qn.useQueries(n=>e.map(e=>n.deviceManager.listDeviceIdsByCaps({capNames:[e]},{enabled:t})));return Fi(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}}}}))}e();function So(e,t){let n=ar(e,t);return n.kind===`resolved`?n.integration.name:null}function Co(e){let t=Dr({projection:`slim`},{enabled:e}),{data:r}=Tn(void 0,{enabled:e}),i=t.error===null||t.error===void 0?null:t.error.message;return n(()=>bo({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:So(e,r),parentDeviceId:e.parentDeviceId,primaryChildEntityId:e.primaryChildEntityId??null,role:e.role??null}))),[t.status,t.data,i,r])}function wo({id:e,...t}){return d(ur,{headingId:`customize-${e}`,...t})}function To(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 Eo(e,t){let n=e.features.filter(e=>e.cap!==t);return n.length===0?null:{target:e.target,features:n}}function Do(e,t){let n=e?.features.find(e=>e.cap===t);return n!==void 0&&n.kind===`fields`?n:null}function Oo(e){return Array.isArray(e)?e.map(Oo):typeof e!=`object`||!e?e:Object.fromEntries(Object.entries(e).toSorted(([e],[t])=>e.localeCompare(t)).map(([e,t])=>[e,Oo(t)]))}function ko(e){return JSON.stringify(Oo(e))}function Ao(e,t){switch(e.kind){case`pending`:return{kind:`refused`,reason:X.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}:ko(t)===ko(e.composition)?{kind:`noop`}:{kind:`update`,blockId:n,expectedUpdatedAt:e.view.block.updatedAt,composition:t}}}}function jo(){let{t:e}=Z(),t=Qt();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 Mo(e,t,n){let r=Fe[e]?.state?.find(e=>e.field===t);return r===void 0?t:n.startsWith(`it`)?r.label.it:r.label.en}function No(e){return e.toLowerCase().normalize(`NFD`).replace(/[\u0300-\u036f]/g,``).replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``).slice(0,48)}var Po=`kind`,Fo=`unit`,Io=`unit-unknown`;function Lo(e){return`customize.scalar.fit.${e}`}var Ro=`compile`,zo=`dwell`,Bo=`no-value`,Vo=`empty`;function Ho(e){return`customize.scalar.previewFailure.${e}`}function Uo(e){return e===`compile`||e===`dwell`||e===`no-value`||e===`empty`}function Wo({preview:e}){let{t}=Z();return a(`p`,{className:`text-[11px] text-foreground`,"data-testid":`scalar-preview`,children:[a(`span`,{className:`text-foreground-muted`,children:[t(`customize.scalar.preview`),` `]}),e.kind===`pending`&&d(`span`,{children:`…`}),e.kind===`value`&&d(`span`,{children:e.text}),e.kind===`dwell`&&d(`span`,{children:t(`customize.scalar.previewDwell`,{value:e.sourceText,level:e.active?t(`customize.scalar.thresholdActive`):t(`customize.scalar.thresholdClear`),countdown:t(e.active?`customize.scalar.runningIn`:`customize.scalar.stopsAfter`,{seconds:Math.round(e.countdownMs/1e3)})})}),e.kind===`failed`&&d(`span`,{title:Uo(e.reason)?t(Ho(e.reason)):e.reason,className:`text-warning`,children:`?`})]})}function Go(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 Ko(e){return e.transforms.includes(`identity`)?{kind:`identity`}:e.transforms.includes(`threshold`)?qo(e.sourceUnit):e.transforms.includes(`linear`)?{kind:`linear`,scale:1,offset:0}:{kind:`invert`}}function qo(e){let t=e===`W`;return{kind:`threshold`,comparison:`gte`,threshold:t?5:0,startDwellMs:t?Ce:0,stopDwellMs:t?Ee:0}}function Jo(e){let t=Ge({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 Yo({control:e,transforms:t,unit:n,value:r,onChange:i}){let{t:o}=Z();return e===`none`?null:a(`div`,{className:`flex flex-col gap-2`,children:[d(`h3`,{className:`text-[11px] font-medium text-foreground-muted`,children:o(`customize.scalar.stepTransform`)}),e===`choice`&&d(en,{"aria-label":o(`customize.scalar.stepTransform`),value:r.kind,options:t.map(e=>({value:e,label:o(`customize.scalar.transform.${e}`)})),onChange:e=>i(Xo(e.target.value,n))}),r.kind===`invert`||e===`invert`&&r.kind!==`threshold`?a(`label`,{className:`flex items-center gap-2 text-[11px] text-foreground`,children:[d(rn,{checked:r.kind===`invert`,onChange:e=>i(e.target.checked?{kind:`invert`}:{kind:`identity`})}),o(`customize.scalar.invert`)]}):null,r.kind===`threshold`&&d(Zo,{unit:n,value:r,onChange:i}),r.kind===`linear`&&d(Qo,{value:r,onChange:i})]})}function Xo(e,t){return e===`invert`?{kind:`invert`}:e===`threshold`?qo(t):e===`linear`?{kind:`linear`,scale:1,offset:0}:{kind:`identity`}}function Zo({unit:e,value:t,onChange:n}){let{t:r}=Z();return a(`div`,{className:`flex flex-col gap-2 text-[11px] text-foreground`,children:[d($o,{label:r(`customize.scalar.threshold`,{unit:e??``}),value:t.threshold,onChange:e=>n({...t,threshold:e})}),d($o,{label:r(`customize.scalar.startDwell`),value:t.startDwellMs/1e3,onChange:e=>n({...t,startDwellMs:e*1e3})}),d($o,{label:r(`customize.scalar.stopDwell`),value:t.stopDwellMs/1e3,onChange:e=>n({...t,stopDwellMs:e*1e3})})]})}function Qo({value:e,onChange:t}){let{t:n}=Z();return a(`div`,{className:`flex flex-col gap-2 text-[11px] text-foreground`,children:[d($o,{label:n(`customize.scalar.scale`),value:e.scale,onChange:n=>t({...e,scale:n})}),d($o,{label:n(`customize.scalar.offset`),value:e.offset,onChange:n=>t({...e,offset:n})})]})}function $o({label:e,value:t,onChange:n}){return a(`label`,{className:`flex flex-col gap-1`,children:[e,d(dn,{type:`number`,value:Number.isFinite(t)?t:0,onChange:e=>{let t=Number(e.target.value);Number.isFinite(t)&&n(t)}})]})}function es(e){return e===`identity`||e===`invert`||e===`threshold`||e===`linear`}function ts(e){return Object.hasOwn($e,e)}function ns(e){return ts(e)?$e[e].targets:[]}function rs(e,t){let n=ns(e).find(e=>e.id===t);return n?.cardinality===`keyedArray`?n.fields??[]:[]}function is(e,t){return ns(e).find(e=>e.id===t)?.traits??[]}function as(e,t){return e.caps.flatMap(e=>{let n=os(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 os(e,t){if(e===null)return null;let n=bi(e[t],`unit`);return typeof n==`string`&&n.length>0?n:null}function ss(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 cs(e,t,n,r){let i=rs(e,t).find(e=>e.path===n);if(i===void 0)return{ok:!1,reason:`kind`};let a=ss(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(es);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}}}function ls(e,t,n){return rs(e,t).find(e=>e.path===n)?.enumValues??[]}function us(e){return!e.ok||e.mode===`enum`?{kind:`identity`}:Ko(e.fit)}function ds(e,t){return Object.fromEntries(e.map(e=>[e,t.includes(e)?e:null]))}function fs(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=we({cap:e.cap,targetId:e.targetId,device:e.device,apply:e.apply,items:[t]});return n.ok?n.value:null}function ps(e,t,n){return(rs(e,t).find(e=>e.path===n)?.literals??[]).map(e=>e.path)}function ms(e,t,n,r){return rs(e,t).find(e=>e.path===n)?.literals?.find(e=>e.path===r)?.values??[]}function hs(e,t,n){return ls(e,t,n)}e();var gs={level:`customize.keyed.field.level`,"remaining.value":`customize.keyed.field.remaining`,status:`customize.keyed.field.status`};function _s(e){return e===`pending`?`pending`:e===`error`?`failed`:`answered`}function vs(e){let{t}=Z(),n=e.mode===`change`?t(`customize.keyed.changeTitle`):t(`customize.keyed.addTitle`);return d(fr,{open:e.open,onOpenChange:t=>t?void 0:e.onClose(),children:a($n,{width:`md`,placement:`sheet-on-mobile`,scroll:`body`,"aria-label":n,children:[d(Er,{children:d(zn,{children:n})}),e.open&&d(ys,{...e,heading:n})]})})}function ys(e){let{t,i18n:i}=Z(),o=is(e.cap,e.targetId),c=rs(e.cap,e.targetId),[l,u]=r(e.seed?.label??``),[f,p]=r(e.seed?.key??``),[m,h]=r(e.mode===`change`),[g,_]=r(e.seed?.fieldPath??c[0]?.path??``),[v,y]=r(()=>Object.fromEntries(o.map(t=>[t.path,e.seed?.literals.find(e=>e.path===t.path)?.value??t.defaultValue]))),[b,x]=r(e.seed?.literals.find(e=>e.path===`remaining.unit`)?.value??ms(e.cap,e.targetId,`remaining.value`,`remaining.unit`)[0]??``),S=Dr({projection:`slim`}),C=n(()=>S.status===`success`?Si(S.data):[],[S.status,S.data]),w=Ds(e.seed,C),[T,E]=r(null),[D,O]=r(!1);!D&&w!==null&&(E(w),O(!0));let k=Vn({deviceId:T?.id??0}),A=yt({deviceId:T?.id??0}),j=as(k.status===`success`?k.data:{caps:[]},A.status===`success`?A.data:null),[M,N]=r(e.seed===null?null:`${e.seed.source.cap}.${e.seed.source.fieldPath}`),[P,F]=r(e.seed?.transform??{kind:`identity`}),[ee,I]=r(()=>e.seed?.transform.kind===`enum-map`?e.seed.transform.mapping:{}),te=j.find(e=>`${e.cap}.${e.path}`===M)??null,L=te===null?null:cs(e.cap,e.targetId,g,te),ne=m?f:No(l),R=xs(e.cap,e.targetId,g,v,b),re=Ss(T,te,L,ee,P),ie=re===null?null:fs({cap:e.cap,targetId:e.targetId,device:e.target,apply:e.apply,key:ne,label:l,fieldPath:g,source:re,transform:re.transform,literals:R}),z=Cs(ie,ne,g,te,A.status===`success`?A.data:null),B=typeof e.host.location==`string`&&e.host.location.length>0?e.host.location:null,V=e=>{u(e),m||p(No(e))};return a(s,{children:[a(Sr,{className:`flex flex-col gap-3 p-2 sm:p-4`,children:[a(`label`,{className:`flex flex-col gap-1 text-xs text-foreground`,children:[t(`customize.keyed.name`),d(dn,{value:l,onChange:e=>V(e.target.value)})]}),a(`label`,{className:`flex flex-col gap-1 text-xs text-foreground`,children:[t(`customize.keyed.key`),d(dn,{value:ne,disabled:e.mode===`change`,onChange:e=>{h(!0),p(e.target.value)}})]}),a(`label`,{className:`flex flex-col gap-1 text-xs text-foreground`,children:[t(`customize.keyed.assignField`),d(en,{value:g,options:c.map(e=>({value:e.path,label:t(gs[e.path]??e.path)})),onChange:e=>{_(e.target.value),N(null),F({kind:`identity`})}})]}),o.map(e=>a(`label`,{className:`flex flex-col gap-1 text-xs text-foreground`,children:[t(`customize.keyed.trait.${e.path}`),d(en,{value:v[e.path]??e.defaultValue,options:e.values.map(e=>({value:e,label:t(`customize.keyed.value.${e}`)})),onChange:t=>y(n=>({...n,[e.path]:t.target.value}))})]},e.path)),ps(e.cap,e.targetId,g).map(n=>a(`label`,{className:`flex flex-col gap-1 text-xs text-foreground`,children:[t(`customize.keyed.unit`),d(en,{value:b,options:ms(e.cap,e.targetId,g,n).map(e=>({value:e,label:t(`customize.keyed.value.${e}`)})),onChange:e=>x(e.target.value)})]},n)),a(`section`,{className:`flex flex-col gap-1`,"aria-label":t(`customize.scalar.stepDevice`),children:[d(`h3`,{className:`text-[11px] font-medium text-foreground-muted`,children:t(`customize.scalar.stepDevice`)}),T===null?S.status===`error`?d(Y,{title:t(`customize.picker.devicesFailed`),message:S.error?.message??``}):d(Kt,{devices:Es(C,e.host.id),listState:_s(S.status),value:[],selection:`single`,...B===null?{}:{groupBy:`location`},onChange:e=>{let t=e[0],n=t===void 0?void 0:C.find(e=>e.id===t);n!==void 0&&(E(n),N(null))},noun:`device`,showAll:!0,testId:`keyed-device-picker`}):a(`p`,{className:`flex flex-wrap items-center gap-2 text-xs text-foreground`,children:[T.name,d(J,{variant:`ghost`,size:`sm`,onClick:()=>E(null),children:t(`customize.scalar.changeDevice`)})]})]}),T!==null&&d(`ul`,{className:`flex flex-col gap-1`,children:j.map(n=>{let r=cs(e.cap,e.targetId,g,n),o=`${n.cap}.${n.path}`,s=r.ok&&(r.mode===`scalar`||n.enumValues.length>0);return a(`li`,{className:`flex flex-wrap items-center gap-2 text-[11px]`,children:[a(`label`,{className:`flex items-center gap-2 text-foreground`,children:[d(`input`,{type:`radio`,name:`keyed-field`,checked:M===o,disabled:!s,onChange:()=>H(n,r)}),a(`span`,{children:[Mo(n.cap,n.path,i.language),n.unit===null?``:` (${n.unit})`]})]}),!r.ok&&d(`span`,{className:`text-foreground-subtle`,children:t(Lo(r.reason))})]},o)})}),L?.ok===!0&&L.mode===`scalar`&&d(Yo,{control:L.fit.transforms.includes(`linear`)?`choice`:`none`,transforms:L.fit.transforms,unit:L.fit.sourceUnit,value:P,onChange:F}),L?.ok===!0&&L.mode===`enum`&&te!==null&&d(bs,{values:te.enumValues,outputs:hs(e.cap,e.targetId,g),mapping:ee,onChange:I}),z!==null&&d(Wo,{preview:z})]}),a(hr,{className:`flex flex-wrap gap-2`,children:[d(J,{variant:`ghost`,onClick:e.onClose,children:t(`customize.scalar.cancel`)}),d(J,{"data-testid":`keyed-save-item`,disabled:!e.canSave||ie===null||ne===``,onClick:()=>{ie!==null&&e.onSave(ie,ne)},children:t(`customize.keyed.save`)})]})]});function H(t,n){if(n.ok){if(N(`${t.cap}.${t.path}`),n.mode===`enum`){let n=ds(t.enumValues,hs(e.cap,e.targetId,g));I(n),F({kind:`enum-map`,mapping:{...n}});return}F(us(n))}}}function bs(e){let{t}=Z();return d(`div`,{className:`flex flex-col gap-1`,children:e.values.map(n=>a(`label`,{className:`flex flex-wrap items-center gap-2 text-xs text-foreground`,children:[n,d(en,{value:e.mapping[n]??``,options:[{value:``,label:t(`customize.keyed.unmapped`)},...e.outputs.map(e=>({value:e,label:t(`customize.keyed.value.${e}`)}))],onChange:t=>e.onChange({...e.mapping,[n]:t.target.value===``?null:t.target.value})})]},n))})}function xs(e,t,n,r,i){let a=Object.entries(r).map(([e,t])=>({path:e,value:t})),o=ps(e,t,n).flatMap(e=>i===``?[]:[{path:e,value:i}]);return[...a,...o]}function Ss(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 Cs(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=bi(i[r.cap],r.path);if(a.kind===`from`)return ws(o);if(a.kind!==`expression`)return{kind:`failed`,reason:`compile`};let s=Ts(o);if(s===void 0)return{kind:`failed`,reason:`no-value`};let c=et(a.expr,{x:s},Date.now());return c.ok?ws(c.value):{kind:`failed`,reason:c.error}}function ws(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 Ts(e){if(typeof e==`number`||typeof e==`string`||typeof e==`boolean`)return e;if(e===null)return null}function Es(e,t){return e.filter(e=>e.id!==t).map(e=>({id:e.id,name:e.name,type:e.type,...e.location===null?{}:{location:e.location}}))}function Ds(e,t){return e===null?null:t.find(t=>t.addonId===e.source.addonId&&t.stableId===e.source.stableId)??null}var Os=`consumables`,ks=`items`,As=Ve.shape.items;function js(e){let t=e.split(`.`).pop()??e,n=t.replace(/Level$/,``);return n===``?t:n}function Ms(e){let t=e.replace(/([a-z0-9])([A-Z])/g,`$1 $2`).toLowerCase();return t.charAt(0).toUpperCase()+t.slice(1)}function Ns(e,t){return e.caps.filter(e=>t.has(e.cap)&&e.cap!==`consumables`).flatMap(e=>e.fields.filter(e=>e.item!==!0&&pn(e)).map(t=>({kind:`field`,key:js(t.path),cap:e.cap,path:t.path})))}function Ps(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=As.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 Fs(e,t,n){if(e.kind!==`known`)return e;if(t.kind!==`known`)return t;let r=Ns(t.value,e.value);if(!e.value.has(`consumables`)||n===null)return{kind:`known`,value:r};let i=Ps(n);return i.kind===`known`?{kind:`known`,value:[...r,...i.value]}:i}function Is(e){return e.defaults.map(t=>t.kind===`field`?d(Ls,{deviceId:e.deviceId,entry:t},`field:${t.cap}.${t.path}`):d(zs,{entry:t},`item:${t.key}`))}function Ls(e){let{t}=Z(),n=ho({deviceId:e.deviceId,cap:e.entry.cap,path:e.entry.path});return d(yo,{name:t(`customize.consumables.fields.${e.entry.key}`,{defaultValue:Ms(e.entry.key)}),detail:t(`customize.consumables.builtIn`),meta:t(`customize.assign.native`),value:null,readout:d(Rs,{value:n}),removeLabel:``})}function Rs(e){switch(e.value.kind){case`pending`:return d(vo,{display:{text:`…`,tone:`muted`}});case`unknown`:return d(vo,{display:{text:`?`,title:e.value.reason,tone:`warning`}});case`absent`:return d(In,{level:null,size:`sm`});case`value`:return d(In,{level:St(e.value.value),size:`sm`})}}function zs(e){let{t}=Z(),{item:n}=e.entry,r=n.level===null?n.status===`replace`?t(`uiLibrary.consumablesPanel.replace`):void 0:`${Math.round(n.level)} %`;return d(yo,{name:n.label,detail:t(`customize.consumables.builtIn`),meta:t(`customize.assign.native`),value:null,readout:d(In,{level:zr(n),label:r,size:`sm`}),removeLabel:``})}e();var Bs={consumables:O};function Vs(){return Object.entries($e).flatMap(([e,t])=>t.targets.filter(e=>e.cardinality===`keyedArray`).map(t=>({cap:e,target:t})))}function Hs(e){let{t,i18n:n}=Z(),i=jo(),[o,c]=r(null),[l,u]=r(null),f=Ga(e.handle.state),p=Do(f,e.cap),m=Gs(e.handle,p),h=m.kind===`known`&&m.value!==null?Re(m.value,e.cap,e.target.id):null,g=Co(h!==null),_=Ks(h,g),v=Ie({cap:e.cap,targetId:e.target.id,device:e.handle.target,stored:m,sourcePresence:_,sourceUnknownReason:g.kind===`unknown`?g.reason:null});if(!Ws(e,p))return null;let y=e.handle.state.kind===`none`||e.handle.state.kind===`present`,b=e.availability.kind===`present`&&y,x=e.target.apply===`replace`?`replace`:`add`,S=t(`customize.keyed.title.${e.cap}`),C=Ys(t,v.text,v.assignedCount),w=async t=>{let n=await e.handle.save(t);u(n.kind===`refused`?n.reason:null)},T=async n=>{if(f===null||p===null)return;let r=tt(p,n.key),a=r===null?Eo(f,e.cap):To(f,e.handle.target,r);await i(t(`customize.consumables.removeWhat`,{name:n.label}),a===null)&&await w(a)},E=o!==null&&o!==`add`?Js(h,o):null;return a(s,{children:[d(wo,{id:e.cap,icon:Bs[e.cap],title:S,testId:`keyed-card-${e.cap}`,actions:d(zt,{children:C}),children:a(`div`,{className:`flex flex-col gap-2 px-3 py-2 sm:px-4`,children:[e.defaults.kind===`known`&&d(Is,{deviceId:e.device.id,defaults:e.defaults.value}),e.defaults.kind===`unknown`&&d(Y,{title:t(`customize.consumables.builtIn`),message:t(`customize.consumables.builtInUnreadable`,{reason:e.defaults.reason})}),h?.items.map(t=>d(Us,{deviceId:e.device.id,cap:e.cap,item:t,language:n.language,sourceName:qs(t,g),saving:e.handle.saving,onChange:()=>c(t.key),onRemove:()=>void T(t),onAdvanced:e.onAdvanced},t.key)),l!==null&&d(`p`,{role:`alert`,className:`text-xs text-danger break-words`,children:l}),b&&d(J,{variant:`outline`,size:`sm`,"data-testid":`keyed-add-${e.cap}`,disabled:e.handle.saving,onClick:()=>c(`add`),children:t(`customize.keyed.add`)})]})}),d(vs,{open:o!==null,mode:o===`add`?`add`:`change`,cap:e.cap,targetId:e.target.id,host:e.device,target:e.handle.target,apply:x,seed:E,canSave:y&&!e.handle.saving,onClose:()=>c(null),onSave:(n,r)=>{if(o===`add`&&p?.items!==void 0&&p.items[r]!==void 0){u(t(`customize.keyed.duplicateKey`,{key:r}));return}let i=Oe(p,n,r);c(null),i!==null&&(u(null),w(To(f,e.handle.target,i)))}})]})}function Us(e){let{t}=Z(),n=e.item.compile,r=e.item.recognized&&n!==null,i=n===null?``:Mo(n.draft.source.cap,n.draft.source.fieldPath,e.language),o=r?[e.sourceName??``,i].filter(e=>e.length>0).join(` · `):t(`customize.consumables.otherFormula`),s=n===null?null:Ze(Me,e.item.key,n.draft.fieldPath);return a(`div`,{className:`flex flex-col gap-1`,"data-testid":`keyed-row-${e.item.key}`,children:[d(yo,{name:e.item.label,detail:o,meta:r?t(`customize.keyed.assigned`):null,value:s===null?null:{deviceId:e.deviceId,cap:e.cap,path:s},readout:s===null?null:d(_o,{target:{deviceId:e.deviceId,cap:e.cap,path:s}}),removeLabel:``}),a(`div`,{className:`flex flex-wrap gap-2`,children:[r&&d(J,{variant:`outline`,size:`sm`,disabled:e.saving,onClick:e.onChange,children:t(`customize.keyed.change`)}),r&&d(J,{variant:`ghost`,size:`sm`,disabled:e.saving,onClick:e.onRemove,children:t(`customize.keyed.remove`)}),!r&&d(Ua,{onAdvanced:e.onAdvanced})]})]})}function Ws(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 Gs(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 Ks(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=G(n);return t.value.some(e=>G({addonId:e.addonId,stableId:e.stableId})===r)})?`present`:`absent`}function qs(e,t){let n=e.compile?.draft.source;if(n===void 0||t.kind!==`known`)return null;let r=G(n);return t.value.find(e=>G({addonId:e.addonId,stableId:e.stableId})===r)?.name??null}function Js(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 Ys(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 Xs(e){return d(s,{children:Vs().map(t=>t.target.deviceTypes.includes(e.device.type)?d(Hs,{device:e.device,handle:e.handle,availability:so(ro(t.cap,t.target),e.facts),cap:t.cap,target:t.target,defaults:e.defaults,onAdvanced:e.onAdvanced},t.cap):null)})}function Zs(e){return e===`identity`||e===`invert`||e===`threshold`||e===`linear`}function Qs(e,t){let n=Object.entries($e).find(([t])=>t===e)?.[1];return n===void 0?null:n.targets.find(e=>e.id===t)??null}function $s(e,t){return Qs(e,t)?.path??null}function ec(e,t){return e.caps.flatMap(e=>{let n=tc(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 tc(e,t){if(e===null)return null;let n=bi(e[t],`unit`);return typeof n==`string`&&n.length>0?n:null}function nc(e,t){return t.kind===`boolean`&&t.cap===`switch`?e.find(e=>e.kind===`switch`)??null:t.kind===`boolean`?e.find(e=>e.kind===`binary`)??e.find(e=>e.kind===`field`&&e.valueKinds?.includes(`boolean`))??null: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 rc(e,t,n){let r=Qs(e,t);if(r===null||r.cardinality!==`scalar`||n.kind===`enum`)return{ok:!1,reason:Po};let i=nc(r.sources,n);if(i===null)return{ok:!1,reason:Po};if(i.requiredUnit!==void 0&&n.unit===null)return{ok:!1,reason:Io};if(i.requiredUnit!==void 0&&n.unit!==i.requiredUnit)return{ok:!1,reason:Fo};let a=i.transformKinds.filter(Zs);return a.length===0?{ok:!1,reason:Po}:{ok:!0,valueKind:n.kind,sourceUnit:i.requiredUnit??null,transforms:a}}function ic(e){let t=Jo(e);if(t===null)return{kind:`failed`,reason:Ro};if(e.transform.kind===`threshold`)return ac(e.transform,e);let n=$s(e.cap,e.targetId),r=n===null?void 0:t.fields[n];if(r===void 0)return{kind:`failed`,reason:Ro};if(r.kind===`from`)return sc(e.sourceValue);if(r.kind!==`expression`)return{kind:`failed`,reason:Ro};if(r.expr.startsWith(`dwell(`))return{kind:`failed`,reason:zo};let i=oc(e.sourceValue);if(i===void 0)return{kind:`failed`,reason:Bo};let a=et(r.expr,{x:i},e.nowMs);return a.ok?sc(a.value):{kind:`failed`,reason:a.error}}function ac(e,t){if(typeof t.sourceValue!=`number`||!Number.isFinite(t.sourceValue))return{kind:`failed`,reason:Bo};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 oc(e){if(typeof e==`number`||typeof e==`string`||typeof e==`boolean`)return e;if(e===null)return null}function sc(e){return e==null||typeof e==`number`&&!Number.isFinite(e)?{kind:`failed`,reason:Vo}:typeof e==`number`||typeof e==`string`||typeof e==`boolean`?{kind:`value`,text:String(e)}:{kind:`failed`,reason:Vo}}e();function cc(e){return e===`pending`?`pending`:e===`error`?`failed`:`answered`}function lc(e){let{t}=Z(),n=e.mode===`change`?t(`customize.scalar.changeTitle`,{title:e.title}):t(`customize.scalar.addTitle`,{title:e.title});return d(fr,{open:e.open,onOpenChange:t=>t?void 0:e.onClose(),children:a($n,{width:`md`,placement:`sheet-on-mobile`,scroll:`body`,"aria-label":n,children:[d(Er,{children:d(zn,{children:n})}),e.open&&d(uc,{...e,heading:n})]})})}function uc(e){let{t,i18n:i}=Z(),o=Dr({projection:`slim`}),c=n(()=>o.status===`success`?Si(o.data):[],[o.status,o.data]),l=mc(e.seed,c),[u,f]=r(null),[p,m]=r(!1);!p&&l!==null&&(f(l),m(!0));let h=Vn({deviceId:u?.id??0}),g=yt({deviceId:u?.id??0}),_=h.status===`success`?h.data:{caps:[]},v=ec(_,g.status===`success`?g.data:null),[y,b]=r(hc(e.seed)),[x,S]=r(e.seed?.transform??{kind:`identity`}),C=v.find(e=>dc(e)===y)??null,w=C===null?null:rc(e.cap,e.targetId,C),T=C===null||w===null||!w.ok?null:fc(u,C,w,_),E=T===null?null:Jo({cap:e.cap,targetId:e.targetId,device:e.target,apply:e.apply,source:T,transform:x}),D=C===null||g.status!==`success`||u===null?void 0:bi(g.data[C.cap],C.path),O=T===null?null:g.status===`pending`?{kind:`pending`}:ic({cap:e.cap,targetId:e.targetId,device:e.target,apply:e.apply,source:T,transform:x,sourceValue:D,nowMs:Date.now()}),k=typeof e.host.location==`string`&&e.host.location.length>0?e.host.location:null,A=e=>{let t=c.find(t=>t.id===e);t!==void 0&&(f(t),b(null),S({kind:`identity`}))},j=t=>{let n=rc(e.cap,e.targetId,t);n.ok&&(b(dc(t)),S(Ko(n)))};return a(s,{children:[a(Sr,{className:`flex flex-col gap-3 p-2 sm:p-4`,children:[a(`section`,{className:`flex flex-col gap-1`,"aria-label":t(`customize.scalar.stepDevice`),children:[d(`h3`,{className:`text-[11px] font-medium text-foreground-muted`,children:t(`customize.scalar.stepDevice`)}),u===null?d(s,{children:o.status===`error`?d(Y,{title:t(`customize.picker.devicesFailed`),message:o.error?.message??``}):d(Kt,{devices:pc(c,e.host.id),listState:cc(o.status),value:[],selection:`single`,...k===null?{}:{groupBy:`location`},onChange:e=>{let t=e[0];t!==void 0&&A(t)},noun:`device`,showAll:!0,testId:`scalar-device-picker`})}):a(`p`,{className:`flex flex-wrap items-center gap-2 text-xs text-foreground`,children:[u.name,d(J,{variant:`ghost`,size:`sm`,onClick:()=>f(null),children:t(`customize.scalar.changeDevice`)})]})]}),u!==null&&a(`section`,{className:`flex flex-col gap-1`,"aria-label":t(`customize.scalar.stepField`),children:[d(`h3`,{className:`text-[11px] font-medium text-foreground-muted`,children:t(`customize.scalar.stepField`)}),h.status===`pending`&&d(`p`,{role:`status`,className:`text-[11px] text-foreground-subtle`,children:t(`customize.picker.loadingFields`)}),h.status===`error`&&d(Y,{title:t(`customize.picker.fieldsFailed`),message:h.error?.message??``}),h.status===`success`&&d(`ul`,{className:`flex flex-col gap-1`,children:v.map(n=>{let r=rc(e.cap,e.targetId,n),o=dc(n);return a(`li`,{className:`flex flex-wrap items-center gap-2 text-[11px]`,children:[a(`label`,{className:`flex items-center gap-2 text-foreground`,children:[d(`input`,{type:`radio`,name:`scalar-field`,checked:y===o,disabled:!r.ok,onChange:()=>j(n)}),a(`span`,{children:[Mo(n.cap,n.path,i.language),n.unit===null?``:` (${n.unit})`]})]}),!r.ok&&d(`span`,{className:`text-foreground-subtle`,children:t(Lo(r.reason))})]},o)})})]}),w!==null&&w.ok&&d(Yo,{control:Go(w.transforms),transforms:w.transforms,unit:w.sourceUnit,value:x,onChange:S}),O!==null&&d(Wo,{preview:O})]}),a(hr,{className:`flex flex-wrap gap-2`,children:[d(J,{variant:`ghost`,onClick:e.onClose,children:t(`customize.scalar.cancel`)}),d(J,{"data-testid":`scalar-save-override`,disabled:!e.canSave||E===null,onClick:()=>{E!==null&&e.onSave(E)},children:t(`customize.scalar.save`)})]})]})}function dc(e){return`${e.cap}.${e.path}`}function fc(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 pc(e,t){return e.filter(e=>e.id!==t).map(e=>({id:e.id,name:e.name,type:e.type,...e.location===null?{}:{location:e.location}}))}function mc(e,t){return e===null?null:t.find(t=>t.addonId===e.source.addonId&&t.stableId===e.source.stableId)??null}function hc(e){return e===null?null:`${e.source.cap}.${e.source.fieldPath}`}var gc=`Assigned · `;function _c(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(gc)){let n=e.slice(11);return{kind:`assigned`,source:t??n}}return{kind:`unknown`}}e();var vc={battery:N,"running-state":fe};function yc(){return Object.entries($e).flatMap(([e,t])=>t.targets.filter(e=>e.cardinality===`scalar`).map(t=>({cap:e,target:t})))}function bc({device:e,handle:t,availability:n,cap:i,target:o,onAdvanced:c}){let{t:l,i18n:u}=Z(),f=jo(),[p,m]=r(!1),[h,g]=r(null),_=l(`customize.scalar.caps.${i}`),v=o.path??o.id,y=Ga(t.state),b=Sc(t,Do(y,i)),x=b.kind===`known`&&b.value!==null?Ye({feature:b.value,device:t.target,cap:i,targetId:o.id}):null,S=x!==null,C=Co(S),w=x===null||C.kind!==`known`?null:C.value.find(e=>G({addonId:e.addonId,stableId:e.stableId})===G(x.draft.source))??null,T=w?.name??null,E=Cc(S,C.kind,w!==null),D=nt({cap:i,targetId:o.id,device:t.target,stored:b,sourcePresence:E,sourceUnknownReason:C.kind===`unknown`?C.reason:null}),O=_c(D.text,T),k=t.state.kind===`none`||t.state.kind===`present`,A=n.kind===`present`?n.mode:null;if(n.kind===`absent`||!o.deviceTypes.includes(e.type))return null;let j=async e=>{let n=await t.save(e);g(n.kind===`refused`?n.reason:null)},M=async()=>{if(y===null)return;let t=Eo(y,i);await f(l(`customize.scalar.removeWhat`,{name:T??(x===null?e.name:G(x.draft.source))}),t===null)&&await j(t)},N=x===null?null:{source:{addonId:x.draft.source.addonId,stableId:x.draft.source.stableId,cap:x.draft.source.cap,fieldPath:x.draft.source.fieldPath,valueKind:x.sourceValueKind,sourceUnit:x.sourceUnit,changedAtField:x.changedAtField},transform:x.draft.transform},P=O.kind===`assigned`?l(`customize.scalar.badge.assigned`,{source:O.source}):l(`customize.scalar.badge.${O.kind}`);return a(s,{children:[d(wo,{id:i,icon:vc[i],title:_,testId:`scalar-card-${i}`,actions:d(zt,{children:P}),children:d(xc,{availability:n,answered:k,deviceId:e.id,cap:i,path:v,recognized:S,stored:b,presence:E,released:D.status.state===`released`,sourceName:T,sourceCap:x?.draft.source.cap??``,sourceField:x===null?``:Mo(x.draft.source.cap,x.draft.source.fieldPath,u.language),sourcePath:x?.draft.source.fieldPath??``,sourceDeviceId:w?.id??null,error:h,saving:t.saving,mode:A,onOpen:()=>m(!0),onRemove:()=>void M(),onAdvanced:c})}),A!==null&&d(lc,{open:p,mode:N===null?`add`:`change`,title:_,cap:i,targetId:o.id,host:e,target:t.target,apply:A,seed:N,canSave:k&&!t.saving,onClose:()=>m(!1),onSave:e=>{m(!1),j(To(y,t.target,e))}})]})}function xc(e){let{t}=Z();if(e.availability.kind===`pending`||e.availability.kind===`present`&&!e.answered)return d(`p`,{role:`status`,className:`px-3 py-2 text-xs text-foreground-subtle sm:px-4`,children:t(`customize.scalar.checking`)});if(e.availability.kind===`unknown`)return d(`div`,{className:`px-3 py-2 sm:px-4`,children:d(Y,{title:t(`customize.scalar.unreadable`),message:e.availability.reason})});let n=e.stored.kind===`known`&&e.stored.value===null,r=!e.recognized&&e.stored.kind===`known`&&e.stored.value!==null;return a(`div`,{className:`flex flex-col gap-2 px-3 py-2 sm:px-4`,children:[a(`div`,{className:`flex flex-wrap items-baseline justify-between gap-2`,children:[d(`span`,{className:`text-xs text-foreground`,children:t(`customize.scalar.effective`)}),d(_o,{target:{deviceId:e.deviceId,cap:e.cap,path:e.path}})]}),e.released&&d(`p`,{className:`text-xs text-foreground`,children:t(`customize.scalar.released`)}),e.presence===`unknown`&&e.recognized&&d(Y,{title:t(`customize.scalar.sourceUnreadable`),message:t(`customize.scalar.sourceHeld`,{name:e.sourceName??e.sourceCap})}),e.recognized&&!e.released&&a(`div`,{className:`flex flex-wrap items-baseline justify-between gap-2`,children:[d(`span`,{className:`text-xs text-foreground`,children:t(`customize.scalar.override`,{name:e.sourceName??`…`,field:e.sourceField})}),e.sourceDeviceId!==null&&d(_o,{target:{deviceId:e.sourceDeviceId,cap:e.sourceCap,path:e.sourcePath}})]}),r&&a(`p`,{className:`text-xs text-foreground`,children:[t(`customize.scalar.otherFormula`),` `,d(Ua,{onAdvanced:e.onAdvanced})]}),n&&d(`p`,{className:`text-xs text-foreground-subtle`,children:t(`customize.scalar.noOverride`)}),e.error!==null&&d(`p`,{role:`alert`,className:`text-xs text-danger break-words`,children:e.error}),a(`div`,{className:`flex flex-wrap gap-2`,children:[e.recognized&&d(J,{variant:`outline`,size:`sm`,onClick:e.onOpen,disabled:e.saving,children:e.released?t(`customize.scalar.chooseAnother`):t(`customize.scalar.change`)}),e.recognized&&d(J,{variant:`ghost`,size:`sm`,onClick:e.onRemove,disabled:e.saving,children:t(`customize.scalar.remove`)}),n&&d(J,{variant:`outline`,size:`sm`,"data-testid":`scalar-add-${e.cap}`,disabled:e.saving||e.mode===null,onClick:e.onOpen,children:t(`customize.scalar.add`)})]})]})}function Sc(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 Cc(e,t,n){return e?t===`pending`?`pending`:t===`unknown`?`unknown`:n?`present`:`absent`:`present`}function wc({device:e,handle:t,facts:n,onAdvanced:r}){return d(s,{children:yc().map(i=>i.target.deviceTypes.includes(e.type)?d(bc,{device:e,handle:t,availability:so(ro(i.cap,i.target),n),cap:i.cap,target:i.target,onAdvanced:r},i.cap):null)})}var Tc={binary:`binary`,switch:`switch`};function Ec(e){return Object.hasOwn($e,e)}function Dc(e,t){if(!Ec(e))return null;let n=$e[e].targets.find(e=>e.id===t);return n===void 0||n.cardinality!==`event`?null:n}function Oc(e,t){let n=Dc(e,t);if(n===null)return[];let r=[];for(let e of n.sources){let t=Tc[e.kind];t!==void 0&&r.push(t)}return r}function kc(e,t){return t.some(t=>e.includes(t))}function Ac(e,t){let n=We[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 jc(e,t,n,r){let i=Dc(t,n);if(i===null)return null;let a=ec(e,null).filter(e=>e.kind===`boolean`);for(let t of a){if(nc(i.sources,t)===null)continue;let n=Ac(e,t.cap);if(!(r===`pulse`&&n===null))return{cap:t.cap,fieldPath:t.path,changedAtField:n}}return null}function Mc(e,t,n,r){return e.filter(e=>e.id!==t).filter(e=>!kc(n.get(e.id)??[],r)).map(e=>e.id)}function Nc(e,t){return e.filter(e=>e.id!==t).map(e=>({id:e.id,name:e.name,type:e.type,...e.location===null?{}:{location:e.location}}))}function Pc(e){let t=rt({draft:{kind:`pulse`,cap:e.cap,targetId:e.targetId,enabled:e.enabled,debounceMs:e.debounceMs,sources:e.sources.map(e=>({addonId:e.addonId,stableId:e.stableId,cap:e.cap,fieldPath:e.fieldPath}))},device:e.device,changedAtFields:e.sources.map(e=>e.changedAtField)});return t.ok?t.value:null}function Fc(e){let t=Qe({draft:{kind:`span`,cap:e.cap,targetId:e.targetId,timeoutMs:e.timeoutMs,...e.cooldownMs===void 0?{}:{cooldownMs:e.cooldownMs},sources:e.sources.map(e=>({addonId:e.addonId,stableId:e.stableId,cap:e.cap,fieldPath:e.fieldPath,mode:e.mode}))},device:e.device});return t.ok?t.value:null}function Ic(e,t){return{deviceId:e,config:t.config}}function Lc(e,t){return{deviceId:e,patch:{motionCooldownMs:t}}}async function Rc(e,t,n,r){await n(Ic(e,t)),await r(Lc(e,t.timeoutMs))}e();function zc(e){return e===`pending`?`pending`:e===`error`?`failed`:`answered`}function Bc(e){let{t}=Z(),n=e.mode===`change`?t(`customize.scalar.changeTitle`,{title:e.title}):t(`customize.scalar.addTitle`,{title:e.title});return d(fr,{open:e.open,onOpenChange:t=>!t&&e.onClose(),children:a($n,{placement:`sheet-on-mobile`,scroll:`body`,"aria-label":n,children:[d(Er,{children:d(zn,{children:n})}),e.open?d(Vc,{...e}):null]})})}function Vc(e){let{t,i18n:i}=Z(),o=Dr({projection:`slim`}),c=o.status===`success`?Si(o.data):[],[l,u]=r(Wc(e.seed,c)),[f,p]=r(e.debounceMs/1e3),m=Vn({deviceId:l?.id??0}),h=yt({deviceId:l?.id??0}),g=m.status===`success`?m.data:{caps:[]},_=n(()=>Oc(e.cap,e.targetId),[e.cap,e.targetId]),v=xo(_,e.open),y=n(()=>v.kind===`known`?Mc(c,e.host.id,v.value,_):[],[v,c,e.host.id,_]),b=l===null?null:jc(g,e.cap,e.targetId,`pulse`),x=l===null||b===null||b.changedAtField===null?null:{addonId:l.addonId,stableId:l.stableId,cap:b.cap,fieldPath:b.fieldPath,changedAtField:b.changedAtField},S=x===null?null:Pc({cap:e.cap,targetId:e.targetId,device:e.target,enabled:e.enabled,debounceMs:Math.round(f*1e3),sources:[x]}),C=typeof e.host.location==`string`&&e.host.location.length>0?e.host.location:null,w=Uc(h.data,x),T=Ne(Be,w,Math.round(f*1e3));return a(s,{children:[a(Sr,{className:`flex flex-col gap-3 p-2 sm:p-4`,children:[d(`p`,{className:`text-[11px] text-foreground-muted`,children:t(`customize.event.pulseBody`)}),d(`section`,{className:`flex flex-col gap-1`,"aria-label":t(`customize.scalar.stepDevice`),children:l===null?o.status===`error`?d(Y,{title:t(`customize.picker.devicesFailed`),message:o.error?.message??``}):d(Kt,{devices:Nc(c,e.host.id),listState:zc(o.status),value:[],selection:`single`,...C===null?{}:{groupBy:`location`},lockedIds:y,lockedNote:t(`customize.scalar.fit.kind`),onChange:e=>{let t=e[0],n=t===void 0?void 0:c.find(e=>e.id===t);n!==void 0&&u(n)},noun:`device`,showAll:!0,testId:`event-pulse-picker`}):a(`p`,{className:`flex flex-wrap items-center gap-2 text-xs text-foreground`,children:[l.name,d(J,{variant:`ghost`,size:`sm`,onClick:()=>u(null),children:t(`customize.scalar.changeDevice`)})]})}),l!==null&&b!==null&&d(`p`,{className:`text-xs text-foreground`,children:Mo(b.cap,b.fieldPath,i.language)}),l!==null&&b===null&&m.status===`success`&&d(`p`,{className:`text-xs text-foreground-subtle`,children:t(`customize.scalar.fit.kind`)}),a(`label`,{className:`flex flex-col gap-1 text-[11px] text-foreground`,children:[t(`customize.event.debounce`),d(dn,{type:`number`,"aria-label":t(`customize.event.debounce`),value:Number.isFinite(f)?f:0,onChange:e=>{let t=Number(e.target.value);Number.isFinite(t)&&t>=0&&p(t)}})]}),d(`p`,{role:`status`,className:`text-[11px] text-foreground-subtle`,children:t(Hc(w,T.lastPressedAt))})]}),a(hr,{className:`flex flex-wrap gap-2`,children:[d(J,{variant:`ghost`,onClick:e.onClose,children:t(`customize.scalar.cancel`)}),d(J,{"data-testid":`event-save`,disabled:!e.canSave||S===null,onClick:()=>{S!==null&&e.onSave(S)},children:t(`customize.scalar.save`)})]})]})}function Hc(e,t){return e.kind===`unread`?`customize.event.previewWaiting`:e.active&&t===null?`customize.event.previewAlreadyOn`:t===null?`customize.event.previewQuiet`:`customize.event.previewCounted`}function Uc(e,t){if(e===void 0||t===null)return{kind:`unread`};let n=e[t.cap],r=n===void 0?void 0:bi(n,t.fieldPath),i=We[t.cap]??t.changedAtField,a=n===void 0?void 0:bi(n,i);return typeof r==`boolean`?{kind:`level`,active:r,changedAt:typeof a==`number`&&Number.isFinite(a)?a:null}:{kind:`unread`}}function Wc(e,t){return e===null?null:t.find(t=>t.addonId===e.addonId&&t.stableId===e.stableId)??null}function Gc(e,t,n){if(e===`pending`)return{kind:`pending`,seconds:null};if(e===`unknown`||e==null)return{kind:`unknown`,seconds:null};if(!e)return{kind:`quiet`,seconds:null};let r=Kc(t,n);return r===null?{kind:`unknown`,seconds:null}:{kind:`active`,seconds:r}}function Kc(e,t){if(e==null||!Number.isFinite(e)||e<Ui)return null;let n=Math.floor((t-e)/1e3);return n<0?0:n}function qc(e,t){if(e===`pending`)return{kind:`pending`,lastPressedAt:null,pressCount:null};if(e===`unknown`)return{kind:`unknown`,lastPressedAt:null,pressCount:null};let n=typeof e==`number`&&Number.isFinite(e)&&e>=Ui?e:null,r=typeof t==`number`&&Number.isFinite(t)&&t>=0?t:null;return n===null?{kind:`none`,lastPressedAt:null,pressCount:r}:{kind:`ring`,lastPressedAt:n,pressCount:r}}function Jc(){return Object.entries($e).flatMap(([e,t])=>t.targets.filter(e=>e.cardinality===`event`).map(t=>({cap:e,pulse:Yc(t),span:Xc(t)})).filter(e=>e.pulse!==null||e.span!==null))}function Yc(e){if(e.shape!==`pulse`)return null;let t=Qc(e.apply);return e.timestampPath===void 0||e.counterPath===void 0||e.debounceMs===void 0||t===null?null:{id:e.id,timestampPath:e.timestampPath,counterPath:e.counterPath,debounceMs:e.debounceMs,apply:t,deviceTypes:e.deviceTypes}}function Xc(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 Zc(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 Qc(e){return e===`add`||e===`replace`?e:null}e();function $c({device:e,handle:t,availability:n,cap:i,title:o,view:c,onAdvanced:l}){let{t:u,i18n:f}=Z(),p=jo(),[m,h]=r(!1),[g,_]=r(null),v=Ga(t.state),y=Do(v,i),b=tl(t,y),x=b.kind===`known`&&b.value!==null?Ke({feature:b.value,device:t.target,cap:i,targetId:c.id,timestampPath:c.timestampPath,counterPath:c.counterPath}):null,S=x!==null,C=Co(S),w=x?.draft.sources[0]??null,T=w===null||C.kind!==`known`?null:C.value.find(e=>G({addonId:e.addonId,stableId:e.stableId})===G(w))??null,E=nl(S,C.kind,T!==null),O=Te({cap:i,targetId:c.id,device:t.target,timestampPath:c.timestampPath,counterPath:c.counterPath,apply:c.apply,stored:b,sourcePresence:E,sourceUnknownReason:C.kind===`unknown`?C.reason:null}),k=t.state.kind===`none`||t.state.kind===`present`;if(n.kind===`absent`||!c.deviceTypes.includes(e.type))return null;let A=async e=>{let n=await t.save(e);_(n.kind===`refused`?n.reason:null)},j=w===null?null:{addonId:w.addonId,stableId:w.stableId,cap:w.cap,fieldPath:w.fieldPath,changedAtField:x?.changedAtFields[0]??``},M=w===null?``:Mo(w.cap,w.fieldPath,f.language),N=b.kind===`known`&&b.value===null,P=!S&&b.kind===`known`&&b.value!==null;return a(s,{children:[d(wo,{id:i,icon:D,title:o,testId:`event-card-${i}`,actions:a(s,{children:[y!==null&&a(`label`,{className:`flex items-center gap-1.5 text-[11px] text-foreground`,children:[d(rn,{"aria-label":u(`customize.doorbell.active`),checked:y.enabled!==!1,disabled:!k||t.saving,onChange:e=>{A(To(v,t.target,{...y,enabled:e.target.checked}))}}),u(`customize.doorbell.active`)]}),d(zt,{children:u(Zc(O.text,O.status.state))})]}),children:d(`div`,{className:`flex flex-col gap-2 px-3 py-2 sm:px-4`,children:n.kind===`pending`||n.kind===`present`&&!k?d(`p`,{role:`status`,className:`text-xs text-foreground-subtle`,children:u(`customize.event.checking`)}):n.kind===`unknown`?d(Y,{title:u(`customize.scalar.unreadable`),message:n.reason}):a(s,{children:[S&&w!==null&&d(`p`,{className:`text-xs text-foreground`,children:u(`customize.scalar.override`,{name:T?.name??w.stableId,field:M})}),S&&d(el,{deviceId:e.id,cap:i,timestampPath:c.timestampPath,counterPath:c.counterPath}),P&&a(`p`,{className:`text-xs text-foreground`,children:[u(`customize.doorbell.otherFormula`),` `,d(Ua,{onAdvanced:l})]}),N&&d(`p`,{className:`text-xs text-foreground-subtle`,children:u(`customize.scalar.noOverride`)}),g!==null&&d(`p`,{role:`alert`,className:`text-xs text-danger break-words`,children:g}),a(`div`,{className:`flex flex-wrap gap-2`,children:[S&&d(J,{variant:`outline`,size:`sm`,disabled:t.saving,onClick:()=>h(!0),children:u(`customize.scalar.change`)}),S&&d(J,{variant:`ghost`,size:`sm`,disabled:t.saving,onClick:()=>{if(v===null)return;let t=Eo(v,i);p(u(`customize.doorbell.removeWhat`,{name:T?.name??e.name}),t===null).then(e=>{e&&A(t)})},children:u(`customize.scalar.remove`)}),N&&d(J,{variant:`outline`,size:`sm`,"data-testid":`event-add-${i}`,disabled:t.saving,onClick:()=>h(!0),children:u(`customize.scalar.add`)})]})]})})}),d(Bc,{open:m,mode:S?`change`:`add`,title:o,cap:i,targetId:c.id,host:e,target:t.target,enabled:y?.enabled!==!1,debounceMs:x?.draft.debounceMs??c.debounceMs,seed:j,canSave:k&&!t.saving,onClose:()=>h(!1),onSave:e=>{h(!1),A(To(v,t.target,e))}})]})}function el({deviceId:e,cap:t,timestampPath:n,counterPath:r}){let{t:i}=Z(),o=ho({deviceId:e,cap:t,path:n}),s=ho({deviceId:e,cap:t,path:r}),c=qc(o.kind===`pending`?`pending`:o.kind!==`value`||typeof o.value!=`number`?`unknown`:o.value,s.kind===`value`&&typeof s.value==`number`?s.value:null);return c.kind===`pending`?d(`p`,{role:`status`,className:`text-[11px] text-foreground-subtle`,children:i(`customize.event.checking`)}):c.kind===`unknown`?d(`p`,{role:`status`,className:`text-[11px] text-foreground-subtle`,children:i(`customize.event.doorbellLast.unknown`)}):c.kind===`none`?a(`p`,{role:`status`,className:`text-[11px] text-foreground-subtle`,children:[i(`customize.event.doorbellLast.none`),c.pressCount===null?``:` · ${i(`customize.event.doorbellCount`,{count:c.pressCount})}`]}):a(`p`,{role:`status`,className:`text-[11px] text-foreground`,children:[i(`customize.event.doorbellLast.ring`,{when:Hi(c.lastPressedAt)}),c.pressCount===null?``:` · ${i(`customize.event.doorbellCount`,{count:c.pressCount})}`]})}function tl(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 nl(e,t,n){return e?t===`pending`?`pending`:t===`unknown`?`unknown`:n?`present`:`absent`:`present`}e();var rl=[`in-addition`,`confirm`,`replace`];function il(e){return e===`pending`?`pending`:e===`error`?`failed`:`answered`}function al(e){let{t}=Z(),n=e.mode===`change`?t(`customize.scalar.changeTitle`,{title:e.title}):t(`customize.scalar.addTitle`,{title:e.title});return d(fr,{open:e.open,onOpenChange:t=>!t&&e.onClose(),children:a($n,{placement:`sheet-on-mobile`,scroll:`body`,"aria-label":n,children:[d(Er,{children:d(zn,{children:n})}),e.open?d(ol,{...e}):null]})})}function ol(e){let{t,i18n:i}=Z(),o=Dr({projection:`slim`}),c=o.status===`success`?Si(o.data):[],[l,u]=r(e.sources),[f,p]=r(null),[m,h]=r(e.timeoutMs/1e3),[g,_]=r((e.cooldownMs??0)/1e3),v=f===null?null:c.find(e=>e.id===f)??null,y=Vn({deviceId:v?.id??0}),b=y.status===`success`?y.data:{caps:[]},x=n(()=>Oc(e.cap,e.targetId),[e.cap,e.targetId]),S=xo(x,e.open),C=n(()=>S.kind===`known`?Mc(c,e.host.id,S.value,x):[],[S,c,e.host.id,x]),w=v===null?null:jc(b,e.cap,e.targetId,`span`),T=Fc({cap:e.cap,targetId:e.targetId,device:e.target,timeoutMs:Math.round(m*1e3),cooldownMs:e.cooldownMs===null?void 0:Math.round(g*1e3),sources:l}),E=typeof e.host.location==`string`&&e.host.location.length>0?e.host.location:null,D=()=>{if(v===null||w===null||v.addonId===e.host.addonId&&v.stableId===e.host.stableId)return;let t={addonId:v.addonId,stableId:v.stableId,cap:w.cap,fieldPath:w.fieldPath,mode:`in-addition`,label:v.name};if(l.some(e=>e.addonId===t.addonId&&e.stableId===t.stableId)){p(null);return}u([...l,t]),p(null)};return a(s,{children:[a(Sr,{className:`flex flex-col gap-3 p-2 sm:p-4`,children:[d(`p`,{className:`text-[11px] text-foreground-muted`,children:t(`customize.event.spanBody`)}),d(`ul`,{className:`flex flex-col gap-2`,children:l.map(n=>a(`li`,{className:`flex flex-wrap items-center gap-2 text-xs`,children:[d(`span`,{className:`text-foreground`,children:n.label.length>0?n.label:Mo(n.cap,n.fieldPath,i.language)}),e.sourceModes.length>1?d(en,{"aria-label":t(`customize.motion.modeFor`,{name:n.stableId}),value:n.mode,options:e.sourceModes.map(e=>({value:e,label:t(`customize.motion.mode.${e}`)})),onChange:e=>{let t=sl(e.target.value);t!==null&&u(l.map(e=>e.addonId===n.addonId&&e.stableId===n.stableId?{...e,mode:t}:e))}}):null,d(J,{variant:`ghost`,size:`sm`,onClick:()=>u(l.filter(e=>e.addonId!==n.addonId||e.stableId!==n.stableId)),children:t(`customize.event.clear`)})]},`${n.addonId}/${n.stableId}`))}),o.status===`error`?d(Y,{title:t(`customize.picker.devicesFailed`),message:o.error?.message??``}):d(Kt,{devices:Nc(c,e.host.id),listState:il(o.status),value:f===null?[]:[f],selection:`single`,...E===null?{}:{groupBy:`location`},lockedIds:C,lockedNote:t(`customize.scalar.fit.kind`),onChange:e=>p(e[0]??null),noun:`device`,showAll:!0,testId:`event-span-picker`}),w!==null&&d(`p`,{className:`text-[11px] text-foreground-subtle`,children:Mo(w.cap,w.fieldPath,i.language)}),d(J,{variant:`secondary`,size:`sm`,disabled:w===null,onClick:D,children:t(`customize.motion.add`)}),d(cl,{label:t(`customize.event.timeout`),value:m,onChange:h}),e.cooldownMs!==null&&d(cl,{label:t(`customize.event.cooldown`),value:g,onChange:_}),v!==null&&w!==null&&d(ll,{deviceId:v.id,cap:w.cap,fieldPath:w.fieldPath,timeoutMs:Math.round(m*1e3)})]}),a(hr,{className:`flex flex-wrap gap-2`,children:[d(J,{variant:`ghost`,onClick:e.onClose,children:t(`customize.scalar.cancel`)}),d(J,{"data-testid":`event-save`,disabled:!e.canSave||T===null,onClick:()=>{T!==null&&e.onSave(T)},children:t(`customize.scalar.save`)})]})]})}function sl(e){return rl.find(t=>t===e)??null}function cl({label:e,value:t,onChange:n}){return a(`label`,{className:`flex flex-col gap-1 text-[11px] text-foreground`,children:[e,d(dn,{type:`number`,"aria-label":e,value:Number.isFinite(t)?t:0,onChange:e=>{let t=Number(e.target.value);Number.isFinite(t)&&t>=0&&n(t)}})]})}function ll({deviceId:e,cap:t,fieldPath:n,timeoutMs:r}){let{t:i}=Z(),a=ho({deviceId:e,cap:t,path:n}),o=a.kind===`value`&&typeof a.value==`boolean`?{kind:`level`,active:a.value,changedAt:null}:{kind:`unread`};return d(`p`,{role:`status`,className:`text-[11px] text-foreground-subtle`,children:i(ul(o,be(Ue,o,{timeoutMs:r,cooldownMs:0,nowMs:Date.now()}).open))})}function ul(e,t){return e.kind===`unread`?`customize.event.previewWaiting`:t?`customize.event.previewMotionOn`:e.active?`customize.event.previewSensorOn`:`customize.event.previewMotionOff`}e();function dl({device:e,availability:t,cap:n,title:i,view:o,sensors:c}){let{t:u}=Z(),f=Rt(),p=Mr(),m=kn({addonId:`pipeline-orchestrator`,deviceId:e.id,nodeId:`hub`}),[h,g]=r(!1),[_,v]=r(null),y=l(!1),[b,x]=r(!1),S=pl(c),C=He(o.id,S),w=hl(Ti(m.data).motionCooldownMs,o.timeoutMs);if(t.kind===`absent`||!o.deviceTypes.includes(e.type))return null;let T=b||f.isPending||p.isPending,E=C.writable&&!T&&t.kind===`present`,D=async t=>{if(!C.writable||y.current){v(u(`customize.saveInFlight`));return}y.current=!0,x(!0);try{await Rc(e.id,t,async e=>{await f.mutateAsync({deviceId:e.deviceId,config:e.config===null?null:{sensors:e.config.sensors.map(e=>({addonId:e.addonId,stableId:e.stableId,mode:e.mode}))}})},async e=>{let t={motionCooldownMs:e.patch.motionCooldownMs};await p.mutateAsync({deviceId:e.deviceId,patch:t})}),v(null),await c.refetch()===`failed`&&v(u(`customize.motion.refetchFailed`))}catch(e){v(e instanceof Error?e.message:String(e))}finally{y.current=!1,x(!1)}},O=C.rows.map(e=>({addonId:e.addonId,stableId:e.stableId,cap:`binary`,fieldPath:`on`,mode:e.mode,label:e.name}));return a(s,{children:[d(wo,{id:n,icon:fe,title:i,testId:`event-card-${n}`,actions:d(zt,{children:u(Zc(C.text,C.status.state))}),children:d(`div`,{className:`flex flex-col gap-2 px-3 py-2 sm:px-4`,children:t.kind===`pending`||S.kind===`pending`?d(`p`,{role:`status`,className:`text-xs text-foreground-subtle`,children:u(`customize.motion.reading`)}):t.kind===`unknown`||S.kind===`unknown`?d(Y,{title:u(`customize.motion.unreadable`,{reason:ml(S)}),message:S.kind===`unknown`?S.reason??``:``}):a(s,{children:[d(fl,{deviceId:e.id}),C.rows.length===0?d(`p`,{className:`text-xs text-foreground-subtle`,children:u(`customize.scalar.noOverride`)}):d(`ul`,{className:`flex flex-col gap-1`,children:C.rows.map(e=>a(`li`,{className:`text-xs text-foreground`,children:[e.name,e.reason===null?``:` — ${u(`customize.motion.state.${e.state}`)}`]},e.key))}),d(`p`,{className:`text-[11px] text-foreground-subtle`,children:u(`customize.event.timeoutSeconds`,{seconds:w/1e3})}),_!==null&&d(`p`,{role:`alert`,className:`text-xs text-danger break-words`,children:_}),d(`div`,{className:`flex flex-wrap gap-2`,children:d(J,{variant:`outline`,size:`sm`,"data-testid":`event-add-${n}`,disabled:!E,onClick:()=>g(!0),children:C.rows.length===0?u(`customize.scalar.add`):u(`customize.scalar.change`)})})]})})}),d(al,{open:h,mode:C.rows.length===0?`add`:`change`,title:i,cap:n,targetId:o.id,host:e,target:{addonId:e.addonId,stableId:e.stableId},timeoutMs:w,cooldownMs:o.cooldownMs,sourceModes:o.sourceModes,sources:O,canSave:E,onClose:()=>g(!1),onSave:e=>{g(!1),D(e)}})]})}function fl({deviceId:e}){let{t}=Z(),n=ho({deviceId:e,cap:`motion`,path:`detected`}),r=ho({deviceId:e,cap:`motion`,path:`lastDetectedAt`}),i=Gc(n.kind===`pending`?`pending`:n.kind!==`value`||typeof n.value!=`boolean`?`unknown`:n.value,r.kind===`value`&&typeof r.value==`number`?r.value:null,Date.now());return d(`p`,{role:`status`,className:`text-xs text-foreground`,children:t(i.kind===`active`?`customize.event.motionNow.active`:`customize.event.motionNow.${i.kind}`,i.seconds===null?void 0:{seconds:i.seconds})})}function pl(e){return e.presence===`pending`?{kind:`pending`}:e.status===null?{kind:`unknown`,reason:null}:{kind:`known`,value:e.status}}function ml(e){return e.kind===`unknown`?e.reason??``:e.kind===`known`&&e.value.state===`unreadable`?e.value.reason:``}function hl(e,t){return e!==null&&Number.isFinite(e)?e:t}var gl=$e;function _l(e,t){let n=gl[e];return n===void 0?null:n.targets.find(e=>e.id===t)??null}function vl({device:e,handle:t,facts:n,sensors:r,onAdvanced:i}){let{t:a}=Z();return d(s,{children:Jc().map(o=>{let s=o.pulse??o.span;if(s===null||!s.deviceTypes.includes(e.type))return null;let c=_l(o.cap,s.id);if(c===null)return null;let l=a(o.pulse===null?`customize.motion.title`:`customize.doorbell.title`),u=so(ro(o.cap,c),n);return o.pulse===null?o.span===null?null:d(dl,{device:e,availability:u,cap:o.cap,title:l,view:o.span,sensors:r},o.cap):d($c,{device:e,handle:t,availability:u,cap:o.cap,title:l,view:o.pulse,onAdvanced:i},o.cap)})})}function yl({id:e,icon:t,title:n,headerControl:r,addLabel:i,onAdd:o,addDisabled:c=!1,notices:l,suggestion:u,children:f}){let{t:p}=Z(),m=o!==void 0&&i!==void 0;return a(wo,{id:e,icon:t,title:n,actions:a(s,{children:[r,m&&!c&&u!==void 0&&u.count>0&&a(J,{variant:`ghost`,size:`sm`,onClick:u.onOpen,children:[d(te,{className:`h-3.5 w-3.5`,"aria-hidden":!0}),p(`customize.suggest.hint`,{count:u.count,location:u.location})]}),m&&d(J,{variant:`outline`,size:`sm`,disabled:c,onClick:o,children:i})]}),children:[l!==void 0&&d(`div`,{className:`flex flex-col gap-1 px-3 pt-2 empty:hidden sm:px-4`,children:l}),d(`ul`,{className:`flex flex-col divide-y divide-border`,children:f})]})}function bl({availability:e}){let{t}=Z();return e.kind===`pending`?d(`p`,{role:`status`,className:`text-xs text-foreground-subtle`,children:t(`customize.assign.checking`)}):e.kind===`unknown`?d(`p`,{role:`alert`,className:`text-xs text-warning`,children:t(`customize.assign.unknown`,{reason:e.reason})}):null}function xl(e,t){if(e.kind!==`known`||typeof t!=`string`||t.length===0)return null;let n=Nt(e.value,t),r=new Map(e.value.map(e=>[e.id,e])),i=new Map;for(let e of n){let t=r.get(e)?.parentDeviceId,n=t==null?void 0:r.get(t);n!==void 0&&n.type===`container`&&i.set(e,n.name)}return{location:t,ids:n,containers:i}}function Sl(e,t,n){return Sn(e,t?.ids??new Set,n)}function Cl(e,t){return e?.containers.get(t)??null}function wl(e,t,n){return e.kind===`known`?Sl(e.value,t,n).suggested.length:0}function Tl(e,t){let n=[t,e.detail].filter(e=>e!==null&&e!==``);return n.length===0?null:n.join(` · `)}function El({location:e,devices:t,action:n,onPick:r,onPickAll:i}){let{t:o}=Z();if(t.length===0)return null;let s=o(`customize.suggest.heading`,{location:e});return a(`section`,{"aria-label":s,className:`flex flex-col gap-1`,children:[a(`div`,{className:`flex min-h-7 items-center gap-2`,children:[d(`h3`,{className:`${M} min-w-0 flex-1`,children:s}),i!==void 0&&t.length>1&&d(J,{variant:`ghost`,size:`sm`,onClick:i,children:o(`customize.suggest.addAll`,{count:t.length})})]}),d(`ul`,{className:`flex flex-col divide-y divide-border rounded-md border border-border`,children:t.map(e=>{let t=Tl(e,e.container===null||e.name.includes(e.container)?null:o(`customize.suggest.in`,{container:e.container}));return a(`li`,{className:`${j} flex items-center gap-3`,children:[a(`div`,{className:`min-w-0 flex-1`,children:[d(`div`,{className:`text-xs text-foreground break-words`,children:e.name}),t!==null&&d(`div`,{className:`text-[11px] text-foreground-subtle break-words`,children:t})]}),d(J,{variant:`outline`,size:`sm`,"aria-label":o(n===`add`?`customize.suggest.addNamed`:`customize.suggest.useNamed`,{name:e.name}),onClick:()=>r(e.id),children:o(n===`add`?`customize.suggest.add`:`customize.suggest.use`)})]},e.id)})})]})}e();function Dl(e){return e.kind===`pending`?`pending`:e.kind===`unknown`?`failed`:`answered`}function Ol(e){return e.map(e=>({id:e.deviceId,name:e.name,...e.meta===null?{}:{type:e.meta},...e.detail===null?{}:{location:e.detail.includes(` · `)?e.detail.split(` · `).at(-1)??null:e.detail},...e.detail===null?{}:{detail:e.detail}}))}function kl({open:e,title:i,selection:o,candidates:s,filters:c,room:l=null,confirmLabel:u,onConfirm:f,onClose:p}){let{t:m}=Z(),[h,g]=r(null),[_,v]=r([]),y=c?.find(e=>e.id===h)??c?.[0]??null,b=s.kind===`known`?s.value:[],x=s.kind===`known`?Vi(s.value,``,y):[],S=Sl(b,l,e=>e.deviceId).suggested,C=Sl(x,l,e=>e.deviceId).others,w=n(()=>Ol(C),[C]),T=Dl(s),E=b.filter(e=>_.includes(e.deviceId));t(()=>{e||(v([]),g(null))},[e]);let D=()=>{v([]),g(null),p()},O=e=>{e.length!==0&&(f(e),v([]),g(null))},k=()=>O(E);return d(fr,{open:e,onOpenChange:e=>e?void 0:D(),children:a($n,{width:`lg`,placement:`sheet-on-mobile`,scroll:`body`,"aria-label":i,children:[d(Er,{children:d(zn,{children:i})}),a(Sr,{className:`flex flex-col gap-2 p-2 sm:p-4`,children:[c!==void 0&&c.length>0&&d(`div`,{className:`flex flex-wrap gap-1`,role:`tablist`,"aria-label":m(`customize.assign.filtersLabel`),children:c.map(e=>d(`button`,{type:`button`,role:`tab`,"aria-selected":(y?.id??null)===e.id,className:`inline-flex items-center gap-1 rounded-full border px-1.5 py-0.5 text-[10px] font-medium transition-colors ${(y?.id??null)===e.id?`border-primary/50 bg-primary/15 text-primary`:`border-border bg-surface text-foreground-subtle hover:bg-surface-hover`}`,onClick:()=>g(e.id),children:m(e.labelKey)},e.id))}),l!==null&&d(El,{location:l.location,devices:S.map(e=>({id:e.deviceId,name:e.name,container:Cl(l,e.deviceId),detail:e.detail})),action:`add`,onPick:e=>O(S.filter(t=>t.deviceId===e)),...o===`multi`?{onPickAll:()=>O(S)}:{}}),s.kind===`unknown`?d(`p`,{role:`alert`,className:`text-xs text-warning`,children:m(`customize.assign.unknown`,{reason:s.reason})}):w.length===0&&S.length>0?null:d(Kt,{devices:w,listState:T,value:_,onChange:e=>v(o===`single`?e.length>0?[e[e.length-1]]:[]:e),noun:`device`,emptyLabel:m(`customize.assign.none`),showAll:!0,testId:`customize-device-picker`})]}),a(hr,{children:[d(J,{variant:`ghost`,onClick:D,children:m(`customize.picker.cancel`)}),d(J,{disabled:E.length===0,onClick:k,children:u(E.length)})]})]})})}e();function Al(e,t){let r=typeof e==`string`&&e.length>0,i=Co(t&&r);return n(()=>t?xl(i,e):null,[t,i,e])}e();function jl(e){return e==null?null:e.message}function Ml({device:e}){let t=ue(),{t:n}=Z(),i=c(),o=jo(),l=Ae.includes(e.type),[u,f]=r(!1),[p,m]=r(!1),[h,g]=r(null),_=Ct({deviceId:e.id},{enabled:l}),v=Ri({status:_.status,data:_.data,error:jl(_.error)===null?null:{message:jl(_.error)??``}}),y=v.kind===`present`?v.slot.slotRef:``,b=v.kind===`present`?[...Ii(v.slot,v.value).map(e=>e.deviceId),...Pi(v.slot,v.value)]:[],x=tn(),S=Co(l&&v.kind===`present`&&(u||b.length>0)),C=Al(e.location,l&&v.kind===`present`),w=Et({deviceId:e.id,slotRef:y},{enabled:(u||C!==null)&&v.kind===`present`});if(!l||v.kind===`absent`)return null;if(v.kind!==`present`)return d(yl,{id:`linked`,icon:H,title:n(`customize.linked.title`),notices:v.kind===`pending`?d(`p`,{role:`status`,className:`text-xs text-foreground-subtle`,children:n(`customize.assign.checking`)}):d(`p`,{role:`alert`,className:`text-xs text-warning break-words`,children:n(`customize.assign.unknown`,{reason:v.reason})}),children:null});let T=v.value,E=new Map(S.kind===`known`?S.value.map(e=>[e.id,e]):[]),D=T.trackedDeviceIds!==void 0,O=(e,t)=>{let n=E.get(e.deviceId);return{...e,name:e.name??n?.name??null,type:n?.type??null,detail:n===void 0?null:Ni(n.integration,n.location),orphan:t}},k=[...Ii(v.slot,T).map(e=>O(e,!1)),...Pi(v.slot,T).map(e=>O({deviceId:e,name:null,health:`ok`,implied:!1,tracked:!0},!0))],A=new Set(b),j=S.kind===`unknown`?S:w.status===`error`?{kind:`unknown`,reason:jl(w.error)??n(`helpers.customize.requestFailed`)}:S.kind===`pending`||w.status===`pending`||w.data===void 0?{kind:`pending`}:{kind:`known`,value:Bi(w.data.candidates,E,A)},M=async t=>{if(p){g(n(`customize.saveInFlight`));return}m(!0),g(null);try{await x.mutateAsync({deviceId:e.id,slotRef:v.slot.slotRef,value:t}),await _.refetch(),await i.invalidateQueries({queryKey:[[`deviceManager`]]})}catch(e){g(e instanceof Error?e.message:String(e))}finally{m(!1)}},N=async e=>{await o(n(`customize.linked.removeWhat`,{name:e.name??`#${e.deviceId}`}),!1)&&await M(zi(T,e.deviceId))},P=[{key:`device`,header:n(`customize.linked.device`),cell:e=>a(`div`,{className:`flex flex-col min-w-0`,children:[d(`span`,{className:`truncate text-xs text-foreground`,children:e.name??`#${e.deviceId}`}),e.detail!==null&&d(`span`,{className:`truncate text-[11px] text-foreground-subtle`,children:e.detail}),e.orphan&&d(`span`,{className:`text-[11px] text-foreground-subtle`,children:n(`customize.linked.notLinked`)}),e.health!==`ok`&&d(`span`,{role:`alert`,className:`text-[11px] text-warning`,children:n(`customize.linked.health.${e.health}`)})]})},{key:`type`,header:n(`customize.linked.type`),headerClassName:`hidden sm:table-cell`,cellClassName:`hidden sm:table-cell text-xs text-foreground-subtle`,cell:e=>e.type===null?`—`:sn(e.type,t).label},{key:`controls`,header:n(`customize.linked.controls`),headerClassName:`hidden md:table-cell`,cellClassName:`hidden md:table-cell text-xs text-foreground-subtle`,cell:e=>e.orphan?`—`:n(`customize.linked.yes`)},...D?[{key:`tracked`,header:n(`customize.linked.tracked`),cellClassName:`text-right`,headerClassName:`text-right`,cell:e=>d(Zt,{checked:e.tracked,disabled:p,"aria-label":n(`customize.linked.trackFor`,{name:e.name??e.deviceId}),onCheckedChange:t=>void M(Li(T,e.deviceId,t))})}]:[],{key:`remove`,header:``,cellClassName:`text-right w-10`,cell:e=>e.implied||e.orphan?null:d(Gr,{icon:ie,variant:`ghost`,size:`sm`,"aria-label":n(`customize.assign.removeNamed`,{name:e.name??e.deviceId}),disabled:p,onClick:t=>{t.stopPropagation(),N(e)}})}];return a(s,{children:[d(yl,{id:`linked`,icon:H,title:n(`customize.linked.title`),addLabel:n(`customize.linked.add`),onAdd:p?void 0:()=>f(!0),...C===null?{}:{suggestion:{count:wl(j,C,e=>e.deviceId),location:C.location,onOpen:()=>f(!0)}},notices:a(s,{children:[S.kind===`unknown`&&d(`p`,{role:`alert`,className:`text-xs text-warning break-words`,children:n(`customize.assign.devicesUnreadable`,{reason:S.reason})}),h!==null&&d(`p`,{role:`alert`,className:`text-xs text-danger break-words`,children:h})]}),children:a(`li`,{className:`list-none px-3 py-2 sm:px-4`,children:[k.length===0?d(`p`,{className:`text-[11px] text-foreground-subtle`,children:n(`customize.assign.none`)}):d(Tt,{mode:`generic`,items:k,getKey:e=>String(e.deviceId),getSearchText:e=>[e.name??``,e.detail??``,e.type??``,String(e.deviceId)].join(` `),getFilterType:e=>e.type===null?null:sn(e.type,t).label,columns:P,searchPlaceholder:n(`customize.assign.search`),emptyLabel:n(`customize.assign.none`)}),k.some(e=>!e.orphan)&&d(`p`,{className:`mt-2 text-[10px] text-foreground-subtle`,children:n(`customize.linked.controlsAlways`)}),D&&d(`p`,{className:`mt-0.5 text-[10px] text-foreground-subtle`,children:n(`customize.linked.trackedHint`)})]})}),d(kl,{open:u,title:n(`customize.linked.pickTitle`),selection:`multi`,candidates:j,room:C,confirmLabel:e=>n(`customize.assign.addCount`,{count:e}),onConfirm:e=>{f(!1),M(Mi(T,e.map(e=>e.deviceId)))},onClose:()=>f(!1)})]})}var Nl={"numeric-sensor":{fieldPath:`value`,unitField:`unit`},"temperature-sensor":{fieldPath:`celsius`,unitField:`unit`},"humidity-sensor":{fieldPath:`percent`,unitField:`unit`},"pressure-sensor":{fieldPath:`hpa`,unitField:`unit`},"ambient-light-sensor":{fieldPath:`lux`,unitField:`unit`}},Pl=new Set([q.Camera]);function Fl(e){return e.unitField===null?[e.fieldPath]:[e.fieldPath,e.unitField]}function Il(e,t){if(Pl.has(e))return{kind:`absent`};let n=null;for(let[e,r]of Object.entries(Nl))if(t.has(e)){n={cap:e,fieldPath:r.fieldPath,unitField:r.unitField};break}let r=null;for(let e of xe)if(t.has(e)){let t=qe[e];if(t!==void 0){r={cap:e,fieldPath:t};break}}return n===null&&r===null?{kind:`absent`}:{kind:`present`,convert:n,invert:r}}function Ll(e){return Pe(e.from,e.to)?Xe(e):null}function Rl(e){return W(e)}var zl=/^convert\(v,\s*"[^"]*",\s*"[^"]*"\)$/;function Bl(e){return e!==void 0&&zl.test(e.expr)}function Vl(e){return e===void 0||e.expr===`!v`||zl.test(e.expr)?!1:e.bindings.v!==void 0}function Hl(e){let t=e.expr.trim();if(t===``)return{kind:`refused`,reason:X.t(`helpers.numericTransforms.emptyExpression`)};let n={kind:`expression`,expr:t,bindings:{v:{kind:`from`,source:e.self,cap:e.cap,fieldPath:e.fieldPath}}},r=ke({source:n,now:Date.now(),read:()=>({state:`fresh`,value:e.probe})});return r.state===`unavailable`?{kind:`refused`,reason:r.reason}:{kind:`ok`,feature:{kind:`fields`,cap:e.cap,fields:{[e.fieldPath]:n}}}}function Ul(e,t,n){if(e===null)return null;let r=Do(e,n.cap);if(r===null)return e;let i=new Set(Fl(n)),a=Object.fromEntries(Object.entries(r.fields).filter(([e])=>!i.has(e)));return Object.keys(a).length===0?Eo(e,n.cap):To(e,t,{kind:`fields`,cap:n.cap,...r.enabled===void 0?{}:{enabled:r.enabled},fields:a,...r.items===void 0?{}:{items:r.items}})}e();function Wl(e){if(typeof e!=`object`||!e)return;let t=Reflect.get(e,`unit`);return typeof t==`string`?t:void 0}function Gl(e,t){if(typeof e!=`object`||!e)return;let n=Reflect.get(e,t);return typeof n==`number`&&Number.isFinite(n)?n:void 0}function Kl(e,t){let n=Do(e,t.cap);if(n===null)return;let r=n.fields[t.fieldPath];return r!==void 0&&r.kind===`expression`?r:void 0}function ql(e,t){let n=Kl(e,t);return n===void 0||!Bl(n)?null:/^convert\(v,\s*"[^"]*",\s*"([^"]*)"\)$/.exec(n.expr)?.[1]??null}function Jl(e,t){let n=Kl(e,t);return n===void 0||!Vl(n)?null:n.expr}function Yl(e,t,n){let r=Do(e,t);if(r===null)return!1;let i=r.fields[n];return i!==void 0&&i.kind===`expression`&&i.expr===`!v`}function Xl(e){return typeof e==`number`||typeof e==`boolean`||typeof e==`string`?String(e):e===null?`null`:JSON.stringify(e)}function Zl({device:e,target:t,handle:n,facts:i}){let{t:o}=Z(),s=U(),[c,l]=r(null),[u,f]=r(``),[p,h]=r(null),g=i.nativeCaps.kind===`known`?i.nativeCaps.value:null,_=g===null?null:Il(e.type,g),v=_?.kind===`present`?_.convert?.cap??``:``,y=wr(s.trpcClient,e.id,v);if(i.nativeCaps.kind===`pending`)return d(`section`,{className:`${E} ${m}`,children:d(bl,{availability:{kind:`pending`}})});if(i.nativeCaps.kind===`unknown`)return d(`section`,{className:`${E} ${m}`,children:d(bl,{availability:{kind:`unknown`,reason:i.nativeCaps.reason}})});if(_===null||_.kind===`absent`)return null;let b=Ga(n.state),x=_.convert,S=_.invert,C=x===null?void 0:Wl(y),w=C===void 0?void 0:Le(C)??C,T=w===void 0?void 0:Se(w),D=x===null?null:ql(b,x),O=x===null?null:Jl(b,x),k=p??O??``,A=S===null?!1:Yl(b,S.cap,S.fieldPath),j=n.state.kind===`none`||n.state.kind===`present`,M=x===null?0:Gl(y,x.fieldPath)??0,N=x!==null&&k.trim()!==``?{kind:`expression`,expr:k.trim(),bindings:{v:{kind:`from`,source:t,cap:x.cap,fieldPath:x.fieldPath}}}:null,P=N===null||x===null?null:yi(N,new Map([[Je(t,x.cap),y===void 0?{kind:`pending`}:{kind:`value`,slice:y}]]),Date.now()),F=async e=>{let t=await n.save(e);l(t.kind===`refused`?t.reason:null)},ee=async()=>{if(x===null||w===void 0||u===``)return;let e=Ll({self:t,cap:x.cap,fieldPath:x.fieldPath,from:w,to:u,unitField:x.unitField});if(e===null){l(o(`customize.numericTransforms.convertRefused`));return}h(null),await F(To(b,t,e))},I=async()=>{x!==null&&(await F(Ul(b,t,x)),f(``))},te=async()=>{if(x===null)return;let e=Hl({self:t,cap:x.cap,fieldPath:x.fieldPath,expr:k,probe:M});if(e.kind===`refused`){l(e.reason);return}f(``),await F(To(b,t,e.feature))},L=async()=>{x!==null&&(await F(Ul(b,t,x)),h(``))},ne=async()=>{if(S===null)return;let e=Rl({self:t,cap:S.cap});if(e===null){l(o(`customize.numericTransforms.invertRefused`));return}await F(To(b,t,e))},R=async()=>{S===null||b===null||await F(Eo(b,S.cap))};return d(wo,{id:`numeric-transforms`,icon:st,title:o(`customize.numericTransforms.title`),testId:`numeric-transforms-card`,children:a(`div`,{className:`${m} flex flex-col gap-3`,children:[d(`p`,{className:`text-[11px] text-foreground-subtle`,children:o(`customize.numericTransforms.blurb`)}),c!==null&&d(`p`,{role:`alert`,className:`text-[11px] text-danger break-words`,children:c}),x!==null&&a(`div`,{className:`flex flex-col gap-2`,"data-testid":`numeric-convert`,children:[d(`label`,{className:`text-[11px] font-medium text-foreground`,children:o(`customize.numericTransforms.publishUnit`)}),d(`p`,{className:`text-[11px] text-foreground-subtle`,children:w===void 0?o(`customize.numericTransforms.fromUnknown`):o(`customize.numericTransforms.fromUnit`,{unit:w})}),d(`div`,{className:`w-full sm:max-w-xs`,children:d(At,{dimension:T,value:u===``?D??``:u,onChange:e=>{f(e),e!==``&&h(``)},disabled:!j||n.saving||w===void 0,"aria-label":o(`customize.numericTransforms.toUnit`),inheritLabel:o(`customize.numericTransforms.pickUnit`),emptyReason:o(`customize.numericTransforms.fromUnknown`)})}),a(`div`,{className:`flex flex-wrap gap-2`,children:[d(J,{size:`sm`,disabled:!j||n.saving||w===void 0||u===``||u===w,onClick:()=>void ee(),children:o(`customize.numericTransforms.applyConvert`)}),D!==null&&d(J,{size:`sm`,variant:`outline`,disabled:!j||n.saving,onClick:()=>void I(),children:o(`customize.numericTransforms.clearConvert`)})]})]}),x!==null&&a(`div`,{className:`flex flex-col gap-2`,"data-testid":`numeric-script`,children:[d(xi,{label:o(`customize.numericTransforms.script`),value:k,bindings:[`v`],onChange:e=>{h(e),e.trim()!==``&&f(``)}}),d(`p`,{className:`text-[11px] text-foreground-subtle`,children:o(`customize.numericTransforms.scriptBlurb`)}),P!==null&&d(`p`,{role:`status`,className:`text-[11px] font-mono text-foreground`,"data-testid":`numeric-script-preview`,children:P.kind===`value`?o(`customize.numericTransforms.preview`,{source:Xl(M),result:Xl(P.value)}):P.kind===`waiting`?o(`customize.numericTransforms.previewWaiting`):P.kind===`unavailable`?o(`customize.numericTransforms.previewError`,{reason:P.reason}):o(`customize.numericTransforms.previewRuntimeOnly`)}),a(`div`,{className:`flex flex-wrap gap-2`,children:[d(J,{size:`sm`,disabled:!j||n.saving||k.trim()===``,onClick:()=>void te(),children:o(`customize.numericTransforms.applyScript`)}),O!==null&&d(J,{size:`sm`,variant:`outline`,disabled:!j||n.saving,onClick:()=>void L(),children:o(`customize.numericTransforms.clearScript`)})]})]}),S!==null&&a(`div`,{className:`flex flex-col gap-2`,"data-testid":`numeric-invert`,children:[d(`label`,{className:`text-[11px] font-medium text-foreground`,children:o(`customize.numericTransforms.invert`)}),d(`p`,{className:`text-[11px] text-foreground-subtle`,children:o(`customize.numericTransforms.invertBlurb`)}),d(`div`,{className:`flex flex-wrap gap-2`,children:A?d(J,{size:`sm`,variant:`outline`,disabled:!j||n.saving,onClick:()=>void R(),children:o(`customize.numericTransforms.clearInvert`)}):d(J,{size:`sm`,disabled:!j||n.saving,onClick:()=>void ne(),children:o(`customize.numericTransforms.applyInvert`)})})]})]})})}e();function Ql(e){return e instanceof Error?e.message:String(e)}function $l(e){let t=lr({addonId:e.addonId,stableId:e.stableId}),n=sr(),i=Pn(),a=jr(),o=Wa({status:t.status,data:t.data,error:t.error===null||t.error===void 0?null:{message:t.error.message}}),{t:s}=Z(),c=l(!1),[u,d]=r(!1),f=async e=>{let r=Ao(o,e);try{switch(r.kind){case`refused`:return{kind:`refused`,reason:r.reason};case`noop`:return{kind:`saved`};case`create`:await n.mutateAsync({block:r.input});break;case`update`:await i.mutateAsync({blockId:r.blockId,expectedUpdatedAt:r.expectedUpdatedAt,block:{composition:r.composition}});break;case`delete`:await a.mutateAsync({blockId:r.blockId});break}return await t.refetch(),{kind:`saved`}}catch(e){return{kind:`refused`,reason:Ql(e)}}};return{target:e,state:o,saving:u||n.isPending||i.isPending||a.isPending,save:async e=>{if(c.current)return{kind:`refused`,reason:s(`customize.saveInFlight`)};c.current=!0,d(!0);try{return await f(e)}finally{c.current=!1,d(!1)}}}}var eu=`pipeline-orchestrator`;function tu(e){return e.status===`pending`?`pending`:e.status===`error`?`unknown`:e.data===void 0?`pending`:e.data.cameraSensors===void 0?`absent`:`present`}function nu(e,t){return e===`absent`?`absent`:tu(t)}async function ru(e){try{return(await e()).isError?`failed`:`answered`}catch{return`failed`}}function iu(e,t){let n=Ir(eu),r=Fn({deviceId:e},{enabled:t&&n!==`absent`}),i=()=>ru(r.refetch);return t?{presence:nu(n,{status:r.status,data:r.data}),status:r.data?.cameraSensors??null,refetch:i}:{presence:`absent`,status:null,refetch:i}}function au(e,t){let n=Yn({deviceType:e.type}),r=Wt({deviceId:e.id}),i=Vn({deviceId:e.id}),a=bo(n,e=>new Set(e.caps.map(e=>e.cap))),o=bo(r,e=>no(e.entries)),s=bo(i,e=>e);return{deviceType:e.type,composable:a,nativeCaps:o,wireable:s,composed:new Set((t?.features??[]).map(e=>e.cap))}}function ou(e,t,n){let r=t.kind===`known`&&t.value.has(`consumables`),i=ho(r?{deviceId:e,cap:Os,path:ks}:null);return Fs(t,n,r?i:null)}function su(e,t){let n=t.composition.target;if(n.kind!==`existing`)return``;let r=Ke({feature:e,device:n.device,cap:`doorbell`,targetId:`pressed`,timestampPath:`lastPressedAt`,counterPath:`pressCountSinceStart`});return r===null?``:r.draft.sources.map(e=>lu(e,t.sourceNames)).join(` + `)}function cu(){return{kind:`unknown`,reason:X.t(`helpers.fieldsTableRows.noValue`)}}function lu(e,t){let n=G(e);return t.get(n)??n}function uu(e,t,n){let r=n.nativeCaps.has(e.cap)?`replaced`:`added`,i=t.filter(t=>t.cap===e.cap&&t.origin===`composed`);if(e.cap===`doorbell`){let t=su(e,n),a=i.find(e=>e.field===`lastPressedAt`);return[{key:`doorbell`,label:X.t(`helpers.whatChangesRows.doorbell`),origin:{kind:r,from:t},value:a?.value??cu()}]}return e.cap===`consumables`?(Re(e,`consumables`,`items`)?.items??[]).map(e=>{let t=e.compile?.draft.fieldPath??null,a=t===null?null:Ze(Me,e.key,t),o=a===null?void 0:i.find(e=>e.field===a),s=e.compile?.draft.source??null;return{key:`consumables.${e.key}`,label:X.t(`helpers.whatChangesRows.consumable`,{name:e.label}),origin:{kind:r,from:s===null?``:lu(s,n.sourceNames)},value:o?.value??cu()}}):i.map(e=>({key:e.key,label:`${e.cap}.${e.field}`,origin:{kind:r,from:e.from},value:e.value}))}function du(e){let t=vi({composition:e.composition,nativeCaps:e.nativeCaps,state:e.state,nativeFields:new Map,snapshot:null,sourceNames:e.sourceNames});return e.composition.features.flatMap(n=>n.kind===`fields`?uu(n,t,e):[])}function fu(e,t){if(e?.state!==`configured`||e.sensors.length===0)return null;let n=e.cameraMotion===`never`?[]:[t.camera],r=e.sensors.map(e=>t.sensor(e.state===`missing`||e.state===`unreadable`?e.stableId:e.name,e.mode));return[...n,...r].join(` + `)}var pu=`${j} grid grid-cols-1 gap-x-3 gap-y-0.5 items-baseline sm:grid-cols-[minmax(0,1fr)_minmax(0,2fr)_minmax(0,1.5fr)]`,mu=`font-mono text-[11px] text-foreground break-words`,hu=`text-[11px] text-foreground-subtle break-words`,gu=`text-[11px] break-words sm:text-right`;function _u({device:e,composition:t,state:n,nativeCaps:r,cameraSensors:i}){let{t:o}=Z(),s=t!==null&&n!==null,c=Co(s),l=new Map(c.kind===`known`?c.value.map(e=>[G({addonId:e.addonId,stableId:e.stableId}),e.name]):[]),u=s&&r.kind===`known`?du({composition:t,nativeCaps:r.value,state:n,sourceNames:l}):[],f=s&&r.kind===`known`&&u.length===0&&t.features.length>0,p=fu(i,{camera:o(`customize.changes.motion.camera`),sensor:(e,t)=>o(`customize.changes.motion.${t}`,{name:e})}),m=s&&r.kind!==`known`;return u.length===0&&p===null&&!m&&!f?null:a(wo,{id:`changes`,icon:R,title:o(`customize.changes.title`),children:[m&&d(`p`,{role:r.kind===`unknown`?`alert`:`status`,className:`px-3 sm:px-4 py-1.5 sm:py-2 text-[11px] text-foreground-subtle`,children:r.kind===`unknown`?o(`customize.changes.unknown`,{reason:r.reason}):o(`customize.changes.reading`)}),f&&d(`p`,{className:`px-3 sm:px-4 py-1.5 sm:py-2 text-[11px] text-foreground-subtle`,children:o(`customize.changes.noRows`)}),a(`ul`,{className:`divide-y divide-border`,children:[u.map(e=>a(`li`,{className:pu,children:[d(`span`,{className:mu,children:e.label}),d(`span`,{className:hu,children:c.kind===`known`?o(`customize.changes.origin.${e.origin.kind}`,{from:e.origin.from}):o(`customize.changes.originUnread.${c.kind}`,{kind:o(`customize.changes.kind.${e.origin.kind}`),reason:c.kind===`unknown`?c.reason:``})}),d(`span`,{className:gu,children:d(vu,{value:e.value})})]},e.key)),p!==null&&a(`li`,{className:pu,children:[d(`span`,{className:mu,children:o(`common.motionWord`)}),d(`span`,{className:hu,children:p}),d(`span`,{className:gu,children:d(_o,{target:{deviceId:e.id,cap:`motion`,path:`detected`}})})]})]})]})}function vu({value:e}){let{t}=Z();switch(e.kind){case`value`:return a(`span`,{children:[gi(e.value,!0),e.staleReason!==null&&a(`span`,{className:`text-warning`,children:[` `,`·`,` `,t(`customize.changes.value.stale`,{reason:e.staleReason})]})]});case`unavailable`:return d(`span`,{className:`text-warning`,children:t(`customize.changes.value.unavailable`,{reason:e.reason})});case`unknown`:return d(`span`,{className:`text-foreground-subtle`,children:t(`customize.changes.value.unknown`,{reason:e.reason})});case`off`:return d(`span`,{className:`text-foreground-subtle`,children:t(`customize.status.off`)})}}e();function yu({deviceId:e,activeSubTab:t,onSubTabChange:n}){let{t:r}=Z(),i=On({deviceId:e}),a=i.data;return a==null?i.status===`error`?d(Y,{title:r(`customize.deviceUnreadable`),message:i.error?.message??``,onRetry:()=>void i.refetch()}):a===null?d(`p`,{role:`status`,className:`text-xs text-foreground-subtle`,children:r(`customize.noSuchDevice`,{deviceId:e})}):d(`p`,{role:`status`,className:`text-xs text-foreground-subtle`,children:r(`customize.loadingDevice`)}):a.addonId===`composer`?d(bu,{device:a}):d(xu,{device:a,target:{addonId:a.addonId,stableId:a.stableId},activeSubTab:t,onSubTabChange:n})}function bu({device:e}){let{t}=Z(),n=e.stableId.startsWith(`composed-`)?e.stableId.slice(ze.length):null;return a(`section`,{className:`${E} ${m} flex flex-col gap-2`,children:[d(`p`,{className:`text-xs text-foreground`,children:t(`customize.composed.body`)}),n!==null&&d(ii,{className:`text-[11px] text-primary hover:underline`,to:ni(n),children:t(`customize.composed.edit`)})]})}function xu({device:e,target:t,activeSubTab:n,onSubTabChange:r}){let i=$l(t),o=Ir(`composer`),{t:s}=Z(),c=iu(e.id,e.type===q.Camera),l=au(e,Ga(i.state)),u=ou(e.id,l.nativeCaps,l.wireable),f={deviceType:e.type,composable:l.composable,nativeCaps:l.nativeCaps,cameraSensors:c.presence},p=()=>r(ui),m=i.state.kind===`none`||i.state.kind===`present`;return n===`advanced`?a(`div`,{className:`flex flex-col gap-3`,children:[d(Cu,{state:i.state}),m&&d(Su,{device:e,target:t,handle:i,facts:l,onDone:()=>r(`main`)})]}):a(`div`,{className:`flex flex-col gap-3`,children:[d(eo,{device:e}),o===`absent`&&d(`p`,{role:`alert`,className:`text-xs text-warning`,children:s(`customize.composerAbsent`)}),i.state.kind!==`none`&&d(Cu,{state:i.state}),d(vl,{device:e,handle:i,facts:f,sensors:c,onAdvanced:p}),d(wc,{device:e,handle:i,facts:f,onAdvanced:p}),d(Xs,{device:e,handle:i,facts:f,defaults:u,onAdvanced:p}),d(Zl,{device:e,target:t,handle:i,facts:l}),d(Ml,{device:e}),d(_u,{device:e,composition:Ga(i.state),state:i.state.kind===`present`?i.state.view.state:null,nativeCaps:l.nativeCaps,cameraSensors:c.status}),a(`div`,{className:`flex flex-wrap items-center justify-between gap-2`,children:[m?d(Ua,{onAdvanced:p}):d(`span`,{}),d(wu,{handle:i})]})]})}function Su({device:e,target:t,handle:n,facts:r,onDone:i}){let a=n.state.kind===`present`?n.state:null;return d(Ci,{initial:a===null?_i(t):wi(a.composition,``),blockId:a===null?null:a.view.block.id,deviceType:e.type,targetName:e.name,nativeCaps:r.nativeCaps,targetFields:r.wireable,onCancel:i,save:async e=>{let t=await n.save(e);return t.kind===`saved`&&i(),t}})}function Cu({state:e}){let{t}=Z();switch(e.kind){case`pending`:return d(`p`,{role:`status`,className:`text-xs text-foreground-subtle`,children:t(`customize.status.pending`)});case`unknown`:return d(Y,{title:t(`customize.status.unknownTitle`),message:e.reason});case`not-loaded`:return d(`p`,{role:`status`,className:`text-xs text-foreground-subtle`,children:t(`customize.status.notLoaded`,{reason:e.reason})});case`none`:return null;case`present`:{let n=e.view.block;return a(`div`,{className:`flex flex-wrap items-center gap-2`,children:[d(zt,{variant:n.status===`running`?`success`:n.status===`failed`?`danger`:`warning`,children:t(`customize.blockStatus.${n.status}`)}),!n.enabled&&d(zt,{variant:`default`,children:t(`customize.status.off`)}),n.lastError!==void 0&&d(`span`,{className:`text-[11px] text-foreground-muted break-words`,children:n.lastError}),e.view.state.kind===`unreachable`&&d(`span`,{className:`text-[11px] text-warning`,children:t(`customize.status.composerUnreachable`,{reason:e.view.state.error})})]})}}}function wu({handle:e}){let{t}=Z(),n=Qt(),[i,o]=r(null);if(e.state.kind!==`present`)return null;let s=async()=>{if(!await n({title:t(`customize.remove.title`),message:t(`customize.remove.message`),confirmLabel:t(`customize.remove.confirm`),variant:`danger`}))return;let r=await e.save(null);o(r.kind===`refused`?r.reason:null)};return a(`div`,{className:`flex flex-col items-start gap-1`,children:[d(J,{variant:`danger`,size:`sm`,disabled:e.saving,onClick:()=>void s(),children:t(`customize.remove.button`)}),i!==null&&d(`p`,{role:`alert`,className:`text-[11px] text-danger break-words`,children:i})]})}var Tu=`overview`;function Eu(e,t){return e.some(e=>e.id===t)?t:Tu}function Du({deviceId:e}){let{t}=Z(),n=c(),r=Number.isFinite(e),{data:i}=On({deviceId:e},{enabled:r}),o=typeof i?.type==`string`?i.type:`camera`;xr([`deviceManager`,`getBindings`],[`capability.binding-changed`]);let{data:s,isLoading:l,isError:u,error:f}=Wt({deviceId:e},{enabled:r}),{data:p}=dr({deviceType:o},{enabled:!!o}),m=kt({onSuccess:()=>{n.invalidateQueries({queryKey:[[`deviceManager`,`getBindings`]]})}});if(l)return d(`div`,{className:`p-4`,children:d(`div`,{className:`h-20 rounded-lg border border-border bg-surface animate-pulse`})});if(u)return a(`div`,{className:`p-4 text-xs text-red-400`,children:[t(`device.bindingsTab.failedToLoadBindings`,`Failed to load bindings:`),` `,f instanceof Error?f.message:String(f)]});let h=new Map,g={};for(let e of p??[])g[e.capName]=e.wrappers;for(let e of s?.entries??[])h.set(e.capName,{...e,wrappers:g[e.capName]??[]});for(let e of p??[])h.has(e.capName)||h.set(e.capName,{capName:e.capName,kind:`unbound`,providerAddonId:``,providerNodeId:``,nativeAddonId:``,wrappers:e.wrappers});let _=[...h.values()].toSorted((e,t)=>e.capName.localeCompare(t.capName));if(_.length===0)return a(`div`,{className:`flex flex-col items-center justify-center gap-2 p-8 text-foreground-subtle`,children:[d(ft,{className:`h-8 w-8 opacity-40`}),d(`p`,{className:`text-xs`,children:t(`device.bindingsTab.noCapabilityProvidersApplicableTo`,`No capability providers applicable to this device yet.`)}),d(`p`,{className:`text-[10px] opacity-60`,children:t(`device.bindingsTab.nativeProvidersShowUpHere`,`Native providers show up here as soon as the owning addon registers them.`)})]});let v=_.filter(e=>e.kind!==`unbound`).length,y=[{key:`capability`,header:t(`device.bindingsTab.capability`,`Capability`),render:e=>d(`span`,{className:`font-mono text-foreground`,children:e.capName})},{key:`kind`,header:t(`device.bindingsTab.kind`,`Kind`),render:e=>d(Ou,{kind:e.kind})},{key:`provider`,header:t(`device.bindingsTab.activeProvider`,`Active Provider`),render:e=>d(`span`,{className:`font-mono text-foreground-subtle`,children:e.providerAddonId||d(`span`,{className:`opacity-40`,children:`—`})})},{key:`node`,header:t(`device.bindingsTab.node`,`Node`),render:e=>e.providerNodeId?d(ku,{nodeId:e.providerNodeId}):d(`span`,{className:`text-[10px] opacity-40`,children:`—`})},{key:`native`,header:t(`device.bindingsTab.kindNative`,`Native`),render:e=>d(`span`,{className:`font-mono text-foreground-subtle`,children:e.nativeAddonId||d(`span`,{className:`opacity-40`,children:`—`})})},{key:`wrapper`,header:t(`device.bindingsTab.wrapper`,`Wrapper`),render:t=>{let n=t.kind===`wrapped`?t.providerAddonId:null;return d(Au,{wrappers:t.wrappers,activeWrapperId:n,disabled:m.isPending,onPick:r=>{let i=n===r;m.mutate({deviceId:e,capName:t.capName,wrapperAddonId:r,active:!i})}})}}];return a(`div`,{className:`flex flex-col gap-3 p-1`,children:[d(`div`,{className:`text-[11px] text-foreground-subtle`,children:d(ci,{i18nKey:`device.bindingsTab.boundSummary`,count:_.length,values:{bound:v},components:{b:d(`span`,{className:`font-medium text-foreground`}),em:d(`em`,{})}})}),d(qn,{columns:y,rows:_,rowKey:e=>e.capName,minWidthPx:720})]})}function Ou({kind:e}){let{t}=Z();return e===`native`?a(`span`,{className:`inline-flex items-center gap-1 rounded-md border border-success/30 text-success bg-success/5 px-1.5 py-0.5 text-[10px] font-medium`,children:[d(re,{className:`h-3 w-3`}),t(`device.bindingsTab.kindNative`)]}):e===`wrapped`?a(`span`,{className:`inline-flex items-center gap-1 rounded-md border border-primary/30 text-primary bg-primary/5 px-1.5 py-0.5 text-[10px] font-medium`,children:[d(ht,{className:`h-3 w-3`}),t(`device.bindingsTab.wrapped`)]}):e===`linked`?a(`span`,{className:`inline-flex items-center gap-1 rounded-md border border-warning/30 text-warning bg-warning/5 px-1.5 py-0.5 text-[10px] font-medium`,children:[d(H,{className:`h-3 w-3`}),t(`device.bindingsTab.linked`)]}):a(`span`,{className:`inline-flex items-center gap-1 rounded-md border border-border text-foreground-subtle/70 px-1.5 py-0.5 text-[10px] font-medium`,children:[d(x,{className:`h-3 w-3`}),t(`common.unbound`)]})}function ku({nodeId:e}){return d(`span`,{className:`inline-flex items-center rounded-md border border-border px-1.5 py-0.5 font-mono text-[10px] ${e===`hub`?`text-foreground-subtle`:`text-foreground`}`,children:e})}function Au({wrappers:e,activeWrapperId:t,disabled:n,onPick:r}){let{t:i}=Z();return e.length===0?d(`span`,{className:`text-[10px] opacity-40`,children:i(`device.bindingsTab.noneAvailable`,`none available`)}):d(`div`,{className:`flex flex-wrap gap-1`,children:e.map(e=>{let o=e===t;return a(`button`,{disabled:n,onClick:()=>r(e),title:o?i(`device.bindingsTab.clickToDeactivateRevertTo`,`Click to deactivate (revert to native)`):i(`device.bindingsTab.activateWrapper`,`Activate wrapper {{wrapperId}}`,{wrapperId:e}),className:`inline-flex items-center gap-1 rounded-md border px-1.5 py-0.5 font-mono text-[10px] transition-colors disabled:opacity-50 ${o?`border-primary/40 bg-primary/10 text-primary`:`border-border text-foreground-subtle hover:text-foreground hover:bg-surface-hover`}`,children:[d(o?k:he,{className:`h-3 w-3`}),e]},e)})})}function ju({deviceId:e,activeSubTab:t,onSubTabChange:n,deviceType:r,isAdmin:i}){return a(`div`,{className:`flex flex-col gap-3`,children:[Xr(r,i)&&d(Pr,{deviceId:e,readOnly:!0}),d(oi,{deviceId:e,activeSubTab:t,onSubTabChange:n})]})}e();var Mu=[[`pipelineOrchestrator`,`getCameraDetectionSource`]];function Nu(e){let t=c(),n=Fr({deviceId:e},{refetchOnMount:`always`}),a=vn(),[o,s]=r(null),[l,u]=r(null),d=i(async n=>{u(null),s(n);try{await a.mutateAsync({deviceId:e,source:n}),await t.invalidateQueries({queryKey:Mu})}catch(e){u(e instanceof Error?e.message:`Could not change the root detector`),await t.invalidateQueries({queryKey:Mu})}finally{s(null)}},[e,a,t]),f=n.data??null;return{view:f,isLoading:n.isLoading,source:o??f?.source??null,saving:o!==null,error:l,pick:d}}var Pu=`object-detection`;function Fu(e){return[e.addonId,...e.children.flatMap(Fu)]}function Iu(e,t){if(e===`pipeline`)return new Set;let n=Lu(t,Pu);return n===void 0?new Set:new Set(e===`onboard`?[n.addonId]:Fu(n))}function Lu(e,t){for(let n of e){if(n.addonId===t)return n;let e=Lu(n.children,t);if(e!==void 0)return e}}function Ru(e,t){return e===`onboard`?X.t(`helpers.detectionSourceModel.badgeCameraAi`):t===`object-detection`?X.t(`helpers.detectionSourceModel.badgeNoRoot`):X.t(`helpers.detectionSourceModel.badgeIdle`)}function zu(e){switch(e){case`pipeline`:return X.t(`helpers.detectionSourceModel.explainPipeline`);case`onboard`:return X.t(`helpers.detectionSourceModel.explainOnboard`);case`none`:return X.t(`helpers.detectionSourceModel.explainNone`)}}function Bu(e){switch(e){case`boxed`:return``;case`while-streaming`:return X.t(`helpers.detectionSourceModel.geometryWhileStreaming`);case`flag-only`:return X.t(`helpers.detectionSourceModel.geometryFlagOnly`);case`unknown`:return X.t(`helpers.detectionSourceModel.geometryUnknown`)}}function Vu(e,t){return e===`onboard`?X.t(`helpers.detectionSourceModel.noticeOnboard`):t===`object-detection`?X.t(`helpers.detectionSourceModel.noticeNoRoot`):X.t(`helpers.detectionSourceModel.noticeIdle`)}var Hu=[`pl-2`,`pl-6`,`pl-10`,`pl-14`],Uu={detector:`success`,cropper:`info`,classifier:`primary`,refiner:`warning`,"audio-classifier":`neutral`};function Wu(e){return Hu[Math.min(e,Hu.length-1)]??`pl-2`}function Gu(e){return e.zoneDriven?{kind:`zone-driven`}:{kind:`gate`,effectiveOn:e.ownOn,defaultOn:e.defaultOn,explicit:e.choice!==`auto`}}function Ku(e,t,n){return e.kind===`parent`?n:Ru(e.source,t)}function qu({inputs:e,outputs:t}){return e.length===0&&t.length===0?null:a(`span`,{className:`inline-flex flex-wrap items-center gap-1`,children:[e.map(e=>d(zt,{size:`sm`,variant:`info`,children:e},`in-${e}`)),e.length>0&&t.length>0&&d(`span`,{className:`text-[10px] text-foreground-subtle`,"aria-hidden":!0,children:`→`}),t.map(e=>d(zt,{size:`sm`,variant:`success`,children:e},`out-${e}`))]})}function Ju({rows:e,label:t,selectedId:n,busy:r,onOpen:i,onSet:o}){let{t:s}=Z(),c=e=>{switch(e){case`detector`:return s(`device.cameraStepInspector.kindDetector`,`detector`);case`cropper`:return s(`device.cameraStepInspector.kindCropper`,`cropper`);case`classifier`:return s(`device.cameraStepInspector.kindClassifier`,`classifier`);case`refiner`:return s(`device.cameraStepInspector.kindRefiner`,`refiner`);case`audio-classifier`:return s(`device.cameraStepInspector.kindAudio`,`audio`)}},l=s(`device.cameraStepInspector.offBecauseParent`,`Off because its parent is off`);return d(`ul`,{"aria-label":t,className:`divide-y divide-border rounded-md border border-border`,children:e.map(e=>{let t=e.stepId===n,s=e.blocked===null?null:Ku(e.blocked,e.stepId,l);return a(`li`,{"data-step":e.stepId,"data-runs":e.runs?`yes`:`no`,className:`flex flex-wrap items-center gap-x-2 gap-y-1.5 py-2 pr-2 ${Wu(e.depth)} ${t?`bg-primary/10`:e.runs?``:`bg-muted/40`}`,children:[a(`button`,{type:`button`,"aria-expanded":t,onClick:()=>i(e.stepId),className:`flex min-w-0 flex-1 flex-wrap items-center gap-x-2 gap-y-1 text-left`,children:[d(`span`,{className:`text-sm font-medium ${e.runs?`text-foreground`:`text-foreground-muted`}`,children:e.name}),d(zt,{size:`sm`,variant:Uu[e.kind],children:c(e.kind)}),d(qu,{inputs:e.inputs,outputs:e.outputs}),s!==null&&d(`span`,{className:`text-[11px] text-warning`,children:s})]}),d(pr,{gate:Gu(e),busy:r,onSet:t=>o(e.stepId,t)})]},e.stepId)})})}function Yu(e,t){let n=e?.[t];return n===void 0?`auto`:n?`on`:`off`}function Xu(e,t){return e===`auto`?t:e===`on`}function Zu(e,t,n){return e!==`onboard`&&e!==`none`||!n.has(t)?null:{kind:`source`,source:e}}function Qu(e,t,n,r,i){let a=e.zoneDrivenIds??new Set;return t.flatMap(t=>{let o=a.has(t.addonId),s=Yu(e.toggles,t.addonId),c=e.defaults[t.addonId]??!0,l=o||Xu(s,c),u=r===null?Zu(e.source,t.addonId,i):{kind:`parent`,ancestorId:r.stepId},d={stepId:t.addonId,name:t.addonName,kind:t.slot,depth:n,inputs:t.inputClasses,outputs:t.outputClasses,choice:s,defaultOn:c,ownOn:l,runs:u===null&&l,blocked:u,zoneDriven:o},f=l?r:{stepId:t.addonId};return[d,...Qu(e,t.children,n+1,f,i)]})}function $u(e){let t=e.source===null?new Set:Iu(e.source,e.tree);return Qu(e,e.tree,0,null,t)}function ed({source:e,geometry:t,saving:n,error:r,onPick:i}){let{t:o}=Z(),s=t===`flag-only`,c=Bu(t);return a(`section`,{"aria-label":o(`device.detectionSourceControl.rootDetector`,`Root detector`),"aria-busy":n,className:`space-y-1.5 rounded-md border border-border bg-surface px-3 py-2`,children:[a(`div`,{className:`flex flex-wrap items-center gap-x-3 gap-y-1.5`,children:[d(`h3`,{className:M,children:o(`device.detectionSourceControl.rootDetector`,`Root detector`)}),d(Ar,{label:o(`device.detectionSourceControl.rootDetector`,`Root detector`),value:e,onChange:t=>{!n&&t!==e&&i(t)},options:[{value:`pipeline`,label:o(`device.detectionSourceControl.thisNode`,`This node`)},{value:`onboard`,label:o(`device.detectionSourceControl.cameraOnboardAi`,`Camera onboard AI`),disabled:s&&e!==`onboard`,reason:c},{value:`none`,label:o(`device.detectionSourceControl.none`,`None`)}]}),n&&d(`span`,{className:`text-[10px] text-foreground-subtle`,children:o(`device.detectionSourceControl.saving`,`Saving…`)})]}),a(`p`,{className:ge,children:[zu(e),` `,o(`device.detectionSourceControl.oneRoot`)]}),c!==``&&d(`p`,{className:`text-[10px] text-foreground-subtle`,children:c}),r!==null&&d(`p`,{role:`alert`,className:`text-[11px] text-danger`,children:r})]})}e();var td=new Set([`package-detection`]),nd=`/system/pipeline?view=nodes`;function rd(e){return Object.fromEntries(e.slots.flatMap(e=>e.addons.map(e=>[e.id,e.enabledByDefault??!0])))}function id({deviceId:e}){let{t}=Z(),s=Qt(),u=It(),f=c(),p=U().trpcClient,m=l(null),h=l(null),g=Vr({deviceId:e},{refetchOnMount:`always`}),_=er(void 0,{refetchOnMount:`always`});xr([`nodes`,`topology`],[`agent.online`,`agent.offline`,`agent.unregistered`,`addon.installed`,`addon.uninstalled`]);let{nodes:v}=_t(),y=n(()=>{let e=new Set((_.data??[]).map(e=>e.nodeId));return v.filter(t=>t.isOnline&&e.has(t.id)).map(e=>({id:e.id,name:e.name}))},[_.data,v]),b=y.map(e=>e.id).join(`,`),x=o({enabled:y.length>0,queryKey:[[`pipelineExecutor`,`getSchema`],`camera-step-schemas`,b],queryFn:async()=>{let e={};for(let t of y)try{e[t.id]=await p.pipelineExecutor.getSchema.query({nodeId:t.id})}catch{}return e}}),S=i(()=>{f.invalidateQueries({queryKey:[[`pipelineOrchestrator`,`getCameraSettings`]]})},[f]),C=xn({onSuccess:S}),w=hn(),[T,E]=r(null),[D,O]=r(!1),[k,A]=r(null),j=Nu(e),M=x.data??{},N=g.data??null,P=y.map(e=>M[e.id]).find(e=>e!==void 0)??null,F=n(()=>P?Ut(P):[],[P]),ee=n(()=>P===null?[]:$u({tree:F,toggles:N?.stepToggles,defaults:rd(P),source:j.source,zoneDrivenIds:td}),[F,P,N?.stepToggles,j.source]),{selection:I,open:te,close:L}=Oi(n(()=>ee.map(e=>e.stepId),[ee]),[]),ne=y[0]?.id,R=i(async e=>{if(T!==null){if(!await s({title:t(`stepInspector.stepMatrixFrame.discardUnsavedChanges`,`Discard unsaved changes?`),message:t(`stepInspector.stepMatrixFrame.thisStepHasChangesThat`,`This step has changes that are not saved yet.`),confirmLabel:t(`stepInspector.stepMatrixFrame.discard`,`Discard`),variant:`danger`}))return;E(null)}e()},[s,T,t]),re=e=>{e!==I.stepId&&R(()=>te({stepId:e}))},z=()=>{R(()=>L())};if(_.isLoading||y.length>0&&x.isLoading)return d(`div`,{className:`animate-pulse p-4 text-xs text-foreground-subtle`,children:t(`device.cameraStepInspector.loadingPipeline`,`Loading pipeline…`)});if(y.length===0)return d(`div`,{className:`p-4 text-xs text-foreground-subtle`,children:t(`device.cameraStepInspector.noPipelineNodeIsOnline`,`No pipeline node is online.`)});if(P===null)return d(`div`,{className:`p-4 text-xs text-foreground-subtle`,children:t(`device.cameraStepInspector.catalogUnavailable`,`Catalog unavailable.`)});let B=e=>_.data?.find(e=>e.nodeId===ne)?.settings.stepSettings?.[e]??{},V=ee.find(e=>e.stepId===I.stepId)??null,H=V===null?null:Di(P,V.stepId),ae=u?d(an,{onClick:z}):d(Gr,{icon:ie,variant:`ghost`,size:`sm`,"aria-label":t(`common.close`,`Close`),onClick:z});return a(`div`,{ref:m,className:`space-y-2`,children:[j.view?.onboard.available===!0&&j.source!==null&&d(ed,{source:j.source,geometry:j.view.onboard.geometry,saving:j.saving,error:j.error,onPick:e=>void j.pick(e)}),d(`p`,{className:ge,children:d(ci,{i18nKey:`device.cameraStepInspector.modelsChosenByAccelerators`,components:{nodes:d(ii,{to:nd,className:`font-medium text-primary hover:underline`})}})}),I.staleStepId!==null&&d(`p`,{className:`rounded-md border border-warning/40 bg-warning/10 px-3 py-1.5 text-[11px] text-warning`,children:t(`stepInspector.stepMatrixFrame.staleStep`,{id:I.staleStepId})}),d(Ju,{rows:ee,label:t(`device.cameraStepInspector.detectionStepsOfThisCamera`,`Detection steps of this camera`),selectedId:I.stepId,busy:C.isPending,onOpen:re,onSet:(t,n)=>C.mutate({deviceId:e,addonId:t,enabled:n})}),d(Un,{open:V!==null&&H!==null,anchor:m,onClose:z,label:t(`stepInspector.stepMatrixFrame.stepSettings`,`Step settings`),children:V!==null&&H!==null&&d(ad,{addon:H,nodeBag:B(V.stepId),storedCamera:N?.stepSettings?.[V.stepId],draft:T?.stepId===V.stepId?T:null,saving:D,status:k,notice:V.blocked?.kind===`source`?Vu(V.blocked.source,V.stepId):null,closeButton:ae,onEscape:z,headingRef:e=>{h.current=e},onDraft:e=>{A(null),E({stepId:V.stepId,camera:e})},onDiscard:()=>E(null),onSave:async n=>{O(!0);try{await w.mutateAsync({deviceId:e,addonId:V.stepId,settings:Object.keys(n).length>0?{...n}:null}),E(null),A({kind:`saved`})}catch(e){A({kind:`error`,error:e instanceof Error?e.message:t(`device.cameraStepInspector.saveFailed`)})}finally{O(!1),S()}}})})]})}function ad({addon:e,nodeBag:t,storedCamera:n,draft:r,saving:i,status:o,notice:s,closeButton:c,onEscape:l,headingRef:u,onDraft:f,onDiscard:p,onSave:m}){let{t:h}=Z(),g=ln(e),_=Ai(g),v=ki(g),y=r?.camera??n,b=r!==null&&!it(r.camera,n??{});return d(Dn,{ref:u,title:h(`device.cameraStepInspector.thisCamera`,`{{name}} · this camera`,{name:e.name}),subtitle:e.slot,leading:c,onEscape:l,..._.length>0?{saveBar:{dirtyCount:+!!b,saving:i,status:o?.kind??null,...o?.error===void 0?{}:{error:o.error},onSave:()=>void m(r?.camera??n??{}),onDiscard:p,scope:d(`p`,{className:ge,children:h(`device.cameraStepInspector.appliesToAllAcceleratorsOf`,`Applies to: all accelerators of this camera.`)})}}:{},children:a(`div`,{className:`space-y-3`,children:[s!==null&&d(`p`,{role:`note`,className:`rounded-md border border-warning/40 bg-warning/10 px-3 py-1.5 text-[11px] text-warning`,children:s}),_.length>0?d(od,{addon:e,fields:_,nodeBag:t,cameraBag:y,onChange:f}):d(`p`,{className:ge,children:h(`device.cameraStepInspector.noCameraSettings`,`This step has no settings on this camera.`)}),v&&d(`p`,{className:`text-[10px] text-foreground-subtle`,"data-testid":`accelerator-only-thresholds`,children:h(`device.cameraStepInspector.thresholdsAreTheAccelerators`,`Confidence thresholds belong to the model, so they are set on the accelerator that runs it (Pipeline → Nodes), not per camera.`)})]})})}function od({addon:e,fields:t,nodeBag:n,cameraBag:r,onChange:i}){let{t:a}=Z();return d(Ur,{addon:e,fields:t,layers:{node:n,...r===void 0?{}:{camera:r}},target:`camera`,labels:{camera:a(`device.cameraStepInspector.layerCamera`,`This camera`),node:a(`device.cameraStepInspector.layerNode`,`Node`)},modelId:e.defaultModelId,onChangeLayer:i})}function sd(e,t,n){return{id:e,get label(){return X.t(t)},icon:n}}var cd=[sd(`object-detection`,`helpers.detectionSettingsGroups.objectDetection`,`scan-search`),sd(`tracking`,`helpers.detectionSettingsGroups.tracking`,`route`),sd(`motion`,`helpers.detectionSettingsGroups.motion`,`activity`),sd(`stationary`,`helpers.detectionSettingsGroups.stationary`,`square-parking`),sd(`zones`,`helpers.detectionSettingsGroups.zones`,`shapes`),sd(`audio`,`helpers.detectionSettingsGroups.audio`,`volume-2`),sd(`cluster`,`helpers.detectionSettingsGroups.cluster`,`server`)],ld={"pipeline-object-detection":`object-detection`,"detection-sensitivity":`object-detection`,"onboard-object-detection":`object-detection`,tracking:`tracking`,"tracking-core":`tracking`,"motion-tuning":`motion`,"stationary-objects":`stationary`,occupancy:`stationary`,zones:`zones`,"pipeline-audio":`audio`,"cluster-assignment":`cluster`,"orchestrator-live":`cluster`};function ud(e){return ld[e]??`object-detection`}e();var dd=`steps`,fd=`settings`,pd=new Set([dd,fd]);function md(e){return e.location===`top-tab`&&(e.tab===`detection-pipeline`||e.tab===`zones`)}function hd({deviceId:e,activeSubTab:t,onSubTabChange:n}){let{t:r}=Z();return a(rr,{value:t&&pd.has(t)?t:dd,onValueChange:i(e=>{n?.(e)},[n]),className:`flex flex-col`,children:[a(tr,{className:`flex-shrink-0`,children:[d(Yt,{value:dd,children:r(`device.detectionPipelineTab.steps`,`Steps`)}),d(Yt,{value:fd,children:r(`device.detectionPipelineTab.settings`,`Settings`)})]}),d(vt,{value:dd,children:d(id,{deviceId:e})}),d(vt,{value:fd,children:d(oi,{deviceId:e,sectionFilter:md,subTabGrouping:{groupOf:e=>ud(e.id),tabs:cd}})})]})}var gd=`Notifications`,_d={i18nKey:`device.deviceNotificationMute.cameraCostWhenOff`,text:`This camera never notifies — no rule, no target, no alarm. Existing events, tracks and recordings are unaffected.`},vd={i18nKey:`device.deviceNotificationMute.deviceCostWhenOff`,text:`This device never notifies — no rule, no target, no alarm.`};function yd(e){let{mutedDeviceIds:t,deviceId:n}=e,r=t===null?null:!t.includes(n),i=e.pendingOn??null;return{label:gd,on:r===null?null:i??r,available:r!==null,costWhenOff:e.isCamera?_d:vd}}function bd(e,t){return!e.available||e.on===null?null:{deviceId:t,muted:e.on}}e();function xd(e){if(typeof e!=`object`||!e)return null;let t={...e}.mutedDeviceIds;return Array.isArray(t)?t.filter(e=>typeof e==`number`):null}function Sd({deviceId:e,isCamera:t}){let{t:n}=Z(),o=c(),s=Number.isFinite(e),[l,u]=r(null),[f,p]=r(null),m=yd({mutedDeviceIds:xd(Pt({},{enabled:s}).data),deviceId:e,isCamera:t,pendingOn:f}),h=n(m.costWhenOff.i18nKey,m.costWhenOff.text),g=yr({onError:t=>{console.error(`[DeviceNotificationMute] mute write failed — reverting`,{tags:{deviceId:e},meta:{error:t instanceof Error?t.message:String(t)}}),p(null),u(t instanceof Error?t.message:String(t)),o.invalidateQueries({queryKey:[[`notificationRules`,`listDeviceMutes`]]})},onSuccess:()=>{u(null),p(null),o.invalidateQueries({queryKey:[[`notificationRules`]]})}}),_=i(()=>{let t=bd(m,e);t!==null&&(p(!t.muted),g.mutate(t))},[e,g,m]),v=m.on===null,y=m.on===!1,b=y?dt:D;return a(`div`,{className:`rounded-lg border border-border bg-surface overflow-hidden`,children:[a(`div`,{className:`border-b border-border px-4 py-2 flex items-center justify-between gap-2`,children:[d(`h2`,{className:`text-xs font-semibold text-foreground uppercase tracking-wider`,children:n(`device.deviceNotificationMute.notifications`,`Notifications`)}),y&&d(`span`,{className:`rounded bg-warning/20 px-1.5 py-0.5 text-[9px] font-semibold uppercase tracking-wide text-warning`,children:n(`common.muted`)})]}),a(`div`,{className:`px-4 py-3 flex items-start gap-3`,children:[a(`button`,{type:`button`,role:`switch`,"aria-label":m.label,"aria-checked":m.on===!0,disabled:!m.available||g.isPending,onClick:_,title:v?n(`device.deviceNotificationMute.notificationMuteStateUnknownThe`,`Notification mute — state unknown; the notification centre did not answer.`):y?n(`device.deviceNotificationMute.muted`,`Muted. {{costWhenOff}}`,{costWhenOff:h}):n(`device.deviceNotificationMute.notifyingMutingIt`,`Notifying. Muting it: {{costWhenOff}}`,{costWhenOff:h}),className:`inline-flex items-center gap-1.5 rounded-lg border px-2 py-1.5 text-[11px] font-medium transition-colors disabled:cursor-not-allowed ${l===null?v?`border-dashed border-border text-foreground-subtle/50`:y?`border-warning/40 text-warning hover:bg-warning/10`:`border-success/30 text-success hover:bg-success/10`:`border-danger/50 text-danger bg-danger/5`}`,children:[d(b,{className:`h-3.5 w-3.5`}),d(`span`,{children:v?n(`device.deviceNotificationMute.unknown`,`Unknown`):y?n(`device.deviceNotificationMute.muted2`,`Muted`):n(`device.deviceNotificationMute.notifying`,`Notifying`)})]}),d(`p`,{className:`flex-1 text-[11px] leading-relaxed text-foreground-subtle`,children:l===null?v?n(`device.deviceNotificationMute.theNotificationCentreDidNot`,`The notification centre did not answer, so this device’s mute state is unknown.`):h:n(`device.deviceNotificationMute.writeFailed`,`Write failed: {{failure}}`,{failure:l})})]})]})}function Cd(e,t){return{switchId:e,label:je[e].label,detail:t===void 0||t.length===0?null:t}}function wd(e){let t=new Map;for(let n of e.switches)n.deviceId===e.sourceId&&(t.has(n.switchId)||t.set(n.switchId,n));return t}function Td(e){let t=wd(e),n=new Set(e.sourceStillLive),r=e.sourceStillLive.map(e=>Cd(e,t.get(e)?.detail)),i=[...t.values()].filter(e=>e.outcome===`not-offered`&&!n.has(e.switchId)).map(e=>Cd(e.switchId,e.detail));return{inheritedId:e.sourceId,retiredId:e.targetId,swapped:e.swapped,verdict:r.length===0?`quiet`:`still-live`,stillLive:r,neverOffered:i}}e();function Ed(e,t){return e.filter(e=>e.isCamera&&e.id!==t).map(e=>({id:e.id,name:e.name})).toSorted((e,t)=>e.name.localeCompare(t.name))}function Dd({deviceId:e,deviceName:t}){let{t:i}=Z(),o=Qt(),[s,c]=r(null),l=Dr({isCamera:!0,projection:`slim`}),u=Tr(),f=l.data!==void 0,p=n(()=>l.data===void 0?[]:Ed(l.data,e),[l.data,e]),m=p.find(e=>e.id===s)??null,h=u.data===void 0?null:Td(u.data),g=u.error===null?null:u.error.message,_=async()=>{m===null||m.id===e||await o({title:i(`deviceMigrate.confirmTitle`,`Replace “{{source}}” with “{{target}}”?`,{source:t,target:m.name}),message:i(`deviceMigrate.confirmMessage`,`“{{target}}” takes over number {{sourceId}}. That number is what every recording, event, rule, zone and home-automation export of “{{source}}” is filed under, so all of it follows the number to the new hardware and keeps working. “{{source}}” is switched off and handed number {{targetId}} in exchange. This swaps two device identities and cannot be undone from here.`,{source:t,target:m.name,sourceId:e,targetId:m.id}),confirmLabel:i(`deviceMigrate.confirmAction`,`Migrate`),variant:`danger`})&&u.mutate({sourceId:e,targetId:m.id})};return a(`div`,{className:`rounded-lg border border-border bg-surface px-4 py-3`,children:[a(`div`,{className:`flex flex-wrap items-center justify-between gap-3`,children:[a(`div`,{className:`min-w-0`,children:[d(`h2`,{className:`text-xs font-semibold uppercase tracking-wider text-foreground`,children:i(`deviceMigrate.title`,`Migrate to…`)}),d(`p`,{className:`mt-0.5 text-[11px] text-foreground-subtle`,children:i(`deviceMigrate.subtitle`,`Replace this camera with other hardware you have already adopted. The new camera inherits number {{deviceId}}, so recordings, rules and integrations follow it.`,{deviceId:e})})]}),a(`div`,{className:`flex shrink-0 items-center gap-2`,children:[a(`select`,{"aria-label":i(`deviceMigrate.pickerLabel`,`Replacement camera`),className:`rounded-md border border-border bg-background px-2 py-1.5 text-xs text-foreground disabled:opacity-50`,disabled:!f||p.length===0||u.isPending,value:s===null?``:String(s),onChange:e=>{let t=e.target.value;c(t===``?null:Number(t))},children:[d(`option`,{value:``,children:f?i(`deviceMigrate.pickerPlaceholder`,`Select a camera…`):i(`deviceMigrate.pickerPending`,`Reading the fleet…`)}),p.map(e=>a(`option`,{value:String(e.id),children:[e.name,` (#`,e.id,`)`]},e.id))]}),a(`button`,{type:`button`,disabled:m===null||u.isPending,onClick:()=>{_()},className:`inline-flex shrink-0 items-center gap-1.5 rounded-md border border-border bg-background px-3 py-1.5 text-xs font-medium text-foreground hover:bg-surface disabled:opacity-50`,children:[d(st,{className:`h-3 w-3`}),u.isPending?i(`deviceMigrate.running`,`Migrating…`):i(`deviceMigrate.action`,`Migrate`)]})]})]}),f&&p.length===0&&d(`p`,{className:`mt-2 text-[11px] text-foreground-subtle`,children:i(`deviceMigrate.noTargets`,`No other camera is adopted, so there is nothing to migrate to.`)}),g!==null&&d(`p`,{className:`mt-2 text-[11px] text-danger`,children:i(`deviceMigrate.failed`,`Migration failed: {{error}}`,{error:g})}),h!==null&&d(Od,{report:h})]})}function Od({report:e}){let{t}=Z(),n=e.verdict===`quiet`;return a(`div`,{className:`mt-3 space-y-2 border-t border-border pt-3`,children:[d(`p`,{className:`text-[11px] text-foreground-subtle`,children:t(`deviceMigrate.swapped`,`The replacement now answers on number {{inheritedId}}; the old camera was handed number {{retiredId}}.`,{inheritedId:e.inheritedId,retiredId:e.retiredId})}),n?a(`div`,{className:`flex items-start gap-2 rounded-md border border-success/30 bg-success/5 px-3 py-2`,children:[d(oe,{className:`mt-0.5 h-3.5 w-3.5 shrink-0 text-success`}),d(`p`,{className:`text-[11px] leading-relaxed text-foreground`,children:t(`deviceMigrate.quiet`,`Every function on the replaced camera was switched off — the old hardware is quiet.`)})]}):a(`div`,{className:`rounded-md border border-warning/40 bg-warning/5 px-3 py-2`,children:[a(`div`,{className:`flex items-start gap-2`,children:[d(me,{className:`mt-0.5 h-3.5 w-3.5 shrink-0 text-warning`}),d(`p`,{className:`text-[11px] leading-relaxed text-foreground`,children:t(`deviceMigrate.stillLive`,`The replaced camera could not be reached, so these functions are STILL RUNNING on the old hardware. Nothing here failed to migrate — but until you unplug it or reach it physically, it can still produce data.`)})]}),d(`ul`,{className:`mt-2 space-y-1 pl-5`,children:e.stillLive.map(e=>a(`li`,{className:`text-[11px] text-foreground`,children:[d(`span`,{className:`font-medium`,children:e.label}),e.detail!==null&&a(`span`,{className:`text-foreground-subtle`,children:[` — `,e.detail]})]},e.switchId))})]}),e.neverOffered.length>0&&a(`div`,{className:`rounded-md border border-border px-3 py-2`,children:[a(`div`,{className:`flex items-start gap-2`,children:[d(mt,{className:`mt-0.5 h-3.5 w-3.5 shrink-0 text-foreground-subtle`}),d(`p`,{className:`text-[11px] leading-relaxed text-foreground-subtle`,children:t(`deviceMigrate.neverOffered`,`The replaced camera never offered these, so there was nothing to switch off. They are not running.`)})]}),d(`ul`,{className:`mt-2 space-y-1 pl-5`,children:e.neverOffered.map(e=>d(`li`,{className:`text-[11px] text-foreground-subtle`,children:e.label},e.switchId))})]})]})}e();function kd({deviceId:e}){let{t}=Z(),[n,i]=r(null),o=cn({onSuccess:e=>{i(e.changed?`Re-aligned with source — ${e.rebuiltChildren} child${e.rebuiltChildren===1?``:`ren`} rebuilt.`:`Already up to date.`)},onError:e=>i(`Re-sync failed: ${e.message}`)});return a(`div`,{className:`rounded-lg border border-border bg-surface px-4 py-3`,children:[a(`div`,{className:`flex items-center justify-between gap-3`,children:[a(`div`,{children:[d(`h2`,{className:`text-xs font-semibold uppercase tracking-wider text-foreground`,children:t(`device.resyncButton.reSync`,`Re-sync`)}),d(`p`,{className:`mt-0.5 text-[11px] text-foreground-subtle`,children:t(`device.resyncButton.reAlignThisDeviceS`,`Re-align this device's type, role, capabilities and units with its source.`)})]}),a(`button`,{type:`button`,disabled:o.isPending,onClick:()=>{i(null),o.mutate({camDeviceId:e})},className:`inline-flex shrink-0 items-center gap-1.5 rounded-md border border-border bg-background px-3 py-1.5 text-xs font-medium text-foreground hover:bg-surface disabled:opacity-50`,children:[d(ne,{className:`h-3 w-3 ${o.isPending?`animate-spin`:``}`}),o.isPending?t(`device.resyncButton.reSyncing`,`Re-syncing…`):t(`device.resyncButton.reSync`,`Re-sync`)]})]}),n!==null&&d(`p`,{className:`mt-2 text-[11px] text-foreground-subtle`,children:n})]})}function Ad(e){return e<1e3?`${e.toFixed(0)} kbps`:`${(e/1e3).toFixed(1)} Mbps`}function jd({device:e}){let{t}=Z(),n=Qr(),r=typeof e.id==`number`?e.id:null,i=String(e.type??``),o=i===q.Camera,s=i===q.Hub,c=e.features??[],l=c.includes(at.Resyncable),{data:u}=qt({deviceId:r??0},{enabled:r!==null&&o,refetchInterval:5e3}),f=u?.streams??{},p=Object.entries(f),m=c.includes(at.DoorbellButton),h=Zn(m?{deviceId:r??void 0,historyLimit:10}:void 0),g=h.latest?Date.now()-h.latest.timestamp<3e4:!1;return a(`div`,{className:`space-y-5`,children:[s&&r!==null&&d(Br,{deviceId:r,onOpenChild:e=>n(`/devices/${e}`)}),l&&r!==null&&d(kd,{deviceId:r}),o&&r!==null&&d(Dd,{deviceId:r,deviceName:String(e.name??``)}),r!==null&&d(Sd,{deviceId:r,isCamera:o}),o&&r!==null&&d(Or,{widgetId:`pipeline-orchestrator/pipeline-quick-stats`,host:`device-tab`,deviceId:r}),m&&d(Ln,{history:h.history,latestIsFresh:g}),o&&r!==null&&d(Or,{widgetId:`stream-broker/stream-broker-panel`,host:`device-tab`,deviceId:r}),o&&p.length>0&&a(`div`,{className:`@container rounded-lg border border-border bg-surface overflow-hidden`,style:{containerType:`inline-size`},children:[d(`div`,{className:`border-b border-border px-4 py-2`,children:d(`h2`,{className:`text-xs font-semibold text-foreground uppercase tracking-wider`,children:t(`device.overviewTab.streamNetwork`,`Stream Network`)})}),d(`div`,{className:`divide-y divide-border`,children:p.map(([e,n])=>a(`div`,{className:`px-4 py-2.5`,children:[a(`div`,{className:`flex items-center gap-2 mb-2`,children:[d(B,{className:`h-3 w-3 text-foreground-subtle`}),d(`span`,{className:`text-[11px] font-medium text-foreground`,children:e})]}),a(`div`,{className:`grid grid-cols-2 @[640px]:grid-cols-4 gap-2`,children:[d(Md,{label:t(`device.overviewTab.nominal`,`Nominal`),value:Ad(n.nominalBitrateKbps??0)}),d(Md,{label:t(`device.overviewTab.observed`,`Observed`),value:Ad(n.observedBitrateKbps??0)}),d(Md,{label:t(`device.overviewTab.peak`,`Peak`),value:Ad(n.peakBitrateKbps??0)}),d(Md,{label:t(`device.overviewTab.packetLoss`,`Packet Loss`),value:`${(n.packetLossPercent??0).toFixed(2)}%`,warning:(n.packetLossPercent??0)>1})]})]},e))})]}),d($r,{}),r!==null&&d(Kr,{deviceId:r})]})}function Md({label:e,value:t,warning:n}){return a(`div`,{children:[d(`p`,{className:`text-[10px] text-foreground-subtle`,children:e}),d(`p`,{className:`text-xs font-medium ${n?`text-warning`:`text-foreground`}`,children:t})]})}var Nd=`history`,Pd=[{id:`overview`,labelKey:`helpers.structuralTabs.overview`,cameraOnly:!1,adminOnly:!1},{id:`config`,labelKey:`helpers.structuralTabs.config`,cameraOnly:!1,adminOnly:!1},{id:ri,labelKey:`helpers.structuralTabs.customize`,cameraOnly:!1,adminOnly:!0},{id:Nd,labelKey:`helpers.structuralTabs.history`,cameraOnly:!1,adminOnly:!1},{id:`detection-pipeline`,labelKey:`helpers.structuralTabs.detectionPipeline`,cameraOnly:!0,adminOnly:!1},{id:`bindings`,labelKey:`helpers.structuralTabs.bindings`,cameraOnly:!0,adminOnly:!1}],Fd=new Set([q.Hub,q.Container]);function Id(e,t){let n=e===q.Camera,r=e===void 0||!Fd.has(e);return Pd.filter(e=>(n||!e.cameraOnly)&&(t||!e.adminOnly)&&(r||e.id!==`history`)).map(({id:e,labelKey:t})=>({id:e,label:X.t(t)}))}function Ld({provider:e,integrationId:t,name:n}){let r=Qr(),i=t===null?`/integrations`:`/integrations/${t}`,a=n===null?`Open integrations`:`Open integration ${n}`;return d(`button`,{type:`button`,onClick:()=>r(i),className:`shrink-0 rounded-md transition-opacity hover:opacity-80 focus:outline-none focus-visible:ring-1 focus-visible:ring-primary/50`,title:a,"aria-label":a,children:d(ti,{type:e,size:`lg`})})}e();var Rd=[{id:`logs`,icon:se,labelKey:`common.logs`},{id:`repl`,icon:pt,labelKey:`deviceDetail.repl`},{id:`events`,icon:T,labelKey:`common.events`},{id:`state`,icon:S,labelKey:`common.state`}];function zd(){let{t:e}=Z(),t=ue(),o=mi(),u=Number(o.deviceId),f=Number.isFinite(u),p=Qr(),m=c(),_=Qt(),v=U(),{user:b}=ai(),x=b?.isAdmin===!0,[S,C]=hi(),w=S.get(`tab`)??`overview`,T=S.get(`sub`),[E,D]=r(`logs`),O=`device-detail.left-col-width-px`,[k,A]=r(()=>{if(typeof window>`u`)return null;let e=window.localStorage.getItem(O),t=e?Number(e):NaN;return Number.isFinite(t)&&t>0?t:null}),j=l(k);j.current=k;function M(e){e.preventDefault();let t=e.clientX,n=e.currentTarget.previousElementSibling?.getBoundingClientRect().width??k??0,r=Math.max(330,Math.floor(window.innerWidth*.7)),i=e=>{A(Math.max(280,Math.min(r,n+(e.clientX-t))))},a=()=>{document.removeEventListener(`mousemove`,i),document.removeEventListener(`mouseup`,a);let e=j.current;if(e!==null)try{window.localStorage.setItem(O,String(Math.round(e)))}catch{}document.body.style.userSelect=``,document.body.style.cursor=``};document.body.style.userSelect=`none`,document.body.style.cursor=`col-resize`,document.addEventListener(`mousemove`,i),document.addEventListener(`mouseup`,a)}let{data:N,isLoading:F,isError:ee}=On({deviceId:u},{enabled:f,refetchInterval:5e3,retry:1}),{data:I}=on({deviceId:u},{enabled:f}),te=n(()=>{let e=I?.settings?.sections??[],t=I?.live?.sections??[],n=[...e,...t],r=new Set;for(let e of n)e.location===`top-tab`&&e.tab&&r.add(e.tab===`zones`?`detection-pipeline`:e.tab);return n.some(Jr)&&r.add(Zr),[...r].map(e=>e===`export`?{id:e,label:qr,isAddonContrib:!0}:{id:e,label:ye[e]?.label??e,isAddonContrib:!0})},[I]),L=N,R=String(L?.name??o.deviceId??`Device`),re=L?.online===!0,ie=re?`online`:`offline`,z=String(L?.addonId??`rtsp`),B=L?.features??[],V=L?.type,H=V===q.Camera,{data:ae}=fi(f?u:0),oe=V===q.Container,se=n(()=>(ae??[]).map(e=>({id:e.id,stableId:e.stableId,type:e.type,...e.sourceInfo?{sourceInfo:{id:e.sourceInfo.id}}:{}})),[ae]),le=n(()=>oe?Bt(se,typeof L?.linkDeviceId==`number`?L.linkDeviceId:null,typeof L?.primaryChildEntityId==`string`?L.primaryChildEntityId:null)?.id??null:null,[oe,se,L?.linkDeviceId,L?.primaryChildEntityId]),{data:fe}=on({deviceId:le??0},{enabled:le!==null}),me=n(()=>{if(le===null)return[];let e=fe?.settings?.sections??[],t=fe?.live?.sections??[],n=new Set;for(let r of[...e,...t])r.location===`top-tab`&&r.tab&&n.add(r.tab);return[...n].map(e=>({id:e,label:ye[e]?.label??e,isAddonContrib:!0,childDeviceId:le}))},[le,fe]),he=n(()=>Da({sections:[...I?.settings?.sections??[],...I?.live?.sections??[]],deviceId:u,...le===null?{}:{child:{sections:[...fe?.settings?.sections??[],...fe?.live?.sections??[]],deviceId:le}}}),[I,fe,u,le]),ge=typeof L?.parentDeviceId==`number`?L.parentDeviceId:null,{data:_e}=On({deviceId:ge??0},{enabled:ge!==null}),ve=It(),be=L?.disabled!==!0,xe=n(()=>{let e=I?.settings?.sections??[],t=I?.live?.sections??[];return Yr([...e,...t],V,x,I!==void 0)},[I,V,x]),Se=n(()=>{let e=new Set,t=[];for(let n of[...Id(V,x),...te,...me])n.id===`config`&&!xe||e.has(n.id)||(e.add(n.id),t.push(n));return t},[V,x,te,me,xe]),Ce=n(()=>Eu(Se,w),[Se,w]),we=i(e=>{C(t=>{let n=new URLSearchParams(t);e===`overview`?n.delete(`tab`):n.set(`tab`,e),n.delete(`sub`);for(let e of Ei)n.delete(e);return n},{replace:!0})},[C]),Te=i(e=>{C(t=>{let n=new URLSearchParams(t);return n.set(`sub`,e),n},{replace:!0})},[C]),Ee=(ae??[]).length>0,De=n(()=>Rd.filter(({featureGate:e})=>!e||B.includes(e)),[B]),{data:Oe}=Tn(void 0),ke=n(()=>L?ar(L,Oe):null,[L,Oe]),W=ke?.kind===`resolved`?ke.integration:null,Ae=W===null?ke?.kind===`unknown`?e(`deviceDetail.loadingIntegration`):ke?.kind===`orphan`?e(`deviceDetail.missingIntegration`):e(`deviceDetail.noIntegration`):W.name,je=W!==null&&W.addonId===z?W.name:z,Me=Nr({onSuccess:()=>{m.invalidateQueries({queryKey:[[`deviceManager`]]}),p(W?.id?`/integrations/${W.id}`:`/integrations`)}}),Ne=vr({onSuccess:()=>{m.invalidateQueries({queryKey:[[`deviceManager`]]})}}),Pe=Lt({onSuccess:()=>{m.invalidateQueries({queryKey:[[`deviceManager`]]})}}),Fe=Xn(),Ie=Kn({onSuccess:()=>{m.invalidateQueries({queryKey:[[`deviceManager`]]})}}),Le=B.includes(at.Rebootable),Re=B.includes(at.BatteryOperated),ze=Ht(v.trpcClient,Re&&f?u:null),Be=jt(v.trpcClient,f?u:null),Ve=ce(v.trpcClient,f?u:null,e=>e.runningState),He=Ve===void 0||Ve.running===null?null:Ve.running,Ue=sn(V??`unknown`,t).icon,[We,G]=r(!1),Ge=async()=>{if(!We){G(!0);try{let e=R.replace(/[^a-zA-Z0-9_.-]+/g,`_`),t=new Date().toISOString().replace(/[:.]/g,`-`);await Wi(`${P}/${String(u)}.jpg?force=1`,`${e}-${t}.jpg`)}finally{G(!1)}}},K=Ne.isPending||Pe.isPending,{data:Ke}=Dt({deviceId:u},{enabled:f&&H,refetchInterval:1e4}),qe=Ke?.agentNodeId??null,Je=typeof qe==`string`&&qe.length>0&&!qe.startsWith(`addon:`)?qe:void 0,{data:Ye}=Bn({deviceId:u,...Je?{nodeId:Je}:{}},{enabled:f&&H,refetchInterval:3e3,retry:!1}),{data:Xe}=Jt({deviceId:u},{enabled:f&&H,refetchInterval:3e3,retry:!1}),Ze=Xe?.level?.dbfs??null;function Qe(){if(!f)return null;switch(Ce){case`overview`:return d(jd,{device:L??{}});case`config`:return d(ju,{deviceId:u,activeSubTab:T,onSubTabChange:Te,deviceType:V,isAdmin:x});case`detection-pipeline`:return d(hd,{deviceId:u,activeSubTab:T,onSubTabChange:Te});case`bindings`:return d(Du,{deviceId:u});case Nd:return d(or,{deviceId:u,onNavigate:e=>p(e)});case ri:return d(yu,{deviceId:u,activeSubTab:T,onSubTabChange:Te});default:{let e=Ce,t=te.some(t=>t.id===e),n=me.find(t=>t.id===e);if(!t&&n===void 0)return null;let r=n?.childDeviceId??u;if(e===`export`)return d(oi,{deviceId:u,sectionFilter:Jr,activeSubTab:T,onSubTabChange:Te});let i=d(oi,{deviceId:r,sectionFilter:t=>t.location===`top-tab`&&(t.tab===e||e===`detection-pipeline`&&t.tab===`zones`),flattenSubTabs:e===`detection-pipeline`,activeSubTab:T,onSubTabChange:Te});return n!==void 0&&r!==u?d(nn,{deviceId:r,children:i}):i}}}return f?F?a(`div`,{className:`flex flex-col h-full`,children:[a(`div`,{className:`border-b border-border bg-surface px-6 py-4`,children:[d(`div`,{className:`h-4 w-48 rounded bg-surface-hover animate-pulse mb-3`}),d(`div`,{className:`h-8 w-64 rounded bg-surface-hover animate-pulse`})]}),d(`div`,{className:`flex-1 p-6`,children:d(`div`,{className:`h-40 rounded-lg border border-border bg-surface animate-pulse`})})]}):ee||!N?a(`div`,{className:`flex flex-col items-center justify-center h-full gap-3 text-foreground-subtle`,children:[d(`p`,{className:`text-lg font-semibold text-foreground`,children:e(`deviceDetail.deviceNotFound`,`Device not found`)}),d(`p`,{className:`text-xs`,children:d(ci,{i18nKey:`deviceDetail.noDeviceWithId`,values:{id:u},components:{code:d(`code`,{className:`font-mono bg-surface px-1.5 py-0.5 rounded text-[11px]`})}})}),d(`button`,{onClick:()=>p(`/integrations`),className:`mt-2 rounded-lg bg-primary px-4 py-1.5 text-xs font-medium text-primary-foreground hover:bg-primary/90 transition-colors`,children:e(`deviceDetail.backToIntegrations`,`Back to Integrations`)})]}):a(`div`,{className:`absolute inset-0 flex flex-col overflow-clip`,children:[a(`div`,{className:`border-b border-border bg-surface px-6 py-3 flex-shrink-0`,children:[d(`div`,{className:`mb-2`,children:d(Hr,{items:[{label:e(`deviceDetail.integrations`,`Integrations`),onClick:()=>p(`/integrations`)},W===null?{label:Ae}:{label:Ae,onClick:()=>p(`/integrations/${W.id}`)},{label:R}]})}),a(`div`,{className:`flex items-center gap-2 sm:gap-3`,children:[W!==null&&d(Ld,{provider:W.addonId,integrationId:W.id,name:W.name}),d(mn,{running:He,children:d(Ue,{className:`h-5 w-5 text-foreground-subtle shrink-0`,"aria-hidden":!0})}),a(`div`,{className:`min-w-0 flex-1`,children:[a(`div`,{className:`flex items-center gap-2 flex-wrap`,children:[d(`h1`,{className:`text-sm sm:text-base font-semibold text-foreground truncate`,children:R}),d(Cr,{status:ie}),Re&&d(wt,{status:ze,variant:`full`}),d(Rr,{status:Be})]}),ge!==null&&_e&&a(`button`,{type:`button`,onClick:()=>p(`/devices/${ge}`),className:`text-[10px] text-foreground-subtle hover:text-primary transition-colors mt-0.5 inline-flex items-center gap-1`,title:e(`deviceDetail.openParentDevice`,`Open parent device {{name}}`,{name:_e.name}),children:[d(`span`,{children:`↑`}),d(`span`,{className:`truncate`,children:String(_e.name??`Device #${ge}`)})]}),d(`div`,{className:`hidden md:flex items-center gap-3 mt-0.5 text-[10px] text-foreground-subtle`,children:B.length>0&&d(di,{capabilities:B})})]}),Ye&&d(`div`,{className:`hidden lg:flex`,children:d(Bd,{metrics:Ye,dbfs:Ze})}),a(`div`,{className:`flex items-center gap-1 shrink-0`,children:[a(`button`,{onClick:async()=>{be?await _({title:e(`deviceDetail.disable`,`Disable "{{name}}"?`,{name:R}),message:e(`deviceDetail.theDeviceWillStopProcessing`,`The device will stop processing streams and events. You can re-enable it later.`),confirmLabel:e(`common.disable`,`Disable`),variant:`danger`})&&Pe.mutate({deviceId:u}):Ne.mutate({deviceId:u})},disabled:K,title:be?e(`deviceDetail.disableDevice`,`Disable device`):e(`deviceDetail.enableDevice`,`Enable device`),className:`inline-flex items-center gap-1.5 rounded-lg px-2 sm:px-2.5 py-1.5 text-[11px] font-medium border transition-colors disabled:opacity-50 ${be?`border-success/30 text-success hover:bg-success/10`:`border-border text-foreground-subtle/50 hover:text-foreground hover:bg-surface-hover`}`,children:[d(g,{className:`h-3.5 w-3.5`}),d(`span`,{className:`hidden sm:inline`,children:K?e(`deviceDetail.updating`,`Updating…`):be?e(`deviceDetail.enabled`,`Enabled`):e(`deviceDetail.disabled`,`Disabled`)})]}),d(`div`,{className:`hidden sm:block h-5 w-px bg-border mx-1`}),H&&a(s,{children:[d(Zi,{deviceId:u}),d(`div`,{className:`hidden sm:block h-5 w-px bg-border mx-1`})]}),d($i,{deviceId:u}),d(jn,{triggerClassName:`ml-1`,items:[{id:`snapshot`,label:e(`deviceDetail.takeSnapshot`,`Take snapshot`),description:e(`deviceDetail.fetchAFreshFrameAnd`,`Fetch a fresh frame and download it.`),icon:h,disabled:We,onClick:()=>{Ge()}},{id:`reboot`,label:e(`deviceDetail.rebootDevice`,`Reboot device`),description:e(`deviceDetail.cameraGoesOfflineFor30`,`Camera goes offline for ~30 seconds.`),icon:pe,hidden:!Le,disabled:Fe.isPending,danger:!0,onClick:async()=>{await _({title:e(`deviceDetail.reboot`,`Reboot "{{name}}"?`,{name:R}),message:e(`deviceDetail.theCameraWillGoOffline`,`The camera will go offline for around 30 seconds while the firmware reboots.`),confirmLabel:e(`deviceDetail.reboot2`,`Reboot`),variant:`danger`})&&Fe.mutate({deviceId:u})}},{id:`restart-addon`,label:e(`deviceDetail.restartAddon`,`Restart addon`),description:e(`deviceDetail.bouncesEveryDeviceServedBy`,`Bounces every device served by {{servingAddonLabel}}.`,{servingAddonLabel:je}),icon:ne,disabled:Ie.isPending,danger:!0,onClick:async()=>{await _({title:e(`deviceDetail.restart`,`Restart "{{servingAddonLabel}}"?`,{servingAddonLabel:je}),message:e(`deviceDetail.restartingTheAddonWillBriefly`,`Restarting the addon will briefly disconnect every device served by it (not just "{{name}}"). Streams will reconnect automatically.`,{name:R}),confirmLabel:e(`deviceDetail.restart2`,`Restart`),variant:`danger`})&&Ie.mutate({addonId:z})}},{id:`delete`,label:e(`deviceDetail.deleteDevice`,`Delete device`),description:e(`deviceDetail.removeTheDeviceAndAll`,`Remove the device and all its settings.`),icon:y,separatorBefore:!0,disabled:Me.isPending,danger:!0,onClick:async()=>{await _({title:e(`deviceDetail.delete`,`Delete "{{name}}"?`,{name:R}),message:e(`deviceDetail.thisWillRemoveTheDevice`,`This will remove the device and all its settings. This action cannot be undone.`),confirmLabel:e(`common.delete`,`Delete`),variant:`danger`})&&Me.mutate({deviceId:u})}}]})]})]})]}),d(nn,{deviceId:u,device:L??void 0,children:d(Gn,{children:d(cr,{children:d(de,{children:d(Rn,{children:a(`main`,{className:ve?`flex-1 overflow-y-auto flex flex-col`:`flex-1 min-h-0 overflow-hidden flex flex-row`,children:[a(`div`,{className:ve?`flex flex-col bg-surface`:`${k===null?`w-1/2 lg:w-1/3`:``} flex-shrink-0 flex flex-col bg-surface min-h-0 overflow-y-auto`,style:!ve&&k!==null?{width:`${String(k)}px`}:void 0,children:[d(`div`,{className:H?`flex-shrink-0 border-b border-border-subtle bg-black`:ve?`flex-shrink-0 border-b border-border-subtle bg-surface`:`shrink-0 border-b border-border-subtle bg-surface`,children:H?d(La,{deviceId:u,intercomAvailable:B.includes(at.TwoWayAudio)}):a(`div`,{children:[d(wa,{deviceId:u,deviceName:R,deviceType:V??`unknown`,provider:z,isOnline:re,features:B}),d(Ta,{deviceId:u,widgets:he})]})}),H&&he.length>0&&d(`div`,{className:`flex-shrink-0 border-b border-border-subtle bg-surface pt-3 sm:pt-4`,children:d(Ta,{deviceId:u,widgets:he})}),a(`div`,{className:ve?`flex flex-col border-b border-border`:`flex-1 min-h-64 flex flex-col overflow-hidden`,children:[d(`div`,{className:`flex-shrink-0 border-b border-border-subtle px-2 py-1.5`,children:d(`div`,{className:`flex gap-1 overflow-x-auto -mx-1 px-1 pb-0.5`,children:De.map(({id:t,labelKey:n,icon:r})=>{let i=E===t;return a(`button`,{onClick:()=>D(t),title:e(n),className:`flex items-center gap-1 rounded px-2 py-1 text-[10px] font-medium transition-colors flex-shrink-0 ${i?`bg-primary/15 text-primary`:`text-foreground-subtle hover:text-foreground hover:bg-surface-hover`}`,children:[d(r,{className:`h-3 w-3`}),e(n)]},t)})})}),a(`div`,{className:ve?`h-72 overflow-hidden`:`flex-1 min-h-0 overflow-hidden`,children:[E===`logs`&&d(Ra,{deviceId:u,containerDeviceId:V===`container`?u:void 0}),E===`repl`&&d(za,{deviceId:u}),E===`events`&&d(Ba,{deviceId:u}),E===`state`&&d(Va,{deviceId:u})]})]})]}),!ve&&d(`div`,{role:`separator`,"aria-orientation":`vertical`,title:e(`deviceDetail.dragToResize`,`Drag to resize`),onMouseDown:M,className:`flex-shrink-0 w-1 cursor-col-resize bg-border hover:bg-primary/40 transition-colors group relative z-10`,children:d(`span`,{className:`absolute inset-y-0 -left-1 -right-1`})}),a(`div`,{className:ve?`flex flex-col`:`flex-1 min-w-0 min-h-0 flex flex-col overflow-hidden`,children:[d(`div`,{className:`flex-shrink-0 border-b border-border bg-surface px-4`,children:d(`div`,{className:`flex flex-nowrap overflow-x-auto md:flex-wrap md:overflow-x-visible items-center gap-0`,children:Se.map(e=>{let t=Ce===e.id;return a(`button`,{onClick:()=>we(e.id),className:`relative flex-shrink-0 px-3 py-2 text-xs font-medium transition-colors ${t?`text-primary`:`text-foreground-subtle hover:text-foreground`}`,children:[e.label,t&&d(`span`,{className:`absolute bottom-0 left-0 right-0 h-0.5 rounded-full bg-primary`})]},e.id)})})}),a(`div`,{className:ve?`p-3 flex flex-col gap-3`:`flex-1 min-h-0 overflow-y-auto p-4 flex flex-col gap-3`,children:[Ce===`overview`&&Ee&&d(ea,{parentDeviceId:u}),Qe()]})]})]})})})})})})]}):a(`div`,{className:`flex flex-col items-center justify-center h-full gap-3 text-foreground-subtle`,children:[d(`p`,{className:`text-lg font-semibold text-foreground`,children:e(`deviceDetail.invalidDeviceId`,`Invalid device id`)}),d(`p`,{className:`text-xs`,children:d(ci,{i18nKey:`deviceDetail.invalidSegment`,values:{segment:o.deviceId},components:{code:d(`code`,{className:`font-mono bg-surface px-1.5 py-0.5 rounded text-[11px]`})}})}),d(`button`,{onClick:()=>p(`/integrations`),className:`mt-2 rounded-lg bg-primary px-4 py-1.5 text-xs font-medium text-primary-foreground hover:bg-primary/90 transition-colors`,children:e(`deviceDetail.backToIntegrations`,`Back to Integrations`)})]})}function Bd({metrics:e,dbfs:t}){let n=ue(),{t:r}=Z(),i=Nn(e.phase??`idle`,n);return a(`div`,{className:`flex items-center gap-3 flex-shrink-0`,children:[a(`div`,{className:`flex items-center gap-1.5`,children:[d(`span`,{className:`h-1.5 w-1.5 rounded-full ${i.dotClass}`}),d(`span`,{className:`text-[10px] font-medium ${i.textColor}`,children:i.label})]}),d(`div`,{className:`h-3 w-px bg-border`}),a(`div`,{className:`flex items-center gap-1 text-[10px] text-foreground-subtle`,children:[d(fe,{className:`h-3 w-3`}),d(`span`,{className:`text-foreground tabular-nums`,children:(e.actualFps??0).toFixed(1)}),d(`span`,{children:r(`common.fpsWord`)})]}),a(`div`,{className:`flex items-center gap-1 text-[10px] text-foreground-subtle`,children:[d(ee,{className:`h-3 w-3`}),d(`span`,{className:`text-foreground tabular-nums`,children:(e.avgInferenceTimeMs??0).toFixed(0)}),d(`span`,{children:`ms`})]}),a(`div`,{className:`flex items-center gap-1 text-[10px] text-foreground-subtle`,title:r(`deviceDetail.currentAudioLevelDbfs`,`Current audio level (dBFS)`),children:[d(A,{className:`h-3 w-3`}),d(`span`,{className:`text-foreground tabular-nums`,children:t==null?`—`:t.toFixed(0)}),d(`span`,{children:`dB`})]}),(e.queueDepth??0)>0&&a(`span`,{className:`text-[10px] text-warning tabular-nums`,children:[`q:`,e.queueDepth]})]})}export{zd as DeviceDetailPage};
@@ -0,0 +1 @@
1
+ import{$ as e,G as t,S as n,a as r,x as i}from"./_virtual_mf___mfe_internal__admin_ui_host__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-CEHpkaJP.js";import{ot as a}from"./player-overlays-C2qGnksg.js";import{_n as o,bn as s,gn as c,hn as l,mn as u,vn as d,xn as f,yn as p}from"./client-B741nZQJ.js";import{L as m}from"./src-D1steZEF.js";import{t as h}from"./i18n-SRLxy4I7.js";import{t as g}from"./useTranslation-D3Is_4B6.js";import"./index-Av4-A8rY.js";e();var _=6e4;function v(e){let t=a();return r({queryKey:[`device-do-action`,`bound-caps`,e],enabled:e>0,staleTime:_,queryFn:async()=>{let n=await t.trpcClient.deviceManager.getBindings.query({deviceId:e});return[...new Set(n.entries.map(e=>e.capName))].sort((e,t)=>e.localeCompare(t))}})}function y(e){let t=a(),n=[...new Set(e.filter(e=>e>0))].sort((e,t)=>e-t);return r({queryKey:[`device-do-action`,`bound-caps-batch`,n],enabled:n.length>0,staleTime:_,queryFn:async()=>{let e=await t.trpcClient.deviceManager.getBindingsBatch.query({deviceIds:n}),r=new Map;for(let t of e)r.set(t.deviceId,[...new Set(t.entries.map(e=>e.capName))].sort((e,t)=>e.localeCompare(t)));return r}})}var b=`mt-1 w-full rounded border border-border bg-background px-2 py-1 text-xs`,x=`block text-[11px] font-medium text-foreground`,S=`deviceId`;function C(e,t){return t.length===0?0:t.length===1?t[0]:t.find(t=>!e.includes(t))??t[t.length-1]}function w(e,t,n){if(t.length===0)return[];if(t.length===1)return t;let r=t.find(t=>!e.includes(t));if(r===void 0)return t;let i=n(r);if(i===void 0)return[r];let a=e[0]??t.find(e=>e!==r);if(a===void 0)return[r];let o=n(a);return o===void 0||!f(o,i)?[r]:t.filter(e=>{let t=n(e);return t!==void 0&&f(o,t)})}function T(e){return e.length===0?0:e.length===1?e[0]:[...e]}function E(e){return typeof e==`number`?e>0?[e]:[]:Array.isArray(e)?e.filter(e=>e>0):[]}function D(e,t){return{deviceId:e,cap:t.cap,method:t.method,...t.args===void 0?{}:{args:{...t.args}}}}function O(e,t){return h.t(`deviceDoAction.customLabel`,{name:`${e}.${t}`})}function k({value:e,onChange:r,devices:a,listState:h,fleet:_,allowTriggerDevice:k=!1,allowMultiSameFamily:A=!1,testId:j=`device-do-action`}){let{t:M}=g(),N=typeof e.deviceId!=`number`&&!Array.isArray(e.deviceId),P=E(e.deviceId),F=t(()=>a.filter(e=>p(String(e.type??``))),[a]),I=t(()=>{let e=new Map;for(let t of F)t.type!==void 0&&t.type!==null&&e.set(t.id,String(t.type));return e},[F]),L=t(()=>{if(!A||P.length===0)return F;let e=I.get(P[0]);return e===void 0?F:F.filter(t=>{if(P.includes(t.id))return!0;let n=t.type!==void 0&&t.type!==null?String(t.type):void 0;return n!==void 0&&f(e,n)})},[A,P,F,I]),R=v(!A&&P.length===1?P[0]:0),z=y(A?P:[]),B=t(()=>N?o():P.length===0?[]:A?z.isLoading&&z.data===void 0?[]:c(P.map(e=>({boundCaps:z.data?.get(e),deviceType:I.get(e)}))):R.data===void 0&&R.isLoading?[]:l({boundCaps:R.data,deviceType:I.get(P[0])}),[N,P,A,z.data,z.isLoading,R.data,R.isLoading,I]),V=d(e.cap,e.method,e.args),H=s(e.cap,e.method,e.args),U=e.cap!==``&&e.method!==``&&H===null&&(N||P.length>0),W=A?z.isLoading:R.isLoading,G=A?z.isError:R.isError,K=t=>{if(t.startsWith(`custom:`))return;let n=u.find(e=>e.id===t);n!==void 0&&r(D(N?e.deviceId:P.length>0?T(P):F[0]?.id??0,n))};return n(`div`,{className:`flex min-w-0 flex-1 flex-col gap-2`,"data-testid":j,children:[k&&n(`div`,{className:`w-full max-w-xs`,children:[i(`label`,{className:x,children:M(`deviceDoAction.deviceDoActionFields.target`,`Target`)}),n(`select`,{className:b,"data-testid":`${j}-target`,value:N?`trigger`:`device`,onChange:e=>{if(e.target.value===`trigger`){r({deviceId:{$var:S},cap:``,method:``});return}r({deviceId:F[0]?.id??0,cap:``,method:``})},children:[i(`option`,{value:`device`,children:M(`deviceDoAction.deviceDoActionFields.specificDevice`,`Specific device`)}),i(`option`,{value:`trigger`,children:M(`deviceDoAction.deviceDoActionFields.theDeviceThatTriggeredThis`,`The device that triggered this run`)})]})]}),!N&&n(`div`,{"data-testid":`${j}-device`,children:[i(`label`,{className:x,children:M(`deviceDoAction.deviceLabel`,{count:A?2:1})}),i(m,{devices:L,listState:h,..._===void 0?{}:{fleet:_},value:[...P],onChange:e=>{r({deviceId:T(A?w(P,e,e=>I.get(e)):(()=>{let t=C(P,e);return t>0?[t]:[]})()),cap:``,method:``})},emptyLabel:A?`No devices selected`:`No device selected`,noun:`device`,testId:`${j}-device-picker`}),A&&P.length>1&&i(`p`,{className:`mt-1 text-[11px] text-foreground-subtle`,children:M(`deviceDoAction.deviceDoActionFields.sameFamilyOnlyTheAction`,`Same family only — the action runs on each selected device.`)})]}),n(`div`,{className:`w-full max-w-sm`,children:[i(`label`,{className:x,children:M(`deviceDoAction.deviceDoActionFields.action`,`Action`)}),n(`select`,{className:b,"data-testid":`${j}-action`,value:V===`custom:${e.cap}.${e.method}`?V:H?.id??``,disabled:!N&&(P.length===0||W),onChange:e=>K(e.target.value),children:[i(`option`,{value:``,children:!N&&P.length===0?M(`deviceDoAction.deviceDoActionFields.pickADeviceFirst`,`Pick a device first`):W?M(`deviceDoAction.deviceDoActionFields.loadingActions`,`Loading actions…`):B.length===0?M(`deviceDoAction.deviceDoActionFields.noActionsForThisDevice`,`No actions for this device`):M(`deviceDoAction.deviceDoActionFields.selectAnAction`,`Select an action…`)}),U&&i(`option`,{value:V,children:O(e.cap,e.method)}),B.map(e=>i(`option`,{value:e.id,children:e.label},e.id))]}),G&&i(`p`,{className:`mt-1 text-[11px] text-warning`,children:M(`deviceDoAction.deviceDoActionFields.couldNotReadThisDevice`,`Could not read this device’s capabilities.`)})]}),H?.openArgs!==void 0&&H.openArgs.length>0&&i(`div`,{className:`flex flex-col gap-2`,children:H.openArgs.map(t=>{let a=e.args?.[t.key],o=typeof a==`string`||typeof a==`number`?String(a):``;return n(`div`,{className:`w-full max-w-sm`,children:[i(`label`,{className:x,htmlFor:`${j}-${t.key}`,children:t.label}),i(`input`,{id:`${j}-${t.key}`,className:b,"data-testid":`${j}-${t.key}`,type:t.kind===`number`?`number`:`text`,value:o,onChange:n=>{let i=n.target.value,a=e.args===void 0?{}:{...e.args};if(i===``)delete a[t.key];else if(t.kind===`number`){let e=Number(i);Number.isNaN(e)?delete a[t.key]:a[t.key]=e}else a[t.key]=i;r(Object.keys(a).length>0?{...e,args:a}:{deviceId:e.deviceId,cap:e.cap,method:e.method})}})]},t.key)})})]})}export{k as t};
@@ -0,0 +1 @@
1
+ import{$ as e,G as t,L as n,S as r,o as i,x as a}from"./_virtual_mf___mfe_internal__admin_ui_host__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-CEHpkaJP.js";import{Di as o,Nt as s,ot as c}from"./player-overlays-C2qGnksg.js";import{Dt as l,Ha as u,Ot as d,Yo as f,qa as p,r as m,to as h,uo as g}from"./src-D1steZEF.js";import{t as _}from"./useTranslation-D3Is_4B6.js";import{_r as v,fr as y}from"./index-Av4-A8rY.js";import{t as b}from"./AdminPage-N36spL8r.js";import"./useEventInvalidation-BIknMBUl.js";import{t as x}from"./device-integration-icon-DpIPAgxb.js";e();var S=32;function C(e,t){let n=e=>t(e).kind===`orphan`,r=new Set;for(let t of e)n(t)&&r.add(t.id);let i=new Map;for(let t of e)i.set(t.id,t);let a=(e,t=0)=>{if(t>S)return!1;if(r.has(e.id))return!0;if(e.parentDeviceId==null)return!1;let n=i.get(e.parentDeviceId);return n?a(n,t+1):!1},o=[],s=[];for(let t of e)a(t)?s.push(t):o.push(t);return{activeDevices:o,orphanDevices:s}}function w(){let{t:e}=_(),S=v(),w=c(),T=i();m([`deviceManager`],[`device.registered`,`device.unregistered`,`device.online`,`device.offline`,`device.disabled`,`device.enabled`]),m([`integrations`],[`integration.enabled`,`integration.disabled`,`integration.deleted`,`provider.started`,`provider.stopped`,`addon.installed`,`addon.uninstalled`,`addon.started`,`addon.stopped`]);let{data:E}=h({projection:`slim`}),{data:D}=f(void 0),O=g({onSuccess:()=>{T.invalidateQueries({queryKey:[[`deviceManager`]]})}}),k=u({onSuccess:()=>{T.invalidateQueries({queryKey:[[`deviceManager`]]})}}),A=p({onSuccess:()=>{T.invalidateQueries({queryKey:[[`deviceManager`]]})}}),j=t(()=>E??[],[E]),M=t(()=>d(D),[D]),{activeDevices:N,orphanDevices:P}=t(()=>C(j,M),[j,M]),F=t(()=>{let e=new Map;for(let t of j)e.set(t.id,{id:t.id,name:t.name??t.stableId??`#${String(t.id)}`});return e},[j]),I=n(e=>F.get(e)??null,[F]),L=t(()=>(D??[]).map(e=>({id:e.id,name:e.name??e.addonId,icon:a(y,{type:e.addonId,size:`sm`})})),[D]),R=n(e=>S(`/devices/${String(e)}`),[S]);return r(b,{icon:o,title:e(`nav.devices`,`Devices`),children:[a(l,{context:`devices`,devices:N,trpc:w.trpcClient,filters:{integrations:L},integrationOf:M,resolveIntegrationIcon:x,resolveParent:I,onNavigate:R,batchActions:{remove:O.mutate,disable:k.mutate,enable:A.mutate}}),P.length>0&&r(`div`,{className:`mt-6 space-y-2`,children:[r(`div`,{className:`flex items-baseline gap-2`,children:[a(s,{className:`h-3.5 w-3.5 text-warning shrink-0`}),a(`h2`,{className:`text-sm font-semibold text-foreground`,children:e(`devices.orphanDevices`,`Orphan devices`)}),a(`span`,{className:`text-[10px] text-foreground-subtle`,children:e(`common.deviceOrphans`,{count:P.length})})]}),r(`div`,{className:`rounded-lg border border-warning/30 bg-warning/5 p-2`,children:[a(`p`,{className:`text-[11px] text-foreground-subtle px-2 pb-2`,children:e(`devices.theseDevicesReferenceAnIntegration`,"These devices reference an integration that is no longer registered (their `integrationId`, or — for older devices without one — their `addonId`). Delete them, or re-install the missing integration to bring them back online. The provider badge beside each row is the addon that serves it.")}),a(l,{context:`devices`,devices:P,trpc:w.trpcClient,integrationOf:M,urlScope:`nested`,lsKey:`devices:orphan`,resolveIntegrationIcon:x,resolveParent:I,onNavigate:R})]})]})]})}export{w as DevicesPage};
@@ -1 +1 @@
1
- import{$ as e,B as t,G as n,J as r,S as i,d as a,u as o,x as s}from"./_virtual_mf___mfe_internal__admin_ui_host__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-CEHpkaJP.js";import{it as c}from"./player-overlays-B2uKzPiF.js";import{Pi as l}from"./client-DUabg_ow.js";import{D as u,M as d,O as f,P as p,T as m,y as h}from"./__vite-browser-external-BlMfPwfH.js";import{$u as g,Zt as _,gn as v,tn as y,un as b}from"./src-N0x0aMoc.js";import{t as x}from"./useTranslation-D3Is_4B6.js";e();var S=p([f({kind:m(`adaptive`)}),f({kind:m(`profile`),profile:l})]),C=f({serverUrl:d().min(1),token:d().min(1),deviceId:u().int().nonnegative(),target:S,muted:h()});function w(e,t){let n=t===void 0?{type:`state`,state:e}:{type:`state`,state:e,message:t};window.ReactNativeWebView?.postMessage(JSON.stringify(n))}function T(e){switch(e){case`playing`:return`playing`;case`error`:return`error`;case`connecting`:case`disconnected`:case`idle`:return`connecting`}}function E(e){return e.kind===`adaptive`?{kind:`adaptive`}:{kind:`profile`,profile:e.profile}}function D(e){return e.kind===`adaptive`?`embed:adaptive`:`embed:profile:${e.profile}`}function O(){let e=window.__CAMSTACK_EMBED__;if(e==null)return{ok:!1,error:`window.__CAMSTACK_EMBED__ is not set`};let t=C.safeParse(e);return t.success?{ok:!0,config:t.data}:{ok:!1,error:t.error.issues.map(e=>`${e.path.join(`.`)||`(root)`}: ${e.message}`).join(`; `)}}function k({message:e}){let{t:n}=x();return t(()=>{w(`error`,e)},[e]),i(`div`,{style:{position:`fixed`,inset:0,display:`flex`,alignItems:`center`,justifyContent:`center`,background:`#000`,color:`#f87171`,fontFamily:`system-ui, sans-serif`,fontSize:13,padding:16,textAlign:`center`},children:[n(`embedPlayerPage.embedConfigError`,`Embed config error:`),` `,e]})}function A({system:e,deviceId:i,initialTarget:a,initialMuted:o}){let[c,l]=r(a),[u,d]=r(o),{handleOffer:f,getIceServers:p,addIceCandidate:m,getIceCandidates:h,closeSession:g,getSessionState:_,getSessionDebug:y,applyDownlinkProbe:x}=b(e.trpcClient,i),C=n(()=>E(c),[c]),O=n(()=>(e,t)=>f(C,e,t),[f,C]),k=n(()=>(e,t,n)=>f(n,t,e),[f]);t(()=>(window.__camstackEmbed={setMuted:e=>d(e),setTarget:e=>{let t=S.safeParse(e);t.success&&l(t.data)}},()=>{window.__camstackEmbed&&delete window.__camstackEmbed}),[]);let A=D(c);return s(`div`,{style:{position:`fixed`,inset:0,width:`100vw`,height:`100vh`,background:`#000`},children:s(v,{serverUrl:e.serverUrl,streamKey:A,autoPlay:!0,muted:u,showControls:!1,className:`w-full h-full`,getSessionDebug:y,applyDownlinkProbe:x,handleOffer:O,reoffer:k,getSessionState:_,getIceServers:p,addIceCandidate:m,getIceCandidates:h,closeSession:g,onStateChange:e=>w(T(e)),onError:e=>w(`error`,e)},A)})}function j(){let{t:e}=x(),r=n(()=>O(),[]),i=n(()=>{if(!r.ok)return null;let e=y({serverUrl:r.config.serverUrl,token:r.config.token}),t=new a({defaultOptions:{queries:{retry:!1,refetchOnWindowFocus:!1}}});return _(t),{system:e,queryClient:t}},[r]);return t(()=>{if(i)return()=>{i.system.close()}},[i]),r.ok?i?s(c,{system:i.system,children:s(o,{client:i.queryClient,children:s(g.Provider,{client:i.system.trpcClient,queryClient:i.queryClient,children:s(A,{system:i.system,deviceId:r.config.deviceId,initialTarget:r.config.target,initialMuted:r.config.muted})})})}):s(k,{message:e(`embedPlayerPage.failedToInitialiseTheEmbed`,`Failed to initialise the embed player`)}):s(k,{message:r.error})}export{j as EmbedPlayerPage};
1
+ import{$ as e,B as t,G as n,J as r,S as i,d as a,u as o,x as s}from"./_virtual_mf___mfe_internal__admin_ui_host__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-CEHpkaJP.js";import{it as c}from"./player-overlays-C2qGnksg.js";import{Yi as l}from"./client-B741nZQJ.js";import{D as u,M as d,O as f,P as p,T as m,y as h}from"./__vite-browser-external-BlMfPwfH.js";import{$t as g,fn as _,id as v,rn as y,vn as b}from"./src-D1steZEF.js";import{t as x}from"./useTranslation-D3Is_4B6.js";e();var S=p([f({kind:m(`adaptive`)}),f({kind:m(`profile`),profile:l})]),C=f({serverUrl:d().min(1),token:d().min(1),deviceId:u().int().nonnegative(),target:S,muted:h()});function w(e,t){let n=t===void 0?{type:`state`,state:e}:{type:`state`,state:e,message:t};window.ReactNativeWebView?.postMessage(JSON.stringify(n))}function T(e){switch(e){case`playing`:return`playing`;case`error`:return`error`;case`connecting`:case`disconnected`:case`idle`:return`connecting`}}function E(e){return e.kind===`adaptive`?{kind:`adaptive`}:{kind:`profile`,profile:e.profile}}function D(e){return e.kind===`adaptive`?`embed:adaptive`:`embed:profile:${e.profile}`}function O(){let e=window.__CAMSTACK_EMBED__;if(e==null)return{ok:!1,error:`window.__CAMSTACK_EMBED__ is not set`};let t=C.safeParse(e);return t.success?{ok:!0,config:t.data}:{ok:!1,error:t.error.issues.map(e=>`${e.path.join(`.`)||`(root)`}: ${e.message}`).join(`; `)}}function k({message:e}){let{t:n}=x();return t(()=>{w(`error`,e)},[e]),i(`div`,{style:{position:`fixed`,inset:0,display:`flex`,alignItems:`center`,justifyContent:`center`,background:`#000`,color:`#f87171`,fontFamily:`system-ui, sans-serif`,fontSize:13,padding:16,textAlign:`center`},children:[n(`embedPlayerPage.embedConfigError`,`Embed config error:`),` `,e]})}function A({system:e,deviceId:i,initialTarget:a,initialMuted:o}){let[c,l]=r(a),[u,d]=r(o),{handleOffer:f,getIceServers:p,addIceCandidate:m,getIceCandidates:h,closeSession:g,getSessionState:v,getSessionDebug:y,applyDownlinkProbe:x}=_(e.trpcClient,i),C=n(()=>E(c),[c]),O=n(()=>(e,t)=>f(C,e,t),[f,C]),k=n(()=>(e,t,n)=>f(n,t,e),[f]);t(()=>(window.__camstackEmbed={setMuted:e=>d(e),setTarget:e=>{let t=S.safeParse(e);t.success&&l(t.data)}},()=>{window.__camstackEmbed&&delete window.__camstackEmbed}),[]);let A=D(c);return s(`div`,{style:{position:`fixed`,inset:0,width:`100vw`,height:`100vh`,background:`#000`},children:s(b,{serverUrl:e.serverUrl,streamKey:A,autoPlay:!0,muted:u,showControls:!1,className:`w-full h-full`,getSessionDebug:y,applyDownlinkProbe:x,handleOffer:O,reoffer:k,getSessionState:v,getIceServers:p,addIceCandidate:m,getIceCandidates:h,closeSession:g,onStateChange:e=>w(T(e)),onError:e=>w(`error`,e)},A)})}function j(){let{t:e}=x(),r=n(()=>O(),[]),i=n(()=>{if(!r.ok)return null;let e=y({serverUrl:r.config.serverUrl,token:r.config.token}),t=new a({defaultOptions:{queries:{retry:!1,refetchOnWindowFocus:!1}}});return g(t),{system:e,queryClient:t}},[r]);return t(()=>{if(i)return()=>{i.system.close()}},[i]),r.ok?i?s(c,{system:i.system,children:s(o,{client:i.queryClient,children:s(v.Provider,{client:i.system.trpcClient,queryClient:i.queryClient,children:s(A,{system:i.system,deviceId:r.config.deviceId,initialTarget:r.config.target,initialMuted:r.config.muted})})})}):s(k,{message:e(`embedPlayerPage.failedToInitialiseTheEmbed`,`Failed to initialise the embed player`)}):s(k,{message:r.error})}export{j as EmbedPlayerPage};
@@ -0,0 +1 @@
1
+ import{$ as e,G as t,J as n,S as r,b 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-CEHpkaJP.js";import{Ci as s,It as c,bn as l,dt as u,hn as d,or as f,ot as p,sa as m,yr as h}from"./player-overlays-C2qGnksg.js";import{ir as g,xi as _}from"./client-B741nZQJ.js";import{$u as v,A as y,Aa as b,C as x,D as S,E as C,Fr as w,Hr as T,M as E,Ml as D,N as O,Nr as k,O as A,P as j,Pr as ee,S as te,_ as ne,_n as M,_r as N,b as P,cr as re,d as ie,f as ae,gn as F,gr as I,h as oe,ir as se,j as ce,k as le,ka as ue,m as de,mn as L,mr as fe,nr as pe,on as me,or as he,rr as ge,sn as _e,sr as ve,to as R,u as ye,v as be,vr as xe,w as Se,x as z,yr as B}from"./src-D1steZEF.js";import{t as V}from"./useTranslation-D3Is_4B6.js";import{yr as Ce}from"./index-Av4-A8rY.js";import{t as we}from"./AdminPage-N36spL8r.js";e();function H(e,t){return e.scope===``?e.displayName:`${e.displayName} · ${t?.(e)??e.scope}`}function Te(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:z(i),ref:i,info:e,subjectName:t.name,location:t.location??``,nodeId:``,metric:H(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:z(i),ref:i,info:t,subjectName:e.name,location:``,nodeId:e.id,metric:H(t,n)})}return r}function Ee(e){return[e.subjectName,e.location,e.metric,e.info.key,e.info.unit??``,e.nodeId].join(` `)}var De=[`energy`,`temperatures`,`nodes`,`storage`],Oe=new Set([`cap:temperature-sensor.celsius`,`cap:climate-control.currentTemp`]),U=[`addon:metrics-native/node-cpu-percent`,`addon:metrics-native/node-memory-percent`],ke=`addon:storage-orchestrator/location-used-percent`;function Ae(e,t){let n=(e,n)=>{let r=t.filter(e);return P((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`&&Oe.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`&&U.includes(e.info.key)&&e.info.scope===``,(e,t)=>U.indexOf(e.info.key)-U.indexOf(t.info.key)||e.subjectName.localeCompare(t.subjectName));case`storage`:return n(e=>e.ref.subject.kind===`node`&&e.info.key===ke)}}function je(e,t){let n=new Map(t.map(e=>[e.id,e])),r=[],i=[],a=[],o=[];for(let t of P(e)){let e=n.get(z(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 W(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 G=`history-page`;function K(e){return`${e.subjectName} · ${e.metric}`}function Me({part:e,window:n}){let{t:i}=V(),a=m(),c=t(()=>[...e.lines,...e.states,...e.energy],[e]),l=de(t(()=>c.map(e=>W(e.ref)),[c]),n,!1),u=e=>l.status===`ok`?l.data.current.get(ae(W(e.ref))):void 0,d=e=>{let t=u(e);return t?.ok?t.result:void 0};if(c.length===0)return o(N,{icon:s,title:i(`history.page.emptyTitle`,`Pick series to compare`),description:i(`history.page.emptyHint`,`Choose up to 24 series on the left, or start from a panel above.`)});if(l.status===`error`)return o(I,{title:i(`history.page.readFailed`,`History could not be read`),message:l.error});let f=l.status===`pending`,p=c.map(e=>({c:e,e:u(e)})).filter(e=>e.e?.ok===!1),h=e.lines.map((e,t)=>{let r=d(e),i=S(e.info,r,n.from);return{id:e.id,label:K(e),unit:e.info.unit,colorIndex:t,points:i.points,gapMs:i.gapMs,interpolation:i.held&&r?.resolution===`raw`?`step`:`linear`}}),g=e.states.map((e,t)=>{let r=A(e.info,d(e),n.from,n.to),i=Se(e.info.key,a);return{id:e.id,label:K(e),kind:e.info.kind===`boolean`?`boolean`:`enum`,colorIndex:e.info.kind===`boolean`?t:0,states:r.states,segments:r.segments,totals:r.totals,stateLabel:e.info.kind===`boolean`?e=>e===`true`?i.on:i.off:void 0}}),_=e.energy.map(e=>({c:e,...C(d(e))})),v=_[0]?.bucketMs??36e5,y=[...new Set(_.flatMap(e=>e.buckets.map(e=>e.t)))].sort((e,t)=>e-t).map(e=>({t:e,values:_.map(t=>t.buckets.find(t=>t.t===e)?.values[0]??null)}));return r(`div`,{className:`space-y-5 min-w-0`,children:[p.length>0&&o(I,{title:i(`history.page.someFailed`,`Some series could not be read`),message:p.map(e=>`${K(e.c)}: ${e.e.error}`).join(` · `)}),h.length>0&&o(j,{title:i(`history.page.lines`,`Measurements`),series:h,range:n,height:260,syncKey:G,pending:f}),_.length>0&&o(fe,{title:i(`history.page.energy`,`Energy`),layers:_.map((e,t)=>({id:e.c.id,label:e.c.subjectName,colorIndex:t})),buckets:y,bucketMs:v,range:n,unit:`kWh`,showTotal:!0,height:160,syncKey:G,pending:f}),g.length>0&&o(O,{title:g.length===1?g[0]?.label??``:i(`history.page.states`,`States`),rows:g,range:n,syncKey:G,pending:f})]})}function Ne(e,t){let n=[];for(let r=0;r<e.length;r+=t)n.push(e.slice(r,r+t));return n}async function Pe(e,t){let n=[];for(let r of Ne(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 q(e){return e.raw+e[`5m`]+e[`1h`]+e[`1d`]}function Fe(e){return e.reduce((e,t)=>t.ok?{...e,deleted:e.deleted+1,points:e.points+q(t.deleted)}:{...e,refused:e.refused+1},{deleted:0,refused:0,points:0})}function Ie(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 J=e=>new Date(e).toLocaleDateString(void 0,{dateStyle:`short`});function Y(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 X(e){let t=e.displayName??e.key;return e.scope===``?t:`${t} · ${e.scope}`}function Z(e,t,n){return{key:`series`,header:n(`history.orphans.colSeries`,`Series`),render:i=>{let a=e(i);return r(`div`,{className:`min-w-0 max-w-[16rem]`,children:[o(`div`,{className:`truncate text-foreground`,title:a.key,children:X(a)}),o(`div`,{className:`truncate text-[10px] text-foreground-subtle`,children:Y(a,t,n)})]})},sortValue:r=>`${Y(e(r),t,n)} ${X(e(r))}`}}var Le=[`raw`,`5m`,`1h`,`1d`];function Re(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 ze(e,t){return[Z(e=>e,e,t),{key:`reason`,header:t(`history.orphans.colReason`,`Reason`),render:e=>r(`div`,{className:`flex flex-col items-start gap-0.5`,children:[o(T,{variant:e.reason===`device-gone`?`warning`:`neutral`,className:`text-[10px]`,children:e.reason===`device-gone`?t(`history.orphans.deviceGone`,`Device removed`):t(`history.orphans.undeclared`,`No longer declared`)}),e.missingSince!==null&&o(`span`,{className:`text-[10px] text-foreground-subtle`,children:t(`history.orphans.since`,`since {{date}}`,{date:J(e.missingSince)})})]}),sortValue:e=>e.reason},{key:`span`,header:t(`history.orphans.colSpan`,`Recorded`),render:e=>r(`span`,{className:`tabular-nums text-foreground-muted`,children:[J(e.firstTs),` → `,J(e.lastTs)]}),sortValue:e=>e.lastTs},...Le.map(e=>({key:`rows-${e}`,header:Re(e,t),align:`right`,render:t=>o(`span`,{className:`tabular-nums text-foreground-muted`,children:t.rows[e].toLocaleString()}),sortValue:t=>t.rows[e]}))]}function Be(e,t){if(e.ok)return o(T,{variant:`success`,className:`text-[10px]`,children:t(`history.orphans.deleted`,{count:q(e.deleted),points:q(e.deleted).toLocaleString(),defaultValue_one:`Deleted · {{points}} point`,defaultValue_other:`Deleted · {{points}} points`})});let n=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 o(T,{variant:e.reason===`not-found`?`neutral`:`warning`,className:`text-[10px]`,children:n})}function Ve(e,t){return[Z(e=>e.series,e,t),{key:`result`,header:t(`history.orphans.colResult`,`Result`),render:e=>Be(e.outcome,t),sortValue:e=>+!e.outcome.ok}]}e();function He({open:e,onClose:i,list:a,deviceNames:s,onDelete:u,onRefresh:d,refreshing:p}){let{t:m}=V(),h=k(),[g,_]=n(new Set),[v,y]=n(!1),[b,x]=n([]),S=t(()=>ze(s,m),[s,m]),C=t(()=>Ve(s,m),[s,m]),T=t(()=>new Set(a.series.map(e=>String(e.seriesId))),[a.series]),E=[...g].filter(e=>T.has(e)).map(Number),D=Fe(b.map(e=>e.outcome)),O=async()=>{if(await h({title:m(`history.orphans.confirmTitle`,{count:E.length,defaultValue_one:`Delete {{count}} series`,defaultValue_other:`Delete {{count}} series`}),message:m(`history.orphans.confirmMessage`,`Every recorded point of these series is removed from the hub. This cannot be undone.`),confirmLabel:m(`history.orphans.confirmLabel`,`Delete`),variant:`danger`})){y(!0);try{let e=await Pe(E,u);x(Ie(a.series,e)),_(new Set)}finally{y(!1),d()}}};return o(pe,{open:e,onOpenChange:e=>!e&&i(),children:r(se,{width:`xl`,placement:`sheet-on-mobile`,scroll:`body`,"data-testid":`orphan-series-dialog`,children:[o(ve,{children:o(re,{children:m(`history.orphans.title`,`Series no longer linked to a device`)})}),r(ge,{className:`space-y-3`,children:[o(`p`,{className:`text-xs text-foreground-muted`,children:m(`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.`)}),a.truncated&&r(`div`,{className:`flex flex-wrap items-center gap-2`,"data-testid":`orphan-truncated`,children:[o(`p`,{className:`text-xs text-warning`,children:m(`history.orphans.truncated`,`More series are unlinked than are listed here. Delete these, then load the rest.`)}),r(w,{size:`sm`,variant:`outline`,onClick:d,disabled:p,children:[o(l,{className:`h-3 w-3`,"aria-hidden":!0}),m(`history.orphans.loadAgain`,`Load again`)]})]}),b.length>0&&r(`div`,{className:`space-y-2`,"data-testid":`orphan-outcomes`,children:[o(`p`,{className:`text-xs text-foreground`,"aria-live":`polite`,children:m(`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.`})}),o(F,{columns:C,rows:b,rowKey:e=>String(e.series.seriesId),minWidthPx:420,maxBodyHeight:`max-h-[60vh]`,emptyMessage:``})]}),o(F,{columns:S,rows:a.series,rowKey:e=>String(e.seriesId),minWidthPx:760,maxBodyHeight:M,defaultSort:{columnKey:`series`,dir:`asc`},emptyMessage:m(`history.orphans.empty`,`Every series is linked to a device.`),selection:{selected:g,onChange:_,rowLabel:e=>`${X(e)} — ${Y(e,s,m)}`,pageLabel:m(`history.orphans.selectAll`,`Select every listed series`)}})]}),r(he,{children:[o(`span`,{className:`mr-auto text-[11px] tabular-nums text-foreground`,"aria-live":`polite`,children:m(`history.orphans.selected`,{count:E.length,defaultValue_one:`{{count}} selected`,defaultValue_other:`{{count}} selected`})}),o(w,{variant:`ghost`,size:`sm`,onClick:i,children:m(`history.orphans.close`,`Close`)}),r(w,{variant:`danger`,size:`sm`,disabled:E.length===0||v,onClick:()=>void O(),children:[v?o(f,{className:`h-3 w-3 animate-spin`,"aria-hidden":!0}):o(c,{className:`h-3 w-3`,"aria-hidden":!0}),m(`history.orphans.deleteSelected`,`Delete selected`)]})]})]})})}e();var Ue=5*6e4;function We({enabled:e}){let{t:a}=V(),[s,c]=n(!1),l=b({},{enabled:e,staleTime:Ue}),u=R({projection:`slim`},{enabled:e}),d=ue(),f=t(()=>new Map((u.data??[]).map(e=>[e.id,e.name])),[u.data]),p=e=>d.mutateAsync({seriesIds:[...e]});if(!e||l.status===`pending`)return null;if(l.status===`error`)return o(I,{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 r(i,{children:[h>0&&o(I,{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:o(w,{size:`sm`,variant:`outline`,onClick:()=>c(!0),children:a(`history.orphans.review`,`Review`)})}),o(He,{open:s,onClose:()=>c(!1),list:m,deviceNames:f,onDelete:p,onRefresh:()=>void l.refetch(),refreshing:l.isFetching})]})}e();var Q=`device`,Ge=`node`;function Ke({catalog:e,selected:n,onChange:i,loading:a}){let{t:s}=V(),c=me(e,{searchText:e=>[Ee(e)],facetGroups:[{id:`subject`,value:e=>e.ref.subject.kind===`device`?Q:Ge},{id:`room`,value:e=>e.location},{id:`unit`,value:e=>e.info.unit??``}]}),l=t(()=>[{key:`metric`,header:s(`history.picker.series`,`Series`),render:e=>r(`div`,{className:`min-w-0`,children:[o(`div`,{className:`truncate text-foreground`,children:e.metric}),o(`div`,{className:`truncate text-[10px] text-foreground-subtle`,children:e.location===``?e.subjectName:`${e.subjectName} · ${e.location}`})]}),sortValue:e=>`${e.subjectName} ${e.metric}`},{key:`unit`,header:s(`history.picker.unit`,`Unit`),render:e=>o(`span`,{className:`text-foreground-muted`,children:e.info.unit??`—`}),sortValue:e=>e.info.unit??``}],[s]),u=n.size>=24;return r(`div`,{className:`space-y-2 min-w-0`,children:[o(_e,{state:c.state,facets:[],groups:[{...c.groups.find(e=>e.id===`subject`)??{id:`subject`,facets:[],selected:[]},label:s(`history.picker.subject`,`Source`),facetLabel:e=>e===Q?s(`history.picker.devices`,`Devices`):s(`history.picker.nodes`,`Nodes`)},{...c.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},{...c.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:c.setSearch,onToggleFacet:c.toggleFacet,onToggleGroupFacet:c.toggleGroupFacet,onClear:c.clear}),o(`p`,{className:`text-[10px] text-foreground-subtle`,"aria-live":`polite`,children:s(`history.picker.count`,`{{count}} of {{max}} selected`,{count:n.size,max:24})}),o(F,{columns:l,rows:c.rows,rowKey:e=>e.id,maxBodyHeight:M,pageSize:50,defaultSort:{columnKey:`metric`,dir:`asc`},emptyMessage:a?s(`history.picker.loading`,`Reading the series of every device…`):c.active?s(`history.picker.emptyFiltered`,`No series match these filters.`):s(`history.picker.empty`,`Nothing is recorded yet.`),selection:{selected:n,onChange:e=>{let t=[...e].filter(e=>n.has(e)),r=[...e].filter(e=>!n.has(e));i(new Set([...t,...r].slice(0,24)))},isSelectable:e=>n.has(e.id)||!u,rowLabel:e=>`${e.subjectName} · ${e.metric}`,pageLabel:s(`history.picker.selectPage`,`Select every series on this page`)}})]})}e();var qe=new Set([_.Hub,_.Container]),$=5*6e4;function Je(){let{t:e}=V(),n=xe(`device-history`),[i,a]=Ce(),c=t(()=>P(i.getAll(`s`).flatMap(e=>{let t=ne(e);return t===null?[]:[t]})),[i]),l=i.get(`window`),f=ce(l)?l:`7d`,p=le(i.get(`range`)),m=(e,t,n)=>{let r=new URLSearchParams;for(let t of P(e))r.append(`s`,be(t));t!==`7d`&&r.set(`window`,t);let o=n===void 0?i.get(`range`):n;t===`custom`&&o&&r.set(`range`,o),a(r,{replace:!0})},g=Ye(n===`present`),_=E(f,Date.now(),p),v=E(f,ie(Date.now(),_.to-_.from),p),b=t(()=>je(c,g.candidates),[c,g.candidates]),S=t(()=>new Set(c.map(z)),[c]),C=ye(),T=ee(),D=k(),O=async()=>{let t=await T({title:e(`history.page.saveTitle`,`Save as panel`),label:e(`history.page.saveName`,`Panel name`),confirmLabel:e(`history.page.save`,`Save`)});t===null||t.trim()===``||await C.update(e=>te(e,{id:`panel-${Date.now().toString(36)}`,name:t.trim().slice(0,80),window:f,selection:[...c]}))},A=async(t,n)=>{await D({title:e(`history.page.deleteTitle`,`Delete panel`),message:e(`history.page.deleteMessage`,`The panel "{{name}}" is removed from your account.`,{name:n}),confirmLabel:e(`history.page.delete`,`Delete`),variant:`danger`})&&await C.update(e=>x(e,t))},j=t=>t===`energy`?e(`history.panels.energy`,`Total energy`):t===`temperatures`?e(`history.panels.temperatures`,`Temperatures by room`):t===`nodes`?e(`history.panels.nodes`,`Cluster nodes`):e(`history.panels.storage`,`Storage locations`);return o(we,{icon:s,title:e(`history.page.title`,`History`),subtitle:e(`history.page.subtitle`,`What devices, nodes and storage recorded over time, side by side.`),actions:n===`present`?r(w,{size:`sm`,variant:`outline`,onClick:()=>void O(),disabled:c.length===0||!C.writable,children:[o(d,{className:`h-3.5 w-3.5`,"aria-hidden":`true`}),e(`history.page.saveTitle`,`Save as panel`)]}):void 0,children:n===`pending`?o(B,{className:`h-64 w-full`}):n===`unknown`?o(I,{title:e(`history.page.presenceUnknownTitle`,`Could not reach the hub`),message:e(`history.page.presenceUnknown`,`The hub did not say whether device history is installed. Try again in a moment.`)}):n===`absent`?o(N,{icon:h,title:e(`history.page.absentTitle`,`Device history is not running on this hub`),description:e(`history.page.absent`,`Nothing is recorded until the device-history system addon is enabled.`)}):r(`div`,{className:`space-y-3 sm:space-y-4`,children:[o(We,{enabled:n===`present`}),r(`div`,{className:`flex flex-wrap items-center gap-2`,role:`group`,"aria-label":e(`history.page.panels`,`Panels`),children:[De.map(e=>o(w,{size:`sm`,variant:`outline`,disabled:g.status!==`ok`,onClick:()=>m(Ae(e,g.candidates),f),children:j(e)},e)),C.value.panels.map(t=>r(`span`,{className:`inline-flex items-center`,children:[o(w,{size:`sm`,variant:`secondary`,onClick:()=>m(t.selection,t.window,null),children:t.name}),o(w,{size:`sm`,variant:`ghost`,"aria-label":e(`history.page.deleteNamed`,`Delete panel {{name}}`,{name:t.name}),onClick:()=>void A(t.id,t.name),disabled:!C.writable,children:o(u,{className:`h-3.5 w-3.5`,"aria-hidden":`true`})})]},t.id))]}),r(`div`,{className:`grid grid-cols-1 gap-3 sm:gap-4 xl:grid-cols-5`,children:[o(`div`,{className:`min-w-0 xl:col-span-2`,children:o(L,{headingId:`history-picker`,title:e(`history.picker.title`,`Series`),children:o(`div`,{className:`p-2 sm:p-3`,children:g.status===`error`?o(I,{message:g.error}):o(Ke,{catalog:g.candidates,loading:g.status===`pending`,selected:S,onChange:e=>{let t=c.filter(t=>e.has(z(t))),n=g.candidates.filter(t=>e.has(t.id)&&!S.has(t.id)).map(e=>e.ref);m([...t,...n],f)}})})})}),o(`div`,{className:`min-w-0 xl:col-span-3`,children:o(L,{headingId:`history-overlay`,title:e(`history.page.overlay`,`Overlay`),actions:c.length>0?o(w,{size:`sm`,variant:`ghost`,onClick:()=>m([],f),children:e(`history.page.clear`,`Clear`)}):void 0,children:r(`div`,{className:`p-2 sm:p-3 space-y-3 min-w-0`,children:[o(oe,{value:f,onChange:e=>m(c,e),custom:p,onCustomChange:e=>m(c,`custom`,y(e))}),g.status===`pending`&&c.length>0?o(B,{className:`h-64 w-full`}):o(Me,{part:b,window:v}),b.missing.length>0&&g.status===`ok`&&o(`p`,{className:`text-[11px] text-foreground-subtle`,children:e(`history.page.missing`,{count:b.missing.length,defaultValue_one:`{{count}} selected series is no longer recorded.`,defaultValue_other:`{{count}} selected series are no longer recorded.`})})]})})})]})]})})}function Ye(e){let{t:n}=V(),r=n(`history.picker.wholeFrame`,`Whole frame`),i=p().trpcClient,o=R({projection:`slim`},{enabled:e}),{nodes:s}=v(),c=t(()=>(o.data??[]).filter(e=>!qe.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=D({},{enabled:e,staleTime:$}),f=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(()=>Te(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 f.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,f,[...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{Je as HistoryPage};