@camstack/addon-admin-ui 1.2.461 → 1.2.463

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 (124) hide show
  1. package/dist/assets/{AddonAssetIcon-CmEqgzfX.js → AddonAssetIcon-C9AdDz0x.js} +1 -1
  2. package/dist/assets/Addons-BPh7Eayh.js +4 -0
  3. package/dist/assets/{AdminPage-N36spL8r.js → AdminPage-Bly6H-Ei.js} +1 -1
  4. package/dist/assets/{AdminSectionedPage-B4DO1cch.js → AdminSectionedPage-DVGnfLgr.js} +1 -1
  5. package/dist/assets/{AiProfiles-Dm1A5qaJ.js → AiProfiles-XE0_l3jU.js} +1 -1
  6. package/dist/assets/{BrokerForm-BDBUNSWe.js → BrokerForm-XjXbfqrZ.js} +1 -1
  7. package/dist/assets/Build-D4NDTkw2.js +40 -0
  8. package/dist/assets/{Calendars-C4GvODYM.js → Calendars-CDSTKKMT.js} +1 -1
  9. package/dist/assets/{Cluster-CUaBA2On.js → Cluster-DKTNITYY.js} +1 -1
  10. package/dist/assets/CompositionEditor-BiWIw_xC.js +1 -0
  11. package/dist/assets/CompositionEditorPage-CRAPYt_u.js +1 -0
  12. package/dist/assets/{Data-B49CFnpf.js → Data-C-9OmLam.js} +2 -2
  13. package/dist/assets/DeviceDetail-CZ23_AX8.js +2 -0
  14. package/dist/assets/{DeviceDoActionFields-zsHf4EON.js → DeviceDoActionFields-C7VbUl2q.js} +1 -1
  15. package/dist/assets/{Devices-DHWIbLrr.js → Devices-CjR3mkUm.js} +1 -1
  16. package/dist/assets/{EmbedPlayerPage-C3Riyl8J.js → EmbedPlayerPage-DMVU4L2Z.js} +1 -1
  17. package/dist/assets/{History-g1qlGuSi.js → History-CCPlalru.js} +1 -1
  18. package/dist/assets/Identity-pegWB0x7.js +1 -0
  19. package/dist/assets/{IntegrationDetail-y7qRdb6V.js → IntegrationDetail-DakB5HuG.js} +1 -1
  20. package/dist/assets/{IntegrationHub-D4VoDe9W.js → IntegrationHub-Cl-yRdYk.js} +1 -1
  21. package/dist/assets/Integrations-D4JXGApt.js +1 -0
  22. package/dist/assets/Integrations-DRLVrdBM.js +1 -0
  23. package/dist/assets/{Library-BF596aV_.js → Library-Bzo29YWC.js} +1 -1
  24. package/dist/assets/{Locations-CWErnyPW.js → Locations-DyZCCP98.js} +1 -1
  25. package/dist/assets/{Logs-CQcRBcxc.js → Logs-B-7ptLpL.js} +1 -1
  26. package/dist/assets/{MaskShapeCanvas-CBe03CMO.js → MaskShapeCanvas-BmtOGyK5.js} +1 -1
  27. package/dist/assets/{MotionZonesSettings-Ci1jf-Mm.js → MotionZonesSettings-CV3Xgsr4.js} +1 -1
  28. package/dist/assets/MyAccess-B37DRC8C.js +2 -0
  29. package/dist/assets/{Network-CfC1bac2.js → Network-Du7T4f3O.js} +1 -1
  30. package/dist/assets/{NodeAddonsSettingsPanel-CxfoWry5.js → NodeAddonsSettingsPanel-BdXMzxN1.js} +1 -1
  31. package/dist/assets/Notifications-D31A_aMl.js +1 -0
  32. package/dist/assets/{Pipeline-D8nt-Y81.js → Pipeline-Bz5cI-qM.js} +1 -1
  33. package/dist/assets/{PrivacyMaskSettings-DSh1TEIJ.js → PrivacyMaskSettings-BPRo3O3B.js} +1 -1
  34. package/dist/assets/{Recordings-D2QgV6gh.js → Recordings-PbSzlND2.js} +1 -1
  35. package/dist/assets/{ScanNetworkModal-Ba_B2lf-.js → ScanNetworkModal-D7f9c95h.js} +1 -1
  36. package/dist/assets/{SceneMonitorEditor-Dn0NH3UY.js → SceneMonitorEditor-BA9763ix.js} +1 -1
  37. package/dist/assets/{SessionsList-Bik0vNoP.js → SessionsList-POtDsHqi.js} +2 -2
  38. package/dist/assets/{Showroom-BFwRdZBU.js → Showroom-DNy-w6tP.js} +1 -1
  39. package/dist/assets/{System-DSqTdlP0.js → System-B0A3Vybn.js} +1 -1
  40. package/dist/assets/{Terminal-DviYZMzd.js → Terminal-DAkEfEl7.js} +1 -1
  41. package/dist/assets/{Viewer-BqGWuKOT.js → Viewer-C2mhbwBs.js} +1 -1
  42. package/dist/assets/{_virtual_mf-localSharedImportMap___mfe_internal__admin_ui_host-C-OpByVg.js → _virtual_mf-localSharedImportMap___mfe_internal__admin_ui_host-BcUHsXvG.js} +1 -1
  43. package/dist/assets/{addon-icons-context-Dk7L05cY.js → addon-icons-context-BwHvrxKK.js} +1 -1
  44. package/dist/assets/{archive-S-zO_vQF.js → archive-D-CLwZIU.js} +1 -1
  45. package/dist/assets/{authed-media-Cpc0v-lW.js → authed-media-DdZ3AKzY.js} +1 -1
  46. package/dist/assets/{bell-off-B0BNkY5Q.js → bell-off-DkKnBqQi.js} +1 -1
  47. package/dist/assets/{board-model-BLL_cD-z.js → board-model-CGqWH_FA.js} +1 -1
  48. package/dist/assets/{boxes-B89A109J.js → boxes-BeinIpIz.js} +1 -1
  49. package/dist/assets/circle-slash-D94rdTZs.js +1 -0
  50. package/dist/assets/client-CJZuPHbz.js +358 -0
  51. package/dist/assets/{cloud-upload-EnqEFlW5.js → cloud-upload-CqA8Voyh.js} +1 -1
  52. package/dist/assets/crop-CJTlG5-P.js +1 -0
  53. package/dist/assets/{device-integration-icon-DpIPAgxb.js → device-integration-icon-CLpD5eef.js} +1 -1
  54. package/dist/assets/device-picker-model-BHInrZJO.js +1 -0
  55. package/dist/assets/{dist-CnH0kuMY.js → dist-Dmgqu93O.js} +1 -1
  56. package/dist/assets/dist-v3iXCHPG.js +358 -0
  57. package/dist/assets/{eraser-CTiJOqJH.js → eraser-B_CtxhBO.js} +1 -1
  58. package/dist/assets/{format-3n872UoD.js → format-C7c-WeCC.js} +1 -1
  59. package/dist/assets/{hard-drive-download-B-xmEXyG.js → hard-drive-download-BSXwOh9q.js} +1 -1
  60. package/dist/assets/{hostInit-CGuLmCP7.js → hostInit-W8TL-CCW.js} +1 -1
  61. package/dist/assets/i18n-CvoV4ITH.js +1 -0
  62. package/dist/assets/{icons-D1XGgPoq.js → icons-eXZhq5Wj.js} +1 -1
  63. package/dist/assets/{index-Av4-A8rY.js → index-DgzFfJ-E.js} +3 -3
  64. package/dist/assets/{index-DhkrLRVh.css → index-z_YJmgwP.css} +1 -1
  65. package/dist/assets/{key-BEqu-lXr.js → key-DojLc55s.js} +1 -1
  66. package/dist/assets/{key-round-Bx5_IMpS.js → key-round-BAehItCF.js} +1 -1
  67. package/dist/assets/{layers-Dl1ZfXjR.js → layers-DAJqwsng.js} +1 -1
  68. package/dist/assets/{linked-devices-model-7z16tmo3.js → linked-devices-model-B8q5duvG.js} +1 -1
  69. package/dist/assets/{list-ordered-Dgp6etRJ.js → list-ordered-BYVhOPoV.js} +1 -1
  70. package/dist/assets/{location-owned-usage-bGdU9_ER.js → location-owned-usage-BrB6XdyC.js} +1 -1
  71. package/dist/assets/{log-in-D8cVgea3.js → log-in-C1oX8GRe.js} +1 -1
  72. package/dist/assets/{memory-stick-9OcSMd1G.js → memory-stick-H0-1j4vS.js} +1 -1
  73. package/dist/assets/{message-square-plus-C4vA4iYJ.js → message-square-plus-Cu3mjwr6.js} +1 -1
  74. package/dist/assets/{mf-entry-bootstrap-0-6251002a.js → mf-entry-bootstrap-0-4d6817b1.js} +2 -2
  75. package/dist/assets/{mic-off-3EqpKDCs.js → mic-off-BZE0vpPb.js} +1 -1
  76. package/dist/assets/{monitor-off-BnrglR7J.js → monitor-off-CeoPVLdS.js} +1 -1
  77. package/dist/assets/{monitor-smartphone-CjzyjUlp.js → monitor-smartphone-X2sF7PZY.js} +1 -1
  78. package/dist/assets/mount-BHInrZJO.js +1 -0
  79. package/dist/assets/{player-overlays-C2qGnksg.js → player-overlays-D5ZBZ0eM.js} +1 -1
  80. package/dist/assets/{recycle-tvZPZI99.js → recycle-DLXIFr8U.js} +1 -1
  81. package/dist/assets/remoteEntry-BBh0_eO2.js +1 -0
  82. package/dist/assets/{scan-eye-6_8sPy1t.js → scan-eye-CvEU2c_X.js} +1 -1
  83. package/dist/assets/{scissors-BYLfeqTv.js → scissors-x6ajWh6r.js} +1 -1
  84. package/dist/assets/{search-x-CLjmzP4o.js → search-x-5Z0cDXke.js} +1 -1
  85. package/dist/assets/{send-CcDHb3r4.js → send-CQyb3VPM.js} +1 -1
  86. package/dist/assets/{settings-2-G-7M0you.js → settings-2-BrZJLOf8.js} +1 -1
  87. package/dist/assets/{speaker-CaxICJfu.js → speaker-BYU0CVCA.js} +1 -1
  88. package/dist/assets/{src-D1steZEF.js → src-El9yRQEE.js} +10 -10
  89. package/dist/assets/{step-inspector-model-p9HUQGve.js → step-inspector-model-Be_ULwEg.js} +1 -1
  90. package/dist/assets/{timer-reset-D0SmO8M1.js → timer-reset-DA0wUEff.js} +1 -1
  91. package/dist/assets/{ungroup-BjWmPSAJ.js → ungroup-FYon4fz1.js} +1 -1
  92. package/dist/assets/{unlink-8CYYb6J2.js → unlink-BCjfZGMX.js} +1 -1
  93. package/dist/assets/{usb-vxNmd1OO.js → usb-BBQDAd-3.js} +1 -1
  94. package/dist/assets/{use-scenes-feed-BepTQeVo.js → use-scenes-feed-B95-25e8.js} +1 -1
  95. package/dist/assets/{use-stationary-objects-Dnn6yNrY.js → use-stationary-objects-zVOdbaPk.js} +1 -1
  96. package/dist/assets/useEventInvalidation-BHInrZJO.js +1 -0
  97. package/dist/assets/{useNodeUrlSelection-i_Uu58Pu.js → useNodeUrlSelection-DTDVRQ9H.js} +1 -1
  98. package/dist/assets/user-round-qrIUAwAY.js +1 -0
  99. package/dist/assets/{user-x-_Ch_VgmF.js → user-x-DGH-0MS_.js} +1 -1
  100. package/dist/assets/{video-CnGFIENR.js → video-CQJAIcvp.js} +1 -1
  101. package/dist/assets/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__admin_ui_host__remoteEntry-_hash_-sNr_TQNF.js → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__admin_ui_host__remoteEntry-_hash_-BDOG6ivJ.js} +2 -2
  102. package/dist/index.html +10 -10
  103. package/dist/server/addon.js +22 -3
  104. package/package.json +1 -1
  105. package/dist/assets/Addons-CVkkdf3V.js +0 -4
  106. package/dist/assets/Build-Btk8hgSX.js +0 -40
  107. package/dist/assets/CompositionEditor-Kq2kEnnh.js +0 -1
  108. package/dist/assets/CompositionEditorPage-D89-6PCw.js +0 -1
  109. package/dist/assets/DeviceDetail-BPyZ6uyd.js +0 -2
  110. package/dist/assets/Identity-DWlP85j-.js +0 -1
  111. package/dist/assets/Integrations-ByoGCmDg.js +0 -1
  112. package/dist/assets/Integrations-YNiehsXN.js +0 -1
  113. package/dist/assets/MyAccess-DUFCQyd0.js +0 -2
  114. package/dist/assets/Notifications-BqYoqEfY.js +0 -1
  115. package/dist/assets/circle-slash-DtOy5nTT.js +0 -1
  116. package/dist/assets/client-B741nZQJ.js +0 -358
  117. package/dist/assets/crop-BM88jjat.js +0 -1
  118. package/dist/assets/device-picker-model-BIknMBUl.js +0 -1
  119. package/dist/assets/dist-xq0sTO1C.js +0 -358
  120. package/dist/assets/i18n-SRLxy4I7.js +0 -1
  121. package/dist/assets/mount-BIknMBUl.js +0 -1
  122. package/dist/assets/remoteEntry-C-4WYf0M.js +0 -1
  123. package/dist/assets/useEventInvalidation-BIknMBUl.js +0 -1
  124. package/dist/assets/user-round-DD5YK-sO.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 L,_t as R,bn as te,dn as z,dt as ne,en as re,ht as B,li as ie,lr as V,or as H,ot as U,pi as ae,pn as oe,q as se,r as ce,sa as le,t as ue,ta as W,vn as de,xn as fe,yn as pe,z as me,zn as he,zr as ge}from"./player-overlays-D5ZBZ0eM.js";import{$t as _e,An as ve,Bn as ye,Gn as be,Gt as xe,Jt as Se,Kn as Ce,Kr as we,Kt as Te,Ln as Ee,Mn as De,Or as G,Qi as Oe,Qr as ke,Qt as Ae,Rn as je,Sn as Me,Ut as Ne,Vr as Pe,Wt as Fe,Xr as Ie,Xt as Le,Yn as Re,Yt as ze,Zi as Be,Zt as Ve,an as He,bi as K,en as Ue,fi as We,gi as Ge,hi as Ke,ii as qe,in as Je,jn as Ye,nn as Xe,on as Ze,qt as Qe,ri as $e,rn as et,ti as tt,tn as nt,u as rt,vi as it,yi as q}from"./client-CJZuPHbz.js";import{t as at}from"./archive-D-CLwZIU.js";import{i as ot,n as st,r as ct,t as lt}from"./scan-eye-CvEU2c_X.js";import{t as ut}from"./bell-off-DkKnBqQi.js";import{t as dt}from"./boxes-BeinIpIz.js";import{n as ft}from"./video-CQJAIcvp.js";import{t as pt}from"./circle-slash-D94rdTZs.js";import{t as mt}from"./layers-DAJqwsng.js";import{$o as ht,$u as gt,An as _t,Ao as vt,Ca as yt,Co as bt,Cr as xt,Da as St,Dn as Ct,Dt as wt,Ea as Tt,Ec as Et,En as Dt,Eo as Ot,F as kt,Fr as J,Ft as At,Gc as jt,Gr as Mt,Gs as Nt,Gt as Pt,Gu as Ft,Ha as It,Hc as Lt,Hr as Rt,Ht as zt,Hu as Bt,It as Vt,J as Ht,Ja as Ut,Kt as Wt,L as Gt,Ls as Kt,Mi as qt,Mn as Jt,Mt as Yt,Nn as Xt,Nr as Zt,Nt as Qt,Nu as $t,Oa as en,Or as tn,Pn as nn,Q as rn,Qa as an,Qu as on,Ra as sn,Rn as cn,Rt as ln,Ru as un,Sc as dn,Sr as fn,Tn as pn,Uc as mn,Ut as hn,Uu as gn,Vc as _n,Vt as vn,Vu as yn,Wc as bn,Wr as xn,Xt as Sn,Xu as Cn,Yo as wn,Yt as Tn,Z as En,Za as Dn,Zr as On,Zt as kn,_t as An,a as jn,an as Mn,ba as Nn,bc as Pn,br as Fn,bt as In,c as Ln,cr as Rn,el as zn,eo as Bn,es as Vn,et as Hn,fn as Un,fr as Wn,gi as Gn,gn as Kn,go as qn,gr as Y,ha as Jn,hl as Yn,i as Xn,id as Zn,ir as Qn,jc as $n,jn as er,jt as tr,kn as nr,ko as rr,kt as ir,l as ar,la as or,lr as sr,ma as cr,mn as lr,no as ur,nr as dr,nt as fr,o as pr,or as mr,pr as hr,q as gr,qa as _r,qs as vr,qt as yr,r as br,rr as xr,rt as Sr,s as Cr,so as wr,sr as Tr,to as Er,tr as Dr,ts as Or,tt as kr,ua as Ar,uc as jr,uo as Mr,ur as Nr,vc as Pr,vr as Fr,wa as Ir,wn as Lr,xr as Rr,xt as zr,yc as Br,yn as Vr,zn as Hr,zt as Ur,zu as Wr}from"./src-El9yRQEE.js";import{t as X}from"./i18n-CvoV4ITH.js";import{t as Z}from"./useTranslation-D3Is_4B6.js";import"./mount-BHInrZJO.js";import{A as Gr,D as Kr,M as qr,N as Jr,O as Yr,cr as Xr,dr as Zr,fr as Qr,gr as $r,hr as ei,ir as ti,j as ni,k as ri,lr as ii,m as ai,mr as oi,nr as si,or as ci,p as li,rr as ui,sr as di,tr as fi,ur as pi}from"./index-DgzFfJ-E.js";import{a as mi,c as hi,i as gi,l as _i,n as vi,r as yi,t as bi}from"./CompositionEditor-BiWIw_xC.js";import{_ as xi,b as Si,i as Ci,m as wi,o as Ti,t as Ei}from"./step-inspector-model-Be_ULwEg.js";import"./useEventInvalidation-BHInrZJO.js";import{t as Di}from"./use-stationary-objects-zVOdbaPk.js";import{a as Oi,c as ki,i as Ai,l as ji,n as Mi,o as Ni,r as Pi,s as Fi,t as Ii,u as Li}from"./linked-devices-model-B8q5duvG.js";import{n as Ri,t as zi}from"./format-C7c-WeCC.js";import{t as Bi}from"./authed-media-DdZ3AKzY.js";e();function Vi(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 Hi(e){if(typeof e!=`object`||!e)return null;let t=e.switches;if(!Array.isArray(t))return null;let n=t.map(Vi).filter(e=>e!==null);return n.length===0?null:n}var Ui=[[/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 Wi(e){for(let[t,n]of Ui)if(t.test(e))return n;return`generic`}function Gi(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 Ki={stream:fe,detection:lt,privacy:ge,microphone:F,speaker:A,listening:st,archive:at,recording:ct,notifications:T,generic:re};function qi({deviceId:e}){let{t}=Z(),n=c(),o=Number.isFinite(e),[s,l]=r(null),[u,f]=r(!1),p=dn({deviceId:e},{enabled:o});br([`pipelineOrchestrator`,`getCameraSwitches`],[`capability.binding-changed`]);let m=Hi(p.data),h=jt({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 _=Gi(m),v=e=>s?.id===e.id?s.message:null;return a(yn,{open:u,onOpenChange:f,children:[a(gn,{"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(re,{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(Bt,{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(Ji,{row:e,failure:v(e),onToggle:()=>g(e)})},e.id))})]})]})}function Ji({row:e,failure:t,onToggle:n}){let{t:r}=Z(),i=Ki[Wi(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 Yi({deviceId:e}){let t=ln(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 Xi({parentDeviceId:e}){let{t}=Z(),n=oi(),r=U(),{data:i,isLoading:o,isError:s}=ti(e),{data:c}=Dn({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=Qt(c?.stableId??``,l,c?.childLayout),f=u.ungrouped,p=e=>n(`/devices/${String(e)}`),m=c?.name??``,h=(e,t)=>d(tr,{trpc:r.trpcClient,device:{...t,name:Ur(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(Yt,{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(Yt,{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 Zi({deviceId:e}){let t=U(),{data:n,isLoading:r}=ui(e),{data:i,isLoading:a}=ti(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(vn,{trpc:t.trpcClient,children:s,linkDeviceId:c,primaryChildEntityId:l})})}e();function Qi({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(W,{className:`h-3 w-3`}),d(`span`,{children:m})]})}e();function Q({deviceId:e,deviceType:t,features:n}){let i=U(),o=Pt(t)?.HeroCard??Wt,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(hn,{lastChangedAt:p})}):null,d(o,{trpc:i.trpcClient,deviceId:e,features:n}),d(`div`,{className:`flex justify-center`,children:d(Qi,{dev:s,busy:l,setBusy:u})})]})}function $i({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(yr,{trpc:U().trpcClient,deviceId:e,features:t})})}function ea({deviceId:e,features:t}){return d(`div`,{className:`flex h-full w-full flex-col items-stretch p-3 sm:p-4`,children:d(Wt,{trpc:U().trpcClient,deviceId:e,features:t})})}function ta(e){if(!e)return null;let t=e.channel;return typeof t!=`number`||!Number.isInteger(t)||t<0?null:t}function na(e){if(!e)return null;let t=ta(e.data);return t===null?e.eventType:X.t(`helpers.eventEmitterFormat.buttonHeadline`,{channel:String(t),eventType:e.eventType})}var ra=1e3,ia=60*ra,aa=60*ia,oa=24*aa;function sa(e,t){if(e==null||e<=0)return`—`;let n=t-e;return n<ra?X.t(`helpers.relativeTime.justNow`):n<ia?X.t(`helpers.relativeTime.secondsAgo`,{count:Math.floor(n/ra)}):n<aa?X.t(`helpers.relativeTime.minutesAgo`,{count:Math.floor(n/ia)}):n<oa?X.t(`helpers.relativeTime.hoursAgo`,{count:Math.floor(n/aa)}):X.t(`helpers.relativeTime.daysAgo`,{count:Math.floor(n/oa)})}e();var ca=1500,la=15e3,ua=1e3;function da({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()},la);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)},ca);return()=>{clearTimeout(t)}},[c]);let[h,g]=r(()=>Date.now());t(()=>{let e=setInterval(()=>{g(Date.now())},ua);return()=>{clearInterval(e)}},[]);let _=na(s),y=o?.eventTypes??[],x=o?.eventCountSinceStart??0,S=o!==void 0,w=ta(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?sa(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 fa({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(ii,{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(Sr,{status:r?`online`:`offline`}),i.length>0&&d(pi,{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 pa({deviceId:e}){let{t}=Z(),r=c(),i=yt({deviceId:e},{refetchInterval:1e4,retry:!1}),o=Ir({onSuccess:()=>{r.invalidateQueries({queryKey:[[`deviceDiscovery`,`listDiscovered`]]}),r.invalidateQueries({queryKey:[[`deviceDiscovery`,`getStatus`]]})}}),s=n(()=>ma(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(ha,{label:t(`hero.hubHero.discovered`,`Discovered`),value:s.total,icon:d(he,{className:`h-3.5 w-3.5`})}),d(ha,{label:t(`hero.hubHero.adopted`,`Adopted`),value:s.adopted,accent:`success`}),d(ha,{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(H,{className:`h-3.5 w-3.5 animate-spin`}):d(te,{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(ga,{icon:d(B,{className:`h-3 w-3 text-emerald-500`}),label:t(`hero.hubHero.online`,`{{online}} online`,{online:s.online})}),d(ga,{icon:d(w,{className:`h-3 w-3 text-amber-500`}),label:t(`hero.hubHero.sleeping`,`{{sleeping}} sleeping`,{sleeping:s.sleeping})}),d(ga,{icon:d(R,{className:`h-3 w-3 text-destructive`}),label:t(`hero.hubHero.offline`,`{{offline}} offline`,{offline:s.offline})}),s.unknown>0?d(ga,{icon:d(ie,{className:`h-3 w-3 text-foreground-subtle`}),label:t(`hero.hubHero.unknown`,`{{unknown}} unknown`,{unknown:s.unknown})}):null]})]})}function ma(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 ha({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 ga({icon:e,label:t}){return a(`span`,{className:`inline-flex items-center gap-1`,children:[e,d(`span`,{children:t})]})}var _a={[K.Switch]:Q,[K.Siren]:Q,[K.Light]:Q,[K.Sensor]:Q,[K.Button]:Q,[K.Hub]:pa,[K.Cover]:$i,[K.Valve]:Q,[K.Humidifier]:Q,[K.WaterHeater]:Q,[K.Container]:Zi,[K.Lock]:Q,[K.Fan]:Q,[K.Thermostat]:Q,[K.Climate]:Q,[K.MediaPlayer]:Q,[K.Control]:Q,[K.AlarmPanel]:Q,[K.EventEmitter]:da,[K.Notifier]:ea,[K.Script]:Q,[K.Automation]:Q,[K.Presence]:Q,[K.Update]:Q,[K.Vacuum]:Q,[K.LawnMower]:Q,[K.Weather]:Q,[K.Image]:Q,[K.PetFeeder]:Q,[K.Dishwasher]:Q};function va(e){return _a[e]??fa}function ya({deviceId:e}){let t=se(U().trpcClient,e,e=>e.runningState);return d(Dt,{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 ba(e){let t=va(e.deviceType);return a(s,{children:[d(ya,{deviceId:e.deviceId}),d(t,{...e})]})}function xa({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(Dr,{widgetId:t.widgetId,deviceId:t.deviceId});return d(`div`,{children:t.deviceId===e?n:d(tn,{deviceId:t.deviceId,children:n})},t.widgetId)})})}function Sa(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 Ca(e){let t=Sa(e),n=new Set(t.map(e=>e.widgetId)),r=e.child===void 0?[]:Sa(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 wa(e){return pr(U().trpcClient,e)}e();function Ta(e){let[n,a]=r(`idle`),[o,s]=r(null),c=l(null),u=l(null),d=l(null),f=l(!0),p=Vn(),m=ht(),h=Or(),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 Ea=0;function $(){return++Ea}function Da(e){switch(e.type){case`system`:return`system`;case`device`:return`#${e.deviceId}`;case`provider`:return e.providerId;case`addon`:return e.addonId}}function Oa(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 ka(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 Aa(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 ja({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: ${Da(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: ${Da(e)}`}]),h(``);return}if(n===`help`){p(t=>[...t,{id:$(),kind:`input`,text:`> ${n}`},...Oa(e).map(e=>({id:$(),kind:`info`,text:e}))]),h(``);return}if(n===`context`){p(t=>[...t,{id:$(),kind:`input`,text:`> ${n}`},...Aa(e).map(e=>({id:$(),kind:`info`,text:e}))]),h(``);return}if(n===`examples`){p(t=>[...t,{id:$(),kind:`input`,text:`> ${n}`},...ka(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: ${Da(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 Ma(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 Na({deviceId:e,intercomAvailable:t=!1}){let r=U(),i=typeof window<`u`?I():``,a=Number.isFinite(e),o=wa(a?e:null),c=Di(a?[e]:[]),l=n(()=>{if(!a)return;let e=[];for(let t of c.rows){let n=jn(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}=Un(r.trpcClient,a?e:null),C=_(a?e:null,{width:Ra}),w=Ta(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=ce(),k=hr(),A=typeof window<`u`?window.localStorage.getItem(`camstack_admin_token`):null,j=Ma(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(gr,{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 Pa({deviceId:e,containerDeviceId:t}){let{t:n}=Z();return Number.isFinite(e)?d(`div`,{className:`flex flex-col h-full`,children:d(kn,{...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 Fa({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(ja,{scope:{type:`device`,deviceId:e},greeting:n,className:`h-full border-0 rounded-none`})}function Ia({deviceId:e}){let{t}=Z();return Number.isFinite(e)?d(`div`,{className:`flex flex-col h-full overflow-y-auto`,children:d(Sn,{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 La({deviceId:e}){let{t}=Z();return Number.isFinite(e)?d(`div`,{className:`flex flex-col h-full overflow-y-auto`,children:d(Tn,{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 Ra=960;e();function za({device:e,target:t,handle:n,facts:i,onClose:o}){let{t:s}=Z(),[c,l]=r(null),u=n.state.kind===`present`?n.state:null;return d(dr,{open:!0,onOpenChange:e=>{e||o()},children:a(Qn,{width:`xl`,scroll:`body`,placement:`sheet-on-mobile`,children:[d(Tr,{children:d(Rn,{children:s(`customize.advancedLink`)})}),d(xr,{children:d(bi,{initial:u===null?_i(t):hi(u.composition,``),blockId:u===null?null:u.view.block.id,deviceType:e.type,targetName:e.name,nativeCaps:i.nativeCaps,targetFields:i.wireable,actionsHost:c,onCancel:o,save:async e=>{let t=await n.save(e);return t.kind===`saved`&&o(),t}})}),a(mr,{className:`justify-between`,children:[d(`div`,{className:`flex flex-col items-start gap-1`,children:u!==null&&d(Ba,{handle:n})}),d(`div`,{ref:l,className:`flex gap-2`})]})]})})}function Ba({handle:e}){let{t}=Z(),n=Zt(),[i,o]=r(null);if(e.state.kind!==`present`)return null;let c=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(s,{children:[d(J,{variant:`danger`,size:`sm`,disabled:e.saving,onClick:()=>void c(),children:t(`customize.remove.button`)}),i!==null&&d(`p`,{role:`alert`,className:`text-[11px] text-danger break-words`,children:i})]})}function Va({onAdvanced:e,testId:t}){let{t:n}=Z();return e===void 0?null:d(`button`,{type:`button`,"data-testid":t,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:n(`customize.advancedLink`)})}function Ha(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=we(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 Ua(e){return e.kind===`present`?e.composition:null}function Wa(e,t){let{hidden:n,...r}=e??{},i=t?{...r,hidden:!0}:r;return Object.keys(i).length===0?null:i}function Ga(e){return typeof e.linkDeviceId==`number`}var Ka=new Set(Object.values(q));function qa(e){return Ka.has(e)}var Ja={[K.Switch]:[q.Siren,q.Floodlight,q.Spotlight,q.PirSensor,q.Chime,q.Autotrack,q.Nightvision,q.PrivacyMask,q.BinaryHelper],[K.Light]:[q.Floodlight,q.Spotlight,q.Nightvision],[K.Siren]:[q.Siren],[K.Button]:[q.Doorbell],[K.Sensor]:[q.MotionSensor,q.ContactSensor,q.LeakSensor,q.SmokeSensor,q.COSensor,q.GasSensor,q.TamperSensor,q.VibrationSensor,q.ConnectivitySensor,q.SoundSensor,q.BinarySensor,q.TemperatureSensor,q.HumiditySensor,q.AmbientLightSensor,q.PressureSensor,q.WindSensor,q.RainSensor,q.UvSensor,q.SolarRadiationSensor,q.SoilMoistureSensor,q.PowerSensor,q.EnergySensor,q.VoltageSensor,q.CurrentSensor,q.AirQualitySensor,q.BatterySensor,q.NumericSensor,q.EnumSensor,q.DateTimeSensor,q.GenericSensor],[K.Control]:[q.NumericControl,q.SelectControl,q.TextControl,q.DateTimeControl],[K.Notifier]:[q.MobilePushNotifier,q.MessagingNotifier,q.EmailNotifier,q.GenericNotifier]};function Ya(e){for(let t of Object.values(K))if(t===e)return!0;return!1}function Xa(e){return Ya(e)?Ja[e]??[]:[]}function Za(e,t){let n=Xa(t);return e==null||e===``||n.includes(e)?n:[...n,e]}e();function Qa({device:e}){let{t}=Z(),n=le(),i=c(),[o,s]=r(null),l=()=>s(null),u={onSuccess:()=>{l(),i.invalidateQueries({queryKey:[[`deviceManager`]]})},onError:e=>s(e.message)},f=bt(),p=qn(),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(di,{deviceId:e.id,initialName:e.name,label:t(`customize.identity.name`),layout:`stacked`,onError:s,onSaved:l,onCancel:l}),d(ci,{deviceId:e.id,initialLocation:e.location,label:t(`customize.identity.room`),layout:`stacked`,onError:s,onSaved:l,onCancel:l}),d(Xr,{label:t(`customize.identity.hidden`),layout:`stacked`,value:d(nn,{"aria-label":t(`deviceDisplay.hideFromLists`),checked:h,disabled:p.isPending,onChange:t=>p.mutate({deviceId:e.id,display:Wa(e.display,t.target.checked)},u)})}),d(Xr,{label:t(`customize.identity.role`),layout:`stacked`,value:Ga(e)?d(`span`,{children:$a(e.role,t(`customize.identity.noRole`),n)}):d($t,{"aria-label":t(`customize.identity.role`),value:e.role??``,disabled:f.isPending,options:[{value:``,label:t(`customize.identity.noRole`)},...Za(e.role,e.type).map(e=>({value:e,label:$a(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 $a(e,t,n){return e==null||e===``?t:qa(e)?Cn(e,n).label:e}function eo(e){return new Set(e.filter(e=>{let t=e.nativeAddonId?.trim()??``;return t!==``&&t!==`composer`}).map(e=>e.capName))}function to(e,t){return{cap:e,apply:t.apply,authority:t.applyAuthority?.kind??`composition-claim`,nativeItemsReadOnly:t.nativeItems===`read-only`}}function no(e){return e.kind===`known`?null:e}function ro(e,t){return e.composable.kind===`known`?e.composable.value.has(t)?{kind:`present`,mode:`add`}:{kind:`absent`}:e.composable}function io(e){if(e.deviceType!==K.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 ao(e,t){if(e.authority===`camera-sensors`)return io(t);let n=no(t.nativeCaps);if(n!==null)return n;let r=t.nativeCaps.kind===`known`?t.nativeCaps.value:new Set;return e.nativeItemsReadOnly?ro(t,e.cap):e.apply===`add`?r.has(e.cap)?{kind:`absent`}:ro(t,e.cap):r.has(e.cap)?{kind:`present`,mode:`replace`}:ro(t,e.cap)}function oo(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function so(e,t){let n=gi(e,t);return n===void 0?{kind:`absent`}:{kind:`value`,value:n}}function co(e,t,n){return oo(t)?so(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`}:so(e.data,n)}function lo(e,t,n){let r=e?`active`:`muted`;return t.cap===`contact`&&t.path===`entryOpen`?{text:e?n.open:n.closed,tone:r}:Ke[t.cap]===t.path?{text:e?n.active:n.inactive,tone:r}:{text:String(e),tone:`normal`}}function uo(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`?lo(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 fo=0;function po(e){let t=U(),n=rr({deviceId:e?.deviceId??fo,capName:e?.cap??``},{enabled:e!==null}),r=Cr(t.trpcClient,e?.deviceId??null,e?.cap??``);return e===null?{kind:`absent`}:co({status:n.status,data:n.data,error:n.error===null||n.error===void 0?null:{message:n.error.message}},r,e.path)}var mo={muted:`text-foreground-subtle`,active:`text-success`,normal:`text-foreground`,warning:`text-warning`};function ho({target:e}){let{t}=Z(),n=po(e);return e===null?null:d(go,{display:uo(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 go({display:e}){return d(`span`,{className:`text-xs ${mo[e.tone]}`,title:e.title,children:e.text})}function _o({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(ho,{target:r}):i!==null&&d(go,{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(Wr,{icon:ne,variant:`ghost`,size:`sm`,"aria-label":l,disabled:u,onClick:c})})]})}function vo(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 yo(e,t){let n=Zn.useQueries(n=>e.map(e=>n.deviceManager.listDeviceIdsByCaps({capNames:[e]},{enabled:t})));return ji(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 bo(e,t){let n=ir(e,t);return n.kind===`resolved`?n.integration.name:null}function xo(e){let t=Er({projection:`slim`},{enabled:e}),{data:r}=wn(void 0,{enabled:e}),i=t.error===null||t.error===void 0?null:t.error.message;return n(()=>vo({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:bo(e,r),parentDeviceId:e.parentDeviceId,primaryChildEntityId:e.primaryChildEntityId??null,role:e.role??null}))),[t.status,t.data,i,r])}function So({id:e,...t}){return d(lr,{headingId:`customize-${e}`,...t})}function Co(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 wo(e,t){let n=e.features.filter(e=>e.cap!==t);return n.length===0?null:{target:e.target,features:n}}function To(e,t){let n=e?.features.find(e=>e.cap===t);return n!==void 0&&n.kind===`fields`?n:null}function Eo(e){return Array.isArray(e)?e.map(Eo):typeof e!=`object`||!e?e:Object.fromEntries(Object.entries(e).toSorted(([e],[t])=>e.localeCompare(t)).map(([e,t])=>[e,Eo(t)]))}function Do(e){return JSON.stringify(Eo(e))}function Oo(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}:Do(t)===Do(e.composition)?{kind:`noop`}:{kind:`update`,blockId:n,expectedUpdatedAt:e.view.block.updatedAt,composition:t}}}}function ko(){let{t:e}=Z(),t=Zt();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 Ao(e,t,n){let r=Me[e]?.state?.find(e=>e.field===t);return r===void 0?t:n.startsWith(`it`)?r.label.it:r.label.en}function jo(e){return e.toLowerCase().normalize(`NFD`).replace(/[\u0300-\u036f]/g,``).replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``).slice(0,48)}var Mo=`kind`,No=`unit`,Po=`unit-unknown`;function Fo(e){return`customize.scalar.fit.${e}`}var Io=`compile`,Lo=`dwell`,Ro=`no-value`,zo=`empty`;function Bo(e){return`customize.scalar.previewFailure.${e}`}function Vo(e){return e===`compile`||e===`dwell`||e===`no-value`||e===`empty`}function Ho({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:Vo(e.reason)?t(Bo(e.reason)):e.reason,className:`text-warning`,children:`?`})]})}function Uo(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 Wo(e){return e.transforms.includes(`identity`)?{kind:`identity`}:e.transforms.includes(`threshold`)?Go(e.sourceUnit):e.transforms.includes(`linear`)?{kind:`linear`,scale:1,offset:0}:{kind:`invert`}}function Go(e){let t=e===`W`;return{kind:`threshold`,comparison:`gte`,threshold:t?5:0,startDwellMs:t?be:0,stopDwellMs:t?Ce:0}}function Ko(e){let t=He({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 qo({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($t,{"aria-label":o(`customize.scalar.stepTransform`),value:r.kind,options:t.map(e=>({value:e,label:o(`customize.scalar.transform.${e}`)})),onChange:e=>i(Jo(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(nn,{checked:r.kind===`invert`,onChange:e=>i(e.target.checked?{kind:`invert`}:{kind:`identity`})}),o(`customize.scalar.invert`)]}):null,r.kind===`threshold`&&d(Yo,{unit:n,value:r,onChange:i}),r.kind===`linear`&&d(Xo,{value:r,onChange:i})]})}function Jo(e,t){return e===`invert`?{kind:`invert`}:e===`threshold`?Go(t):e===`linear`?{kind:`linear`,scale:1,offset:0}:{kind:`identity`}}function Yo({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(Zo,{label:r(`customize.scalar.threshold`,{unit:e??``}),value:t.threshold,onChange:e=>n({...t,threshold:e})}),d(Zo,{label:r(`customize.scalar.startDwell`),value:t.startDwellMs/1e3,onChange:e=>n({...t,startDwellMs:e*1e3})}),d(Zo,{label:r(`customize.scalar.stopDwell`),value:t.stopDwellMs/1e3,onChange:e=>n({...t,stopDwellMs:e*1e3})})]})}function Xo({value:e,onChange:t}){let{t:n}=Z();return a(`div`,{className:`flex flex-col gap-2 text-[11px] text-foreground`,children:[d(Zo,{label:n(`customize.scalar.scale`),value:e.scale,onChange:n=>t({...e,scale:n})}),d(Zo,{label:n(`customize.scalar.offset`),value:e.offset,onChange:n=>t({...e,offset:n})})]})}function Zo({label:e,value:t,onChange:n}){return a(`label`,{className:`flex flex-col gap-1`,children:[e,d(un,{type:`number`,value:Number.isFinite(t)?t:0,onChange:e=>{let t=Number(e.target.value);Number.isFinite(t)&&n(t)}})]})}function Qo(e){return e===`identity`||e===`invert`||e===`threshold`||e===`linear`}function $o(e){return Object.hasOwn(Ze,e)}function es(e){return $o(e)?Ze[e].targets:[]}function ts(e,t){let n=es(e).find(e=>e.id===t);return n?.cardinality===`keyedArray`?n.fields??[]:[]}function ns(e,t){return es(e).find(e=>e.id===t)?.traits??[]}function rs(e,t){return e.caps.flatMap(e=>{let n=is(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 is(e,t){if(e===null)return null;let n=gi(e[t],`unit`);return typeof n==`string`&&n.length>0?n:null}function as(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 os(e,t,n,r){let i=ts(e,t).find(e=>e.path===n);if(i===void 0)return{ok:!1,reason:`kind`};let a=as(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(Qo);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 ss(e,t,n){return ts(e,t).find(e=>e.path===n)?.enumValues??[]}function cs(e){return!e.ok||e.mode===`enum`?{kind:`identity`}:Wo(e.fit)}function ls(e,t){return Object.fromEntries(e.map(e=>[e,t.includes(e)?e:null]))}function us(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=xe({cap:e.cap,targetId:e.targetId,device:e.device,apply:e.apply,items:[t]});return n.ok?n.value:null}function ds(e,t,n){return(ts(e,t).find(e=>e.path===n)?.literals??[]).map(e=>e.path)}function fs(e,t,n,r){return ts(e,t).find(e=>e.path===n)?.literals?.find(e=>e.path===r)?.values??[]}function ps(e,t,n){return ss(e,t,n)}e();var ms={level:`customize.keyed.field.level`,"remaining.value":`customize.keyed.field.remaining`,status:`customize.keyed.field.status`};function hs(e){return e===`pending`?`pending`:e===`error`?`failed`:`answered`}function gs(e){let{t}=Z(),n=e.mode===`change`?t(`customize.keyed.changeTitle`):t(`customize.keyed.addTitle`);return d(dr,{open:e.open,onOpenChange:t=>t?void 0:e.onClose(),children:a(Qn,{width:`md`,placement:`sheet-on-mobile`,scroll:`body`,"aria-label":n,children:[d(Tr,{children:d(Rn,{children:n})}),e.open&&d(_s,{...e,heading:n})]})})}function _s(e){let{t,i18n:i}=Z(),o=ns(e.cap,e.targetId),c=ts(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??fs(e.cap,e.targetId,`remaining.value`,`remaining.unit`)[0]??``),S=Er({projection:`slim`}),C=n(()=>S.status===`success`?mi(S.data):[],[S.status,S.data]),w=Ts(e.seed,C),[T,E]=r(null),[D,O]=r(!1);!D&&w!==null&&(E(w),O(!0));let k=Bn({deviceId:T?.id??0}),A=vt({deviceId:T?.id??0}),j=rs(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:{}),L=j.find(e=>`${e.cap}.${e.path}`===M)??null,R=L===null?null:os(e.cap,e.targetId,g,L),te=m?f:jo(l),z=ys(e.cap,e.targetId,g,v,b),ne=bs(T,L,R,ee,P),re=ne===null?null:us({cap:e.cap,targetId:e.targetId,device:e.target,apply:e.apply,key:te,label:l,fieldPath:g,source:ne,transform:ne.transform,literals:z}),B=xs(re,te,g,L,A.status===`success`?A.data:null),ie=typeof e.host.location==`string`&&e.host.location.length>0?e.host.location:null,V=e=>{u(e),m||p(jo(e))};return a(s,{children:[a(xr,{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(un,{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(un,{value:te,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($t,{value:g,options:c.map(e=>({value:e.path,label:t(ms[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($t,{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)),ds(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($t,{value:b,options:fs(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(Gt,{devices:ws(C,e.host.id),listState:hs(S.status),value:[],selection:`single`,...ie===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=os(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:[Ao(n.cap,n.path,i.language),n.unit===null?``:` (${n.unit})`]})]}),!r.ok&&d(`span`,{className:`text-foreground-subtle`,children:t(Fo(r.reason))})]},o)})}),R?.ok===!0&&R.mode===`scalar`&&d(qo,{control:R.fit.transforms.includes(`linear`)?`choice`:`none`,transforms:R.fit.transforms,unit:R.fit.sourceUnit,value:P,onChange:F}),R?.ok===!0&&R.mode===`enum`&&L!==null&&d(vs,{values:L.enumValues,outputs:ps(e.cap,e.targetId,g),mapping:ee,onChange:I}),B!==null&&d(Ho,{preview:B})]}),a(mr,{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||re===null||te===``,onClick:()=>{re!==null&&e.onSave(re,te)},children:t(`customize.keyed.save`)})]})]});function H(t,n){if(n.ok){if(N(`${t.cap}.${t.path}`),n.mode===`enum`){let n=ls(t.enumValues,ps(e.cap,e.targetId,g));I(n),F({kind:`enum-map`,mapping:{...n}});return}F(cs(n))}}}function vs(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($t,{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 ys(e,t,n,r,i){let a=Object.entries(r).map(([e,t])=>({path:e,value:t})),o=ds(e,t,n).flatMap(e=>i===``?[]:[{path:e,value:i}]);return[...a,...o]}function bs(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 xs(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=gi(i[r.cap],r.path);if(a.kind===`from`)return Ss(o);if(a.kind!==`expression`)return{kind:`failed`,reason:`compile`};let s=Cs(o);if(s===void 0)return{kind:`failed`,reason:`no-value`};let c=We(a.expr,{x:s},Date.now());return c.ok?Ss(c.value):{kind:`failed`,reason:c.error}}function Ss(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 Cs(e){if(typeof e==`number`||typeof e==`string`||typeof e==`boolean`)return e;if(e===null)return null}function ws(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 Ts(e,t){return e===null?null:t.find(t=>t.addonId===e.source.addonId&&t.stableId===e.source.stableId)??null}var Es=`consumables`,Ds=`items`,Os=Re.shape.items;function ks(e){let t=e.split(`.`).pop()??e,n=t.replace(/Level$/,``);return n===``?t:n}function As(e){let t=e.replace(/([a-z0-9])([A-Z])/g,`$1 $2`).toLowerCase();return t.charAt(0).toUpperCase()+t.slice(1)}function js(e,t){return e.caps.filter(e=>t.has(e.cap)&&e.cap!==`consumables`).flatMap(e=>e.fields.filter(e=>e.item!==!0&&fn(e)).map(t=>({kind:`field`,key:ks(t.path),cap:e.cap,path:t.path})))}function Ms(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=Os.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 Ns(e,t,n){if(e.kind!==`known`)return e;if(t.kind!==`known`)return t;let r=js(t.value,e.value);if(!e.value.has(`consumables`)||n===null)return{kind:`known`,value:r};let i=Ms(n);return i.kind===`known`?{kind:`known`,value:[...r,...i.value]}:i}function Ps(e){return e.defaults.map(t=>t.kind===`field`?d(Fs,{deviceId:e.deviceId,entry:t},`field:${t.cap}.${t.path}`):d(Ls,{entry:t},`item:${t.key}`))}function Fs(e){let{t}=Z(),n=po({deviceId:e.deviceId,cap:e.entry.cap,path:e.entry.path});return d(_o,{name:t(`customize.consumables.fields.${e.entry.key}`,{defaultValue:As(e.entry.key)}),detail:t(`customize.consumables.builtIn`),meta:t(`customize.assign.native`),value:null,readout:d(Is,{value:n}),removeLabel:``})}function Is(e){switch(e.value.kind){case`pending`:return d(go,{display:{text:`…`,tone:`muted`}});case`unknown`:return d(go,{display:{text:`?`,title:e.value.reason,tone:`warning`}});case`absent`:return d(Fn,{level:null,size:`sm`});case`value`:return d(Fn,{level:xt(e.value.value),size:`sm`})}}function Ls(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(_o,{name:n.label,detail:t(`customize.consumables.builtIn`),meta:t(`customize.assign.native`),value:null,readout:d(Fn,{level:Rr(n),label:r,size:`sm`}),removeLabel:``})}e();var Rs={consumables:O};function zs(){return Object.entries(Ze).flatMap(([e,t])=>t.targets.filter(e=>e.cardinality===`keyedArray`).map(t=>({cap:e,target:t})))}function Bs(e){let{t,i18n:n}=Z(),i=ko(),[o,c]=r(null),[l,u]=r(null),f=Ua(e.handle.state),p=To(f,e.cap),m=Us(e.handle,p),h=m.kind===`known`&&m.value!==null?Fe(m.value,e.cap,e.target.id):null,g=xo(h!==null),_=Ws(h,g),v=Ne({cap:e.cap,targetId:e.target.id,device:e.handle.target,stored:m,sourcePresence:_,sourceUnknownReason:g.kind===`unknown`?g.reason:null});if(!Hs(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=qs(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=Qe(p,n.key),a=r===null?wo(f,e.cap):Co(f,e.handle.target,r);await i(t(`customize.consumables.removeWhat`,{name:n.label}),a===null)&&await w(a)},E=o!==null&&o!==`add`?Ks(h,o):null;return a(s,{children:[d(So,{id:e.cap,icon:Rs[e.cap],title:S,testId:`keyed-card-${e.cap}`,actions:d(Rt,{children:C}),children:a(`div`,{className:`flex flex-col gap-2 px-3 py-2 sm:px-4`,children:[e.defaults.kind===`known`&&d(Ps,{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(Vs,{deviceId:e.device.id,cap:e.cap,item:t,language:n.language,sourceName:Gs(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(gs,{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=Te(p,n,r);c(null),i!==null&&(u(null),w(Co(f,e.handle.target,i)))}})]})}function Vs(e){let{t}=Z(),n=e.item.compile,r=e.item.recognized&&n!==null,i=n===null?``:Ao(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:tt(ke,e.item.key,n.draft.fieldPath);return a(`div`,{className:`flex flex-col gap-1`,"data-testid":`keyed-row-${e.item.key}`,children:[d(_o,{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(ho,{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(Va,{onAdvanced:e.onAdvanced})]})]})}function Hs(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 Us(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 Ws(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=qe(n);return t.value.some(e=>qe({addonId:e.addonId,stableId:e.stableId})===r)})?`present`:`absent`}function Gs(e,t){let n=e.compile?.draft.source;if(n===void 0||t.kind!==`known`)return null;let r=qe(n);return t.value.find(e=>qe({addonId:e.addonId,stableId:e.stableId})===r)?.name??null}function Ks(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 qs(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 Js(e){return d(s,{children:zs().map(t=>t.target.deviceTypes.includes(e.device.type)?d(Bs,{device:e.device,handle:e.handle,availability:ao(to(t.cap,t.target),e.facts),cap:t.cap,target:t.target,defaults:e.defaults,onAdvanced:e.onAdvanced},t.cap):null)})}function Ys(e){return e===`identity`||e===`invert`||e===`threshold`||e===`linear`}function Xs(e,t){let n=Object.entries(Ze).find(([t])=>t===e)?.[1];return n===void 0?null:n.targets.find(e=>e.id===t)??null}function Zs(e,t){return Xs(e,t)?.path??null}function Qs(e,t){return e.caps.flatMap(e=>{let n=$s(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 $s(e,t){if(e===null)return null;let n=gi(e[t],`unit`);return typeof n==`string`&&n.length>0?n:null}function ec(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 tc(e,t,n){let r=Xs(e,t);if(r===null||r.cardinality!==`scalar`||n.kind===`enum`)return{ok:!1,reason:Mo};let i=ec(r.sources,n);if(i===null)return{ok:!1,reason:Mo};if(i.requiredUnit!==void 0&&n.unit===null)return{ok:!1,reason:Po};if(i.requiredUnit!==void 0&&n.unit!==i.requiredUnit)return{ok:!1,reason:No};let a=i.transformKinds.filter(Ys);return a.length===0?{ok:!1,reason:Mo}:{ok:!0,valueKind:n.kind,sourceUnit:i.requiredUnit??null,transforms:a}}function nc(e){let t=Ko(e);if(t===null)return{kind:`failed`,reason:Io};if(e.transform.kind===`threshold`)return rc(e.transform,e);let n=Zs(e.cap,e.targetId),r=n===null?void 0:t.fields[n];if(r===void 0)return{kind:`failed`,reason:Io};if(r.kind===`from`)return ac(e.sourceValue);if(r.kind!==`expression`)return{kind:`failed`,reason:Io};if(r.expr.startsWith(`dwell(`))return{kind:`failed`,reason:Lo};let i=ic(e.sourceValue);if(i===void 0)return{kind:`failed`,reason:Ro};let a=We(r.expr,{x:i},e.nowMs);return a.ok?ac(a.value):{kind:`failed`,reason:a.error}}function rc(e,t){if(typeof t.sourceValue!=`number`||!Number.isFinite(t.sourceValue))return{kind:`failed`,reason:Ro};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 ic(e){if(typeof e==`number`||typeof e==`string`||typeof e==`boolean`)return e;if(e===null)return null}function ac(e){return e==null||typeof e==`number`&&!Number.isFinite(e)?{kind:`failed`,reason:zo}:typeof e==`number`||typeof e==`string`||typeof e==`boolean`?{kind:`value`,text:String(e)}:{kind:`failed`,reason:zo}}e();function oc(e){return e===`pending`?`pending`:e===`error`?`failed`:`answered`}function sc(e){let{t}=Z(),n=e.mode===`change`?t(`customize.scalar.changeTitle`,{title:e.title}):t(`customize.scalar.addTitle`,{title:e.title});return d(dr,{open:e.open,onOpenChange:t=>t?void 0:e.onClose(),children:a(Qn,{width:`md`,placement:`sheet-on-mobile`,scroll:`body`,"aria-label":n,children:[d(Tr,{children:d(Rn,{children:n})}),e.open&&d(cc,{...e,heading:n})]})})}function cc(e){let{t,i18n:i}=Z(),o=Er({projection:`slim`}),c=n(()=>o.status===`success`?mi(o.data):[],[o.status,o.data]),l=fc(e.seed,c),[u,f]=r(null),[p,m]=r(!1);!p&&l!==null&&(f(l),m(!0));let h=Bn({deviceId:u?.id??0}),g=vt({deviceId:u?.id??0}),_=h.status===`success`?h.data:{caps:[]},v=Qs(_,g.status===`success`?g.data:null),[y,b]=r(pc(e.seed)),[x,S]=r(e.seed?.transform??{kind:`identity`}),C=v.find(e=>lc(e)===y)??null,w=C===null?null:tc(e.cap,e.targetId,C),T=C===null||w===null||!w.ok?null:uc(u,C,w,_),E=T===null?null:Ko({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:gi(g.data[C.cap],C.path),O=T===null?null:g.status===`pending`?{kind:`pending`}:nc({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=tc(e.cap,e.targetId,t);n.ok&&(b(lc(t)),S(Wo(n)))};return a(s,{children:[a(xr,{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(Gt,{devices:dc(c,e.host.id),listState:oc(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=tc(e.cap,e.targetId,n),o=lc(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:[Ao(n.cap,n.path,i.language),n.unit===null?``:` (${n.unit})`]})]}),!r.ok&&d(`span`,{className:`text-foreground-subtle`,children:t(Fo(r.reason))})]},o)})})]}),w!==null&&w.ok&&d(qo,{control:Uo(w.transforms),transforms:w.transforms,unit:w.sourceUnit,value:x,onChange:S}),O!==null&&d(Ho,{preview:O})]}),a(mr,{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 lc(e){return`${e.cap}.${e.path}`}function uc(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 dc(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 fc(e,t){return e===null?null:t.find(t=>t.addonId===e.source.addonId&&t.stableId===e.source.stableId)??null}function pc(e){return e===null?null:`${e.source.cap}.${e.source.fieldPath}`}var mc=`Assigned · `;function hc(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(mc)){let n=e.slice(11);return{kind:`assigned`,source:t??n}}return{kind:`unknown`}}e();var gc={battery:N,"running-state":W};function _c(){return Object.entries(Ze).flatMap(([e,t])=>t.targets.filter(e=>e.cardinality===`scalar`).map(t=>({cap:e,target:t})))}function vc({device:e,handle:t,availability:n,cap:i,target:o,onAdvanced:c}){let{t:l,i18n:u}=Z(),f=ko(),[p,m]=r(!1),[h,g]=r(null),_=l(`customize.scalar.caps.${i}`),v=o.path??o.id,y=Ua(t.state),b=bc(t,To(y,i)),x=b.kind===`known`&&b.value!==null?Je({feature:b.value,device:t.target,cap:i,targetId:o.id}):null,S=x!==null,C=xo(S),w=x===null||C.kind!==`known`?null:C.value.find(e=>qe({addonId:e.addonId,stableId:e.stableId})===qe(x.draft.source))??null,T=w?.name??null,E=xc(S,C.kind,w!==null),D=et({cap:i,targetId:o.id,device:t.target,stored:b,sourcePresence:E,sourceUnknownReason:C.kind===`unknown`?C.reason:null}),O=hc(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=wo(y,i);await f(l(`customize.scalar.removeWhat`,{name:T??(x===null?e.name:qe(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(So,{id:i,icon:gc[i],title:_,testId:`scalar-card-${i}`,actions:d(Rt,{children:P}),children:d(yc,{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?``:Ao(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(sc,{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(Co(y,t.target,e))}})]})}function yc(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(ho,{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(ho,{target:{deviceId:e.sourceDeviceId,cap:e.sourceCap,path:e.sourcePath}})]}),r&&a(`p`,{className:`text-xs text-foreground`,children:[t(`customize.scalar.otherFormula`),` `,d(Va,{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 bc(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 xc(e,t,n){return e?t===`pending`?`pending`:t===`unknown`?`unknown`:n?`present`:`absent`:`present`}function Sc({device:e,handle:t,facts:n,onAdvanced:r}){return d(s,{children:_c().map(i=>i.target.deviceTypes.includes(e.type)?d(vc,{device:e,handle:t,availability:ao(to(i.cap,i.target),n),cap:i.cap,target:i.target,onAdvanced:r},i.cap):null)})}var Cc={binary:`binary`,switch:`switch`};function wc(e){return Object.hasOwn(Ze,e)}function Tc(e,t){if(!wc(e))return null;let n=Ze[e].targets.find(e=>e.id===t);return n===void 0||n.cardinality!==`event`?null:n}function Ec(e,t){let n=Tc(e,t);if(n===null)return[];let r=[];for(let e of n.sources){let t=Cc[e.kind];t!==void 0&&r.push(t)}return r}function Dc(e,t){return t.some(t=>e.includes(t))}function Oc(e,t){let n=Ge[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 kc(e,t,n,r){let i=Tc(t,n);if(i===null)return null;let a=Qs(e,null).filter(e=>e.kind===`boolean`);for(let t of a){if(ec(i.sources,t)===null)continue;let n=Oc(e,t.cap);if(!(r===`pulse`&&n===null))return{cap:t.cap,fieldPath:t.path,changedAtField:n}}return null}function Ac(e,t,n,r){return e.filter(e=>e.id!==t).filter(e=>!Dc(n.get(e.id)??[],r)).map(e=>e.id)}function jc(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){let t=nt({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 Nc(e){let t=Xe({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 Pc(e,t){return{deviceId:e,config:t.config}}function Fc(e,t){return{deviceId:e,patch:{motionCooldownMs:t}}}async function Ic(e,t,n,r){await n(Pc(e,t)),await r(Fc(e,t.timeoutMs))}e();function Lc(e){return e===`pending`?`pending`:e===`error`?`failed`:`answered`}function Rc(e){let{t}=Z(),n=e.mode===`change`?t(`customize.scalar.changeTitle`,{title:e.title}):t(`customize.scalar.addTitle`,{title:e.title});return d(dr,{open:e.open,onOpenChange:t=>!t&&e.onClose(),children:a(Qn,{placement:`sheet-on-mobile`,scroll:`body`,"aria-label":n,children:[d(Tr,{children:d(Rn,{children:n})}),e.open?d(zc,{...e}):null]})})}function zc(e){let{t,i18n:i}=Z(),o=Er({projection:`slim`}),c=o.status===`success`?mi(o.data):[],[l,u]=r(Hc(e.seed,c)),[f,p]=r(e.debounceMs/1e3),m=Bn({deviceId:l?.id??0}),h=vt({deviceId:l?.id??0}),g=m.status===`success`?m.data:{caps:[]},_=n(()=>Ec(e.cap,e.targetId),[e.cap,e.targetId]),v=yo(_,e.open),y=n(()=>v.kind===`known`?Ac(c,e.host.id,v.value,_):[],[v,c,e.host.id,_]),b=l===null?null:kc(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:Mc({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=Vc(h.data,x),T=Ae(Le,w,Math.round(f*1e3));return a(s,{children:[a(xr,{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(Gt,{devices:jc(c,e.host.id),listState:Lc(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:Ao(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(un,{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(Bc(w,T.lastPressedAt))})]}),a(mr,{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 Bc(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 Vc(e,t){if(e===void 0||t===null)return{kind:`unread`};let n=e[t.cap],r=n===void 0?void 0:gi(n,t.fieldPath),i=Ge[t.cap]??t.changedAtField,a=n===void 0?void 0:gi(n,i);return typeof r==`boolean`?{kind:`level`,active:r,changedAt:typeof a==`number`&&Number.isFinite(a)?a:null}:{kind:`unread`}}function Hc(e,t){return e===null?null:t.find(t=>t.addonId===e.addonId&&t.stableId===e.stableId)??null}function Uc(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=Wc(t,n);return r===null?{kind:`unknown`,seconds:null}:{kind:`active`,seconds:r}}function Wc(e,t){if(e==null||!Number.isFinite(e)||e<zi)return null;let n=Math.floor((t-e)/1e3);return n<0?0:n}function Gc(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>=zi?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 Kc(){return Object.entries(Ze).flatMap(([e,t])=>t.targets.filter(e=>e.cardinality===`event`).map(t=>({cap:e,pulse:qc(t),span:Jc(t)})).filter(e=>e.pulse!==null||e.span!==null))}function qc(e){if(e.shape!==`pulse`)return null;let t=Xc(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 Jc(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 Yc(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 Xc(e){return e===`add`||e===`replace`?e:null}e();function Zc({device:e,handle:t,availability:n,cap:i,title:o,view:c,onAdvanced:l}){let{t:u,i18n:f}=Z(),p=ko(),[m,h]=r(!1),[g,_]=r(null),v=Ua(t.state),y=To(v,i),b=$c(t,y),x=b.kind===`known`&&b.value!==null?Ue({feature:b.value,device:t.target,cap:i,targetId:c.id,timestampPath:c.timestampPath,counterPath:c.counterPath}):null,S=x!==null,C=xo(S),w=x?.draft.sources[0]??null,T=w===null||C.kind!==`known`?null:C.value.find(e=>qe({addonId:e.addonId,stableId:e.stableId})===qe(w))??null,E=el(S,C.kind,T!==null),O=Se({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?``:Ao(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(So,{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(nn,{"aria-label":u(`customize.doorbell.active`),checked:y.enabled!==!1,disabled:!k||t.saving,onChange:e=>{A(Co(v,t.target,{...y,enabled:e.target.checked}))}}),u(`customize.doorbell.active`)]}),d(Rt,{children:u(Yc(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(Qc,{deviceId:e.id,cap:i,timestampPath:c.timestampPath,counterPath:c.counterPath,startedAt:t.state.kind===`present`?t.state.view.block.createdAt:null}),P&&a(`p`,{className:`text-xs text-foreground`,children:[u(`customize.doorbell.otherFormula`),` `,d(Va,{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=wo(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(Rc,{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(Co(v,t.target,e))}})]})}function Qc({deviceId:e,cap:t,timestampPath:n,counterPath:r,startedAt:i}){let{t:o}=Z(),s=po({deviceId:e,cap:t,path:n}),c=po({deviceId:e,cap:t,path:r}),l=Gc(s.kind===`pending`?`pending`:s.kind!==`value`||typeof s.value!=`number`?`unknown`:s.value,c.kind===`value`&&typeof c.value==`number`?c.value:null);return l.kind===`pending`?d(`p`,{role:`status`,className:`text-[11px] text-foreground-subtle`,children:o(`customize.event.checking`)}):l.kind===`unknown`?d(`p`,{role:`status`,className:`text-[11px] text-foreground-subtle`,children:o(`customize.event.doorbellLast.unknown`)}):l.kind===`none`?a(`p`,{role:`status`,className:`text-[11px] text-foreground-subtle`,children:[o(`customize.event.doorbellLast.none`,{when:i===null?``:Ri(i)}),l.pressCount===null?``:` · ${o(`customize.event.doorbellCount`,{count:l.pressCount})}`]}):a(`p`,{role:`status`,className:`text-[11px] text-foreground`,children:[o(`customize.event.doorbellLast.ring`,{when:Ri(l.lastPressedAt)}),l.pressCount===null?``:` · ${o(`customize.event.doorbellCount`,{count:l.pressCount})}`]})}function $c(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 el(e,t,n){return e?t===`pending`?`pending`:t===`unknown`?`unknown`:n?`present`:`absent`:`present`}e();var tl=[`in-addition`,`confirm`,`replace`];function nl(e){return e===`pending`?`pending`:e===`error`?`failed`:`answered`}function rl(e){let{t}=Z(),n=e.mode===`change`?t(`customize.scalar.changeTitle`,{title:e.title}):t(`customize.scalar.addTitle`,{title:e.title});return d(dr,{open:e.open,onOpenChange:t=>!t&&e.onClose(),children:a(Qn,{placement:`sheet-on-mobile`,scroll:`body`,"aria-label":n,children:[d(Tr,{children:d(Rn,{children:n})}),e.open?d(il,{...e}):null]})})}function il(e){let{t,i18n:i}=Z(),o=Er({projection:`slim`}),c=o.status===`success`?mi(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=Bn({deviceId:v?.id??0}),b=y.status===`success`?y.data:{caps:[]},x=n(()=>Ec(e.cap,e.targetId),[e.cap,e.targetId]),S=yo(x,e.open),C=n(()=>S.kind===`known`?Ac(c,e.host.id,S.value,x):[],[S,c,e.host.id,x]),w=v===null?null:kc(b,e.cap,e.targetId,`span`),T=Nc({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(xr,{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:Ao(n.cap,n.fieldPath,i.language)}),e.sourceModes.length>1?d($t,{"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=al(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(Gt,{devices:jc(c,e.host.id),listState:nl(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:Ao(w.cap,w.fieldPath,i.language)}),d(J,{variant:`secondary`,size:`sm`,disabled:w===null,onClick:D,children:t(`customize.motion.add`)}),d(ol,{label:t(`customize.event.timeout`),value:m,onChange:h}),e.cooldownMs!==null&&d(ol,{label:t(`customize.event.cooldown`),value:g,onChange:_}),v!==null&&w!==null&&d(sl,{deviceId:v.id,cap:w.cap,fieldPath:w.fieldPath,timeoutMs:Math.round(m*1e3)})]}),a(mr,{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 al(e){return tl.find(t=>t===e)??null}function ol({label:e,value:t,onChange:n}){return a(`label`,{className:`flex flex-col gap-1 text-[11px] text-foreground`,children:[e,d(un,{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 sl({deviceId:e,cap:t,fieldPath:n,timeoutMs:r}){let{t:i}=Z(),a=po({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(cl(o,_e(Ve,o,{timeoutMs:r,cooldownMs:0,nowMs:Date.now()}).open))})}function cl(e,t){return e.kind===`unread`?`customize.event.previewWaiting`:t?`customize.event.previewMotionOn`:e.active?`customize.event.previewSensorOn`:`customize.event.previewMotionOff`}e();function ll({device:e,availability:t,cap:n,title:i,view:o,sensors:c}){let{t:u}=Z(),f=Lt(),p=jr(),m=On({addonId:`pipeline-orchestrator`,deviceId:e.id,nodeId:`hub`}),[h,g]=r(!1),[_,v]=r(null),y=l(!1),[b,x]=r(!1),S=dl(c),C=ze(o.id,S),w=pl(xi(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 Ic(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(So,{id:n,icon:W,title:i,testId:`event-card-${n}`,actions:d(Rt,{children:u(Yc(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:fl(S)}),message:S.kind===`unknown`?S.reason??``:``}):a(s,{children:[d(ul,{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(rl,{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 ul({deviceId:e}){let{t}=Z(),n=po({deviceId:e,cap:`motion`,path:`detected`}),r=po({deviceId:e,cap:`motion`,path:`lastDetectedAt`}),i=Uc(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 dl(e){return e.presence===`pending`?{kind:`pending`}:e.status===null?{kind:`unknown`,reason:null}:{kind:`known`,value:e.status}}function fl(e){return e.kind===`unknown`?e.reason??``:e.kind===`known`&&e.value.state===`unreadable`?e.value.reason:``}function pl(e,t){return e!==null&&Number.isFinite(e)?e:t}var ml=Ze;function hl(e,t){let n=ml[e];return n===void 0?null:n.targets.find(e=>e.id===t)??null}function gl({device:e,handle:t,facts:n,sensors:r,onAdvanced:i}){let{t:a}=Z();return d(s,{children:Kc().map(o=>{let s=o.pulse??o.span;if(s===null||!s.deviceTypes.includes(e.type))return null;let c=hl(o.cap,s.id);if(c===null)return null;let l=a(o.pulse===null?`customize.motion.title`:`customize.doorbell.title`),u=ao(to(o.cap,c),n);return o.pulse===null?o.span===null?null:d(ll,{device:e,availability:u,cap:o.cap,title:l,view:o.span,sensors:r},o.cap):d(Zc,{device:e,handle:t,availability:u,cap:o.cap,title:l,view:o.pulse,onAdvanced:i},o.cap)})})}function _l({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(So,{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(L,{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 vl({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 yl(e,t){if(e.kind!==`known`||typeof t!=`string`||t.length===0)return null;let n=Mt(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 bl(e,t,n){return xn(e,t?.ids??new Set,n)}function xl(e,t){return e?.containers.get(t)??null}function Sl(e,t,n){return e.kind===`known`?bl(e.value,t,n).suggested.length:0}function Cl(e,t){let n=[t,e.detail].filter(e=>e!==null&&e!==``);return n.length===0?null:n.join(` · `)}function wl({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=Cl(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 Tl(e){return e.kind===`pending`?`pending`:e.kind===`unknown`?`failed`:`answered`}function El(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 Dl({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`?Li(s.value,``,y):[],S=bl(b,l,e=>e.deviceId).suggested,C=bl(x,l,e=>e.deviceId).others,w=n(()=>El(C),[C]),T=Tl(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(dr,{open:e,onOpenChange:e=>e?void 0:D(),children:a(Qn,{width:`lg`,placement:`sheet-on-mobile`,scroll:`body`,"aria-label":i,children:[d(Tr,{children:d(Rn,{children:i})}),a(xr,{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(wl,{location:l.location,devices:S.map(e=>({id:e.deviceId,name:e.name,container:xl(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(Gt,{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(mr,{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 Ol(e,t){let r=typeof e==`string`&&e.length>0,i=xo(t&&r);return n(()=>t?yl(i,e):null,[t,i,e])}e();function kl(e){return e==null?null:e.message}function Al({device:e}){let t=le(),{t:n}=Z(),i=c(),o=ko(),l=G.includes(e.type),[u,f]=r(!1),[p,m]=r(!1),[h,g]=r(null),_=St({deviceId:e.id},{enabled:l}),v=Pi({status:_.status,data:_.data,error:kl(_.error)===null?null:{message:kl(_.error)??``}}),y=v.kind===`present`?v.slot.slotRef:``,b=v.kind===`present`?[...Mi(v.slot,v.value).map(e=>e.deviceId),...Ai(v.slot,v.value)]:[],x=en(),S=xo(l&&v.kind===`present`&&(u||b.length>0)),C=Ol(e.location,l&&v.kind===`present`),w=Tt({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(_l,{id:`linked`,icon:V,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:ki(n.integration,n.location),orphan:t}},k=[...Mi(v.slot,T).map(e=>O(e,!1)),...Ai(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:kl(w.error)??n(`helpers.customize.requestFailed`)}:S.kind===`pending`||w.status===`pending`||w.data===void 0?{kind:`pending`}:{kind:`known`,value:Ii(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(Fi(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?`—`:on(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(Xt,{checked:e.tracked,disabled:p,"aria-label":n(`customize.linked.trackFor`,{name:e.name??e.deviceId}),onCheckedChange:t=>void M(Ni(T,e.deviceId,t))})}]:[],{key:`remove`,header:``,cellClassName:`text-right w-10`,cell:e=>e.implied||e.orphan?null:d(Wr,{icon:ne,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(_l,{id:`linked`,icon:V,title:n(`customize.linked.title`),addLabel:n(`customize.linked.add`),onAdd:p?void 0:()=>f(!0),...C===null?{}:{suggestion:{count:Sl(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(wt,{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:on(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(Dl,{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(Oi(T,e.map(e=>e.deviceId)))},onClose:()=>f(!1)})]})}var jl={"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`}},Ml=new Set([K.Camera]);function Nl(e){return e.unitField===null?[e.fieldPath]:[e.fieldPath,e.unitField]}function Pl(e,t){if(Ml.has(e))return{kind:`absent`};let n=null;for(let[e,r]of Object.entries(jl))if(t.has(e)){n={cap:e,fieldPath:r.fieldPath,unitField:r.unitField};break}let r=null;for(let e of ve)if(t.has(e)){let t=Ke[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 Fl(e){return je(e.from,e.to)?Ye(e):null}function Il(e){return De(e)}var Ll=/^convert\(v,\s*"[^"]*",\s*"[^"]*"\)$/;function Rl(e){return e!==void 0&&Ll.test(e.expr)}function zl(e){return e===void 0||e.expr===`!v`||Ll.test(e.expr)?!1:e.bindings.v!==void 0}function Bl(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=Ee({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 Vl(e,t,n){if(e===null)return null;let r=To(e,n.cap);if(r===null)return e;let i=new Set(Nl(n)),a=Object.fromEntries(Object.entries(r.fields).filter(([e])=>!i.has(e)));return Object.keys(a).length===0?wo(e,n.cap):Co(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 Hl(e){if(typeof e!=`object`||!e)return;let t=Reflect.get(e,`unit`);return typeof t==`string`?t:void 0}function Ul(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 Wl(e,t){let n=To(e,t.cap);if(n===null)return;let r=n.fields[t.fieldPath];return r!==void 0&&r.kind===`expression`?r:void 0}function Gl(e,t){let n=Wl(e,t);return n===void 0||!Rl(n)?null:/^convert\(v,\s*"[^"]*",\s*"([^"]*)"\)$/.exec(n.expr)?.[1]??null}function Kl(e,t){let n=Wl(e,t);return n===void 0||!zl(n)?null:n.expr}function ql(e,t,n){let r=To(e,t);if(r===null)return!1;let i=r.fields[n];return i!==void 0&&i.kind===`expression`&&i.expr===`!v`}function Jl(e){return typeof e==`number`||typeof e==`boolean`||typeof e==`string`?String(e):e===null?`null`:JSON.stringify(e)}function Yl({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:Pl(e.type,g),v=_?.kind===`present`?_.convert?.cap??``:``,y=Cr(s.trpcClient,e.id,v);if(i.nativeCaps.kind===`pending`)return d(`section`,{className:`${E} ${m}`,children:d(vl,{availability:{kind:`pending`}})});if(i.nativeCaps.kind===`unknown`)return d(`section`,{className:`${E} ${m}`,children:d(vl,{availability:{kind:`unknown`,reason:i.nativeCaps.reason}})});if(_===null||_.kind===`absent`)return null;let b=Ua(n.state),x=_.convert,S=_.invert,C=x===null?void 0:Hl(y),w=C===void 0?void 0:Pe(C)??C,T=w===void 0?void 0:ye(w),D=x===null?null:Gl(b,x),O=x===null?null:Kl(b,x),k=p??O??``,A=S===null?!1:ql(b,S.cap,S.fieldPath),j=n.state.kind===`none`||n.state.kind===`present`,M=x===null?0:Ul(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:vi(N,new Map([[$e(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=Fl({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(Co(b,t,e))},I=async()=>{x!==null&&(await F(Vl(b,t,x)),f(``))},L=async()=>{if(x===null)return;let e=Bl({self:t,cap:x.cap,fieldPath:x.fieldPath,expr:k,probe:M});if(e.kind===`refused`){l(e.reason);return}f(``),await F(Co(b,t,e.feature))},R=async()=>{x!==null&&(await F(Vl(b,t,x)),h(``))},te=async()=>{if(S===null)return;let e=Il({self:t,cap:S.cap});if(e===null){l(o(`customize.numericTransforms.invertRefused`));return}await F(Co(b,t,e))},z=async()=>{S===null||b===null||await F(wo(b,S.cap))};return d(So,{id:`numeric-transforms`,icon:ot,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(kt,{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(yi,{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:Jl(M),result:Jl(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 L(),children:o(`customize.numericTransforms.applyScript`)}),O!==null&&d(J,{size:`sm`,variant:`outline`,disabled:!j||n.saving,onClick:()=>void R(),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 z(),children:o(`customize.numericTransforms.clearInvert`)}):d(J,{size:`sm`,disabled:!j||n.saving,onClick:()=>void te(),children:o(`customize.numericTransforms.applyInvert`)})})]})]})})}e();function Xl(e){return e instanceof Error?e.message:String(e)}function Zl(e){let t=cr({addonId:e.addonId,stableId:e.stableId}),n=or(),i=Nn(),a=Ar(),o=Ha({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=Oo(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:Xl(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 Ql=`pipeline-orchestrator`;function $l(e){return e.status===`pending`?`pending`:e.status===`error`?`unknown`:e.data===void 0?`pending`:e.data.cameraSensors===void 0?`absent`:`present`}function eu(e,t){return e===`absent`?`absent`:$l(t)}async function tu(e){try{return(await e()).isError?`failed`:`answered`}catch{return`failed`}}function nu(e,t){let n=Fr(Ql),r=Pn({deviceId:e},{enabled:t&&n!==`absent`}),i=()=>tu(r.refetch);return t?{presence:eu(n,{status:r.status,data:r.data}),status:r.data?.cameraSensors??null,refetch:i}:{presence:`absent`,status:null,refetch:i}}function ru(e,t){let n=Jn({deviceType:e.type}),r=Ut({deviceId:e.id}),i=Bn({deviceId:e.id}),a=vo(n,e=>new Set(e.caps.map(e=>e.cap))),o=vo(r,e=>eo(e.entries)),s=vo(i,e=>e);return{deviceType:e.type,composable:a,nativeCaps:o,wireable:s,composed:new Set((t?.features??[]).map(e=>e.cap))}}function iu(e,t,n){let r=t.kind===`known`&&t.value.has(`consumables`),i=po(r?{deviceId:e,cap:Es,path:Ds}:null);return Ns(t,n,r?i:null)}e();function au({deviceId:e}){let{t}=Z(),n=Dn({deviceId:e}),r=n.data;return r==null?n.status===`error`?d(Y,{title:t(`customize.deviceUnreadable`),message:n.error?.message??``,onRetry:()=>void n.refetch()}):r===null?d(`p`,{role:`status`,className:`text-xs text-foreground-subtle`,children:t(`customize.noSuchDevice`,{deviceId:e})}):d(`p`,{role:`status`,className:`text-xs text-foreground-subtle`,children:t(`customize.loadingDevice`)}):r.addonId===`composer`?d(ou,{device:r}):d(su,{device:r,target:{addonId:r.addonId,stableId:r.stableId}})}function ou({device:e}){let{t}=Z(),n=e.stableId.startsWith(`composed-`)?e.stableId.slice(Ie.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(Qr,{className:`text-[11px] text-primary hover:underline`,to:ai(n),children:t(`customize.composed.edit`)})]})}function su({device:e,target:t}){let n=Zl(t),i=Fr(`composer`),{t:o}=Z(),s=nu(e.id,e.type===K.Camera),c=ru(e,Ua(n.state)),l=iu(e.id,c.nativeCaps,c.wireable),u={deviceType:e.type,composable:c.composable,nativeCaps:c.nativeCaps,cameraSensors:s.presence},[f,p]=r(!1),m=n.state.kind===`none`||n.state.kind===`present`?()=>p(!0):void 0;return a(`div`,{className:`flex flex-col gap-3`,children:[d(Qa,{device:e}),i===`absent`&&d(`p`,{role:`alert`,className:`text-xs text-warning`,children:o(`customize.composerAbsent`)}),n.state.kind!==`none`&&d(cu,{state:n.state}),d(gl,{device:e,handle:n,facts:u,sensors:s,onAdvanced:m}),d(Sc,{device:e,handle:n,facts:u,onAdvanced:m}),d(Js,{device:e,handle:n,facts:u,defaults:l,onAdvanced:m}),d(Yl,{device:e,target:t,handle:n,facts:c}),d(Al,{device:e}),m!==void 0&&d(Va,{onAdvanced:m,testId:`customize-advanced`}),f&&m!==void 0&&d(za,{device:e,target:t,handle:n,facts:c,onClose:()=>p(!1)})]})}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(Rt,{variant:n.status===`running`?`success`:n.status===`failed`?`danger`:`warning`,children:t(`customize.blockStatus.${n.status}`)}),!n.enabled&&d(Rt,{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})})]})}}}var lu=`overview`;function uu(e,t){return e.some(e=>e.id===t)?t:lu}function du({deviceId:e}){let{t}=Z(),n=c(),r=Number.isFinite(e),{data:i}=Dn({deviceId:e},{enabled:r}),o=typeof i?.type==`string`?i.type:`camera`;br([`deviceManager`,`getBindings`],[`capability.binding-changed`]);let{data:s,isLoading:l,isError:u,error:f}=Ut({deviceId:e},{enabled:r}),{data:p}=ur({deviceType:o},{enabled:!!o}),m=Ot({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(dt,{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(fu,{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(pu,{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(mu,{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(Zr,{i18nKey:`device.bindingsTab.boundSummary`,count:_.length,values:{bound:v},components:{b:d(`span`,{className:`font-medium text-foreground`}),em:d(`em`,{})}})}),d(Kn,{columns:y,rows:_,rowKey:e=>e.capName,minWidthPx:720})]})}function fu({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(z,{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(mt,{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(V,{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 pu({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 mu({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:pe,{className:`h-3 w-3`}),e]},e)})})}function hu({deviceId:e,activeSubTab:t,onSubTabChange:n,deviceType:r,isAdmin:i}){return a(`div`,{className:`flex flex-col gap-3`,children:[Gr(r,i)&&d(Nr,{deviceId:e,readOnly:!0}),d(Yr,{deviceId:e,activeSubTab:t,onSubTabChange:n})]})}e();var gu=[[`pipelineOrchestrator`,`getCameraDetectionSource`]];function _u(e){let t=c(),n=Pr({deviceId:e},{refetchOnMount:`always`}),a=_n(),[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:gu})}catch(e){u(e instanceof Error?e.message:`Could not change the root detector`),await t.invalidateQueries({queryKey:gu})}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 vu=`object-detection`;function yu(e){return[e.addonId,...e.children.flatMap(yu)]}function bu(e,t){if(e===`pipeline`)return new Set;let n=xu(t,vu);return n===void 0?new Set:new Set(e===`onboard`?[n.addonId]:yu(n))}function xu(e,t){for(let n of e){if(n.addonId===t)return n;let e=xu(n.children,t);if(e!==void 0)return e}}function Su(e,t){return e===`onboard`?X.t(`helpers.detectionSourceModel.badgeCameraAi`):t===`object-detection`?X.t(`helpers.detectionSourceModel.badgeNoRoot`):X.t(`helpers.detectionSourceModel.badgeIdle`)}function Cu(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 wu(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 Tu(e,t){return e===`onboard`?X.t(`helpers.detectionSourceModel.noticeOnboard`):t===`object-detection`?X.t(`helpers.detectionSourceModel.noticeNoRoot`):X.t(`helpers.detectionSourceModel.noticeIdle`)}var Eu=[`pl-2`,`pl-6`,`pl-10`,`pl-14`],Du={detector:`success`,cropper:`info`,classifier:`primary`,refiner:`warning`,"audio-classifier":`neutral`};function Ou(e){return Eu[Math.min(e,Eu.length-1)]??`pl-2`}function ku(e){return e.zoneDriven?{kind:`zone-driven`}:{kind:`gate`,effectiveOn:e.ownOn,defaultOn:e.defaultOn,explicit:e.choice!==`auto`}}function Au(e,t,n){return e.kind===`parent`?n:Su(e.source,t)}function ju({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(Rt,{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(Rt,{size:`sm`,variant:`success`,children:e},`out-${e}`))]})}function Mu({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:Au(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 ${Ou(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(Rt,{size:`sm`,variant:Du[e.kind],children:c(e.kind)}),d(ju,{inputs:e.inputs,outputs:e.outputs}),s!==null&&d(`span`,{className:`text-[11px] text-warning`,children:s})]}),d(fr,{gate:ku(e),busy:r,onSet:t=>o(e.stepId,t)})]},e.stepId)})})}function Nu(e,t){let n=e?.[t];return n===void 0?`auto`:n?`on`:`off`}function Pu(e,t){return e===`auto`?t:e===`on`}function Fu(e,t,n){return e!==`onboard`&&e!==`none`||!n.has(t)?null:{kind:`source`,source:e}}function Iu(e,t,n,r,i){let a=e.zoneDrivenIds??new Set;return t.flatMap(t=>{let o=a.has(t.addonId),s=Nu(e.toggles,t.addonId),c=e.defaults[t.addonId]??!0,l=o||Pu(s,c),u=r===null?Fu(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,...Iu(e,t.children,n+1,f,i)]})}function Lu(e){let t=e.source===null?new Set:bu(e.source,e.tree);return Iu(e,e.tree,0,null,t)}function Ru({source:e,geometry:t,saving:n,error:r,onPick:i}){let{t:o}=Z(),s=t===`flag-only`,c=wu(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(kr,{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:me,children:[Cu(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 zu=new Set([`package-detection`]),Bu=`/system/pipeline?view=nodes`;function Vu(e){return Object.fromEntries(e.slots.flatMap(e=>e.addons.map(e=>[e.id,e.enabledByDefault??!0])))}function Hu({deviceId:e}){let{t}=Z(),s=Zt(),u=Ft(),f=c(),p=U().trpcClient,m=l(null),h=l(null),g=Br({deviceId:e},{refetchOnMount:`always`}),_=$n(void 0,{refetchOnMount:`always`});br([`nodes`,`topology`],[`agent.online`,`agent.offline`,`agent.unregistered`,`addon.installed`,`addon.uninstalled`]);let{nodes:v}=gt(),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=bn({onSuccess:S}),w=mn(),[T,E]=r(null),[D,O]=r(!1),[k,A]=r(null),j=_u(e),M=x.data??{},N=g.data??null,P=y.map(e=>M[e.id]).find(e=>e!==void 0)??null,F=n(()=>P?Ht(P):[],[P]),ee=n(()=>P===null?[]:Lu({tree:F,toggles:N?.stepToggles,defaults:Vu(P),source:j.source,zoneDrivenIds:zu}),[F,P,N?.stepToggles,j.source]),{selection:I,open:L,close:R}=wi(n(()=>ee.map(e=>e.stepId),[ee]),[]),te=y[0]?.id,z=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&&z(()=>L({stepId:e}))},B=()=>{z(()=>R())};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 ie=e=>_.data?.find(e=>e.nodeId===te)?.settings.stepSettings?.[e]??{},V=ee.find(e=>e.stepId===I.stepId)??null,H=V===null?null:Ci(P,V.stepId),ae=u?d(rn,{onClick:B}):d(Wr,{icon:ne,variant:`ghost`,size:`sm`,"aria-label":t(`common.close`,`Close`),onClick:B});return a(`div`,{ref:m,className:`space-y-2`,children:[j.view?.onboard.available===!0&&j.source!==null&&d(Ru,{source:j.source,geometry:j.view.onboard.geometry,saving:j.saving,error:j.error,onPick:e=>void j.pick(e)}),d(`p`,{className:me,children:d(Zr,{i18nKey:`device.cameraStepInspector.modelsChosenByAccelerators`,components:{nodes:d(Qr,{to:Bu,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(Mu,{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(Hn,{open:V!==null&&H!==null,anchor:m,onClose:B,label:t(`stepInspector.stepMatrixFrame.stepSettings`,`Step settings`),children:V!==null&&H!==null&&d(Uu,{addon:H,nodeBag:ie(V.stepId),storedCamera:N?.stepSettings?.[V.stepId],draft:T?.stepId===V.stepId?T:null,saving:D,status:k,notice:V.blocked?.kind===`source`?Tu(V.blocked.source,V.stepId):null,closeButton:ae,onEscape:B,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 Uu({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=cn(e),_=Ei(g),v=Ti(g),y=r?.camera??n,b=r!==null&&!rt(r.camera,n??{});return d(En,{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:me,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(Wu,{addon:e,fields:_,nodeBag:t,cameraBag:y,onChange:f}):d(`p`,{className:me,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 Wu({addon:e,fields:t,nodeBag:n,cameraBag:r,onChange:i}){let{t:a}=Z();return d(Hr,{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 Gu(e,t,n){return{id:e,get label(){return X.t(t)},icon:n}}var Ku=[Gu(`object-detection`,`helpers.detectionSettingsGroups.objectDetection`,`scan-search`),Gu(`tracking`,`helpers.detectionSettingsGroups.tracking`,`route`),Gu(`motion`,`helpers.detectionSettingsGroups.motion`,`activity`),Gu(`stationary`,`helpers.detectionSettingsGroups.stationary`,`square-parking`),Gu(`zones`,`helpers.detectionSettingsGroups.zones`,`shapes`),Gu(`audio`,`helpers.detectionSettingsGroups.audio`,`volume-2`),Gu(`cluster`,`helpers.detectionSettingsGroups.cluster`,`server`)],qu={"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 Ju(e){return qu[e]??`object-detection`}e();var Yu=`steps`,Xu=`settings`,Zu=new Set([Yu,Xu]);function Qu(e){return e.location===`top-tab`&&(e.tab===`detection-pipeline`||e.tab===`zones`)}function $u({deviceId:e,activeSubTab:t,onSubTabChange:n}){let{t:r}=Z();return a(nr,{value:t&&Zu.has(t)?t:Yu,onValueChange:i(e=>{n?.(e)},[n]),className:`flex flex-col`,children:[a(er,{className:`flex-shrink-0`,children:[d(Jt,{value:Yu,children:r(`device.detectionPipelineTab.steps`,`Steps`)}),d(Jt,{value:Xu,children:r(`device.detectionPipelineTab.settings`,`Settings`)})]}),d(_t,{value:Yu,children:d(Hu,{deviceId:e})}),d(_t,{value:Xu,children:d(Yr,{deviceId:e,sectionFilter:Qu,subTabGrouping:{groupOf:e=>Ju(e.id),tabs:Ku}})})]})}var ed=`Notifications`,td={i18nKey:`device.deviceNotificationMute.cameraCostWhenOff`,text:`This camera never notifies — no rule, no target, no alarm. Existing events, tracks and recordings are unaffected.`},nd={i18nKey:`device.deviceNotificationMute.deviceCostWhenOff`,text:`This device never notifies — no rule, no target, no alarm.`};function rd(e){let{mutedDeviceIds:t,deviceId:n}=e,r=t===null?null:!t.includes(n),i=e.pendingOn??null;return{label:ed,on:r===null?null:i??r,available:r!==null,costWhenOff:e.isCamera?td:nd}}function id(e,t){return!e.available||e.on===null?null:{deviceId:t,muted:e.on}}e();function ad(e){if(typeof e!=`object`||!e)return null;let t={...e}.mutedDeviceIds;return Array.isArray(t)?t.filter(e=>typeof e==`number`):null}function od({deviceId:e,isCamera:t}){let{t:n}=Z(),o=c(),s=Number.isFinite(e),[l,u]=r(null),[f,p]=r(null),m=rd({mutedDeviceIds:ad(Nt({},{enabled:s}).data),deviceId:e,isCamera:t,pendingOn:f}),h=n(m.costWhenOff.i18nKey,m.costWhenOff.text),g=vr({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=id(m,e);t!==null&&(p(!t.muted),g.mutate(t))},[e,g,m]),v=m.on===null,y=m.on===!1,b=y?ut: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 sd(e,t){return{switchId:e,label:Be[e].label,detail:t===void 0||t.length===0?null:t}}function cd(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 ld(e){let t=cd(e),n=new Set(e.sourceStillLive),r=e.sourceStillLive.map(e=>sd(e,t.get(e)?.detail)),i=[...t.values()].filter(e=>e.outcome===`not-offered`&&!n.has(e.switchId)).map(e=>sd(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 ud(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=Zt(),[s,c]=r(null),l=Er({isCamera:!0,projection:`slim`}),u=wr(),f=l.data!==void 0,p=n(()=>l.data===void 0?[]:ud(l.data,e),[l.data,e]),m=p.find(e=>e.id===s)??null,h=u.data===void 0?null:ld(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(ot,{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(fd,{report:h})]})}function fd({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(ae,{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(fe,{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(pt,{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 pd({deviceId:e}){let{t}=Z(),[n,i]=r(null),o=sn({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(te,{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 md(e){return e<1e3?`${e.toFixed(0)} kbps`:`${(e/1e3).toFixed(1)} Mbps`}function hd({device:e}){let{t}=Z(),n=oi(),r=typeof e.id==`number`?e.id:null,i=String(e.type??``),o=i===K.Camera,s=i===K.Hub,c=e.features??[],l=c.includes(it.Resyncable),{data:u}=Kt({deviceId:r??0},{enabled:r!==null&&o,refetchInterval:5e3}),f=u?.streams??{},p=Object.entries(f),m=c.includes(it.DoorbellButton),h=Xn(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(zr,{deviceId:r,onOpenChild:e=>n(`/devices/${e}`)}),l&&r!==null&&d(pd,{deviceId:r}),o&&r!==null&&d(dd,{deviceId:r,deviceName:String(e.name??``)}),r!==null&&d(od,{deviceId:r,isCamera:o}),o&&r!==null&&d(Dr,{widgetId:`pipeline-orchestrator/pipeline-quick-stats`,host:`device-tab`,deviceId:r}),m&&d(In,{history:h.history,latestIsFresh:g}),o&&r!==null&&d(Dr,{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(gd,{label:t(`device.overviewTab.nominal`,`Nominal`),value:md(n.nominalBitrateKbps??0)}),d(gd,{label:t(`device.overviewTab.observed`,`Observed`),value:md(n.observedBitrateKbps??0)}),d(gd,{label:t(`device.overviewTab.peak`,`Peak`),value:md(n.peakBitrateKbps??0)}),d(gd,{label:t(`device.overviewTab.packetLoss`,`Packet Loss`),value:`${(n.packetLossPercent??0).toFixed(2)}%`,warning:(n.packetLossPercent??0)>1})]})]},e))})]}),d(si,{}),r!==null&&d(Kr,{deviceId:r})]})}function gd({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 _d=`history`,vd=[{id:`overview`,labelKey:`helpers.structuralTabs.overview`,cameraOnly:!1,adminOnly:!1},{id:`config`,labelKey:`helpers.structuralTabs.config`,cameraOnly:!1,adminOnly:!1},{id:li,labelKey:`helpers.structuralTabs.customize`,cameraOnly:!1,adminOnly:!0},{id:_d,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}],yd=new Set([K.Hub,K.Container]);function bd(e,t){let n=e===K.Camera,r=e===void 0||!yd.has(e);return vd.filter(e=>(n||!e.cameraOnly)&&(t||!e.adminOnly)&&(r||e.id!==`history`)).map(({id:e,labelKey:t})=>({id:e,label:X.t(t)}))}function xd({provider:e,integrationId:t,name:n}){let r=oi(),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(ii,{type:e,size:`lg`})})}e();var Sd=[{id:`logs`,icon:oe,labelKey:`common.logs`},{id:`repl`,icon:ft,labelKey:`deviceDetail.repl`},{id:`events`,icon:T,labelKey:`common.events`},{id:`state`,icon:S,labelKey:`common.state`}];function Cd(){let{t:e}=Z(),t=le(),o=ei(),u=Number(o.deviceId),f=Number.isFinite(u),p=oi(),m=c(),_=Zt(),v=U(),{user:b}=fi(),x=b?.isAdmin===!0,[S,C]=$r(),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}=Dn({deviceId:u},{enabled:f,refetchInterval:5e3,retry:1}),{data:I}=an({deviceId:u},{enabled:f}),L=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(ni),[...r].map(e=>e===`export`?{id:e,label:qr,isAddonContrib:!0}:{id:e,label:Oe[e]?.label??e,isAddonContrib:!0})},[I]),R=N,z=String(R?.name??o.deviceId??`Device`),ne=R?.online===!0,re=ne?`online`:`offline`,B=String(R?.addonId??`rtsp`),ie=R?.features??[],V=R?.type,H=V===K.Camera,{data:ae}=ti(f?u:0),oe=V===K.Container,ce=n(()=>(ae??[]).map(e=>({id:e.id,stableId:e.stableId,type:e.type,...e.sourceInfo?{sourceInfo:{id:e.sourceInfo.id}}:{}})),[ae]),W=n(()=>oe?zt(ce,typeof R?.linkDeviceId==`number`?R.linkDeviceId:null,typeof R?.primaryChildEntityId==`string`?R.primaryChildEntityId:null)?.id??null:null,[oe,ce,R?.linkDeviceId,R?.primaryChildEntityId]),{data:fe}=an({deviceId:W??0},{enabled:W!==null}),pe=n(()=>{if(W===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:Oe[e]?.label??e,isAddonContrib:!0,childDeviceId:W}))},[W,fe]),me=n(()=>Ca({sections:[...I?.settings?.sections??[],...I?.live?.sections??[]],deviceId:u,...W===null?{}:{child:{sections:[...fe?.settings?.sections??[],...fe?.live?.sections??[]],deviceId:W}}}),[I,fe,u,W]),he=typeof R?.parentDeviceId==`number`?R.parentDeviceId:null,{data:ge}=Dn({deviceId:he??0},{enabled:he!==null}),_e=Ft(),ve=R?.disabled!==!0,ye=n(()=>{let e=I?.settings?.sections??[],t=I?.live?.sections??[];return ri([...e,...t],V,x,I!==void 0)},[I,V,x]),be=n(()=>{let e=new Set,t=[];for(let n of[...bd(V,x),...L,...pe])n.id===`config`&&!ye||e.has(n.id)||(e.add(n.id),t.push(n));return t},[V,x,L,pe,ye]),xe=n(()=>uu(be,w),[be,w]),Se=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 Si)n.delete(e);return n},{replace:!0})},[C]),Ce=i(e=>{C(t=>{let n=new URLSearchParams(t);return n.set(`sub`,e),n},{replace:!0})},[C]),we=(ae??[]).length>0,Te=n(()=>Sd.filter(({featureGate:e})=>!e||ie.includes(e)),[ie]),{data:Ee}=wn(void 0),De=n(()=>R?ir(R,Ee):null,[R,Ee]),G=De?.kind===`resolved`?De.integration:null,ke=G===null?De?.kind===`unknown`?e(`deviceDetail.loadingIntegration`):De?.kind===`orphan`?e(`deviceDetail.missingIntegration`):e(`deviceDetail.noIntegration`):G.name,Ae=G!==null&&G.addonId===B?G.name:B,je=Mr({onSuccess:()=>{m.invalidateQueries({queryKey:[[`deviceManager`]]}),p(G?.id?`/integrations/${G.id}`:`/integrations`)}}),Me=_r({onSuccess:()=>{m.invalidateQueries({queryKey:[[`deviceManager`]]})}}),Ne=It({onSuccess:()=>{m.invalidateQueries({queryKey:[[`deviceManager`]]})}}),Pe=Yn(),Fe=Gn({onSuccess:()=>{m.invalidateQueries({queryKey:[[`deviceManager`]]})}}),Ie=ie.includes(it.Rebootable),Le=ie.includes(it.BatteryOperated),Re=Vt(v.trpcClient,Le&&f?u:null),ze=At(v.trpcClient,f?u:null),Be=se(v.trpcClient,f?u:null,e=>e.runningState),Ve=Be===void 0||Be.running===null?null:Be.running,He=on(V??`unknown`,t).icon,[Ue,We]=r(!1),Ge=async()=>{if(!Ue){We(!0);try{let e=z.replace(/[^a-zA-Z0-9_.-]+/g,`_`),t=new Date().toISOString().replace(/[:.]/g,`-`);await Bi(`${P}/${String(u)}.jpg?force=1`,`${e}-${t}.jpg`)}finally{We(!1)}}},Ke=Me.isPending||Ne.isPending,{data:qe}=Et({deviceId:u},{enabled:f&&H,refetchInterval:1e4}),Je=qe?.agentNodeId??null,Ye=typeof Je==`string`&&Je.length>0&&!Je.startsWith(`addon:`)?Je:void 0,{data:Xe}=zn({deviceId:u,...Ye?{nodeId:Ye}:{}},{enabled:f&&H,refetchInterval:3e3,retry:!1}),{data:Ze}=qt({deviceId:u},{enabled:f&&H,refetchInterval:3e3,retry:!1}),Qe=Ze?.level?.dbfs??null;function $e(){if(!f)return null;switch(xe){case`overview`:return d(hd,{device:R??{}});case`config`:return d(hu,{deviceId:u,activeSubTab:T,onSubTabChange:Ce,deviceType:V,isAdmin:x});case`detection-pipeline`:return d($u,{deviceId:u,activeSubTab:T,onSubTabChange:Ce});case`bindings`:return d(du,{deviceId:u});case _d:return d(ar,{deviceId:u,onNavigate:e=>p(e)});case li:return d(au,{deviceId:u});default:{let e=xe,t=L.some(t=>t.id===e),n=pe.find(t=>t.id===e);if(!t&&n===void 0)return null;let r=n?.childDeviceId??u;if(e===`export`)return d(Yr,{deviceId:u,sectionFilter:Jr,activeSubTab:T,onSubTabChange:Ce});let i=d(Yr,{deviceId:r,sectionFilter:t=>t.location===`top-tab`&&(t.tab===e||e===`detection-pipeline`&&t.tab===`zones`),flattenSubTabs:e===`detection-pipeline`,activeSubTab:T,onSubTabChange:Ce});return n!==void 0&&r!==u?d(tn,{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(Zr,{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(Vr,{items:[{label:e(`deviceDetail.integrations`,`Integrations`),onClick:()=>p(`/integrations`)},G===null?{label:ke}:{label:ke,onClick:()=>p(`/integrations/${G.id}`)},{label:z}]})}),a(`div`,{className:`flex items-center gap-2 sm:gap-3`,children:[G!==null&&d(xd,{provider:G.addonId,integrationId:G.id,name:G.name}),d(pn,{running:Ve,children:d(He,{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:z}),d(Sr,{status:re}),Le&&d(Ct,{status:Re,variant:`full`}),d(Lr,{status:ze})]}),he!==null&&ge&&a(`button`,{type:`button`,onClick:()=>p(`/devices/${he}`),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:ge.name}),children:[d(`span`,{children:`↑`}),d(`span`,{className:`truncate`,children:String(ge.name??`Device #${he}`)})]}),d(`div`,{className:`hidden md:flex items-center gap-3 mt-0.5 text-[10px] text-foreground-subtle`,children:ie.length>0&&d(pi,{capabilities:ie})})]}),Xe&&d(`div`,{className:`hidden lg:flex`,children:d(wd,{metrics:Xe,dbfs:Qe})}),a(`div`,{className:`flex items-center gap-1 shrink-0`,children:[a(`button`,{onClick:async()=>{ve?await _({title:e(`deviceDetail.disable`,`Disable "{{name}}"?`,{name:z}),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`})&&Ne.mutate({deviceId:u}):Me.mutate({deviceId:u})},disabled:Ke,title:ve?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 ${ve?`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:Ke?e(`deviceDetail.updating`,`Updating…`):ve?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(qi,{deviceId:u}),d(`div`,{className:`hidden sm:block h-5 w-px bg-border mx-1`})]}),d(Yi,{deviceId:u}),d(An,{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:Ue,onClick:()=>{Ge()}},{id:`reboot`,label:e(`deviceDetail.rebootDevice`,`Reboot device`),description:e(`deviceDetail.cameraGoesOfflineFor30`,`Camera goes offline for ~30 seconds.`),icon:de,hidden:!Ie,disabled:Pe.isPending,danger:!0,onClick:async()=>{await _({title:e(`deviceDetail.reboot`,`Reboot "{{name}}"?`,{name:z}),message:e(`deviceDetail.theCameraWillGoOffline`,`The camera will go offline for around 30 seconds while the firmware reboots.`),confirmLabel:e(`deviceDetail.reboot2`,`Reboot`),variant:`danger`})&&Pe.mutate({deviceId:u})}},{id:`restart-addon`,label:e(`deviceDetail.restartAddon`,`Restart addon`),description:e(`deviceDetail.bouncesEveryDeviceServedBy`,`Bounces every device served by {{servingAddonLabel}}.`,{servingAddonLabel:Ae}),icon:te,disabled:Fe.isPending,danger:!0,onClick:async()=>{await _({title:e(`deviceDetail.restart`,`Restart "{{servingAddonLabel}}"?`,{servingAddonLabel:Ae}),message:e(`deviceDetail.restartingTheAddonWillBriefly`,`Restarting the addon will briefly disconnect every device served by it (not just "{{name}}"). Streams will reconnect automatically.`,{name:z}),confirmLabel:e(`deviceDetail.restart2`,`Restart`),variant:`danger`})&&Fe.mutate({addonId:B})}},{id:`delete`,label:e(`deviceDetail.deleteDevice`,`Delete device`),description:e(`deviceDetail.removeTheDeviceAndAll`,`Remove the device and all its settings.`),icon:y,separatorBefore:!0,disabled:je.isPending,danger:!0,onClick:async()=>{await _({title:e(`deviceDetail.delete`,`Delete "{{name}}"?`,{name:z}),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`})&&je.mutate({deviceId:u})}}]})]})]})]}),d(tn,{deviceId:u,device:R??void 0,children:d(Wn,{children:d(sr,{children:d(ue,{children:d(Ln,{children:a(`main`,{className:_e?`flex-1 overflow-y-auto flex flex-col`:`flex-1 min-h-0 overflow-hidden flex flex-row`,children:[a(`div`,{className:_e?`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:!_e&&k!==null?{width:`${String(k)}px`}:void 0,children:[d(`div`,{className:H?`flex-shrink-0 border-b border-border-subtle bg-black`:_e?`flex-shrink-0 border-b border-border-subtle bg-surface`:`shrink-0 border-b border-border-subtle bg-surface`,children:H?d(Na,{deviceId:u,intercomAvailable:ie.includes(it.TwoWayAudio)}):a(`div`,{children:[d(ba,{deviceId:u,deviceName:z,deviceType:V??`unknown`,provider:B,isOnline:ne,features:ie}),d(xa,{deviceId:u,widgets:me})]})}),H&&me.length>0&&d(`div`,{className:`flex-shrink-0 border-b border-border-subtle bg-surface pt-3 sm:pt-4`,children:d(xa,{deviceId:u,widgets:me})}),a(`div`,{className:_e?`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:Te.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:_e?`h-72 overflow-hidden`:`flex-1 min-h-0 overflow-hidden`,children:[E===`logs`&&d(Pa,{deviceId:u,containerDeviceId:V===`container`?u:void 0}),E===`repl`&&d(Fa,{deviceId:u}),E===`events`&&d(Ia,{deviceId:u}),E===`state`&&d(La,{deviceId:u})]})]})]}),!_e&&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:_e?`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:be.map(e=>{let t=xe===e.id;return a(`button`,{onClick:()=>Se(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:_e?`p-3 flex flex-col gap-3`:`flex-1 min-h-0 overflow-y-auto p-4 flex flex-col gap-3`,children:[xe===`overview`&&we&&d(Xi,{parentDeviceId:u}),$e()]})]})]})})})})})})]}):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(Zr,{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 wd({metrics:e,dbfs:t}){let n=le(),{t:r}=Z(),i=Mn(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(W,{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{Cd as DeviceDetailPage};
@@ -1 +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};
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-D5ZBZ0eM.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-CJZuPHbz.js";import{L as m}from"./src-El9yRQEE.js";import{t as h}from"./i18n-CvoV4ITH.js";import{t as g}from"./useTranslation-D3Is_4B6.js";import"./index-DgzFfJ-E.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};
@@ -1 +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
+ 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-D5ZBZ0eM.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-El9yRQEE.js";import{t as _}from"./useTranslation-D3Is_4B6.js";import{lr as v,mr as y}from"./index-DgzFfJ-E.js";import{t as b}from"./AdminPage-Bly6H-Ei.js";import"./useEventInvalidation-BHInrZJO.js";import{t as x}from"./device-integration-icon-CLpD5eef.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=y(),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(v,{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-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};
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-D5ZBZ0eM.js";import{Ji as l}from"./client-CJZuPHbz.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-El9yRQEE.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};