@camstack/addon-admin-ui 1.2.473 → 1.2.474

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 (130) hide show
  1. package/dist/assets/{AddonAssetIcon-DmwaRNVP.js → AddonAssetIcon-DNTjc2uq.js} +1 -1
  2. package/dist/assets/Addons-CPaW6tLw.js +4 -0
  3. package/dist/assets/{AdminPage-B-1YjUaD.js → AdminPage-B4QlIiKh.js} +1 -1
  4. package/dist/assets/{AdminSectionedPage-DCas2jUy.js → AdminSectionedPage-BIoU14zn.js} +1 -1
  5. package/dist/assets/AiProfiles-FpbSg3kP.js +3 -0
  6. package/dist/assets/{BrokerForm-x5UJk9ci.js → BrokerForm-CU4X3nL7.js} +1 -1
  7. package/dist/assets/Build-C2qKCizt.js +40 -0
  8. package/dist/assets/Calendars-BRTmlFIt.js +1 -0
  9. package/dist/assets/{Cluster-DaFXU71S.js → Cluster-BvxOiIZ7.js} +1 -1
  10. package/dist/assets/CompositionCreateForm-DCUy3waQ.js +1 -0
  11. package/dist/assets/{CompositionEditorPage-B_ERZESY.js → CompositionEditorPage-syg6YTJF.js} +1 -1
  12. package/dist/assets/Data-VG64mGmK.js +2 -0
  13. package/dist/assets/DeviceDetail-tZevLHDV.js +2 -0
  14. package/dist/assets/{DeviceDoActionFields-BETAvCYe.js → DeviceDoActionFields-BmEM1vFn.js} +1 -1
  15. package/dist/assets/{Devices-C1DTPVnZ.js → Devices-B-b5cUYn.js} +1 -1
  16. package/dist/assets/{EmbedPlayerPage-Bw6TIHbX.js → EmbedPlayerPage-CI3OOtRg.js} +1 -1
  17. package/dist/assets/HelperWizard-4637ctxc.js +2 -0
  18. package/dist/assets/History-BJcol9mz.js +1 -0
  19. package/dist/assets/Identity-CjEfAbi1.js +1 -0
  20. package/dist/assets/IntegrationDetail-DLncDXox.js +1 -0
  21. package/dist/assets/{IntegrationHub-DahW4X5K.js → IntegrationHub-B1soAFk9.js} +1 -1
  22. package/dist/assets/Integrations-DtQc1eDp.js +1 -0
  23. package/dist/assets/Integrations-xxkUIJ67.js +1 -0
  24. package/dist/assets/{Library-gaMbp-Fr.js → Library-DbHcY62a.js} +1 -1
  25. package/dist/assets/Locations-CfYQkG2R.js +3 -0
  26. package/dist/assets/{Logs-CtH4NMql.js → Logs-CMYLVX21.js} +1 -1
  27. package/dist/assets/{MaskShapeCanvas-Byp9XgNC.js → MaskShapeCanvas-BnMDm4ev.js} +1 -1
  28. package/dist/assets/{MotionZonesSettings-C35beRsS.js → MotionZonesSettings-DKqDt4OB.js} +1 -1
  29. package/dist/assets/{MyAccess-Dj5hcaLN.js → MyAccess-CjUd-G8J.js} +1 -1
  30. package/dist/assets/{Network-D-v-cA54.js → Network-Dudx2Fcg.js} +1 -1
  31. package/dist/assets/{NodeAddonsSettingsPanel-CW_M8Xge.js → NodeAddonsSettingsPanel-9_q0f4bE.js} +1 -1
  32. package/dist/assets/Notifications-DE5Wtais.js +1 -0
  33. package/dist/assets/{Pipeline-C85hColk.js → Pipeline-r8TFI-Fa.js} +1 -1
  34. package/dist/assets/{PrivacyMaskSettings-SPaH91xV.js → PrivacyMaskSettings-DZ2mewnu.js} +1 -1
  35. package/dist/assets/Recordings-BrpMcrZw.js +1 -0
  36. package/dist/assets/{ScanNetworkModal-ClvLQ-ol.js → ScanNetworkModal-DhahS87x.js} +1 -1
  37. package/dist/assets/{SceneMonitorEditor-BvqnlZ2i.js → SceneMonitorEditor-CH7F9rZo.js} +1 -1
  38. package/dist/assets/SessionsList-BbD9LSdf.js +2 -0
  39. package/dist/assets/{Showroom-jPZcBd6K.js → Showroom-BX1LrKmF.js} +1 -1
  40. package/dist/assets/{System-B5Ny1ozj.js → System-CvErxLx3.js} +1 -1
  41. package/dist/assets/{Terminal-DYLSrpsL.js → Terminal-COEKXIAj.js} +3 -3
  42. package/dist/assets/{Viewer-GqkHpMmf.js → Viewer-BW9JCbu_.js} +1 -1
  43. package/dist/assets/{_virtual_mf-localSharedImportMap___mfe_internal__admin_ui_host-BlUFdak1.js → _virtual_mf-localSharedImportMap___mfe_internal__admin_ui_host-B4AOEb1R.js} +1 -1
  44. package/dist/assets/{addon-icons-context-BUi2hqSA.js → addon-icons-context-Bus8wGvh.js} +1 -1
  45. package/dist/assets/{archive-Bs9ToeWK.js → archive-BTmhmQQp.js} +1 -1
  46. package/dist/assets/{assignment-candidates-e6s6JtrJ.js → assignment-candidates-C4DL_rSh.js} +1 -1
  47. package/dist/assets/{authed-media-BWhmwHt2.js → authed-media-C8FW8mvx.js} +1 -1
  48. package/dist/assets/{bell-off-CosUv2Rj.js → bell-off-DsAerV0u.js} +1 -1
  49. package/dist/assets/{board-model-BtdRuNBI.js → board-model-CnpzmN9f.js} +1 -1
  50. package/dist/assets/{boxes-CA7Sh4JV.js → boxes-DT6bkxUA.js} +1 -1
  51. package/dist/assets/circle-slash-BFwh1Zbg.js +1 -0
  52. package/dist/assets/{client-DIBstlq5.js → client-BbPYrWg7.js} +14 -14
  53. package/dist/assets/{cloud-upload-olZ1M2tJ.js → cloud-upload-iGrXLaxX.js} +1 -1
  54. package/dist/assets/crop-FX76GBoF.js +1 -0
  55. package/dist/assets/{device-integration-icon-656UPgnE.js → device-integration-icon-XVdZ9pIS.js} +1 -1
  56. package/dist/assets/device-picker-model-B5MjkWnS.js +1 -0
  57. package/dist/assets/{dist-G4Cxki3p.js → dist-Bd_kB5yG.js} +1 -1
  58. package/dist/assets/{eraser-CABcfjb2.js → eraser-L4lKjV-e.js} +1 -1
  59. package/dist/assets/{format-BYDOzxSv.js → format-BTMQLjGl.js} +1 -1
  60. package/dist/assets/{hard-drive-download-ClcxzAVo.js → hard-drive-download-cfcxCkzE.js} +1 -1
  61. package/dist/assets/{hostInit-DXWqqcl-.js → hostInit-BBq0iCeL.js} +1 -1
  62. package/dist/assets/{i18n-D3CF2V_j.js → i18n-BO6gCPcC.js} +1 -1
  63. package/dist/assets/{icons-BmpL14Dq.js → icons-Cv_Dcjty.js} +1 -1
  64. package/dist/assets/{index-Cskol4XA.js → index-C8XwyZGE.js} +3 -3
  65. package/dist/assets/{key-CURebvKJ.js → key-e3_N15fG.js} +1 -1
  66. package/dist/assets/{key-round-BTmR8Ca5.js → key-round-x0Ig1rd2.js} +1 -1
  67. package/dist/assets/{layers-BCzFIxnd.js → layers-T4HoHbdn.js} +1 -1
  68. package/dist/assets/{linked-devices-model-Uzvgx-iv.js → linked-devices-model-CObOrxIk.js} +1 -1
  69. package/dist/assets/{list-ordered-BpmnL-Ze.js → list-ordered-I4dBVzRf.js} +1 -1
  70. package/dist/assets/{location-owned-usage-ChLz8liX.js → location-owned-usage-D17U3uzz.js} +1 -1
  71. package/dist/assets/{log-in-hW2oGppQ.js → log-in-B1D0wNrs.js} +1 -1
  72. package/dist/assets/{memory-stick-DJEnjf6G.js → memory-stick-DYS3v1CU.js} +1 -1
  73. package/dist/assets/{message-square-plus-CZ2oQ3Vr.js → message-square-plus-D64e2l9L.js} +1 -1
  74. package/dist/assets/{mf-entry-bootstrap-0-0c9682e8.js → mf-entry-bootstrap-0-c6a36508.js} +2 -2
  75. package/dist/assets/{mic-off-KFKpp3gz.js → mic-off-hTqpFTxe.js} +1 -1
  76. package/dist/assets/{monitor-off-Cn5TAK6N.js → monitor-off-Bj-JQM7b.js} +1 -1
  77. package/dist/assets/{monitor-smartphone-Jvu4UJGi.js → monitor-smartphone-CyTSF3mW.js} +1 -1
  78. package/dist/assets/mount-B5MjkWnS.js +1 -0
  79. package/dist/assets/{player-overlays-B_ZfVBiA.js → player-overlays-CvKnZb5M.js} +1 -1
  80. package/dist/assets/{recycle-BDm5DJUQ.js → recycle-BLx8Nd-6.js} +1 -1
  81. package/dist/assets/remoteEntry-DBUvkI6n.js +1 -0
  82. package/dist/assets/{scan-eye-C7MTwcP4.js → scan-eye-CrOhuNWQ.js} +1 -1
  83. package/dist/assets/{scissors-BQnPBcjw.js → scissors-C6HYvaxr.js} +1 -1
  84. package/dist/assets/{search-x-DEyDFvNT.js → search-x-C8eiZDQW.js} +1 -1
  85. package/dist/assets/{send-B3qo7thK.js → send-CNzJmniJ.js} +1 -1
  86. package/dist/assets/{settings-2-C0X8oPpn.js → settings-2-Ccb0AMXU.js} +1 -1
  87. package/dist/assets/{speaker-pcRBhz9y.js → speaker-BsE4hqmg.js} +1 -1
  88. package/dist/assets/src-DKc14e9G.js +67 -0
  89. package/dist/assets/step-inspector-model-BeIQx3rW.js +1 -0
  90. package/dist/assets/{timer-reset-CCky8ePa.js → timer-reset-Tun-zcxs.js} +1 -1
  91. package/dist/assets/{ungroup-iaoDNnXe.js → ungroup-BdxY8QDj.js} +1 -1
  92. package/dist/assets/{unlink-8OutaYJL.js → unlink-BVODHZoC.js} +1 -1
  93. package/dist/assets/{usb-DL2I9kcC.js → usb-i2JzfEjl.js} +1 -1
  94. package/dist/assets/{use-scenes-feed-4lpCQaI1.js → use-scenes-feed-CUQxwk-v.js} +1 -1
  95. package/dist/assets/{use-stationary-objects-P_tT9TQq.js → use-stationary-objects-Cqmb4Ymg.js} +1 -1
  96. package/dist/assets/useEventInvalidation-B5MjkWnS.js +1 -0
  97. package/dist/assets/{useNodeUrlSelection-CiraZrDp.js → useNodeUrlSelection-rnUQLTfb.js} +1 -1
  98. package/dist/assets/user-round-BkFCDGbj.js +1 -0
  99. package/dist/assets/{user-x-DYn__Nok.js → user-x-CIq05NC_.js} +1 -1
  100. package/dist/assets/{video-BcVXMTle.js → video-CJw8Jnle.js} +1 -1
  101. package/dist/assets/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__admin_ui_host__remoteEntry-_hash_-CXWzeD1i.js → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__admin_ui_host__remoteEntry-_hash_-BWKP-Fxc.js} +2 -2
  102. package/dist/index.html +9 -9
  103. package/dist/server/addon.js +1 -1
  104. package/package.json +1 -1
  105. package/dist/assets/Addons-Ch5dCeth.js +0 -4
  106. package/dist/assets/AiProfiles-ChvfjsXv.js +0 -3
  107. package/dist/assets/Build-CUVwS9XA.js +0 -40
  108. package/dist/assets/Calendars-BMLzvBb6.js +0 -1
  109. package/dist/assets/CompositionCreateForm-BxelZLtf.js +0 -1
  110. package/dist/assets/Data-CMHfgMXt.js +0 -2
  111. package/dist/assets/DeviceDetail-CAtDRoZZ.js +0 -2
  112. package/dist/assets/History-BXTYUTxj.js +0 -1
  113. package/dist/assets/Identity-DTOixhZS.js +0 -1
  114. package/dist/assets/IntegrationDetail-CnINeomo.js +0 -1
  115. package/dist/assets/Integrations-Dex6zRMx.js +0 -1
  116. package/dist/assets/Integrations-HN2iCOqd.js +0 -1
  117. package/dist/assets/Locations-haT1EJbm.js +0 -3
  118. package/dist/assets/Notifications-r5w4Ne2O.js +0 -1
  119. package/dist/assets/Recordings-ZYwRaSrC.js +0 -1
  120. package/dist/assets/SessionsList-BCDysQfs.js +0 -2
  121. package/dist/assets/circle-slash-0Ca1BMK0.js +0 -1
  122. package/dist/assets/crop-BZM3UFyT.js +0 -1
  123. package/dist/assets/device-picker-model-yjEyEWyS.js +0 -1
  124. package/dist/assets/event-targets-CHOtaC2B.js +0 -2
  125. package/dist/assets/mount-yjEyEWyS.js +0 -1
  126. package/dist/assets/remoteEntry-7WZh94sn.js +0 -1
  127. package/dist/assets/src-BVr0SnD-.js +0 -67
  128. package/dist/assets/step-inspector-model-DjRSZkVO.js +0 -1
  129. package/dist/assets/useEventInvalidation-yjEyEWyS.js +0 -1
  130. package/dist/assets/user-round-4ZziAKb6.js +0 -1
@@ -1,4 +1,4 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./Devices-C1DTPVnZ.js","./src-BVr0SnD-.js","./player-overlays-B_ZfVBiA.js","./client-DIBstlq5.js","./__vite-browser-external-BlMfPwfH.js","./useTranslation-D3Is_4B6.js","./AdminPage-B-1YjUaD.js","./device-integration-icon-656UPgnE.js","./useEventInvalidation-yjEyEWyS.js","./Integrations-Dex6zRMx.js","./i18n-D3CF2V_j.js","./ScanNetworkModal-ClvLQ-ol.js","./BrokerForm-x5UJk9ci.js","./mount-yjEyEWyS.js","./IntegrationDetail-CnINeomo.js","./search-x-DEyDFvNT.js","./NodeAddonsSettingsPanel-CW_M8Xge.js","./addon-icons-context-BUi2hqSA.js","./Pipeline-C85hColk.js","./video-BcVXMTle.js","./usb-DL2I9kcC.js","./crop-BZM3UFyT.js","./layers-BCzFIxnd.js","./step-inspector-model-DjRSZkVO.js","./board-model-BtdRuNBI.js","./DeviceDetail-CAtDRoZZ.js","./archive-Bs9ToeWK.js","./scan-eye-C7MTwcP4.js","./bell-off-CosUv2Rj.js","./boxes-CA7Sh4JV.js","./circle-slash-0Ca1BMK0.js","./event-targets-CHOtaC2B.js","./assignment-candidates-e6s6JtrJ.js","./device-picker-model-yjEyEWyS.js","./use-stationary-objects-P_tT9TQq.js","./linked-devices-model-Uzvgx-iv.js","./format-BYDOzxSv.js","./authed-media-BWhmwHt2.js","./Showroom-jPZcBd6K.js","./EmbedPlayerPage-Bw6TIHbX.js","./Library-gaMbp-Fr.js","./user-x-DYn__Nok.js","./user-round-4ZziAKb6.js","./AdminSectionedPage-DCas2jUy.js","./use-scenes-feed-4lpCQaI1.js","./Recordings-ZYwRaSrC.js","./scissors-BQnPBcjw.js","./location-owned-usage-ChLz8liX.js","./eraser-CABcfjb2.js","./hard-drive-download-ClcxzAVo.js","./format-size-DIxKXxtj.js","./Viewer-GqkHpMmf.js","./monitor-off-Cn5TAK6N.js","./Build-CUVwS9XA.js","./ungroup-iaoDNnXe.js","./CompositionCreateForm-BxelZLtf.js","./DeviceDoActionFields-BETAvCYe.js","./CompositionEditorPage-B_ERZESY.js","./Locations-haT1EJbm.js","./speaker-pcRBhz9y.js","./Addons-Ch5dCeth.js","./useNodeUrlSelection-CiraZrDp.js","./AiProfiles-ChvfjsXv.js","./send-B3qo7thK.js","./message-square-plus-CZ2oQ3Vr.js","./MyAccess-Dj5hcaLN.js","./key-round-BTmR8Ca5.js","./monitor-smartphone-Jvu4UJGi.js","./unlink-8OutaYJL.js","./SessionsList-BCDysQfs.js","./Logs-CtH4NMql.js","./timer-reset-CCky8ePa.js","./IntegrationHub-DahW4X5K.js","./settings-2-C0X8oPpn.js","./AddonAssetIcon-DmwaRNVP.js","./addon-display-names-BkwMrExv.js","./Identity-DTOixhZS.js","./key-CURebvKJ.js","./Network-D-v-cA54.js","./log-in-hW2oGppQ.js","./Integrations-HN2iCOqd.js","./recycle-BDm5DJUQ.js","./Data-CMHfgMXt.js","./cloud-upload-olZ1M2tJ.js","./System-B5Ny1ozj.js","./Cluster-DaFXU71S.js","./memory-stick-DJEnjf6G.js","./Terminal-DYLSrpsL.js","./Terminal-kHJ-D0s7.css","./Notifications-r5w4Ne2O.js","./list-ordered-BpmnL-Ze.js","./History-BXTYUTxj.js","./Calendars-BMLzvBb6.js"])))=>i.map(i=>d[i]);
2
- import{a as e,t}from"./rolldown-runtime-Cyuzqnbw.js";import"./virtual_mf-exposes___mfe_internal__admin_ui_host__remoteEntry-_hash_-DnnXQRkG.js";import{a as n,o as r}from"./virtual_mf-REMOTE_ENTRY_ID___mfe_internal__admin_ui_host__remoteEntry-_hash_-CXWzeD1i.js";import{t as i}from"./vite-preload-helper-kNaey6uv.js";import{$ as a,A as o,B as s,D as c,E as l,F as u,G as d,J as f,L as p,M as m,N as h,O as g,P as _,R as v,S as y,V as b,W as x,X as S,Y as C,Z as w,a as T,b as E,d as D,i as O,j as k,k as A,o as j,q as M,u as N,x as P}from"./_virtual_mf___mfe_internal__admin_ui_host__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-CEHpkaJP.js";import{$t as F,Br as I,Ci as ee,Di as L,Dr as te,Er as ne,Fr as re,It as ie,Jr as ae,Kn as oe,Kt as R,Li as se,Mi as ce,Nt as le,On as ue,Or as de,Q as z,Qn as fe,Rr as pe,Si as me,T as he,Tn as ge,Ui as _e,Xi as ve,Xn as ye,Xr as be,Z as xe,Zt as Se,_t as Ce,an as we,bi as Te,bn as Ee,dn as De,dt as Oe,fi as ke,fn as Ae,ft as je,hi as Me,ht as Ne,it as Pe,ji as Fe,kn as Ie,mr as Le,or as Re,ot as ze,pi as Be,pn as Ve,ra as He,rr as Ue,rt as We,si as Ge,sn as Ke,ta as qe,tr as Je,un as Ye,ut as Xe,vr as Ze,wr as Qe,xn as $e,yi as et,zn as tt,zr as nt}from"./player-overlays-B_ZfVBiA.js";import{A as rt,At as it,Bt as at,Ct as ot,Dt as st,Ei as ct,Et as lt,F as ut,Fr as dt,Ft as ft,G as pt,Ht as mt,I as ht,Ii as gt,It as _t,Kn as vt,L as yt,Lt as bt,M as xt,N as St,Nt as Ct,Pt as wt,Rt as Tt,St as Et,T as Dt,Vt as Ot,W as kt,_r as At,a as jt,bt as Mt,ct as Nt,dt as Pt,ft as Ft,gr as It,ht as Lt,i as Rt,ia as zt,j as Bt,k as Vt,ki as Ht,kt as Ut,lt as Wt,mt as Gt,n as Kt,pt as qt,t as Jt,ut as Yt,vt as Xt,wt as Zt,yt as Qt,zt as $t}from"./client-DIBstlq5.js";import{a as en,c as tn,d as nn,f as rn,h as an,i as on,l as sn,m as cn,n as ln,o as un,p as dn,r as fn,s as pn,t as mn,u as hn}from"./video-BcVXMTle.js";import{Ao as gn,At as _n,Bo as vn,Br as yn,Ci as bn,Du as xn,Eo as Sn,Fi as Cn,Fr as wn,Gr as Tn,Gu as En,Hr as Dn,Ht as On,Ii as kn,Io as An,Ir as jn,It as Mn,Jo as Nn,Jr as Pn,L as Fn,Li as In,Ln,Lo as Rn,Lr as zn,Mo as Bn,Nr as Vn,Or as Hn,Pr as Un,Ri as Wn,Rr as Gn,Sl as Kn,Ss as qn,To as Jn,Tr as Yn,Wr as Xn,Wt as Zn,Wu as Qn,Xu as B,Zu as $n,_r as er,ad as tr,ai as nr,an as rr,ao as ir,au as ar,bl as or,cr as sr,dd as cr,dn as lr,dr as ur,fr as dr,gd as fr,gi as pr,gr as mr,gt as hr,hd as gr,hr as _r,in as vr,iu as yr,jo as br,l as xr,ld as Sr,ln as Cr,lo as wr,mr as Tr,n as Er,nd as Dr,nn as Or,no as kr,nr as Ar,od as jr,on as Mr,oo as Nr,p as Pr,pr as Fr,qr as Ir,rd as Lr,rn as Rr,ro as zr,sn as Br,sr as Vr,ss as Hr,ui as Ur,ur as Wr,uu as Gr,wo as Kr,xt as qr,y as Jr,zi as Yr,zr as Xr,zt as Zr}from"./src-BVr0SnD-.js";import{r as Qr,t as $r}from"./_virtual_mf___mfe_internal__admin_ui_host__loadShare__react_mf_2_dom__loadShare__.js-DPkvGqVU.js";import{t as ei}from"./_virtual_mf___mfe_internal__admin_ui_host__loadShare__react_mf_2_dom_mf_1_client__loadShare__.js-Cb2QlpvS.js";import{n as ti,t as V}from"./i18n-D3CF2V_j.js";import{a as ni,c as ri,i as ii,l as ai,n as oi,o as si,s as ci,t as H,u as li}from"./useTranslation-D3Is_4B6.js";import"./mount-yjEyEWyS.js";import{n as ui,t as di}from"./addon-icons-context-BUi2hqSA.js";(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})(),a();var fi=/^(?:[a-z][a-z0-9+.-]*:|[\\/]{2})/i,pi=/^[\\/]{2}/;function mi(e,t){return t+e.replace(/\\/g,`/`)}var hi=`popstate`;function gi(e){return typeof e==`object`&&!!e&&`pathname`in e&&`search`in e&&`hash`in e&&`state`in e&&`key`in e}function _i(e={}){function t(e,t){let n=t.state?.masked,{pathname:r,search:i,hash:a}=n||e.location;return bi(``,{pathname:r,search:i,hash:a},t.state&&t.state.usr||null,t.state&&t.state.key||`default`,n?{pathname:e.location.pathname,search:e.location.search,hash:e.location.hash}:void 0)}function n(e,t){return typeof t==`string`?t:xi(t)}return Ci(t,n,null,e)}function U(e,t){if(e===!1||e==null)throw Error(t)}function W(e,t){if(!e){typeof console<`u`&&console.warn(t);try{throw Error(t)}catch{}}}function vi(){return Math.random().toString(36).substring(2,10)}function yi(e,t){return{usr:e.state,key:e.key,idx:t,masked:e.mask?{pathname:e.pathname,search:e.search,hash:e.hash}:void 0}}function bi(e,t,n=null,r,i){return{pathname:typeof e==`string`?e:e.pathname,search:``,hash:``,...typeof t==`string`?Si(t):t,state:n,key:t&&t.key||r||vi(),mask:i}}function xi({pathname:e=`/`,search:t=``,hash:n=``}){return t&&t!==`?`&&(e+=t.charAt(0)===`?`?t:`?`+t),n&&n!==`#`&&(e+=n.charAt(0)===`#`?n:`#`+n),e}function Si(e){let t={};if(e){let n=e.indexOf(`#`);n>=0&&(t.hash=e.substring(n),e=e.substring(0,n));let r=e.indexOf(`?`);r>=0&&(t.search=e.substring(r),e=e.substring(0,r)),e&&(t.pathname=e)}return t}function Ci(e,t,n,r={}){let{window:i=document.defaultView,v5Compat:a=!1}=r,o=i.history,s=`POP`,c=null,l=u();l??(l=0,o.replaceState({...o.state,idx:l},``));function u(){return(o.state||{idx:null}).idx}function d(){s=`POP`;let e=u(),t=e==null?null:e-l;l=e,c&&c({action:s,location:h.location,delta:t})}function f(e,t){s=`PUSH`;let r=gi(e)?e:bi(h.location,e,t);n&&n(r,e),l=u()+1;let d=yi(r,l),f=h.createHref(r.mask||r);try{o.pushState(d,``,f)}catch(e){if(e instanceof DOMException&&e.name===`DataCloneError`)throw e;i.location.assign(f)}a&&c&&c({action:s,location:h.location,delta:1})}function p(e,t){s=`REPLACE`;let r=gi(e)?e:bi(h.location,e,t);n&&n(r,e),l=u();let i=yi(r,l),d=h.createHref(r.mask||r);o.replaceState(i,``,d),a&&c&&c({action:s,location:h.location,delta:0})}function m(e){return wi(i,e)}let h={get action(){return s},get location(){return e(i,o)},listen(e){if(c)throw Error(`A history only accepts one active listener`);return i.addEventListener(hi,d),c=e,()=>{i.removeEventListener(hi,d),c=null}},createHref(e){return t(i,e)},createURL:m,encodeLocation(e){let t=m(e);return{pathname:t.pathname,search:t.search,hash:t.hash}},push:f,replace:p,go(e){return o.go(e)}};return h}function wi(e,t,n=!1){let r=`http://localhost`;e&&(r=e.location.origin===`null`?e.location.href:e.location.origin),U(r,`No window.location.(origin|href) available to create URL`);let i=typeof t==`string`?t:xi(t);return i=i.replace(/ $/,`%20`),!n&&pi.test(i)&&(i=r+i),new URL(i,r)}function Ti(e,t,n=`/`){return Ei(e,t,n,!1)}function Ei(e,t,n,r,i){let a=Ki((typeof t==`string`?Si(t):t).pathname||`/`,n);if(a==null)return null;let o=i??Oi(e),s=null,c=Gi(a);for(let e=0;s==null&&e<o.length;++e)s=Vi(o[e],c,r);return s}function Di(e,t){let{route:n,pathname:r,params:i}=e;return{id:n.id,pathname:r,params:i,data:t[n.id],loaderData:t[n.id],handle:n.handle}}function Oi(e){let t=ki(e);return ji(t),t}function ki(e,t=[],n=[],r=``,i=!1){let a=(e,a,o=i,s)=>{let c={relativePath:s===void 0?e.path||``:s,caseSensitive:e.caseSensitive===!0,childrenIndex:a,route:e};if(c.relativePath.startsWith(`/`)){if(!c.relativePath.startsWith(r)&&o)return;U(c.relativePath.startsWith(r),`Absolute route path "${c.relativePath}" nested under path "${r}" is not valid. An absolute child route path must start with the combined path of all its parent routes.`),c.relativePath=c.relativePath.slice(r.length)}let l=G([r,c.relativePath]),u=n.concat(c);e.children&&e.children.length>0&&(U(e.index!==!0,`Index routes must not have child routes. Please remove all child routes from route path "${l}".`),ki(e.children,t,u,l,o)),!(e.path==null&&!e.index)&&t.push({path:l,score:zi(l,e.index),routesMeta:u.map((e,t)=>{let[n,r]=Wi(e.relativePath,e.caseSensitive,t===u.length-1);return{...e,matcher:n,compiledParams:r}})})};return e.forEach((e,t)=>{if(e.path===``||!e.path?.includes(`?`))a(e,t);else for(let n of Ai(e.path))a(e,t,!0,n)}),t}function Ai(e){let t=e.split(`/`);if(t.length===0)return[];let[n,...r]=t,i=n.endsWith(`?`),a=n.replace(/\?$/,``);if(r.length===0)return i?[a,``]:[a];let o=Ai(r.join(`/`)),s=[];return s.push(...o.map(e=>e===``?a:[a,e].join(`/`))),i&&s.push(...o),s.map(t=>e.startsWith(`/`)&&t===``?`/`:t)}function ji(e){e.sort((e,t)=>e.score===t.score?Bi(e.routesMeta.map(e=>e.childrenIndex),t.routesMeta.map(e=>e.childrenIndex)):t.score-e.score)}var Mi=/^:[\w-]+$/,Ni=3,Pi=2,Fi=1,Ii=10,Li=-2,Ri=e=>e===`*`;function zi(e,t){let n=e.split(`/`),r=n.length;return n.some(Ri)&&(r+=Li),t&&(r+=Pi),n.filter(e=>!Ri(e)).reduce((e,t)=>e+(Mi.test(t)?Ni:t===``?Fi:Ii),r)}function Bi(e,t){return e.length===t.length&&e.slice(0,-1).every((e,n)=>e===t[n])?e[e.length-1]-t[t.length-1]:0}function Vi(e,t,n=!1){let{routesMeta:r}=e,i={},a=`/`,o=[];for(let e=0;e<r.length;++e){let s=r[e],c=e===r.length-1,l=a===`/`?t:t.slice(a.length)||`/`,u={path:s.relativePath,caseSensitive:s.caseSensitive,end:c},d=s.matcher&&s.compiledParams?Ui(u,l,s.matcher,s.compiledParams):Hi(u,l),f=s.route;if(!d&&c&&n&&!r[r.length-1].route.index&&(d=Hi({path:s.relativePath,caseSensitive:s.caseSensitive,end:!1},l)),!d)return null;Object.assign(i,d.params),o.push({params:i,pathname:G([a,d.pathname]),pathnameBase:ta(G([a,d.pathnameBase])),route:f}),d.pathnameBase!==`/`&&(a=G([a,d.pathnameBase]))}return o}function Hi(e,t){typeof e==`string`&&(e={path:e,caseSensitive:!1,end:!0});let[n,r]=Wi(e.path,e.caseSensitive,e.end);return Ui(e,t,n,r)}function Ui(e,t,n,r){let i=t.match(n);if(!i)return null;let a=i[0],o=a.replace(/(.)\/+$/,`$1`),s=i.slice(1);return{params:r.reduce((e,{paramName:t,isOptional:n},r)=>{if(t===`*`){let e=s[r]||``;o=a.slice(0,a.length-e.length).replace(/(.)\/+$/,`$1`)}let i=s[r];return n&&!i?e[t]=void 0:e[t]=(i||``).replace(/%2F/g,`/`),e},{}),pathname:a,pathnameBase:o,pattern:e}}function Wi(e,t=!1,n=!0){W(e===`*`||!e.endsWith(`*`)||e.endsWith(`/*`),`Route path "${e}" will be treated as if it were "${e.replace(/\*$/,`/*`)}" because the \`*\` character must always follow a \`/\` in the pattern. To get rid of this warning, please change the route path to "${e.replace(/\*$/,`/*`)}".`);let r=[],i=`^`+e.replace(/\/*\*?$/,``).replace(/^\/*/,`/`).replace(/[\\.*+^${}|()[\]]/g,`\\$&`).replace(/\/:([\w-]+)(\?)?/g,(e,t,n,i,a)=>{if(r.push({paramName:t,isOptional:n!=null}),n){let t=a.charAt(i+e.length);return t&&t!==`/`?`/([^\\/]*)`:`(?:/([^\\/]*))?`}return`/([^\\/]+)`}).replace(/\/([\w-]+)\?(\/|$)/g,`(/$1)?$2`);return e.endsWith(`*`)?(r.push({paramName:`*`}),i+=e===`*`||e===`/*`?`(.*)$`:`(?:\\/(.+)|\\/*)$`):n?i+=`\\/*$`:e!==``&&e!==`/`&&(i+=`(?:(?=\\/|$))`),[new RegExp(i,t?void 0:`i`),r]}function Gi(e){try{return e.split(`/`).map(e=>decodeURIComponent(e).replace(/\//g,`%2F`)).join(`/`)}catch(t){return W(!1,`The URL path "${e}" could not be decoded because it is a malformed URL segment. This is probably due to a bad percent encoding (${t}).`),e}}function Ki(e,t){if(t===`/`)return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let n=t.endsWith(`/`)?t.length-1:t.length,r=e.charAt(n);return r&&r!==`/`?null:e.slice(n)||`/`}function qi(e,t=`/`){let{pathname:n,search:r=``,hash:i=``}=typeof e==`string`?Si(e):e,a;return n?(n=$i(n),a=n.startsWith(`/`)?Ji(n.substring(1),`/`):Ji(n,t)):a=t,{pathname:a,search:na(r),hash:ra(i)}}function Ji(e,t){let n=ea(t).split(`/`);return e.split(`/`).forEach(e=>{e===`..`?n.length>1&&n.pop():e!==`.`&&n.push(e)}),n.length>1?n.join(`/`):`/`}function Yi(e,t,n,r){return`Cannot include a '${e}' character in a manually specified \`to.${t}\` field [${JSON.stringify(r)}]. Please separate it out to the \`to.${n}\` field. Alternatively you may provide the full path as a string in <Link to="..."> and the router will parse it for you.`}function Xi(e){return e.filter((e,t)=>t===0||e.route.path&&e.route.path.length>0)}function Zi(e){let t=Xi(e);return t.map((e,n)=>n===t.length-1?e.pathname:e.pathnameBase)}function Qi(e,t,n,r=!1){let i;typeof e==`string`?i=Si(e):(i={...e},U(!i.pathname||!i.pathname.includes(`?`),Yi(`?`,`pathname`,`search`,i)),U(!i.pathname||!i.pathname.includes(`#`),Yi(`#`,`pathname`,`hash`,i)),U(!i.search||!i.search.includes(`#`),Yi(`#`,`search`,`hash`,i)));let a=e===``||i.pathname===``,o=a?`/`:i.pathname,s;if(o==null)s=n;else{let e=t.length-1;if(!r&&o.startsWith(`..`)){let t=o.split(`/`);for(;t[0]===`..`;)t.shift(),--e;i.pathname=t.join(`/`)}s=e>=0?t[e]:`/`}let c=qi(i,s),l=o&&o!==`/`&&o.endsWith(`/`),u=(a||o===`.`)&&n.endsWith(`/`);return!c.pathname.endsWith(`/`)&&(l||u)&&(c.pathname+=`/`),c}var $i=e=>e.replace(/[\\/]{2,}/g,`/`),G=e=>$i(e.join(`/`)),ea=e=>e.replace(/\/+$/,``),ta=e=>ea(e).replace(/^\/*/,`/`),na=e=>!e||e===`?`?``:e.startsWith(`?`)?e:`?`+e,ra=e=>!e||e===`#`?``:e.startsWith(`#`)?e:`#`+e,ia=class{constructor(e,t,n,r=!1){this.status=e,this.statusText=t||``,this.internal=r,n instanceof Error?(this.data=n.toString(),this.error=n):this.data=n}};function aa(e){return e!=null&&typeof e.status==`number`&&typeof e.statusText==`string`&&typeof e.internal==`boolean`&&`data`in e}function oa(e){return G(e.map(e=>e.route.path).filter(Boolean))||`/`}var sa=typeof window<`u`&&window.document!==void 0&&window.document.createElement!==void 0;function ca(e,t){let n=e;if(typeof n!=`string`||!fi.test(n))return{absoluteURL:void 0,isExternal:!1,to:n};let r=n,i=!1;if(sa)try{let e=new URL(window.location.href),r=pi.test(n)?new URL(mi(n,e.protocol)):new URL(n),a=Ki(r.pathname,t);r.origin===e.origin&&a!=null?n=a+r.search+r.hash:i=!0}catch{W(!1,`<Link to="${n}"> contains an invalid URL which will probably break when clicked - please update to a valid URL path.`)}return{absoluteURL:r,isExternal:i,to:n}}Object.getOwnPropertyNames(Object.prototype).sort().join(`\0`);var la=[`POST`,`PUT`,`PATCH`,`DELETE`];new Set(la);var ua=[`GET`,...la];new Set(ua);var da=[`about:`,`blob:`,`chrome:`,`chrome-untrusted:`,`content:`,`data:`,`devtools:`,`file:`,`filesystem:`,`javascript:`];function fa(e){try{return da.includes(new URL(e).protocol)}catch{return!1}}var pa=g(null);pa.displayName=`DataRouter`;var ma=g(null);ma.displayName=`DataRouterState`;var ha=g(!1);function ga(){return v(ha)}var _a=g({isTransitioning:!1});_a.displayName=`ViewTransition`;var va=g(new Map);va.displayName=`Fetchers`;var ya=g(null);ya.displayName=`Await`;var K=g(null);K.displayName=`Navigation`;var ba=g(null);ba.displayName=`Location`;var q=g({outlet:null,matches:[],isDataRoute:!1});q.displayName=`Route`;var xa=g(null);xa.displayName=`RouteError`;var Sa=`REACT_ROUTER_ERROR`,Ca=`REDIRECT`,wa=`ROUTE_ERROR_RESPONSE`;function Ta(e){if(e.startsWith(`${Sa}:${Ca}:{`))try{let t=JSON.parse(e.slice(28));if(typeof t==`object`&&t&&typeof t.status==`number`&&typeof t.statusText==`string`&&typeof t.location==`string`&&typeof t.reloadDocument==`boolean`&&typeof t.replace==`boolean`)return t}catch{}}function Ea(e){if(e.startsWith(`${Sa}:${wa}:{`))try{let t=JSON.parse(e.slice(40));if(typeof t==`object`&&t&&typeof t.status==`number`&&typeof t.statusText==`string`)return new ia(t.status,t.statusText,t.data)}catch{}}function Da(e,{relative:t}={}){U(Oa(),`useHref() may be used only in the context of a <Router> component.`);let{basename:n,navigator:r}=v(K),{hash:i,pathname:a,search:o}=La(e,{relative:t}),s=a;return n!==`/`&&(s=a===`/`?n:G([n,a])),r.createHref({pathname:s,search:o,hash:i})}function Oa(){return v(ba)!=null}function J(){return U(Oa(),`useLocation() may be used only in the context of a <Router> component.`),v(ba).location}function ka(){return v(ba).navigationType}var Aa=`You should call navigate() in a React.useEffect(), not when your component is first rendered.`;function ja(e){v(K).static||x(e)}function Ma(){let{isDataRoute:e}=v(q);return e?no():Na()}function Na(){U(Oa(),`useNavigate() may be used only in the context of a <Router> component.`);let e=v(pa),{basename:t,navigator:n}=v(K),{matches:r}=v(q),{pathname:i}=J(),a=JSON.stringify(Zi(r)),o=M(!1);return ja(()=>{o.current=!0}),p((r,s={})=>{if(W(o.current,Aa),!o.current)return;if(typeof r==`number`){n.go(r);return}let c=Qi(r,JSON.parse(a),i,s.relative===`path`);e==null&&t!==`/`&&(c.pathname=c.pathname===`/`?t:G([t,c.pathname])),(s.replace?n.replace:n.push)(c,s.state,s)},[t,n,a,i,e])}var Pa=g(null);function Fa(e){let t=v(q).outlet;return d(()=>t&&A(Pa.Provider,{value:e},t),[t,e])}function Ia(){let{matches:e}=v(q);return e[e.length-1]?.params??{}}function La(e,{relative:t}={}){let{matches:n}=v(q),{pathname:r}=J(),i=JSON.stringify(Zi(n));return d(()=>Qi(e,JSON.parse(i),r,t===`path`),[e,i,r,t])}function Ra(e,t){return za(e,t)}function za(e,t,n){U(Oa(),`useRoutes() may be used only in the context of a <Router> component.`);let{navigator:r}=v(K),{matches:i}=v(q),a=i[i.length-1],o=a?a.params:{},s=a?a.pathname:`/`,c=a?a.pathnameBase:`/`,l=a&&a.route;{let e=l&&l.path||``;io(s,!l||e.endsWith(`*`)||e.endsWith(`*?`),`You rendered descendant <Routes> (or called \`useRoutes()\`) at "${s}" (under <Route path="${e}">) but the parent route path has no trailing "*". This means if you navigate deeper, the parent won't match anymore and therefore the child routes will never render.
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./Devices-B-b5cUYn.js","./src-DKc14e9G.js","./player-overlays-CvKnZb5M.js","./client-BbPYrWg7.js","./__vite-browser-external-BlMfPwfH.js","./useTranslation-D3Is_4B6.js","./AdminPage-B4QlIiKh.js","./device-integration-icon-XVdZ9pIS.js","./useEventInvalidation-B5MjkWnS.js","./Integrations-DtQc1eDp.js","./i18n-BO6gCPcC.js","./ScanNetworkModal-DhahS87x.js","./BrokerForm-CU4X3nL7.js","./mount-B5MjkWnS.js","./IntegrationDetail-DLncDXox.js","./search-x-C8eiZDQW.js","./NodeAddonsSettingsPanel-9_q0f4bE.js","./addon-icons-context-Bus8wGvh.js","./Pipeline-r8TFI-Fa.js","./video-CJw8Jnle.js","./usb-i2JzfEjl.js","./crop-FX76GBoF.js","./layers-T4HoHbdn.js","./step-inspector-model-BeIQx3rW.js","./board-model-CnpzmN9f.js","./DeviceDetail-tZevLHDV.js","./archive-BTmhmQQp.js","./scan-eye-CrOhuNWQ.js","./bell-off-DsAerV0u.js","./boxes-DT6bkxUA.js","./circle-slash-BFwh1Zbg.js","./HelperWizard-4637ctxc.js","./assignment-candidates-C4DL_rSh.js","./device-picker-model-B5MjkWnS.js","./use-stationary-objects-Cqmb4Ymg.js","./linked-devices-model-CObOrxIk.js","./format-BTMQLjGl.js","./authed-media-C8FW8mvx.js","./Showroom-BX1LrKmF.js","./EmbedPlayerPage-CI3OOtRg.js","./Library-DbHcY62a.js","./user-x-CIq05NC_.js","./user-round-BkFCDGbj.js","./AdminSectionedPage-BIoU14zn.js","./use-scenes-feed-CUQxwk-v.js","./Recordings-BrpMcrZw.js","./scissors-C6HYvaxr.js","./location-owned-usage-D17U3uzz.js","./eraser-L4lKjV-e.js","./hard-drive-download-cfcxCkzE.js","./format-size-DIxKXxtj.js","./Viewer-BW9JCbu_.js","./monitor-off-Bj-JQM7b.js","./Build-C2qKCizt.js","./ungroup-BdxY8QDj.js","./CompositionCreateForm-DCUy3waQ.js","./DeviceDoActionFields-BmEM1vFn.js","./CompositionEditorPage-syg6YTJF.js","./Locations-CfYQkG2R.js","./speaker-BsE4hqmg.js","./Addons-CPaW6tLw.js","./useNodeUrlSelection-rnUQLTfb.js","./AiProfiles-FpbSg3kP.js","./send-CNzJmniJ.js","./message-square-plus-D64e2l9L.js","./MyAccess-CjUd-G8J.js","./key-round-x0Ig1rd2.js","./monitor-smartphone-CyTSF3mW.js","./unlink-BVODHZoC.js","./SessionsList-BbD9LSdf.js","./Logs-CMYLVX21.js","./timer-reset-Tun-zcxs.js","./IntegrationHub-B1soAFk9.js","./settings-2-Ccb0AMXU.js","./AddonAssetIcon-DNTjc2uq.js","./addon-display-names-BkwMrExv.js","./Identity-CjEfAbi1.js","./key-e3_N15fG.js","./Network-Dudx2Fcg.js","./log-in-B1D0wNrs.js","./Integrations-xxkUIJ67.js","./recycle-BLx8Nd-6.js","./Data-VG64mGmK.js","./cloud-upload-iGrXLaxX.js","./System-CvErxLx3.js","./Cluster-BvxOiIZ7.js","./memory-stick-DYS3v1CU.js","./Terminal-COEKXIAj.js","./Terminal-kHJ-D0s7.css","./Notifications-DE5Wtais.js","./list-ordered-I4dBVzRf.js","./History-BJcol9mz.js","./Calendars-BRTmlFIt.js"])))=>i.map(i=>d[i]);
2
+ import{a as e,t}from"./rolldown-runtime-Cyuzqnbw.js";import"./virtual_mf-exposes___mfe_internal__admin_ui_host__remoteEntry-_hash_-DnnXQRkG.js";import{a as n,o as r}from"./virtual_mf-REMOTE_ENTRY_ID___mfe_internal__admin_ui_host__remoteEntry-_hash_-BWKP-Fxc.js";import{t as i}from"./vite-preload-helper-kNaey6uv.js";import{$ as a,A as o,B as s,D as c,E as l,F as u,G as d,J as f,L as p,M as m,N as h,O as g,P as _,R as v,S as y,V as b,W as x,X as S,Y as C,Z as w,a as T,b as E,d as D,i as O,j as k,k as A,o as j,q as M,u as N,x as P}from"./_virtual_mf___mfe_internal__admin_ui_host__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-CEHpkaJP.js";import{$t as F,Br as I,Ci as ee,Di as L,Dr as te,Er as ne,Fr as re,It as ie,Jr as ae,Kn as oe,Kt as R,Li as se,Mi as ce,Nt as le,On as ue,Or as de,Q as z,Qn as fe,Rr as pe,Si as me,T as he,Tn as ge,Ui as _e,Xi as ve,Xn as ye,Xr as be,Z as xe,Zt as Se,_t as Ce,an as we,bi as Te,bn as Ee,dn as De,dt as Oe,fi as ke,fn as Ae,ft as je,hi as Me,ht as Ne,it as Pe,ji as Fe,kn as Ie,mr as Le,or as Re,ot as ze,pi as Be,pn as Ve,ra as He,rr as Ue,rt as We,si as Ge,sn as Ke,ta as qe,tr as Je,un as Ye,ut as Xe,vr as Ze,wr as Qe,xn as $e,yi as et,zn as tt,zr as nt}from"./player-overlays-CvKnZb5M.js";import{A as rt,At as it,Bt as at,Ct as ot,Dt as st,Et as ct,F as lt,Ft as ut,G as dt,Ht as ft,I as pt,Ir as mt,It as ht,L as gt,Lt as _t,M as vt,Mi as yt,N as bt,Nt as xt,Pt as St,Rt as Ct,St as wt,T as Tt,Vt as Et,W as Dt,_r as Ot,a as kt,bt as At,ct as jt,dt as Mt,ft as Nt,ht as Pt,i as Ft,j as It,k as Lt,ki as Rt,kt as zt,lt as Bt,mt as Vt,n as Ht,pt as Ut,qn as Wt,sa as Gt,t as Kt,ut as qt,vr as Jt,vt as Yt,wt as Xt,yt as Zt,zi as Qt,zt as $t}from"./client-BbPYrWg7.js";import{a as en,c as tn,d as nn,f as rn,h as an,i as on,l as sn,m as cn,n as ln,o as un,p as dn,r as fn,s as pn,t as mn,u as hn}from"./video-CJw8Jnle.js";import{Bi as gn,Br as _n,Bt as vn,Cl as yn,Cs as bn,Do as xn,Eo as Sn,Er as Cn,Fr as wn,Gr as Tn,Gt as En,Gu as Dn,Ii as On,Ir as kn,Jr as An,Kr as jn,Ku as Mn,L as Nn,Li as Pn,Lo as Fn,Lr as In,Lt as Ln,Mo as Rn,No as zn,Ou as Bn,Pr as Vn,Qu as Hn,Ri as Un,Rn as Wn,Ro as Gn,Rr as Kn,St as qn,To as Jn,Ur as Yn,Ut as Xn,Vo as Zn,Vr as Qn,Yo as $n,Yr as er,Zu as B,_d as tr,_i as nr,_r as rr,_t as ir,an as ar,au as or,cn as sr,cr,cs as lr,di as ur,dr,du as fr,fd as pr,fn as mr,fr as hr,gd as gr,gr as _r,hr as vr,id as yr,in as br,io as xr,jo as Sr,jt as Cr,kr as wr,l as Tr,lr as Er,mr as Dr,n as Or,od as kr,oi as Ar,on as jr,oo as Mr,ou as Nr,p as Pr,pr as Fr,rd as Ir,rn as Lr,ro as Rr,rr as zr,sd as Br,sn as Vr,so as Hr,ud as Ur,un as Wr,uo as Gr,vr as Kr,wi as qr,xl as Jr,y as Yr,zi as Xr,zr as Zr}from"./src-DKc14e9G.js";import{r as Qr,t as $r}from"./_virtual_mf___mfe_internal__admin_ui_host__loadShare__react_mf_2_dom__loadShare__.js-DPkvGqVU.js";import{t as ei}from"./_virtual_mf___mfe_internal__admin_ui_host__loadShare__react_mf_2_dom_mf_1_client__loadShare__.js-Cb2QlpvS.js";import{n as ti,t as V}from"./i18n-BO6gCPcC.js";import{a as ni,c as ri,i as ii,l as ai,n as oi,o as si,s as ci,t as H,u as li}from"./useTranslation-D3Is_4B6.js";import"./mount-B5MjkWnS.js";import{n as ui,t as di}from"./addon-icons-context-Bus8wGvh.js";(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})(),a();var fi=/^(?:[a-z][a-z0-9+.-]*:|[\\/]{2})/i,pi=/^[\\/]{2}/;function mi(e,t){return t+e.replace(/\\/g,`/`)}var hi=`popstate`;function gi(e){return typeof e==`object`&&!!e&&`pathname`in e&&`search`in e&&`hash`in e&&`state`in e&&`key`in e}function _i(e={}){function t(e,t){let n=t.state?.masked,{pathname:r,search:i,hash:a}=n||e.location;return bi(``,{pathname:r,search:i,hash:a},t.state&&t.state.usr||null,t.state&&t.state.key||`default`,n?{pathname:e.location.pathname,search:e.location.search,hash:e.location.hash}:void 0)}function n(e,t){return typeof t==`string`?t:xi(t)}return Ci(t,n,null,e)}function U(e,t){if(e===!1||e==null)throw Error(t)}function W(e,t){if(!e){typeof console<`u`&&console.warn(t);try{throw Error(t)}catch{}}}function vi(){return Math.random().toString(36).substring(2,10)}function yi(e,t){return{usr:e.state,key:e.key,idx:t,masked:e.mask?{pathname:e.pathname,search:e.search,hash:e.hash}:void 0}}function bi(e,t,n=null,r,i){return{pathname:typeof e==`string`?e:e.pathname,search:``,hash:``,...typeof t==`string`?Si(t):t,state:n,key:t&&t.key||r||vi(),mask:i}}function xi({pathname:e=`/`,search:t=``,hash:n=``}){return t&&t!==`?`&&(e+=t.charAt(0)===`?`?t:`?`+t),n&&n!==`#`&&(e+=n.charAt(0)===`#`?n:`#`+n),e}function Si(e){let t={};if(e){let n=e.indexOf(`#`);n>=0&&(t.hash=e.substring(n),e=e.substring(0,n));let r=e.indexOf(`?`);r>=0&&(t.search=e.substring(r),e=e.substring(0,r)),e&&(t.pathname=e)}return t}function Ci(e,t,n,r={}){let{window:i=document.defaultView,v5Compat:a=!1}=r,o=i.history,s=`POP`,c=null,l=u();l??(l=0,o.replaceState({...o.state,idx:l},``));function u(){return(o.state||{idx:null}).idx}function d(){s=`POP`;let e=u(),t=e==null?null:e-l;l=e,c&&c({action:s,location:h.location,delta:t})}function f(e,t){s=`PUSH`;let r=gi(e)?e:bi(h.location,e,t);n&&n(r,e),l=u()+1;let d=yi(r,l),f=h.createHref(r.mask||r);try{o.pushState(d,``,f)}catch(e){if(e instanceof DOMException&&e.name===`DataCloneError`)throw e;i.location.assign(f)}a&&c&&c({action:s,location:h.location,delta:1})}function p(e,t){s=`REPLACE`;let r=gi(e)?e:bi(h.location,e,t);n&&n(r,e),l=u();let i=yi(r,l),d=h.createHref(r.mask||r);o.replaceState(i,``,d),a&&c&&c({action:s,location:h.location,delta:0})}function m(e){return wi(i,e)}let h={get action(){return s},get location(){return e(i,o)},listen(e){if(c)throw Error(`A history only accepts one active listener`);return i.addEventListener(hi,d),c=e,()=>{i.removeEventListener(hi,d),c=null}},createHref(e){return t(i,e)},createURL:m,encodeLocation(e){let t=m(e);return{pathname:t.pathname,search:t.search,hash:t.hash}},push:f,replace:p,go(e){return o.go(e)}};return h}function wi(e,t,n=!1){let r=`http://localhost`;e&&(r=e.location.origin===`null`?e.location.href:e.location.origin),U(r,`No window.location.(origin|href) available to create URL`);let i=typeof t==`string`?t:xi(t);return i=i.replace(/ $/,`%20`),!n&&pi.test(i)&&(i=r+i),new URL(i,r)}function Ti(e,t,n=`/`){return Ei(e,t,n,!1)}function Ei(e,t,n,r,i){let a=Ki((typeof t==`string`?Si(t):t).pathname||`/`,n);if(a==null)return null;let o=i??Oi(e),s=null,c=Gi(a);for(let e=0;s==null&&e<o.length;++e)s=Vi(o[e],c,r);return s}function Di(e,t){let{route:n,pathname:r,params:i}=e;return{id:n.id,pathname:r,params:i,data:t[n.id],loaderData:t[n.id],handle:n.handle}}function Oi(e){let t=ki(e);return ji(t),t}function ki(e,t=[],n=[],r=``,i=!1){let a=(e,a,o=i,s)=>{let c={relativePath:s===void 0?e.path||``:s,caseSensitive:e.caseSensitive===!0,childrenIndex:a,route:e};if(c.relativePath.startsWith(`/`)){if(!c.relativePath.startsWith(r)&&o)return;U(c.relativePath.startsWith(r),`Absolute route path "${c.relativePath}" nested under path "${r}" is not valid. An absolute child route path must start with the combined path of all its parent routes.`),c.relativePath=c.relativePath.slice(r.length)}let l=G([r,c.relativePath]),u=n.concat(c);e.children&&e.children.length>0&&(U(e.index!==!0,`Index routes must not have child routes. Please remove all child routes from route path "${l}".`),ki(e.children,t,u,l,o)),!(e.path==null&&!e.index)&&t.push({path:l,score:zi(l,e.index),routesMeta:u.map((e,t)=>{let[n,r]=Wi(e.relativePath,e.caseSensitive,t===u.length-1);return{...e,matcher:n,compiledParams:r}})})};return e.forEach((e,t)=>{if(e.path===``||!e.path?.includes(`?`))a(e,t);else for(let n of Ai(e.path))a(e,t,!0,n)}),t}function Ai(e){let t=e.split(`/`);if(t.length===0)return[];let[n,...r]=t,i=n.endsWith(`?`),a=n.replace(/\?$/,``);if(r.length===0)return i?[a,``]:[a];let o=Ai(r.join(`/`)),s=[];return s.push(...o.map(e=>e===``?a:[a,e].join(`/`))),i&&s.push(...o),s.map(t=>e.startsWith(`/`)&&t===``?`/`:t)}function ji(e){e.sort((e,t)=>e.score===t.score?Bi(e.routesMeta.map(e=>e.childrenIndex),t.routesMeta.map(e=>e.childrenIndex)):t.score-e.score)}var Mi=/^:[\w-]+$/,Ni=3,Pi=2,Fi=1,Ii=10,Li=-2,Ri=e=>e===`*`;function zi(e,t){let n=e.split(`/`),r=n.length;return n.some(Ri)&&(r+=Li),t&&(r+=Pi),n.filter(e=>!Ri(e)).reduce((e,t)=>e+(Mi.test(t)?Ni:t===``?Fi:Ii),r)}function Bi(e,t){return e.length===t.length&&e.slice(0,-1).every((e,n)=>e===t[n])?e[e.length-1]-t[t.length-1]:0}function Vi(e,t,n=!1){let{routesMeta:r}=e,i={},a=`/`,o=[];for(let e=0;e<r.length;++e){let s=r[e],c=e===r.length-1,l=a===`/`?t:t.slice(a.length)||`/`,u={path:s.relativePath,caseSensitive:s.caseSensitive,end:c},d=s.matcher&&s.compiledParams?Ui(u,l,s.matcher,s.compiledParams):Hi(u,l),f=s.route;if(!d&&c&&n&&!r[r.length-1].route.index&&(d=Hi({path:s.relativePath,caseSensitive:s.caseSensitive,end:!1},l)),!d)return null;Object.assign(i,d.params),o.push({params:i,pathname:G([a,d.pathname]),pathnameBase:ta(G([a,d.pathnameBase])),route:f}),d.pathnameBase!==`/`&&(a=G([a,d.pathnameBase]))}return o}function Hi(e,t){typeof e==`string`&&(e={path:e,caseSensitive:!1,end:!0});let[n,r]=Wi(e.path,e.caseSensitive,e.end);return Ui(e,t,n,r)}function Ui(e,t,n,r){let i=t.match(n);if(!i)return null;let a=i[0],o=a.replace(/(.)\/+$/,`$1`),s=i.slice(1);return{params:r.reduce((e,{paramName:t,isOptional:n},r)=>{if(t===`*`){let e=s[r]||``;o=a.slice(0,a.length-e.length).replace(/(.)\/+$/,`$1`)}let i=s[r];return n&&!i?e[t]=void 0:e[t]=(i||``).replace(/%2F/g,`/`),e},{}),pathname:a,pathnameBase:o,pattern:e}}function Wi(e,t=!1,n=!0){W(e===`*`||!e.endsWith(`*`)||e.endsWith(`/*`),`Route path "${e}" will be treated as if it were "${e.replace(/\*$/,`/*`)}" because the \`*\` character must always follow a \`/\` in the pattern. To get rid of this warning, please change the route path to "${e.replace(/\*$/,`/*`)}".`);let r=[],i=`^`+e.replace(/\/*\*?$/,``).replace(/^\/*/,`/`).replace(/[\\.*+^${}|()[\]]/g,`\\$&`).replace(/\/:([\w-]+)(\?)?/g,(e,t,n,i,a)=>{if(r.push({paramName:t,isOptional:n!=null}),n){let t=a.charAt(i+e.length);return t&&t!==`/`?`/([^\\/]*)`:`(?:/([^\\/]*))?`}return`/([^\\/]+)`}).replace(/\/([\w-]+)\?(\/|$)/g,`(/$1)?$2`);return e.endsWith(`*`)?(r.push({paramName:`*`}),i+=e===`*`||e===`/*`?`(.*)$`:`(?:\\/(.+)|\\/*)$`):n?i+=`\\/*$`:e!==``&&e!==`/`&&(i+=`(?:(?=\\/|$))`),[new RegExp(i,t?void 0:`i`),r]}function Gi(e){try{return e.split(`/`).map(e=>decodeURIComponent(e).replace(/\//g,`%2F`)).join(`/`)}catch(t){return W(!1,`The URL path "${e}" could not be decoded because it is a malformed URL segment. This is probably due to a bad percent encoding (${t}).`),e}}function Ki(e,t){if(t===`/`)return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let n=t.endsWith(`/`)?t.length-1:t.length,r=e.charAt(n);return r&&r!==`/`?null:e.slice(n)||`/`}function qi(e,t=`/`){let{pathname:n,search:r=``,hash:i=``}=typeof e==`string`?Si(e):e,a;return n?(n=$i(n),a=n.startsWith(`/`)?Ji(n.substring(1),`/`):Ji(n,t)):a=t,{pathname:a,search:na(r),hash:ra(i)}}function Ji(e,t){let n=ea(t).split(`/`);return e.split(`/`).forEach(e=>{e===`..`?n.length>1&&n.pop():e!==`.`&&n.push(e)}),n.length>1?n.join(`/`):`/`}function Yi(e,t,n,r){return`Cannot include a '${e}' character in a manually specified \`to.${t}\` field [${JSON.stringify(r)}]. Please separate it out to the \`to.${n}\` field. Alternatively you may provide the full path as a string in <Link to="..."> and the router will parse it for you.`}function Xi(e){return e.filter((e,t)=>t===0||e.route.path&&e.route.path.length>0)}function Zi(e){let t=Xi(e);return t.map((e,n)=>n===t.length-1?e.pathname:e.pathnameBase)}function Qi(e,t,n,r=!1){let i;typeof e==`string`?i=Si(e):(i={...e},U(!i.pathname||!i.pathname.includes(`?`),Yi(`?`,`pathname`,`search`,i)),U(!i.pathname||!i.pathname.includes(`#`),Yi(`#`,`pathname`,`hash`,i)),U(!i.search||!i.search.includes(`#`),Yi(`#`,`search`,`hash`,i)));let a=e===``||i.pathname===``,o=a?`/`:i.pathname,s;if(o==null)s=n;else{let e=t.length-1;if(!r&&o.startsWith(`..`)){let t=o.split(`/`);for(;t[0]===`..`;)t.shift(),--e;i.pathname=t.join(`/`)}s=e>=0?t[e]:`/`}let c=qi(i,s),l=o&&o!==`/`&&o.endsWith(`/`),u=(a||o===`.`)&&n.endsWith(`/`);return!c.pathname.endsWith(`/`)&&(l||u)&&(c.pathname+=`/`),c}var $i=e=>e.replace(/[\\/]{2,}/g,`/`),G=e=>$i(e.join(`/`)),ea=e=>e.replace(/\/+$/,``),ta=e=>ea(e).replace(/^\/*/,`/`),na=e=>!e||e===`?`?``:e.startsWith(`?`)?e:`?`+e,ra=e=>!e||e===`#`?``:e.startsWith(`#`)?e:`#`+e,ia=class{constructor(e,t,n,r=!1){this.status=e,this.statusText=t||``,this.internal=r,n instanceof Error?(this.data=n.toString(),this.error=n):this.data=n}};function aa(e){return e!=null&&typeof e.status==`number`&&typeof e.statusText==`string`&&typeof e.internal==`boolean`&&`data`in e}function oa(e){return G(e.map(e=>e.route.path).filter(Boolean))||`/`}var sa=typeof window<`u`&&window.document!==void 0&&window.document.createElement!==void 0;function ca(e,t){let n=e;if(typeof n!=`string`||!fi.test(n))return{absoluteURL:void 0,isExternal:!1,to:n};let r=n,i=!1;if(sa)try{let e=new URL(window.location.href),r=pi.test(n)?new URL(mi(n,e.protocol)):new URL(n),a=Ki(r.pathname,t);r.origin===e.origin&&a!=null?n=a+r.search+r.hash:i=!0}catch{W(!1,`<Link to="${n}"> contains an invalid URL which will probably break when clicked - please update to a valid URL path.`)}return{absoluteURL:r,isExternal:i,to:n}}Object.getOwnPropertyNames(Object.prototype).sort().join(`\0`);var la=[`POST`,`PUT`,`PATCH`,`DELETE`];new Set(la);var ua=[`GET`,...la];new Set(ua);var da=[`about:`,`blob:`,`chrome:`,`chrome-untrusted:`,`content:`,`data:`,`devtools:`,`file:`,`filesystem:`,`javascript:`];function fa(e){try{return da.includes(new URL(e).protocol)}catch{return!1}}var pa=g(null);pa.displayName=`DataRouter`;var ma=g(null);ma.displayName=`DataRouterState`;var ha=g(!1);function ga(){return v(ha)}var _a=g({isTransitioning:!1});_a.displayName=`ViewTransition`;var va=g(new Map);va.displayName=`Fetchers`;var ya=g(null);ya.displayName=`Await`;var K=g(null);K.displayName=`Navigation`;var ba=g(null);ba.displayName=`Location`;var q=g({outlet:null,matches:[],isDataRoute:!1});q.displayName=`Route`;var xa=g(null);xa.displayName=`RouteError`;var Sa=`REACT_ROUTER_ERROR`,Ca=`REDIRECT`,wa=`ROUTE_ERROR_RESPONSE`;function Ta(e){if(e.startsWith(`${Sa}:${Ca}:{`))try{let t=JSON.parse(e.slice(28));if(typeof t==`object`&&t&&typeof t.status==`number`&&typeof t.statusText==`string`&&typeof t.location==`string`&&typeof t.reloadDocument==`boolean`&&typeof t.replace==`boolean`)return t}catch{}}function Ea(e){if(e.startsWith(`${Sa}:${wa}:{`))try{let t=JSON.parse(e.slice(40));if(typeof t==`object`&&t&&typeof t.status==`number`&&typeof t.statusText==`string`)return new ia(t.status,t.statusText,t.data)}catch{}}function Da(e,{relative:t}={}){U(Oa(),`useHref() may be used only in the context of a <Router> component.`);let{basename:n,navigator:r}=v(K),{hash:i,pathname:a,search:o}=La(e,{relative:t}),s=a;return n!==`/`&&(s=a===`/`?n:G([n,a])),r.createHref({pathname:s,search:o,hash:i})}function Oa(){return v(ba)!=null}function J(){return U(Oa(),`useLocation() may be used only in the context of a <Router> component.`),v(ba).location}function ka(){return v(ba).navigationType}var Aa=`You should call navigate() in a React.useEffect(), not when your component is first rendered.`;function ja(e){v(K).static||x(e)}function Ma(){let{isDataRoute:e}=v(q);return e?no():Na()}function Na(){U(Oa(),`useNavigate() may be used only in the context of a <Router> component.`);let e=v(pa),{basename:t,navigator:n}=v(K),{matches:r}=v(q),{pathname:i}=J(),a=JSON.stringify(Zi(r)),o=M(!1);return ja(()=>{o.current=!0}),p((r,s={})=>{if(W(o.current,Aa),!o.current)return;if(typeof r==`number`){n.go(r);return}let c=Qi(r,JSON.parse(a),i,s.relative===`path`);e==null&&t!==`/`&&(c.pathname=c.pathname===`/`?t:G([t,c.pathname])),(s.replace?n.replace:n.push)(c,s.state,s)},[t,n,a,i,e])}var Pa=g(null);function Fa(e){let t=v(q).outlet;return d(()=>t&&A(Pa.Provider,{value:e},t),[t,e])}function Ia(){let{matches:e}=v(q);return e[e.length-1]?.params??{}}function La(e,{relative:t}={}){let{matches:n}=v(q),{pathname:r}=J(),i=JSON.stringify(Zi(n));return d(()=>Qi(e,JSON.parse(i),r,t===`path`),[e,i,r,t])}function Ra(e,t){return za(e,t)}function za(e,t,n){U(Oa(),`useRoutes() may be used only in the context of a <Router> component.`);let{navigator:r}=v(K),{matches:i}=v(q),a=i[i.length-1],o=a?a.params:{},s=a?a.pathname:`/`,c=a?a.pathnameBase:`/`,l=a&&a.route;{let e=l&&l.path||``;io(s,!l||e.endsWith(`*`)||e.endsWith(`*?`),`You rendered descendant <Routes> (or called \`useRoutes()\`) at "${s}" (under <Route path="${e}">) but the parent route path has no trailing "*". This means if you navigate deeper, the parent won't match anymore and therefore the child routes will never render.
3
3
 
4
- Please change the parent <Route path="${e}"> to <Route path="${e===`/`?`*`:`${e}/*`}">.`)}let u=J(),d;if(t){let e=typeof t==`string`?Si(t):t;U(c===`/`||e.pathname?.startsWith(c),`When overriding the location using \`<Routes location>\` or \`useRoutes(routes, location)\`, the location pathname must begin with the portion of the URL pathname that was matched by all parent routes. The current pathname base is "${c}" but pathname "${e.pathname}" was given in the \`location\` prop.`),d=e}else d=u;let f=d.pathname||`/`,p=f;if(c!==`/`){let e=c.replace(/^\//,``).split(`/`);p=`/`+f.replace(/^\//,``).split(`/`).slice(e.length).join(`/`)}let m=n&&n.state.matches.length?n.state.matches.map(e=>Object.assign(e,{route:n.manifest[e.route.id]||e.route})):Ti(e,{pathname:p});W(l||m!=null,`No routes matched location "${d.pathname}${d.search}${d.hash}" `),W(m==null||m[m.length-1].route.element!==void 0||m[m.length-1].route.Component!==void 0||m[m.length-1].route.lazy!==void 0,`Matched leaf route at location "${d.pathname}${d.search}${d.hash}" does not have an element or Component. This means it will render an <Outlet /> with a null value by default resulting in an "empty" page.`);let h=Ka(m&&m.map(e=>Object.assign({},e,{params:Object.assign({},o,e.params),pathname:G([c,r.encodeLocation?r.encodeLocation(e.pathname.replace(/%/g,`%25`).replace(/\?/g,`%3F`).replace(/#/g,`%23`)).pathname:e.pathname]),pathnameBase:e.pathnameBase===`/`?c:G([c,r.encodeLocation?r.encodeLocation(e.pathnameBase.replace(/%/g,`%25`).replace(/\?/g,`%3F`).replace(/#/g,`%23`)).pathname:e.pathnameBase])})),i,n);return t&&h?A(ba.Provider,{value:{location:{pathname:`/`,search:``,hash:``,state:null,key:`default`,mask:void 0,...d},navigationType:`POP`}},h):h}function Ba(){let e=to(),t=aa(e)?`${e.status} ${e.statusText}`:e instanceof Error?e.message:JSON.stringify(e),n=e instanceof Error?e.stack:null,r=`rgba(200,200,200, 0.5)`,i={padding:`0.5rem`,backgroundColor:r},a={padding:`2px 4px`,backgroundColor:r},o=null;return console.error(`Error handled by React Router default ErrorBoundary:`,e),o=A(b,null,A(`p`,null,`💿 Hey developer 👋`),A(`p`,null,`You can provide a way better UX than this when your app throws errors by providing your own `,A(`code`,{style:a},`ErrorBoundary`),` or`,` `,A(`code`,{style:a},`errorElement`),` prop on your route.`)),A(b,null,A(`h2`,null,`Unexpected Application Error!`),A(`h3`,{style:{fontStyle:`italic`}},t),n?A(`pre`,{style:i},n):null,o)}var Va=A(Ba,null),Ha=class extends _{constructor(e){super(e),this.state={location:e.location,revalidation:e.revalidation,error:e.error}}static getDerivedStateFromError(e){return{error:e}}static getDerivedStateFromProps(e,t){return t.location!==e.location||t.revalidation!==`idle`&&e.revalidation===`idle`?{error:e.error,location:e.location,revalidation:e.revalidation}:{error:e.error===void 0?t.error:e.error,location:t.location,revalidation:e.revalidation||t.revalidation}}componentDidCatch(e,t){this.props.onError?this.props.onError(e,t):console.error(`React Router caught the following error during render`,e)}render(){let e=this.state.error;if(this.context&&typeof e==`object`&&e&&`digest`in e&&typeof e.digest==`string`){let t=Ea(e.digest);t&&(e=t)}let t=e===void 0?this.props.children:A(q.Provider,{value:this.props.routeContext},A(xa.Provider,{value:e,children:this.props.component}));return this.context?A(Wa,{error:e},t):t}};Ha.contextType=ha;var Ua=new WeakMap;function Wa({children:e,error:t}){let{basename:n}=v(K);if(typeof t==`object`&&t&&`digest`in t&&typeof t.digest==`string`){let e=Ta(t.digest);if(e){let r=Ua.get(t);if(r)throw r;let i=ca(e.location,n),a=i.absoluteURL||i.to;if(fa(a))throw Error(`Invalid redirect location`);if(sa&&!Ua.get(t))if(i.isExternal||e.reloadDocument)window.location.href=a;else{let n=Promise.resolve().then(()=>window.__reactRouterDataRouter.navigate(i.to,{replace:e.replace}));throw Ua.set(t,n),n}return A(`meta`,{httpEquiv:`refresh`,content:`0;url=${a}`})}}return e}function Ga({routeContext:e,match:t,children:n}){let r=v(pa);return r&&r.static&&r.staticContext&&(t.route.errorElement||t.route.ErrorBoundary)&&(r.staticContext._deepestRenderedBoundaryId=t.route.id),A(q.Provider,{value:e},n)}function Ka(e,t=[],n){let r=n?.state;if(e==null){if(!r)return null;if(r.errors)e=r.matches;else if(t.length===0&&!r.initialized&&r.matches.length>0)e=r.matches;else return null}let i=e,a=r?.errors;if(a!=null){let e=i.findIndex(e=>e.route.id&&a?.[e.route.id]!==void 0);U(e>=0,`Could not find a matching route for errors on route IDs: ${Object.keys(a).join(`,`)}`),i=i.slice(0,Math.min(i.length,e+1))}let o=!1,s=-1;if(n&&r){o=r.renderFallback;for(let e=0;e<i.length;e++){let t=i[e];if((t.route.HydrateFallback||t.route.hydrateFallbackElement)&&(s=e),t.route.id){let{loaderData:e,errors:a}=r,c=t.route.loader&&!e.hasOwnProperty(t.route.id)&&(!a||a[t.route.id]===void 0);if(t.route.lazy||c){n.isStatic&&(o=!0),i=s>=0?i.slice(0,s+1):[i[0]];break}}}}let c=n?.onError,l=r&&c?(e,t)=>{c(e,{location:r.location,params:r.matches?.[0]?.params??{},pattern:oa(r.matches),errorInfo:t})}:void 0;return i.reduceRight((e,n,c)=>{let u,d=!1,f=null,p=null;r&&(u=a&&n.route.id?a[n.route.id]:void 0,f=n.route.errorElement||Va,o&&(s<0&&c===0?(io(`route-fallback`,!1,"No `HydrateFallback` element provided to render during initial hydration"),d=!0,p=null):s===c&&(d=!0,p=n.route.hydrateFallbackElement||null)));let m=t.concat(i.slice(0,c+1)),h=()=>{let t;return t=u?f:d?p:n.route.Component?A(n.route.Component,null):n.route.element?n.route.element:e,A(Ga,{match:n,routeContext:{outlet:e,matches:m,isDataRoute:r!=null},children:t})};return r&&(n.route.ErrorBoundary||n.route.errorElement||c===0)?A(Ha,{location:r.location,revalidation:r.revalidation,component:f,error:u,children:h(),routeContext:{outlet:null,matches:m,isDataRoute:!0},onError:l}):h()},null)}function qa(e){return`${e} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function Ja(e){let t=v(pa);return U(t,qa(e)),t}function Ya(e){let t=v(ma);return U(t,qa(e)),t}function Xa(e){let t=v(q);return U(t,qa(e)),t}function Za(e){let t=Xa(e),n=t.matches[t.matches.length-1];return U(n.route.id,`${e} can only be used on routes that contain a unique "id"`),n.route.id}function Qa(){return Za(`useRouteId`)}function $a(){let e=Ya(`useNavigation`);return d(()=>{let{matches:t,historyAction:n,...r}=e.navigation;return r},[e.navigation])}function eo(){let{matches:e,loaderData:t}=Ya(`useMatches`);return d(()=>e.map(e=>Di(e,t)),[e,t])}function to(){let e=v(xa),t=Ya(`useRouteError`),n=Za(`useRouteError`);return e===void 0?t.errors?.[n]:e}function no(){let{router:e}=Ja(`useNavigate`),t=Za(`useNavigate`),n=M(!1);return ja(()=>{n.current=!0}),p(async(r,i={})=>{W(n.current,Aa),n.current&&(typeof r==`number`?await e.navigate(r):await e.navigate(r,{fromRouteId:t,...i}))},[e,t])}var ro={};function io(e,t,n){!t&&!ro[e]&&(ro[e]=!0,W(!1,n))}h(ao);function ao({routes:e,manifest:t,future:n,state:r,isStatic:i,onError:a}){return za(e,void 0,{manifest:t,state:r,isStatic:i,onError:a,future:n})}function Y({to:e,replace:t,state:n,relative:r}){U(Oa(),`<Navigate> may be used only in the context of a <Router> component.`);let{static:i}=v(K);W(!i,`<Navigate> must not be used on the initial render in a <StaticRouter>. This is a no-op, but you should modify your code so the <Navigate> is only ever rendered in response to some user interaction or state change.`);let{matches:a}=v(q),{pathname:o}=J(),c=Ma(),l=Qi(e,Zi(a),o,r===`path`),u=JSON.stringify(l);return s(()=>{c(JSON.parse(u),{replace:t,state:n,relative:r})},[c,u,r,t,n]),null}function X(e){U(!1,`A <Route> is only ever to be used as the child of <Routes> element, never rendered directly. Please wrap your <Route> in a <Routes>.`)}function oo({basename:e=`/`,children:t=null,location:n,navigationType:r=`POP`,navigator:i,static:a=!1,useTransitions:o}){U(!Oa(),`You cannot render a <Router> inside another <Router>. You should never have more than one in your app.`);let s=e.replace(/^\/*/,`/`),c=d(()=>({basename:s,navigator:i,static:a,useTransitions:o,future:{}}),[s,i,a,o]);typeof n==`string`&&(n=Si(n));let{pathname:l=`/`,search:u=``,hash:f=``,state:p=null,key:m=`default`,mask:h}=n,g=d(()=>{let e=Ki(l,s);return e==null?null:{location:{pathname:e,search:u,hash:f,state:p,key:m,mask:h},navigationType:r}},[s,l,u,f,p,m,r,h]);return W(g!=null,`<Router basename="${s}"> is not able to match the URL "${l}${u}${f}" because it does not start with the basename, so the <Router> won't render anything.`),g==null?null:A(K.Provider,{value:c},A(ba.Provider,{children:t,value:g}))}function so({children:e,location:t}){return Ra(co(e),t)}function co(e,t=[]){let n=[];return l.forEach(e,(e,r)=>{if(!k(e))return;let i=[...t,r];if(e.type===b){n.push.apply(n,co(e.props.children,i));return}U(e.type===X,`[${typeof e.type==`string`?e.type:e.type.name}] is not a <Route> component. All component children of <Routes> must be a <Route> or <React.Fragment>`),U(!e.props.index||!e.props.children,`An index route cannot have child routes.`);let a={id:e.props.id||i.join(`-`),caseSensitive:e.props.caseSensitive,element:e.props.element,Component:e.props.Component,index:e.props.index,path:e.props.path,middleware:e.props.middleware,loader:e.props.loader,action:e.props.action,hydrateFallbackElement:e.props.hydrateFallbackElement,HydrateFallback:e.props.HydrateFallback,errorElement:e.props.errorElement,ErrorBoundary:e.props.ErrorBoundary,hasErrorBoundary:e.props.hasErrorBoundary===!0||e.props.ErrorBoundary!=null||e.props.errorElement!=null,shouldRevalidate:e.props.shouldRevalidate,handle:e.props.handle,lazy:e.props.lazy};e.props.children&&(a.children=co(e.props.children,i)),n.push(a)}),n}var lo=`get`,uo=`application/x-www-form-urlencoded`;function fo(e){return typeof HTMLElement<`u`&&e instanceof HTMLElement}function po(e){return fo(e)&&e.tagName.toLowerCase()===`button`}function mo(e){return fo(e)&&e.tagName.toLowerCase()===`form`}function ho(e){return fo(e)&&e.tagName.toLowerCase()===`input`}function go(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}function _o(e,t){return e.button===0&&(!t||t===`_self`)&&!go(e)}function vo(e=``){return new URLSearchParams(typeof e==`string`||Array.isArray(e)||e instanceof URLSearchParams?e:Object.keys(e).reduce((t,n)=>{let r=e[n];return t.concat(Array.isArray(r)?r.map(e=>[n,e]):[[n,r]])},[]))}function yo(e,t){let n=vo(e);return t&&t.forEach((e,r)=>{n.has(r)||t.getAll(r).forEach(e=>{n.append(r,e)})}),n}var bo=null;function xo(){if(bo===null)try{new FormData(document.createElement(`form`),0),bo=!1}catch{bo=!0}return bo}var So=new Set([`application/x-www-form-urlencoded`,`multipart/form-data`,`text/plain`]);function Co(e){return e!=null&&!So.has(e)?(W(!1,`"${e}" is not a valid \`encType\` for \`<Form>\`/\`<fetcher.Form>\` and will default to "${uo}"`),null):e}function wo(e,t){let n,r,i,a,o;if(mo(e)){let o=e.getAttribute(`action`);r=o?Ki(o,t):null,n=e.getAttribute(`method`)||lo,i=Co(e.getAttribute(`enctype`))||uo,a=new FormData(e)}else if(po(e)||ho(e)&&(e.type===`submit`||e.type===`image`)){let o=e.form;if(o==null)throw Error(`Cannot submit a <button> or <input type="submit"> without a <form>`);let s=e.getAttribute(`formaction`)||o.getAttribute(`action`);if(r=s?Ki(s,t):null,n=e.getAttribute(`formmethod`)||o.getAttribute(`method`)||lo,i=Co(e.getAttribute(`formenctype`))||Co(o.getAttribute(`enctype`))||uo,a=new FormData(o,e),!xo()){let{name:t,type:n,value:r}=e;if(n===`image`){let e=t?`${t}.`:``;a.append(`${e}x`,`0`),a.append(`${e}y`,`0`)}else t&&a.append(t,r)}}else if(fo(e))throw Error(`Cannot submit element that is not <form>, <button>, or <input type="submit|image">`);else n=lo,r=null,i=uo,o=e;return a&&i===`text/plain`&&(o=a,a=void 0),{action:r,method:n.toLowerCase(),encType:i,formData:a,body:o}}Object.getOwnPropertyNames(Object.prototype).sort().join(`\0`);var To={"&":`\\u0026`,">":`\\u003e`,"<":`\\u003c`,"\u2028":`\\u2028`,"\u2029":`\\u2029`},Eo=/[&><\u2028\u2029]/g;function Do(e){return e.replace(Eo,e=>To[e])}function Oo(e,t){if(e===!1||e==null)throw Error(t)}function ko(e,t,n,r){let i=typeof e==`string`?new URL(e,typeof window>`u`?`server://singlefetch/`:window.location.origin):e;return n?i.pathname.endsWith(`/`)?i.pathname=`${i.pathname}_.${r}`:i.pathname=`${i.pathname}.${r}`:i.pathname===`/`?i.pathname=`_root.${r}`:t&&Ki(i.pathname,t)===`/`?i.pathname=`${ea(t)}/_root.${r}`:i.pathname=`${ea(i.pathname)}.${r}`,i}async function Ao(e,t){if(e.id in t)return t[e.id];try{let n=await i(()=>import(e.module),[],import.meta.url);return t[e.id]=n,n}catch(t){return console.error(`Error loading route module \`${e.module}\`, reloading page...`),console.error(t),window.__reactRouterContext&&window.__reactRouterContext.isSpaMode,window.location.reload(),new Promise(()=>{})}}function jo(e){return e!=null&&typeof e.page==`string`}function Mo(e){return e==null?!1:e.href==null?e.rel===`preload`&&typeof e.imageSrcSet==`string`&&typeof e.imageSizes==`string`:typeof e.rel==`string`&&typeof e.href==`string`}async function No(e,t,n){return Ro((await Promise.all(e.map(async e=>{let r=t.routes[e.route.id];if(r){let e=await Ao(r,n);return e.links?e.links():[]}return[]}))).flat(1).filter(Mo).filter(e=>e.rel===`stylesheet`||e.rel===`preload`).map(e=>e.rel===`stylesheet`?{...e,rel:`prefetch`,as:`style`}:{...e,rel:`prefetch`}))}function Po(e,t,n,r,i,a){let o=(e,t)=>n[t]?e.route.id!==n[t].route.id:!0,s=(e,t)=>n[t].pathname!==e.pathname||n[t].route.path?.endsWith(`*`)&&n[t].params[`*`]!==e.params[`*`];return a===`assets`?t.filter((e,t)=>o(e,t)||s(e,t)):a===`data`?t.filter((t,a)=>{let c=r.routes[t.route.id];if(!c||!c.hasLoader)return!1;if(o(t,a)||s(t,a))return!0;if(t.route.shouldRevalidate){let r=t.route.shouldRevalidate({currentUrl:new URL(i.pathname+i.search+i.hash,window.origin),currentParams:n[0]?.params||{},nextUrl:new URL(e,window.origin),nextParams:t.params,defaultShouldRevalidate:!0});if(typeof r==`boolean`)return r}return!0}):[]}function Fo(e,t,{includeHydrateFallback:n}={}){return Io(e.map(e=>{let r=t.routes[e.route.id];if(!r)return[];let i=[r.module];return r.clientActionModule&&(i=i.concat(r.clientActionModule)),r.clientLoaderModule&&(i=i.concat(r.clientLoaderModule)),n&&r.hydrateFallbackModule&&(i=i.concat(r.hydrateFallbackModule)),r.imports&&(i=i.concat(r.imports)),i}).flat(1))}function Io(e){return[...new Set(e)]}function Lo(e){let t={},n=Object.keys(e).sort();for(let r of n)t[r]=e[r];return t}function Ro(e,t){let n=new Set,r=new Set(t);return e.reduce((e,i)=>{if(t&&!jo(i)&&i.as===`script`&&i.href&&r.has(i.href))return e;let a=JSON.stringify(Lo(i));return n.has(a)||(n.add(a),e.push({key:a,link:i})),e},[])}function zo(){let e=v(pa);return Oo(e,`You must render this element inside a <DataRouterContext.Provider> element`),e}function Bo(){let e=v(ma);return Oo(e,`You must render this element inside a <DataRouterStateContext.Provider> element`),e}var Vo=g(void 0);Vo.displayName=`FrameworkContext`;function Ho(){let e=v(Vo);return Oo(e,`You must render this element inside a <HydratedRouter> element`),e}function Uo(e,t){let n=v(Vo),[r,i]=f(!1),[a,o]=f(!1),{onFocus:c,onBlur:l,onMouseEnter:u,onMouseLeave:d,onTouchStart:p}=t,m=M(null);s(()=>{if(e===`render`&&o(!0),e===`viewport`){let e=new IntersectionObserver(e=>{e.forEach(e=>{o(e.isIntersecting)})},{threshold:.5});return m.current&&e.observe(m.current),()=>{e.disconnect()}}},[e]),s(()=>{if(r){let e=setTimeout(()=>{o(!0)},100);return()=>{clearTimeout(e)}}},[r]);let h=()=>{i(!0)},g=()=>{i(!1),o(!1)};return n?e===`intent`?[a,m,{onFocus:Wo(c,h),onBlur:Wo(l,g),onMouseEnter:Wo(u,h),onMouseLeave:Wo(d,g),onTouchStart:Wo(p,h)}]:[a,m,{}]:[!1,m,{}]}function Wo(e,t){return n=>{e&&e(n),n.defaultPrevented||t(n)}}function Go({page:e,...t}){let n=ga(),{nonce:r}=Ho(),{router:i}=zo(),a=d(()=>Ti(i.routes,e,i.basename),[i.routes,e,i.basename]);return a?(t.nonce==null&&r&&(t={...t,nonce:r}),A(n?qo:Jo,{page:e,matches:a,...t})):null}function Ko(e){let{manifest:t,routeModules:n}=Ho(),[r,i]=f([]);return s(()=>{let r=!1;return No(e,t,n).then(e=>{r||i(e)}),()=>{r=!0}},[e,t,n]),r}function qo({page:e,matches:t,...n}){let r=J(),{future:i}=Ho(),{basename:a}=zo();return A(b,null,d(()=>{if(e===r.pathname+r.search+r.hash)return[];let n=ko(e,a,i.v8_trailingSlashAwareDataRequests,`rsc`),o=!1,s=[];for(let e of t)typeof e.route.shouldRevalidate==`function`?o=!0:s.push(e.route.id);return o&&s.length>0&&n.searchParams.set(`_routes`,s.join(`,`)),[n.pathname+n.search]},[a,i.v8_trailingSlashAwareDataRequests,e,r,t]).map(e=>A(`link`,{key:e,rel:`prefetch`,as:`fetch`,href:e,...n})))}function Jo({page:e,matches:t,...n}){let r=J(),{future:i,manifest:a,routeModules:o}=Ho(),{basename:s}=zo(),{loaderData:c,matches:l}=Bo(),u=d(()=>Po(e,t,l,a,r,`data`),[e,t,l,a,r]),f=d(()=>Po(e,t,l,a,r,`assets`),[e,t,l,a,r]),p=d(()=>{if(e===r.pathname+r.search+r.hash)return[];let n=new Set,l=!1;if(t.forEach(e=>{let t=a.routes[e.route.id];!t||!t.hasLoader||(!u.some(t=>t.route.id===e.route.id)&&e.route.id in c&&o[e.route.id]?.shouldRevalidate||t.hasClientLoader?l=!0:n.add(e.route.id))}),n.size===0)return[];let d=ko(e,s,i.v8_trailingSlashAwareDataRequests,`data`);return l&&n.size>0&&d.searchParams.set(`_routes`,t.filter(e=>n.has(e.route.id)).map(e=>e.route.id).join(`,`)),[d.pathname+d.search]},[s,i.v8_trailingSlashAwareDataRequests,c,r,a,u,t,e,o]),m=d(()=>Fo(f,a),[f,a]),h=Ko(f);return A(b,null,p.map(e=>A(`link`,{key:e,rel:`prefetch`,as:`fetch`,href:e,...n})),m.map(e=>A(`link`,{key:e,rel:`modulepreload`,href:e,...n})),h.map(({key:e,link:t})=>A(`link`,{key:e,nonce:n.nonce,...t,crossOrigin:t.crossOrigin??n.crossOrigin})))}function Yo(...e){return t=>{e.forEach(e=>{typeof e==`function`?e(t):e!=null&&(e.current=t)})}}var Xo=typeof window<`u`&&window.document!==void 0&&window.document.createElement!==void 0;try{Xo&&(window.__reactRouterVersion=`7.18.0`)}catch{}function Zo({basename:e,children:t,useTransitions:n,window:r}){let i=M();i.current??=_i({window:r,v5Compat:!0});let a=i.current,[o,s]=f({action:a.action,location:a.location}),c=p(e=>{n===!1?s(e):u(()=>s(e))},[n]);return x(()=>a.listen(c),[a,c]),A(oo,{basename:e,children:t,location:o.location,navigationType:o.action,navigator:a,useTransitions:n})}function Qo({basename:e,children:t,history:n,useTransitions:r}){let[i,a]=f({action:n.action,location:n.location}),o=p(e=>{r===!1?a(e):u(()=>a(e))},[r]);return x(()=>n.listen(o),[n,o]),A(oo,{basename:e,children:t,location:i.location,navigationType:i.action,navigator:n,useTransitions:r})}Qo.displayName=`unstable_HistoryRouter`;var $o=o(function({onClick:e,discover:t=`render`,prefetch:n=`none`,relative:r,reloadDocument:i,replace:a,mask:o,state:s,target:c,to:l,preventScrollReset:u,viewTransition:d,defaultShouldRevalidate:f,...p},m){let{basename:h,navigator:g,useTransitions:_}=v(K),y=typeof l==`string`&&fi.test(l),x=ca(l,h);l=x.to;let S=Da(l,{relative:r}),C=J(),w=null;if(o){let e=Qi(o,[],C.mask?C.mask.pathname:`/`,!0);h!==`/`&&(e.pathname=e.pathname===`/`?h:G([h,e.pathname])),w=g.createHref(e)}let[T,E,D]=Uo(n,p),O=os(l,{replace:a,mask:o,state:s,target:c,preventScrollReset:u,relative:r,viewTransition:d,defaultShouldRevalidate:f,useTransitions:_});function k(t){e&&e(t),t.defaultPrevented||O(t)}let j=!(x.isExternal||i),M=A(`a`,{...p,...D,href:(j?w:void 0)||x.absoluteURL||S,onClick:j?k:e,ref:Yo(m,E),target:c,"data-discover":!y&&t===`render`?`true`:void 0});return T&&!y?A(b,null,M,A(Go,{page:S})):M});$o.displayName=`Link`;var es=o(function({"aria-current":e=`page`,caseSensitive:t=!1,className:n=``,end:r=!1,style:i,to:a,viewTransition:o,children:s,...c},l){let u=La(a,{relative:c.relative}),d=J(),f=v(ma),{navigator:p,basename:m}=v(K),h=f!=null&&_s(u)&&o===!0,g=p.encodeLocation?p.encodeLocation(u).pathname:u.pathname,_=d.pathname,y=f&&f.navigation&&f.navigation.location?f.navigation.location.pathname:null;t||(_=_.toLowerCase(),y=y?y.toLowerCase():null,g=g.toLowerCase()),y&&m&&(y=Ki(y,m)||y);let b=g!==`/`&&g.endsWith(`/`)?g.length-1:g.length,x=_===g||!r&&_.startsWith(g)&&_.charAt(b)===`/`,S=y!=null&&(y===g||!r&&y.startsWith(g)&&y.charAt(g.length)===`/`),C={isActive:x,isPending:S,isTransitioning:h},w=x?e:void 0,T;T=typeof n==`function`?n(C):[n,x?`active`:null,S?`pending`:null,h?`transitioning`:null].filter(Boolean).join(` `);let E=typeof i==`function`?i(C):i;return A($o,{...c,"aria-current":w,className:T,ref:l,style:E,to:a,viewTransition:o},typeof s==`function`?s(C):s)});es.displayName=`NavLink`;var ts=o(({discover:e=`render`,fetcherKey:t,navigate:n,reloadDocument:r,replace:i,state:a,method:o=lo,action:s,onSubmit:c,relative:l,preventScrollReset:d,viewTransition:f,defaultShouldRevalidate:p,...m},h)=>{let{useTransitions:g}=v(K),_=us(),y=ds(s,{relative:l}),b=o.toLowerCase()===`get`?`get`:`post`,x=typeof s==`string`&&fi.test(s);return A(`form`,{ref:h,method:b,action:y,onSubmit:r?c:e=>{if(c&&c(e),e.defaultPrevented)return;e.preventDefault();let r=e.nativeEvent.submitter,s=r?.getAttribute(`formmethod`)||o,m=()=>_(r||e.currentTarget,{fetcherKey:t,method:s,navigate:n,replace:i,state:a,relative:l,preventScrollReset:d,viewTransition:f,defaultShouldRevalidate:p});g&&n!==!1?u(()=>m()):m()},...m,"data-discover":!x&&e===`render`?`true`:void 0})});ts.displayName=`Form`;function ns({getKey:e,storageKey:t,...n}){let r=v(Vo),{basename:i}=v(K),a=J(),o=eo();hs({getKey:e,storageKey:t});let s=d(()=>{if(!r||!e)return null;let t=ms(a,o,i,e);return t===a.key?null:t},[]);if(!r||r.isSpaMode)return null;let c=((e,t)=>{if(!window.history.state||!window.history.state.key){let e=Math.random().toString(32).slice(2);window.history.replaceState({key:e},``)}try{let n=JSON.parse(sessionStorage.getItem(e)||`{}`)[t||window.history.state.key];typeof n==`number`&&window.scrollTo(0,n)}catch(t){console.error(t),sessionStorage.removeItem(e)}}).toString();return n.nonce==null&&r?.nonce&&(n.nonce=r.nonce),A(`script`,{...n,suppressHydrationWarning:!0,dangerouslySetInnerHTML:{__html:`(${c})(${Do(JSON.stringify(t||fs))}, ${Do(JSON.stringify(s))})`}})}ns.displayName=`ScrollRestoration`;function rs(e){return`${e} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function is(e){let t=v(pa);return U(t,rs(e)),t}function as(e){let t=v(ma);return U(t,rs(e)),t}function os(e,{target:t,replace:n,mask:r,state:i,preventScrollReset:a,relative:o,viewTransition:s,defaultShouldRevalidate:c,useTransitions:l}={}){let d=Ma(),f=J(),m=La(e,{relative:o});return p(p=>{if(_o(p,t)){p.preventDefault();let t=n===void 0?xi(f)===xi(m):n,h=()=>d(e,{replace:t,mask:r,state:i,preventScrollReset:a,relative:o,viewTransition:s,defaultShouldRevalidate:c});l?u(()=>h()):h()}},[f,d,m,n,r,i,t,e,a,o,s,c,l])}function ss(e){W(typeof URLSearchParams<`u`,"You cannot use the `useSearchParams` hook in a browser that does not support the URLSearchParams API. If you need to support Internet Explorer 11, we recommend you load a polyfill such as https://github.com/ungap/url-search-params.");let t=M(vo(e)),n=M(!1),r=J(),i=d(()=>yo(r.search,n.current?null:t.current),[r.search]),a=Ma();return[i,p((e,t)=>{let r=vo(typeof e==`function`?e(new URLSearchParams(i)):e);n.current=!0,a(`?`+r,t)},[a,i])]}var cs=0,ls=()=>`__${String(++cs)}__`;function us(){let{router:e}=is(`useSubmit`),{basename:t}=v(K),n=Qa(),r=e.fetch,i=e.navigate;return p(async(e,a={})=>{let{action:o,method:s,encType:c,formData:l,body:u}=wo(e,t);a.navigate===!1?await r(a.fetcherKey||ls(),n,a.action||o,{defaultShouldRevalidate:a.defaultShouldRevalidate,preventScrollReset:a.preventScrollReset,formData:l,body:u,formMethod:a.method||s,formEncType:a.encType||c,flushSync:a.flushSync}):await i(a.action||o,{defaultShouldRevalidate:a.defaultShouldRevalidate,preventScrollReset:a.preventScrollReset,formData:l,body:u,formMethod:a.method||s,formEncType:a.encType||c,replace:a.replace,state:a.state,fromRouteId:n,flushSync:a.flushSync,viewTransition:a.viewTransition})},[r,i,t,n])}function ds(e,{relative:t}={}){let{basename:n}=v(K),r=v(q);U(r,`useFormAction must be used inside a RouteContext`);let[i]=r.matches.slice(-1),a={...La(e||`.`,{relative:t})},o=J();if(e==null){a.search=o.search;let e=new URLSearchParams(a.search),t=e.getAll(`index`);if(t.some(e=>e===``)){e.delete(`index`),t.filter(e=>e).forEach(t=>e.append(`index`,t));let n=e.toString();a.search=n?`?${n}`:``}}return(!e||e===`.`)&&i.route.index&&(a.search=a.search?a.search.replace(/^\?/,`?index&`):`?index`),n!==`/`&&(a.pathname=a.pathname===`/`?n:G([n,a.pathname])),xi(a)}var fs=`react-router-scroll-positions`,ps={};function ms(e,t,n,r){let i=null;return r&&(i=r(n===`/`?e:{...e,pathname:Ki(e.pathname,n)||e.pathname},t)),i??=e.key,i}function hs({getKey:e,storageKey:t}={}){let{router:n}=is(`useScrollRestoration`),{restoreScrollPosition:r,preventScrollReset:i}=as(`useScrollRestoration`),{basename:a}=v(K),o=J(),c=eo(),l=$a();s(()=>(window.history.scrollRestoration=`manual`,()=>{window.history.scrollRestoration=`auto`}),[]),gs(p(()=>{if(l.state===`idle`){let t=ms(o,c,a,e);ps[t]=window.scrollY}try{sessionStorage.setItem(t||fs,JSON.stringify(ps))}catch(e){W(!1,`Failed to save scroll positions in sessionStorage, <ScrollRestoration /> will not work properly (${e}).`)}window.history.scrollRestoration=`auto`},[l.state,e,a,o,c,t])),typeof document<`u`&&(x(()=>{try{let e=sessionStorage.getItem(t||fs);e&&(ps=JSON.parse(e))}catch{}},[t]),x(()=>{let t=n?.enableScrollRestoration(ps,()=>window.scrollY,e?(t,n)=>ms(t,n,a,e):void 0);return()=>t&&t()},[n,a,e]),x(()=>{if(r!==!1){if(typeof r==`number`){window.scrollTo(0,r);return}try{if(o.hash){let e=document.getElementById(decodeURIComponent(o.hash.slice(1)));if(e){e.scrollIntoView();return}}}catch{W(!1,`"${o.hash.slice(1)}" is not a decodable element ID. The view will not scroll to it.`)}i!==!0&&window.scrollTo(0,0)}},[o,r,i]))}function gs(e,t){let{capture:n}=t||{};s(()=>{let t=n==null?void 0:{capture:n};return window.addEventListener(`pagehide`,e,t),()=>{window.removeEventListener(`pagehide`,e,t)}},[e,n])}function _s(e,{relative:t}={}){let n=v(_a);U(n!=null,"`useViewTransitionState` must be used within `react-router-dom`'s `RouterProvider`. Did you accidentally import `RouterProvider` from `react-router`?");let{basename:r}=is(`useViewTransitionState`),i=La(e,{relative:t});if(!n.isTransitioning)return!1;let a=Ki(n.currentLocation.pathname,r)||n.currentLocation.pathname,o=Ki(n.nextLocation.pathname,r)||n.nextLocation.pathname;return Hi(i.pathname,o)!=null||Hi(i.pathname,a)!=null}var vs=e(t(((e,t)=>{t.exports={area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0}}))()),ys=/\s([^'"/\s><]+?)[\s/>]|([^\s=]+)=\s?(".*?"|'.*?')/g;function bs(e){var t={type:`tag`,name:``,voidElement:!1,attrs:{},children:[]},n=e.match(/<\/?([^\s]+?)[/\s>]/);if(n&&(t.name=n[1],(vs.default[n[1]]||e.charAt(e.length-2)===`/`)&&(t.voidElement=!0),t.name.startsWith(`!--`))){var r=e.indexOf(`-->`);return{type:`comment`,comment:r===-1?``:e.slice(4,r)}}for(var i=new RegExp(ys),a=null;(a=i.exec(e))!==null;)if(a[0].trim())if(a[1]){var o=a[1].trim(),s=[o,``];o.indexOf(`=`)>-1&&(s=o.split(`=`)),t.attrs[s[0]]=s[1],i.lastIndex--}else a[2]&&(t.attrs[a[2]]=a[3].trim().substring(1,a[3].length-1));return t}var xs=/<[a-zA-Z0-9\-\!\/](?:"[^"]*"|'[^']*'|[^'">])*>/g,Ss=/^\s*$/,Cs=Object.create(null);function ws(e,t){switch(t.type){case`text`:return e+t.content;case`tag`:return e+=`<`+t.name+(t.attrs?function(e){var t=[];for(var n in e)t.push(n+`="`+e[n]+`"`);return t.length?` `+t.join(` `):``}(t.attrs):``)+(t.voidElement?`/>`:`>`),t.voidElement?e:e+t.children.reduce(ws,``)+`</`+t.name+`>`;case`comment`:return e+`<!--`+t.comment+`-->`}}var Ts={parse:function(e,t){t||={},t.components||=Cs;var n,r=[],i=[],a=-1,o=!1;if(e.indexOf(`<`)!==0){var s=e.indexOf(`<`);r.push({type:`text`,content:s===-1?e:e.substring(0,s)})}return e.replace(xs,function(s,c){if(o){if(s!==`</`+n.name+`>`)return;o=!1}var l,u=s.charAt(1)!==`/`,d=s.startsWith(`<!--`),f=c+s.length,p=e.charAt(f);if(d){var m=bs(s);return a<0?(r.push(m),r):((l=i[a]).children.push(m),r)}if(u&&(a++,(n=bs(s)).type===`tag`&&t.components[n.name]&&(n.type=`component`,o=!0),n.voidElement||o||!p||p===`<`||n.children.push({type:`text`,content:e.slice(f,e.indexOf(`<`,f))}),a===0&&r.push(n),(l=i[a-1])&&l.children.push(n),i[a]=n),(!u||n.voidElement)&&(a>-1&&(n.voidElement||n.name===s.slice(2,-1))&&(a--,n=a===-1?r:i[a]),!o&&p!==`<`&&p)){l=a===-1?r:i[a].children;var h=e.indexOf(`<`,f),g=e.slice(f,h===-1?void 0:h);Ss.test(g)&&(g=` `),(h>-1&&a+l.length>=0||g!==` `)&&l.push({type:`text`,content:g})}}),r},stringify:function(e){return e.reduce(function(e,t){return e+ws(``,t)},``)}};a();var Es=(e,t)=>{if(!e)return!1;let n=e.props?.children??e.children;return t?n.length>0:!!n},Ds=e=>{if(!e)return[];let t=e.props?.children??e.children;return e.props?.i18nIsDynamicList?ks(t):t},Os=e=>Array.isArray(e)&&e.every(k),ks=e=>Array.isArray(e)?e:[e],As=(e,t)=>{let n={...t};return n.props={...t.props,...e.props},n},js=e=>{let t={};if(!e)return t;let n=e=>{ks(e).forEach(e=>{ri(e)||(Es(e)?n(Ds(e)):ci(e)&&!k(e)&&Object.assign(t,e))})};return n(e),t},Ms=(e,t,n,r)=>{if(!e)return``;let i=``,a=ks(e),o=t?.transSupportBasicHtmlNodes?t.transKeepBasicHtmlNodesFor??[]:[];return a.forEach((e,a)=>{if(ri(e)){i+=`${e}`;return}if(k(e)){let{props:s,type:c}=e,l=Object.keys(s).length,u=o.indexOf(c)>-1,d=s.children;if(!d&&u&&!l){i+=`<${c}/>`;return}if(!d&&(!u||l)||s.i18nIsDynamicList){i+=`<${a}></${a}>`;return}if(u&&l<=1){let e=ri(d)?d:Ms(d,t,n,r);i+=`<${c}>${e}</${c}>`;return}let f=Ms(d,t,n,r);i+=`<${a}>${f}</${a}>`;return}if(e===null){ai(n,`TRANS_NULL_VALUE`,`Passed in a null value as child`,{i18nKey:r});return}if(ci(e)){let{format:t,...a}=e,o=Object.keys(a);if(o.length===1){let e=t?`${o[0]}, ${t}`:o[0];i+=`{{${e}}}`;return}ai(n,`TRANS_INVALID_OBJ`,`Invalid child - Object should only have keys {{ value, format }} (format is optional).`,{i18nKey:r,child:e});return}ai(n,`TRANS_INVALID_VAR`,`Passed in a variable like {number} - pass variables for interpolation as full objects like {{number}}.`,{i18nKey:r,child:e})}),i},Ns=(e,t=[],n={})=>{if(!e)return e;let r=Object.keys(n),i=[...t,...r],a=``,o=0;for(;o<e.length;)if(e[o]===`<`){let t=!1,n=e.slice(o).match(/^<\/(\d+|[a-zA-Z][a-zA-Z0-9_-]*)>/);if(n){let e=n[1];(/^\d+$/.test(e)||i.includes(e))&&(t=!0,a+=n[0],o+=n[0].length)}if(!t){let n=e.slice(o).match(/^<(\d+|[a-zA-Z][a-zA-Z0-9_-]*)(\s+[\w-]+(?:=(?:"[^"]*"|'[^']*'|[^\s>]+))?)*\s*(\/)?>/);if(n){let e=n[1];(/^\d+$/.test(e)||i.includes(e))&&(t=!0,a+=n[0],o+=n[0].length)}}t||(a+=`&lt;`,o+=1)}else a+=e[o],o+=1;return a},Ps=(e,t,n,r,i,a,o)=>{if(n===``)return[];let s=i.transKeepBasicHtmlNodesFor||[],u=n&&new RegExp(s.map(e=>`<${e}`).join(`|`)).test(n);if(!e&&!t&&!u&&!o)return[n];let d=t??{},f=e=>{ks(e).forEach(e=>{ri(e)||(Es(e)?f(Ds(e)):ci(e)&&!k(e)&&Object.assign(d,e))})};f(e);let p=Ns(n,s,d),m=Ts.parse(`<0>${p}</0>`),h={...d,...a},g=(e,t,n)=>{let r=Ds(e),i=v(r,t.children,n);return Os(r)&&i.length===0||e.props?.i18nIsDynamicList?r:i},_=(e,t,n,r,i)=>{e.dummy?(e.children=t,n.push(c(e,{key:r},i?void 0:t))):n.push(...l.map([e],e=>{if(e.type===b||e.props?.i18nIsDynamicList!==void 0){let n={key:r};return e&&e.props&&Object.keys(e.props).forEach(t=>{t===`children`||t===`i18nIsDynamicList`||(n[t]=e.props[t])}),A(e.type,n,i?null:t)}let n={key:r};return e&&e.props&&Object.keys(e.props).forEach(t=>{t===`ref`||t===`children`||(n[t]=e.props[t])}),c(e,n,i?null:t)}))},v=(e,n,a)=>{let c=ks(e),l=ks(n),d={};return l.reduce((e,n,l)=>{let f=n.children?.[0]?.content&&r.services.interpolator.interpolate(n.children[0].content,h,r.language);if(n.type===`tag`){let p=c[parseInt(n.name,10)];!p&&t&&(p=t[n.name]),a.length===1&&!p&&(p=a[0][n.name]),p||={};let m={...n.attrs};o&&Object.keys(m).forEach(e=>{let t=m[e];ri(t)&&(m[e]=si(t))});let y=Object.keys(m).length===0?p:As({props:m},p),b=k(y),x=b&&Es(n,!0)&&!n.voidElement,S=u&&ci(y)&&y.dummy&&!b,C=ci(t)&&Object.hasOwnProperty.call(t,n.name);if(ri(y)){let t=r.services.interpolator.interpolate(y,h,r.language);e.push(t)}else if(Es(y)||x)_(y,g(y,n,a),e,l);else if(S)_(y,v(c,n.children,a),e,l);else if(Number.isNaN(parseFloat(n.name)))if(C)_(y,g(y,n,a),e,l,n.voidElement);else if(i.transSupportBasicHtmlNodes&&s.indexOf(n.name)>-1)if(n.voidElement)e.push(A(n.name,{key:`${n.name}-${l}`}));else{let t=d[n.name]||0;d[n.name]=t+1;let r,i=0;for(let e=0;e<c.length;e+=1){let a=c[e];if(k(a)&&a.type===n.name){if(i===t){r=a;break}i+=1}}let o=v(r?ks(Ds(r)):c,n.children,a);e.push(A(n.name,{key:`${n.name}-${l}`},o))}else if(n.voidElement)e.push(`<${n.name} />`);else{let t=v(c,n.children,a);e.push(`<${n.name}>${t}</${n.name}>`)}else if(ci(y)&&!b){let t=n.children[0]?f:null;t&&e.push(t)}else _(y,f,e,l,n.children.length!==1||!f)}else if(n.type===`text`){let t=i.transWrapTextNodes,a=typeof i.unescape==`function`?i.unescape:ni().unescape,s=o?a(r.services.interpolator.interpolate(n.content,h,r.language)):r.services.interpolator.interpolate(n.content,h,r.language);t?e.push(A(t,{key:`${n.name}-${l}`},s)):e.push(s)}return e},[])};return Ds(v([{dummy:!0,children:e||[]}],m,ks(e||[]))[0])},Fs=(e,t,n)=>{let r=e.key||t,i=c(e,{key:r});if(!i.props||!i.props.children||n.indexOf(`${t}/>`)<0&&n.indexOf(`${t} />`)<0)return i;function a(){return A(b,null,i)}return A(a,{key:r})},Is=(e,t)=>e.map((e,n)=>Fs(e,n,t)),Ls=(e,t)=>{let n={};return Object.keys(e).forEach(r=>{Object.assign(n,{[r]:Fs(e[r],r,t)})}),n},Rs=(e,t,n,r)=>e?Array.isArray(e)?Is(e,t):ci(e)?Ls(e,t):(li(n,`TRANS_INVALID_COMPONENTS`,`<Trans /> "components" prop expects an object or array`,{i18nKey:r}),null):null,zs=e=>!ci(e)||Array.isArray(e)?!1:Object.keys(e).reduce((e,t)=>e&&Number.isNaN(Number.parseFloat(t)),!0);function Bs({children:e,count:t,parent:n,i18nKey:r,context:i,tOptions:a={},values:o,defaults:s,components:c,ns:l,i18n:u,t:d,shouldUnescape:f,...p}){let m=u||ii();if(!m)return li(m,`NO_I18NEXT_INSTANCE`,`Trans: You need to pass in an i18next instance using i18nextReactModule`,{i18nKey:r}),e;let h=d||m.t.bind(m)||(e=>e),g={...ni(),...m.options?.react},_=l||h.ns||m.options?.defaultNS;_=ri(_)?[_]:_||[`translation`];let{transDefaultProps:v}=g,y=v?.tOptions?{...v.tOptions,...a}:a,b=f??v?.shouldUnescape,x=v?.values?{...v.values,...o}:o,S=v?.components?{...v.components,...c}:c,C=Ms(e,g,m,r),w=s||y?.defaultValue||C||g.transEmptyNodeValue||(typeof r==`function`?ti(r):r),{hashTransKey:T}=g,E=r||(T?T(C||w):C||w);o=m.options?.interpolation?.defaultVariables?x&&Object.keys(x).length>0?{...x,...m.options.interpolation.defaultVariables}:{...m.options.interpolation.defaultVariables}:x;let D=js(e);D&&typeof D.count==`number`&&t===void 0&&(t=D.count);let O=o||t!==void 0&&!m.options?.interpolation?.alwaysFormat||!e?y.interpolation:{interpolation:{...y.interpolation,prefix:`#$?`,suffix:`?$#`}},k={...y,context:i||y.context,count:t,...o,...O,defaultValue:w,ns:_},j=E?h(E,k):w;j===E&&w&&(j=w);let M=Rs(S,j,m,r),N=M||e,P=null;zs(M)&&(P=M,N=e);let F=Ps(N,P,j,m,g,k,b),I=n??g.defaultTransParent;return I?A(I,p,F):F}a();function Vs({children:e,count:t,parent:n,i18nKey:r,context:i,tOptions:a={},values:o,defaults:s,components:c,ns:l,i18n:u,t:d,shouldUnescape:f,...p}){let{i18n:m,defaultNS:h}=v(oi)||{},g=u||m||ii(),_=d||g?.t.bind(g);return Bs({children:e,count:t,parent:n,i18nKey:r,context:i,tOptions:a,values:o,defaults:s,components:c,ns:l||_?.ns||h||g?.options?.defaultNS,i18n:g,t:d,shouldUnescape:f,...p})}function Hs(e,t){return t.map(t=>({subject:{kind:`device`,deviceId:e},key:t.key,scope:t.scope}))}function Us({deviceId:e}){let{t}=H(),{presence:n,list:r}=Pr(e);return n===`absent`?null:n===`unknown`?P(Yn,{message:t(`deviceQuickDetail.historyUnknown`,`Could not tell whether this device has recorded history.`)}):n===`pending`||r.status===`pending`?P(Hn,{className:`h-24 w-full`,"aria-busy":`true`}):r.status===`error`?P(Yn,{title:t(`deviceQuickDetail.historyUnknown`,`Could not tell whether this device has recorded history.`),message:r.error}):r.data.length===0?null:y(`section`,{className:`flex flex-col gap-2`,"aria-label":t(`deviceQuickDetail.tabHistory`,`History`),children:[P(`div`,{className:`flex justify-end`,children:P($o,{to:Jr(Hs(e,r.data)),className:`text-xs text-primary hover:underline`,children:t(`deviceQuickDetail.openHistory`,`Open full history`)})}),P(xr,{deviceId:e})]})}function Ws(e,t){return e===`present`&&t.status===`ok`&&(t.data?.length??0)>0}var Gs={streaming:{icon:mn,labelKey:`capabilityBadges.streaming`},detection:{icon:pe,labelKey:`capabilityBadges.detection`},recording:{icon:ke,labelKey:`capabilityBadges.recording`},audio:{icon:ye,labelKey:`capabilityBadges.audio`},snapshot:{icon:L,labelKey:`capabilityBadges.snapshot`},motion:{icon:Xe,labelKey:`capabilityBadges.motion`},ptz:{icon:Ye,labelKey:`capabilityBadges.ptz`},webrtc:{icon:$e,labelKey:`capabilityBadges.webrtc`},onvif:{icon:we,labelKey:`capabilityBadges.onvif`},analytics:{icon:be,labelKey:`capabilityBadges.analytics`},"battery-operated":{icon:_e,labelKey:`capabilityBadges.battery`},"native-snapshot":{icon:L,labelKey:`capabilityBadges.nativeSnapshot`},"pan-tilt-zoom":{icon:Ye,labelKey:`capabilityBadges.ptz`},"two-way-audio":{icon:ye,labelKey:`capabilityBadges.twoWayAudio`},"doorbell-button":{icon:se,labelKey:`capabilityBadges.doorbell`},rebootable:{icon:Ee,labelKey:`capabilityBadges.rebootable`},"vacuum-has-map":{icon:un,labelKey:`capabilityBadges.map`},"vacuum-has-ai":{icon:Se,labelKey:`capabilityBadges.aiObstacle`},"mower-has-map":{icon:un,labelKey:`capabilityBadges.map`},"mower-has-targeted-mowing":{icon:ne,labelKey:`capabilityBadges.targetedMowing`}},Ks=Fe;function qs({capabilities:e,showLabels:t=!1}){let{t:n}=H();return P(`div`,{className:`flex items-center gap-1 flex-wrap`,children:e.map(e=>{let r=Gs[e],i=r?.icon??Ks,a=r?n(r.labelKey):e;return y(`span`,{className:`inline-flex items-center gap-1 rounded-md bg-surface-hover px-1.5 py-0.5 text-[10px] text-foreground-subtle`,title:a,children:[P(i,{className:`h-3 w-3`}),t&&P(`span`,{children:a})]},e)})})}a();var Js={amcrest:{icon:cn,color:`#3b82f6`,label:`Amcrest`},hikvision:{icon:De,color:`#a855f7`,label:`Hikvision`},reolink:{icon:$e,color:`#06b6d4`,label:`Reolink`},homeassistant:{icon:Ze,color:`#22d3ee`,label:`Home Assistant`},rtsp:{icon:Ne,color:`#78716c`,label:`RTSP`},onvif:{icon:Ne,color:`#78716c`,label:`ONVIF`}},Ys={sm:`h-4 w-4`,md:`h-5 w-5`,lg:`h-6 w-6`},Xs={sm:`h-7 w-7`,md:`h-8 w-8`,lg:`h-10 w-10`};function Zs(e){let t=e.toLowerCase();return t.startsWith(`provider-`)?t.slice(9):t}function Qs(e){return Js[Zs(e)]??{icon:cn,color:`#78716c`,label:e}}function $s({type:e,size:t=`md`,showLabel:n}){let r=Qs(e),i=r.icon,[a,o]=f(!1),s=ui(e);return y(`div`,{className:`flex items-center gap-2`,children:[P(`div`,{className:`flex items-center justify-center rounded-lg ${Xs[t]}`,style:{backgroundColor:`${r.color}15`},children:a||!s?P(i,{className:Ys[t],style:{color:r.color}}):P(`img`,{src:s,alt:r.label,className:Ys[t],onError:()=>o(!0)})}),n&&P(`span`,{className:`text-xs font-medium text-foreground-subtle`,children:r.label})]})}function ec({label:e,value:t,layout:n=`inline`}){return n===`stacked`?y(`div`,{className:`min-w-0 flex flex-col gap-0.5 px-0.5`,children:[P(`span`,{className:`text-[11px] text-foreground-subtle`,children:e}),P(`div`,{className:`min-w-0 text-[11px] text-foreground`,children:t})]}):y(`div`,{className:`${he} flex items-start gap-2 sm:gap-3`,children:[P(`span`,{className:`w-20 sm:w-28 flex-shrink-0 text-[11px] text-foreground-subtle`,children:e}),P(`div`,{className:`flex-1 min-w-0 text-[11px] text-foreground`,children:t})]})}a();function tc(e){return wr({addonId:e,projection:`slim`})}function nc(e){return ir({deviceId:e},{enabled:Number.isFinite(e)})}var rc=3e4,ic=2e3;function ac(e){let t=M(0);return t.current===0&&(t.current=Date.now()),zr({parentDeviceId:e},{enabled:Number.isFinite(e),staleTime:0,refetchOnMount:`always`,refetchInterval:e=>{let n=e.state.data;return n&&n.length>0||Date.now()-t.current>=rc?!1:ic}})}a();function oc({deviceId:e}){let{t}=H(),n=j(),{data:r}=nc(e),{data:i}=ac(e),[a,o]=f(null),s=br({onSuccess:()=>{o(null),n.invalidateQueries({queryKey:[[`deviceManager`]]})},onError:e=>{o(`Could not change primary child: ${e.message}`)}});if(r==null||String(r.type??``)!==Ht.Container)return null;let c=(i??[]).map(e=>({id:e.id,stableId:e.stableId,type:e.type,name:e.name,...e.sourceInfo?{sourceInfo:{id:e.sourceInfo.id}}:{}}));if(c.length<=1)return null;let l=Zn(c,typeof r.linkDeviceId==`number`?r.linkDeviceId:null,typeof r.primaryChildEntityId==`string`?r.primaryChildEntityId:null),u=l===null?c[0].id:l.id;return y(E,{children:[P(ec,{label:t(`shared.primaryChildRow.primaryChild`,`Primary child`),value:P(On,{childrenList:c,selectedId:u,onSetPrimary:t=>s.mutate({deviceId:e,primaryChildEntityId:t}),disabled:s.isPending})}),a!==null&&P(`p`,{role:`alert`,className:`px-3 sm:px-4 py-1.5 text-[11px] text-danger`,children:a})]})}a();var sc=[`manufacturer`,`model`,`hardware`,`firmware`,`serialNumber`,`uid`,`mac`,`itemNo`];function cc(e){return e.replace(/([a-z])([A-Z])/g,`$1 $2`).replace(/^./,e=>e.toUpperCase())}function lc(e){return e==null?`—`:typeof e==`string`||typeof e==`number`||typeof e==`boolean`?String(e):JSON.stringify(e)}function uc(){let{t:e}=H(),t=Gn(),n=Xr(),{data:r}=ir({deviceId:t??0},{enabled:t!==null}),{data:i}=kr({deviceId:t??0},{enabled:t!==null}),a=r??n??null,[o,s]=f(`identity`);if(t===null||!a)return null;let c=String(a.stableId??``),l=String(a.addonId??``),u=typeof a.integrationId==`string`&&a.integrationId.length>0?a.integrationId:null,d=typeof a.parentDeviceId==`number`?a.parentDeviceId:null,p=a.features??[],m=new Set([`device-status`,`feature-probe`,`device-ops`]),h=(i?.entries??[]).filter(e=>e.kind===`native`&&!m.has(e.capName)).map(e=>e.capName),g=p.length>0?p:h,_=a.metadata??null,v=_!==null&&Object.keys(_).length>0;return y(`div`,{className:`rounded-lg border border-border bg-surface overflow-hidden`,children:[y(`div`,{className:`border-b border-border px-3 sm:px-4 py-2 flex items-center justify-between gap-3`,children:[P(`h2`,{className:`text-[11px] font-semibold text-foreground uppercase tracking-wider`,children:e(`overviewAdapters.deviceInfoAdapter.deviceInfo`,`Device Info`)}),v&&y(`div`,{className:`flex items-center gap-1 rounded-md bg-surface-hover p-0.5`,children:[P(dc,{active:o===`identity`,onClick:()=>s(`identity`),label:e(`overviewAdapters.deviceInfoAdapter.identity`,`Identity`)}),P(dc,{active:o===`hardware`,onClick:()=>s(`hardware`),label:e(`overviewAdapters.deviceInfoAdapter.hardware`,`Hardware`)})]})]}),(!v||o===`identity`)&&y(`div`,{className:`divide-y divide-border`,children:[P(ec,{label:`ID`,value:y(`span`,{className:`font-mono text-[11px] text-foreground`,children:[`#${t}`,y(`span`,{className:`ml-1.5 text-foreground-subtle`,children:[`(`,c,`)`]})]})}),P(oc,{deviceId:t}),u!==null&&P(ec,{label:e(`overviewAdapters.deviceInfoAdapter.integration`,`Integration`),value:P(`span`,{className:`font-mono text-[11px]`,children:u})}),d!==null&&P(ec,{label:e(`overviewAdapters.deviceInfoAdapter.parent`,`Parent`),value:P(`span`,{className:`font-mono text-[11px]`,children:`#${String(d)}`})}),P(ec,{label:e(`overviewAdapters.deviceInfoAdapter.provider`,`Provider`),value:P($s,{type:l,size:`sm`,showLabel:!0})}),P(ec,{label:e(`overviewAdapters.deviceInfoAdapter.capabilities`,`Capabilities`),value:g.length>0?P(qs,{capabilities:g,showLabels:!0}):P(`span`,{className:`text-[11px] text-foreground-subtle`,children:e(`overviewAdapters.deviceInfoAdapter.none`,`None`)})})]}),v&&o===`hardware`&&P(fc,{metadata:_})]})}function dc({active:e,onClick:t,label:n}){return P(`button`,{type:`button`,onClick:t,className:`px-2 py-0.5 rounded text-[10px] font-medium transition-colors ${e?`bg-surface text-foreground shadow-sm`:`text-foreground-subtle hover:text-foreground`}`,children:n})}function fc({metadata:e}){let{t}=H(),n=sc.filter(t=>t in e),r=Object.keys(e).filter(e=>!sc.includes(e)).toSorted(),i=[...n,...r];return y(`div`,{children:[P(`div`,{className:`px-3 sm:px-4 py-1.5 text-[10px] text-foreground-subtle border-b border-border bg-surface-subtle/40`,children:t(`overviewAdapters.deviceInfoAdapter.autoPopulatedByTheDriver`,`Auto-populated by the driver on every connect. Read-only.`)}),P(`div`,{className:`divide-y divide-border`,children:i.map(t=>P(ec,{label:cc(t),value:P(`span`,{className:`font-mono text-[11px] text-foreground break-all`,children:lc(e[t])})},t))})]})}function pc(e,t){return e.icon===t.icon&&e.label===t.label&&e.unit===t.unit&&e.precision===t.precision&&e.hidden===t.hidden}function mc(e){return{icon:e?.icon??``,label:e?.label??``,unit:e?.unit??``,precision:e?.precision===void 0?``:String(e.precision),hidden:e?.hidden===!0}}function hc(e){if(e.trim()===``)return;let t=Number.parseInt(e,10);return Number.isFinite(t)?t:void 0}function gc(e,t){let n=hc(e.precision),r={...e.icon===``?{}:{icon:e.icon},...e.label.trim()===``?{}:{label:e.label.trim()},...e.unit===``?{}:{unit:e.unit},...n===void 0?{}:{precision:n},...e.hidden?{hidden:!0}:{},...t?.perCap===void 0?{}:{perCap:t.perCap}};return Object.keys(r).length===0?null:r}function _c(e){let t=mc(e.display);return{name:e.name,location:e.location,role:e.role,display:t,baseName:e.name,baseLocation:e.location,baseRole:e.role,baseDisplay:t,persistedDisplay:e.display}}function vc(e,t){if(e===null)return _c(t);let n=mc(t.display),r=e.name===t.name&&e.location===t.location&&e.role===t.role&&pc(e.display,n);return!yc(e)||r?_c(t):e}function yc(e){return e===null?!1:e.name!==e.baseName||e.location!==e.baseLocation||e.role!==e.baseRole||!pc(e.display,e.baseDisplay)}function bc(e){return e.name.trim().length===0?`name`:null}function xc(e){let t=e.name.trim(),n=e.location.trim();return{...t===e.baseName?{}:{name:t},...n===e.baseLocation?{}:{location:n===``?null:n},...e.role===e.baseRole?{}:{role:e.role},...pc(e.display,e.baseDisplay)?{}:{display:gc(e.display,e.persistedDisplay)}}}function Sc(e){let t=e.map(e=>e.error).filter(e=>e!==null&&e.length>0);return{dirty:e.some(e=>e.dirty),saving:e.some(e=>e.saving),error:t.length===0?null:t.join(`; `)}}a();var Cc=g(null);function wc(){return v(Cc)}function Tc({deviceId:e,seed:t,showOpenFull:n=!1,onClose:r,children:i}){let[a,o]=f(null),[s,c]=f([]),l=M(new Map);if(t!==null){let e=vc(a,t);(a===null||e.name!==a.name||e.location!==a.location||e.role!==a.role||!pc(e.display,a.display)||e.baseName!==a.baseName||e.baseLocation!==a.baseLocation||e.baseRole!==a.baseRole||!pc(e.baseDisplay,a.baseDisplay)||e.persistedDisplay!==a.persistedDisplay)&&o(e)}let u=p(e=>(l.current.set(e.id,{save:e.save,discard:e.discard}),c(t=>{let n=t.find(t=>t.id===e.id);return n!==void 0&&n.dirty===e.dirty&&n.saving===e.saving&&n.error===e.error?t:[...t.filter(t=>t.id!==e.id),{...e,save:()=>l.current.get(e.id)?.save()??Promise.resolve(),discard:()=>{l.current.get(e.id)?.discard()}}]}),()=>{l.current.delete(e.id),c(t=>t.filter(t=>t.id!==e.id))}),[]),m=d(()=>({identity:a,setIdentityName:e=>{o(t=>t===null?t:{...t,name:e})},setIdentityLocation:e=>{o(t=>t===null?t:{...t,location:e})},setIdentityRole:e=>{o(t=>t===null?t:{...t,role:e})},setIdentityDisplay:e=>{o(t=>t===null?t:{...t,display:{...t.display,...e}})},register:u}),[a,u]);return P(Cc.Provider,{value:m,children:P(Ec,{deviceId:e,identity:a,contributions:s,onIdentitySaved:e=>o(e),showOpenFull:n,onClose:r,children:i})})}function Ec({deviceId:e,identity:t,contributions:n,onIdentitySaved:r,showOpenFull:i,onClose:a,children:o}){return y(E,{children:[o,P(Oc,{deviceId:e,identity:t,contributions:n,onIdentitySaved:r,showOpenFull:i,onClose:a})]})}function Dc(e){return e instanceof Error?e.message:String(e)}function Oc({deviceId:e,identity:t,contributions:n,onIdentitySaved:r,showOpenFull:i,onClose:a}){let{t:o}=H(),s=Ma(),c=Dn(),l=j(),[u,d]=f(null),[p,m]=f(!1),h=gn(),g=Sn(),_=Bn(),v=Jn(),b=Sc([{dirty:yc(t),saving:p,error:u},...n]),x=()=>{l.invalidateQueries({queryKey:[[`deviceManager`]]})};return y(`div`,{className:`sticky bottom-0 z-10 mt-3 flex flex-col gap-2 border-t border-border bg-background px-1 pt-3`,children:[b.error!==null&&P(`p`,{className:`text-xs text-danger`,children:b.error}),y(`div`,{className:`flex flex-wrap items-center justify-between gap-2`,children:[i?P(Xn,{type:`button`,variant:`outline`,size:`sm`,onClick:()=>{(async()=>{b.dirty&&!await c({title:o(`deviceQuickDetail.leaveTitle`,`Discard unsaved changes?`),message:o(`deviceQuickDetail.leaveMessage`,`Unsaved edits on this device will be discarded.`),confirmLabel:o(`deviceQuickDetail.discard`,`Discard`),variant:`warning`})||(s(`/devices/${String(e)}?tab=customize`),a?.())})()},children:o(`deviceQuickDetail.openFull`,`Open full detail`)}):P(`span`,{}),y(`div`,{className:`flex items-center gap-2`,children:[P(Xn,{type:`button`,variant:`outline`,size:`sm`,onClick:()=>{t!==null&&r({...t,name:t.baseName,location:t.baseLocation,role:t.baseRole,display:t.baseDisplay});for(let e of n)e.discard();d(null)},disabled:!b.dirty||b.saving,children:o(`deviceQuickDetail.discard`,`Discard`)}),P(Xn,{type:`button`,size:`sm`,onClick:()=>{if(t!==null&&yc(t)&&bc(t)===`name`){d(o(`deviceQuickDetail.nameRequired`,`Name is required`));return}d(null),m(!0),(async()=>{try{let i=t===null?{}:xc(t);if(t!==null&&i.name!==void 0&&await h.mutateAsync({deviceId:e,name:i.name}),t!==null&&i.location!==void 0&&await g.mutateAsync({deviceId:e,location:i.location}),t!==null&&i.role!==void 0&&await _.mutateAsync({deviceId:e,role:i.role}),t!==null&&i.display!==void 0&&await v.mutateAsync({deviceId:e,display:i.display}),t!==null){let e=t.name.trim(),n=t.location.trim();r({...t,name:e,location:n,baseName:e,baseLocation:n,baseRole:t.role,baseDisplay:t.display,persistedDisplay:i.display===void 0?t.persistedDisplay:i.display??void 0})}for(let e of n)e.dirty&&await e.save();x()}catch(e){d(Dc(e))}finally{m(!1)}})()},disabled:!b.dirty||b.saving,children:b.saving?o(`deviceQuickDetail.saving`,`Saving…`):o(`deviceQuickDetail.save`,`Save`)})]})]})]})}function kc(e){return e.hubReachable?e.authOk===!1?{kind:`auth-expired`}:{kind:`cluster-degraded`,offlineAgents:e.offlineAgents,offlineAgentIds:e.offlineAgentIds}:{kind:`hub-unreachable`}}function Ac(e){switch(e.kind){case`connected`:return null;case`reconnecting`:return{severity:`warning`,message:V.t(`connection.reconnecting`),i18nKey:`connection.reconnecting`,showSpinner:!0};case`cluster-degraded`:{let t=e.offlineAgentIds??[];return t.length>0?{severity:`warning`,message:V.t(`connection.degradedNodes`,{nodes:t.join(`, `),count:t.length}),i18nKey:`connection.degradedNodes`,i18nParams:{nodes:t.join(`, `),count:t.length},showSpinner:!0}:e.offlineAgents!==null&&e.offlineAgents>0?{severity:`warning`,message:V.t(`connection.degradedCount`,{count:e.offlineAgents}),i18nKey:`connection.degradedCount`,i18nParams:{count:e.offlineAgents},showSpinner:!0}:{severity:`warning`,message:V.t(`connection.degraded`),i18nKey:`connection.degraded`,showSpinner:!0}}case`hub-unreachable`:return{severity:`danger`,message:V.t(`connection.disconnected`),i18nKey:`connection.disconnected`,showSpinner:!0};case`auth-expired`:return{severity:`danger`,message:V.t(`connection.sessionExpired`),i18nKey:`connection.sessionExpired`,showSpinner:!1,action:`sign-in`}}}var jc=4e3,Mc=5e3;function Nc(e){if(typeof e!=`object`||!e)return{offline:null,offlineIds:null,ok:null};let t={...e},n=typeof t.ok==`boolean`?t.ok:null,r=t.agents;if(typeof r!=`object`||!r)return{offline:null,offlineIds:null,ok:n};let i={...r},a=i.offline,o=typeof a==`number`?a:null,s=i.offlineIds;return{offline:o,offlineIds:Array.isArray(s)?s.filter(e=>typeof e==`string`):null,ok:n}}async function Pc(e,t,n,r){let i=new AbortController,a=setTimeout(()=>i.abort(),n);try{return await e(t,{method:`GET`,signal:i.signal,credentials:`omit`,...r===void 0?{}:{headers:r}})}finally{clearTimeout(a)}}async function Fc(e){let t=e.fetchFn??fetch,n=e.timeoutMs??jc,r=e.origin.replace(/\/+$/,``),i;try{i=await Pc(t,`${r}/health`,n)}catch{return{hubReachable:!1,authOk:`unknown`,offlineAgents:null,offlineAgentIds:null}}if(!i.ok)return{hubReachable:!1,authOk:`unknown`,offlineAgents:null,offlineAgentIds:null};let a=null,o=e.getToken();if(o!==null&&o!==``)try{let e=await Pc(t,`${r}/health/details`,n,{Authorization:`Bearer ${o}`});e.ok&&(a=await e.json())}catch{}let s;try{s=Nc(a??await i.json())}catch{s={offline:null,offlineIds:null,ok:null}}if(s.ok===!1)return{hubReachable:!1,authOk:`unknown`,offlineAgents:null,offlineAgentIds:null};let c=e.getToken(),l=`unknown`;if(c!==null&&c!==``)try{let e=await Pc(t,`${r}/trpc/auth.me`,n,{Authorization:`Bearer ${c}`});e.status===401||e.status===403?l=!1:e.ok&&(l=!0)}catch{l=`unknown`}return{hubReachable:!0,authOk:l,offlineAgents:s.offline,offlineAgentIds:s.offlineIds}}var Ic={kind:`connected`},Lc={kind:`reconnecting`};function Rc(e){let t=e.probeIntervalMs??Mc,n=new Set,r=Ic,i=0,a=!1,o=null;function s(e){if(r!==e){r=e;for(let e of n)e()}}function c(){a=!1,o!==null&&(clearTimeout(o),o=null)}function l(){let n=i;e.probe().then(e=>{n!==i||!a||(s(kc(e)),o=setTimeout(l,t))},()=>{n!==i||!a||(s({kind:`hub-unreachable`}),o=setTimeout(l,t))})}function u(e){if(i+=1,e===`connected`){c(),s(Ic);return}if(e===`connecting`){c(),s(Lc);return}(r.kind===`connected`||r.kind===`reconnecting`)&&s(Lc),o!==null&&(clearTimeout(o),o=null),a=!0,l()}return{getSnapshot:()=>r,subscribe:e=>(n.add(e),()=>{n.delete(e)}),onSdkConnectionState:u,dispose:()=>{i+=1,c(),n.clear()}}}var zc=null;function Bc(){return zc===null&&(zc=Rc({probe:()=>Fc({origin:xe(),getToken:()=>localStorage.getItem(`camstack_admin_token`)})})),zc}function Vc(e){Bc().onSdkConnectionState(e)}var Hc=null,Uc=0;function Z(){if(!Hc){let e=Uc;Hc=Mr({serverUrl:xe(),token:localStorage.getItem(`camstack_admin_token`)??void 0,getLanguage:()=>V.language,refreshCredential:async e=>{e===`rejected`?await ol().refreshNow():await ol().ensureFresh()},onConnectionChange:t=>{e===Uc&&Vc(t)}})}return Hc}function Wc(){let e=Hc;Hc=null,Uc+=1,e?.close()}var Gc=`camstack_admin_token`,Kc=`camstack_admin_refresh`,qc=`camstack_admin_token_expires`;function Jc(e){try{let t=localStorage.getItem(e);return t!==null&&t.length>0?t:null}catch{return null}}function Yc(e,t){try{t===null?localStorage.removeItem(e):localStorage.setItem(e,t)}catch{}}function Xc(){let e=Jc(Gc);if(e===null)return null;let t=Jc(Kc),n=Number(Jc(qc));return{token:e,...t===null?{}:{refreshToken:t},...Number.isFinite(n)&&n>0?{expiresAt:n}:{}}}function Zc(e){Yc(Gc,e.token),Yc(Kc,e.refreshToken??null),Yc(qc,e.expiresAt===void 0?null:String(e.expiresAt))}function Qc(){Yc(Gc,null),Yc(Kc,null),Yc(qc,null)}function $c(e){let t=e.get(`token`);if(t===null||t.length===0)return null;let n=e.get(`refreshToken`),r=Number(e.get(`expiresAt`));return{token:t,...n!==null&&n.length>0?{refreshToken:n}:{},...Number.isFinite(r)&&r>0?{expiresAt:r}:{}}}async function el(e){await fetch(z(`/api/auth/session`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({token:e})}).catch(()=>{})}var tl=new Set;function nl(e){return tl.add(e),()=>tl.delete(e)}var rl=new Set;function il(e){return rl.add(e),()=>rl.delete(e)}var al=null;function ol(){return al===null&&(al=new Br({refresh:async e=>{let t=Xc();if(t?.refreshToken!==void 0&&t.refreshToken!==e&&(t.expiresAt??0)>Date.now()+6e4)return t;let n=await Z().refreshSession(e);return{token:n.token,refreshToken:n.refreshToken,expiresAt:n.expiresAt}},onTokens:e=>{Zc(e),Z().setToken(e.token),el(e.token);for(let e of rl)e()},onExpired:()=>{Qc();for(let e of tl)e()}})),al}function sl(e){Zc(e),ol().adopt(e)}async function cl(e){try{await ol().ensureFresh()}catch(e){console.warn(`[admin-session] pre-reconnect refresh failed; reconnecting anyway`,e)}e()}async function ll(){return await ol().refreshNow()!==null}var ul=512;function dl(e){if(!e||e.length>ul)return null;let t=ct(e);return t===null?!e.startsWith(`/`)||e.startsWith(`//`)||e.includes(`\\`)||e.includes(`://`)||e.includes(`..`)||e===`/login`||e.startsWith(`/login?`)||e.startsWith(`/login/`)?null:{kind:`path`,path:e}:{kind:`app-callback`,url:t}}var fl=/^[A-Za-z0-9_-]{43,128}$/,pl=/^[A-Za-z0-9._~-]{1,256}$/;function ml(e){let{codeChallenge:t,state:n}=e;return!t||!fl.test(t)||(e.codeChallengeMethod??`S256`)!==`S256`||!n||!pl.test(n)?null:{codeChallenge:t,state:n,purpose:e.purpose===`step-up`?`step-up`:`new-session`}}var hl=`camstack:login-app-handoff`;function gl(e){if(!e)return null;try{let t=JSON.parse(e);if(typeof t!=`object`||!t)return null;let n=e=>{let n=Reflect.get(t,e);return typeof n==`string`?n:null};return ml({codeChallenge:n(`codeChallenge`),state:n(`state`),purpose:n(`purpose`)})}catch{return null}}function _l(e,t=Date.now()){e!==null&&kl(hl,JSON.stringify(e),gl,t)}function vl(e=Date.now()){return Al(hl,gl,e)}function yl(e,t,n){return`${e}?${`code=${encodeURIComponent(t)}`}${n===void 0?``:`&state=${encodeURIComponent(n)}`}`}function bl(e,t=Date.now()){return Nl(t)??dl(e)}var xl=2048;function Sl(e){return!e||e.length>xl||!e.startsWith(`/`)||e.startsWith(`//`)||e.includes(`\\`)||e.includes(`://`)||e.includes(`..`)||e===`/login`||e.startsWith(`/login?`)||e.startsWith(`/login/`)?null:e}function Cl(e,t=Date.now()){kl(Dl,e,Sl,t)}function wl(e=Date.now()){return Al(Dl,Sl,e)}function Tl(e,t=Date.now()){return wl(t)??Sl(e)}var El=`camstack:login-redirect`,Dl=`camstack:login-next`,Ol=10*6e4;function kl(e,t,n,r){let i=jl();if(!i||!n(t))return;let a={raw:t??``,at:r};try{i.setItem(e,JSON.stringify(a))}catch{}}function Al(e,t,n){let r=jl();if(!r)return null;let i=null;try{i=r.getItem(e),r.removeItem(e)}catch{return null}if(!i)return null;try{let e=JSON.parse(i);if(typeof e!=`object`||!e)return null;let r=Reflect.get(e,`at`),a=Reflect.get(e,`raw`);return typeof r!=`number`||typeof a!=`string`||n-r>Ol?null:t(a)}catch{return null}}function jl(){if(typeof window>`u`)return null;try{return window.sessionStorage}catch{return null}}function Ml(e,t=Date.now()){kl(El,e,dl,t)}function Nl(e=Date.now()){return Al(El,dl,e)}var Pl=`changeme`;function Fl(e){try{let t=e.split(`.`);if(t.length<2||!t[1])return null;let n=JSON.parse(atob(t[1]));return{id:String(n.userId??``),username:String(n.username??`unknown`),isAdmin:!!n.isAdmin,exp:Number(n.exp??0),scopes:Il(n.scopes)}}catch{return null}}function Il(e){return Rt(jt(e))}function Ll(e){let t=Fl(e);return t?t.exp*1e3<Date.now():!0}a();var Rl=Pl;function zl(e){return{token:e.token,...e.refreshToken===void 0?{}:{refreshToken:e.refreshToken},...e.expiresAt===void 0?{}:{expiresAt:e.expiresAt}}}async function Bl(e,t){if(await el(e),t.kind===`path`){window.location.replace(z(t.path));return}try{Wc();let e=vl();if(e===null)throw Error(`The app sent no PKCE challenge and state`);let{code:n}=await Z().trpcClient.auth.createHandoffCode.mutate({purpose:e.purpose,codeChallenge:e.codeChallenge,state:e.state});window.location.replace(yl(t.url,n,e.state))}catch{window.location.replace(z(`/`))}}async function Vl(e,t){await el(e),window.location.replace(z(t))}var Hl=g(null);function Ul({children:e}){let[t,n]=f(null),[r,i]=f(!0),[a,o]=f(!1);s(()=>{if(typeof window<`u`&&window.location.hash.startsWith(`#token=`)){let e=new URLSearchParams(window.location.hash.slice(1)),t=$c(e),n=t?.token??null;if(t!==null&&n!==null){sl(t);let r=Nl();if(r){Bl(n,r);return}let i=wl()??Sl(e.get(`next`));if(i){Vl(n,i);return}window.history.replaceState({},``,z(`/`))}}c()},[]);let c=async()=>{let e=Xc();if(e===null){i(!1);return}let t=e.token;if(e.refreshToken!==void 0){let n=ol();n.adopt(e),await n.ensureFresh();let r=Xc();if(r===null){console.warn(`[auth] session restore: signed out — the hub refused the refresh token`),Wc(),i(!1);return}t=r.token}if(Ll(t)){console.warn(`[auth] session restore: signed out — access token expired and no refresh recovered it`),Qc(),Wc(),i(!1);return}let r=Fl(t);if(!r){console.warn(`[auth] session restore: signed out — the stored access token is unreadable`),Qc(),Wc(),i(!1);return}el(t);let a=Z();a.trpcClient.system.info.query().then(()=>n(r)).catch(async e=>{let t=e?.data?.code;if(t===`UNAUTHORIZED`||t===`FORBIDDEN`){if(await ll()){a.reconnect();try{await Z().trpcClient.system.info.query();let e=Xc();n(e&&Fl(e.token)||r);return}catch{}}console.warn(`[auth] session restore: logout, probe UNAUTHORIZED and refresh did not recover it`),ol().stop(),Qc(),Wc()}else n(r)}).finally(()=>i(!1))};s(()=>nl(()=>{Wc(),n(null),o(!1)}),[]);let l=p(async(e,t)=>{let r=await Z().login(e,t,{refreshable:!0}),i=r.secondFactors??(r.requiresTotp===!0?[`totp`]:[]);if(i.length>0)return{kind:`second-factor`,challengeToken:r.token,factors:i};let a=r.token;return sl(zl(r)),await el(a),Wc(),n(Fl(a)),o(t===Rl),{kind:`ok`}},[]),u=p(async(e,t)=>{let r=await Z().loginVerifyTotp(e,t,{refreshable:!0}),i=r.token;sl(zl(r)),await el(i),Wc(),n(Fl(i)),o(!1)},[]),d=p(async(e,t)=>{sl({token:e,...t}),await el(e),Wc(),n(Fl(e)),o(!1)},[]),m=p(()=>{Z().logout().catch(()=>{}),ol().stop(),Qc(),fetch(z(`/api/auth/session`),{method:`DELETE`}).catch(()=>{}),Wc(),n(null),o(!1)},[]),h=p(()=>{o(!1)},[]);return P(Hl.Provider,{value:{user:t,loading:r,mustChangePassword:a,login:l,verifyTotp:u,finalizePasskeyLogin:d,logout:m,clearMustChangePassword:h},children:e})}function Wl(){let e=v(Hl);if(!e)throw Error(`useAuth must be used within AuthProvider`);return e}a();function Gl(e,t){for(let n of e)for(let e of n.fields){if(!(`key`in e)||e.key!==t)continue;if(e.type===`button`||e.type===`separator`||e.type===`info`)return!0;let r=e.immediate;return r===!0?!0:r===!1?!1:n.immediate===!0}return!1}function Kl({schema:e,serverValues:t,onImmediateSave:n,onDeferredSave:r}){let[i,a]=f({}),[o,c]=f({}),[l,u]=f(!1),m=M(null),h=e?.sections??[],g=Object.keys(i).length>0,_=d(()=>({...t,...o,...i}),[t,o,i]);s(()=>{if(g||Object.keys(o).length>0){u(!0);return}m.current&&clearTimeout(m.current),m.current=setTimeout(()=>u(!1),500)},[g,o]),s(()=>()=>{m.current&&clearTimeout(m.current)},[]);let v=p(()=>{u(!0),m.current&&clearTimeout(m.current),m.current=setTimeout(()=>u(!1),2e3)},[]),y=p(e=>{v();let r={},o={},s={...t,...i};for(let[t,n]of Object.entries(e))s[t]!==n&&(Gl(h,t)?r[t]=n:o[t]=n);Object.keys(r).length>0&&n(r),a(e=>{let t={...e};for(let e of Object.keys(r))delete t[e];for(let[e,n]of Object.entries(o))t[e]=n;return t})},[v,t,i,h,n]),b=p(e=>{let t={},n={};for(let[r,a]of Object.entries(i))e.includes(r)?t[r]=a:n[r]=a;if(a(n),Object.keys(t).length===0)return;let o=Object.keys(t),s=r(t);if(s===void 0||typeof s.then!=`function`)return;c(e=>({...e,...t}));let l=()=>c(e=>{let t={...e};for(let e of o)delete t[e];return t});s.then(l,()=>{l(),a(e=>{let n={...e};for(let e of o)e in n||(n[e]=t[e]);return n})})},[i,r]),x=p(e=>{a(t=>{let n={...t};for(let t of e)delete n[t];return n})},[]),S=p(()=>{a({})},[]);return{values:_,pendingKeys:Object.keys(i),hasPendingEdits:g,editingPaused:l,handleChange:y,handleSave:b,handleDiscard:x,resetAll:S}}function Q(e){return t=>Object.prototype.hasOwnProperty.call(e,t)}var ql=Q({devices:!0}),Jl=Q({classes:!0,classesExclude:!0,labelEquals:!0,identities:!0,identitiesExclude:!0,eventTypeTokens:!0,sensorKinds:!0}),Yl=Q({minConfidence:!0,minImportance:!0,minLabelConfidence:!0}),Xl=Q({minDwellSeconds:!0}),Zl=Q({source:!0}),Ql=Q({crossing:!0}),$l=Q({packagePhase:!0}),eu=Q({sensorTransition:!0}),tu=Q({plates:!0}),nu=Q({occupancy:!0}),ru=Q({audio:!0}),iu=Q({systemEvent:!0}),au=Q({deviceState:!0}),ou=Q({scene:!0});function su(e,t){let n=e[t];return Array.isArray(n)?n:[]}function cu(e,t){let n=e[t];return typeof n==`number`?n:void 0}a();function lu(e,t){let n=ze().trpcClient,r=O({queries:e.map(e=>({queryKey:[[`nc-pickers`,`zones`],{deviceId:e}],staleTime:3e4,queryFn:async()=>({deviceId:e,zones:(await n.zones.listZones.query({deviceId:e})).map(e=>({id:e.id,name:e.name}))})}))});return d(()=>{let e=[],n=new Set;for(let i of r){if(!i.data)continue;let r=t.find(e=>e.id===i.data.deviceId)?.name;for(let t of i.data.zones)n.has(t.id)||(n.add(t.id),e.push({value:t.id,label:t.name,...r===void 0?{}:{hint:r}}))}return{options:e,loading:r.some(e=>e.isLoading),failed:r.some(e=>e.isError)}},[r,t])}function uu(e){let t=ze().trpcClient,n=O({queries:e.map(e=>({queryKey:[[`nc-pickers`,`event-kinds`],{deviceId:e}],staleTime:6e4,queryFn:async()=>(await t.pipelineAnalytics.listEventKinds.query({deviceId:e})).map(e=>({kind:e.kind,label:e.label}))}))});return d(()=>{let e=new Map;for(let t of n)for(let n of t.data??[])e.has(n.kind)||e.set(n.kind,n.label);let t=[...e.entries()].map(([e,t])=>({value:e,label:t}));return t.sort((e,t)=>e.label.localeCompare(t.label)),{options:t,loading:n.some(e=>e.isLoading)}},[n])}function du(){let e=Nn();return d(()=>({options:(e.data??[]).map(e=>({value:e.id,label:e.name})),loading:e.isLoading,failed:e.isError===!0}),[e.data,e.isLoading,e.isError])}function fu(){let e=or({limit:200}),t=Kn();return d(()=>{let n=new Set;for(let e of t.data??[])e.name.trim().length>0&&n.add(e.name);let r=new Set;for(let t of e.data??[])t.text.trim().length>0&&r.add(t.text);return[...[...n].sort(),...[...r].sort()]},[e.data,t.data])}function pu({options:e,value:t,onChange:n,loading:r,emptyHint:i,placeholder:a,noFreeText:o=!1}){let{t:s}=H(),[c,l]=f(``),u=d(()=>new Set(e.map(e=>e.value)),[e]),p=d(()=>new Set(t),[t]),m=t.filter(e=>!u.has(e)),h=e=>{n(p.has(e)?t.filter(t=>t!==e):[...t,e])},g=()=>{let e=c.trim();e.length===0||t.includes(e)||(n([...t,e]),l(``))};return y(`div`,{className:`mt-1 space-y-1.5`,children:[m.length>0&&P(`div`,{className:`flex flex-wrap gap-1`,children:m.map(e=>y(`button`,{type:`button`,onClick:()=>n(t.filter(t=>t!==e)),className:`inline-flex items-center gap-1 rounded border border-border px-1.5 py-0.5 text-[10px] text-foreground hover:bg-surface-hover`,title:s(`system.notificationRulePickers.customValueClickToRemove`,`Custom value — click to remove`),children:[e,` ×`]},e))}),e.length>0?P(`div`,{className:`max-h-40 overflow-y-auto rounded-md border border-border divide-y divide-border`,children:e.map(e=>y(`label`,{className:`flex items-center gap-2.5 px-3 py-1.5 text-xs text-foreground cursor-pointer hover:bg-surface-hover`,children:[P(`input`,{type:`checkbox`,checked:p.has(e.value),onChange:()=>h(e.value),className:`accent-primary`}),P(`span`,{className:`flex-1 truncate`,children:e.label}),e.hint!==void 0&&P(`span`,{className:`text-[10px] text-foreground-subtle`,children:e.hint})]},e.value))}):P(`p`,{className:`text-[10px] text-foreground-subtle`,children:r===!0?s(`common.loading`,`Loading…`):i}),!o&&P(`input`,{value:c,onChange:e=>l(e.target.value),onKeyDown:e=>{e.key===`Enter`&&(e.preventDefault(),g())},placeholder:a,className:`w-full rounded-md border border-border bg-background px-2 py-1 text-xs text-foreground placeholder:text-foreground-subtle`})]})}var mu=[{value:`immediate`,get label(){return V.t(`helpers.ruleFormParsers.immediate`)},get hint(){return V.t(`helpers.ruleFormParsers.immediateHint`)}},{value:`track-end`,get label(){return V.t(`helpers.ruleFormParsers.trackEnd`)},get hint(){return V.t(`helpers.ruleFormParsers.trackEndHint`)}},{value:`device-event`,get label(){return V.t(`helpers.ruleFormParsers.deviceEvent`)},get hint(){return V.t(`helpers.ruleFormParsers.deviceEventHint`)}},{value:`package-event`,get label(){return V.t(`helpers.ruleFormParsers.packageEvent`)},get hint(){return V.t(`helpers.ruleFormParsers.packageEventHint`)}},{value:`system-event`,get label(){return V.t(`helpers.ruleFormParsers.systemEvent`)},get hint(){return V.t(`helpers.ruleFormParsers.systemEventHint`)}}],hu=`Immediate, grouped`,gu=mu.flatMap(e=>e.value===`immediate`?[e,{value:`immediate-grouped`,get label(){return V.t(`notificationRules.grouping.choice`)},get hint(){return V.t(`helpers.ruleFormParsers.groupedHint`)}}]:[e]);function _u(e){return e.groupingSec!==void 0&&Xt(e)?`immediate-grouped`:e.delivery}function vu(e){let t=(e.delivery===`immediate`||e.delivery===`track-end`)&&Xt({delivery:`immediate`,conditions:e.conditions});return gu.filter(e=>e.value!==`immediate-grouped`||t)}function yu(e){return gu.find(t=>t.value===e)?.value}function bu(e,t=hu){return _u(e)===`immediate-grouped`?`${t} · ${String(e.groupingSec)} s`:Su(e.delivery)}function xu(e){if(e.trim().length===0)return;let t=Number(e);return Number.isFinite(t)&&t>=0?Math.trunc(t):void 0}function Su(e){return mu.find(t=>t.value===e)?.label??e}function Cu(e){return mu.some(t=>t.value===e)}var wu=[{key:`all`,get label(){return V.t(`helpers.ruleFormParsers.sec_all_label`)},get blurb(){return V.t(`helpers.ruleFormParsers.sec_all_blurb`)},get newRuleLabel(){return V.t(`helpers.ruleFormParsers.sec_all_new`)},get emptyHint(){return V.t(`helpers.ruleFormParsers.sec_all_empty`)},creatable:!0},{key:`detection`,get label(){return V.t(`helpers.ruleFormParsers.sec_detection_label`)},get blurb(){return V.t(`helpers.ruleFormParsers.sec_detection_blurb`)},get newRuleLabel(){return V.t(`helpers.ruleFormParsers.sec_detection_new`)},get emptyHint(){return V.t(`helpers.ruleFormParsers.sec_detection_empty`)},creatable:!0},{key:`sensor`,get label(){return V.t(`helpers.ruleFormParsers.sec_sensor_label`)},get blurb(){return V.t(`helpers.ruleFormParsers.sec_sensor_blurb`)},get newRuleLabel(){return V.t(`helpers.ruleFormParsers.sec_sensor_new`)},get emptyHint(){return V.t(`helpers.ruleFormParsers.sec_sensor_empty`)},creatable:!0},{key:`audio`,get label(){return V.t(`helpers.ruleFormParsers.sec_audio_label`)},get blurb(){return V.t(`helpers.ruleFormParsers.sec_audio_blurb`)},get newRuleLabel(){return V.t(`helpers.ruleFormParsers.sec_audio_new`)},get emptyHint(){return V.t(`helpers.ruleFormParsers.sec_audio_empty`)},creatable:!0},{key:`occupancy`,get label(){return V.t(`helpers.ruleFormParsers.sec_occupancy_label`)},get blurb(){return V.t(`helpers.ruleFormParsers.sec_occupancy_blurb`)},get newRuleLabel(){return V.t(`helpers.ruleFormParsers.sec_occupancy_new`)},get emptyHint(){return V.t(`helpers.ruleFormParsers.sec_occupancy_empty`)},creatable:!0},{key:`device-events`,get label(){return V.t(`helpers.ruleFormParsers.sec_deviceEvents_label`)},get blurb(){return V.t(`helpers.ruleFormParsers.sec_deviceEvents_blurb`)},get newRuleLabel(){return V.t(`helpers.ruleFormParsers.sec_deviceEvents_new`)},get emptyHint(){return V.t(`helpers.ruleFormParsers.sec_deviceEvents_empty`)},creatable:!0},{key:`system`,get label(){return V.t(`helpers.ruleFormParsers.sec_system_label`)},get blurb(){return V.t(`helpers.ruleFormParsers.sec_system_blurb`)},get newRuleLabel(){return V.t(`helpers.ruleFormParsers.sec_system_new`)},get emptyHint(){return V.t(`helpers.ruleFormParsers.sec_system_empty`)},creatable:!0},{key:`alarm`,get label(){return V.t(`helpers.ruleFormParsers.sec_alarm_label`)},get blurb(){return V.t(`helpers.ruleFormParsers.sec_alarm_blurb`)},get newRuleLabel(){return V.t(`helpers.ruleFormParsers.sec_alarm_new`)},get emptyHint(){return V.t(`helpers.ruleFormParsers.sec_alarm_empty`)},creatable:!0},{key:`mixed`,get label(){return V.t(`helpers.ruleFormParsers.sec_mixed_label`)},get blurb(){return V.t(`helpers.ruleFormParsers.sec_mixed_blurb`)},get newRuleLabel(){return V.t(`helpers.ruleFormParsers.sec_mixed_new`)},get emptyHint(){return V.t(`helpers.ruleFormParsers.sec_mixed_empty`)},creatable:!1}];function Tu(e){return Mt(Qt(e)).editable}function Eu(e){return Lt(Du(e))}function Du(e){switch(e){case`device-events`:case`system`:case`alarm`:case`mixed`:return e;default:return}}var Ou=new Map([[0,`helpers.ruleFormParsers.cdNone`],[60,`helpers.ruleFormParsers.cd1m`],[3600,`helpers.ruleFormParsers.cd1h`]]),ku=86400;function Au(e){let t=Ou.get(e);return t===void 0?e%3600==0?V.t(`helpers.ruleFormParsers.cdHours`,{count:e/3600}):e%60==0?V.t(`helpers.ruleFormParsers.cdMinutes`,{count:e/60}):V.t(`helpers.ruleFormParsers.cdSeconds`,{count:e}):V.t(t)}function ju(e){if(e.trim().length===0)return;let t=Number(e);return Number.isFinite(t)&&t>=0?Math.trunc(t):void 0}var Mu=[{value:`rule-device`,get label(){return V.t(`helpers.ruleFormParsers.scopeDevice`)}},{value:`rule`,get label(){return V.t(`helpers.ruleFormParsers.scopeRule`)}}];function Nu(e){return Mu.find(t=>t.value===e)?.value}var Pu=[{value:`per-class`,get label(){return V.t(`helpers.ruleFormParsers.granPerClass`)}},{value:`shared`,get label(){return V.t(`helpers.ruleFormParsers.granShared`)}}];function Fu(e){return Pu.find(t=>t.value===e)?.value}var Iu=[{value:`scene-boxes`,get label(){return V.t(`helpers.ruleFormParsers.imageSceneBoxes`)},get description(){return V.t(`helpers.ruleFormParsers.imageSceneBoxesDesc`)}},{value:`crop`,get label(){return V.t(`helpers.ruleFormParsers.imageCrop`)},get description(){return V.t(`helpers.ruleFormParsers.imageCropDesc`)}},{value:`clean`,get label(){return V.t(`helpers.ruleFormParsers.imageClean`)},get description(){return V.t(`helpers.ruleFormParsers.imageCleanDesc`)}},{value:`none`,get label(){return V.t(`helpers.ruleFormParsers.imageNone`)},get description(){return V.t(`helpers.ruleFormParsers.imageNoneDesc`)}}];function Lu(e){return Iu.find(t=>t.value===e)?.value}var Ru=[{value:``,get label(){return V.t(`helpers.ruleFormParsers.linkedDefault`)}},{value:`mosaic`,get label(){return V.t(`helpers.ruleFormParsers.linkedMosaic`)}},{value:`each`,get label(){return V.t(`helpers.ruleFormParsers.linkedEach`)}}];function zu(e){let t=Ru.find(t=>t.value===e)?.value;return t===``?void 0:t}var Bu=[{value:``,get label(){return V.t(`helpers.ruleFormParsers.profileLowest`)}},{value:`low`,get label(){return V.t(`helpers.ruleFormParsers.profileLow`)}},{value:`mid`,get label(){return V.t(`helpers.ruleFormParsers.profileMid`)}},{value:`high`,get label(){return V.t(`helpers.ruleFormParsers.profileHigh`)}}];function Vu(e){let t=Bu.find(t=>t.value===e)?.value;return t===``?void 0:t}var Hu=[{value:`any`,get label(){return V.t(`helpers.ruleFormParsers.srcAny`)}},{value:`pipeline`,get label(){return V.t(`helpers.ruleFormParsers.srcPipeline`)}},{value:`onboard`,get label(){return V.t(`helpers.ruleFormParsers.srcOnboard`)}},{value:`sensor`,get label(){return V.t(`helpers.ruleFormParsers.srcSensor`)}}],Uu=[{value:`delivered`,get label(){return V.t(`helpers.ruleFormParsers.phaseDelivered`)}},{value:`picked-up`,get label(){return V.t(`helpers.ruleFormParsers.phasePickedUp`)}},{value:`both`,get label(){return V.t(`helpers.ruleFormParsers.phaseBoth`)}}],Wu=[{value:``,get label(){return V.t(`helpers.ruleFormParsers.stBoth`)}},{value:`raised`,get label(){return V.t(`helpers.ruleFormParsers.stRaised`)}},{value:`cleared`,get label(){return V.t(`helpers.ruleFormParsers.stCleared`)}}];function Gu(e){return e===`raised`||e===`cleared`?e:void 0}function Ku(e,t){return e===`sensorTransition`?pt(t.sensorKinds):!0}var qu=[{value:`enter`,get label(){return V.t(`helpers.ruleFormParsers.crossEnter`)}},{value:`exit`,get label(){return V.t(`helpers.ruleFormParsers.crossExit`)}},{value:`any`,get label(){return V.t(`helpers.ruleFormParsers.crossAny`)}}],Ju=`enter`;function Yu(e){return e===`exit`||e===`any`?e:void 0}var Xu=[{value:1,get label(){return V.t(`helpers.ruleFormParsers.prioMin`)}},{value:2,get label(){return V.t(`helpers.ruleFormParsers.prioLow`)}},{value:3,get label(){return V.t(`helpers.ruleFormParsers.prioDefault`)}},{value:4,get label(){return V.t(`helpers.ruleFormParsers.prioHigh`)}},{value:5,get label(){return V.t(`helpers.ruleFormParsers.prioMax`)}}];function Zu(e,t){return e.options&&e.options.length>0?e.options:t}var Qu=[{value:``,get label(){return V.t(`helpers.ruleFormParsers.speedDefault`)}},{value:`1`,get label(){return V.t(`helpers.ruleFormParsers.speedReal`)}},{value:`2`,label:`2×`},{value:`3`,label:`3×`},{value:`4`,label:`4×`},{value:`6`,label:`6×`},{value:`8`,label:`8×`}];function $u(e){if(e===``)return;let t=Number(e);return Number.isFinite(t)&&t>=1&&t<=8?t:void 0}var ed=new Map(Object.entries({"device-offline":`Device offline`,"device-online":`Device online`,"device-disabled":`Device switched off`,"device-enabled":`Device switched on`,"stream-offline":`Stream offline`,"stream-online":`Stream online`,"device-battery-low":`Battery low`,"device-battery-normal":`Battery back to normal`,"device-consumable-low":`Consumable low`,"device-consumable-normal":`Consumable back to normal`,"detection-blind":`Camera detecting nothing`,"motion-noisy":`Camera motion constant, no subject`,"motion-calm":`Camera motion calm again`,"recording-stalled":`Recording stalled`,"recording-healthy":`Recording healthy again`,"recording-degraded":`Recording degraded (restart storm)`,"device-attention-required":`Device needs attention`,"device-attention-resolved":`Device attention resolved`,"storage-location-low":`Storage location low`,"storage-location-critical":`Storage location critical`,"storage-location-ok":`Storage location ok again`,"node-offline":`Node offline`,"node-online":`Node online`,"node-restarting":`Node restarting`,"node-updating":`Node updating (restart imminent)`,"node-inference-unavailable":`Node has no usable inference device`,"addon-crash-loop":`Addon stopped after repeated crashes`,"addon-update-available":`Addon update available`,"addon-updated":`Addons updated`,"server-update-available":`Server update available`,"server-updated":`Server updated`,"wrapper-update-available":`Container / app update available`,"export-completed":`Export completed`,"backup-completed":`Backup completed`,"alert-critical":`Critical alert raised`,"alert-error":`Error alert raised`,"alert-critical-resolved":`Critical alert resolved`,"rule-broken":`Notification rule broken`,"rule-repaired":`Notification rule repaired`,"alarm-arm-refused":`Alarm arm refused (something is open)`,"alarm-check-failed":`Alarm check failed (armed anyway)`,"alarm-arming":`Alarm arming (exit delay)`,"alarm-armed":`Alarm armed`,"alarm-pending":`Alarm entry delay started`,"alarm-triggered":`Alarm triggered`,"alarm-rearmed":`Alarm re-armed after siren`,"alarm-sensor-bypass":`Alarm sensor bypass`,"alarm-disarmed":`Alarm disarmed`}));function td(e){return ed.get(e)}var nd={"device-state":`A device the hub can no longer reach, or that came back. Switched off / on is a device an operator turned off or back on — not a fault, a choice.`,streams:`A stream that stopped or came back.`,battery:`A battery below the cluster threshold, and (optionally) its return to normal. Devices with a binary low-battery indicator are judged by the indicator, not by the percentage.`,consumables:`A consumable — filter, brush, bag, supply or waste tank — at or below this rule’s threshold, or that the device reports as due for replacement, and (optionally) its return to normal after a change. A device that only says "replace" is judged by that, not by a percentage.`,"detection-blind":`A camera that MOVED — at least 10 minutes of motion over 3 sessions — was analysed, and whose detector produced nothing at all, not even a candidate under the confidence floor.`,"motion-noise":`A camera whose motion fires constantly with no subject for an hour — a quarter of the time in motion, or 40 sessions — and (optionally) its return to calm. The detector is fine; tune the motion zones or sensitivity.`,recording:`A camera whose recording is on but no footage is landing (stall), a writer that burned its restart budget (degraded), and (optionally) the return to healthy writing.`,"device-attention":`A device whose own addon raised a critical alert because it needs the operator (a missing or rejected PIN), and the return to normal.`,nodes:`An agent or worker node joining or leaving the cluster, or an online node whose inference devices all went away.`,addons:`An addon the hub has stopped restarting after repeated crashes.`,"addon-updates":`A newer version of an addon, or an addon update that just finished.`,updates:`A newer version of the server itself, or of the container / app the node runs inside, is available — or a server update just finished.`,"backups-exports":`A scheduled or manual backup of the hub finished, or a footage export finished rendering.`,alerts:`A critical or error alert opening — a runner that failed or was refused, a recording location out of space, an expired sign-in — and (optionally) a critical alert resolving. One notification per alert episode.`,storage:`A storage location running low or critical on free space — or whose capacity probe failed — and (optionally) its return to ok.`,"rule-health":`A notification rule that cannot work — it no longer loads, or still names a device or destination that was deleted — and (optionally) its repair.`,alarm:`The alarm panel refusing to arm, arming, armed, counting down to a siren, going off, re-arming, excluding an open sensor, or being disarmed.`},rd=st.map(e=>({id:e.id,family:e.family,label:e.label,hint:nd[e.id]??``,kinds:e.kinds.flatMap(e=>{let t=td(e);return t===void 0?[]:[{value:e,label:t}]})}));function id(e){return rd.filter(t=>t.family===e)}function ad(e){let t=Et(e).conditions.systemEvent;return t===void 0?{kinds:(id(e)[0]?.kinds??[]).map(e=>e.value)}:{...t,kinds:[...t.kinds]}}var od=rd.flatMap(e=>e.kinds);function sd(e){return od.find(t=>t.value===e)?.label??e}function cd(e){return{devices:Ut(e,`deviceIds`),deviceTypes:Ut(e,`deviceTypes`),nodes:Ut(e,`nodeIds`),packages:Ut(e,`packageNames`),consumableThreshold:Ut(e,`consumableLowPercent`)}}function ld(e,t){let n=lt[e],r=cd(t);return{devices:n.includes(`deviceIds`)&&r.devices,excludeDevices:n.includes(`excludeDeviceIds`)&&r.devices,deviceTypes:n.includes(`deviceTypes`)&&r.deviceTypes,nodes:n.includes(`nodeIds`)&&r.nodes,packages:n.includes(`packageNames`)&&r.packages,consumableThreshold:n.includes(`consumableLowPercent`)&&r.consumableThreshold}}var ud=Object.values(Ht).map(e=>({value:e,label:dd(e)})).toSorted((e,t)=>e.label.localeCompare(t.label));function dd(e){let t=e.replaceAll(`-`,` `);return t.charAt(0).toUpperCase()+t.slice(1)}function fd(e,t){let n=[],r=new Set;for(let i of e.kinds){let e=yt(i.value);if(e===void 0){n.push({key:i.value,label:i.label,kinds:[i.value],clears:[i.value]});continue}r.has(e.id)||(r.add(e.id),n.push({key:`class:${e.id}`,label:t?e.snapshotLabel:e.label,kinds:t?[...e.bad]:ht(e),clears:ht(e),classId:e.id,...t&&e.snapshotSection===null?{noSnapshot:!0}:{}}))}return n}function pd(e,t){return t.clears.some(t=>e.includes(t))}function md(e,t,n){if(!id(n).some(e=>e.kinds.some(e=>t.kinds.includes(e.value))))return e;let r=e?.kinds??[];if(pd(r,t)){let i=r.filter(e=>!t.clears.includes(e));return i.length===0?e:vd(e,i,n)}return vd(e,od.filter(e=>t.kinds.includes(e.value)||r.includes(e.value)).map(e=>e.value),n)}function hd(e,t){return t===void 0?void 0:vd(t,t.kinds,e)}function gd(e,t){let n=e?.kinds??[];if(n.length===0)return;let r=_d(t,`deviceIds`,e?.deviceIds),i=_d(t,`excludeDeviceIds`,e?.excludeDeviceIds),a=_d(t,`deviceTypes`,e?.deviceTypes),o=_d(t,`nodeIds`,e?.nodeIds),s=_d(t,`packageNames`,e?.packageNames),c=Object.prototype.hasOwnProperty.call(t,`consumableLowPercent`)?t.consumableLowPercent:e?.consumableLowPercent;return{kinds:[...n],...r===void 0?{}:{deviceIds:[...r]},...i===void 0?{}:{excludeDeviceIds:[...i]},...a===void 0?{}:{deviceTypes:[...a]},...o===void 0?{}:{nodeIds:[...o]},...s===void 0?{}:{packageNames:[...s]},...c===void 0?{}:{consumableLowPercent:c}}}function _d(e,t,n){let r=Object.prototype.hasOwnProperty.call(e,t)?e[t]:n;return r!==void 0&&r.length===0?void 0:r}function vd(e,t,n){let r=ld(n,t),i=r.devices?e?.deviceIds:void 0,a=r.excludeDevices?e?.excludeDeviceIds:void 0,o=r.deviceTypes?e?.deviceTypes:void 0,s=r.nodes?e?.nodeIds:void 0,c=r.packages?e?.packageNames:void 0,l=r.consumableThreshold?e?.consumableLowPercent:void 0;return{kinds:[...t],...i&&i.length>0?{deviceIds:[...i]}:{},...a&&a.length>0?{excludeDeviceIds:[...a]}:{},...o&&o.length>0?{deviceTypes:[...o]}:{},...s&&s.length>0?{nodeIds:[...s]}:{},...c&&c.length>0?{packageNames:[...c]}:{},...l===void 0?{}:{consumableLowPercent:l}}}var yd=95;function bd(e){let t=e.trim();if(t===``)return{kind:`clear`};let n=Number(t);return Number.isInteger(n)&&n>=1&&n<=yd?{kind:`set`,value:n}:{kind:`invalid`}}function xd(e,t=2){if(e===void 0||e.length===0)return V.t(`helpers.notificationSystemEvents.noneSelected`);let n=e.slice(0,t).map(sd).join(`, `),r=e.length-Math.min(t,e.length);return r>0?`${n} +${r}`:n}function Sd(e){if(e===void 0)return`—`;let t=[],n=e.deviceIds?.length??0,r=e.deviceTypes?.length??0,i=e.nodeIds?.length??0,a=e.packageNames?.length??0,o=e.excludeDeviceIds?.length??0;r>0&&t.push(e.deviceTypes?.map(dd).join(`, `)??``),n>0&&t.push(`${n} device${n===1?``:`s`}`),i>0&&t.push(`${i} node${i===1?``:`s`}`),a>0&&t.push(`${a} package${a===1?``:`s`}`);let s=o>0?`except ${o} device${o===1?``:`s`}`:null,c=e.consumableLowPercent===void 0?[]:[`consumables at ${e.consumableLowPercent}%`];return t.length===0?[s===null?`Everything`:`Everything ${s}`,...c].join(` · `):[...t,...s===null?[]:[s],...c].join(` · `)}function Cd(e){return e===void 0||(e.deviceTypes?.length??0)===0?!1:e.kinds.some(e=>It.includes(e))}var wd=[`all`,`only`,`except`];function Td(e,t){return(e??[]).length>0?`only`:(t??[]).length>0?`except`:`all`}function Ed(e,t){let n=[...e??[]],r=[...t??[]];return{mode:Td(n,r),include:n,exclude:r,legacyBoth:n.length>0&&r.length>0}}function Dd(e,t){return{...e,mode:t}}function Od(e){switch(e.mode){case`only`:return e.include;case`except`:return e.exclude;case`all`:return[]}}function kd(e,t){switch(e.mode){case`only`:return{...e,include:[...t]};case`except`:return{...e,exclude:[...t]};case`all`:return e}}function Ad(e){return e.mode===`only`&&e.legacyBoth?e.exclude:[]}function jd(e){return{...e,exclude:[],legacyBoth:!1}}function Md(e){switch(e.mode){case`all`:return{};case`except`:return e.exclude.length>0?{exclude:[...e.exclude]}:{};case`only`:{let t=Ad(e);return{...e.include.length>0?{include:[...e.include]}:{},...t.length>0?{exclude:[...t]}:{}}}}}function Nd(e){let t=Md(e),n=t.include??[],r=t.exclude??[];return[...e.include.filter(e=>!n.includes(e)),...e.exclude.filter(e=>!r.includes(e))]}var Pd=[`onActivation`,`onDeactivation`,`onTrigger`,`onTriggerOff`],Fd={onActivation:{get title(){return V.t(`helpers.notificationRuleActions.onActivationTitle`)},get hint(){return V.t(`helpers.notificationRuleActions.onActivationHint`)}},onDeactivation:{get title(){return V.t(`helpers.notificationRuleActions.onDeactivationTitle`)},get hint(){return V.t(`helpers.notificationRuleActions.onDeactivationHint`)}},onTrigger:{get title(){return V.t(`helpers.notificationRuleActions.onTriggerTitle`)},get hint(){return V.t(`helpers.notificationRuleActions.onTriggerHint`)}},onTriggerOff:{get title(){return V.t(`helpers.notificationRuleActions.onTriggerOffTitle`)},get hint(){return V.t(`helpers.notificationRuleActions.onTriggerOffHint`)}}},Id={onActivation:[],onDeactivation:[],onTrigger:[],onTriggerOff:[],buttons:[]};function Ld(e){return e===void 0?Id:{onActivation:[...e.onActivation??[]],onDeactivation:[...e.onDeactivation??[]],onTrigger:[...e.onTrigger??[]],onTriggerOff:[...e.onTriggerOff??[]],buttons:[...e.buttons??[]]}}function Rd(e){let t=e.buttons.filter(e=>e.id.trim()!==``&&e.label.trim()!==``&&e.sequenceId.trim()!==``),n={onActivation:e.onActivation,onDeactivation:e.onDeactivation,onTrigger:e.onTrigger,onTriggerOff:e.onTriggerOff};if(!(!Pd.some(e=>n[e].length>0)&&t.length===0))return{...n.onActivation.length>0?{onActivation:[...n.onActivation]}:{},...n.onDeactivation.length>0?{onDeactivation:[...n.onDeactivation]}:{},...n.onTrigger.length>0?{onTrigger:[...n.onTrigger]}:{},...n.onTriggerOff.length>0?{onTriggerOff:[...n.onTriggerOff]}:{},...t.length>0?{buttons:t}:{}}}function zd(e,t){let n=[];for(let r of Pd){let i=e[r];i.length>4&&n.push({kind:`too-many`,message:V.t(`helpers.notificationRuleActions.tooMany`,{title:Fd[r].title})});for(let e of i)e.kind===`sequence`&&!t.has(e.sequenceId)&&n.push({kind:`unknown-sequence`,message:V.t(`helpers.notificationRuleActions.hookUnknownSeq`,{title:Fd[r].title})})}let r=new Set;for(let i of e.buttons){let e=i.id.trim();e!==``&&(r.has(e)&&n.push({kind:`duplicate-button`,message:V.t(`helpers.notificationRuleActions.dupButton`,{id:e})}),r.add(e),t.has(i.sequenceId.trim())||n.push({kind:`unknown-sequence`,message:V.t(`helpers.notificationRuleActions.buttonUnknownSeq`,{label:i.label||e})}))}return n}function Bd(e,t){return{id:`action-${String(e+1)}`,label:V.t(`helpers.notificationRuleActions.newButtonLabel`),sequenceId:t}}function Vd(){return{kind:`do`,action:{kind:`cap`,deviceId:0,cap:``,method:``}}}function Hd(e){return{kind:`sequence`,sequenceId:e}}function Ud(){return{kind:`wait`,seconds:5}}var Wd=[{value:`acknowledge`,get label(){return V.t(`helpers.notificationRuleActions.icon_acknowledge`)}},{value:`dismiss`,get label(){return V.t(`helpers.notificationRuleActions.icon_dismiss`)}},{value:`silence`,get label(){return V.t(`helpers.notificationRuleActions.icon_silence`)}},{value:`snooze`,get label(){return V.t(`helpers.notificationRuleActions.icon_snooze`)}},{value:`view`,get label(){return V.t(`helpers.notificationRuleActions.icon_view`)}},{value:`play`,get label(){return V.t(`helpers.notificationRuleActions.icon_play`)}},{value:`camera`,get label(){return V.t(`helpers.notificationRuleActions.icon_camera`)}},{value:`open`,get label(){return V.t(`helpers.notificationRuleActions.icon_open`)}},{value:`close`,get label(){return V.t(`helpers.notificationRuleActions.icon_close`)}},{value:`unlock`,get label(){return V.t(`helpers.notificationRuleActions.icon_unlock`)}},{value:`lock`,get label(){return V.t(`helpers.notificationRuleActions.icon_lock`)}},{value:`disarm`,get label(){return V.t(`helpers.notificationRuleActions.icon_disarm`)}},{value:`arm`,get label(){return V.t(`helpers.notificationRuleActions.icon_arm`)}},{value:`arm-home`,get label(){return V.t(`helpers.notificationRuleActions.icon_arm_home`)}},{value:`arm-away`,get label(){return V.t(`helpers.notificationRuleActions.icon_arm_away`)}},{value:`arm-night`,get label(){return V.t(`helpers.notificationRuleActions.icon_arm_night`)}},{value:`light`,get label(){return V.t(`helpers.notificationRuleActions.icon_light`)}},{value:`alert`,get label(){return V.t(`helpers.notificationRuleActions.icon_alert`)}}],Gd=[10,30,60],Kd=[5,10,15,30,60,120,240,480];function qd(e){return e>=60&&e%60==0?V.t(`helpers.ruleFormState.snoozeHours`,{count:e/60}):V.t(`helpers.ruleFormState.snoozeMin`,{count:e})}var Jd=new Set([`alarm-arm-refused`,`alarm-check-failed`,`alarm-arming`,`alarm-armed`,`alarm-pending`,`alarm-triggered`,`alarm-rearmed`,`alarm-sensor-bypass`,`alarm-disarmed`]),Yd=`alarm-panel`;function Xd(e,t){for(let t of e.systemEvent?.kinds??[])if(Jd.has(t))return!0;for(let e of t)if(e.kind===`cap`&&e.cap===Yd)return!0;return!1}function Zd(e,t){let n=new Map(t.map(e=>[e.id,e])),r=[];for(let t of[`onActivation`,`onDeactivation`,`onTrigger`,`onTriggerOff`])for(let i of e[t])if(i.kind===`do`)r.push(i.action);else{let e=n.get(i.sequenceId);e!==void 0&&r.push(...e.actions)}for(let t of e.buttons){let e=n.get(t.sequenceId);e!==void 0&&r.push(...e.actions)}return r}function Qd(e){let{devices:t,devicesExclude:n,classes:r,classesExclude:i,...a}=e;return{conditions:a,deviceScope:Ed(t,n),classScope:Ed(r,i)}}function $d(e){let t=Md(e.deviceScope),n=Md(e.classScope);return{...e.conditions,...t.include===void 0?{}:{devices:[...t.include]},...t.exclude===void 0?{}:{devicesExclude:[...t.exclude]},...n.include===void 0?{}:{classes:[...n.include]},...n.exclude===void 0?{}:{classesExclude:[...n.exclude]}}}function ef(e){return e.deviceScope.mode===`only`?e.deviceScope.include:[]}function tf(e,t,n){let r=Qt(n);return e.some(e=>e.id===t&&Ft(e,n.delivery,r))}function nf(e=`immediate`,t={}){return{name:``,enabled:!0,delivery:e,targetIds:[],targetUsers:[],targetParams:{},priority:3,mediaImage:Nt({},Qt({delivery:e,conditions:t})),mediaShowTriggerZone:!1,mediaShowSubjectPath:!1,mediaGif:!1,mediaClip:!1,mediaProfile:void 0,mediaClipSpeed:void 0,mediaLinkedCameras:void 0,templateTitle:``,templateBody:``,...Qd(t),schedule:void 0,systemEventDelivery:void 0,snoozeAllowGlobal:!1,groupingSec:void 0,snoozeOptions:void 0,actions:Id,cooldownSec:30,cooldownScope:`rule-device`,cooldownGranularity:void 0}}function rf(e){let t={};for(let n of e.targets)n.params&&Object.keys(n.params).length>0&&(t[n.targetId]=n.params);return{name:e.name,enabled:e.enabled,delivery:e.delivery,targetIds:e.targets.map(e=>e.targetId),targetUsers:e.targetUsers??[],targetParams:t,priority:e.priority,mediaImage:Nt(e.media,Qt(e)),mediaShowTriggerZone:e.media.showTriggerZone===!0,mediaShowSubjectPath:e.media.showSubjectPath===!0,mediaGif:e.media.gif===!0,mediaClip:e.media.clip===!0,mediaProfile:e.media.profile,mediaClipSpeed:e.media.clipSpeed,mediaLinkedCameras:e.media.linkedCameras,templateTitle:e.template?.title??``,templateBody:e.template?.body??``,...Qd(e.conditions),schedule:e.schedule,systemEventDelivery:e.systemEventDelivery,snoozeAllowGlobal:e.snoozeAllowGlobal===!0,groupingSec:e.groupingSec,snoozeOptions:e.snoozeOptions,actions:Ld(e.actions),cooldownSec:e.throttle.cooldownSec,cooldownScope:e.throttle.scope,cooldownGranularity:e.throttle.granularity}}function af(e,t){let n=[];if(ff(e)){let r=e.groupingSec;r!==void 0&&(!Number.isInteger(r)||r<5||r>60)&&n.push(`The grouping window is a whole number of seconds between 5 and 60.`);let i=t?.confirm;i?.enabled===!0&&i.expect!==void 0&&!pf(i.expect)&&n.push(`This rule’s AI confirm expects more than one subject, but a grouped message judges one picture per subject, so it would never send. Remove the confirm expectation (viewer or API), or choose Immediate.`)}if(_t(e.conditions.audio)&&n.push(`This sound rule names neither a sound nor a level threshold, so it can never fire — every sample would count as a hit and the engine refuses it rather than notifying on silence. Pick at least one sound, or add a level.`),(!Number.isInteger(e.cooldownSec)||e.cooldownSec<0||e.cooldownSec>86400)&&n.push(`The cooldown is a whole number of seconds between 0 and ${String(ku)} (24 hours). 0 means every match is delivered.`),cf(e))for(let t of St({delivery:e.delivery,conditions:e.conditions,...e.systemEventDelivery===void 0?{}:{systemEventDelivery:e.systemEventDelivery},...Rd(e.actions)===void 0?{}:{actions:Rd(e.actions)}}))n.push(Vt(t));return n}function of(e){let t=e.systemEventDelivery;if(t===void 0)return{};if(!Gt(e.delivery))return t.mode===`summary`?{systemEventDelivery:{mode:`instant`}}:{};if(t.mode===`summary`&&xt(t.schedule)===null){let e=Bt(t.schedule);if(e!==null&&e.times.length>0)return{systemEventDelivery:{...t,schedule:rt(e.times,t.schedule.timezone)}}}return{systemEventDelivery:t}}function sf(e){if(!cf(e))return null;if(!ut(e.templateBody))return V.t(`helpers.ruleFormState.summaryWarnNone`,{token:`{{summaryText}}`});let t=e.templateBody;return(e.systemEventDelivery?.mode===`summary`?e.systemEventDelivery.split:void 0)===`section`&&t.trim().length>0&&!/\{\{\s*summaryText\s*\}\}/.test(t)?V.t(`helpers.ruleFormState.summaryWarnSplit`,{token:`{{summaryText}}`}):null}function cf(e){return Gt(e.delivery)&&e.systemEventDelivery?.mode===`summary`}function lf(e,t,n=new Set){return af(e,t).length===0&&Cu(e.delivery)&&(!Gt(e.delivery)||_f(e)>0)&&Qt(e)!==`mixed`&&e.name.trim().length>0&&(e.targetIds.length>0||e.targetUsers.length>0)&&zd(e.actions,n).length===0}function uf(e,t){let n=hf(e.conditions,t);return Gt(t)&&(n.systemEvent?.kinds.length??0)===0?{...e,delivery:t,conditions:{...n,systemEvent:ad(`device-events`)}}:{...e,delivery:t,conditions:n}}function df(e,t){return t===`immediate-grouped`?{...uf(e,`immediate`),groupingSec:e.groupingSec??20}:{...uf(e,t),groupingSec:void 0}}function ff(e){return e.groupingSec!==void 0&&Xt(e)}function pf(e){switch(e.op){case`>`:return 1>e.count;case`<=`:return 1<=e.count;case`<`:return 1<e.count;case`==`:return e.count===1;default:return 1>=e.count}}var mf=new Set([`immediate`,`track-end`,`package-event`]);function hf(e,t){if(e.source!==`pipeline`||mf.has(t))return e;let{source:n,...r}=e;return r}function gf(e,t){return Zt(e.conditions.systemEvent)===t?e:{...e,conditions:{...e.conditions,systemEvent:ad(t)}}}function _f(e){return e.conditions.systemEvent?.kinds.length??0}function vf(e,t){return e.appliesTo.includes(t)}var yf={source:`any`};function bf(e,t){if(t==null)return!0;if(Array.isArray(t))return t.length===0;if(typeof t==`string`)return t.length===0||yf[e]===t;if(typeof t==`number`)return!Number.isFinite(t);if(typeof t==`object`){if(`ids`in t){let e=t.ids;return!Array.isArray(e)||e.length===0}if(`values`in t){let e=t.values;return!Array.isArray(e)||e.length===0}return!1}return!1}var xf=At.filter(e=>e.id===`audio`);function Sf(e){if(e.length===0)return e;let t=new Set(e.map(e=>e.id)),n=xf.filter(e=>!t.has(e.id));return n.length===0?e:[...e,...n]}function Cf(e,t,n,r=Qt({delivery:t,conditions:e})){let i=n.length===0?null:new Set(n.filter(e=>e.id!==`schedule`&&Ft(e,t,r)).map(e=>e.id)),a={};for(let[t,n]of Object.entries(e))i!==null&&!i.has(t)||Ku(t,e)&&(bf(t,n)||(a[t]=n));return a}function wf(e,t){if(e===void 0)return{};let n=hd(e,t.systemEvent);return n===void 0?{}:{systemEvent:n}}function Tf(e){return e!==void 0&&e.windows.length>0}function Ef(e){let t={...e.clipPreRollSec===void 0?{}:{clipPreRollSec:e.clipPreRollSec},...e.clipPostRollSec===void 0?{}:{clipPostRollSec:e.clipPostRollSec}};return Object.keys(t).length>0?t:void 0}function Df(e){let t=Ef(e.media);return{...e.confirm===void 0?{}:{confirm:e.confirm},...t===void 0?{}:{media:t}}}function Of(e,t,n=[]){let r=e.templateTitle.trim(),i=e.templateBody.trim(),a=r.length>0||i.length>0?{...r.length>0?{title:r}:{},...i.length>0?{body:i}:{}}:void 0,o=Rd(e.actions),s=Qt(e),c=Mt(s),l=ot(s),u=n.length===0?!0:n.some(t=>t.id===`schedule`&&vf(t,e.delivery)),d=!cf(e)&&u&&Tf(e.schedule)?e.schedule:void 0,f=n.length===0?!0:n.some(t=>t.id===`devices`&&vf(t,e.delivery)),p=n.length===0?!0:n.some(t=>t.id===`devicesExclude`&&vf(t,e.delivery)),{devices:m,devicesExclude:h,...g}=$d(e),_=Cf(g,e.delivery,n,s);return{name:e.name.trim(),enabled:e.enabled,delivery:e.delivery,conditions:{..._,...f&&m!==void 0?{devices:m}:{},...p&&h!==void 0?{devicesExclude:h}:{},...wf(l,e.conditions)},...d?{schedule:d}:{},...of(e),targets:e.targetIds.map(t=>{let n=e.targetParams[t];return n&&Object.keys(n).length>0?{targetId:t,params:n}:{targetId:t}}),...e.targetUsers.length>0?{targetUsers:[...e.targetUsers]}:{},media:c.carriesMedia?{image:e.mediaImage,...e.mediaShowTriggerZone&&e.mediaImage!==`crop`&&e.mediaImage!==`none`&&Wt(_).length>0?{showTriggerZone:!0}:{},...e.mediaShowSubjectPath&&e.mediaImage!==`none`&&Yt(s)?{showSubjectPath:!0}:{},...e.mediaGif?{gif:!0}:{},...e.mediaClip?{clip:!0}:{},...e.mediaProfile===void 0?{}:{profile:e.mediaProfile},...e.mediaClipSpeed===void 0?{}:{clipSpeed:e.mediaClipSpeed},...s===`sensor`&&e.mediaImage!==`none`&&e.mediaLinkedCameras!==void 0?{linkedCameras:e.mediaLinkedCameras}:{},...(e.mediaGif||e.mediaClip)&&t?.media?.clipPreRollSec!==void 0?{clipPreRollSec:t.media.clipPreRollSec}:{},...(e.mediaGif||e.mediaClip)&&t?.media?.clipPostRollSec!==void 0?{clipPostRollSec:t.media.clipPostRollSec}:{}}:{image:`none`},throttle:{cooldownSec:e.cooldownSec,scope:e.cooldownScope,...e.cooldownGranularity===void 0?{}:{granularity:e.cooldownGranularity}},priority:e.priority,...a?{template:a}:{},...e.snoozeAllowGlobal?{snoozeAllowGlobal:!0}:{},...ff(e)?{groupingSec:e.groupingSec}:{},...e.snoozeOptions===void 0?{}:{snoozeOptions:[...e.snoozeOptions]},...t?.confirm===void 0?{}:{confirm:t.confirm},...o===void 0?{}:{actions:o}}}function kf(e,t){let n=Of(e,void 0,t);return[`template`,`schedule`,`targetUsers`,`snoozeOptions`,`snoozeAllowGlobal`,`groupingSec`,`actions`].filter(e=>n[e]===void 0)}var Af=[{key:`rule`,get label(){return V.t(`helpers.ruleFormTabs.tab_rule`)},fields:[`name`,`enabled`,`delivery`,`groupingSec`,`targetIds`,`targetUsers`,`targetParams`]},{key:`devices`,get label(){return V.t(`helpers.ruleFormTabs.tab_devices`)},fields:[`deviceScope`]},{key:`conditions`,get label(){return V.t(`helpers.ruleFormTabs.tab_conditions`)},fields:[`conditions`,`classScope`,`schedule`,`systemEventDelivery`]},{key:`notification`,get label(){return V.t(`helpers.ruleFormTabs.tab_notification`)},fields:[`priority`,`mediaImage`,`mediaShowTriggerZone`,`mediaShowSubjectPath`,`mediaGif`,`mediaClip`,`mediaProfile`,`mediaClipSpeed`,`mediaLinkedCameras`,`templateTitle`,`templateBody`]},{key:`actions`,get label(){return V.t(`helpers.ruleFormTabs.tab_actions`)},fields:[`actions`]},{key:`advanced`,get label(){return V.t(`helpers.ruleFormTabs.tab_advanced`)},fields:[`snoozeAllowGlobal`,`snoozeOptions`,`cooldownSec`,`cooldownScope`,`cooldownGranularity`]}];function jf(e,t={}){let n=Qt({delivery:e,conditions:t}),r=Mt(n),i=Af.map(e=>e.key===`conditions`?{...e,label:r.label}:e);return Lt(n)?i.filter(e=>e.key!==`devices`):i}function Mf(e){if(e.audio!==void 0)return V.t(`helpers.ruleFormTabs.condSound`);if(e.occupancy!==void 0)return V.t(`helpers.ruleFormTabs.condOccupancy`)}function Nf(e){let t=Qt(e),n=qt($d(e),t);return t===`sensor`&&e.conditions.sensorTransition!==void 0&&!Ku(`sensorTransition`,e.conditions)?[...n,{conditionId:`sensorTransition`,reason:kt}]:n}var Pf=`rule`;function Ff(e){return Af.find(t=>t.key===e)?.key}function If(e){return e?.toLowerCase().startsWith(`it`)===!0?`it`:`en`}function Lf(){let{i18n:e}=H(),t=If(e.language);return e=>Dt(e,t)}a();var Rf=`block text-[11px] font-medium text-foreground`,zf=`text-[10px] text-foreground-subtle mt-0.5`;function Bf({cameras:e,fleet:t,value:n,onChange:r,emptyMeansAll:i=!1,savedHadDevices:a=!1}){return P(Fn,{devices:e,listState:t.state,fleet:t,value:n,onChange:r,emptyMeansAll:i,savedHadDevices:a})}function Vf({value:e,placeholder:t,onChange:n}){let{t:r}=H(),[i,a]=f(``),o=()=>{let t=i.trim();if(t.length===0||e.includes(t)){a(``);return}n([...e,t]),a(``)},s=t=>n(e.filter(e=>e!==t));return y(`div`,{className:`mt-1 space-y-1.5`,children:[e.length>0&&P(`div`,{className:`flex flex-wrap gap-1`,children:e.map(e=>y(`span`,{className:`inline-flex items-center gap-1 rounded bg-surface-hover px-1.5 py-0.5 text-[11px] text-foreground`,children:[e,P(`button`,{type:`button`,onClick:()=>s(e),"aria-label":r(`system.notificationConditionWidgets.remove`,`remove {{v}}`,{v:e}),className:`text-foreground-subtle hover:text-danger`,children:P(Oe,{className:`h-3 w-3`})})]},e))}),P(B,{value:i,placeholder:t,onChange:e=>a(e.target.value),onKeyDown:e=>{e.key===`Enter`&&(e.preventDefault(),o())},onBlur:o})]})}function Hf({picker:e,value:t,onChange:n}){let{t:r}=H(),i=d(()=>it(e),[e]),a=d(()=>new Set(t),[t]),o=t.filter(e=>!i.has(e)),s=e=>{n(a.has(e)?t.filter(t=>t!==e):[...t,e])};return y(`div`,{className:`space-y-2`,children:[o.length>0&&P(`div`,{className:`flex flex-wrap gap-1`,children:o.map(e=>y(`button`,{type:`button`,onClick:()=>n(t.filter(t=>t!==e)),className:`inline-flex items-center gap-1 rounded border border-border px-1.5 py-0.5 text-[10px] text-foreground hover:bg-surface-hover`,title:r(`system.notificationConditionWidgets.customValueClickToRemove`,`Custom value — click to remove`),children:[e,` ×`]},e))}),e.groups.map(e=>y(`div`,{children:[P(`div`,{className:`text-[10px] uppercase tracking-wide text-foreground-muted mb-1`,children:e.fallbackLabel}),P(`div`,{className:`flex flex-wrap gap-1`,children:e.options.map(e=>{let t=a.has(e.value);return P(`button`,{type:`button`,"aria-pressed":t,onClick:()=>s(e.value),className:t?`rounded border border-primary bg-primary/15 px-1.5 py-0.5 text-[10px] text-foreground`:`rounded border border-border px-1.5 py-0.5 text-[10px] text-foreground hover:bg-surface-hover`,children:e.label},e.value)})})]},e.key))]})}function Uf({value:e,min:t,max:n,step:r,onChange:i}){let{t:a}=H();return y(`div`,{className:`mt-1 flex items-center gap-2`,children:[P(B,{type:`number`,value:e??``,min:t,max:n,step:r,className:`max-w-[8rem]`,onChange:e=>{let t=e.target.value;if(t===``){i(void 0);return}let n=Number(t);i(Number.isFinite(n)?n:void 0)}}),e!==void 0&&n!==void 0&&P(`input`,{type:`range`,min:t,max:n,step:r,value:e,onChange:e=>i(Number(e.target.value)),className:`flex-1 accent-primary`,"aria-label":a(`common.valueWord`)})]})}function Wf({value:e,onChange:t,options:n}){let{t:r}=H(),i=Gf(n??[]),a=i.length>0?i:qu;return y(`div`,{className:`mt-1 space-y-1`,children:[P(En,{value:e??`enter`,options:a.map(e=>({value:e.value,label:r(`notificationRules.crossing.${e.value}`,e.label)})),onChange:e=>t(Yu(e.target.value))}),P(`p`,{className:zf,children:r(`notificationRules.crossing.hint`,`Which way the subject crosses the zone.`)})]})}function Gf(e){let t=[];for(let n of e){let e=n.value===``||n.value===`enter`?Ju:Yu(n.value);e===void 0||t.some(t=>t.value===e)||t.push({value:e,label:n.label})}return t}function Kf({deviceIds:e,cameras:t,value:n,onChange:r}){let{options:i,loading:a}=lu(e,t);return P(pu,{options:i,value:n,onChange:r,loading:a,noFreeText:!0,emptyHint:e.length===0?`Select cameras first — a rule can only use zones those cameras actually have.`:`The selected cameras have no zones. Draw one in the camera’s zone editor first.`,placeholder:``})}function qf({deviceIds:e,value:t,onChange:n}){let{t:r}=H(),{options:i,loading:a}=uu(e);return P(pu,{options:i,value:t,onChange:n,loading:a,emptyHint:e.length===0?`Select cameras above to pick their event kinds — or type a token.`:`No event kinds reported for the selected cameras — type a token.`,placeholder:r(`system.notificationConditionWidgets.eventToken`,`Event token…`)})}var Jf=[{value:`became-occupied`,labelKey:`system.notificationConditionWidgets.opBecameOccupied`},{value:`became-free`,labelKey:`system.notificationConditionWidgets.opBecameFree`},{value:`>=`,labelKey:`system.notificationConditionWidgets.opCountAtLeast`},{value:`<=`,labelKey:`system.notificationConditionWidgets.opCountAtMost`}];function Yf(e,t){let n=e.map(e=>({value:e.value,label:e.label}));return t===void 0||t===``||n.some(e=>e.value===t)?n:[...n,{value:t,label:V.t(`system.notificationConditionWidgets.subTypeNeverCountsAlways`,`{{stored}} — sub-type, never counts (always 0)`,{stored:t})}]}function Xf({deviceIds:e,cameras:t,classOptions:n,value:r,onChange:i}){let{t:a}=H(),{options:o,loading:s}=lu(e,t),c=r??Pt,l=e=>i({...c,...e}),u=c.op===`became-occupied`||c.op===`became-free`,d=Yf(n,c.className);return y(`div`,{className:`mt-1 space-y-1.5`,children:[y(`div`,{className:`flex flex-wrap items-center gap-1.5`,children:[P(`div`,{className:`min-w-[10rem]`,children:P(En,{value:c.zoneId??``,options:[{value:``,label:s?a(`system.notificationConditionWidgets.loadingZones`,`Loading zones…`):a(`system.notificationConditionWidgets.wholeFrame`,`— whole frame —`)},...o.map(e=>({value:e.value,label:e.label}))],onChange:e=>l({zoneId:e.target.value===``?void 0:e.target.value})})}),P(`div`,{className:`min-w-[9rem]`,children:P(En,{value:c.className??``,options:[{value:``,label:a(`system.notificationConditionWidgets.anyClass`,`— any class —`)},...d],onChange:e=>l({className:e.target.value===``?void 0:e.target.value})})}),P(`div`,{className:`min-w-[9rem]`,children:P(En,{value:c.op,options:Jf.map(e=>({value:e.value,label:a(e.labelKey)})),onChange:e=>{let t=Jf.find(t=>t.value===e.target.value);t&&l({op:t.value})}})})]}),y(`div`,{className:`flex flex-wrap items-center gap-3 text-xs text-foreground-subtle`,children:[y(`label`,{className:`flex items-center gap-1`,children:[u?a(`system.notificationConditionWidgets.threshold`,`Threshold`):a(`system.notificationConditionWidgets.count`,`Count`),P(B,{type:`number`,min:0,className:`w-16`,value:String(c.count),onChange:e=>l({count:Math.max(0,Number(e.target.value)||0)})})]}),y(`label`,{className:`flex items-center gap-1`,children:[a(`system.notificationConditionWidgets.holdFor`,`Hold for`),P(B,{type:`number`,min:0,max:3600,className:`w-16`,value:String(c.sustainSeconds),onChange:e=>l({sustainSeconds:Math.min(3600,Math.max(0,Number(e.target.value)||0))})}),`s`]}),r===void 0?null:P(`button`,{type:`button`,onClick:()=>i(void 0),className:`underline hover:text-foreground`,children:a(`system.notificationConditionWidgets.clear`,`Clear`)})]}),e.length===0&&P(`p`,{className:`text-[11px] text-warning`,children:a(`system.notificationConditionWidgets.noCameraPickedOnThe`,`No camera picked on the Devices tab: this watches EVERY camera's occupancy, and no zone can be offered until you choose one — a zone id belongs to a camera.`)}),P(`p`,{className:`text-[11px] text-foreground-subtle`,children:a(`system.notificationConditionWidgets.countsConfirmedTrackedObjectsFrom`,`Counts confirmed tracked objects from zone analytics. The change must hold for the sustain window before it fires; with no snapshot for the camera or zone the rule never fires.`)})]})}var Zf=[{value:`label`,labelKey:`system.notificationConditionWidgets.audioModeLabel`,Icon:Ae},{value:`level`,labelKey:`system.notificationConditionWidgets.audioModeLevel`,Icon:qe}];function Qf({taxonomy:e,value:t,onChange:n}){let{t:r}=H(),i=$t(t),a=e=>n(Ot(t,e)),{choices:o,unknownLabels:s}=bt(e,i.labels),c=Tt(t)??`label`;return y(`div`,{className:`mt-1 space-y-2`,children:[y(`div`,{className:`flex flex-wrap items-center gap-1`,children:[Zf.map(e=>P(`button`,{type:`button`,"aria-pressed":c===e.value,onClick:()=>a({mode:e.value}),className:`rounded border px-2 py-0.5 text-[11px] ${c===e.value?`border-primary bg-primary/15 text-foreground`:`border-border text-foreground-subtle hover:bg-surface-hover`}`,children:y(`span`,{className:`inline-flex items-center gap-1`,children:[P(e.Icon,{className:`h-3 w-3`}),r(e.labelKey)]})},e.value)),t===void 0?null:P(`button`,{type:`button`,onClick:()=>n(void 0),className:`ml-1 text-xs text-foreground-subtle underline hover:text-foreground`,children:r(`system.notificationConditionWidgets.clear`,`Clear`)})]}),c===`label`?y(E,{children:[P(`div`,{className:`flex flex-wrap gap-1`,children:o.map(e=>{let t=at(i.labels,e.value),n=e.unknown?`border-dashed border-warning text-warning`:t?`border-primary bg-primary/15 text-foreground`:`border-border text-foreground hover:bg-surface-hover`;return P(`button`,{type:`button`,"aria-pressed":t,title:e.unknown?r(`system.notificationConditionWidgets.storedByTheRuleNot`,`Stored by the rule — not offered by this hub`):void 0,onClick:()=>a({labels:mt(i.labels,e.value)}),className:`rounded border px-1.5 py-0.5 text-[10px] ${n}`,children:y(`span`,{className:`inline-flex items-center gap-1`,children:[P(Pn,{iconId:e.iconId,size:12}),e.label]})},e.value)})}),s.length>0&&y(`p`,{className:`text-[10px] text-warning`,children:[r(`system.notificationConditionWidgets.keptFromTheRuleUnknown`,`Kept from the rule, unknown to this hub:`),` `,s.join(`, `)]}),y(`div`,{className:`flex flex-wrap items-center gap-3 text-xs text-foreground-subtle`,children:[y(`label`,{className:`flex items-center gap-1`,children:[r(`system.notificationConditionWidgets.confirmAfter`,`Confirm after`),P(B,{type:`number`,min:1,max:20,step:1,className:`w-16`,value:String(i.confirmHits??2),onChange:e=>a({confirmHits:Number(e.target.value)})}),r(`system.notificationConditionWidgets.frames`)]}),y(`label`,{className:`flex items-center gap-1`,children:[r(`system.notificationConditionWidgets.within`),P(B,{type:`number`,min:1,max:60,step:1,className:`w-16`,value:String(i.confirmWindowSec??5),onChange:e=>a({confirmWindowSec:Number(e.target.value)})}),`s`]})]}),P(`p`,{className:`text-[11px] text-foreground-subtle`,children:r(`system.notificationConditionWidgets.audioConfirmHint`,{hits:2,window:5})})]}):y(E,{children:[P(`div`,{className:`flex flex-wrap items-center gap-3 text-xs text-foreground-subtle`,children:y(`label`,{className:`flex items-center gap-1`,children:[r(`system.notificationConditionWidgets.louderThan`,`Louder than`),P(B,{type:`number`,min:Ct,max:0,step:3,className:`w-20`,value:String(i.dbThreshold??wt),onChange:e=>a({dbThreshold:Number(e.target.value)})}),`dBFS`]})}),y(`div`,{className:`flex flex-wrap items-center gap-3 text-xs text-foreground-subtle`,children:[y(`label`,{className:`flex items-center gap-1`,children:[r(`system.notificationConditionWidgets.hits`,`Hits`),P(B,{type:`number`,min:1,max:100,step:5,className:`w-16`,value:String(i.hitPercent),onChange:e=>a({hitPercent:Number(e.target.value)})}),r(`system.notificationConditionWidgets.hitsPercentDefault`,{value:ft.hitPercent})]}),y(`label`,{className:`flex items-center gap-1`,children:[r(`system.notificationConditionWidgets.over`),P(B,{type:`number`,min:1,max:300,step:5,className:`w-16`,value:String(i.samplingSeconds),onChange:e=>a({samplingSeconds:Number(e.target.value)})}),r(`system.notificationConditionWidgets.secondsDefault`,{value:ft.samplingSeconds})]})]}),P(`p`,{className:`text-[11px] text-foreground-subtle`,children:r(`system.notificationConditionWidgets.dbfsHint`,{min:Ct})})]}),_t(t)?P(`p`,{className:`text-[11px] text-warning`,children:r(`system.notificationConditionWidgets.withNeitherASoundNor`,`With neither a sound nor a level threshold this can never match — every sample would be a hit, so the engine refuses it rather than notifying on silence.`)}):null]})}function $f({value:e,onChange:t}){let{t:n}=H(),r=e?.values??[],i=e?.maxDistance??1,a=e=>t(e.length>0?{values:e,maxDistance:i}:void 0),o=e=>t(r.length>0?{values:r,maxDistance:e}:void 0),s=fu().filter(e=>!r.includes(e));return y(`div`,{className:`mt-1 space-y-1.5`,children:[P(Vf,{value:r,placeholder:n(`system.notificationConditionWidgets.plateText`,`Plate text…`),onChange:a}),s.length>0&&y(`div`,{className:`flex flex-wrap items-center gap-1`,children:[P(`span`,{className:`text-[10px] text-foreground-subtle`,children:n(`system.notificationConditionWidgets.seen`,`Seen:`)}),s.slice(0,12).map(e=>P(`button`,{type:`button`,onClick:()=>a([...r,e]),className:`rounded border border-border px-1.5 py-0.5 text-[10px] text-foreground-subtle hover:bg-surface-hover hover:text-foreground`,children:e},e))]}),y(`label`,{className:`flex items-center gap-2 text-[11px] text-foreground-subtle`,children:[n(`system.notificationConditionWidgets.maxDistance`,`Max distance`),P(B,{type:`number`,min:0,max:3,step:1,value:i,className:`max-w-[5rem]`,onChange:e=>{let t=Number(e.target.value);o(Number.isFinite(t)?Math.max(0,Math.min(3,t)):1)}})]})]})}function ep({gateable:e,value:t,onChange:n}){let{t:r}=H(),i=Lf(),a=e.find(e=>e.id===t?.deviceId),o=new Set(t?.states??[]),s=e=>{let t=Number(e);if(!Number.isFinite(t)||t===0)return n(void 0);n({deviceId:t,states:[]})},c=e=>{if(t===void 0)return;let r=new Set(o);r.has(e)?r.delete(e):r.add(e),n(r.size===0?void 0:{deviceId:t.deviceId,states:[...r]})};return y(`div`,{className:`mt-1 space-y-2`,children:[P(En,{value:t===void 0?``:String(t.deviceId),options:[{value:``,label:r(`system.notificationConditionWidgets.noDeviceGate`,`— no device gate —`)},...e.map(e=>({value:String(e.id),label:e.name}))],onChange:e=>s(e.target.value)}),a!==void 0&&P(`div`,{className:`flex flex-wrap gap-1.5`,children:a.states.map(e=>P(`button`,{type:`button`,onClick:()=>c(e),className:o.has(e)?`rounded-md border border-primary bg-primary/10 px-2 py-0.5 text-[11px] text-primary`:`rounded-md border border-border px-2 py-0.5 text-[11px] text-foreground-subtle`,children:i(e)},e))}),a!==void 0&&a.states.length===0&&P(`p`,{className:`text-[10px] text-foreground-subtle mt-0.5`,children:r(`system.notificationConditionWidgets.thisDeviceReportsNoState`,`This device reports no state the gate can read, so it cannot arm a rule.`)}),t!==void 0&&P(`p`,{className:`text-[10px] text-foreground-subtle mt-0.5`,children:r(`system.notificationConditionWidgets.theRuleIsSilentWhile`,`The rule is silent while the device is in any other state — including when its state cannot be read at all.`)})]})}function tp(e,t){let n=t(e.verdict);return e.latched?`${n} · ${t(`latched`)}`:n}function np({scenes:e,value:t,onChange:n}){let{t:r}=H(),i=Lf(),a=e.find(e=>e.sceneId===t?.sceneId),o=r=>{if(r===``)return n(void 0);let i=e.find(e=>e.sceneId===r);if(i===void 0)return n(void 0);n({sceneId:r,deviceId:i.deviceId,requiredState:t?.requiredState??`diverged`,...t?.latched===void 0?{}:{latched:t.latched}})},s=e=>{t!==void 0&&n({...t,requiredState:e===`matched`?`matched`:`diverged`})},c=e=>{if(t!==void 0){if(e===``){let{latched:e,...r}=t;return n(r)}n({...t,latched:e===`latched`})}};return e.length===0?P(`p`,{className:zf,children:r(`notificationRules.scene.none`,`No scenes yet — create one on the Scenes page.`)}):y(`div`,{className:`mt-1 space-y-2`,children:[P(En,{value:t?.sceneId??``,options:[{value:``,label:r(`notificationRules.scene.noGate`,`— no scene gate —`)},...e.map(e=>({value:e.sceneId,label:`${e.cameraName} · ${e.label} — ${tp(e,i)}`}))],onChange:e=>o(e.target.value)}),t!==void 0&&y(`div`,{className:`flex flex-wrap items-center gap-2`,children:[y(`label`,{className:`flex items-center gap-2 text-[11px] text-foreground-subtle`,children:[r(`notificationRules.scene.onlyWhile`,`Only while it is`),P(En,{value:t.requiredState,options:[{value:`diverged`,label:i(`diverged`)},{value:`matched`,label:i(`matched`)}],onChange:e=>s(e.target.value)})]}),y(`label`,{className:`flex items-center gap-2 text-[11px] text-foreground-subtle`,children:[r(`notificationRules.scene.read`,`Read`),P(En,{value:t.latched===void 0?``:t.latched?`latched`:`live`,options:[{value:``,label:a===void 0?r(`notificationRules.scene.readOwn`,`The scene's own setting`):`${r(`notificationRules.scene.readOwn`,`The scene's own setting`)} (${i(a.emit)})`},{value:`latched`,label:i(`latched`)},{value:`live`,label:i(`live`)}],onChange:e=>c(e.target.value)})]})]}),a!==void 0&&y(`p`,{className:`text-[10px] text-foreground-subtle mt-0.5`,children:[r(`notificationRules.scene.rightNow`,`Right now:`),` `,tp(a,i)]}),t!==void 0&&a===void 0&&P(`p`,{className:`text-[10px] text-foreground-subtle mt-0.5`,children:r(`notificationRules.scene.missing`,`This scene no longer exists — pick another or remove the gate.`)})]})}var rp={days:[0,1,2,3,4,5,6],minute:480},ip=[{value:1,get label(){return V.t(`helpers.notificationSystemEventDelivery.wd_mon`)}},{value:2,get label(){return V.t(`helpers.notificationSystemEventDelivery.wd_tue`)}},{value:3,get label(){return V.t(`helpers.notificationSystemEventDelivery.wd_wed`)}},{value:4,get label(){return V.t(`helpers.notificationSystemEventDelivery.wd_thu`)}},{value:5,get label(){return V.t(`helpers.notificationSystemEventDelivery.wd_fri`)}},{value:6,get label(){return V.t(`helpers.notificationSystemEventDelivery.wd_sat`)}},{value:0,get label(){return V.t(`helpers.notificationSystemEventDelivery.wd_sun`)}}];function ap(e){let t=Math.floor(e/60),n=e%60;return`${String(t).padStart(2,`0`)}:${String(n).padStart(2,`0`)}`}function op(e){let[t,n]=e.split(`:`),r=Number(t)*60+Number(n);return Number.isFinite(r)?Math.max(0,Math.min(1439,r)):0}function sp(e){if(typeof e!=`object`||!e||!(`data`in e))return;let t=e.data;if(!(typeof t!=`object`||!t||!(`code`in t)))return typeof t.code==`string`?t.code:void 0}function cp(e){let t=Object.entries(e).map(([e,t])=>`${e} ${String(t)}`);return t.length>0?V.t(`helpers.notificationSystemEventDelivery.dropped`,{parts:t.join(`, `)}):null}function lp(e,t,n,r=`rule`){if(e===`error`)return sp(n)===`NOT_FOUND`?{lines:[`This hub does not serve summary rules yet — update @camstack/server first. A rule saved now would be stored without its summary, and stay instant.`]}:{lines:[`The preview could not be read: ${n instanceof Error?n.message:String(n)}`]};if(e!==`success`||t===void 0)return null;let i=[];if(r===`section`&&t.split===void 0&&i.push(`This hub does not send per-category summaries yet — update @camstack/server first. Until then it sends one message.`),t.empty)i.push(`Nothing to report right now — no notification would be sent.`);else if(t.split===`section`&&t.rows!==void 0){let e=t.rows.length;i.push(`${String(e)} notification${e===1?``:`s`} would be sent now, one per category:`);for(let e of t.rows)i.push(`${e.title}\n${e.text}`)}else i.push(`${String(t.count)} item(s) would be sent now:\n${t.text}`);let a=cp(t.dropped);return a!==null&&i.push(a),t.excludedGroups.includes(`backups-exports`)&&i.push(`Backups and exports are completed jobs, not a state — they are not in a summary.`),{lines:i}}function up(e,t){return{...e,schedule:t}}function dp(e,t){let{split:n,...r}=e;return t===`section`?{...r,split:t}:r}function fp(e){return ap(e)}function pp(e){return op(e)}function mp(){return{days:[1,2,3,4,5],startMinute:540,endMinute:1080}}function hp(e){return{days:[...rp.days],minute:e}}var gp=`Always active — add a window to restrict when the rule fires.`;function _p({value:e,onChange:t,mode:n=`windows`,defaultMinute:r=rp.minute,emptyHint:i}){return n===`times`?P(yp,{value:e,onChange:t,defaultMinute:r}):P(vp,{value:e,onChange:t,emptyHint:i??gp})}function vp({value:e,onChange:t,emptyHint:n}){let{t:r}=H(),i=e?.windows??[],a=e?.invert??!1,o=(n,r)=>{if(n.length===0){t(void 0);return}t({windows:n,...r?{invert:!0}:{},...e?.timezone?{timezone:e.timezone}:{}})},s=()=>o([...i,mp()],a),c=e=>o(i.filter((t,n)=>n!==e),a),l=(e,t)=>o(i.map((n,r)=>r===e?t:n),a);return y(`div`,{className:`mt-1 space-y-2`,"data-testid":`schedule-field-windows`,children:[i.length===0?P(`p`,{className:zf,children:n}):i.map((e,t)=>P(bp,{window:e,onChange:e=>l(t,e),onRemove:()=>c(t)},t)),y(`div`,{className:`flex items-center gap-3`,children:[y(`button`,{type:`button`,onClick:s,className:`flex items-center gap-1 rounded-md bg-surface-hover px-2 py-1 text-[11px] text-foreground-subtle hover:text-foreground`,children:[P(Ie,{className:`h-3 w-3`}),` `,r(`system.notificationScheduleField.addWindow`)]}),i.length>0&&y(`label`,{className:`flex items-center gap-1.5 text-[11px] text-foreground-subtle`,children:[P(`input`,{type:`checkbox`,checked:a,onChange:e=>o([...i],e.target.checked),className:`accent-primary`}),r(`system.notificationScheduleField.activeOutsideTheWindows`,`Active outside the windows`)]})]})]})}function yp({value:e,onChange:t,defaultMinute:n}){let{t:r}=H(),i=e?.timezone,a=e===void 0?{times:[],approximated:!1}:Bt(e);if(a===null)return y(`div`,{className:`mt-1 space-y-2`,"data-testid":`schedule-field-times-fallback`,children:[P(`p`,{className:zf,children:r(`system.notificationScheduleField.invertedScheduleShownAsBands`,`Inverted schedule — shown as bands. Clear the invert flag (or the windows) to author punctual times.`)}),P(vp,{value:e,onChange:t,emptyHint:gp})]});let o=a.times,s=e=>{if(e.length===0){t(void 0);return}t(rt(e,i))};return y(`div`,{className:`mt-1 space-y-2`,"data-testid":`schedule-field-times`,children:[a.approximated&&P(`p`,{className:`text-[10px] text-foreground-subtle mt-0.5`,"data-testid":`schedule-field-times-approximated`,children:r(`system.notificationScheduleField.shownAsSendAtTimes`,`Shown as send-at times from each window's end (when the summary fires). Edit or save to store them as punctual one-minute windows.`)}),o.length===0?P(`p`,{className:zf,children:r(`system.notificationScheduleField.noTimesYetAddOne`,`No times yet — add one to send on those days at that clock time.`)}):o.map((e,t)=>P(xp,{time:e,index:t,onChange:e=>s(o.map((n,r)=>r===t?e:n)),onRemove:o.length>1?()=>s(o.filter((e,n)=>n!==t)):void 0},t)),y(`button`,{type:`button`,onClick:()=>s([...o,hp(n)]),className:`flex items-center gap-1 rounded-md bg-surface-hover px-2 py-1 text-[11px] text-foreground-subtle hover:text-foreground`,"data-testid":`schedule-field-add-time`,children:[P(Ie,{className:`h-3 w-3`}),` `,r(`system.notificationScheduleField.addTime`)]})]})}function bp({window:e,onChange:t,onRemove:n}){let{t:r}=H();return y(`div`,{className:`space-y-1.5 rounded-md border border-border p-2`,children:[y(`div`,{className:`flex items-center gap-2 text-xs`,children:[P(`input`,{type:`time`,value:fp(e.startMinute),onChange:n=>t({...e,startMinute:pp(n.target.value)}),className:`rounded-md border border-border bg-background px-1 py-0.5`}),P(`span`,{className:`text-foreground-subtle`,children:`→`}),P(`input`,{type:`time`,value:fp(e.endMinute),onChange:n=>t({...e,endMinute:pp(n.target.value)}),className:`rounded-md border border-border bg-background px-1 py-0.5`}),P(`span`,{className:`flex-1`}),P(`button`,{type:`button`,onClick:n,"aria-label":r(`system.notificationScheduleField.removeWindow`,`Remove window`),className:`text-foreground-subtle hover:text-danger`,children:P(ie,{className:`h-3.5 w-3.5`})})]}),P(Sp,{days:e.days,onToggle:n=>{let r=e.days.includes(n)?e.days.filter(e=>e!==n):[...e.days,n];r.length!==0&&t({...e,days:r})}})]})}function xp({time:e,index:t,onChange:n,onRemove:r}){let{t:i}=H();return y(`div`,{className:`space-y-1.5 rounded-md border border-border p-2`,children:[y(`div`,{className:`flex items-center gap-2 text-xs`,children:[P(`span`,{className:`text-foreground-subtle`,children:i(`system.notificationScheduleField.at`,`At`)}),P(`input`,{type:`time`,value:ap(e.minute),onChange:t=>n({...e,minute:op(t.target.value)}),className:`rounded-md border border-border bg-background px-1 py-0.5`,"data-testid":`schedule-field-time-${String(t)}`}),P(`span`,{className:`flex-1`}),r!==void 0&&P(`button`,{type:`button`,onClick:r,"aria-label":i(`system.notificationScheduleField.removeTime`,`Remove time`),className:`text-foreground-subtle hover:text-danger`,children:P(ie,{className:`h-3.5 w-3.5`})})]}),P(Sp,{days:e.days,onToggle:t=>{let r=e.days.includes(t)?e.days.filter(e=>e!==t):[...e.days,t];r.length!==0&&n({...e,days:r})}})]})}function Sp({days:e,onToggle:t}){return P(`div`,{className:`flex flex-wrap gap-1`,children:ip.map(n=>P(`button`,{type:`button`,onClick:()=>t(n.value),className:`rounded px-1.5 py-0.5 text-[10px] ${e.includes(n.value)?`bg-primary text-primary-foreground`:`bg-surface-hover text-foreground-subtle`}`,children:n.label},n.value))})}function Cp(e){return e>=8}a();function wp(e){if(typeof e!=`object`||!e)return;let t=Reflect.get(e,`windows`);if(!(!Array.isArray(t)||t.length===0))return e}function Tp(e){return e.type===`multiselect`}function Ep(e){let t=e.suggestions;return t===void 0||t.length===0?[]:t.map(e=>({value:e,label:e}))}function Dp(e){return e.map(e=>({value:e.value,label:e.label,...e.description===void 0?{}:{description:e.description},...e.iconId===void 0?{}:{iconId:e.iconId}}))}function Op(e){return Array.isArray(e)?e.filter(e=>typeof e==`string`):[]}function kp({field:e,values:t,onChange:n,onChangeMany:r,disabled:i,translationFn:a,onTestField:o,externalProbe:s,allFields:c,onAction:l}){let{t:u}=H();if(e.type===`tags`){if(!sr(e,t,c))return null;let r=e.creatable!==!1;return P(Ir,{mode:`multi`,options:Ep(e),value:Op(t[e.key]),onChange:t=>n(e.key,t),disabled:i===!0||e.disabled===!0,creatable:r,...e.createLabel===void 0?{}:{createLabel:e.createLabel},...e.maxTags===void 0?{}:{maxItems:e.maxTags},label:jp(e.label,a),description:e.description===void 0?void 0:jp(e.description,a),placeholder:e.placeholder??u(`formBuilder.formBuilder.searchOrAdd`,`Search or add…`),testId:`config-tags-${e.key}`})}if(e.type===`schedule`){if(!sr(e,t,c))return null;let r=jp(e.label,a),i=e.description===void 0?void 0:jp(e.description,a),o=e.mode===`times`?`times`:`windows`;return y(`div`,{className:`space-y-1`,"data-testid":`config-schedule-${e.key}`,children:[r!==void 0&&P(`label`,{className:`block text-[11px] font-medium text-foreground-subtle`,children:r}),i!==void 0&&P(`p`,{className:`text-[10px] text-foreground-subtle`,children:i}),P(_p,{mode:o,value:wp(t[e.key]),onChange:t=>n(e.key,t)})]})}return Tp(e)&&(Cp(e.options.length)||e.creatable===!0)?sr(e,t,c)?P(Ir,{mode:`multi`,options:Dp(e.options),value:Op(t[e.key]),onChange:t=>n(e.key,t),disabled:i===!0||e.disabled===!0,creatable:e.creatable===!0,...e.createLabel===void 0?{}:{createLabel:e.createLabel},...e.maxItems===void 0?{}:{maxItems:e.maxItems},label:jp(e.label,a),description:e.description===void 0?void 0:jp(e.description,a),placeholder:e.placeholder??u(`formBuilder.formBuilder.searchToAdd`,`Search to add…`),testId:`config-multiselect-${e.key}`,listboxId:`msel-${e.key}`}):null:P(Vr,{field:e,values:t,onChange:n,onChangeMany:r,disabled:i,translationFn:a,onTestField:o,externalProbe:s,allFields:c,onAction:l})}function Ap(e){return/^[a-zA-Z0-9_]+(\.[a-zA-Z0-9_]+)+$/.test(e)}function jp(e,t){if(e!==void 0)return t&&Ap(e)?t(e):e}function Mp({section:e,values:t,onChange:n,onChangeMany:r,disabled:i,translationFn:a,onTestField:o,probeResults:s,onAction:c}){let[l,u]=f(e.defaultCollapsed??!1),d=e.style===`accordion`;if(e.fields.reduce((n,r)=>n+ +!!sr(r,t,e.fields),0)===0)return null;let p=e.fields,m=e.columns??2,h=m===1?`grid-cols-1`:m===3?`grid-cols-1 @[480px]:grid-cols-2 @[880px]:grid-cols-3`:m===4?`grid-cols-1 @[480px]:grid-cols-2 @[1140px]:grid-cols-4`:`grid-cols-1 @[480px]:grid-cols-2`,g=e.fields.length===1&&e.fields[0]?.type===`widget`?e.fields[0]:void 0,_=g!==void 0||!e.title&&!e.description;return y(`div`,{className:`@container rounded-lg border border-border bg-surface p-3`,style:{containerType:`inline-size`},"data-settings-section":e.id,children:[!_&&y(`div`,{className:[`flex items-center justify-between mb-2`,d?`cursor-pointer`:``].join(` `),onClick:d?()=>u(e=>!e):void 0,children:[y(`div`,{children:[e.title&&P(`h3`,{className:`text-[11px] font-semibold text-foreground-subtle uppercase tracking-wider`,children:jp(e.title,a)}),e.description&&P(`p`,{className:`text-[10px] text-foreground-subtle mt-0.5`,children:jp(e.description,a)})]}),d&&P(`span`,{className:`text-foreground-subtle text-xs ml-2`,children:l?`▸`:`▾`})]}),!(l&&!_)&&(g===void 0?P(E,{children:P(`div`,{className:`grid ${h} gap-x-3 gap-y-2.5`,children:p.map(l=>P(kp,{field:l,values:t,onChange:n,onChangeMany:r,disabled:i,translationFn:a,onTestField:o,externalProbe:s?.[l.key],allFields:e.fields,onAction:c},l.key))})}):P(Vr,{field:g,values:t,onChange:n,onChangeMany:r,disabled:i,translationFn:a,onTestField:o,externalProbe:s?.[g.key],allFields:e.fields,onAction:c},g.key))]})}function Np({schema:e,values:t,onChange:n,disabled:r,translationFn:i,onTestField:a,probeResults:o,onClearProbe:s,onAction:c,visibilityContext:l}){let u=l?{...l,...t}:t,d=(e,r)=>{n({...t,[e]:r}),s?.(e)},f=e=>{n({...t,...e});for(let t of Object.keys(e))s?.(t)};return P(`div`,{className:`space-y-4`,children:e.sections.map((e,t)=>P(Mp,{section:e,values:u,onChange:d,onChangeMany:f,disabled:r,translationFn:i,onTestField:a,probeResults:o,onAction:c},`${e.id}-${t}`))})}function Pp({pendingCount:e,onSave:t,onDiscard:n,saving:r=!1,saveLabel:i=`Save`,discardLabel:a=`Discard`}){let{t:o}=H();return e<=0?null:y(`div`,{className:`sticky bottom-0 -mb-3 flex items-center justify-between gap-3 rounded-lg border border-primary/40 bg-primary/5 px-3 py-2 shadow-sm z-10`,children:[P(`span`,{className:`text-xs text-foreground`,children:o(`formBuilder.saveBar.unsavedChanges`,{count:e})}),y(`div`,{className:`flex items-center gap-2`,children:[P(`button`,{type:`button`,onClick:n,disabled:r,className:`inline-flex items-center rounded-md border border-border px-2.5 py-1 text-xs text-foreground-subtle hover:bg-surface-hover disabled:opacity-50`,children:a}),P(`button`,{type:`button`,onClick:t,disabled:r,className:`inline-flex items-center rounded-md bg-primary px-3 py-1 text-xs font-medium text-primary-foreground hover:bg-primary/90 disabled:opacity-50`,children:r?o(`formBuilder.formSaveBar.saving`,`Saving…`):i})]})]})}function Fp({tabs:e,activeId:t,onChange:n,countByTab:r,pendingByTab:i}){return e.length===0?null:P(`div`,{className:`flex flex-wrap items-center gap-1 border-b border-border shrink-0`,children:e.map(e=>{let a=e.id===t,o=r?.get(e.id)??0,s=i?.get(e.id)??0;return y(`button`,{type:`button`,onClick:()=>n(e.id),className:`relative shrink-0 px-3 py-1.5 text-xs font-medium rounded-t-md transition-colors -mb-px border-b-2 whitespace-nowrap ${a?`text-primary border-primary bg-primary/5`:`text-foreground-subtle border-transparent hover:text-foreground hover:bg-surface-hover`}`,children:[e.label,o>0&&y(`span`,{className:`ml-1.5 text-[10px] opacity-60`,children:[`(`,o,`)`]}),s>0&&P(`span`,{className:`ml-1.5 inline-flex h-1.5 w-1.5 rounded-full bg-primary`})]},e.id)})})}a();function Ip({schema:e,values:t,pendingKeys:n,onChange:r,onAction:i,onSave:a,onDiscard:o,disabled:s,activeSubTab:c,onSubTabChange:l,flattenTabs:u=!1,visibilityContext:p,hideSaveBar:m=!1}){let h=e.tabs??[],g=d(()=>{let t=new Map;for(let n of e.sections){let e=n.tab??`general`,r=t.get(e)??[];r.push(n),t.set(e,r)}return t},[e.sections]),_=new Set(h.map(e=>e.id)),v=[...h,...[...g.keys()].filter(e=>!_.has(e)).map(e=>({id:e,label:e,icon:`wrench`,order:100}))],b=v[0]?.id??`general`,[x,S]=f(b),C=l!==void 0,w=new Set(v.map(e=>e.id)),T=M(new Set);for(let e of w)T.current.add(e);let E=T.current,D=(e=>e&&(w.has(e)||E.has(e))?e:b)(C?c:x),O=e=>{C?l(e):S(e)},k=g.get(D)??[],A={sections:k.length<=1?k.length===1?[{...k[0],title:``}]:k:k.every(e=>!e.title)?[{...k[0],title:``,fields:k.flatMap(e=>e.fields)}]:k},j=m?null:P(Pp,{pendingCount:n.length,onSave:()=>a(n),onDiscard:()=>o(n),saving:s});if(u||v.length<=1)return y(`div`,{className:`flex flex-col gap-3`,children:[P(Np,{schema:e,values:t,onChange:r,onAction:i,disabled:s,visibilityContext:p}),j]});let N=new Map,F=new Map;for(let[e,t]of g){N.set(e,t.length);let r=new Set,i=e=>{for(let t of e)if(`key`in t&&typeof t.key==`string`&&r.add(t.key),t.type===`group`)i(t.fields);else if(t.type===`sub-tabs`)for(let e of t.tabs)i(e.fields)};for(let e of t)i(e.fields);let a=n.filter(e=>r.has(e)).length;a>0&&F.set(e,a)}return y(`div`,{className:`flex flex-col gap-3`,children:[P(Fp,{tabs:v.map(e=>({id:e.id,label:e.label})),activeId:D,onChange:O,countByTab:N,pendingByTab:F}),P(hr,{tabKey:D,children:P(Np,{schema:A,values:t,onChange:r,onAction:i,disabled:s,visibilityContext:p})}),j]})}var Lp=`device-export`,Rp=`export`,zp=`Export`;function Bp(e){return e.type===`separator`||e.type===`info`||e.type===`object-array`||e.type===`widget`||e.type===`addon-action-button`||e.type===`device-action-button`?!1:e.type===`group`?e.fields.some(Bp):e.type===`sub-tabs`?e.tabs.some(e=>e.fields.some(Bp)):e.writerCapName===Lp}function Vp(e){return e.tab===`export`?!0:e.fields.some(Bp)}var Hp=`host/extensions-panel`;function Up(e){return e.type===`widget`?e.widgetId===Hp:e.type===`group`?e.fields.some(Up):e.type===`sub-tabs`?e.tabs.some(e=>e.fields.some(Up)):!1}function Wp(e){return e.fields.some(Up)}function Gp(e,t){return!t&&e!==void 0&&dt.includes(e)}function Kp(e){return e.location!==`top-tab`&&e.location!==`hero`&&!Vp(e)&&!Wp(e)}function qp(e,t,n,r){return!r||Gp(t,n)?!0:(e??[]).some(Kp)}function Jp(e,t){for(let n of e){if(n.type===`group`){Jp(n.fields,t);continue}if(n.type===`sub-tabs`){for(let e of n.tabs)Jp(e.fields,t);continue}if(!(`value`in n))continue;let e=n.value===void 0?n.default:n.value;e!==void 0&&(t[n.key]=e)}}function Yp(e){let t={};for(let n of e)Jp(n.fields,t);return t}a();function Xp(e,t){return t&&t===`admin`?e:!0}function Zp(e){if(!e)return null;let t={sections:[...e.sections].toSorted((e,t)=>{let n=e.tab??`general`,r=t.tab??`general`;return n===r?Vp(e)&&Vp(t)?e.id.localeCompare(t.id):(e.order??0)-(t.order??0):n.localeCompare(r)})};return e.tabs?{...t,tabs:e.tabs}:t}function Qp(e){return e.type===`separator`||e.type===`info`||e.type===`button`||e.type===`widget`||e.type===`addon-action-button`||e.type===`device-action-button`||e.type===`account-sign-in`||e.type===`secret-presence`}function $p(e){return e.key}function em(e){if(!Qp(e))return e.value}function tm(e){return Qp(e)?null:e}function nm(e,t){for(let n of e)if(t(n),n.type===`group`)nm(n.fields,t);else if(n.type===`sub-tabs`)for(let e of n.tabs)nm(e.fields,t)}function rm(e){if(!e)return{};let t={};for(let n of e.sections)nm(n.fields,e=>{let n=$p(e);n!==null&&(t[n]=em(e))});return t}function im(e,t){if(!e)return null;let n=null;for(let r of e.sections)if(nm(r.fields,e=>{if(n!==null||$p(e)!==t)return;let r=tm(e);r&&r.writerCapName&&r.writerAddonId&&(n={capName:r.writerCapName,addonId:r.writerAddonId})}),n!==null)break;return n}function am(e){return{...e,fields:e.fields.map(om)}}function om(e){return e.type===`separator`||e.type===`info`||e.type===`button`||e.type===`object-array`?e:{...e,readonlyField:!0}}function sm(e,t){return e&&{...e,sections:e.sections.map(e=>({...e,fields:e.fields.map(e=>{let n=tm(e);return n?Xp(t,n.minRole)?e:om(e):e})}))}}function cm({deviceId:e,sectionFilter:t,activeSubTab:n,onSubTabChange:r,flattenSubTabs:i,subTabGrouping:a}){let{t:o}=H(),c=j(),{user:l}=Wl(),u=l?.isAdmin===!0,f=M(!1),{data:m,isLoading:h}=Nr({deviceId:e},{refetchInterval:()=>f.current?!1:2500,enabled:Number.isFinite(e)}),{data:g}=ir({deviceId:e},{enabled:Number.isFinite(e)}),_=m?.settings??null,v=m?.live??null,b=d(()=>{if(!_&&!v)return null;let e=_?.sections??[],n=(v?.sections??[]).map(am),r=[...e,...n],i=t?r.filter(t):r.filter(Kp);if(i.length===0)return null;if(a){let e=i.map(e=>({...e,tab:a.groupOf(e)})),t=new Set(e.map(e=>e.tab)),n=a.tabs.filter(e=>t.has(e.id));return n.length>0?{tabs:n,sections:e}:{sections:e}}let o=new Set;for(let e of i)o.add(e.tab??`general`);let s=[..._?.tabs??[],...(v?.tabs??[]).filter(e=>!(_?.tabs??[]).some(t=>t.id===e.id))].filter(e=>o.has(e.id));return s.length>0?{tabs:s,sections:i}:{sections:i}},[_,v,t,a]),x=d(()=>Yp([..._?.sections??[],...v?.sections??[]]),[_,v]),S=d(()=>Zp(b),[b]),C=d(()=>sm(S,u),[S,u]),w=d(()=>rm(C),[C]),T=ar(),E=yr(),D=An(),O=Kr(),k=Rn({onSuccess:()=>{c.invalidateQueries({queryKey:[[`deviceManager`,`getDeviceAggregate`]]})}}),A={isPending:k.isPending,mutate:t=>{k.mutate({deviceId:e,changes:[...t]})}},N=Kl({schema:C,serverValues:w,onImmediateSave:p(e=>{let t=Object.entries(e).map(([e,t])=>{let n=im(C,e);return n?{writerCapName:n.capName,writerAddonId:n.addonId,key:e,value:t}:null}).filter(e=>e!==null);t.length>0&&A.mutate(t)},[C,A]),onDeferredSave:p(async t=>{let n=Object.entries(t).map(([e,t])=>{let n=im(C,e);return n?{writerCapName:n.capName,writerAddonId:n.addonId,key:e,value:t}:null}).filter(e=>e!==null);if(n.length!==0)try{let t=await k.mutateAsync({deviceId:e,changes:n});if(t.failures.length>0)throw Error(t.failures.map(e=>e.error).join(`; `))}finally{await c.invalidateQueries({queryKey:[[`deviceManager`,`getDeviceAggregate`]]})}},[C,k,e,c])}),{values:F,pendingKeys:I,handleChange:ee,handleSave:L,handleDiscard:te}=N;f.current=N.editingPaused;let ne=wc(),re=M(L),ie=M(te);re.current=L,ie.current=te;let ae=ne?.register,oe=k.isError?k.error instanceof Error?k.error.message:String(k.error):null,R=I.join(`\0`);if(s(()=>{if(ae===void 0)return;let e=R===``?[]:R.split(`\0`);return ae({id:`export`,dirty:e.length>0,saving:k.isPending,error:oe,save:()=>(re.current(e),Promise.resolve()),discard:()=>ie.current(e)})},[ae,R,k.isPending,oe]),h)return y(`div`,{className:`flex items-center justify-center py-12 text-foreground-subtle`,children:[P(Re,{className:`h-4 w-4 animate-spin mr-2`}),P(`span`,{className:`text-xs`,children:o(`device.deviceAggregateSection.loadingDeviceAggregate`,`Loading device aggregate…`)})]});if(!C||C.sections.length===0)return P(`div`,{className:`text-xs text-foreground-subtle italic py-4 text-center`,children:o(`device.deviceAggregateSection.noAggregateContributionsForThis`,`No aggregate contributions for this device.`)});async function se(t,n,r){if(t===`regenerate-rtsp-token`){let t=[`rtspUrl:`,`regenerateToken:`].find(e=>n.startsWith(e));if(!t)throw Error(`regenerate-rtsp-token: unrecognised key "${n}" (expected "rtspUrl:<streamId>" or "regenerateToken:<streamId>")`);let r=n.slice(t.length);if(!r)throw Error(`regenerate-rtsp-token: key "${n}" has no streamId after prefix`);let i=zt(e,r);await T.mutateAsync({brokerId:i}),c.invalidateQueries({queryKey:[[`deviceManager`,`getDeviceAggregate`]]});return}if(t===`test-probe`){if(!g)return{status:`error`,error:o(`device.deviceAggregateSection.metadataNotLoaded`)};try{return await D.mutateAsync({addonId:g.addonId,type:g.type,key:n,value:r})}catch(e){return{status:`error`,error:e instanceof Error?e.message:String(e)}}}if(t===`refresh-probe`){if(!n.startsWith(`probedInfo:`))throw Error(`refresh-probe: unrecognised key "${n}" (expected "probedInfo:<streamId>")`);let t=n.slice(11);if(!t)throw Error(`refresh-probe: key "${n}" has no streamId after prefix`);let r=zt(e,t),i=await E.mutateAsync({brokerId:r});return c.invalidateQueries({queryKey:[[`deviceManager`,`getDeviceAggregate`]]}),i}if(t===`device-custom-action`){let t=await O.mutateAsync({deviceId:e,action:n,input:r});return c.invalidateQueries({queryKey:[[`deviceManager`,`getDeviceAggregate`]]}),t}throw Error(`[device-aggregate] unknown action "${t}"`)}return P(Ip,{schema:C,values:F,pendingKeys:I,onChange:ee,onAction:se,onSave:L,onDiscard:te,hideSaveBar:ne!==null,disabled:A.isPending,activeSubTab:n,onSubTabChange:r,flattenTabs:i,visibilityContext:x})}a();function lm({deviceId:e,onClose:t}){let{t:n}=H(),[r,i]=f(`info`),{data:a}=ir({deviceId:e},{enabled:e>0}),o=Pr(e),s=Ws(o.presence,o.list),c=r===`history`&&!s?`info`:r,l=typeof a?.name==`string`&&a.name.length>0?a.name:`#${String(e)}`,u=typeof a?.name==`string`?a.name:``,d=typeof a?.location==`string`?a.location:``,p=[[`info`,n(`deviceQuickDetail.tabInfo`,{defaultValue:`Device info`})],[`export`,n(`deviceQuickDetail.tabExport`,{defaultValue:`Export`})],...s?[[`history`,n(`deviceQuickDetail.tabHistory`,{defaultValue:`History`})]]:[]];return P(ur,{open:!0,onOpenChange:e=>!e&&t(),children:P(Fr,{width:`lg`,scroll:`body`,children:y(Tc,{deviceId:e,seed:a==null?null:{name:u,location:d,role:typeof a.role==`string`?a.role:null,display:a.display},showOpenFull:!0,onClose:t,children:[P(mr,{children:P(er,{children:l})}),P(`div`,{className:`mt-3 flex items-center gap-1 rounded-md bg-surface-hover p-0.5 w-fit`,children:p.map(([e,t])=>P(`button`,{type:`button`,onClick:()=>i(e),className:`px-2.5 py-1 rounded text-[11px] font-medium transition-colors ${c===e?`bg-surface text-foreground shadow-sm`:`text-foreground-subtle hover:text-foreground`}`,children:t},e))}),P(dr,{className:`mt-3`,children:y(zn,{deviceId:e,device:a??void 0,children:[P(`div`,{className:c===`info`?void 0:`hidden`,children:P(uc,{})}),P(`div`,{className:c===`export`?void 0:`hidden`,children:P(cm,{deviceId:e,sectionFilter:Vp})}),s?P(`div`,{className:c===`history`?void 0:`hidden`,children:P(Us,{deviceId:e})}):null]})})]})})})}function um({children:e}){let[t,n]=f(null),r=p(e=>n(e),[]),i=p(()=>n(null),[]);return y(Mn,{open:r,children:[e,t===null?null:P(lm,{deviceId:t,onClose:i})]})}a();function dm({tabs:e,active:t,onChange:n}){return P(`div`,{className:`flex rounded-lg border border-border bg-surface p-0.5 gap-0.5`,children:e.map(e=>P(`button`,{type:`button`,onClick:()=>n(e.id),className:[`flex-1 rounded-md px-3 py-1.5 text-xs font-medium transition-colors`,t===e.id?`bg-primary/12 text-primary`:`text-foreground-subtle hover:text-foreground hover:bg-surface-hover`].join(` `),children:e.label},e.id))})}function fm(e){let t=e.formats;if(!t)return``;let n=Object.values(t).filter(e=>e!==void 0&&e.sizeMB>0).map(e=>e.sizeMB);if(n.length===0)return``;let r=Math.min(...n),i=Math.max(...n);return r===i?`${r} MB`:`${r}-${i} MB`}function pm(e){return`${e.inputSize.width}x${e.inputSize.height}`}function mm(e){return e.formats?Object.keys(e.formats).filter(t=>e.formats[t]!==void 0):[]}function hm({entry:e,selected:t,onSelect:n,disabled:r}){let{t:i}=H(),a=fm(e),o=pm(e),s=mm(e);return y(`button`,{type:`button`,onClick:n,disabled:r,className:[`w-full text-left rounded-lg border p-3 transition-all`,t?`border-primary bg-primary/5 ring-1 ring-primary/30`:`border-border bg-background hover:border-foreground-subtle/40 hover:bg-surface-hover/50`,r?`opacity-50 cursor-not-allowed`:`cursor-pointer`].join(` `),children:[P(`div`,{className:`flex items-start justify-between gap-2`,children:y(`div`,{className:`flex-1 min-w-0`,children:[y(`div`,{className:`flex items-center gap-2`,children:[P(`span`,{className:`text-xs font-semibold text-foreground truncate`,children:e.name}),t&&P(me,{className:`h-3.5 w-3.5 text-primary shrink-0`})]}),P(`p`,{className:`text-[10px] text-foreground-subtle mt-0.5 line-clamp-2`,children:e.description})]})}),y(`div`,{className:`flex items-center gap-3 mt-2 flex-wrap`,children:[y(`span`,{className:`inline-flex items-center gap-1 text-[10px] text-foreground-subtle`,children:[P(be,{className:`h-3 w-3`}),o]}),a&&P(`span`,{className:`text-[10px] text-foreground-subtle`,children:a}),s.length>0&&P(`div`,{className:`flex gap-1`,children:s.map(e=>P(`span`,{className:`text-[9px] uppercase rounded bg-surface border border-border px-1 py-0.5 text-foreground-subtle font-mono`,children:e},e))}),e.labels.length>0&&P(`span`,{className:`text-[10px] text-foreground-subtle`,children:i(`common.labels`,{count:e.labels.length})})]})]})}function gm({field:e,value:t,onChange:n,disabled:r}){let{t:i}=H(),a=e.catalog??[],o=a.length>0,s=gt(a).length>0,c=e.allowCustomPath!==!1||e.allowCustom===!0,l=[...o?[{id:`catalog`,label:i(`formBuilder.modelSelector.models`,`Models ({{length}})`,{length:a.length})}]:[],...c?[{id:`custom`,label:i(`formBuilder.modelSelector.customPath`,`Custom Path`)}]:[]],[u,d]=f(o?`catalog`:`custom`),p=t==null?``:String(t);return y(`div`,{className:`space-y-3`,children:[l.length>1&&P(dm,{tabs:l,active:u,onChange:d}),u===`catalog`&&o&&s&&P(Ar,{catalog:a,value:p,onChange:e=>n(e),disabled:r||e.disabled}),u===`catalog`&&o&&!s&&P(`div`,{className:`space-y-1.5 max-h-[320px] overflow-y-auto pr-1`,children:a.filter(e=>e.legacy!==!0).map(t=>P(hm,{entry:t,selected:p===t.id,onSelect:()=>n(t.id),disabled:r||e.disabled},t.id))}),u===`catalog`&&!o&&y(`div`,{className:`rounded-md border border-info/30 bg-info/5 px-3 py-2 flex items-start gap-2`,children:[P(Le,{className:`h-3.5 w-3.5 text-info shrink-0 mt-0.5`}),P(`p`,{className:`text-[11px] text-foreground-subtle leading-relaxed`,children:i(`formBuilder.modelSelector.noPredefinedModelsAvailableUse`,`No predefined models available. Use the Custom Path tab to specify a model file path or URL.`)})]}),u===`custom`&&c&&y(`div`,{className:`space-y-2`,children:[P(`input`,{type:`text`,className:`w-full rounded-md border border-border bg-background px-3 py-2 text-sm text-foreground focus:border-primary focus:ring-1 focus:ring-primary/30 outline-none disabled:opacity-50`,placeholder:i(`formBuilder.modelSelector.enterPathLikeDataModels`,`Enter path like /data/models/custom.onnx or https://...`),value:p,disabled:r||e.disabled,onChange:e=>n(e.target.value)}),e.acceptFormats&&e.acceptFormats.length>0&&y(`p`,{className:`text-[10px] text-foreground-subtle`,children:[i(`formBuilder.modelSelector.acceptedFormats`,`Accepted formats:`),` `,e.acceptFormats.join(`, `)]})]}),(e.compatibilityNote||e.conversionGuideUrl)&&y(`div`,{className:`flex items-start justify-between gap-3 pt-1`,children:[e.compatibilityNote&&y(`p`,{className:`flex items-start gap-1 text-[10px] text-foreground-subtle`,children:[P(Le,{className:`h-3 w-3 mt-0.5 shrink-0`}),e.compatibilityNote]}),e.conversionGuideUrl&&y(`a`,{href:e.conversionGuideUrl,target:`_blank`,rel:`noopener noreferrer`,className:`flex items-center gap-1 text-[11px] text-primary hover:underline shrink-0`,children:[i(`formBuilder.modelSelector.howToConvertYourModel`,`How to convert your model`),P(I,{className:`h-3 w-3`})]})]})]})}function _m({to:e}){let{search:t}=J();return P(Y,{to:`${e}${t}`,replace:!0})}a();function vm(){return V.t(`helpers.keychainRevealHost.forbidden`)}function ym(e){if(typeof e!=`object`||!e)return null;let t=Reflect.get(e,`data`);if(typeof t!=`object`||!t)return null;let n=Reflect.get(t,`code`);return typeof n==`string`?n:null}function bm(e){let t=ym(e);if(t===`FORBIDDEN`||t===`UNAUTHORIZED`)return vm();let n=e instanceof Error?e.message:String(e);return n.length>0?V.t(`helpers.keychainRevealHost.failedWith`,{message:n}):V.t(`helpers.keychainRevealHost.failed`)}function xm({children:e}){let t=qn();return P(Qn,{reveal:p(async e=>{try{return(await t.mutateAsync({ref:e})).value}catch(e){throw Error(bm(e))}},[t]),children:e})}a();function Sm(){let e=ze(),t=j(),[n,r]=f(()=>e.isConnected()?`connected`:`disconnected`),i=M(!1),[a,o]=f(0),[c,l]=f([]);s(()=>e.subscribeConnectionEvents(e=>{r(t=>(t!==`connected`&&e===`connected`&&i.current&&o(e=>e+1),e!==`connected`&&(i.current=!0),e))}),[e]),s(()=>{a!==0&&t.invalidateQueries({queryKey:[[`addons`,`getLastRestart`]]})},[a,t]);let{data:u}=pr(void 0,{enabled:n===`connected`&&a>0,staleTime:0,refetchOnMount:!1,refetchOnWindowFocus:!1}),d=M(null);return s(()=>{if(u==null||u.requestedAt===d.current)return;d.current=u.requestedAt;let e=wm(u);l(t=>[...t,e]);let t=window.setTimeout(()=>{l(t=>t.filter(t=>t.id!==e.id))},6e3);return()=>window.clearTimeout(t)},[u]),P(E,{children:c.length>0&&P(Cm,{toasts:c})})}function Cm({toasts:e}){return P(`div`,{className:`fixed top-[calc(env(safe-area-inset-top)+1rem)] right-[calc(env(safe-area-inset-right)+1rem)] z-50 flex flex-col gap-2 max-w-sm w-full pointer-events-none`,children:e.map(e=>y(`div`,{className:`pointer-events-auto flex items-start gap-2 px-3 py-2.5 rounded-md border border-green-500/30 bg-green-500/10 shadow-lg backdrop-blur-sm`,children:[P(Be,{className:`w-4 h-4 shrink-0 mt-0.5 text-green-400`}),y(`div`,{children:[P(`div`,{className:`text-[11px] font-semibold text-foreground`,children:e.title}),P(`div`,{className:`text-[10px] text-foreground-subtle mt-0.5`,children:e.message})]})]},e.id))})}function wm(e){let t=`restart-${e.requestedAt}`;if(e.kind===`framework-update`&&e.packageName!==void 0&&e.toVersion!==void 0){let n=e.fromVersion===void 0?`v${e.toVersion}`:`v${e.fromVersion} → v${e.toVersion}`;return{id:t,title:V.t(`system.reconnectOverlay.frameworkUpdated`,`Framework updated`),message:V.t(`system.reconnectOverlay.isNow`,`{{packageName}} is now {{fromTo}}.`,{packageName:e.packageName,fromTo:n})}}return{id:t,title:V.t(`system.reconnectOverlay.serverRestarted`,`Server restarted`),message:e.requestedBy===void 0?V.t(`system.reconnectOverlay.manualRestartCompleted`,`Manual restart completed.`):V.t(`system.reconnectOverlay.manualRestartByCompleted`,`Manual restart by {{requestedBy}} completed.`,{requestedBy:e.requestedBy})}}var Tm=`/system/settings`,Em=[{path:`/system/secrets`,tab:`secrets`},{path:`/system/capabilities`,tab:`capabilities`}];function Dm(e,t=``){let n=new URLSearchParams(t);return n.delete(`tab`),n.set(`tab`,e),`${Tm}?${n.toString()}`}function Om({tab:e}){let{search:t,hash:n}=J();return P(Y,{to:`${Dm(e,t)}${n}`,replace:!0})}a();var km={info:{bg:`bg-info/10`,border:`border-info/30`,icon:Le},warning:{bg:`bg-warning/10`,border:`border-warning/30`,icon:le},critical:{bg:`bg-danger/10`,border:`border-danger/30`,icon:Me}};function Am({toast:e,onDismiss:t}){let n=km[e.severity]??km.info,r=n.icon;return s(()=>{let n=e.duration??5e3;if(n<=0)return;let r=setTimeout(()=>t(e.id),n);return()=>clearTimeout(r)},[e.id,e.duration,t]),y(`div`,{className:`flex items-start gap-3 px-4 py-3 rounded-lg border ${n.border} ${n.bg} shadow-lg backdrop-blur-sm animate-in slide-in-from-right-5 fade-in duration-200`,children:[P(r,{className:`h-4 w-4 shrink-0 mt-0.5 text-foreground-subtle`}),y(`div`,{className:`flex-1 min-w-0`,children:[P(`div`,{className:`text-xs font-semibold text-foreground`,children:e.title}),P(`div`,{className:`text-[11px] text-foreground-subtle mt-0.5`,children:e.message})]}),P(`button`,{type:`button`,onClick:()=>t(e.id),className:`shrink-0 p-0.5 rounded hover:bg-surface-hover transition-colors`,children:P(Oe,{className:`h-3.5 w-3.5 text-foreground-subtle`})})]})}function jm(){let[e,t]=f([]),n=p(e=>{t(t=>t.filter(t=>t.id!==e))},[]);return xn(void 0,{onData:e=>{let n=e,r=`toast-${Date.now()}-${Math.random().toString(36).slice(2,8)}`;t(e=>[...e,{...n,id:r,timestamp:Date.now()}])}}),e.length===0?null:P(`div`,{className:`fixed bottom-[calc(env(safe-area-inset-bottom)+1rem)] right-[calc(env(safe-area-inset-right)+1rem)] z-50 flex flex-col gap-2 max-w-sm w-full pointer-events-none`,children:e.map(e=>P(`div`,{className:`pointer-events-auto`,children:P(Am,{toast:e,onDismiss:n})},e.id))})}function Mm(e){return(t,n,r)=>e(t,{...typeof n==`string`?{defaultValue:n}:{defaultValue_one:n.one,defaultValue_other:n.other},...r})}var Nm=(e,t,n)=>Mm(V.t.bind(V))(e,t,n);a();function Pm({children:e}){let{t}=H();return P(He,{t:d(()=>Mm(t),[t]),children:e})}a();function Fm(e){if(typeof e!=`object`||!e)return;let{data:t}=e;return t?.code}function Im(e,t){let n=Fm(e);return n===`UNAUTHORIZED`||n===`FORBIDDEN`?!0:/UNAUTHORIZED|FORBIDDEN/.test(t)}function Lm(e,t,n,r){let[i,a]=f(!1),[o,c]=f(null);return s(()=>{if(a(!1),c(null),!t){a(!0);return}let i=!1;e.init().catch(()=>void 0);let o=t=>{e.awaitConnected().then(()=>{i||a(!0)},e=>{if(i)return;let s=e instanceof Error?e.message:String(e);if(Im(e,s)){if(t&&r!==void 0){r().then(e=>{if(!i){if(e){o(!1);return}console.warn(`[boot-gate] logout: probe UNAUTHORIZED and the refresh was refused`),n()}},()=>{i||(console.warn(`[boot-gate] logout: probe UNAUTHORIZED and recovery failed`),n())});return}console.warn(`[boot-gate] logout: probe UNAUTHORIZED after a successful refresh`,s),n();return}c(s),a(!0)})};return o(!0),()=>{i=!0}},[e,t,n,r]),{bootReady:i,bootError:o}}a();var Rm=3e4;function zm(e){let t=M(e);t.current=e,s(()=>{let e=null,n=()=>{if(document.visibilityState===`hidden`){e=Date.now();return}if(document.visibilityState===`visible`&&e!==null){let n=Date.now()-e;e=null,n>=Rm&&t.current()}},r=()=>{t.current()},i=e=>{e.persisted&&t.current()};return document.addEventListener(`visibilitychange`,n),window.addEventListener(`online`,r),window.addEventListener(`pageshow`,i),()=>{document.removeEventListener(`visibilitychange`,n),window.removeEventListener(`online`,r),window.removeEventListener(`pageshow`,i)}},[])}a();function Bm(){let{t:e}=H();return y(`div`,{role:`status`,"aria-busy":`true`,"aria-label":e(`layouts.addonPageLoader.loading`,`Loading page`),"data-testid":`addon-page-loading`,className:`flex flex-col gap-4 p-2 sm:p-4`,children:[P(Hn,{className:`h-7 w-48`}),P(Hn,{className:`h-5 w-72 max-w-full`}),P(Hn,{className:`h-40`})]})}function Vm({message:e}){let{t}=H();return P(`div`,{className:`p-2 sm:p-4`,"data-testid":`addon-page-error`,children:P(Yn,{title:t(`layouts.addonPageLoader.failedTitle`,`This page could not be shown`),message:e})})}var Hm=class extends _{state={error:null,resetKey:this.props.resetKey};static getDerivedStateFromError(e){return{error:e instanceof Error?e:Error(String(e))}}static getDerivedStateFromProps(e,t){return e.resetKey===t.resetKey?null:{error:null,resetKey:e.resetKey}}componentDidCatch(e,t){console.error(`[addon-page] ${this.props.resetKey} crashed`,e,t.componentStack)}render(){return this.state.error===null?this.props.children:P(Vm,{message:this.state.error.message})}};function Um({pageKey:e,children:t}){return P(Hm,{resetKey:e,children:P(w,{fallback:P(Bm,{}),children:t})})}a();function Wm(e){let t=new Set,n=new Set,r=e=>e.page.remoteName.includes(e.addonId.replace(/[^a-zA-Z0-9]+/g,`_`)),i=[...e.filter(r),...e.filter(e=>!r(e))],a=[];for(let e of i){let r=`${e.addonId}::${e.page.id}`;t.has(r)||n.has(e.page.path)||(t.add(r),n.add(e.page.path),a.push({id:e.page.id,addonId:e.addonId,label:e.page.label,icon:e.page.icon,path:e.page.path,remoteName:e.page.remoteName,bundle:e.page.bundle,bundleUrl:e.bundleUrl,...e.page.section===void 0?{}:{section:e.page.section},...e.page.sectionLabel===void 0?{}:{sectionLabel:e.page.sectionLabel}}))}return a}var Gm=new Map,Km=new Map,qm=new Set;function Jm(e){return!e||typeof e!=`object`?!1:typeof e.default==`function`}async function Ym(e,t){let i=Gm.get(e);if(i)return i;let a=Km.get(e);if(a)return a;qm.has(e)||(jn(),r([{name:e,entry:z(t),type:`module`}],{force:!1}),qm.add(e));let o=n(`${e}/page`).then(n=>{if(!Jm(n))throw Error(`Addon page remote ${e} (${t}) does not expose a default React component on './page'`);return Gm.set(e,n.default),Km.delete(e),n.default}).catch(t=>{throw Km.delete(e),t});return Km.set(e,o),o}function Xm(){let{t:e}=H(),{pagePath:t}=Ia(),n=Ma(),r=ze(),{data:i}=nr(void 0),a=d(()=>i?Wm(i):void 0,[i]),o=a?.find(e=>e.path===`/addon/${t}`),c=o?.remoteName,l=o?.bundleUrl,[u,p]=f(null),[m,h]=f(null);return s(()=>{if(!c||!l)return;h(null);let e=Gm.get(c);if(e){p(()=>e);return}p(null);let t=!1;return Ym(c,l).then(e=>{t||p(()=>e)}).catch(e=>{t||h(e instanceof Error?e.message:String(e))}),()=>{t=!0}},[c,l]),a?o?m?P(Vm,{message:m}):u?P(Um,{pageKey:o.remoteName,children:P(u,{trpc:r.trpcClient,theme:{isDark:document.documentElement.classList.contains(`dark`)},navigate:e=>{n(e.startsWith(`/`)?e:`/${e}`)}})}):P(Bm,{}):P(`div`,{className:`flex items-center justify-center h-full text-foreground-subtle`,children:e(`layouts.addonPageLoader.addonPageNotFound`,`Addon page not found`)}):P(Bm,{})}function Zm({children:e}){let t=vn({});return P(Cr,{value:t.isPending?{status:`pending`}:t.isError||t.data===void 0?{status:`unknown`,reason:t.isError?String(t.error):`no palette`}:t.data.status===`unknown`?{status:`unknown`,reason:t.data.reason}:{status:`ready`,palette:t.data},children:e})}function Qm(){let e=lr(),{t}=H();return e.status===`unknown`?P(`p`,{role:`status`,className:`shrink-0 px-4 py-1 text-xs text-warning`,children:t(`pipeline.palette.unknown`,`The stored palette cannot be read ({{reason}}). Boxes use the bundled CamStack preset.`,{reason:e.reason})}):null}Qr();var $m=/\p{Mn}/gu;function eh(e){return e.normalize(`NFD`).replace($m,``).toLowerCase().trim()}var th=[`device`,`page`,`integration`],nh=0,rh=1,ih=2,ah=3,oh=4,sh=5,ch=6,lh=7;function uh(e,t,n,r){return n.includes(r)?nh:e===r?rh:e.startsWith(r)?ih:e.split(/\s+/).some(e=>e.startsWith(r))?ah:e.includes(r)?oh:t.some(e=>e.includes(r))?sh:null}function dh(e,t){let n=0;for(let r=0;r<e.length&&n<t.length;r++)e[r]===t[n]&&n++;return n===t.length}function fh(e){return e<4?0:e<=7?1:e<=12?2:3}function ph(e,t,n){if(e===t)return 0;if(n<=0||Math.abs(e.length-t.length)>n)return null;let r=t.length,i=Array(r+1).fill(0),a=Array.from({length:r+1},(e,t)=>t),o=Array(r+1).fill(0);for(let s=1;s<=e.length;s++){o[0]=s;let c=s,l=e[s-1];for(let n=1;n<=r;n++){let r=t[n-1],u=l===r?0:1,d=Math.min((a[n]??1/0)+1,o[n-1]+1,(a[n-1]??1/0)+u);s>1&&n>1&&l===t[n-2]&&e[s-2]===r&&(d=Math.min(d,(i[n-2]??1/0)+1)),o[n]=d,d<c&&(c=d)}if(c>n)return null;let u=i;i=a,a=o,o=u}let s=a[r]??1/0;return s<=n?s:null}function mh(e,t){if(dh(e,t))return ch;let n=fh(t.length);if(n>0){for(let r of e.split(/\s+/))if(ph(r,t,n)!==null)return lh}return null}function hh(e,t,n=200){let r=eh(t);if(r.length===0)return{groups:[],totalMatched:0,truncated:!1};let i=new Map;for(let t of e){let e=eh(t.label),n=uh(e,(t.keywords??[]).map(eh),(t.identifiers??[]).map(eh),r)??mh(e,r);if(n===null)continue;let a=i.get(t.domain)??[];a.push({item:t,rank:n}),i.set(t.domain,a)}let a=0;for(let e of i.values())a+=e.length;let o=n,s=[];for(let e of th){let t=i.get(e);if(!t||t.length===0||o<=0)continue;t.sort((e,t)=>e.rank-t.rank||e.item.label.localeCompare(t.item.label));let n=t.slice(0,o).map(e=>e.item);o-=n.length,s.push({domain:e,items:n})}return{groups:s,totalMatched:a,truncated:a>n}}function gh(e){return e.flatMap(e=>e.items)}function _h(e){let t=new Map;for(let n of e)t.set(n.id,n.name);let n=new Map;for(let r of e){let e=r.parentDeviceId;e!==null&&e!==r.id&&n.set(r.id,t.get(e)??`#${String(e)}`)}return n}function vh(e,t){return e.filter(e=>!e.adminOnly||t)}function yh({t:e,isAdmin:t}){let n=vh([{label:e(`nav.devices`,`Devices`),icon:L,path:`/devices`},{label:e(`nav.integrations`),icon:ue,path:`/integrations`},{label:e(`nav.build`,`Build-your-self`),icon:Qe,path:`/build`,adminOnly:!0},{label:e(`nav.locations`,`Locations`),icon:Je,path:`/locations`,adminOnly:!0},{label:e(`nav.viewer`,`Viewer`),icon:en,path:`/live`}],t),r=vh([{label:e(`nav.library`,`Library`),icon:tn,path:`/library`,adminOnly:!0,keywords:[`People`,`Vehicles`,`Events`,`Scenes`,`plates`,`faces`,`detection-intelligence`]},{label:e(`nav.recordings`,`Recordings`),icon:re,path:`/recordings`,adminOnly:!0}],t),i=vh([{label:e(`nav.nodes`,`Nodes`),icon:tt,path:`/system/nodes`,adminOnly:!0},{label:e(`nav.history`,`History`),icon:ee,path:`/system/history`,adminOnly:!0,keywords:[`charts`,`graphs`,`energy`,`temperature`,`metrics`,`trends`]},{label:e(`nav.pipeline`,`Pipeline`),icon:hn,path:`/system/pipeline`},{label:e(`system.addons`),icon:ge,path:`/system/addons`,adminOnly:!0},{label:e(`system.ai`,`AI`),icon:Se,path:`/system/ai`,adminOnly:!0}],t),a=vh([{label:e(`system.identity`,`Identity & Access`),icon:Ue,path:`/system/identity`,adminOnly:!0},{label:e(`system.network`,`Network`),icon:sn,path:`/system/network`,adminOnly:!0},{label:e(`system.integrations`,`Connectivity`),icon:ue,path:`/system/integrations`,adminOnly:!0},{label:e(`system.data`,`Data`),icon:ae,path:`/system/data`,adminOnly:!0},{label:e(`system.notifications`,`Notifications`),icon:se,path:`/system/notifications`,adminOnly:!0},{label:e(`system.calendars`,`Calendars`),icon:an,path:`/system/calendars`,adminOnly:!0},{label:e(`system.systemNav`,`System`),icon:Ye,path:Tm,adminOnly:!0},{label:e(`system.logs`,`Logs`),icon:Ve,path:`/system/logs`,adminOnly:!0},{label:e(`system.terminal`,`Terminal`),icon:ln,path:`/system/terminal`,adminOnly:!0}],t);return[{key:`top`,label:null,items:n},{key:`detection`,label:e(`nav.detectionSection`,`Detection`),items:r},{key:`cluster`,label:e(`nav.clusterSection`,`Cluster`),items:i},{key:`administration`,label:e(`system.title`,`Administration`),items:a}]}var bh={gauge:de,puzzle:ge,bot:ce,cpu:be,terminal:ln,box:Fe,boxes:Fe,monitor:en,wrench:je,activity:qe,plug:ue,"graduation-cap":te};function xh(e){return bh[e]??ge}function Sh(e,t){for(let n of yh(t))for(let t of n.items)if(t.path===e)return{icon:t.icon,title:t.label,path:t.path};return null}var Ch=` · `;function wh(e,t,n,r){let i=[`#${t}`];return r!==void 0&&i.push(r),e.stableId.length>0&&e.stableId!==n&&i.push(e.stableId),i.push(e.type),e.disabled&&i.push(`disabled`),i.join(Ch)}function Th(e,t=null){let n=_h(e),r=_n(t);return e.map(e=>{let t=String(e.id),i=e.name||e.stableId||`#${t}`,a=n.get(e.id),o=r(e),s=o.kind===`resolved`?o.integration.name:``;return{key:`device:${t}`,domain:`device`,label:i,subtitle:wh(e,t,i,a),identifiers:[t,`#${t}`],keywords:[e.stableId,e.addonId,e.location??``,a??``,s].filter(e=>e.length>0),path:`/devices/${t}`,icon:Sr(e.type).icon}})}function Eh(e){return e.map(e=>({key:`integration:${e.id}`,domain:`integration`,label:e.name||e.addonId,subtitle:e.enabled?e.addonId:V.t(`helpers.searchItems.disabled`,{addonId:e.addonId}),keywords:[e.addonId,e.processState],path:`/integrations/${e.id}`}))}function Dh(e,t,n){let r=e.section?.trim();return r?t[r]??e.sectionLabel?.trim()??r:n}function Oh(e,t,n){let r=e.flatMap(e=>e.items.map(t=>({key:`page:${t.path}`,domain:`page`,label:t.label,subtitle:e.label??void 0,path:t.path,icon:t.icon,...t.keywords!==void 0&&t.keywords.length>0?{keywords:t.keywords}:{}}))),i={detection:n.detection,cluster:n.cluster,administration:n.administration},a=t.map(e=>({key:`page:addon:${e.addonId}:${e.id}`,domain:`page`,label:e.label,subtitle:Dh(e,i,n.ungrouped),keywords:[e.addonId],path:e.path,icon:xh(e.icon)}));return[...r,...a]}a();var kh={device:{labelKey:`search.resultsList.devices`,icon:L},page:{labelKey:`search.resultsList.pages`,icon:rn},integration:{labelKey:`search.resultsList.integrations`,icon:ue}};function Ah({groups:e,activeKey:t,query:n,totalMatched:r,truncated:i,onSelect:a,onHover:o}){let{t:c}=H(),l=M(null);if(s(()=>{t&&(l.current?.querySelector(`[data-key="${CSS.escape(t)}"]`))?.scrollIntoView({block:`nearest`})},[t]),n.trim().length===0)return null;if(e.length===0)return P(`div`,{className:`px-3 py-4 text-center text-[12px] text-foreground-subtle`,children:c(`search.resultsList.noResults`,{query:n})});let u=e.reduce((e,t)=>e+t.items.length,0);return y(E,{children:[P(`div`,{ref:l,role:`listbox`,className:`max-h-[60vh] overflow-y-auto py-1`,children:e.map(e=>{let n=kh[e.domain],r=n.icon;return y(`div`,{className:`px-1 py-1`,children:[y(`div`,{className:`sticky top-0 z-10 flex items-center gap-1.5 bg-surface px-2 py-1 text-[10px] font-semibold uppercase tracking-widest text-foreground-subtle/60`,children:[P(r,{className:`h-3 w-3`}),c(n.labelKey)]}),e.items.map(e=>{let r=e.icon??n.icon,i=e.key===t;return y(`button`,{type:`button`,role:`option`,"aria-selected":i,"data-key":e.key,onMouseEnter:()=>o(e),onClick:()=>a(e),className:`flex w-full items-center gap-2.5 rounded-md px-2 py-1.5 text-left text-[12px] transition-colors ${i?`bg-primary/12 text-primary`:`text-foreground hover:bg-surface-hover`}`,children:[P(r,{className:`h-3.5 w-3.5 shrink-0 ${i?`text-primary`:`text-foreground-subtle`}`}),y(`span`,{className:`flex-1 min-w-0`,children:[P(`span`,{className:`block truncate font-medium`,children:e.label}),e.subtitle&&P(`span`,{className:`block truncate text-[10px] text-foreground-subtle`,children:e.subtitle})]})]},e.key)})]},e.domain)})}),i&&P(`div`,{className:`border-t border-border px-3 py-1.5 text-center text-[10px] text-foreground-subtle`,children:c(`search.truncatedResults`,`Showing first {{shown}} of {{total}} — refine your search.`,{shown:u,total:r})})]})}a();function jh({navSections:e,addonPages:t,compact:n,onNavigated:r}){let{t:i}=H(),a=Ma(),o=M(null),c=M(null),l=M(null),[u,m]=f(null),[h,g]=f(``),[_,v]=f(0),[b,x]=f(!1),{data:S}=wr({projection:`slim`}),{data:C}=Hr(void 0),w=d(()=>{let n={detection:i(`nav.detectionSection`,`Detection`),cluster:i(`nav.clusterSection`,`Cluster`),administration:i(`system.title`,`Administration`),ungrouped:i(`nav.addonPages`,`Addon Pages`)};return[...Th(S??[],C??null),...Oh(e,t,n),...Eh(C??[])]},[S,C,e,t,i]),{groups:T,totalMatched:E,truncated:D}=d(()=>hh(w,h),[w,h]),O=d(()=>gh(T),[T]);s(()=>{v(0)},[h,w]),s(()=>{b&&o.current?.focus()},[b]);let k=p(()=>{x(!1),g(``),v(0)},[]),A=p(e=>{a(e.path),k(),o.current?.blur(),r?.()},[a,k,r]);s(()=>{function e(e){(e.metaKey||e.ctrlKey)&&e.key.toLowerCase()===`k`&&(e.preventDefault(),x(!0))}return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[]),s(()=>{if(!b)return;function e(e){if(!(e.target instanceof Node))return;let t=c.current?.contains(e.target)===!0,n=l.current?.contains(e.target)===!0;!t&&!n&&x(!1)}return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[b]);let j=b&&h.trim().length>0;s(()=>{if(!j){m(null);return}let e=()=>{let e=o.current?.getBoundingClientRect();e&&m({left:e.left,top:e.bottom+4,width:e.width})};return e(),window.addEventListener(`resize`,e),window.addEventListener(`scroll`,e,!0),()=>{window.removeEventListener(`resize`,e),window.removeEventListener(`scroll`,e,!0)}},[j]);let N=O[_]?.key??null,F=i(`search.placeholder`,`Search devices, pages, integrations…`),I=y(`div`,{className:`relative`,children:[P(Ae,{className:`pointer-events-none absolute left-2 top-1/2 h-3.5 w-3.5 -translate-y-1/2 text-foreground-subtle`}),P(`input`,{ref:o,type:`text`,value:h,placeholder:F,"aria-label":F,role:`combobox`,"aria-expanded":b&&h.trim().length>0,"aria-controls":`global-search-results`,onChange:e=>{g(e.target.value),x(!0)},onFocus:()=>x(!0),onKeyDown:e=>{if(e.key===`ArrowDown`)e.preventDefault(),O.length>0&&v(e=>(e+1)%O.length);else if(e.key===`ArrowUp`)e.preventDefault(),O.length>0&&v(e=>(e-1+O.length)%O.length);else if(e.key===`Enter`){e.preventDefault();let t=O[_];t&&A(t)}else e.key===`Escape`&&(e.preventDefault(),k(),o.current?.blur())},className:`w-full rounded-md border border-border bg-surface py-1.5 pl-7 pr-6 text-[12px] text-foreground placeholder:text-foreground-subtle/70 focus:outline-none focus:ring-1 focus:ring-primary/50`}),h.length>0&&P(`button`,{type:`button`,"aria-label":i(`search.globalSearch.clearSearch`,`Clear search`),onClick:()=>{g(``),o.current?.focus()},className:`absolute right-1.5 top-1/2 -translate-y-1/2 text-foreground-subtle hover:text-foreground`,children:P(Oe,{className:`h-3 w-3`})}),j&&u!==null&&$r(P(`div`,{ref:l,id:`global-search-results`,className:`fixed z-50 w-max max-w-[26rem] rounded-lg border border-border bg-surface shadow-xl`,style:{left:u.left,top:u.top,minWidth:u.width},children:P(Ah,{groups:T,activeKey:N,query:h,totalMatched:E,truncated:D,onSelect:A,onHover:e=>{let t=O.findIndex(t=>t.key===e.key);t>=0&&v(t)}})}),document.body)]});return n?P(`div`,{ref:c,className:`px-1.5 pb-1.5`,children:b?P(`div`,{className:`fixed z-50 w-max min-w-72 max-w-[26rem]`,style:{left:`calc(env(safe-area-inset-left) + 3.5rem)`,top:`calc(env(safe-area-inset-top) + 3.5rem)`},children:I}):P(`button`,{type:`button`,onClick:()=>x(!0),"aria-label":F,title:F,className:`flex w-full items-center justify-center rounded-md px-0 py-2 text-foreground-subtle hover:bg-surface-hover hover:text-foreground transition-colors`,children:P(Ae,{className:`h-3.5 w-3.5 shrink-0`})})}):P(`div`,{ref:c,className:`px-2 pb-2`,children:I})}var Mh=/^(\d{1,3}\.){3}\d{1,3}$/;function Nh(e){let t=e.startsWith(`[`)&&e.endsWith(`]`)?e.slice(1,-1):e;return!!(Mh.test(t)||t.includes(`:`))}function Ph(e,t){return!t||Nh(e)?!1:e===t||e.endsWith(`.${t}`)}a();var Fh=`auth-webauthn/passkey-enrollment`,Ih=`camstack_passkey_prompt_dismissed:`,Lh=720*60*60*1e3;function Rh(e){try{let t=localStorage.getItem(`${Ih}${e}`);if(!t)return!1;let n=Number(t);return Number.isFinite(n)?Date.now()-n<Lh:!1}catch{return!1}}function zh(e){try{localStorage.setItem(`${Ih}${e}`,String(Date.now()))}catch{}}function Bh(){let{user:e}=Wl(),{t}=H(),n=ze(),r=wn(Fh),[i,a]=f(!1),[o,s]=f(!1),c=d(()=>e?Rh(e.id):!0,[e]),l=fr.auth.listLoginMethods.useQuery().data?.find(e=>e.kind===`passkey`),u=l!==void 0&&Ph(window.location.hostname,l.rpId),m=e!==null&&u&&r!=null&&!c,h=T({queryKey:[`auth`,`listOwnPasskeys`],queryFn:()=>n.listOwnPasskeys(),enabled:m,staleTime:6e4}),g=p(()=>{e&&zh(e.id),a(!0),s(!1)},[e]),_=p(()=>{s(!1),h.refetch()},[h]);return!m||i||h.data===void 0||h.data.length>0?null:y(`div`,{className:`shrink-0 border-b border-primary/20 bg-primary/5`,children:[y(`div`,{className:`flex items-center gap-2.5 px-3 py-2 text-xs text-foreground`,children:[P(nn,{className:`h-4 w-4 text-primary shrink-0`}),P(`span`,{className:`flex-1 min-w-0`,children:t(`passkeyPrompt.message`,`Save a passkey for faster sign-in?`)}),P(`button`,{onClick:()=>s(e=>!e),className:`rounded bg-primary px-2.5 py-1 text-[11px] font-semibold text-primary-foreground hover:bg-primary/90`,children:t(`passkeyPrompt.enrollNow`,`Enroll now`)}),P(`button`,{onClick:g,className:`inline-flex items-center gap-1 rounded border border-border px-2 py-1 text-[11px] text-foreground-subtle hover:text-foreground hover:bg-surface-hover`,children:t(`passkeyPrompt.notNow`,`Not now`)}),P(`button`,{onClick:g,"aria-label":t(`passkeyPrompt.notNow`,`Not now`),className:`p-1 rounded text-foreground-subtle hover:text-foreground`,children:P(Oe,{className:`h-3.5 w-3.5`})})]}),o&&P(`div`,{className:`px-3 pb-3`,children:y(`div`,{className:`max-w-xl`,children:[P(Wr,{widgetId:Fh,host:`dashboard`}),P(`div`,{className:`mt-2 flex justify-end`,children:P(`button`,{onClick:_,className:`rounded border border-border px-2.5 py-1 text-[11px] text-foreground-subtle hover:text-foreground hover:bg-surface-hover`,children:t(`common.close`,`Close`)})})]})})]})}var Vh=6e4;function Hh(){let e=Gr(void 0,{staleTime:Vh});return{info:e.data?.serverName??null,isLoading:e.isLoading}}a();var Uh=`system-config`,Wh=`hub`,Gh=`camstack_server_name_prompt_dismissed`;function Kh(){try{return sessionStorage.getItem(Gh)===`1`}catch{return!1}}function qh(){try{sessionStorage.setItem(Gh,`1`)}catch{}}function Jh(e){return e.isAdmin&&e.info!==null&&e.info.isDefault&&!e.dismissed}function Yh(){let{user:e}=Wl(),{info:t}=Hh(),[n,r]=f(Kh);return Jh({isAdmin:e?.isAdmin===!0,info:t,dismissed:n})?P(Xh,{suggestion:t?.name??``,onLater:()=>{qh(),r(!0)}}):null}function Xh({suggestion:e,onLater:t}){let{t:n}=H(),r=j(),i=Ur(),[a,o]=f(e),[c,l]=f(null),u=M(null);s(()=>u.current?.focus(),[]);let d=p(async()=>{let e=vt.safeParse(a);if(!e.success){l(e.error.issues[0]?.message??n(`serverName.invalid`,`Not a valid name`));return}l(null);try{await i.mutateAsync({addonId:Uh,nodeId:Wh,patch:{name:e.data}}),await r.invalidateQueries({queryKey:[[`system`,`info`]]}),await r.invalidateQueries({queryKey:[[`addonSettings`]]})}catch(e){l(e instanceof Error&&e.message.length>0?e.message:`Could not save`)}},[r,i,n,a]);return P(ur,{open:!0,onOpenChange:e=>!e&&t(),children:P(Fr,{children:y(`form`,{onSubmit:e=>{e.preventDefault(),i.isPending||d()},children:[y(mr,{children:[P(er,{children:n(`serverName.title`,`Name this server`)}),P(Tr,{children:n(`serverName.description`,`Pick a name for this hub. It shows in the admin UI and on the apps’ sign-in screen. You can change it later in System settings.`)})]}),P(dr,{children:P(qr,{label:n(`serverName.label`,`Server name`),...c===null?{}:{error:c},children:P(B,{ref:u,value:a,maxLength:48,onChange:e=>o(e.target.value),state:c===null?`default`:`error`,"aria-label":n(`serverName.label`,`Server name`)})})}),y(_r,{children:[P(Xn,{type:`button`,variant:`ghost`,onClick:t,disabled:i.isPending,children:n(`serverName.later`,`Later`)}),y(Xn,{type:`submit`,disabled:i.isPending||a.trim().length===0,children:[i.isPending&&P(Re,{className:`h-4 w-4 animate-spin`}),n(`common.save`,`Save`)]})]})]})})})}var Zh=4,Qh=160,$h=320,eg=`env(safe-area-inset-top)`,tg=`env(safe-area-inset-bottom)`;function ng(e){let{rect:t,viewportWidth:n,viewportHeight:r}=e,i=Math.min($h,n-16),a={position:`fixed`,left:Math.max(8,Math.min(t.left,n-8-i)),width:i,zIndex:9999};if(r-t.bottom>=t.top){let e=`max(${t.bottom+Zh}px, calc(${eg} + 8px))`;return{...a,top:e,maxHeight:`max(${Qh}px, calc(100dvh - ${e} - ${tg} - 8px))`}}let o=`max(${r-t.top+Zh}px, calc(${tg} + 8px))`;return{...a,bottom:o,maxHeight:`max(${Qh}px, calc(100dvh - ${o} - ${eg} - 8px))`}}function rg(e){return e===`totp`||e===`passkey`}function ig(e){if(!e.startsWith(`#`))return null;let t=new URLSearchParams(e.slice(1)),n=t.get(`challenge`);if(n!==null){if(n.length===0)return null;let e=(t.get(`factors`)??``).split(`,`).filter(rg);return e.length===0?null:{kind:`challenge`,challengeToken:n,factors:e}}let r=t.get(`error`);return r===`sso-not-linked`||r===`sso-state`?{kind:`error`,code:r,provider:t.get(`provider`)}:null}function ag(e,t){switch(e){case`sso-not-linked`:return V.t(`helpers.ssoReturn.notLinked`,{provider:t??V.t(`helpers.ssoReturn.signInFallback`)});case`sso-state`:return V.t(`helpers.ssoReturn.state`)}}var og={expired:`helpers.ssoReturn.link.expired`,provider:`helpers.ssoReturn.link.provider`,session:`helpers.ssoReturn.link.session`,conflict:`helpers.ssoReturn.link.conflict`,state:`helpers.ssoReturn.link.state`};function sg(e){let t=new URLSearchParams(e),n=t.get(`linked`);if(n!==null&&n.length>0)return{kind:`linked`,provider:n};let r=t.get(`linkError`);return r===null?null:{kind:`error`,message:V.t(og[r]??`helpers.ssoReturn.link.failed`)}}var cg=`camstack:sso-return`,lg=`camstack:sso-ack`,ug=`/sso-complete`,dg=1500,fg=520,pg=680;function mg(e){if(!e.startsWith(`#`))return null;let t=new URLSearchParams(e.slice(1)),n=t.get(`return`);t.delete(`return`);let r=t.toString();return n===`login`?r.length>0?{target:n,fragment:r}:null:n===`profile`&&r.length>0?{target:n,query:r}:null}function hg(e){return e.target===`login`?`/login#${e.fragment}`:`/system/my-access?${e.query}`}function gg(e){let t=new URL(e,`http://placeholder.invalid`);return t.searchParams.set(`popup`,`1`),/^[a-z][a-z0-9+.-]*:/i.test(e)?t.toString():`${t.pathname}${t.search}${t.hash}`}function _g(e=window){let t=Math.max(0,Math.round(e.screenX+(e.outerWidth-fg)/2)),n=Math.max(0,Math.round(e.screenY+(e.outerHeight-pg)/2));return[`popup=yes`,`width=${fg}`,`height=${pg}`,`left=${t}`,`top=${n}`,`toolbar=no`,`menubar=no`,`location=no`,`status=no`,`resizable=yes`,`scrollbars=yes`].join(`,`)}function vg(e){try{return window.open(e??`about:blank`,`camstack-sso`,_g())??null}catch{return null}}function yg(e){if(typeof e!=`object`||!e)return!1;let t=e;return t.target===`login`?typeof t.fragment==`string`:t.target===`profile`?typeof t.query==`string`:!1}function bg(e){if(typeof e!=`object`||!e)return!1;let t=e;return t.type===`camstack:sso-return`&&yg(t.completion)}function xg(e,t,n){return t===null||e.source!==t||e.origin!==n?null:bg(e.data)?e.data.completion:null}var Sg=`camstack-sso`,Cg=`camstack:sso-done`;function wg(e,t){return e.target===`profile`?{target:`profile`,query:e.query}:t?{target:`login`}:null}function Tg(e){if(typeof e!=`object`||!e)return null;let t=e;if(t.type!==`camstack:sso-done`)return null;let n=Object.keys(t).sort().join(`,`);return t.target===`login`&&n===`target,type`?{target:`login`}:t.target===`profile`&&typeof t.query==`string`&&n===`query,target,type`?{target:`profile`,query:t.query}:null}function Eg(e){return typeof e==`object`&&!!e&&e.type===`camstack:sso-done-ack`}function Dg(e){try{let t=e.location.origin;return typeof t==`string`?t:null}catch{return null}}function Og(){if(typeof BroadcastChannel>`u`)return null;try{let e=new BroadcastChannel(Sg);return{post:t=>e.postMessage(t),subscribe:t=>{let n=e=>t(e.data);return e.addEventListener(`message`,n),()=>e.removeEventListener(`message`,n)},close:()=>e.close()}}catch{return null}}var kg=500;function Ag(e,t,n=window,r={}){let i=n.location.origin,a=r.channel===void 0?Og():null,o=r.channel===void 0?a:r.channel,s=r.setInterval??((e,t)=>window.setInterval(e,t)),c=r.clearInterval??(e=>window.clearInterval(e)),l=!1,u=!1,d=r=>{let a=xg(r,e,i);a===null||l||(l=!0,n.removeEventListener(`message`,d),e.postMessage({type:lg},i),t.onReturn(a))};n.addEventListener(`message`,d);let f=o?.subscribe(e=>{let n=Tg(e);n===null||l||(l=!0,o.post({type:`camstack:sso-done-ack`}),t.onDone?.(n))})??null,p=s(()=>{u||!e.closed||(u=!0,c(p),t.onClosed?.())},kg);return()=>{n.removeEventListener(`message`,d),f?.(),a?.close(),c(p)}}function jg(e,t,n){if(t===null||e.source!==t||e.origin!==n)return!1;let r=e.data;return typeof r==`object`&&!!r&&r.type===`camstack:sso-ack`}function Mg(e,t){return new Promise(n=>{let r=!1,i=t(()=>{r||(r=!0,i(),n(!0))});e.setTimeout(()=>{r||(r=!0,i(),n(!1))},dg)})}function Ng(e,t,n){let r=Mg(n,e=>{let r=r=>{jg(r,t,n.origin)&&e()};return n.addEventListener(`message`,r),()=>n.removeEventListener(`message`,r)});try{let r={type:cg,completion:e};t.postMessage(r,n.origin)}catch{}return r}function Pg(e,t,n){let r=Mg(n,e=>t.subscribe(t=>{Eg(t)&&e()}));return t.post({type:Cg,...e}),r}async function Fg(e,t){let n=t.opener!==null&&!t.opener.closed?t.opener:null;if(n!==null&&Dg(n)===t.origin&&await Ng(e,n,t)){t.close();return}let r=e.target===`login`?new URLSearchParams(e.fragment).get(`token`):null,i=r!==null&&r.length>0,a=wg(e,i);if(a!==null&&t.channel!==null&&(r!==null&&i&&await t.persistSession(r),await Pg(a,t.channel,t))){t.close();return}if(n!==null&&e.target===`profile`){let n=sg(`?${e.query}`);if(n?.kind===`error`){t.showResult({kind:`link-error`,message:n.message});return}t.close();return}t.continueAt(hg(e))}function Ig(e,t){return(t.length>0&&e.startsWith(t)?e.slice(t.length):e).replace(/\/+$/,``)===ug}var Lg=`camstack:broker-oauth`;function Rg(e){if(typeof e!=`object`||!e)return!1;let t=e;return t.type===`camstack:broker-oauth`&&typeof t.ok==`boolean`}function zg(e,t){return e.split(`{{brokerId}}`).join(encodeURIComponent(t))}function Bg(e,t,n=window){let r=n.location.origin,i=!1,a=e=>{i||(i=!0,n.removeEventListener(`message`,o),window.clearInterval(s),t(e))},o=t=>{t.origin!==r||t.source!==e||Rg(t.data)&&a({ok:t.data.ok,...t.data.brokerId===void 0?{}:{brokerId:t.data.brokerId},...t.data.error===void 0?{}:{error:t.data.error}})};n.addEventListener(`message`,o);let s=window.setInterval(()=>{e.closed&&a({ok:!0})},500);return()=>{i=!0,n.removeEventListener(`message`,o),window.clearInterval(s)}}var Vg={open:e=>vg(e),assign:e=>window.location.assign(e),watch:(e,t)=>Bg(e,t)};function Hg(e,t,n=Vg){let r=z(gg(e)),i=n.open(r);if(i===null){n.assign(r);return}n.watch(i,e=>{t?.(e)})}function Ug(e,t,n){Hg(zg(e,t),n)}var Wg=!1;function Gg(){return Wg}function Kg(){Wg=!0}function qg(e){return!e.read&&e.severity===`critical`}function Jg(e){return e.filter(qg)}function Yg(e){return e!==void 0&&typeof e.href==`string`&&e.href.length>0}var Xg=/^\/addon\/[^/?#]+\/oauth\//;function Zg(e){return e.navigation===void 0?Xg.test(e.href):e.navigation===`server`}function Qg({action:e,className:t,onActivate:n}){let r=j();return Zg(e)?P(`a`,{href:z(e.href),className:t,onClick:t=>{t.preventDefault(),n?.(t),Hg(e.href,()=>{r.invalidateQueries({queryKey:[[`alerts`]]}),r.invalidateQueries({queryKey:[[`broker`]]}),r.invalidateQueries({queryKey:[[`recordEntries`]]})})},children:e.label}):P($o,{to:e.href,className:t,onClick:n,children:e.label})}a(),Qr();var $g={info:Le,success:Be,warning:le,error:Me,critical:on},e_={info:`text-info`,success:`text-success`,warning:`text-warning`,error:`text-danger`,critical:`text-danger`},t_={active:`border-l-info`,"in-progress":`border-l-warning`,completed:`border-l-success`,failed:`border-l-danger`,dismissed:`border-l-foreground-subtle/30`};function n_(e){let t=Math.floor((Date.now()-e)/1e3);if(t<60)return V.t(`helpers.relativeTime.justNow`);let n=Math.floor(t/60);if(n<60)return V.t(`helpers.relativeTime.minutesAgo`,{count:n});let r=Math.floor(n/60);if(r<24)return V.t(`helpers.relativeTime.hoursAgo`,{count:r});let i=Math.floor(r/24);return V.t(`helpers.relativeTime.daysAgo`,{count:i})}function r_(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function i_(e){return typeof e==`string`&&e.length>0?e:void 0}function a_(e){if(r_(e.metadata)){let t=i_(e.metadata.nodeId)??i_(e.metadata.agentId);if(t!==void 0)return t}let t=e.source;if(t!==void 0&&!(t.type!==`node`&&t.type!==`agent`))return i_(t.id)}function o_({alert:e,onMarkRead:t,onDismiss:n}){let{t:r}=H(),i=e.severity in $g?e.severity:`info`,a=Yg(e.action)?e.action:void 0,o=e.status in t_?e.status:`active`,s=$g[i],c=e_[i],l=t_[o],{nodes:u}=cr(),d=a_(e),f=d===void 0?void 0:u.find(e=>e.id===d),p=d===void 0?void 0:f?.name??d;return y(`div`,{className:`flex items-start gap-2.5 px-3 py-2.5 border-l-2 ${l} ${e.read?`opacity-60`:``} hover:bg-surface-hover transition-colors`,children:[P(s,{className:`h-3.5 w-3.5 shrink-0 mt-0.5 ${c}`}),y(`div`,{className:`flex-1 min-w-0`,children:[y(`div`,{className:`flex items-center gap-1.5`,children:[P(`span`,{className:`text-[11px] font-semibold ${e.read?`text-foreground-subtle`:`text-foreground`}`,children:e.title}),!e.read&&P(`span`,{className:`h-1.5 w-1.5 rounded-full bg-primary shrink-0`})]}),p!==void 0&&P(`div`,{className:`text-foreground-subtle text-[10px] mt-0.5 truncate`,children:p}),P(`div`,{className:`text-[10px] text-foreground-subtle mt-0.5 line-clamp-2`,children:e.message}),a!==void 0&&P(Qg,{action:a,className:`inline-flex mt-1.5 items-center rounded-md bg-primary px-2 py-0.5 text-[10px] font-medium text-primary-foreground hover:bg-primary/90 transition-colors`,onActivate:e=>e.stopPropagation()}),e.status===`in-progress`&&e.progress!==void 0&&y(`div`,{className:`mt-1.5 flex items-center gap-2`,children:[P(`div`,{className:`flex-1 h-1 bg-surface-hover rounded-full overflow-hidden`,children:P(`div`,{className:`h-full bg-primary rounded-full transition-all duration-300`,style:{width:`${String(Math.min(100,Math.max(0,e.progress)))}%`}})}),y(`span`,{className:`text-[9px] text-foreground-subtle font-mono shrink-0`,children:[String(Math.round(e.progress)),`%`]})]}),P(`div`,{className:`text-[9px] text-foreground-subtle/60 mt-1`,children:n_(e.updatedAt)})]}),y(`div`,{className:`flex items-center gap-0.5 shrink-0`,children:[!e.read&&P(`button`,{type:`button`,onClick:n=>{n.stopPropagation(),t(e.id)},className:`p-1 rounded hover:bg-surface-hover transition-colors`,title:r(`ui.alertBell.markAsRead`,`Mark as read`),children:P(me,{className:`h-3 w-3 text-foreground-subtle`})}),e.status!==`in-progress`&&P(`button`,{type:`button`,onClick:t=>{t.stopPropagation(),n(e.id)},className:`p-1 rounded hover:bg-surface-hover transition-colors`,title:r(`ui.alertBell.dismiss`,`Dismiss`),children:P(Oe,{className:`h-3 w-3 text-foreground-subtle`})})]})]})}function s_({variant:e=`icon`,compact:t=!1}={}){let{t:n}=H(),[r,i]=f(!1),[a,o]=f(!1),c=M(null),l=M(null),u=j(),{data:d=0}=kn(void 0,{refetchInterval:3e4}),{data:m=[],isLoading:h}=In({limit:50},{enabled:r}),g=a?m:m.filter(e=>!e.read),_=m.filter(e=>e.read).length,v=()=>{u.invalidateQueries({queryKey:[[`alerts`]]})},b=Yr({onSuccess:v}),x=Wn({onSuccess:v}),S=Cn({onSuccess:v});gr(`alert.created`,()=>{u.invalidateQueries({queryKey:[[`alerts`]]})}),gr(`alert.updated`,()=>{u.invalidateQueries({queryKey:[[`alerts`]]})}),s(()=>{if(!r)return;let e=e=>{let t=e.target;c.current&&!c.current.contains(t)&&l.current&&!l.current.contains(t)&&i(!1)};return document.addEventListener(`mousedown`,e),document.addEventListener(`touchstart`,e),()=>{document.removeEventListener(`mousedown`,e),document.removeEventListener(`touchstart`,e)}},[r]);let C=p(e=>{b.mutate({alertId:e})},[b]),w=p(e=>{e&&S.mutate({alertId:e})},[S]),T=p(()=>{x.mutate(void 0),i(!1)},[x]),E=g.filter(qg),D=new Set(E.map(e=>e.id)),O=g.filter(e=>e.status===`in-progress`&&!D.has(e.id)),k=g.filter(e=>e.status!==`in-progress`&&!D.has(e.id)),[A,N]=f({}),F=p(()=>{let e=l.current;e&&N(ng({rect:e.getBoundingClientRect(),viewportWidth:window.innerWidth,viewportHeight:window.innerHeight}))},[]);return s(()=>{if(!r)return;F();let e=()=>F();return window.addEventListener(`resize`,e),window.addEventListener(`scroll`,e,!0),()=>{window.removeEventListener(`resize`,e),window.removeEventListener(`scroll`,e,!0)}},[r,F]),y(`div`,{children:[e===`sidebar`?y(`button`,{ref:l,type:`button`,onClick:()=>i(!r),className:`flex w-full items-center gap-2.5 rounded-md ${t?`justify-center px-0 py-2`:`px-2.5 py-1.5`} text-[12px] text-foreground-subtle hover:bg-surface-hover hover:text-foreground transition-colors`,title:t?d>0?n(`ui.alertBell.alertsUnread`,{count:d}):n(`ui.alertBell.alerts`):void 0,children:[y(`span`,{className:`relative inline-flex shrink-0`,children:[P(Ve,{className:`h-3.5 w-3.5`}),t&&d>0&&P(`span`,{className:`absolute -top-1 -right-1 h-2 w-2 rounded-full bg-primary`})]}),!t&&P(`span`,{className:`flex-1 text-left`,children:n(`ui.alertBell.alerts`,`Alerts`)}),!t&&d>0&&P(`span`,{className:`flex items-center justify-center h-4 min-w-4 px-1 rounded-full bg-primary text-primary-foreground text-[9px] font-bold leading-none`,children:d>99?`99+`:String(d)})]}):y(`button`,{ref:l,type:`button`,onClick:()=>i(!r),className:`relative p-1.5 rounded-md hover:bg-surface-hover text-foreground-subtle hover:text-foreground transition-colors`,"aria-label":n(`ui.alertBell.alerts`,`Alerts`),children:[P(Ve,{className:`h-4.5 w-4.5`}),d>0&&P(`span`,{className:`absolute -top-0.5 -right-0.5 flex items-center justify-center h-4 min-w-4 px-0.5 rounded-full bg-primary text-primary-foreground text-[9px] font-bold leading-none`,children:d>99?`99+`:String(d)})]}),r&&$r(y(`div`,{ref:c,style:A,className:`bg-surface border border-border rounded-lg shadow-xl flex flex-col overflow-hidden`,children:[y(`div`,{className:`flex items-center justify-between px-3 py-2 border-b border-border shrink-0`,children:[P(`span`,{className:`text-[12px] font-semibold text-foreground`,children:n(`ui.alertBell.alerts`,`Alerts`)}),y(`div`,{className:`flex items-center gap-2`,children:[_>0&&y(`label`,{className:`flex items-center gap-1 text-[10px] text-foreground-subtle cursor-pointer select-none`,children:[P(`input`,{type:`checkbox`,checked:a,onChange:e=>o(e.target.checked),className:`h-3 w-3 rounded border-border accent-primary cursor-pointer`}),n(`ui.alertBell.showRead`,`Show read`)]}),d>0&&y(`button`,{type:`button`,onClick:T,className:`flex items-center gap-1 text-[10px] text-primary hover:text-primary/80 transition-colors`,children:[P(dn,{className:`h-3 w-3`}),n(`ui.alertBell.markAllRead`,`Mark all read`)]})]})]}),y(`div`,{className:`flex-1 overflow-y-auto`,children:[h&&P(`div`,{className:`flex items-center justify-center py-8`,children:P(Re,{className:`h-4 w-4 animate-spin text-foreground-subtle`})}),!h&&g.length===0&&y(`div`,{className:`flex flex-col items-center justify-center py-8 text-foreground-subtle`,children:[P(Ve,{className:`h-6 w-6 mb-2 opacity-40`}),P(`span`,{className:`text-[11px]`,children:m.length>0?n(`ui.alertBell.noUnreadAlerts`,`No unread alerts`):n(`ui.alertBell.noAlerts`,`No alerts`)}),m.length>0&&!a&&P(`button`,{type:`button`,onClick:()=>o(!0),className:`text-[10px] text-primary mt-1 hover:underline`,children:n(`ui.alertBell.showRead`,{count:_})})]}),E.length>0&&y(`div`,{className:`border-b border-border`,children:[P(`div`,{className:`px-3 py-1.5 bg-danger/5`,children:P(`span`,{className:`text-[9px] font-semibold uppercase tracking-widest text-danger`,children:n(`ui.alertBell.urgent`,`Urgent`)})}),E.map(e=>P(o_,{alert:e,onMarkRead:C,onDismiss:w},e.id))]}),O.length>0&&y(`div`,{className:`border-b border-border`,children:[P(`div`,{className:`px-3 py-1.5 bg-surface-hover/50`,children:P(`span`,{className:`text-[9px] font-semibold uppercase tracking-widest text-foreground-subtle/60`,children:n(`ui.alertBell.inProgress`,`In Progress`)})}),O.map(e=>P(o_,{alert:e,onMarkRead:C,onDismiss:w},e.id))]}),k.map(e=>P(o_,{alert:e,onMarkRead:C,onDismiss:w},e.id))]})]}),document.body)]})}a(),Qr();function c_({alert:e,onMarkRead:t}){let{t:n}=H(),r=Yg(e.action)?e.action:void 0;return y(`div`,{className:`border-b border-border last:border-b-0 px-3 py-2.5`,children:[P(`div`,{className:`text-[12px] font-semibold text-foreground`,children:e.title}),P(`div`,{className:`text-[11px] text-foreground-muted mt-0.5`,children:e.message}),y(`div`,{className:`mt-2 flex flex-wrap items-center gap-2`,children:[r!==void 0&&P(Qg,{action:r,className:`inline-flex items-center justify-center rounded-md bg-primary px-2.5 py-1 text-[11px] font-medium text-primary-foreground hover:bg-primary/90 transition-colors`}),P(Xn,{type:`button`,variant:`ghost`,size:`sm`,onClick:()=>t(e.id),children:n(`ui.alertBell.markAsRead`,`Mark as read`)})]})]})}function l_(){let{t:e}=H(),t=j(),[n,r]=f(Gg()),{data:i=[],isLoading:a}=In({limit:50}),o=d(()=>Jg(i),[i]),s=Yr({onSuccess:p(()=>{t.invalidateQueries({queryKey:[[`alerts`]]})},[t])}),c=p(e=>{s.mutate({alertId:e})},[s]),l=p(()=>{Kg(),r(!0)},[]);return a||n||o.length===0?null:$r(P(`div`,{className:`fixed inset-x-0 bottom-0 z-[10000] flex justify-center p-2 sm:p-4 pb-[max(0.5rem,env(safe-area-inset-bottom))] pointer-events-none`,"data-testid":`critical-alerts-on-load-panel`,children:y(`div`,{className:`pointer-events-auto w-full max-w-lg bg-surface border border-danger/30 rounded-lg shadow-xl flex flex-col max-h-[min(70dvh,32rem)] overflow-hidden`,role:`region`,"aria-labelledby":`critical-alerts-panel-title`,children:[y(`div`,{className:`flex items-start justify-between gap-2 px-3 py-2.5 border-b border-border shrink-0 bg-danger/5`,children:[y(`div`,{children:[P(`h2`,{id:`critical-alerts-panel-title`,className:`text-[12px] font-semibold text-foreground`,children:e(`ui.criticalAlertsPanel.title`,`Urgent alerts`)}),P(`p`,{className:`text-[10px] text-foreground-muted mt-0.5`,children:e(`ui.criticalAlertsPanel.subtitle`,`These need your attention.`)})]}),P($n,{type:`button`,variant:`ghost`,onClick:l,"aria-label":e(`ui.criticalAlertsPanel.close`,`Close`),"data-testid":`critical-alerts-panel-close`,icon:Oe})]}),P(`div`,{className:`flex-1 overflow-y-auto`,children:o.map(e=>P(c_,{alert:e,onMarkRead:c},e.id))})]})}),document.body)}a();function u_(){let e=Bc();return C(e.subscribe,e.getSnapshot,e.getSnapshot)}var d_=[`detection`,`cluster`,`administration`];function f_(e){return d_.includes(e)}function p_(e){let t=new Map,n=new Map,r=[];for(let i of e){let e=i.section?.trim();if(e===void 0||e.length===0){r.push(i);continue}if(f_(e)){let n=t.get(e)??[];n.push(i),t.set(e,n);continue}let a=n.get(e);a?a.pages.push(i):n.set(e,{label:i.sectionLabel?.trim()||e,pages:[i]})}return{known:t,custom:[...n.entries()].map(([e,t])=>({id:e,label:t.label,pages:t.pages})),ungrouped:r}}var m_=`camstack:last-path`,h_=512,g_=[`/login`,`/change-password`,`/access-denied`,`/logout`];function __(e){return!e.startsWith(`/`)||e.startsWith(`//`)||e.length>h_?!1:!g_.some(t=>e===t||e.startsWith(t+`/`))}function v_(e){if(!(typeof window>`u`)&&__(e))try{window.localStorage.setItem(m_,e)}catch{}}function y_(){if(typeof window>`u`)return null;try{let e=window.localStorage.getItem(m_);return e===null?null:__(e)?e:null}catch{return null}}var b_=`/devices`;function x_(e){return e!==void 0&&__(e)?e:y_()??b_}function S_(e){return e.split(`.`)[0]===`0`?`${e} beta`:e}function C_(e){if(e===null)return null;let t=e.trim();return t.length>0?t:null}function w_(e){let t=C_(e.productVersion),n=C_(e.serverVersion),r=C_(e.fallbackVersion);return t!==null&&n!==null?{kind:`both`,productLabel:S_(t),serverVersion:n}:t===null?n===null?r===null?{kind:`none`}:{kind:`fallback`,version:r}:{kind:`server`,serverVersion:n}:{kind:`product`,productLabel:S_(t)}}function T_(e,t){if(!Object.hasOwn(e,t))return null;let n=Reflect.get(e,t);return typeof n==`string`?n:null}function E_(e){return typeof e!=`object`||!e?null:{productVersion:T_(e,`productVersion`),serverVersion:T_(e,`serverVersion`)}}a();function D_(e,t){return e.kind===`both`?t(`releaseIdentity.both`,`{{product}} · server {{server}}`,{product:e.productLabel,server:e.serverVersion}):e.kind===`product`?e.productLabel:e.kind===`server`?t(`releaseIdentity.serverOnly`,`server {{version}}`,{version:e.serverVersion}):e.kind===`fallback`?t(`releaseIdentity.fallback`,`v{{version}}`,{version:e.version}):null}function O_({placement:e,compact:t=!1}){let{t:n}=H(),[r,i]=f({kind:`fallback`,version:`1.2.473`});s(()=>{let e=new AbortController;return fetch(z(`/api/release-identity`),{signal:e.signal}).then(async e=>e.ok?E_(await e.json()):null).then(t=>{e.signal.aborted||t===null||i(w_({productVersion:t.productVersion,serverVersion:t.serverVersion,fallbackVersion:`1.2.473`}))}).catch(t=>{e.signal.aborted||t instanceof DOMException&&t.name}),()=>e.abort()},[]);let a=D_(r,n);return a===null?null:e===`login`?P(`span`,{"data-testid":`release-identity`,children:a}):P(`div`,{"data-testid":`release-identity`,className:`pt-1 text-[10px] text-foreground-disabled select-none truncate ${t?`text-center`:`px-2`}`,title:a,children:a})}a();var k_=g(!0);function A_(e){return e===`/addon`||e.startsWith(`/addon/`)}function j_(e,t,n){let r=[...e.filter(e=>e!==t),t];return r.length<=n?r:r.slice(r.length-n)}function M_({maxCached:e=6}){let t=Fa(),n=J(),r=ka(),i=v(q),a=n.pathname,o=A_(a),s=M(new Map),c=M([]);if(o){s.current.set(a,{key:a,outlet:t,location:n,navigationType:r,routeContext:i});let o=j_(c.current,a,e),l=new Set(o);for(let e of s.current.keys())l.has(e)||s.current.delete(e);c.current=o}return y(E,{children:[c.current.map(e=>{let t=s.current.get(e);if(t?.outlet==null)return null;let n=o&&e===a;return P(`div`,{className:n?`h-full min-h-0`:void 0,style:n?void 0:{display:`none`},hidden:!n,"aria-hidden":!n,children:P(k_.Provider,{value:n,children:P(ba.Provider,{value:{location:t.location,navigationType:t.navigationType},children:P(q.Provider,{value:t.routeContext,children:t.outlet})})})},e)}),!o&&t!=null?P(`div`,{className:`h-full min-h-0`,children:t},a):null]})}a();var N_={dark:oe,light:R,system:en};function P_(){return P(`div`,{className:`flex h-full min-h-[50vh] items-center justify-center`,children:P(`span`,{className:`h-4 w-4 animate-spin rounded-full border-2 border-primary/30 border-t-primary`})})}function F_(){let e=J(),t=Ma(),{user:n,logout:r}=Wl(),i=Rr(),{t:a}=H(),o=Lr(),c=Dr(),{info:l}=Hh();s(()=>{document.title=l===null?`CamStack Admin`:`${l.name} \u00b7 CamStack Admin`},[l]);let u=Ac(u_()),[p,m]=f(!1);s(()=>{v_(e.pathname+e.search)},[e.pathname,e.search]);let[h,g]=f(()=>typeof window>`u`?!1:window.localStorage.getItem(`camstack:sidebar-collapsed`)===`1`);s(()=>{typeof window>`u`||window.localStorage.setItem(`camstack:sidebar-collapsed`,h?`1`:`0`)},[h]);let[_]=f(()=>{if(typeof window>`u`)return new Set;try{let e=window.localStorage.getItem(`camstack:sidebar-collapsed-groups`);if(!e)return new Set;let t=JSON.parse(e);return Array.isArray(t)?new Set(t.filter(e=>typeof e==`string`)):new Set}catch{return new Set}});s(()=>{typeof window>`u`||window.localStorage.setItem(`camstack:sidebar-collapsed-groups`,JSON.stringify([..._]))},[_]),s(()=>{c&&window.localStorage.getItem(`camstack:sidebar-collapsed`)===null&&g(!0)},[c]);let{data:v=[]}=bn({nodeId:`hub`},{refetchInterval:3e4}),b=v.length,x=j(),S=M(Date.now()),{data:C}=nr(void 0,{staleTime:0,refetchOnMount:`always`,refetchInterval:e=>{let t=e.state.data;return t&&t.length>0||Date.now()-S.current>=3e4?!1:2e3}}),T=d(()=>C&&n?.isAdmin?Wm(C):[],[C,n?.isAdmin]),D=d(()=>p_(T),[T]),O=D.known.get(`detection`)??[],k=D.known.get(`cluster`)??[],A=D.known.get(`administration`)??[];gr(`addon.page-ready`,()=>{x.invalidateQueries({queryKey:[[`addonPages`,`listPages`]]})});let N=()=>{r(),t(`/login`)},F=t=>!!(e.pathname===t||e.pathname.startsWith(t+`/`)),I=[`/system/pipeline`,`/live`,`/addon/osd-manager`,`/build`].some(t=>e.pathname===t||e.pathname.startsWith(t+`/`)),ee=n?.isAdmin===!0,L=d(()=>yh({t:a,isAdmin:ee}),[a,ee]),te=L[0]?.items??[],ne=L[1]?.items??[],re=L[2]?.items??[],ie=L[3]?.items??[],ae=i?.mode??`system`,oe={dark:a(`theme.dark`),light:a(`theme.light`),system:a(`theme.system`)},R=h&&!o,se=(e,t=`md`)=>`flex w-full items-center gap-2.5 rounded-md ${R?`justify-center px-0 py-2`:`px-2.5 py-1.5`} ${t===`lg`?`text-[13px] font-medium`:`text-[12px]`} transition-all ${e?t===`lg`?`bg-primary/12 text-primary shadow-sm shadow-primary/5`:`bg-primary/12 text-primary`:`text-foreground-subtle hover:bg-surface-hover hover:text-foreground`}`,ce=(e,t)=>e===0?null:R?P(`div`,{className:`pt-3 mb-1 mx-2 border-t border-border/60`},`sep-${t}`):P(`div`,{className:`pt-4 pb-1.5 px-2.5`,children:P(`span`,{className:`text-[10px] font-semibold uppercase tracking-widest text-foreground-subtle/60`,children:t})},`hdr-${t}`),le=e=>{let n=F(e.path),r=xh(e.icon);return y(`button`,{onClick:()=>{t(e.path),m(!1)},className:se(n),title:R?e.label:void 0,children:[P(r,{className:`h-3.5 w-3.5 shrink-0 ${n?`text-primary`:``}`}),!R&&e.label]},`${e.addonId}::${e.id}`)},ue=e=>{let n=e.icon,r=F(e.path),i=e.path===`/system/addons`;return y(`button`,{"data-testid":`nav-${e.path.replace(/^\//,``).replace(/\//g,`-`)}`,onClick:()=>{t(e.path),m(!1)},className:se(r),title:R?e.label:void 0,children:[P(n,{className:`h-3.5 w-3.5 shrink-0 ${r?`text-primary`:``}`}),!R&&y(E,{children:[P(`span`,{className:`flex-1 text-left`,children:e.label}),i&&b>0&&P(`span`,{className:`ml-auto rounded-full bg-primary px-1.5 py-0.5 text-[9px] font-bold text-primary-foreground leading-none`,children:b})]}),R&&i&&b>0&&P(`span`,{className:`absolute mt-[-14px] ml-3 h-2 w-2 rounded-full bg-primary`})]},e.path)},de=y(E,{children:[y(`div`,{className:`flex h-14 items-center border-b border-border ${R?`justify-center px-1`:`pl-3 pr-4 gap-2`}`,children:[!R&&P(`img`,{src:i?.resolvedMode===`light`?z(`/brand/logo-horizontal-light.svg`):z(`/brand/logo-horizontal-dark.svg`),alt:a(`layouts.appLayout.camstackAdmin`,`CamStack Admin`),className:`h-9 flex-1 min-w-0`}),!o&&P(`button`,{onClick:()=>g(e=>!e),className:`p-1.5 rounded-md hover:bg-surface-hover text-foreground-subtle transition-colors flex-shrink-0 ${R?``:`mr-2`}`,"aria-label":h?a(`layouts.appLayout.expandSidebar`,`Expand sidebar`):a(`layouts.appLayout.collapseSidebar`,`Collapse sidebar`),title:h?a(`layouts.appLayout.expandSidebar`,`Expand sidebar`):a(`layouts.appLayout.collapseSidebar`,`Collapse sidebar`),children:P(h?et:Te,{className:`h-4 w-4`})})]}),!R&&l!==null&&P(`div`,{"data-testid":`sidebar-server-name`,title:l.name,className:`truncate border-b border-border px-3 py-1.5 text-xs font-medium text-foreground-muted`,children:l.name}),P(`div`,{className:`border-b border-border pt-2`,children:P(jh,{navSections:L,addonPages:T,compact:R,onNavigated:()=>m(!1)})}),y(`nav`,{className:`flex-1 overflow-y-auto py-3 ${R?`px-1.5`:`px-2`} space-y-0.5`,children:[te.map(e=>ue(e)),ce(ne.length+O.length,a(`nav.detectionSection`,`Detection`)),ne.map(e=>ue(e)),O.map(e=>le(e)),ce(re.length+k.length,a(`nav.clusterSection`,`Cluster`)),re.map(e=>ue(e)),k.map(e=>le(e)),ce(ie.length+A.length,a(`system.title`,`Administration`)),ie.map(e=>ue(e)),A.map(e=>le(e)),D.custom.map(e=>y(`div`,{className:`contents`,children:[ce(e.pages.length,e.label),e.pages.map(e=>le(e))]},`custom-${e.id}`)),ce(D.ungrouped.length,a(`nav.addonPages`,`Addon Pages`)),D.ungrouped.map(e=>le(e))]}),y(`div`,{className:`border-t border-border ${R?`p-1.5`:`p-2`} space-y-0.5`,children:[y(`button`,{onClick:()=>i?.toggleMode(),className:se(!1),title:R?oe[ae]:void 0,children:[(()=>{let e=N_[ae];return P(e,{className:`h-3.5 w-3.5 shrink-0`})})(),!R&&P(`span`,{children:oe[ae]})]}),P(s_,{variant:`sidebar`,compact:R}),y(`button`,{type:`button`,onClick:()=>t(`/system/my-access`),className:se(F(`/system/my-access`)),title:R?a(`system.myAccess`,`My access`):void 0,children:[P(Ke,{className:`h-3.5 w-3.5 shrink-0`}),!R&&P(`span`,{className:`truncate`,children:a(`system.myAccess`,`My access`)})]}),y(`button`,{onClick:N,className:se(!1).replace(`hover:text-foreground`,`hover:text-danger`),title:R?n?.username??a(`layouts.appLayout.logout`,`Logout`):void 0,children:[P(pn,{className:`h-3.5 w-3.5 shrink-0`}),!R&&P(`span`,{className:`truncate`,children:n?.username??a(`layouts.appLayout.user`,`User`)})]}),P(O_,{placement:`sidebar`,compact:R})]})]});return y(`div`,{className:`flex h-dvh overflow-hidden bg-background text-foreground pt-[env(safe-area-inset-top)] pb-[env(safe-area-inset-bottom)]`,children:[!o&&P(`aside`,{className:`flex flex-col border-r border-border bg-surface/80 backdrop-blur-sm shrink-0 transition-[width] duration-150 ease-out ${R?`w-12`:`w-48`}`,children:de}),o&&P(Ln,{open:p,onClose:()=>m(!1),width:`w-64`,children:de}),y(`div`,{className:`flex flex-1 flex-col min-w-0`,children:[u!==null&&y(`div`,{className:`flex items-center justify-center gap-2 px-3 py-2 text-[12px] font-medium shrink-0 ${u.severity===`danger`?`bg-danger/90 text-white`:`bg-warning/15 text-warning border-b border-warning/30`}`,children:[u.severity===`danger`?P(Ce,{className:`h-3.5 w-3.5`}):P(qe,{className:`h-3.5 w-3.5`}),P(`span`,{children:a(u.i18nKey,{defaultValue:u.message,...u.i18nParams})}),u.action===`sign-in`&&P(`button`,{onClick:()=>r(),className:`ml-2 rounded border border-white/40 px-2 py-0.5 text-[11px] font-semibold hover:bg-white/10`,children:a(`connection.signIn`,`Sign in`)}),u.showSpinner&&P(Re,{className:`h-3.5 w-3.5 animate-spin`})]}),P(Bh,{}),P(Yh,{}),P(l_,{}),o&&y(`header`,{className:`flex items-center h-12 border-b border-border px-3 shrink-0 bg-surface/80 backdrop-blur-sm`,children:[P(`button`,{onClick:()=>m(!0),className:`p-1.5 -ml-1.5 rounded-md hover:bg-surface-hover text-foreground-muted transition-colors`,"aria-label":a(`layouts.appLayout.openMenu`,`Open menu`),children:P(fe,{className:`h-5 w-5`})}),P(`div`,{className:`flex-1 flex justify-center`,children:P(`img`,{src:i?.resolvedMode===`light`?z(`/brand/logo-horizontal-light.svg`):z(`/brand/logo-horizontal-dark.svg`),alt:a(`layouts.appLayout.camstack`,`CamStack`),className:`h-7`})}),P(s_,{})]}),y(Zm,{children:[P(Qm,{}),P(`main`,{className:`relative flex-1 min-h-0 overscroll-contain bg-background ${I?`overflow-hidden`:`overflow-auto`}`,children:P(w,{fallback:P(P_,{}),children:P(M_,{})})})]})]})]})}function $({children:e,requireAdmin:t}){let{t:n}=H(),{user:r,loading:i,mustChangePassword:a}=Wl(),o=J();return i?P(`div`,{className:`flex h-screen items-center justify-center bg-background text-foreground-subtle`,children:n(`layouts.protectedRoute.loading`,`Loading...`)}):r?a&&o.pathname!==`/change-password`?P(Y,{to:`/change-password`,replace:!0}):t&&!r.isAdmin?P(Y,{to:`/access-denied`,replace:!0}):P(E,{children:e}):P(Y,{to:`/login`,replace:!0,state:{from:o.pathname+o.search}})}var I_=`customize`,L_=`/build/compositions/new`,R_=`/build/compositions/:blockId`,z_=`/build?tab=custom-device`;function B_(e){return`/devices/${e}?tab=${I_}`}var V_=`integration`,H_=`section`,U_=[V_,H_],W_={connectivity:{path:`/system/integrations`,tab:null},remoteAccess:{path:`/system/network`,tab:`remote-access`},mesh:{path:`/system/network`,tab:`mesh`},turn:{path:`/system/network`,tab:`turn`},authentication:{path:`/system/identity`,tab:`authentication`},access:{path:`/system/identity`,tab:`access`},logging:{path:`/system/logs`,tab:`destinations`}},G_=`settings`,K_=`activity`;function q_(e,t={}){let{path:n,tab:r}=W_[e],i=new URLSearchParams;r===null?t.kindSection!==void 0&&i.set(`tab`,t.kindSection):i.set(`tab`,r),t.integration!==void 0&&i.set(V_,t.integration),t.section!==void 0&&i.set(H_,t.section);let a=i.toString();return a.length>0?`${n}?${a}`:n}function J_(e){let{ids:t,requested:n,answered:r,legacyGroup:i=null,groupFirst:a={}}=e;if(n!==null&&t.includes(n))return{selectedId:n,staleId:null};let o=n!==null&&r?n:null,s=i===null?void 0:a[i];return s!==void 0&&t.includes(s)?{selectedId:s,staleId:o}:{selectedId:t[0]??null,staleId:o}}function Y_(e,t,n=null,r=null){let i=new URLSearchParams(e);return i.set(V_,t),r===null?i.delete(H_):i.set(H_,r),n!==null&&i.delete(n),i}function X_(e){return e===`/admin`||e===`/admin/`?`/`:e.startsWith(`/admin/`)?e.slice(6):e}function Z_(){let{t:e}=H(),t=Ma();return y(`div`,{className:`flex flex-col items-center justify-center text-foreground py-16 px-4`,children:[P(`div`,{className:`flex h-16 w-16 items-center justify-center rounded-2xl bg-danger/10 mb-4`,children:P(fn,{className:`h-8 w-8 text-danger`})}),P(`h1`,{className:`text-xl font-bold`,children:e(`accessDenied.accessDenied`,`Access Denied`)}),P(`p`,{className:`mt-2 text-sm text-foreground-subtle`,children:e(`accessDenied.youDonTHavePermission`,`You don't have permission to access this page.`)}),P(`button`,{onClick:()=>t(`/devices`),className:`mt-6 rounded-lg bg-primary px-5 py-2.5 text-sm font-medium text-primary-foreground shadow-md shadow-primary/20 hover:shadow-lg transition-all`,children:e(`accessDenied.goToDevices`,`Go to Devices`)})]})}var Q_=`auth.password-incorrect`;function $_(e,t){return typeof e==`object`&&e?Reflect.get(e,t):void 0}function ev(e){if(!(e instanceof Error))return{kind:`connection-lost`};let t=$_(e,`data`);return typeof t!=`object`||!t?{kind:`connection-lost`}:$_($_(t,`i18n`),`code`)===Q_?{kind:`wrong-current`}:$_(t,`code`)===`UNAUTHORIZED`?{kind:`session-ended`}:{kind:`rejected`,message:e.message}}a();var tv=8;function nv(e,t){let n=ev(e);switch(n.kind){case`wrong-current`:return t(`changePassword.errorWrongCurrent`,`The current password is incorrect.`);case`session-ended`:return t(`changePassword.errorSessionEnded`,`Your session ended before the change was confirmed. Sign in again — try the new password first.`);case`connection-lost`:return t(`changePassword.errorConnectionLost`,`The connection to the hub dropped before it confirmed the change. Sign in again — try the new password first.`);case`rejected`:return n.message}}function rv(){let{t:e}=H(),{user:t,mustChangePassword:n,clearMustChangePassword:r,logout:i}=Wl(),a=ze(),o=Rr(),s=Ma(),[c,l]=f(``),[u,d]=f(``),[p,m]=f(``),[h,g]=f(!1),[_,v]=f(``),[b,x]=f(!1),S=n?Pl:c;return P(`div`,{className:`flex min-h-screen items-center justify-center bg-background p-4`,children:y(`div`,{className:`w-full max-w-sm`,children:[P(`div`,{className:`flex justify-center mb-8`,children:P(`img`,{src:o?.resolvedMode===`light`?z(`/brand/logo-horizontal-light.svg`):z(`/brand/logo-horizontal-dark.svg`),alt:e(`changePassword.camstackAdmin`,`CamStack Admin`),className:`h-12`})}),y(`form`,{onSubmit:async i=>{if(i.preventDefault(),v(``),!t){v(`Not signed in`);return}if(!n&&c.length===0){v(e(`changePassword.enterCurrent`,`Enter your current password`));return}if(u.length<tv){v(`Password must be at least ${tv} characters`);return}if(u!==p){v(`The two passwords do not match`);return}if(u===`changeme`){v(`Choose a password different from the seed default`);return}x(!0);try{await a.changeOwnPassword({currentPassword:S,newPassword:u}),r(),s(`/devices`,{replace:!0})}catch(t){v(nv(t,e))}finally{x(!1)}},className:`space-y-4 rounded-xl border border-border bg-surface p-6 shadow-xl shadow-black/10`,children:[y(`div`,{className:`space-y-1`,children:[P(`h1`,{className:`text-sm font-semibold text-foreground`,children:e(`changePassword.setANewPassword`,`Set a new password`)}),P(`p`,{className:`text-xs text-foreground-subtle`,children:n?e(`changePassword.youMustRotateTheSeed`,`You must rotate the seed password before continuing.`):e(`changePassword.chooseANewPasswordFor`,`Choose a new password for your account.`)})]}),_&&P(`div`,{role:`alert`,className:`rounded-md bg-danger/10 border border-danger/20 px-3 py-2 text-xs text-danger`,children:_}),!n&&y(`div`,{className:`space-y-1.5`,children:[P(`label`,{className:`text-xs font-medium text-foreground-subtle`,children:e(`changePassword.currentPassword`,`Current password`)}),P(`input`,{"data-testid":`change-password-current`,type:h?`text`:`password`,value:c,onChange:e=>l(e.target.value),autoComplete:`current-password`,className:`w-full rounded-lg border border-border bg-background px-3 py-2.5 text-sm text-foreground placeholder:text-foreground-disabled focus:border-primary focus:ring-1 focus:ring-primary/30 outline-none transition-all`,autoFocus:!0})]}),y(`div`,{className:`space-y-1.5`,children:[P(`label`,{className:`text-xs font-medium text-foreground-subtle`,children:e(`changePassword.newPassword`,`New password`)}),y(`div`,{className:`relative`,children:[P(`input`,{"data-testid":`change-password-new`,type:h?`text`:`password`,value:u,onChange:e=>d(e.target.value),autoComplete:`new-password`,className:`w-full rounded-lg border border-border bg-background px-3 py-2.5 pr-10 text-sm text-foreground placeholder:text-foreground-disabled focus:border-primary focus:ring-1 focus:ring-primary/30 outline-none transition-all`,autoFocus:n}),P(`button`,{type:`button`,onClick:()=>g(!h),className:`absolute right-2.5 top-1/2 -translate-y-1/2 text-foreground-subtle hover:text-foreground transition-colors`,tabIndex:-1,children:P(h?nt:pe,{className:`h-4 w-4`})})]})]}),y(`div`,{className:`space-y-1.5`,children:[P(`label`,{className:`text-xs font-medium text-foreground-subtle`,children:e(`changePassword.confirmNewPassword`,`Confirm new password`)}),P(`input`,{"data-testid":`change-password-confirm`,type:h?`text`:`password`,value:p,onChange:e=>m(e.target.value),autoComplete:`new-password`,className:`w-full rounded-lg border border-border bg-background px-3 py-2.5 text-sm text-foreground placeholder:text-foreground-disabled focus:border-primary focus:ring-1 focus:ring-primary/30 outline-none transition-all`})]}),P(`button`,{"data-testid":`change-password-submit`,type:`submit`,disabled:b||!u||!p,className:`w-full rounded-lg bg-primary px-4 py-2.5 text-sm font-semibold text-primary-foreground shadow-md shadow-primary/20 hover:shadow-lg hover:shadow-primary/30 disabled:opacity-50 disabled:shadow-none transition-all`,children:b?e(`changePassword.saving`,`Saving…`):e(`changePassword.saveAndContinue`,`Save and continue`)}),n&&P(`button`,{type:`button`,onClick:()=>{i(),s(`/login`,{replace:!0})},className:`w-full text-xs text-foreground-subtle hover:text-foreground transition-colors`,children:e(`changePassword.signOutInstead`,`Sign out instead`)})]})]})})}function iv(e){let t=new Uint8Array(e),n=``;for(let e of t)n+=String.fromCharCode(e);return btoa(n).replace(/\+/g,`-`).replace(/\//g,`_`).replace(/=/g,``)}function av(e){let t=e.replace(/-/g,`+`).replace(/_/g,`/`),n=(4-t.length%4)%4,r=t.padEnd(t.length+n,`=`),i=atob(r),a=new ArrayBuffer(i.length),o=new Uint8Array(a);for(let e=0;e<i.length;e++)o[e]=i.charCodeAt(e);return a}function ov(){return window?.PublicKeyCredential!==void 0&&typeof window.PublicKeyCredential==`function`}function sv(e){let{id:t}=e;return{...e,id:av(t),transports:e.transports}}function cv(e){return e===`localhost`||/^([a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,}$/i.test(e)}var lv=class extends Error{constructor({message:e,code:t,cause:n,name:r}){super(e,{cause:n}),this.name=r??n.name,this.code=t}},uv=new class{createNewAbortSignal(){if(this.controller){let e=Error(`Cancelling existing WebAuthn API call for new one`);e.name=`AbortError`,this.controller.abort(e)}let e=new AbortController;return this.controller=e,e.signal}cancelCeremony(){if(this.controller){let e=Error(`Manually cancelling existing WebAuthn API call`);e.name=`AbortError`,this.controller.abort(e),this.controller=void 0}}},dv=[`cross-platform`,`platform`];function fv(e){if(e&&!(dv.indexOf(e)<0))return e}function pv(){if(!ov())return new Promise(e=>e(!1));let e=window.PublicKeyCredential;return e.isConditionalMediationAvailable===void 0?new Promise(e=>e(!1)):e.isConditionalMediationAvailable()}function mv({error:e,options:t}){let{publicKey:n}=t;if(!n)throw Error(`options was missing required publicKey property`);if(e.name===`AbortError`){if(t.signal instanceof AbortSignal)return new lv({message:`Authentication ceremony was sent an abort signal`,code:`ERROR_CEREMONY_ABORTED`,cause:e})}else if(e.name===`NotAllowedError`)return new lv({message:e.message,code:`ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY`,cause:e});else if(e.name===`SecurityError`){let t=window.location.hostname;if(!cv(t))return new lv({message:`${window.location.hostname} is an invalid domain`,code:`ERROR_INVALID_DOMAIN`,cause:e});if(n.rpId!==t)return new lv({message:`The RP ID "${n.rpId}" is invalid for this domain`,code:`ERROR_INVALID_RP_ID`,cause:e})}else if(e.name===`UnknownError`)return new lv({message:`The authenticator was unable to process the specified options, or could not create a new assertion signature`,code:`ERROR_AUTHENTICATOR_GENERAL_ERROR`,cause:e});return e}async function hv(e){let{optionsJSON:t,useBrowserAutofill:n=!1,verifyBrowserAutofillInput:r=!0}=e;if(!ov())throw Error(`WebAuthn is not supported in this browser`);let i;t.allowCredentials?.length!==0&&(i=t.allowCredentials?.map(sv));let a={...t,challenge:av(t.challenge),allowCredentials:i},o={};if(n){if(!await pv())throw Error(`Browser does not support WebAuthn autofill`);if(document.querySelectorAll(`input[autocomplete$='webauthn']`).length<1&&r)throw Error('No <input> with "webauthn" as the only or last value in its `autocomplete` attribute was detected');o.mediation=`conditional`,a.allowCredentials=[]}o.publicKey=a,o.signal=uv.createNewAbortSignal();let s;try{s=await navigator.credentials.get(o)}catch(e){throw mv({error:e,options:o})}if(!s)throw Error(`Authentication was not completed`);let{id:c,rawId:l,response:u,type:d}=s,f;return u.userHandle&&(f=iv(u.userHandle)),{id:c,rawId:iv(l),response:{authenticatorData:iv(u.authenticatorData),clientDataJSON:iv(u.clientDataJSON),signature:iv(u.signature),userHandle:f},type:d,clientExtensionResults:s.getClientExtensionResults(),authenticatorAttachment:fv(s.authenticatorAttachment)}}function gv(e){return typeof e==`object`&&!!e}function _v(e){return gv(e)&&typeof e.challenge==`string`}a();async function vv(e){if(!_v(e))throw Error(`passkey authentication options missing challenge`);let t=await hv({optionsJSON:e});return Object.fromEntries(Object.entries(t))}function yv({method:e,challengeToken:t,onComplete:n,onSecondFactor:r,onError:i}){let[a,o]=f(!1),[s,c]=f(null),l=async()=>{c(null),o(!0);try{let e=Z();if(t){let r=await vv((await e.loginBeginPasskey(t)).optionsJSON),i=await e.loginVerifyPasskey(t,r,{refreshable:!0});n(i.token,i);return}let a=await vv((await e.passkeyLoginBegin()).optionsJSON),o=await e.passkeyLoginFinish(a,{refreshable:!0}),s=o.secondFactors??(o.requiresTotp===!0?[`totp`]:[]);if(s.length>0){if(r)r({challengeToken:o.token,factors:s});else{let e=`Additional verification is required — sign in with your password to continue.`;c(e),i?.(e)}return}n(o.token,o)}catch(e){let n=t?`Passkey verification failed`:`Passkey sign-in failed`,r=e instanceof Error?e.message:n;c(r),i?.(r)}finally{o(!1)}};return y(`div`,{className:`space-y-2`,children:[y(`button`,{type:`button`,"data-testid":t?`login-passkey`:`login-passkey-direct`,onClick:()=>void l(),disabled:a,className:`w-full flex items-center justify-center gap-2 rounded-lg border border-border bg-surface px-4 py-2.5 text-sm font-medium text-foreground hover:bg-surface-hover disabled:opacity-50 transition-colors`,children:[a?P(Re,{className:`h-4 w-4 animate-spin text-primary`}):P(nn,{className:`h-4 w-4 text-primary`}),e.label]}),s&&P(`div`,{className:`rounded-md bg-danger/10 border border-danger/20 px-3 py-2 text-xs text-danger`,children:s})]})}var bv=()=>window.location.hostname;function xv(e,t=bv){return ov()&&Ph(t(),e.rpId)}function Sv(e,t=bv){let n=e.filter(e=>e.kind===`passkey`&&e.stage===`second-factor`).filter(e=>xv(e,t));return{passkeyMethods:n,widgetMethods:n.length>0?[]:e.filter(e=>e.kind===`widget`&&e.stage===`second-factor`)}}function Cv(e,t){let n=e.includes(`passkey`),r=t.passkeyMethods.length>0||t.widgetMethods.length>0,i=e.includes(`totp`);return n&&!r&&!i}function wv(e){let t=e.onComplete,n=e.onSecondFactor;return typeof t==`function`?{onComplete:t,onSecondFactor:typeof n==`function`?n:void 0}:null}function Tv({methods:e,widgetConfig:t,onRedirect:n}){let{t:r}=H();jr();let i=e.filter(e=>e.kind!==`passkey`||xv(e));return i.length===0?null:y(`div`,{className:`mt-6 space-y-3`,children:[y(`div`,{className:`flex items-center gap-3`,children:[P(`div`,{className:`h-px flex-1 bg-border`}),P(`span`,{className:`text-[10px] uppercase tracking-wider text-foreground-subtle`,children:r(`login.primaryLoginMethods.orContinueWith`,`Or continue with`)}),P(`div`,{className:`h-px flex-1 bg-border`})]}),P(`div`,{className:`space-y-2`,children:i.map(e=>{if(e.kind===`redirect`){let t=(e.icon===void 0?void 0:tr(e.icon))??Ke;return y(`a`,{href:e.startUrl,onClick:t=>{n?.(e)===!0&&t.preventDefault()},className:`flex items-center justify-center gap-2 w-full rounded-lg border border-border bg-surface px-4 py-2.5 text-sm font-medium text-foreground hover:bg-surface-hover transition-colors`,children:[P(t,{className:`h-4 w-4 text-primary`}),e.label]},e.id)}if(e.kind===`passkey`){let n=wv(t);return n?P(yv,{method:e,onComplete:n.onComplete,onSecondFactor:n.onSecondFactor},e.id):null}return P(Ev,{method:e,config:t},e.id)})})]})}function Ev({method:e,config:t}){let{t:n}=H(),r=Un(e.remote,e.bundleUrl);return r===null?y(`div`,{className:`flex items-center justify-center gap-2 rounded-lg border border-border bg-background px-4 py-2.5 text-xs text-foreground-subtle`,children:[P(Re,{className:`h-3.5 w-3.5 animate-spin`}),n(`common.loading`,`Loading…`)]}):r===void 0?y(`div`,{"data-testid":`login-method-load-error`,className:`flex items-center justify-center gap-2 rounded-lg border border-danger/20 bg-danger/10 px-4 py-2.5 text-xs text-danger`,children:[P(Me,{className:`h-3.5 w-3.5 shrink-0`}),n(`login.primaryMethods.loadFailed`)]}):P(r,{instanceId:e.id,host:`dashboard`,config:t})}var Dv=4e3,Ov=/^[A-Za-z0-9._-]{1,64}$/;function kv(e){let t=e.addonId!==void 0&&Ov.test(e.addonId)?e.addonId:null,n=e.integration!==void 0&&Ov.test(e.integration)?e.integration:null;if(t!==null&&e.brokerId!==void 0)return q_(`connectivity`,{integration:t,kindSection:`brokers`});let r=n??t;return q_(`connectivity`,r===null?{}:{integration:r})}function Av(e,t){let n=t.opener;if(n===null||n.closed||Dg(n)!==t.origin)return!1;try{return n.postMessage({type:Lg,ok:e.status===`success`,...e.brokerId===void 0?{}:{brokerId:e.brokerId},...e.status===`error`?{error:e.reason??`unknown`}:{}},t.origin),!0}catch{return!1}}a();var jv=500;function Mv(e){let{t}=H();switch(e){case`access_denied`:return t(`oauthLanding.reason.access_denied`,`Access was denied, so nothing was connected.`);case`invalid_state`:return t(`oauthLanding.reason.invalid_state`,`This sign-in link expired or was already used. Start the sign-in again.`);case`invalid_request`:return t(`oauthLanding.reason.invalid_request`,`The request was not valid for this hub. Start the link again from the beginning.`);case`unknown_broker`:return t(`oauthLanding.reason.unknown_broker`,`That connection no longer exists. Add it again, then sign in.`);case`not_configured`:return t(`oauthLanding.reason.not_configured`,`The connection is missing its client ID or secret. Fill them in, save, then sign in.`);case`exchange_failed`:return t(`oauthLanding.reason.exchange_failed`,`The provider did not accept the sign-in. Check the client ID and secret, then try again.`);case`no_refresh_token`:return t(`oauthLanding.reason.no_refresh_token`,`The provider returned no long-lived access. Remove CamStack from the account’s connected apps, then sign in again.`);case`unavailable`:return t(`oauthLanding.reason.unavailable`,`The hub is still starting this integration. Wait a moment and try again.`);case`unknown`:return t(`oauthLanding.reason.unknown`,`Something went wrong. Try again in a moment.`)}}function Nv({outcome:e}){let{t}=H(),n=Mv(e.reason??`unknown`);if(e.status===`error`)return y(E,{children:[P(Ge,{className:`mx-auto h-8 w-8 text-danger`,"aria-hidden":!0}),P(`h1`,{"data-testid":`oauth-landing-title`,className:`text-sm font-semibold text-foreground`,children:t(`oauthLanding.errorTitle`,`Sign-in did not finish`)}),P(`p`,{"data-testid":`oauth-landing-reason`,className:`rounded-md border border-danger/20 bg-danger/10 px-3 py-2 text-xs text-danger`,children:n})]});let r=e.action===`disconnect`;return y(E,{children:[P(Be,{className:`mx-auto h-8 w-8 text-success`,"aria-hidden":!0}),P(`h1`,{"data-testid":`oauth-landing-title`,className:`text-sm font-semibold text-foreground`,children:r?t(`oauthLanding.signedOutTitle`,`Signed out`):t(`oauthLanding.successTitle`,`Signed in`)}),P(`p`,{className:`text-xs text-foreground-muted`,children:r?t(`oauthLanding.signedOutBody`,`The account was disconnected from this hub.`):t(`oauthLanding.successBody`,`The account is connected. Returning to CamStack…`)})]})}function Pv({outcome:e,closable:t,onContinue:n,onClose:r}){let{t:i}=H(),a=kv(e);return s(()=>{if(e.status!==`success`)return;let t=window.setTimeout(()=>n(a),Dv);return()=>window.clearTimeout(t)},[e.status,n,a]),P(`main`,{className:`flex min-h-screen items-center justify-center bg-background p-4`,children:y(`div`,{className:`w-full max-w-sm space-y-4`,children:[P(`div`,{className:`flex justify-center`,children:y(`picture`,{children:[P(`source`,{media:`(prefers-color-scheme: dark)`,srcSet:z(`/brand/logo-horizontal-dark.svg`)}),P(`img`,{src:z(`/brand/logo-horizontal-light.svg`),alt:i(`oauthLanding.brand`,`CamStack`),className:`h-12`})]})}),y(`div`,{className:`space-y-4 rounded-xl border border-border bg-surface p-6 text-center shadow-xl shadow-black/10`,children:[P(Nv,{outcome:e}),y(`div`,{className:`flex flex-col gap-2`,children:[P(Xn,{type:`button`,variant:`primary`,onClick:()=>n(a),children:i(`oauthLanding.back`,`Back to CamStack`)}),t&&P(Xn,{type:`button`,variant:`ghost`,onClick:r,children:i(`oauthLanding.close`,`Close this window`)})]})]})]})})}function Fv(e,t){window.history.replaceState(null,``,window.location.pathname);let n=window.opener,r=Av(t,{opener:n,origin:window.location.origin}),i=()=>e.render(P(Pv,{outcome:t,closable:r,onContinue:e=>window.location.replace(z(e)),onClose:()=>window.close()}));if(r&&t.status===`success`){window.close(),window.setTimeout(i,jv);return}i()}function Iv(e){return Kt(e)}var Lv=`Done — you can close this window.`,Rv=500,zv=`camstack_admin_token`;async function Bv(e,t=``){try{let n=$c(new URLSearchParams(t));n!==null&&n.token===e?Zc(n):localStorage.setItem(zv,e)}catch{}await fetch(z(`/api/auth/session`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({token:e})}).catch(()=>{})}function Vv(){try{let e=localStorage.getItem(zv);return e!==null&&e.length>0?e:null}catch{return null}}function Hv(e){let t=Iv(window.location.hash);if(t!==null){Fv(e,t);return}let n=mg(window.location.hash);window.history.replaceState(null,``,window.location.pathname);let r=t=>e.render(P(Uv,{completion:n,result:t}));if(r(null),n===null)return;let i=Og();Fg(n,{opener:window.opener,origin:window.location.origin,channel:i,addEventListener:(e,t)=>window.addEventListener(e,t),removeEventListener:(e,t)=>window.removeEventListener(e,t),close:()=>{window.close(),window.setTimeout(()=>r({kind:`done`,message:Lv}),Rv)},continueAt:e=>window.location.replace(z(e)),persistSession:e=>Bv(e,n.target===`login`?n.fragment:``),showResult:r,setTimeout:(e,t)=>window.setTimeout(e,t)})}function Uv({completion:e,result:t}){let{t:n}=H();return P(`div`,{className:`flex min-h-screen items-center justify-center bg-background p-4`,children:P(`div`,{className:`flex flex-col items-center gap-3 text-sm text-foreground-subtle`,children:e===null?P(`a`,{className:`text-primary underline`,href:z(`/login`),children:n(`ssoComplete.nothingToFinishHereGo`,`Nothing to finish here — go to sign-in`)}):t===null?y(`span`,{className:`flex items-center gap-3`,children:[P(`span`,{className:`h-4 w-4 animate-spin rounded-full border-2 border-primary/30 border-t-primary`}),n(`ssoComplete.finishingSignIn`,`Finishing sign-in…`)]}):y(E,{children:[P(`span`,{"data-testid":`sso-complete-result`,className:t.kind===`link-error`?`text-danger`:`text-foreground`,children:t.message}),P(`button`,{type:`button`,className:`rounded-md border border-border px-3 py-1.5 text-foreground hover:bg-surface-hover`,onClick:()=>window.close(),children:n(`ssoComplete.closeThisWindow`,`Close this window`)})]})})})}a();function Wv(e){if(typeof e!=`object`||!e)return!1;let t=Reflect.get(e,`message`),n=Reflect.get(e,`data`);return(typeof n==`object`&&n?Reflect.get(n,`code`):void 0)===`FORBIDDEN`||typeof t==`string`&&/sign in again first/i.test(t)}function Gv(){let e=new URLSearchParams(window.location.search);return ml({codeChallenge:e.get(`code_challenge`),codeChallengeMethod:e.get(`code_challenge_method`),state:e.get(`state`),purpose:e.get(`purpose`)})}function Kv(e){return Math.min(1e3*2**e,15e3)}function qv(){let{t:e}=H(),{login:t,verifyTotp:n,finalizePasskeyLogin:r,user:i}=Wl(),{i18n:a}=H(),o=Rr(),c=Ma(),l=J(),u=new URLSearchParams(window.location.search).get(`next`);s(()=>{Cl(u)},[u]);let d=new URLSearchParams(window.location.search).get(`redirect`);s(()=>{Ml(d)},[d]);let p=Gv();s(()=>{_l(p)},[p?.codeChallenge,p?.state,p?.purpose]);let m=l.state,h=x_(m?.from),[g,_]=f(``),[v,b]=f(``),[x,S]=f(!1),[C,w]=f(``),[T,D]=f(!1),[O,k]=f(`credentials`),[A,j]=f(``),[N,I]=f([]),[ee,L]=f(``),[te,ne]=f(void 0),[re,ie]=f(`sso-not-linked`),ae=fr.auth.listLoginMethods.useQuery(void 0,{retry:!0,retryDelay:Kv}),oe=ae.data===void 0,R=(ae.data??[]).filter(e=>e.kind!==`device-certificate`),se=fr.auth.getServerName.useQuery().data,ce=R.filter(e=>e.stage===`primary`),le=Sv(R);s(()=>{let e=ig(window.location.hash);if(e!==null){if(window.history.replaceState({},``,window.location.pathname+window.location.search),e.kind===`challenge`){j(e.challengeToken),I(e.factors),L(``),k(`second-factor`);return}ie(e.code),ne(e.provider)}},[]);let ue=te==null?null:R.find(e=>e.id===te&&`label`in e)?.label??null,de=C||(te===void 0?``:ag(re,ue)),{passkeyMethods:fe,widgetMethods:me}=le,he=M(!1),ge=async()=>{if(he.current)return;he.current=!0;let e=bl(d);if(e?.kind===`app-callback`){await be(e.url);return}else if(e){window.location.assign(z(e.path));return}let t=Tl(u);t?window.location.assign(z(t)):c(h,{replace:!0})},[_e,ye]=f(null),be=async e=>{ye({callbackBase:e,mintedUrl:null,failed:!1});try{let t=Gv()??vl();if(t===null)throw Error(`The app sent no PKCE challenge and state`);let{code:n}=await Z().trpcClient.auth.createHandoffCode.mutate({purpose:t.purpose,codeChallenge:t.codeChallenge,state:t.state}),r=yl(e,n,t.state);ye({callbackBase:e,mintedUrl:r,failed:!1}),window.location.assign(r)}catch(t){if(Wv(t)){he.current=!1,ye(null),w(`Sign in again to confirm it is you.`);return}ye({callbackBase:e,mintedUrl:null,failed:!0})}},xe=i!==null,[Se,Ce]=f(!1);s(()=>{!xe||!d&&!u||Se||(Ce(!0),ge())},[xe,d,u,Se]);let we=async e=>{e.preventDefault(),w(``),ne(void 0),D(!0);try{let e=await t(g,v);if(e.kind===`second-factor`){j(e.challengeToken),I(e.factors),k(`second-factor`);return}v===`changeme`?c(`/change-password`,{replace:!0}):await ge()}catch(e){w(e instanceof Error?e.message:`Login failed`)}finally{D(!1)}},Te=async e=>{e.preventDefault(),w(``),D(!0);try{await n(A,ee.trim()),await ge()}catch(e){w(e instanceof Error?e.message:`TOTP verification failed`),L(``)}finally{D(!1)}},Ee=async(e,t)=>{try{await r(e,t),await ge()}catch(e){w(e instanceof Error?e.message:`Passkey sign-in failed`)}},De=M(null);s(()=>()=>De.current?.(),[]);let Oe=async e=>{if(e.target!==`login`)return;let t=$c(new URLSearchParams(e.fragment));if(t!==null){try{await r(t.token,t),await ge()}catch(e){w(e instanceof Error?e.message:`Sign-in failed`)}return}let n=ig(`#${e.fragment}`);if(n!==null){if(n.kind===`challenge`){Ae({challengeToken:n.challengeToken,factors:n.factors});return}ie(n.code),ne(n.provider)}},ke=e=>{if(dl(d)?.kind===`app-callback`)return!1;let t=vg(z(gg(e.startUrl)));return t===null?!1:(w(``),ne(void 0),De.current?.(),De.current=Ag(t,{onReturn:e=>{De.current?.(),De.current=null,Oe(e)},onDone:e=>{if(De.current?.(),De.current=null,e.target!==`login`)return;let t=Vv()===null?null:Xc();t!==null&&Oe({target:`login`,fragment:new URLSearchParams({token:t.token,...t.refreshToken===void 0?{}:{refreshToken:t.refreshToken},...t.expiresAt===void 0?{}:{expiresAt:String(t.expiresAt)}}).toString()})}}),!0)},Ae=e=>{let t=e.factors.filter(e=>e===`totp`||e===`passkey`);j(e.challengeToken),I(t),L(``),w(``),k(`second-factor`)};return _e===null?P(`div`,{className:`flex min-h-screen items-center justify-center bg-background p-4`,children:y(`div`,{className:`w-full max-w-sm`,children:[P(`div`,{className:`flex justify-center mb-8`,children:P(`img`,{src:o?.resolvedMode===`light`?z(`/brand/logo-horizontal-light.svg`):z(`/brand/logo-horizontal-dark.svg`),alt:e(`login.camstackAdmin`,`CamStack Admin`),className:`h-12`})}),se!==void 0&&!se.isDefault&&P(`p`,{"data-testid":`login-server-name`,className:`-mt-4 mb-6 text-center text-sm text-foreground-muted`,children:P(Vs,{i18nKey:`login.signInTo`,values:{name:se.name},components:{b:P(`span`,{className:`font-semibold text-foreground`})}})}),O===`credentials`?y(`form`,{onSubmit:we,className:`space-y-4 rounded-xl border border-border bg-surface p-6 shadow-xl shadow-black/10`,children:[de&&P(`div`,{"data-testid":`login-error`,className:`rounded-md bg-danger/10 border border-danger/20 px-3 py-2 text-xs text-danger`,children:de}),y(`div`,{className:`space-y-1.5`,children:[P(`label`,{className:`text-xs font-medium text-foreground-subtle`,children:e(`login.username`,`Username`)}),P(`input`,{"data-testid":`login-username`,type:`text`,placeholder:e(`login.username`,`Username`),value:g,onChange:e=>_(e.target.value),className:`w-full rounded-lg border border-border bg-background px-3 py-2.5 text-sm text-foreground placeholder:text-foreground-disabled focus:border-primary focus:ring-1 focus:ring-primary/30 outline-none transition-all`,autoFocus:!0})]}),y(`div`,{className:`space-y-1.5`,children:[P(`label`,{className:`text-xs font-medium text-foreground-subtle`,children:e(`login.password`,`Password`)}),y(`div`,{className:`relative`,children:[P(`input`,{"data-testid":`login-password`,type:x?`text`:`password`,placeholder:e(`login.password`,`Password`),value:v,onChange:e=>b(e.target.value),className:`w-full rounded-lg border border-border bg-background px-3 py-2.5 pr-10 text-sm text-foreground placeholder:text-foreground-disabled focus:border-primary focus:ring-1 focus:ring-primary/30 outline-none transition-all`}),P(`button`,{type:`button`,onClick:()=>S(!x),className:`absolute right-2.5 top-1/2 -translate-y-1/2 text-foreground-subtle hover:text-foreground transition-colors`,tabIndex:-1,children:P(x?nt:pe,{className:`h-4 w-4`})})]})]}),P(`button`,{"data-testid":`login-submit`,type:`submit`,disabled:T||!g||!v,className:`w-full rounded-lg bg-primary px-4 py-2.5 text-sm font-semibold text-primary-foreground shadow-md shadow-primary/20 hover:shadow-lg hover:shadow-primary/30 disabled:opacity-50 disabled:shadow-none transition-all`,children:T?y(`span`,{className:`flex items-center justify-center gap-2`,children:[P(`span`,{className:`h-4 w-4 animate-spin rounded-full border-2 border-primary-foreground/30 border-t-primary-foreground`}),e(`login.loggingIn`,`Logging in...`)]}):e(`login.logIn`,`Log in`)})]}):y(`div`,{className:`space-y-4 rounded-xl border border-border bg-surface p-6 shadow-xl shadow-black/10`,children:[y(`div`,{className:`flex items-center gap-2 pb-1 border-b border-border`,children:[P(F,{className:`h-4 w-4 text-primary`}),P(`div`,{className:`text-sm font-medium text-foreground`,children:e(`login.twoFactorAuthentication`,`Two-factor authentication`)})]}),P(`p`,{className:`text-xs text-foreground-subtle`,children:g?P(E,{children:P(Vs,{i18nKey:`login.finishSigningInAs`,values:{username:g},components:{mono:P(`span`,{className:`font-mono text-foreground`})}})}):e(`login.finishSigningInAs`,`Finish signing in.`)}),C&&P(`div`,{className:`rounded-md bg-danger/10 border border-danger/20 px-3 py-2 text-xs text-danger`,children:C}),N.includes(`passkey`)&&fe.map(e=>P(yv,{method:e,challengeToken:A,onComplete:Ee},e.id)),N.includes(`passkey`)&&me.map(e=>P(Ev,{method:e,config:{challengeToken:A,onComplete:Ee}},e.id)),Cv(N,le)&&P(`div`,{className:`rounded-md border border-border bg-background px-3 py-2 text-xs text-foreground-subtle`,children:e(`login.passkeyVerificationIsnTAvailable`,`Passkey verification isn't available on this address. Open the hub via its domain URL to complete sign-in.`)}),N.includes(`passkey`)&&N.includes(`totp`)&&y(`div`,{className:`flex items-center gap-3`,children:[P(`div`,{className:`h-px flex-1 bg-border`}),P(`span`,{className:`text-[10px] uppercase tracking-wider text-foreground-subtle`,children:`or`}),P(`div`,{className:`h-px flex-1 bg-border`})]}),N.includes(`totp`)&&y(`form`,{onSubmit:Te,className:`space-y-4`,children:[y(`div`,{className:`space-y-1.5`,children:[P(`label`,{className:`text-xs font-medium text-foreground-subtle`,children:e(`login.authenticationCode`,`Authentication code`)}),P(`input`,{"data-testid":`login-totp`,type:`text`,inputMode:`numeric`,autoComplete:`one-time-code`,placeholder:`123456`,value:ee,onChange:e=>L(e.target.value.replace(/\D/g,``).slice(0,6)),className:`w-full rounded-lg border border-border bg-background px-3 py-3 text-center text-2xl font-mono tracking-widest text-foreground placeholder:text-foreground-disabled focus:border-primary focus:ring-1 focus:ring-primary/30 outline-none transition-all`,autoFocus:!0})]}),P(`button`,{"data-testid":`login-totp-submit`,type:`submit`,disabled:T||ee.length!==6,className:`w-full rounded-lg bg-primary px-4 py-2.5 text-sm font-semibold text-primary-foreground shadow-md shadow-primary/20 hover:shadow-lg hover:shadow-primary/30 disabled:opacity-50 disabled:shadow-none transition-all`,children:T?y(`span`,{className:`flex items-center justify-center gap-2`,children:[P(`span`,{className:`h-4 w-4 animate-spin rounded-full border-2 border-primary-foreground/30 border-t-primary-foreground`}),e(`login.verifying`,`Verifying...`)]}):e(`login.verifyAndSignIn`,`Verify and sign in`)})]}),y(`button`,{type:`button`,onClick:()=>{k(`credentials`),j(``),I([]),L(``),w(``)},className:`w-full flex items-center justify-center gap-1.5 text-xs text-foreground-subtle hover:text-foreground transition-colors`,children:[P(ve,{className:`h-3 w-3`}),e(`login.backToUsernamePassword`,`Back to username + password`)]})]}),O===`credentials`&&oe&&y(`p`,{"data-testid":`login-methods-pending`,role:`status`,className:`mt-4 flex items-center justify-center gap-2 text-xs text-foreground-subtle`,children:[P(`span`,{className:`h-3 w-3 animate-spin rounded-full border-2 border-foreground-subtle/30 border-t-foreground-subtle`}),e(`login.methodsPending`,`Loading other sign-in options...`)]}),O===`credentials`&&P(Tv,{methods:ce,widgetConfig:{onComplete:Ee,onSecondFactor:Ae,locale:a.language},onRedirect:ke}),P(`p`,{className:`mt-6 text-center text-[10px] text-foreground-subtle/50`,children:P(O_,{placement:`login`})})]})}):P(`div`,{className:`flex min-h-screen items-center justify-center bg-background p-4`,children:y(`div`,{className:`w-full max-w-sm rounded-xl border border-border bg-surface p-6 text-center space-y-4`,children:[P(`h1`,{className:`text-sm font-semibold text-foreground`,children:e(`login.returningToTheApp`,`Returning to the app…`)}),_e.failed?y(E,{children:[P(`p`,{className:`text-xs text-danger`,children:e(`login.couldNotPrepareTheSign`,`Could not prepare the sign-in handoff. You are logged in — retry below.`)}),P(`button`,{onClick:()=>void be(_e.callbackBase),className:`inline-flex rounded-lg bg-primary px-4 py-2 text-sm font-medium text-primary-foreground hover:bg-primary/90`,children:e(`common.retry`,`Retry`)})]}):_e.mintedUrl===null?P(`p`,{className:`text-xs text-foreground-subtle`,children:e(`login.preparingAOneTimeSign`,`Preparing a one-time sign-in code…`)}):y(E,{children:[P(`p`,{className:`text-xs text-foreground-subtle`,children:e(`login.ifTheAppDoesNot`,`If the app does not open automatically, tap below (the code expires in 60s).`)}),P(`a`,{href:_e.mintedUrl,className:`inline-flex rounded-lg bg-primary px-4 py-2 text-sm font-medium text-primary-foreground hover:bg-primary/90`,children:e(`login.openCamstack`,`Open CamStack`)})]})]})})}a();function Jv(){let{pathname:e,search:t,hash:n}=J();return P(Y,{to:`${X_(e)}${t}${n}`,replace:!0})}function Yv(){return P(Y,{to:y_()??`/devices`,replace:!0})}var Xv=m(()=>i(()=>import(`./Devices-C1DTPVnZ.js`).then(e=>({default:e.DevicesPage})),__vite__mapDeps([0,1,2,3,4,5,6,7,8]),import.meta.url)),Zv=m(()=>i(()=>import(`./Integrations-Dex6zRMx.js`).then(e=>({default:e.IntegrationsPage})),__vite__mapDeps([9,1,2,3,4,10,5,6,11,12,13,7,8]),import.meta.url)),Qv=m(()=>i(()=>import(`./IntegrationDetail-CnINeomo.js`).then(e=>({default:e.IntegrationDetailPage})),__vite__mapDeps([14,1,2,3,4,15,5,16,11,12,13,7,17]),import.meta.url)),$v=m(()=>i(()=>import(`./Pipeline-C85hColk.js`).then(e=>({default:e.PipelinePage})),__vite__mapDeps([18,1,2,3,4,10,5,19,20,21,22,16,23,24,8]),import.meta.url)),ey=m(()=>i(()=>import(`./DeviceDetail-CAtDRoZZ.js`).then(e=>({default:e.DeviceDetailPage})),__vite__mapDeps([25,1,2,3,4,10,5,26,27,28,29,19,30,22,31,32,33,34,35,36,23,8,37,13]),import.meta.url)),ty=m(()=>i(()=>import(`./Showroom-jPZcBd6K.js`).then(e=>({default:e.ShowroomPage})),__vite__mapDeps([38,1,2,3,4]),import.meta.url)),ny=m(()=>i(()=>import(`./EmbedPlayerPage-Bw6TIHbX.js`).then(e=>({default:e.EmbedPlayerPage})),__vite__mapDeps([39,1,2,3,4,5]),import.meta.url)),ry=m(()=>i(()=>import(`./Library-gaMbp-Fr.js`).then(e=>({default:e.LibraryPage})),__vite__mapDeps([40,1,2,3,4,10,5,41,19,21,42,43,34,44,37,13]),import.meta.url)),iy=m(()=>i(()=>import(`./Recordings-ZYwRaSrC.js`).then(e=>({default:e.RecordingsPage})),__vite__mapDeps([45,1,2,3,4,10,5,46,43,47,26,48,49,50,37,13]),import.meta.url)),ay=m(()=>i(()=>import(`./Viewer-GqkHpMmf.js`).then(e=>({default:e.ViewerPage})),__vite__mapDeps([51,2,3,4,52,5,13,1]),import.meta.url)),oy=m(()=>i(()=>import(`./Build-CUVwS9XA.js`).then(e=>({default:e.BuildPage})),__vite__mapDeps([53,1,2,3,4,10,5,29,54,19,43,55,31,32,33,56]),import.meta.url)),sy=m(()=>i(()=>import(`./CompositionEditorPage-B_ERZESY.js`).then(e=>({default:e.CompositionEditorPage})),__vite__mapDeps([57,1,2,3,4,29,5,6,55,31,10,32,33]),import.meta.url)),cy=m(()=>i(()=>import(`./Locations-haT1EJbm.js`).then(e=>({default:e.LocationsPage})),__vite__mapDeps([58,1,2,3,4,10,5,29,59,42,43,35,32,33]),import.meta.url)),ly=m(()=>i(()=>import(`./Addons-Ch5dCeth.js`).then(e=>({default:e.AddonsPage})),__vite__mapDeps([60,1,2,3,4,19,5,6,16,61,13]),import.meta.url)),uy=m(()=>i(()=>import(`./AiProfiles-ChvfjsXv.js`).then(e=>({default:e.AiProfilesPage})),__vite__mapDeps([62,1,2,3,4,10,5,63,64,6,43,13]),import.meta.url)),dy=m(()=>i(()=>import(`./MyAccess-Dj5hcaLN.js`).then(e=>({default:e.MyAccessPage})),__vite__mapDeps([65,1,2,3,4,10,5,19,66,67,68,6,43,69,13]),import.meta.url)),fy=m(()=>i(()=>import(`./Logs-CtH4NMql.js`).then(e=>({default:e.LogsPage})),__vite__mapDeps([70,1,2,3,4,71,22,5,6,43,72,73,16,74,17,13,75]),import.meta.url)),py=m(()=>i(()=>import(`./Identity-DTOixhZS.js`).then(e=>({default:e.IdentityPage})),__vite__mapDeps([76,1,2,3,4,10,5,77,19,66,67,68,6,43,72,73,16,74,17,13,69,75]),import.meta.url)),my=m(()=>i(()=>import(`./Network-D-v-cA54.js`).then(e=>({default:e.NetworkPage})),__vite__mapDeps([78,1,2,3,4,10,5,29,19,79,6,43,72,73,16,74,17,13,75]),import.meta.url)),hy=m(()=>i(()=>import(`./Integrations-HN2iCOqd.js`).then(e=>({default:e.IntegrationsPage})),__vite__mapDeps([80,1,2,3,4,10,5,19,79,67,81,43,72,73,6,16,74,17,13,12]),import.meta.url)),gy=m(()=>i(()=>import(`./Data-CMHfgMXt.js`).then(e=>({default:e.DataPage})),__vite__mapDeps([82,1,2,3,4,10,5,83,30,49,6,43,47,26,48,50,37,13]),import.meta.url)),_y=m(()=>i(()=>import(`./System-B5Ny1ozj.js`).then(e=>({default:e.SystemPage})),__vite__mapDeps([84,1,2,3,4,10,5,19,66,6,43,16,74,17,13]),import.meta.url)),vy=m(()=>i(()=>import(`./Cluster-DaFXU71S.js`).then(e=>({default:e.ClusterPage})),__vite__mapDeps([85,1,2,3,4,10,5,49,86,68,6,16,24,61,50]),import.meta.url)),yy=m(()=>i(()=>import(`./Terminal-DYLSrpsL.js`).then(e=>({default:e.TerminalPage})),__vite__mapDeps([87,1,2,3,4,19,5,6,16,88]),import.meta.url)),by=m(()=>i(()=>import(`./Notifications-r5w4Ne2O.js`).then(e=>({default:e.NotificationsPage})),__vite__mapDeps([89,1,2,3,4,10,5,28,19,63,90,6,43,56,36,44,13,33]),import.meta.url)),xy=m(()=>i(()=>import(`./History-BXTYUTxj.js`).then(e=>({default:e.HistoryPage})),__vite__mapDeps([91,1,2,3,4,5,6]),import.meta.url)),Sy=m(()=>i(()=>import(`./Calendars-BMLzvBb6.js`).then(e=>({default:e.CalendarsPage})),__vite__mapDeps([92,1,2,3,4,10,5,19,6]),import.meta.url)),Cy=new D({defaultOptions:{queries:{gcTime:0,staleTime:0,retry:!1,refetchOnWindowFocus:!1}}});Or(Cy);function wy({field:e,value:t,onChange:n,disabled:r}){return P(gm,{field:e,value:t,onChange:n,disabled:r})}var Ty={"model-selector":wy};function Ey({children:e}){let{t}=H(),{user:n,logout:r}=Wl(),[i,a]=f(0),o=M(n?.username??null);s(()=>{let e=n?.username??null;e!==o.current&&(o.current=e,Wc(),a(e=>e+1))},[n]);let c=d(()=>Z(),[i]),l=p(()=>{Z().reconnect(),a(e=>e+1),Cy.invalidateQueries()},[]);zm(p(()=>cl(l),[l])),s(()=>il(()=>{Z().isSocketTokenStale()&&l()}),[l]);let u=p(async()=>{let e=await ll();return e&&l(),e},[l]),{bootReady:m,bootError:h}=Lm(c,n??null,r,u);return P(Pm,{children:P(Pe,{system:c,children:P(fr.Provider,{client:c.trpcClient,queryClient:Cy,children:y(Vn,{children:[P(Zr,{children:m?e:P(Dy,{})}),m&&P(Sm,{}),h!==null&&m&&y(`div`,{className:`fixed bottom-[calc(env(safe-area-inset-bottom)+1rem)] right-[calc(env(safe-area-inset-right)+1rem)] z-50 max-w-sm rounded-lg border border-warning/30 bg-warning/10 px-3 py-2 text-xs text-warning shadow-lg`,children:[t(`app.bootProbeFailed`,`Boot probe failed:`),` `,h,`. Retrying in background.`]})]})})})})}function Dy(){let{t:e}=H();return P(`div`,{className:`flex min-h-screen items-center justify-center bg-background`,children:y(`div`,{className:`flex items-center gap-3 text-sm text-foreground-subtle`,children:[P(`span`,{className:`h-4 w-4 animate-spin rounded-full border-2 border-primary/30 border-t-primary`}),e(`app.connecting`,`Connecting…`)]})})}function Oy(){return P(`div`,{className:`flex min-h-screen items-center justify-center bg-background`,children:P(`span`,{className:`h-4 w-4 animate-spin rounded-full border-2 border-primary/30 border-t-primary`})})}function ky(){return P(vr,{defaultMode:`dark`,children:P(N,{client:Cy,children:P(Ul,{children:P(Ey,{children:P(yn,{children:P(xm,{children:y(Tn,{renderers:Ty,children:[P(Zo,{basename:We(),children:P(um,{children:P(w,{fallback:P(Oy,{}),children:y(so,{children:[P(X,{path:`/login`,element:P(qv,{})}),P(X,{path:`/admin/*`,element:P(Jv,{})}),P(X,{path:`/admin`,element:P(Jv,{})}),P(X,{path:`/change-password`,element:P($,{children:P(rv,{})})}),P(X,{path:`/showroom`,element:P(ty,{})}),P(X,{path:`/embed/player`,element:P(ny,{})}),y(X,{element:P($,{children:P(di,{children:P(F_,{})})}),children:[P(X,{index:!0,element:P(Yv,{})}),P(X,{path:`/access-denied`,element:P(Z_,{})}),P(X,{path:`/dashboard`,element:P(Y,{to:`/devices`,replace:!0})}),P(X,{path:`/devices`,element:P(Xv,{})}),P(X,{path:`/cameras`,element:P(Y,{to:`/devices`,replace:!0})}),P(X,{path:`/integrations`,element:P(Zv,{})}),P(X,{path:`/integrations/:integrationId`,element:P(Qv,{})}),P(X,{path:`/system/pipeline`,element:P($v,{})}),P(X,{path:`/pipeline`,element:P(Y,{to:`/system/pipeline`,replace:!0})}),P(X,{path:`/live`,element:P(ay,{})}),P(X,{path:`/devices/:deviceId`,element:P(ey,{})}),P(X,{path:`/system/logs`,element:P($,{requireAdmin:!0,children:P(fy,{})})}),P(X,{path:`/system/addons`,element:P($,{requireAdmin:!0,children:P(ly,{})})}),P(X,{path:`/system/ai`,element:P($,{requireAdmin:!0,children:P(uy,{})})}),P(X,{path:`/system/settings`,element:P($,{requireAdmin:!0,children:P(_y,{})})}),P(X,{path:`/system/nodes`,element:P($,{requireAdmin:!0,children:P(vy,{})})}),P(X,{path:`/system/notifications`,element:P($,{requireAdmin:!0,children:P(by,{})})}),P(X,{path:`/system/history`,element:P($,{requireAdmin:!0,children:P(xy,{})})}),P(X,{path:`/system/calendars`,element:P($,{requireAdmin:!0,children:P(Sy,{})})}),P(X,{path:`/system/identity`,element:P($,{requireAdmin:!0,children:P(py,{})})}),P(X,{path:`/system/my-access`,element:P(dy,{})}),P(X,{path:`/system/network`,element:P($,{requireAdmin:!0,children:P(my,{})})}),P(X,{path:`/system/integrations`,element:P($,{requireAdmin:!0,children:P(hy,{})})}),P(X,{path:`/system/data`,element:P($,{requireAdmin:!0,children:P(gy,{})})}),P(X,{path:`/system`,element:P(Y,{to:Tm,replace:!0})}),P(X,{path:`/system/terminal`,element:P($,{requireAdmin:!0,children:P(yy,{})})}),Em.map(e=>P(X,{path:e.path,element:P(Om,{tab:e.tab})},e.path)),P(X,{path:`/system/users`,element:P(Y,{to:`/system/identity?tab=users`,replace:!0})}),P(X,{path:`/system/api-keys`,element:P(Y,{to:`/system/identity?tab=api-keys`,replace:!0})}),P(X,{path:`/system/authentication`,element:P(Y,{to:q_(`authentication`),replace:!0})}),P(X,{path:`/system/linked-sessions`,element:P(Y,{to:`/system/identity?tab=linked-sessions`,replace:!0})}),P(X,{path:`/system/remote-access`,element:P(Y,{to:q_(`remoteAccess`),replace:!0})}),P(X,{path:`/system/turn`,element:P(Y,{to:q_(`turn`),replace:!0})}),P(X,{path:`/system/storage`,element:P(Y,{to:`/system/data?tab=storage`,replace:!0})}),P(X,{path:`/system/backup`,element:P(Y,{to:`/system/data?tab=backup`,replace:!0})}),P(X,{path:`/library`,element:P($,{requireAdmin:!0,children:P(ry,{})})}),P(X,{path:`/retrain`,element:P(Y,{to:`/addon/training`,replace:!0})}),P(X,{path:`/recordings`,element:P($,{requireAdmin:!0,children:P(iy,{})})}),P(X,{path:`/build`,element:P($,{requireAdmin:!0,children:P(oy,{})})}),P(X,{path:L_,element:P($,{requireAdmin:!0,children:P(sy,{})})}),P(X,{path:R_,element:P($,{requireAdmin:!0,children:P(sy,{})})}),P(X,{path:`/locations`,element:P($,{requireAdmin:!0,children:P(cy,{})})}),P(X,{path:`/automation`,element:P(_m,{to:`/build`})}),P(X,{path:`/addon/:pagePath`,element:P($,{requireAdmin:!0,children:P(Xm,{})})}),P(X,{path:`*`,element:P(Y,{to:`/devices`,replace:!0})})]})]})})})}),P(jm,{})]})})})})})})})}a(),window.__camstackUiLibrary=Er,window.__camstackSdk=rr,window.__camstackTypes=Jt;var Ay=ei(document.getElementById(`root`));Ig(window.location.pathname,We())?Hv(Ay):Ay.render(P(S,{children:P(ky,{})}));export{Kf as $,Wl as $n,pd as $t,zp as A,Lu as An,Hd as At,Qf as B,Yl as Bn,kd as Bt,Nm as C,$u as Cn,sf as Ct,qp as D,yu as Dn,Rd as Dt,cm as E,Nu as En,Fd as Et,_p as F,lu as Fn,jd as Ft,zf as G,ou as Gn,bd as Gt,Bf as H,nu as Hn,yd as Ht,rp as I,ru as In,Nd as It,Xf as J,Jl as Jn,Sd as Jt,Rf as K,eu as Kn,gd as Kt,lp as L,Ql as Ln,Ed as Lt,Fp as M,bu as Mn,zd as Mt,Pp as N,pu as Nn,wd as Nt,Gp as O,xu as On,Bd as Ot,Np as P,du as Pn,Md as Pt,Hf as Q,Kl as Qn,sd as Qt,up as R,ql as Rn,Ad as Rt,_h as S,Vu as Sn,qd as St,bm as T,Fu as Tn,Pd as Tt,ep as U,$l as Un,ud as Ut,Wf as V,Xl as Vn,Dd as Vt,qf as W,tu as Wn,Cd as Wt,np as X,cu as Xn,fd as Xt,$f as Y,iu as Yn,ld as Yt,Vf as Z,su as Zn,id as Zt,Ag as _,vu as _n,Xd as _t,W_ as a,Mu as an,tc as ar,kf as at,Hh as b,Tu as bn,tf as bt,G_ as c,Ru as cn,qs as cr,Sf as ct,Y_ as d,wu as dn,Y as dr,df as dt,md as en,Tc as er,Pf as et,z_ as f,Wu as fn,Ma as fr,gf as ft,vg as g,_u as gn,lf as gt,Ug as h,Au as hn,Zd as ht,U_ as i,ku as in,ac as ir,jf as it,Vp as j,Gu as jn,Ud as jt,Rp as k,zu as kn,Vd as kt,q_ as l,Uu as ln,Vs as lr,Gd as lt,B_ as m,Ku as mn,ss as mr,ef as mt,hv as n,Qu as nn,uc as nr,Nf as nt,V_ as o,hu as on,ec as or,Of as ot,I_ as p,Hu as pn,Ia as pr,nf as pt,Uf as q,Zl as qn,xd as qt,K_ as r,Pu as rn,nc as rr,Ff as rt,H_ as s,Iu as sn,$s as sr,Df as st,_v as t,Bu as tn,wc as tr,Mf as tt,J_ as u,Xu as un,$o as ur,Kd as ut,gg as v,Zu as vn,cf as vt,Tm as w,ju as wn,Wd as wt,Sh as x,Eu as xn,rf as xt,sg as y,Cu as yn,af as yt,dp as z,au as zn,Od as zt};
4
+ Please change the parent <Route path="${e}"> to <Route path="${e===`/`?`*`:`${e}/*`}">.`)}let u=J(),d;if(t){let e=typeof t==`string`?Si(t):t;U(c===`/`||e.pathname?.startsWith(c),`When overriding the location using \`<Routes location>\` or \`useRoutes(routes, location)\`, the location pathname must begin with the portion of the URL pathname that was matched by all parent routes. The current pathname base is "${c}" but pathname "${e.pathname}" was given in the \`location\` prop.`),d=e}else d=u;let f=d.pathname||`/`,p=f;if(c!==`/`){let e=c.replace(/^\//,``).split(`/`);p=`/`+f.replace(/^\//,``).split(`/`).slice(e.length).join(`/`)}let m=n&&n.state.matches.length?n.state.matches.map(e=>Object.assign(e,{route:n.manifest[e.route.id]||e.route})):Ti(e,{pathname:p});W(l||m!=null,`No routes matched location "${d.pathname}${d.search}${d.hash}" `),W(m==null||m[m.length-1].route.element!==void 0||m[m.length-1].route.Component!==void 0||m[m.length-1].route.lazy!==void 0,`Matched leaf route at location "${d.pathname}${d.search}${d.hash}" does not have an element or Component. This means it will render an <Outlet /> with a null value by default resulting in an "empty" page.`);let h=Ka(m&&m.map(e=>Object.assign({},e,{params:Object.assign({},o,e.params),pathname:G([c,r.encodeLocation?r.encodeLocation(e.pathname.replace(/%/g,`%25`).replace(/\?/g,`%3F`).replace(/#/g,`%23`)).pathname:e.pathname]),pathnameBase:e.pathnameBase===`/`?c:G([c,r.encodeLocation?r.encodeLocation(e.pathnameBase.replace(/%/g,`%25`).replace(/\?/g,`%3F`).replace(/#/g,`%23`)).pathname:e.pathnameBase])})),i,n);return t&&h?A(ba.Provider,{value:{location:{pathname:`/`,search:``,hash:``,state:null,key:`default`,mask:void 0,...d},navigationType:`POP`}},h):h}function Ba(){let e=to(),t=aa(e)?`${e.status} ${e.statusText}`:e instanceof Error?e.message:JSON.stringify(e),n=e instanceof Error?e.stack:null,r=`rgba(200,200,200, 0.5)`,i={padding:`0.5rem`,backgroundColor:r},a={padding:`2px 4px`,backgroundColor:r},o=null;return console.error(`Error handled by React Router default ErrorBoundary:`,e),o=A(b,null,A(`p`,null,`💿 Hey developer 👋`),A(`p`,null,`You can provide a way better UX than this when your app throws errors by providing your own `,A(`code`,{style:a},`ErrorBoundary`),` or`,` `,A(`code`,{style:a},`errorElement`),` prop on your route.`)),A(b,null,A(`h2`,null,`Unexpected Application Error!`),A(`h3`,{style:{fontStyle:`italic`}},t),n?A(`pre`,{style:i},n):null,o)}var Va=A(Ba,null),Ha=class extends _{constructor(e){super(e),this.state={location:e.location,revalidation:e.revalidation,error:e.error}}static getDerivedStateFromError(e){return{error:e}}static getDerivedStateFromProps(e,t){return t.location!==e.location||t.revalidation!==`idle`&&e.revalidation===`idle`?{error:e.error,location:e.location,revalidation:e.revalidation}:{error:e.error===void 0?t.error:e.error,location:t.location,revalidation:e.revalidation||t.revalidation}}componentDidCatch(e,t){this.props.onError?this.props.onError(e,t):console.error(`React Router caught the following error during render`,e)}render(){let e=this.state.error;if(this.context&&typeof e==`object`&&e&&`digest`in e&&typeof e.digest==`string`){let t=Ea(e.digest);t&&(e=t)}let t=e===void 0?this.props.children:A(q.Provider,{value:this.props.routeContext},A(xa.Provider,{value:e,children:this.props.component}));return this.context?A(Wa,{error:e},t):t}};Ha.contextType=ha;var Ua=new WeakMap;function Wa({children:e,error:t}){let{basename:n}=v(K);if(typeof t==`object`&&t&&`digest`in t&&typeof t.digest==`string`){let e=Ta(t.digest);if(e){let r=Ua.get(t);if(r)throw r;let i=ca(e.location,n),a=i.absoluteURL||i.to;if(fa(a))throw Error(`Invalid redirect location`);if(sa&&!Ua.get(t))if(i.isExternal||e.reloadDocument)window.location.href=a;else{let n=Promise.resolve().then(()=>window.__reactRouterDataRouter.navigate(i.to,{replace:e.replace}));throw Ua.set(t,n),n}return A(`meta`,{httpEquiv:`refresh`,content:`0;url=${a}`})}}return e}function Ga({routeContext:e,match:t,children:n}){let r=v(pa);return r&&r.static&&r.staticContext&&(t.route.errorElement||t.route.ErrorBoundary)&&(r.staticContext._deepestRenderedBoundaryId=t.route.id),A(q.Provider,{value:e},n)}function Ka(e,t=[],n){let r=n?.state;if(e==null){if(!r)return null;if(r.errors)e=r.matches;else if(t.length===0&&!r.initialized&&r.matches.length>0)e=r.matches;else return null}let i=e,a=r?.errors;if(a!=null){let e=i.findIndex(e=>e.route.id&&a?.[e.route.id]!==void 0);U(e>=0,`Could not find a matching route for errors on route IDs: ${Object.keys(a).join(`,`)}`),i=i.slice(0,Math.min(i.length,e+1))}let o=!1,s=-1;if(n&&r){o=r.renderFallback;for(let e=0;e<i.length;e++){let t=i[e];if((t.route.HydrateFallback||t.route.hydrateFallbackElement)&&(s=e),t.route.id){let{loaderData:e,errors:a}=r,c=t.route.loader&&!e.hasOwnProperty(t.route.id)&&(!a||a[t.route.id]===void 0);if(t.route.lazy||c){n.isStatic&&(o=!0),i=s>=0?i.slice(0,s+1):[i[0]];break}}}}let c=n?.onError,l=r&&c?(e,t)=>{c(e,{location:r.location,params:r.matches?.[0]?.params??{},pattern:oa(r.matches),errorInfo:t})}:void 0;return i.reduceRight((e,n,c)=>{let u,d=!1,f=null,p=null;r&&(u=a&&n.route.id?a[n.route.id]:void 0,f=n.route.errorElement||Va,o&&(s<0&&c===0?(io(`route-fallback`,!1,"No `HydrateFallback` element provided to render during initial hydration"),d=!0,p=null):s===c&&(d=!0,p=n.route.hydrateFallbackElement||null)));let m=t.concat(i.slice(0,c+1)),h=()=>{let t;return t=u?f:d?p:n.route.Component?A(n.route.Component,null):n.route.element?n.route.element:e,A(Ga,{match:n,routeContext:{outlet:e,matches:m,isDataRoute:r!=null},children:t})};return r&&(n.route.ErrorBoundary||n.route.errorElement||c===0)?A(Ha,{location:r.location,revalidation:r.revalidation,component:f,error:u,children:h(),routeContext:{outlet:null,matches:m,isDataRoute:!0},onError:l}):h()},null)}function qa(e){return`${e} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function Ja(e){let t=v(pa);return U(t,qa(e)),t}function Ya(e){let t=v(ma);return U(t,qa(e)),t}function Xa(e){let t=v(q);return U(t,qa(e)),t}function Za(e){let t=Xa(e),n=t.matches[t.matches.length-1];return U(n.route.id,`${e} can only be used on routes that contain a unique "id"`),n.route.id}function Qa(){return Za(`useRouteId`)}function $a(){let e=Ya(`useNavigation`);return d(()=>{let{matches:t,historyAction:n,...r}=e.navigation;return r},[e.navigation])}function eo(){let{matches:e,loaderData:t}=Ya(`useMatches`);return d(()=>e.map(e=>Di(e,t)),[e,t])}function to(){let e=v(xa),t=Ya(`useRouteError`),n=Za(`useRouteError`);return e===void 0?t.errors?.[n]:e}function no(){let{router:e}=Ja(`useNavigate`),t=Za(`useNavigate`),n=M(!1);return ja(()=>{n.current=!0}),p(async(r,i={})=>{W(n.current,Aa),n.current&&(typeof r==`number`?await e.navigate(r):await e.navigate(r,{fromRouteId:t,...i}))},[e,t])}var ro={};function io(e,t,n){!t&&!ro[e]&&(ro[e]=!0,W(!1,n))}h(ao);function ao({routes:e,manifest:t,future:n,state:r,isStatic:i,onError:a}){return za(e,void 0,{manifest:t,state:r,isStatic:i,onError:a,future:n})}function Y({to:e,replace:t,state:n,relative:r}){U(Oa(),`<Navigate> may be used only in the context of a <Router> component.`);let{static:i}=v(K);W(!i,`<Navigate> must not be used on the initial render in a <StaticRouter>. This is a no-op, but you should modify your code so the <Navigate> is only ever rendered in response to some user interaction or state change.`);let{matches:a}=v(q),{pathname:o}=J(),c=Ma(),l=Qi(e,Zi(a),o,r===`path`),u=JSON.stringify(l);return s(()=>{c(JSON.parse(u),{replace:t,state:n,relative:r})},[c,u,r,t,n]),null}function X(e){U(!1,`A <Route> is only ever to be used as the child of <Routes> element, never rendered directly. Please wrap your <Route> in a <Routes>.`)}function oo({basename:e=`/`,children:t=null,location:n,navigationType:r=`POP`,navigator:i,static:a=!1,useTransitions:o}){U(!Oa(),`You cannot render a <Router> inside another <Router>. You should never have more than one in your app.`);let s=e.replace(/^\/*/,`/`),c=d(()=>({basename:s,navigator:i,static:a,useTransitions:o,future:{}}),[s,i,a,o]);typeof n==`string`&&(n=Si(n));let{pathname:l=`/`,search:u=``,hash:f=``,state:p=null,key:m=`default`,mask:h}=n,g=d(()=>{let e=Ki(l,s);return e==null?null:{location:{pathname:e,search:u,hash:f,state:p,key:m,mask:h},navigationType:r}},[s,l,u,f,p,m,r,h]);return W(g!=null,`<Router basename="${s}"> is not able to match the URL "${l}${u}${f}" because it does not start with the basename, so the <Router> won't render anything.`),g==null?null:A(K.Provider,{value:c},A(ba.Provider,{children:t,value:g}))}function so({children:e,location:t}){return Ra(co(e),t)}function co(e,t=[]){let n=[];return l.forEach(e,(e,r)=>{if(!k(e))return;let i=[...t,r];if(e.type===b){n.push.apply(n,co(e.props.children,i));return}U(e.type===X,`[${typeof e.type==`string`?e.type:e.type.name}] is not a <Route> component. All component children of <Routes> must be a <Route> or <React.Fragment>`),U(!e.props.index||!e.props.children,`An index route cannot have child routes.`);let a={id:e.props.id||i.join(`-`),caseSensitive:e.props.caseSensitive,element:e.props.element,Component:e.props.Component,index:e.props.index,path:e.props.path,middleware:e.props.middleware,loader:e.props.loader,action:e.props.action,hydrateFallbackElement:e.props.hydrateFallbackElement,HydrateFallback:e.props.HydrateFallback,errorElement:e.props.errorElement,ErrorBoundary:e.props.ErrorBoundary,hasErrorBoundary:e.props.hasErrorBoundary===!0||e.props.ErrorBoundary!=null||e.props.errorElement!=null,shouldRevalidate:e.props.shouldRevalidate,handle:e.props.handle,lazy:e.props.lazy};e.props.children&&(a.children=co(e.props.children,i)),n.push(a)}),n}var lo=`get`,uo=`application/x-www-form-urlencoded`;function fo(e){return typeof HTMLElement<`u`&&e instanceof HTMLElement}function po(e){return fo(e)&&e.tagName.toLowerCase()===`button`}function mo(e){return fo(e)&&e.tagName.toLowerCase()===`form`}function ho(e){return fo(e)&&e.tagName.toLowerCase()===`input`}function go(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}function _o(e,t){return e.button===0&&(!t||t===`_self`)&&!go(e)}function vo(e=``){return new URLSearchParams(typeof e==`string`||Array.isArray(e)||e instanceof URLSearchParams?e:Object.keys(e).reduce((t,n)=>{let r=e[n];return t.concat(Array.isArray(r)?r.map(e=>[n,e]):[[n,r]])},[]))}function yo(e,t){let n=vo(e);return t&&t.forEach((e,r)=>{n.has(r)||t.getAll(r).forEach(e=>{n.append(r,e)})}),n}var bo=null;function xo(){if(bo===null)try{new FormData(document.createElement(`form`),0),bo=!1}catch{bo=!0}return bo}var So=new Set([`application/x-www-form-urlencoded`,`multipart/form-data`,`text/plain`]);function Co(e){return e!=null&&!So.has(e)?(W(!1,`"${e}" is not a valid \`encType\` for \`<Form>\`/\`<fetcher.Form>\` and will default to "${uo}"`),null):e}function wo(e,t){let n,r,i,a,o;if(mo(e)){let o=e.getAttribute(`action`);r=o?Ki(o,t):null,n=e.getAttribute(`method`)||lo,i=Co(e.getAttribute(`enctype`))||uo,a=new FormData(e)}else if(po(e)||ho(e)&&(e.type===`submit`||e.type===`image`)){let o=e.form;if(o==null)throw Error(`Cannot submit a <button> or <input type="submit"> without a <form>`);let s=e.getAttribute(`formaction`)||o.getAttribute(`action`);if(r=s?Ki(s,t):null,n=e.getAttribute(`formmethod`)||o.getAttribute(`method`)||lo,i=Co(e.getAttribute(`formenctype`))||Co(o.getAttribute(`enctype`))||uo,a=new FormData(o,e),!xo()){let{name:t,type:n,value:r}=e;if(n===`image`){let e=t?`${t}.`:``;a.append(`${e}x`,`0`),a.append(`${e}y`,`0`)}else t&&a.append(t,r)}}else if(fo(e))throw Error(`Cannot submit element that is not <form>, <button>, or <input type="submit|image">`);else n=lo,r=null,i=uo,o=e;return a&&i===`text/plain`&&(o=a,a=void 0),{action:r,method:n.toLowerCase(),encType:i,formData:a,body:o}}Object.getOwnPropertyNames(Object.prototype).sort().join(`\0`);var To={"&":`\\u0026`,">":`\\u003e`,"<":`\\u003c`,"\u2028":`\\u2028`,"\u2029":`\\u2029`},Eo=/[&><\u2028\u2029]/g;function Do(e){return e.replace(Eo,e=>To[e])}function Oo(e,t){if(e===!1||e==null)throw Error(t)}function ko(e,t,n,r){let i=typeof e==`string`?new URL(e,typeof window>`u`?`server://singlefetch/`:window.location.origin):e;return n?i.pathname.endsWith(`/`)?i.pathname=`${i.pathname}_.${r}`:i.pathname=`${i.pathname}.${r}`:i.pathname===`/`?i.pathname=`_root.${r}`:t&&Ki(i.pathname,t)===`/`?i.pathname=`${ea(t)}/_root.${r}`:i.pathname=`${ea(i.pathname)}.${r}`,i}async function Ao(e,t){if(e.id in t)return t[e.id];try{let n=await i(()=>import(e.module),[],import.meta.url);return t[e.id]=n,n}catch(t){return console.error(`Error loading route module \`${e.module}\`, reloading page...`),console.error(t),window.__reactRouterContext&&window.__reactRouterContext.isSpaMode,window.location.reload(),new Promise(()=>{})}}function jo(e){return e!=null&&typeof e.page==`string`}function Mo(e){return e==null?!1:e.href==null?e.rel===`preload`&&typeof e.imageSrcSet==`string`&&typeof e.imageSizes==`string`:typeof e.rel==`string`&&typeof e.href==`string`}async function No(e,t,n){return Ro((await Promise.all(e.map(async e=>{let r=t.routes[e.route.id];if(r){let e=await Ao(r,n);return e.links?e.links():[]}return[]}))).flat(1).filter(Mo).filter(e=>e.rel===`stylesheet`||e.rel===`preload`).map(e=>e.rel===`stylesheet`?{...e,rel:`prefetch`,as:`style`}:{...e,rel:`prefetch`}))}function Po(e,t,n,r,i,a){let o=(e,t)=>n[t]?e.route.id!==n[t].route.id:!0,s=(e,t)=>n[t].pathname!==e.pathname||n[t].route.path?.endsWith(`*`)&&n[t].params[`*`]!==e.params[`*`];return a===`assets`?t.filter((e,t)=>o(e,t)||s(e,t)):a===`data`?t.filter((t,a)=>{let c=r.routes[t.route.id];if(!c||!c.hasLoader)return!1;if(o(t,a)||s(t,a))return!0;if(t.route.shouldRevalidate){let r=t.route.shouldRevalidate({currentUrl:new URL(i.pathname+i.search+i.hash,window.origin),currentParams:n[0]?.params||{},nextUrl:new URL(e,window.origin),nextParams:t.params,defaultShouldRevalidate:!0});if(typeof r==`boolean`)return r}return!0}):[]}function Fo(e,t,{includeHydrateFallback:n}={}){return Io(e.map(e=>{let r=t.routes[e.route.id];if(!r)return[];let i=[r.module];return r.clientActionModule&&(i=i.concat(r.clientActionModule)),r.clientLoaderModule&&(i=i.concat(r.clientLoaderModule)),n&&r.hydrateFallbackModule&&(i=i.concat(r.hydrateFallbackModule)),r.imports&&(i=i.concat(r.imports)),i}).flat(1))}function Io(e){return[...new Set(e)]}function Lo(e){let t={},n=Object.keys(e).sort();for(let r of n)t[r]=e[r];return t}function Ro(e,t){let n=new Set,r=new Set(t);return e.reduce((e,i)=>{if(t&&!jo(i)&&i.as===`script`&&i.href&&r.has(i.href))return e;let a=JSON.stringify(Lo(i));return n.has(a)||(n.add(a),e.push({key:a,link:i})),e},[])}function zo(){let e=v(pa);return Oo(e,`You must render this element inside a <DataRouterContext.Provider> element`),e}function Bo(){let e=v(ma);return Oo(e,`You must render this element inside a <DataRouterStateContext.Provider> element`),e}var Vo=g(void 0);Vo.displayName=`FrameworkContext`;function Ho(){let e=v(Vo);return Oo(e,`You must render this element inside a <HydratedRouter> element`),e}function Uo(e,t){let n=v(Vo),[r,i]=f(!1),[a,o]=f(!1),{onFocus:c,onBlur:l,onMouseEnter:u,onMouseLeave:d,onTouchStart:p}=t,m=M(null);s(()=>{if(e===`render`&&o(!0),e===`viewport`){let e=new IntersectionObserver(e=>{e.forEach(e=>{o(e.isIntersecting)})},{threshold:.5});return m.current&&e.observe(m.current),()=>{e.disconnect()}}},[e]),s(()=>{if(r){let e=setTimeout(()=>{o(!0)},100);return()=>{clearTimeout(e)}}},[r]);let h=()=>{i(!0)},g=()=>{i(!1),o(!1)};return n?e===`intent`?[a,m,{onFocus:Wo(c,h),onBlur:Wo(l,g),onMouseEnter:Wo(u,h),onMouseLeave:Wo(d,g),onTouchStart:Wo(p,h)}]:[a,m,{}]:[!1,m,{}]}function Wo(e,t){return n=>{e&&e(n),n.defaultPrevented||t(n)}}function Go({page:e,...t}){let n=ga(),{nonce:r}=Ho(),{router:i}=zo(),a=d(()=>Ti(i.routes,e,i.basename),[i.routes,e,i.basename]);return a?(t.nonce==null&&r&&(t={...t,nonce:r}),A(n?qo:Jo,{page:e,matches:a,...t})):null}function Ko(e){let{manifest:t,routeModules:n}=Ho(),[r,i]=f([]);return s(()=>{let r=!1;return No(e,t,n).then(e=>{r||i(e)}),()=>{r=!0}},[e,t,n]),r}function qo({page:e,matches:t,...n}){let r=J(),{future:i}=Ho(),{basename:a}=zo();return A(b,null,d(()=>{if(e===r.pathname+r.search+r.hash)return[];let n=ko(e,a,i.v8_trailingSlashAwareDataRequests,`rsc`),o=!1,s=[];for(let e of t)typeof e.route.shouldRevalidate==`function`?o=!0:s.push(e.route.id);return o&&s.length>0&&n.searchParams.set(`_routes`,s.join(`,`)),[n.pathname+n.search]},[a,i.v8_trailingSlashAwareDataRequests,e,r,t]).map(e=>A(`link`,{key:e,rel:`prefetch`,as:`fetch`,href:e,...n})))}function Jo({page:e,matches:t,...n}){let r=J(),{future:i,manifest:a,routeModules:o}=Ho(),{basename:s}=zo(),{loaderData:c,matches:l}=Bo(),u=d(()=>Po(e,t,l,a,r,`data`),[e,t,l,a,r]),f=d(()=>Po(e,t,l,a,r,`assets`),[e,t,l,a,r]),p=d(()=>{if(e===r.pathname+r.search+r.hash)return[];let n=new Set,l=!1;if(t.forEach(e=>{let t=a.routes[e.route.id];!t||!t.hasLoader||(!u.some(t=>t.route.id===e.route.id)&&e.route.id in c&&o[e.route.id]?.shouldRevalidate||t.hasClientLoader?l=!0:n.add(e.route.id))}),n.size===0)return[];let d=ko(e,s,i.v8_trailingSlashAwareDataRequests,`data`);return l&&n.size>0&&d.searchParams.set(`_routes`,t.filter(e=>n.has(e.route.id)).map(e=>e.route.id).join(`,`)),[d.pathname+d.search]},[s,i.v8_trailingSlashAwareDataRequests,c,r,a,u,t,e,o]),m=d(()=>Fo(f,a),[f,a]),h=Ko(f);return A(b,null,p.map(e=>A(`link`,{key:e,rel:`prefetch`,as:`fetch`,href:e,...n})),m.map(e=>A(`link`,{key:e,rel:`modulepreload`,href:e,...n})),h.map(({key:e,link:t})=>A(`link`,{key:e,nonce:n.nonce,...t,crossOrigin:t.crossOrigin??n.crossOrigin})))}function Yo(...e){return t=>{e.forEach(e=>{typeof e==`function`?e(t):e!=null&&(e.current=t)})}}var Xo=typeof window<`u`&&window.document!==void 0&&window.document.createElement!==void 0;try{Xo&&(window.__reactRouterVersion=`7.18.0`)}catch{}function Zo({basename:e,children:t,useTransitions:n,window:r}){let i=M();i.current??=_i({window:r,v5Compat:!0});let a=i.current,[o,s]=f({action:a.action,location:a.location}),c=p(e=>{n===!1?s(e):u(()=>s(e))},[n]);return x(()=>a.listen(c),[a,c]),A(oo,{basename:e,children:t,location:o.location,navigationType:o.action,navigator:a,useTransitions:n})}function Qo({basename:e,children:t,history:n,useTransitions:r}){let[i,a]=f({action:n.action,location:n.location}),o=p(e=>{r===!1?a(e):u(()=>a(e))},[r]);return x(()=>n.listen(o),[n,o]),A(oo,{basename:e,children:t,location:i.location,navigationType:i.action,navigator:n,useTransitions:r})}Qo.displayName=`unstable_HistoryRouter`;var $o=o(function({onClick:e,discover:t=`render`,prefetch:n=`none`,relative:r,reloadDocument:i,replace:a,mask:o,state:s,target:c,to:l,preventScrollReset:u,viewTransition:d,defaultShouldRevalidate:f,...p},m){let{basename:h,navigator:g,useTransitions:_}=v(K),y=typeof l==`string`&&fi.test(l),x=ca(l,h);l=x.to;let S=Da(l,{relative:r}),C=J(),w=null;if(o){let e=Qi(o,[],C.mask?C.mask.pathname:`/`,!0);h!==`/`&&(e.pathname=e.pathname===`/`?h:G([h,e.pathname])),w=g.createHref(e)}let[T,E,D]=Uo(n,p),O=os(l,{replace:a,mask:o,state:s,target:c,preventScrollReset:u,relative:r,viewTransition:d,defaultShouldRevalidate:f,useTransitions:_});function k(t){e&&e(t),t.defaultPrevented||O(t)}let j=!(x.isExternal||i),M=A(`a`,{...p,...D,href:(j?w:void 0)||x.absoluteURL||S,onClick:j?k:e,ref:Yo(m,E),target:c,"data-discover":!y&&t===`render`?`true`:void 0});return T&&!y?A(b,null,M,A(Go,{page:S})):M});$o.displayName=`Link`;var es=o(function({"aria-current":e=`page`,caseSensitive:t=!1,className:n=``,end:r=!1,style:i,to:a,viewTransition:o,children:s,...c},l){let u=La(a,{relative:c.relative}),d=J(),f=v(ma),{navigator:p,basename:m}=v(K),h=f!=null&&_s(u)&&o===!0,g=p.encodeLocation?p.encodeLocation(u).pathname:u.pathname,_=d.pathname,y=f&&f.navigation&&f.navigation.location?f.navigation.location.pathname:null;t||(_=_.toLowerCase(),y=y?y.toLowerCase():null,g=g.toLowerCase()),y&&m&&(y=Ki(y,m)||y);let b=g!==`/`&&g.endsWith(`/`)?g.length-1:g.length,x=_===g||!r&&_.startsWith(g)&&_.charAt(b)===`/`,S=y!=null&&(y===g||!r&&y.startsWith(g)&&y.charAt(g.length)===`/`),C={isActive:x,isPending:S,isTransitioning:h},w=x?e:void 0,T;T=typeof n==`function`?n(C):[n,x?`active`:null,S?`pending`:null,h?`transitioning`:null].filter(Boolean).join(` `);let E=typeof i==`function`?i(C):i;return A($o,{...c,"aria-current":w,className:T,ref:l,style:E,to:a,viewTransition:o},typeof s==`function`?s(C):s)});es.displayName=`NavLink`;var ts=o(({discover:e=`render`,fetcherKey:t,navigate:n,reloadDocument:r,replace:i,state:a,method:o=lo,action:s,onSubmit:c,relative:l,preventScrollReset:d,viewTransition:f,defaultShouldRevalidate:p,...m},h)=>{let{useTransitions:g}=v(K),_=us(),y=ds(s,{relative:l}),b=o.toLowerCase()===`get`?`get`:`post`,x=typeof s==`string`&&fi.test(s);return A(`form`,{ref:h,method:b,action:y,onSubmit:r?c:e=>{if(c&&c(e),e.defaultPrevented)return;e.preventDefault();let r=e.nativeEvent.submitter,s=r?.getAttribute(`formmethod`)||o,m=()=>_(r||e.currentTarget,{fetcherKey:t,method:s,navigate:n,replace:i,state:a,relative:l,preventScrollReset:d,viewTransition:f,defaultShouldRevalidate:p});g&&n!==!1?u(()=>m()):m()},...m,"data-discover":!x&&e===`render`?`true`:void 0})});ts.displayName=`Form`;function ns({getKey:e,storageKey:t,...n}){let r=v(Vo),{basename:i}=v(K),a=J(),o=eo();hs({getKey:e,storageKey:t});let s=d(()=>{if(!r||!e)return null;let t=ms(a,o,i,e);return t===a.key?null:t},[]);if(!r||r.isSpaMode)return null;let c=((e,t)=>{if(!window.history.state||!window.history.state.key){let e=Math.random().toString(32).slice(2);window.history.replaceState({key:e},``)}try{let n=JSON.parse(sessionStorage.getItem(e)||`{}`)[t||window.history.state.key];typeof n==`number`&&window.scrollTo(0,n)}catch(t){console.error(t),sessionStorage.removeItem(e)}}).toString();return n.nonce==null&&r?.nonce&&(n.nonce=r.nonce),A(`script`,{...n,suppressHydrationWarning:!0,dangerouslySetInnerHTML:{__html:`(${c})(${Do(JSON.stringify(t||fs))}, ${Do(JSON.stringify(s))})`}})}ns.displayName=`ScrollRestoration`;function rs(e){return`${e} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function is(e){let t=v(pa);return U(t,rs(e)),t}function as(e){let t=v(ma);return U(t,rs(e)),t}function os(e,{target:t,replace:n,mask:r,state:i,preventScrollReset:a,relative:o,viewTransition:s,defaultShouldRevalidate:c,useTransitions:l}={}){let d=Ma(),f=J(),m=La(e,{relative:o});return p(p=>{if(_o(p,t)){p.preventDefault();let t=n===void 0?xi(f)===xi(m):n,h=()=>d(e,{replace:t,mask:r,state:i,preventScrollReset:a,relative:o,viewTransition:s,defaultShouldRevalidate:c});l?u(()=>h()):h()}},[f,d,m,n,r,i,t,e,a,o,s,c,l])}function ss(e){W(typeof URLSearchParams<`u`,"You cannot use the `useSearchParams` hook in a browser that does not support the URLSearchParams API. If you need to support Internet Explorer 11, we recommend you load a polyfill such as https://github.com/ungap/url-search-params.");let t=M(vo(e)),n=M(!1),r=J(),i=d(()=>yo(r.search,n.current?null:t.current),[r.search]),a=Ma();return[i,p((e,t)=>{let r=vo(typeof e==`function`?e(new URLSearchParams(i)):e);n.current=!0,a(`?`+r,t)},[a,i])]}var cs=0,ls=()=>`__${String(++cs)}__`;function us(){let{router:e}=is(`useSubmit`),{basename:t}=v(K),n=Qa(),r=e.fetch,i=e.navigate;return p(async(e,a={})=>{let{action:o,method:s,encType:c,formData:l,body:u}=wo(e,t);a.navigate===!1?await r(a.fetcherKey||ls(),n,a.action||o,{defaultShouldRevalidate:a.defaultShouldRevalidate,preventScrollReset:a.preventScrollReset,formData:l,body:u,formMethod:a.method||s,formEncType:a.encType||c,flushSync:a.flushSync}):await i(a.action||o,{defaultShouldRevalidate:a.defaultShouldRevalidate,preventScrollReset:a.preventScrollReset,formData:l,body:u,formMethod:a.method||s,formEncType:a.encType||c,replace:a.replace,state:a.state,fromRouteId:n,flushSync:a.flushSync,viewTransition:a.viewTransition})},[r,i,t,n])}function ds(e,{relative:t}={}){let{basename:n}=v(K),r=v(q);U(r,`useFormAction must be used inside a RouteContext`);let[i]=r.matches.slice(-1),a={...La(e||`.`,{relative:t})},o=J();if(e==null){a.search=o.search;let e=new URLSearchParams(a.search),t=e.getAll(`index`);if(t.some(e=>e===``)){e.delete(`index`),t.filter(e=>e).forEach(t=>e.append(`index`,t));let n=e.toString();a.search=n?`?${n}`:``}}return(!e||e===`.`)&&i.route.index&&(a.search=a.search?a.search.replace(/^\?/,`?index&`):`?index`),n!==`/`&&(a.pathname=a.pathname===`/`?n:G([n,a.pathname])),xi(a)}var fs=`react-router-scroll-positions`,ps={};function ms(e,t,n,r){let i=null;return r&&(i=r(n===`/`?e:{...e,pathname:Ki(e.pathname,n)||e.pathname},t)),i??=e.key,i}function hs({getKey:e,storageKey:t}={}){let{router:n}=is(`useScrollRestoration`),{restoreScrollPosition:r,preventScrollReset:i}=as(`useScrollRestoration`),{basename:a}=v(K),o=J(),c=eo(),l=$a();s(()=>(window.history.scrollRestoration=`manual`,()=>{window.history.scrollRestoration=`auto`}),[]),gs(p(()=>{if(l.state===`idle`){let t=ms(o,c,a,e);ps[t]=window.scrollY}try{sessionStorage.setItem(t||fs,JSON.stringify(ps))}catch(e){W(!1,`Failed to save scroll positions in sessionStorage, <ScrollRestoration /> will not work properly (${e}).`)}window.history.scrollRestoration=`auto`},[l.state,e,a,o,c,t])),typeof document<`u`&&(x(()=>{try{let e=sessionStorage.getItem(t||fs);e&&(ps=JSON.parse(e))}catch{}},[t]),x(()=>{let t=n?.enableScrollRestoration(ps,()=>window.scrollY,e?(t,n)=>ms(t,n,a,e):void 0);return()=>t&&t()},[n,a,e]),x(()=>{if(r!==!1){if(typeof r==`number`){window.scrollTo(0,r);return}try{if(o.hash){let e=document.getElementById(decodeURIComponent(o.hash.slice(1)));if(e){e.scrollIntoView();return}}}catch{W(!1,`"${o.hash.slice(1)}" is not a decodable element ID. The view will not scroll to it.`)}i!==!0&&window.scrollTo(0,0)}},[o,r,i]))}function gs(e,t){let{capture:n}=t||{};s(()=>{let t=n==null?void 0:{capture:n};return window.addEventListener(`pagehide`,e,t),()=>{window.removeEventListener(`pagehide`,e,t)}},[e,n])}function _s(e,{relative:t}={}){let n=v(_a);U(n!=null,"`useViewTransitionState` must be used within `react-router-dom`'s `RouterProvider`. Did you accidentally import `RouterProvider` from `react-router`?");let{basename:r}=is(`useViewTransitionState`),i=La(e,{relative:t});if(!n.isTransitioning)return!1;let a=Ki(n.currentLocation.pathname,r)||n.currentLocation.pathname,o=Ki(n.nextLocation.pathname,r)||n.nextLocation.pathname;return Hi(i.pathname,o)!=null||Hi(i.pathname,a)!=null}var vs=e(t(((e,t)=>{t.exports={area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0}}))()),ys=/\s([^'"/\s><]+?)[\s/>]|([^\s=]+)=\s?(".*?"|'.*?')/g;function bs(e){var t={type:`tag`,name:``,voidElement:!1,attrs:{},children:[]},n=e.match(/<\/?([^\s]+?)[/\s>]/);if(n&&(t.name=n[1],(vs.default[n[1]]||e.charAt(e.length-2)===`/`)&&(t.voidElement=!0),t.name.startsWith(`!--`))){var r=e.indexOf(`-->`);return{type:`comment`,comment:r===-1?``:e.slice(4,r)}}for(var i=new RegExp(ys),a=null;(a=i.exec(e))!==null;)if(a[0].trim())if(a[1]){var o=a[1].trim(),s=[o,``];o.indexOf(`=`)>-1&&(s=o.split(`=`)),t.attrs[s[0]]=s[1],i.lastIndex--}else a[2]&&(t.attrs[a[2]]=a[3].trim().substring(1,a[3].length-1));return t}var xs=/<[a-zA-Z0-9\-\!\/](?:"[^"]*"|'[^']*'|[^'">])*>/g,Ss=/^\s*$/,Cs=Object.create(null);function ws(e,t){switch(t.type){case`text`:return e+t.content;case`tag`:return e+=`<`+t.name+(t.attrs?function(e){var t=[];for(var n in e)t.push(n+`="`+e[n]+`"`);return t.length?` `+t.join(` `):``}(t.attrs):``)+(t.voidElement?`/>`:`>`),t.voidElement?e:e+t.children.reduce(ws,``)+`</`+t.name+`>`;case`comment`:return e+`<!--`+t.comment+`-->`}}var Ts={parse:function(e,t){t||={},t.components||=Cs;var n,r=[],i=[],a=-1,o=!1;if(e.indexOf(`<`)!==0){var s=e.indexOf(`<`);r.push({type:`text`,content:s===-1?e:e.substring(0,s)})}return e.replace(xs,function(s,c){if(o){if(s!==`</`+n.name+`>`)return;o=!1}var l,u=s.charAt(1)!==`/`,d=s.startsWith(`<!--`),f=c+s.length,p=e.charAt(f);if(d){var m=bs(s);return a<0?(r.push(m),r):((l=i[a]).children.push(m),r)}if(u&&(a++,(n=bs(s)).type===`tag`&&t.components[n.name]&&(n.type=`component`,o=!0),n.voidElement||o||!p||p===`<`||n.children.push({type:`text`,content:e.slice(f,e.indexOf(`<`,f))}),a===0&&r.push(n),(l=i[a-1])&&l.children.push(n),i[a]=n),(!u||n.voidElement)&&(a>-1&&(n.voidElement||n.name===s.slice(2,-1))&&(a--,n=a===-1?r:i[a]),!o&&p!==`<`&&p)){l=a===-1?r:i[a].children;var h=e.indexOf(`<`,f),g=e.slice(f,h===-1?void 0:h);Ss.test(g)&&(g=` `),(h>-1&&a+l.length>=0||g!==` `)&&l.push({type:`text`,content:g})}}),r},stringify:function(e){return e.reduce(function(e,t){return e+ws(``,t)},``)}};a();var Es=(e,t)=>{if(!e)return!1;let n=e.props?.children??e.children;return t?n.length>0:!!n},Ds=e=>{if(!e)return[];let t=e.props?.children??e.children;return e.props?.i18nIsDynamicList?ks(t):t},Os=e=>Array.isArray(e)&&e.every(k),ks=e=>Array.isArray(e)?e:[e],As=(e,t)=>{let n={...t};return n.props={...t.props,...e.props},n},js=e=>{let t={};if(!e)return t;let n=e=>{ks(e).forEach(e=>{ri(e)||(Es(e)?n(Ds(e)):ci(e)&&!k(e)&&Object.assign(t,e))})};return n(e),t},Ms=(e,t,n,r)=>{if(!e)return``;let i=``,a=ks(e),o=t?.transSupportBasicHtmlNodes?t.transKeepBasicHtmlNodesFor??[]:[];return a.forEach((e,a)=>{if(ri(e)){i+=`${e}`;return}if(k(e)){let{props:s,type:c}=e,l=Object.keys(s).length,u=o.indexOf(c)>-1,d=s.children;if(!d&&u&&!l){i+=`<${c}/>`;return}if(!d&&(!u||l)||s.i18nIsDynamicList){i+=`<${a}></${a}>`;return}if(u&&l<=1){let e=ri(d)?d:Ms(d,t,n,r);i+=`<${c}>${e}</${c}>`;return}let f=Ms(d,t,n,r);i+=`<${a}>${f}</${a}>`;return}if(e===null){ai(n,`TRANS_NULL_VALUE`,`Passed in a null value as child`,{i18nKey:r});return}if(ci(e)){let{format:t,...a}=e,o=Object.keys(a);if(o.length===1){let e=t?`${o[0]}, ${t}`:o[0];i+=`{{${e}}}`;return}ai(n,`TRANS_INVALID_OBJ`,`Invalid child - Object should only have keys {{ value, format }} (format is optional).`,{i18nKey:r,child:e});return}ai(n,`TRANS_INVALID_VAR`,`Passed in a variable like {number} - pass variables for interpolation as full objects like {{number}}.`,{i18nKey:r,child:e})}),i},Ns=(e,t=[],n={})=>{if(!e)return e;let r=Object.keys(n),i=[...t,...r],a=``,o=0;for(;o<e.length;)if(e[o]===`<`){let t=!1,n=e.slice(o).match(/^<\/(\d+|[a-zA-Z][a-zA-Z0-9_-]*)>/);if(n){let e=n[1];(/^\d+$/.test(e)||i.includes(e))&&(t=!0,a+=n[0],o+=n[0].length)}if(!t){let n=e.slice(o).match(/^<(\d+|[a-zA-Z][a-zA-Z0-9_-]*)(\s+[\w-]+(?:=(?:"[^"]*"|'[^']*'|[^\s>]+))?)*\s*(\/)?>/);if(n){let e=n[1];(/^\d+$/.test(e)||i.includes(e))&&(t=!0,a+=n[0],o+=n[0].length)}}t||(a+=`&lt;`,o+=1)}else a+=e[o],o+=1;return a},Ps=(e,t,n,r,i,a,o)=>{if(n===``)return[];let s=i.transKeepBasicHtmlNodesFor||[],u=n&&new RegExp(s.map(e=>`<${e}`).join(`|`)).test(n);if(!e&&!t&&!u&&!o)return[n];let d=t??{},f=e=>{ks(e).forEach(e=>{ri(e)||(Es(e)?f(Ds(e)):ci(e)&&!k(e)&&Object.assign(d,e))})};f(e);let p=Ns(n,s,d),m=Ts.parse(`<0>${p}</0>`),h={...d,...a},g=(e,t,n)=>{let r=Ds(e),i=v(r,t.children,n);return Os(r)&&i.length===0||e.props?.i18nIsDynamicList?r:i},_=(e,t,n,r,i)=>{e.dummy?(e.children=t,n.push(c(e,{key:r},i?void 0:t))):n.push(...l.map([e],e=>{if(e.type===b||e.props?.i18nIsDynamicList!==void 0){let n={key:r};return e&&e.props&&Object.keys(e.props).forEach(t=>{t===`children`||t===`i18nIsDynamicList`||(n[t]=e.props[t])}),A(e.type,n,i?null:t)}let n={key:r};return e&&e.props&&Object.keys(e.props).forEach(t=>{t===`ref`||t===`children`||(n[t]=e.props[t])}),c(e,n,i?null:t)}))},v=(e,n,a)=>{let c=ks(e),l=ks(n),d={};return l.reduce((e,n,l)=>{let f=n.children?.[0]?.content&&r.services.interpolator.interpolate(n.children[0].content,h,r.language);if(n.type===`tag`){let p=c[parseInt(n.name,10)];!p&&t&&(p=t[n.name]),a.length===1&&!p&&(p=a[0][n.name]),p||={};let m={...n.attrs};o&&Object.keys(m).forEach(e=>{let t=m[e];ri(t)&&(m[e]=si(t))});let y=Object.keys(m).length===0?p:As({props:m},p),b=k(y),x=b&&Es(n,!0)&&!n.voidElement,S=u&&ci(y)&&y.dummy&&!b,C=ci(t)&&Object.hasOwnProperty.call(t,n.name);if(ri(y)){let t=r.services.interpolator.interpolate(y,h,r.language);e.push(t)}else if(Es(y)||x)_(y,g(y,n,a),e,l);else if(S)_(y,v(c,n.children,a),e,l);else if(Number.isNaN(parseFloat(n.name)))if(C)_(y,g(y,n,a),e,l,n.voidElement);else if(i.transSupportBasicHtmlNodes&&s.indexOf(n.name)>-1)if(n.voidElement)e.push(A(n.name,{key:`${n.name}-${l}`}));else{let t=d[n.name]||0;d[n.name]=t+1;let r,i=0;for(let e=0;e<c.length;e+=1){let a=c[e];if(k(a)&&a.type===n.name){if(i===t){r=a;break}i+=1}}let o=v(r?ks(Ds(r)):c,n.children,a);e.push(A(n.name,{key:`${n.name}-${l}`},o))}else if(n.voidElement)e.push(`<${n.name} />`);else{let t=v(c,n.children,a);e.push(`<${n.name}>${t}</${n.name}>`)}else if(ci(y)&&!b){let t=n.children[0]?f:null;t&&e.push(t)}else _(y,f,e,l,n.children.length!==1||!f)}else if(n.type===`text`){let t=i.transWrapTextNodes,a=typeof i.unescape==`function`?i.unescape:ni().unescape,s=o?a(r.services.interpolator.interpolate(n.content,h,r.language)):r.services.interpolator.interpolate(n.content,h,r.language);t?e.push(A(t,{key:`${n.name}-${l}`},s)):e.push(s)}return e},[])};return Ds(v([{dummy:!0,children:e||[]}],m,ks(e||[]))[0])},Fs=(e,t,n)=>{let r=e.key||t,i=c(e,{key:r});if(!i.props||!i.props.children||n.indexOf(`${t}/>`)<0&&n.indexOf(`${t} />`)<0)return i;function a(){return A(b,null,i)}return A(a,{key:r})},Is=(e,t)=>e.map((e,n)=>Fs(e,n,t)),Ls=(e,t)=>{let n={};return Object.keys(e).forEach(r=>{Object.assign(n,{[r]:Fs(e[r],r,t)})}),n},Rs=(e,t,n,r)=>e?Array.isArray(e)?Is(e,t):ci(e)?Ls(e,t):(li(n,`TRANS_INVALID_COMPONENTS`,`<Trans /> "components" prop expects an object or array`,{i18nKey:r}),null):null,zs=e=>!ci(e)||Array.isArray(e)?!1:Object.keys(e).reduce((e,t)=>e&&Number.isNaN(Number.parseFloat(t)),!0);function Bs({children:e,count:t,parent:n,i18nKey:r,context:i,tOptions:a={},values:o,defaults:s,components:c,ns:l,i18n:u,t:d,shouldUnescape:f,...p}){let m=u||ii();if(!m)return li(m,`NO_I18NEXT_INSTANCE`,`Trans: You need to pass in an i18next instance using i18nextReactModule`,{i18nKey:r}),e;let h=d||m.t.bind(m)||(e=>e),g={...ni(),...m.options?.react},_=l||h.ns||m.options?.defaultNS;_=ri(_)?[_]:_||[`translation`];let{transDefaultProps:v}=g,y=v?.tOptions?{...v.tOptions,...a}:a,b=f??v?.shouldUnescape,x=v?.values?{...v.values,...o}:o,S=v?.components?{...v.components,...c}:c,C=Ms(e,g,m,r),w=s||y?.defaultValue||C||g.transEmptyNodeValue||(typeof r==`function`?ti(r):r),{hashTransKey:T}=g,E=r||(T?T(C||w):C||w);o=m.options?.interpolation?.defaultVariables?x&&Object.keys(x).length>0?{...x,...m.options.interpolation.defaultVariables}:{...m.options.interpolation.defaultVariables}:x;let D=js(e);D&&typeof D.count==`number`&&t===void 0&&(t=D.count);let O=o||t!==void 0&&!m.options?.interpolation?.alwaysFormat||!e?y.interpolation:{interpolation:{...y.interpolation,prefix:`#$?`,suffix:`?$#`}},k={...y,context:i||y.context,count:t,...o,...O,defaultValue:w,ns:_},j=E?h(E,k):w;j===E&&w&&(j=w);let M=Rs(S,j,m,r),N=M||e,P=null;zs(M)&&(P=M,N=e);let F=Ps(N,P,j,m,g,k,b),I=n??g.defaultTransParent;return I?A(I,p,F):F}a();function Vs({children:e,count:t,parent:n,i18nKey:r,context:i,tOptions:a={},values:o,defaults:s,components:c,ns:l,i18n:u,t:d,shouldUnescape:f,...p}){let{i18n:m,defaultNS:h}=v(oi)||{},g=u||m||ii(),_=d||g?.t.bind(g);return Bs({children:e,count:t,parent:n,i18nKey:r,context:i,tOptions:a,values:o,defaults:s,components:c,ns:l||_?.ns||h||g?.options?.defaultNS,i18n:g,t:d,shouldUnescape:f,...p})}function Hs(e,t){return t.map(t=>({subject:{kind:`device`,deviceId:e},key:t.key,scope:t.scope}))}function Us({deviceId:e}){let{t}=H(),{presence:n,list:r}=Pr(e);return n===`absent`?null:n===`unknown`?P(Cn,{message:t(`deviceQuickDetail.historyUnknown`,`Could not tell whether this device has recorded history.`)}):n===`pending`||r.status===`pending`?P(wr,{className:`h-24 w-full`,"aria-busy":`true`}):r.status===`error`?P(Cn,{title:t(`deviceQuickDetail.historyUnknown`,`Could not tell whether this device has recorded history.`),message:r.error}):r.data.length===0?null:y(`section`,{className:`flex flex-col gap-2`,"aria-label":t(`deviceQuickDetail.tabHistory`,`History`),children:[P(`div`,{className:`flex justify-end`,children:P($o,{to:Yr(Hs(e,r.data)),className:`text-xs text-primary hover:underline`,children:t(`deviceQuickDetail.openHistory`,`Open full history`)})}),P(Tr,{deviceId:e})]})}function Ws(e,t){return e===`present`&&t.status===`ok`&&(t.data?.length??0)>0}var Gs={streaming:{icon:mn,labelKey:`capabilityBadges.streaming`},detection:{icon:pe,labelKey:`capabilityBadges.detection`},recording:{icon:ke,labelKey:`capabilityBadges.recording`},audio:{icon:ye,labelKey:`capabilityBadges.audio`},snapshot:{icon:L,labelKey:`capabilityBadges.snapshot`},motion:{icon:Xe,labelKey:`capabilityBadges.motion`},ptz:{icon:Ye,labelKey:`capabilityBadges.ptz`},webrtc:{icon:$e,labelKey:`capabilityBadges.webrtc`},onvif:{icon:we,labelKey:`capabilityBadges.onvif`},analytics:{icon:be,labelKey:`capabilityBadges.analytics`},"battery-operated":{icon:_e,labelKey:`capabilityBadges.battery`},"native-snapshot":{icon:L,labelKey:`capabilityBadges.nativeSnapshot`},"pan-tilt-zoom":{icon:Ye,labelKey:`capabilityBadges.ptz`},"two-way-audio":{icon:ye,labelKey:`capabilityBadges.twoWayAudio`},"doorbell-button":{icon:se,labelKey:`capabilityBadges.doorbell`},rebootable:{icon:Ee,labelKey:`capabilityBadges.rebootable`},"vacuum-has-map":{icon:un,labelKey:`capabilityBadges.map`},"vacuum-has-ai":{icon:Se,labelKey:`capabilityBadges.aiObstacle`},"mower-has-map":{icon:un,labelKey:`capabilityBadges.map`},"mower-has-targeted-mowing":{icon:ne,labelKey:`capabilityBadges.targetedMowing`}},Ks=Fe;function qs({capabilities:e,showLabels:t=!1}){let{t:n}=H();return P(`div`,{className:`flex items-center gap-1 flex-wrap`,children:e.map(e=>{let r=Gs[e],i=r?.icon??Ks,a=r?n(r.labelKey):e;return y(`span`,{className:`inline-flex items-center gap-1 rounded-md bg-surface-hover px-1.5 py-0.5 text-[10px] text-foreground-subtle`,title:a,children:[P(i,{className:`h-3 w-3`}),t&&P(`span`,{children:a})]},e)})})}a();var Js={amcrest:{icon:cn,color:`#3b82f6`,label:`Amcrest`},hikvision:{icon:De,color:`#a855f7`,label:`Hikvision`},reolink:{icon:$e,color:`#06b6d4`,label:`Reolink`},homeassistant:{icon:Ze,color:`#22d3ee`,label:`Home Assistant`},rtsp:{icon:Ne,color:`#78716c`,label:`RTSP`},onvif:{icon:Ne,color:`#78716c`,label:`ONVIF`}},Ys={sm:`h-4 w-4`,md:`h-5 w-5`,lg:`h-6 w-6`},Xs={sm:`h-7 w-7`,md:`h-8 w-8`,lg:`h-10 w-10`};function Zs(e){let t=e.toLowerCase();return t.startsWith(`provider-`)?t.slice(9):t}function Qs(e){return Js[Zs(e)]??{icon:cn,color:`#78716c`,label:e}}function $s({type:e,size:t=`md`,showLabel:n}){let r=Qs(e),i=r.icon,[a,o]=f(!1),s=ui(e);return y(`div`,{className:`flex items-center gap-2`,children:[P(`div`,{className:`flex items-center justify-center rounded-lg ${Xs[t]}`,style:{backgroundColor:`${r.color}15`},children:a||!s?P(i,{className:Ys[t],style:{color:r.color}}):P(`img`,{src:s,alt:r.label,className:Ys[t],onError:()=>o(!0)})}),n&&P(`span`,{className:`text-xs font-medium text-foreground-subtle`,children:r.label})]})}function ec({label:e,value:t,layout:n=`inline`}){return n===`stacked`?y(`div`,{className:`min-w-0 flex flex-col gap-0.5 px-0.5`,children:[P(`span`,{className:`text-[11px] text-foreground-subtle`,children:e}),P(`div`,{className:`min-w-0 text-[11px] text-foreground`,children:t})]}):y(`div`,{className:`${he} flex items-start gap-2 sm:gap-3`,children:[P(`span`,{className:`w-20 sm:w-28 flex-shrink-0 text-[11px] text-foreground-subtle`,children:e}),P(`div`,{className:`flex-1 min-w-0 text-[11px] text-foreground`,children:t})]})}a();function tc(e){return Gr({addonId:e,projection:`slim`})}function nc(e){return Mr({deviceId:e},{enabled:Number.isFinite(e)})}var rc=3e4,ic=2e3;function ac(e){let t=M(0);return t.current===0&&(t.current=Date.now()),xr({parentDeviceId:e},{enabled:Number.isFinite(e),staleTime:0,refetchOnMount:`always`,refetchInterval:e=>{let n=e.state.data;return n&&n.length>0||Date.now()-t.current>=rc?!1:ic}})}a();function oc({deviceId:e}){let{t}=H(),n=j(),{data:r}=nc(e),{data:i}=ac(e),[a,o]=f(null),s=Rn({onSuccess:()=>{o(null),n.invalidateQueries({queryKey:[[`deviceManager`]]})},onError:e=>{o(`Could not change primary child: ${e.message}`)}});if(r==null||String(r.type??``)!==yt.Container)return null;let c=(i??[]).map(e=>({id:e.id,stableId:e.stableId,type:e.type,name:e.name,...e.sourceInfo?{sourceInfo:{id:e.sourceInfo.id}}:{}}));if(c.length<=1)return null;let l=En(c,typeof r.linkDeviceId==`number`?r.linkDeviceId:null,typeof r.primaryChildEntityId==`string`?r.primaryChildEntityId:null),u=l===null?c[0].id:l.id;return y(E,{children:[P(ec,{label:t(`shared.primaryChildRow.primaryChild`,`Primary child`),value:P(Xn,{childrenList:c,selectedId:u,onSetPrimary:t=>s.mutate({deviceId:e,primaryChildEntityId:t}),disabled:s.isPending})}),a!==null&&P(`p`,{role:`alert`,className:`px-3 sm:px-4 py-1.5 text-[11px] text-danger`,children:a})]})}a();var sc=[`manufacturer`,`model`,`hardware`,`firmware`,`serialNumber`,`uid`,`mac`,`itemNo`];function cc(e){return e.replace(/([a-z])([A-Z])/g,`$1 $2`).replace(/^./,e=>e.toUpperCase())}function lc(e){return e==null?`—`:typeof e==`string`||typeof e==`number`||typeof e==`boolean`?String(e):JSON.stringify(e)}function uc(){let{t:e}=H(),t=Zr(),n=_n(),{data:r}=Mr({deviceId:t??0},{enabled:t!==null}),{data:i}=Rr({deviceId:t??0},{enabled:t!==null}),a=r??n??null,[o,s]=f(`identity`);if(t===null||!a)return null;let c=String(a.stableId??``),l=String(a.addonId??``),u=typeof a.integrationId==`string`&&a.integrationId.length>0?a.integrationId:null,d=typeof a.parentDeviceId==`number`?a.parentDeviceId:null,p=a.features??[],m=new Set([`device-status`,`feature-probe`,`device-ops`]),h=(i?.entries??[]).filter(e=>e.kind===`native`&&!m.has(e.capName)).map(e=>e.capName),g=p.length>0?p:h,_=a.metadata??null,v=_!==null&&Object.keys(_).length>0;return y(`div`,{className:`rounded-lg border border-border bg-surface overflow-hidden`,children:[y(`div`,{className:`border-b border-border px-3 sm:px-4 py-2 flex items-center justify-between gap-3`,children:[P(`h2`,{className:`text-[11px] font-semibold text-foreground uppercase tracking-wider`,children:e(`overviewAdapters.deviceInfoAdapter.deviceInfo`,`Device Info`)}),v&&y(`div`,{className:`flex items-center gap-1 rounded-md bg-surface-hover p-0.5`,children:[P(dc,{active:o===`identity`,onClick:()=>s(`identity`),label:e(`overviewAdapters.deviceInfoAdapter.identity`,`Identity`)}),P(dc,{active:o===`hardware`,onClick:()=>s(`hardware`),label:e(`overviewAdapters.deviceInfoAdapter.hardware`,`Hardware`)})]})]}),(!v||o===`identity`)&&y(`div`,{className:`divide-y divide-border`,children:[P(ec,{label:`ID`,value:y(`span`,{className:`font-mono text-[11px] text-foreground`,children:[`#${t}`,y(`span`,{className:`ml-1.5 text-foreground-subtle`,children:[`(`,c,`)`]})]})}),P(oc,{deviceId:t}),u!==null&&P(ec,{label:e(`overviewAdapters.deviceInfoAdapter.integration`,`Integration`),value:P(`span`,{className:`font-mono text-[11px]`,children:u})}),d!==null&&P(ec,{label:e(`overviewAdapters.deviceInfoAdapter.parent`,`Parent`),value:P(`span`,{className:`font-mono text-[11px]`,children:`#${String(d)}`})}),P(ec,{label:e(`overviewAdapters.deviceInfoAdapter.provider`,`Provider`),value:P($s,{type:l,size:`sm`,showLabel:!0})}),P(ec,{label:e(`overviewAdapters.deviceInfoAdapter.capabilities`,`Capabilities`),value:g.length>0?P(qs,{capabilities:g,showLabels:!0}):P(`span`,{className:`text-[11px] text-foreground-subtle`,children:e(`overviewAdapters.deviceInfoAdapter.none`,`None`)})})]}),v&&o===`hardware`&&P(fc,{metadata:_})]})}function dc({active:e,onClick:t,label:n}){return P(`button`,{type:`button`,onClick:t,className:`px-2 py-0.5 rounded text-[10px] font-medium transition-colors ${e?`bg-surface text-foreground shadow-sm`:`text-foreground-subtle hover:text-foreground`}`,children:n})}function fc({metadata:e}){let{t}=H(),n=sc.filter(t=>t in e),r=Object.keys(e).filter(e=>!sc.includes(e)).toSorted(),i=[...n,...r];return y(`div`,{children:[P(`div`,{className:`px-3 sm:px-4 py-1.5 text-[10px] text-foreground-subtle border-b border-border bg-surface-subtle/40`,children:t(`overviewAdapters.deviceInfoAdapter.autoPopulatedByTheDriver`,`Auto-populated by the driver on every connect. Read-only.`)}),P(`div`,{className:`divide-y divide-border`,children:i.map(t=>P(ec,{label:cc(t),value:P(`span`,{className:`font-mono text-[11px] text-foreground break-all`,children:lc(e[t])})},t))})]})}function pc(e,t){return e.icon===t.icon&&e.label===t.label&&e.unit===t.unit&&e.precision===t.precision&&e.hidden===t.hidden}function mc(e){return{icon:e?.icon??``,label:e?.label??``,unit:e?.unit??``,precision:e?.precision===void 0?``:String(e.precision),hidden:e?.hidden===!0}}function hc(e){if(e.trim()===``)return;let t=Number.parseInt(e,10);return Number.isFinite(t)?t:void 0}function gc(e,t){let n=hc(e.precision),r={...e.icon===``?{}:{icon:e.icon},...e.label.trim()===``?{}:{label:e.label.trim()},...e.unit===``?{}:{unit:e.unit},...n===void 0?{}:{precision:n},...e.hidden?{hidden:!0}:{},...t?.perCap===void 0?{}:{perCap:t.perCap}};return Object.keys(r).length===0?null:r}function _c(e){let t=mc(e.display);return{name:e.name,location:e.location,role:e.role,display:t,baseName:e.name,baseLocation:e.location,baseRole:e.role,baseDisplay:t,persistedDisplay:e.display}}function vc(e,t){if(e===null)return _c(t);let n=mc(t.display),r=e.name===t.name&&e.location===t.location&&e.role===t.role&&pc(e.display,n);return!yc(e)||r?_c(t):e}function yc(e){return e===null?!1:e.name!==e.baseName||e.location!==e.baseLocation||e.role!==e.baseRole||!pc(e.display,e.baseDisplay)}function bc(e){return e.name.trim().length===0?`name`:null}function xc(e){let t=e.name.trim(),n=e.location.trim();return{...t===e.baseName?{}:{name:t},...n===e.baseLocation?{}:{location:n===``?null:n},...e.role===e.baseRole?{}:{role:e.role},...pc(e.display,e.baseDisplay)?{}:{display:gc(e.display,e.persistedDisplay)}}}function Sc(e){let t=e.map(e=>e.error).filter(e=>e!==null&&e.length>0);return{dirty:e.some(e=>e.dirty),saving:e.some(e=>e.saving),error:t.length===0?null:t.join(`; `)}}a();var Cc=g(null);function wc(){return v(Cc)}function Tc({deviceId:e,seed:t,showOpenFull:n=!1,onClose:r,children:i}){let[a,o]=f(null),[s,c]=f([]),l=M(new Map);if(t!==null){let e=vc(a,t);(a===null||e.name!==a.name||e.location!==a.location||e.role!==a.role||!pc(e.display,a.display)||e.baseName!==a.baseName||e.baseLocation!==a.baseLocation||e.baseRole!==a.baseRole||!pc(e.baseDisplay,a.baseDisplay)||e.persistedDisplay!==a.persistedDisplay)&&o(e)}let u=p(e=>(l.current.set(e.id,{save:e.save,discard:e.discard}),c(t=>{let n=t.find(t=>t.id===e.id);return n!==void 0&&n.dirty===e.dirty&&n.saving===e.saving&&n.error===e.error?t:[...t.filter(t=>t.id!==e.id),{...e,save:()=>l.current.get(e.id)?.save()??Promise.resolve(),discard:()=>{l.current.get(e.id)?.discard()}}]}),()=>{l.current.delete(e.id),c(t=>t.filter(t=>t.id!==e.id))}),[]),m=d(()=>({identity:a,setIdentityName:e=>{o(t=>t===null?t:{...t,name:e})},setIdentityLocation:e=>{o(t=>t===null?t:{...t,location:e})},setIdentityRole:e=>{o(t=>t===null?t:{...t,role:e})},setIdentityDisplay:e=>{o(t=>t===null?t:{...t,display:{...t.display,...e}})},register:u}),[a,u]);return P(Cc.Provider,{value:m,children:P(Ec,{deviceId:e,identity:a,contributions:s,onIdentitySaved:e=>o(e),showOpenFull:n,onClose:r,children:i})})}function Ec({deviceId:e,identity:t,contributions:n,onIdentitySaved:r,showOpenFull:i,onClose:a,children:o}){return y(E,{children:[o,P(Oc,{deviceId:e,identity:t,contributions:n,onIdentitySaved:r,showOpenFull:i,onClose:a})]})}function Dc(e){return e instanceof Error?e.message:String(e)}function Oc({deviceId:e,identity:t,contributions:n,onIdentitySaved:r,showOpenFull:i,onClose:a}){let{t:o}=H(),s=Ma(),c=Yn(),l=j(),[u,d]=f(null),[p,m]=f(!1),h=Sr(),g=xn(),_=zn(),v=Sn(),b=Sc([{dirty:yc(t),saving:p,error:u},...n]),x=()=>{l.invalidateQueries({queryKey:[[`deviceManager`]]})};return y(`div`,{className:`sticky bottom-0 z-10 mt-3 flex flex-col gap-2 border-t border-border bg-background px-1 pt-3`,children:[b.error!==null&&P(`p`,{className:`text-xs text-danger`,children:b.error}),y(`div`,{className:`flex flex-wrap items-center justify-between gap-2`,children:[i?P(Tn,{type:`button`,variant:`outline`,size:`sm`,onClick:()=>{(async()=>{b.dirty&&!await c({title:o(`deviceQuickDetail.leaveTitle`,`Discard unsaved changes?`),message:o(`deviceQuickDetail.leaveMessage`,`Unsaved edits on this device will be discarded.`),confirmLabel:o(`deviceQuickDetail.discard`,`Discard`),variant:`warning`})||(s(`/devices/${String(e)}?tab=customize`),a?.())})()},children:o(`deviceQuickDetail.openFull`,`Open full detail`)}):P(`span`,{}),y(`div`,{className:`flex items-center gap-2`,children:[P(Tn,{type:`button`,variant:`outline`,size:`sm`,onClick:()=>{t!==null&&r({...t,name:t.baseName,location:t.baseLocation,role:t.baseRole,display:t.baseDisplay});for(let e of n)e.discard();d(null)},disabled:!b.dirty||b.saving,children:o(`deviceQuickDetail.discard`,`Discard`)}),P(Tn,{type:`button`,size:`sm`,onClick:()=>{if(t!==null&&yc(t)&&bc(t)===`name`){d(o(`deviceQuickDetail.nameRequired`,`Name is required`));return}d(null),m(!0),(async()=>{try{let i=t===null?{}:xc(t);if(t!==null&&i.name!==void 0&&await h.mutateAsync({deviceId:e,name:i.name}),t!==null&&i.location!==void 0&&await g.mutateAsync({deviceId:e,location:i.location}),t!==null&&i.role!==void 0&&await _.mutateAsync({deviceId:e,role:i.role}),t!==null&&i.display!==void 0&&await v.mutateAsync({deviceId:e,display:i.display}),t!==null){let e=t.name.trim(),n=t.location.trim();r({...t,name:e,location:n,baseName:e,baseLocation:n,baseRole:t.role,baseDisplay:t.display,persistedDisplay:i.display===void 0?t.persistedDisplay:i.display??void 0})}for(let e of n)e.dirty&&await e.save();x()}catch(e){d(Dc(e))}finally{m(!1)}})()},disabled:!b.dirty||b.saving,children:b.saving?o(`deviceQuickDetail.saving`,`Saving…`):o(`deviceQuickDetail.save`,`Save`)})]})]})]})}function kc(e){return e.hubReachable?e.authOk===!1?{kind:`auth-expired`}:{kind:`cluster-degraded`,offlineAgents:e.offlineAgents,offlineAgentIds:e.offlineAgentIds}:{kind:`hub-unreachable`}}function Ac(e){switch(e.kind){case`connected`:return null;case`reconnecting`:return{severity:`warning`,message:V.t(`connection.reconnecting`),i18nKey:`connection.reconnecting`,showSpinner:!0};case`cluster-degraded`:{let t=e.offlineAgentIds??[];return t.length>0?{severity:`warning`,message:V.t(`connection.degradedNodes`,{nodes:t.join(`, `),count:t.length}),i18nKey:`connection.degradedNodes`,i18nParams:{nodes:t.join(`, `),count:t.length},showSpinner:!0}:e.offlineAgents!==null&&e.offlineAgents>0?{severity:`warning`,message:V.t(`connection.degradedCount`,{count:e.offlineAgents}),i18nKey:`connection.degradedCount`,i18nParams:{count:e.offlineAgents},showSpinner:!0}:{severity:`warning`,message:V.t(`connection.degraded`),i18nKey:`connection.degraded`,showSpinner:!0}}case`hub-unreachable`:return{severity:`danger`,message:V.t(`connection.disconnected`),i18nKey:`connection.disconnected`,showSpinner:!0};case`auth-expired`:return{severity:`danger`,message:V.t(`connection.sessionExpired`),i18nKey:`connection.sessionExpired`,showSpinner:!1,action:`sign-in`}}}var jc=4e3,Mc=5e3;function Nc(e){if(typeof e!=`object`||!e)return{offline:null,offlineIds:null,ok:null};let t={...e},n=typeof t.ok==`boolean`?t.ok:null,r=t.agents;if(typeof r!=`object`||!r)return{offline:null,offlineIds:null,ok:n};let i={...r},a=i.offline,o=typeof a==`number`?a:null,s=i.offlineIds;return{offline:o,offlineIds:Array.isArray(s)?s.filter(e=>typeof e==`string`):null,ok:n}}async function Pc(e,t,n,r){let i=new AbortController,a=setTimeout(()=>i.abort(),n);try{return await e(t,{method:`GET`,signal:i.signal,credentials:`omit`,...r===void 0?{}:{headers:r}})}finally{clearTimeout(a)}}async function Fc(e){let t=e.fetchFn??fetch,n=e.timeoutMs??jc,r=e.origin.replace(/\/+$/,``),i;try{i=await Pc(t,`${r}/health`,n)}catch{return{hubReachable:!1,authOk:`unknown`,offlineAgents:null,offlineAgentIds:null}}if(!i.ok)return{hubReachable:!1,authOk:`unknown`,offlineAgents:null,offlineAgentIds:null};let a=null,o=e.getToken();if(o!==null&&o!==``)try{let e=await Pc(t,`${r}/health/details`,n,{Authorization:`Bearer ${o}`});e.ok&&(a=await e.json())}catch{}let s;try{s=Nc(a??await i.json())}catch{s={offline:null,offlineIds:null,ok:null}}if(s.ok===!1)return{hubReachable:!1,authOk:`unknown`,offlineAgents:null,offlineAgentIds:null};let c=e.getToken(),l=`unknown`;if(c!==null&&c!==``)try{let e=await Pc(t,`${r}/trpc/auth.me`,n,{Authorization:`Bearer ${c}`});e.status===401||e.status===403?l=!1:e.ok&&(l=!0)}catch{l=`unknown`}return{hubReachable:!0,authOk:l,offlineAgents:s.offline,offlineAgentIds:s.offlineIds}}var Ic={kind:`connected`},Lc={kind:`reconnecting`};function Rc(e){let t=e.probeIntervalMs??Mc,n=new Set,r=Ic,i=0,a=!1,o=null;function s(e){if(r!==e){r=e;for(let e of n)e()}}function c(){a=!1,o!==null&&(clearTimeout(o),o=null)}function l(){let n=i;e.probe().then(e=>{n!==i||!a||(s(kc(e)),o=setTimeout(l,t))},()=>{n!==i||!a||(s({kind:`hub-unreachable`}),o=setTimeout(l,t))})}function u(e){if(i+=1,e===`connected`){c(),s(Ic);return}if(e===`connecting`){c(),s(Lc);return}(r.kind===`connected`||r.kind===`reconnecting`)&&s(Lc),o!==null&&(clearTimeout(o),o=null),a=!0,l()}return{getSnapshot:()=>r,subscribe:e=>(n.add(e),()=>{n.delete(e)}),onSdkConnectionState:u,dispose:()=>{i+=1,c(),n.clear()}}}var zc=null;function Bc(){return zc===null&&(zc=Rc({probe:()=>Fc({origin:xe(),getToken:()=>localStorage.getItem(`camstack_admin_token`)})})),zc}function Vc(e){Bc().onSdkConnectionState(e)}var Hc=null,Uc=0;function Z(){if(!Hc){let e=Uc;Hc=Vr({serverUrl:xe(),token:localStorage.getItem(`camstack_admin_token`)??void 0,getLanguage:()=>V.language,refreshCredential:async e=>{e===`rejected`?await ol().refreshNow():await ol().ensureFresh()},onConnectionChange:t=>{e===Uc&&Vc(t)}})}return Hc}function Wc(){let e=Hc;Hc=null,Uc+=1,e?.close()}var Gc=`camstack_admin_token`,Kc=`camstack_admin_refresh`,qc=`camstack_admin_token_expires`;function Jc(e){try{let t=localStorage.getItem(e);return t!==null&&t.length>0?t:null}catch{return null}}function Yc(e,t){try{t===null?localStorage.removeItem(e):localStorage.setItem(e,t)}catch{}}function Xc(){let e=Jc(Gc);if(e===null)return null;let t=Jc(Kc),n=Number(Jc(qc));return{token:e,...t===null?{}:{refreshToken:t},...Number.isFinite(n)&&n>0?{expiresAt:n}:{}}}function Zc(e){Yc(Gc,e.token),Yc(Kc,e.refreshToken??null),Yc(qc,e.expiresAt===void 0?null:String(e.expiresAt))}function Qc(){Yc(Gc,null),Yc(Kc,null),Yc(qc,null)}function $c(e){let t=e.get(`token`);if(t===null||t.length===0)return null;let n=e.get(`refreshToken`),r=Number(e.get(`expiresAt`));return{token:t,...n!==null&&n.length>0?{refreshToken:n}:{},...Number.isFinite(r)&&r>0?{expiresAt:r}:{}}}async function el(e){await fetch(z(`/api/auth/session`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({token:e})}).catch(()=>{})}var tl=new Set;function nl(e){return tl.add(e),()=>tl.delete(e)}var rl=new Set;function il(e){return rl.add(e),()=>rl.delete(e)}var al=null;function ol(){return al===null&&(al=new sr({refresh:async e=>{let t=Xc();if(t?.refreshToken!==void 0&&t.refreshToken!==e&&(t.expiresAt??0)>Date.now()+6e4)return t;let n=await Z().refreshSession(e);return{token:n.token,refreshToken:n.refreshToken,expiresAt:n.expiresAt}},onTokens:e=>{Zc(e),Z().setToken(e.token),el(e.token);for(let e of rl)e()},onExpired:()=>{Qc();for(let e of tl)e()}})),al}function sl(e){Zc(e),ol().adopt(e)}async function cl(e){try{await ol().ensureFresh()}catch(e){console.warn(`[admin-session] pre-reconnect refresh failed; reconnecting anyway`,e)}e()}async function ll(){return await ol().refreshNow()!==null}var ul=512;function dl(e){if(!e||e.length>ul)return null;let t=Rt(e);return t===null?!e.startsWith(`/`)||e.startsWith(`//`)||e.includes(`\\`)||e.includes(`://`)||e.includes(`..`)||e===`/login`||e.startsWith(`/login?`)||e.startsWith(`/login/`)?null:{kind:`path`,path:e}:{kind:`app-callback`,url:t}}var fl=/^[A-Za-z0-9_-]{43,128}$/,pl=/^[A-Za-z0-9._~-]{1,256}$/;function ml(e){let{codeChallenge:t,state:n}=e;return!t||!fl.test(t)||(e.codeChallengeMethod??`S256`)!==`S256`||!n||!pl.test(n)?null:{codeChallenge:t,state:n,purpose:e.purpose===`step-up`?`step-up`:`new-session`}}var hl=`camstack:login-app-handoff`;function gl(e){if(!e)return null;try{let t=JSON.parse(e);if(typeof t!=`object`||!t)return null;let n=e=>{let n=Reflect.get(t,e);return typeof n==`string`?n:null};return ml({codeChallenge:n(`codeChallenge`),state:n(`state`),purpose:n(`purpose`)})}catch{return null}}function _l(e,t=Date.now()){e!==null&&kl(hl,JSON.stringify(e),gl,t)}function vl(e=Date.now()){return Al(hl,gl,e)}function yl(e,t,n){return`${e}?${`code=${encodeURIComponent(t)}`}${n===void 0?``:`&state=${encodeURIComponent(n)}`}`}function bl(e,t=Date.now()){return Nl(t)??dl(e)}var xl=2048;function Sl(e){return!e||e.length>xl||!e.startsWith(`/`)||e.startsWith(`//`)||e.includes(`\\`)||e.includes(`://`)||e.includes(`..`)||e===`/login`||e.startsWith(`/login?`)||e.startsWith(`/login/`)?null:e}function Cl(e,t=Date.now()){kl(Dl,e,Sl,t)}function wl(e=Date.now()){return Al(Dl,Sl,e)}function Tl(e,t=Date.now()){return wl(t)??Sl(e)}var El=`camstack:login-redirect`,Dl=`camstack:login-next`,Ol=10*6e4;function kl(e,t,n,r){let i=jl();if(!i||!n(t))return;let a={raw:t??``,at:r};try{i.setItem(e,JSON.stringify(a))}catch{}}function Al(e,t,n){let r=jl();if(!r)return null;let i=null;try{i=r.getItem(e),r.removeItem(e)}catch{return null}if(!i)return null;try{let e=JSON.parse(i);if(typeof e!=`object`||!e)return null;let r=Reflect.get(e,`at`),a=Reflect.get(e,`raw`);return typeof r!=`number`||typeof a!=`string`||n-r>Ol?null:t(a)}catch{return null}}function jl(){if(typeof window>`u`)return null;try{return window.sessionStorage}catch{return null}}function Ml(e,t=Date.now()){kl(El,e,dl,t)}function Nl(e=Date.now()){return Al(El,dl,e)}var Pl=`changeme`;function Fl(e){try{let t=e.split(`.`);if(t.length<2||!t[1])return null;let n=JSON.parse(atob(t[1]));return{id:String(n.userId??``),username:String(n.username??`unknown`),isAdmin:!!n.isAdmin,exp:Number(n.exp??0),scopes:Il(n.scopes)}}catch{return null}}function Il(e){return Ft(kt(e))}function Ll(e){let t=Fl(e);return t?t.exp*1e3<Date.now():!0}a();var Rl=Pl;function zl(e){return{token:e.token,...e.refreshToken===void 0?{}:{refreshToken:e.refreshToken},...e.expiresAt===void 0?{}:{expiresAt:e.expiresAt}}}async function Bl(e,t){if(await el(e),t.kind===`path`){window.location.replace(z(t.path));return}try{Wc();let e=vl();if(e===null)throw Error(`The app sent no PKCE challenge and state`);let{code:n}=await Z().trpcClient.auth.createHandoffCode.mutate({purpose:e.purpose,codeChallenge:e.codeChallenge,state:e.state});window.location.replace(yl(t.url,n,e.state))}catch{window.location.replace(z(`/`))}}async function Vl(e,t){await el(e),window.location.replace(z(t))}var Hl=g(null);function Ul({children:e}){let[t,n]=f(null),[r,i]=f(!0),[a,o]=f(!1);s(()=>{if(typeof window<`u`&&window.location.hash.startsWith(`#token=`)){let e=new URLSearchParams(window.location.hash.slice(1)),t=$c(e),n=t?.token??null;if(t!==null&&n!==null){sl(t);let r=Nl();if(r){Bl(n,r);return}let i=wl()??Sl(e.get(`next`));if(i){Vl(n,i);return}window.history.replaceState({},``,z(`/`))}}c()},[]);let c=async()=>{let e=Xc();if(e===null){i(!1);return}let t=e.token;if(e.refreshToken!==void 0){let n=ol();n.adopt(e),await n.ensureFresh();let r=Xc();if(r===null){console.warn(`[auth] session restore: signed out — the hub refused the refresh token`),Wc(),i(!1);return}t=r.token}if(Ll(t)){console.warn(`[auth] session restore: signed out — access token expired and no refresh recovered it`),Qc(),Wc(),i(!1);return}let r=Fl(t);if(!r){console.warn(`[auth] session restore: signed out — the stored access token is unreadable`),Qc(),Wc(),i(!1);return}el(t);let a=Z();a.trpcClient.system.info.query().then(()=>n(r)).catch(async e=>{let t=e?.data?.code;if(t===`UNAUTHORIZED`||t===`FORBIDDEN`){if(await ll()){a.reconnect();try{await Z().trpcClient.system.info.query();let e=Xc();n(e&&Fl(e.token)||r);return}catch{}}console.warn(`[auth] session restore: logout, probe UNAUTHORIZED and refresh did not recover it`),ol().stop(),Qc(),Wc()}else n(r)}).finally(()=>i(!1))};s(()=>nl(()=>{Wc(),n(null),o(!1)}),[]);let l=p(async(e,t)=>{let r=await Z().login(e,t,{refreshable:!0}),i=r.secondFactors??(r.requiresTotp===!0?[`totp`]:[]);if(i.length>0)return{kind:`second-factor`,challengeToken:r.token,factors:i};let a=r.token;return sl(zl(r)),await el(a),Wc(),n(Fl(a)),o(t===Rl),{kind:`ok`}},[]),u=p(async(e,t)=>{let r=await Z().loginVerifyTotp(e,t,{refreshable:!0}),i=r.token;sl(zl(r)),await el(i),Wc(),n(Fl(i)),o(!1)},[]),d=p(async(e,t)=>{sl({token:e,...t}),await el(e),Wc(),n(Fl(e)),o(!1)},[]),m=p(()=>{Z().logout().catch(()=>{}),ol().stop(),Qc(),fetch(z(`/api/auth/session`),{method:`DELETE`}).catch(()=>{}),Wc(),n(null),o(!1)},[]),h=p(()=>{o(!1)},[]);return P(Hl.Provider,{value:{user:t,loading:r,mustChangePassword:a,login:l,verifyTotp:u,finalizePasskeyLogin:d,logout:m,clearMustChangePassword:h},children:e})}function Wl(){let e=v(Hl);if(!e)throw Error(`useAuth must be used within AuthProvider`);return e}a();function Gl(e,t){for(let n of e)for(let e of n.fields){if(!(`key`in e)||e.key!==t)continue;if(e.type===`button`||e.type===`separator`||e.type===`info`)return!0;let r=e.immediate;return r===!0?!0:r===!1?!1:n.immediate===!0}return!1}function Kl({schema:e,serverValues:t,onImmediateSave:n,onDeferredSave:r}){let[i,a]=f({}),[o,c]=f({}),[l,u]=f(!1),m=M(null),h=e?.sections??[],g=Object.keys(i).length>0,_=d(()=>({...t,...o,...i}),[t,o,i]);s(()=>{if(g||Object.keys(o).length>0){u(!0);return}m.current&&clearTimeout(m.current),m.current=setTimeout(()=>u(!1),500)},[g,o]),s(()=>()=>{m.current&&clearTimeout(m.current)},[]);let v=p(()=>{u(!0),m.current&&clearTimeout(m.current),m.current=setTimeout(()=>u(!1),2e3)},[]),y=p(e=>{v();let r={},o={},s={...t,...i};for(let[t,n]of Object.entries(e))s[t]!==n&&(Gl(h,t)?r[t]=n:o[t]=n);Object.keys(r).length>0&&n(r),a(e=>{let t={...e};for(let e of Object.keys(r))delete t[e];for(let[e,n]of Object.entries(o))t[e]=n;return t})},[v,t,i,h,n]),b=p(e=>{let t={},n={};for(let[r,a]of Object.entries(i))e.includes(r)?t[r]=a:n[r]=a;if(a(n),Object.keys(t).length===0)return;let o=Object.keys(t),s=r(t);if(s===void 0||typeof s.then!=`function`)return;c(e=>({...e,...t}));let l=()=>c(e=>{let t={...e};for(let e of o)delete t[e];return t});s.then(l,()=>{l(),a(e=>{let n={...e};for(let e of o)e in n||(n[e]=t[e]);return n})})},[i,r]),x=p(e=>{a(t=>{let n={...t};for(let t of e)delete n[t];return n})},[]),S=p(()=>{a({})},[]);return{values:_,pendingKeys:Object.keys(i),hasPendingEdits:g,editingPaused:l,handleChange:y,handleSave:b,handleDiscard:x,resetAll:S}}function Q(e){return t=>Object.prototype.hasOwnProperty.call(e,t)}var ql=Q({devices:!0}),Jl=Q({classes:!0,classesExclude:!0,labelEquals:!0,identities:!0,identitiesExclude:!0,eventTypeTokens:!0,sensorKinds:!0}),Yl=Q({minConfidence:!0,minImportance:!0,minLabelConfidence:!0}),Xl=Q({minDwellSeconds:!0}),Zl=Q({source:!0}),Ql=Q({crossing:!0}),$l=Q({packagePhase:!0}),eu=Q({sensorTransition:!0}),tu=Q({plates:!0}),nu=Q({occupancy:!0}),ru=Q({audio:!0}),iu=Q({systemEvent:!0}),au=Q({deviceState:!0}),ou=Q({scene:!0});function su(e,t){let n=e[t];return Array.isArray(n)?n:[]}function cu(e,t){let n=e[t];return typeof n==`number`?n:void 0}a();function lu(e,t){let n=ze().trpcClient,r=O({queries:e.map(e=>({queryKey:[[`nc-pickers`,`zones`],{deviceId:e}],staleTime:3e4,queryFn:async()=>({deviceId:e,zones:(await n.zones.listZones.query({deviceId:e})).map(e=>({id:e.id,name:e.name}))})}))});return d(()=>{let e=[],n=new Set;for(let i of r){if(!i.data)continue;let r=t.find(e=>e.id===i.data.deviceId)?.name;for(let t of i.data.zones)n.has(t.id)||(n.add(t.id),e.push({value:t.id,label:t.name,...r===void 0?{}:{hint:r}}))}return{options:e,loading:r.some(e=>e.isLoading),failed:r.some(e=>e.isError)}},[r,t])}function uu(e){let t=ze().trpcClient,n=O({queries:e.map(e=>({queryKey:[[`nc-pickers`,`event-kinds`],{deviceId:e}],staleTime:6e4,queryFn:async()=>(await t.pipelineAnalytics.listEventKinds.query({deviceId:e})).map(e=>({kind:e.kind,label:e.label}))}))});return d(()=>{let e=new Map;for(let t of n)for(let n of t.data??[])e.has(n.kind)||e.set(n.kind,n.label);let t=[...e.entries()].map(([e,t])=>({value:e,label:t}));return t.sort((e,t)=>e.label.localeCompare(t.label)),{options:t,loading:n.some(e=>e.isLoading)}},[n])}function du(){let e=$n();return d(()=>({options:(e.data??[]).map(e=>({value:e.id,label:e.name})),loading:e.isLoading,failed:e.isError===!0}),[e.data,e.isLoading,e.isError])}function fu(){let e=Jr({limit:200}),t=yn();return d(()=>{let n=new Set;for(let e of t.data??[])e.name.trim().length>0&&n.add(e.name);let r=new Set;for(let t of e.data??[])t.text.trim().length>0&&r.add(t.text);return[...[...n].sort(),...[...r].sort()]},[e.data,t.data])}function pu({options:e,value:t,onChange:n,loading:r,emptyHint:i,placeholder:a,noFreeText:o=!1}){let{t:s}=H(),[c,l]=f(``),u=d(()=>new Set(e.map(e=>e.value)),[e]),p=d(()=>new Set(t),[t]),m=t.filter(e=>!u.has(e)),h=e=>{n(p.has(e)?t.filter(t=>t!==e):[...t,e])},g=()=>{let e=c.trim();e.length===0||t.includes(e)||(n([...t,e]),l(``))};return y(`div`,{className:`mt-1 space-y-1.5`,children:[m.length>0&&P(`div`,{className:`flex flex-wrap gap-1`,children:m.map(e=>y(`button`,{type:`button`,onClick:()=>n(t.filter(t=>t!==e)),className:`inline-flex items-center gap-1 rounded border border-border px-1.5 py-0.5 text-[10px] text-foreground hover:bg-surface-hover`,title:s(`system.notificationRulePickers.customValueClickToRemove`,`Custom value — click to remove`),children:[e,` ×`]},e))}),e.length>0?P(`div`,{className:`max-h-40 overflow-y-auto rounded-md border border-border divide-y divide-border`,children:e.map(e=>y(`label`,{className:`flex items-center gap-2.5 px-3 py-1.5 text-xs text-foreground cursor-pointer hover:bg-surface-hover`,children:[P(`input`,{type:`checkbox`,checked:p.has(e.value),onChange:()=>h(e.value),className:`accent-primary`}),P(`span`,{className:`flex-1 truncate`,children:e.label}),e.hint!==void 0&&P(`span`,{className:`text-[10px] text-foreground-subtle`,children:e.hint})]},e.value))}):P(`p`,{className:`text-[10px] text-foreground-subtle`,children:r===!0?s(`common.loading`,`Loading…`):i}),!o&&P(`input`,{value:c,onChange:e=>l(e.target.value),onKeyDown:e=>{e.key===`Enter`&&(e.preventDefault(),g())},placeholder:a,className:`w-full rounded-md border border-border bg-background px-2 py-1 text-xs text-foreground placeholder:text-foreground-subtle`})]})}var mu=[{value:`immediate`,get label(){return V.t(`helpers.ruleFormParsers.immediate`)},get hint(){return V.t(`helpers.ruleFormParsers.immediateHint`)}},{value:`track-end`,get label(){return V.t(`helpers.ruleFormParsers.trackEnd`)},get hint(){return V.t(`helpers.ruleFormParsers.trackEndHint`)}},{value:`device-event`,get label(){return V.t(`helpers.ruleFormParsers.deviceEvent`)},get hint(){return V.t(`helpers.ruleFormParsers.deviceEventHint`)}},{value:`package-event`,get label(){return V.t(`helpers.ruleFormParsers.packageEvent`)},get hint(){return V.t(`helpers.ruleFormParsers.packageEventHint`)}},{value:`system-event`,get label(){return V.t(`helpers.ruleFormParsers.systemEvent`)},get hint(){return V.t(`helpers.ruleFormParsers.systemEventHint`)}}],hu=`Immediate, grouped`,gu=mu.flatMap(e=>e.value===`immediate`?[e,{value:`immediate-grouped`,get label(){return V.t(`notificationRules.grouping.choice`)},get hint(){return V.t(`helpers.ruleFormParsers.groupedHint`)}}]:[e]);function _u(e){return e.groupingSec!==void 0&&Yt(e)?`immediate-grouped`:e.delivery}function vu(e){let t=(e.delivery===`immediate`||e.delivery===`track-end`)&&Yt({delivery:`immediate`,conditions:e.conditions});return gu.filter(e=>e.value!==`immediate-grouped`||t)}function yu(e){return gu.find(t=>t.value===e)?.value}function bu(e,t=hu){return _u(e)===`immediate-grouped`?`${t} · ${String(e.groupingSec)} s`:Su(e.delivery)}function xu(e){if(e.trim().length===0)return;let t=Number(e);return Number.isFinite(t)&&t>=0?Math.trunc(t):void 0}function Su(e){return mu.find(t=>t.value===e)?.label??e}function Cu(e){return mu.some(t=>t.value===e)}var wu=[{key:`all`,get label(){return V.t(`helpers.ruleFormParsers.sec_all_label`)},get blurb(){return V.t(`helpers.ruleFormParsers.sec_all_blurb`)},get newRuleLabel(){return V.t(`helpers.ruleFormParsers.sec_all_new`)},get emptyHint(){return V.t(`helpers.ruleFormParsers.sec_all_empty`)},creatable:!0},{key:`detection`,get label(){return V.t(`helpers.ruleFormParsers.sec_detection_label`)},get blurb(){return V.t(`helpers.ruleFormParsers.sec_detection_blurb`)},get newRuleLabel(){return V.t(`helpers.ruleFormParsers.sec_detection_new`)},get emptyHint(){return V.t(`helpers.ruleFormParsers.sec_detection_empty`)},creatable:!0},{key:`sensor`,get label(){return V.t(`helpers.ruleFormParsers.sec_sensor_label`)},get blurb(){return V.t(`helpers.ruleFormParsers.sec_sensor_blurb`)},get newRuleLabel(){return V.t(`helpers.ruleFormParsers.sec_sensor_new`)},get emptyHint(){return V.t(`helpers.ruleFormParsers.sec_sensor_empty`)},creatable:!0},{key:`audio`,get label(){return V.t(`helpers.ruleFormParsers.sec_audio_label`)},get blurb(){return V.t(`helpers.ruleFormParsers.sec_audio_blurb`)},get newRuleLabel(){return V.t(`helpers.ruleFormParsers.sec_audio_new`)},get emptyHint(){return V.t(`helpers.ruleFormParsers.sec_audio_empty`)},creatable:!0},{key:`occupancy`,get label(){return V.t(`helpers.ruleFormParsers.sec_occupancy_label`)},get blurb(){return V.t(`helpers.ruleFormParsers.sec_occupancy_blurb`)},get newRuleLabel(){return V.t(`helpers.ruleFormParsers.sec_occupancy_new`)},get emptyHint(){return V.t(`helpers.ruleFormParsers.sec_occupancy_empty`)},creatable:!0},{key:`device-events`,get label(){return V.t(`helpers.ruleFormParsers.sec_deviceEvents_label`)},get blurb(){return V.t(`helpers.ruleFormParsers.sec_deviceEvents_blurb`)},get newRuleLabel(){return V.t(`helpers.ruleFormParsers.sec_deviceEvents_new`)},get emptyHint(){return V.t(`helpers.ruleFormParsers.sec_deviceEvents_empty`)},creatable:!0},{key:`system`,get label(){return V.t(`helpers.ruleFormParsers.sec_system_label`)},get blurb(){return V.t(`helpers.ruleFormParsers.sec_system_blurb`)},get newRuleLabel(){return V.t(`helpers.ruleFormParsers.sec_system_new`)},get emptyHint(){return V.t(`helpers.ruleFormParsers.sec_system_empty`)},creatable:!0},{key:`alarm`,get label(){return V.t(`helpers.ruleFormParsers.sec_alarm_label`)},get blurb(){return V.t(`helpers.ruleFormParsers.sec_alarm_blurb`)},get newRuleLabel(){return V.t(`helpers.ruleFormParsers.sec_alarm_new`)},get emptyHint(){return V.t(`helpers.ruleFormParsers.sec_alarm_empty`)},creatable:!0},{key:`mixed`,get label(){return V.t(`helpers.ruleFormParsers.sec_mixed_label`)},get blurb(){return V.t(`helpers.ruleFormParsers.sec_mixed_blurb`)},get newRuleLabel(){return V.t(`helpers.ruleFormParsers.sec_mixed_new`)},get emptyHint(){return V.t(`helpers.ruleFormParsers.sec_mixed_empty`)},creatable:!1}];function Tu(e){return At(Zt(e)).editable}function Eu(e){return Pt(Du(e))}function Du(e){switch(e){case`device-events`:case`system`:case`alarm`:case`mixed`:return e;default:return}}var Ou=new Map([[0,`helpers.ruleFormParsers.cdNone`],[60,`helpers.ruleFormParsers.cd1m`],[3600,`helpers.ruleFormParsers.cd1h`]]),ku=86400;function Au(e){let t=Ou.get(e);return t===void 0?e%3600==0?V.t(`helpers.ruleFormParsers.cdHours`,{count:e/3600}):e%60==0?V.t(`helpers.ruleFormParsers.cdMinutes`,{count:e/60}):V.t(`helpers.ruleFormParsers.cdSeconds`,{count:e}):V.t(t)}function ju(e){if(e.trim().length===0)return;let t=Number(e);return Number.isFinite(t)&&t>=0?Math.trunc(t):void 0}var Mu=[{value:`rule-device`,get label(){return V.t(`helpers.ruleFormParsers.scopeDevice`)}},{value:`rule`,get label(){return V.t(`helpers.ruleFormParsers.scopeRule`)}}];function Nu(e){return Mu.find(t=>t.value===e)?.value}var Pu=[{value:`per-class`,get label(){return V.t(`helpers.ruleFormParsers.granPerClass`)}},{value:`shared`,get label(){return V.t(`helpers.ruleFormParsers.granShared`)}}];function Fu(e){return Pu.find(t=>t.value===e)?.value}var Iu=[{value:`scene-boxes`,get label(){return V.t(`helpers.ruleFormParsers.imageSceneBoxes`)},get description(){return V.t(`helpers.ruleFormParsers.imageSceneBoxesDesc`)}},{value:`crop`,get label(){return V.t(`helpers.ruleFormParsers.imageCrop`)},get description(){return V.t(`helpers.ruleFormParsers.imageCropDesc`)}},{value:`clean`,get label(){return V.t(`helpers.ruleFormParsers.imageClean`)},get description(){return V.t(`helpers.ruleFormParsers.imageCleanDesc`)}},{value:`none`,get label(){return V.t(`helpers.ruleFormParsers.imageNone`)},get description(){return V.t(`helpers.ruleFormParsers.imageNoneDesc`)}}];function Lu(e){return Iu.find(t=>t.value===e)?.value}var Ru=[{value:``,get label(){return V.t(`helpers.ruleFormParsers.linkedDefault`)}},{value:`mosaic`,get label(){return V.t(`helpers.ruleFormParsers.linkedMosaic`)}},{value:`each`,get label(){return V.t(`helpers.ruleFormParsers.linkedEach`)}}];function zu(e){let t=Ru.find(t=>t.value===e)?.value;return t===``?void 0:t}var Bu=[{value:``,get label(){return V.t(`helpers.ruleFormParsers.profileLowest`)}},{value:`low`,get label(){return V.t(`helpers.ruleFormParsers.profileLow`)}},{value:`mid`,get label(){return V.t(`helpers.ruleFormParsers.profileMid`)}},{value:`high`,get label(){return V.t(`helpers.ruleFormParsers.profileHigh`)}}];function Vu(e){let t=Bu.find(t=>t.value===e)?.value;return t===``?void 0:t}var Hu=[{value:`any`,get label(){return V.t(`helpers.ruleFormParsers.srcAny`)}},{value:`pipeline`,get label(){return V.t(`helpers.ruleFormParsers.srcPipeline`)}},{value:`onboard`,get label(){return V.t(`helpers.ruleFormParsers.srcOnboard`)}},{value:`sensor`,get label(){return V.t(`helpers.ruleFormParsers.srcSensor`)}}],Uu=[{value:`delivered`,get label(){return V.t(`helpers.ruleFormParsers.phaseDelivered`)}},{value:`picked-up`,get label(){return V.t(`helpers.ruleFormParsers.phasePickedUp`)}},{value:`both`,get label(){return V.t(`helpers.ruleFormParsers.phaseBoth`)}}],Wu=[{value:``,get label(){return V.t(`helpers.ruleFormParsers.stBoth`)}},{value:`raised`,get label(){return V.t(`helpers.ruleFormParsers.stRaised`)}},{value:`cleared`,get label(){return V.t(`helpers.ruleFormParsers.stCleared`)}}];function Gu(e){return e===`raised`||e===`cleared`?e:void 0}function Ku(e,t){return e===`sensorTransition`?dt(t.sensorKinds):!0}var qu=[{value:`enter`,get label(){return V.t(`helpers.ruleFormParsers.crossEnter`)}},{value:`exit`,get label(){return V.t(`helpers.ruleFormParsers.crossExit`)}},{value:`any`,get label(){return V.t(`helpers.ruleFormParsers.crossAny`)}}],Ju=`enter`;function Yu(e){return e===`exit`||e===`any`?e:void 0}var Xu=[{value:1,get label(){return V.t(`helpers.ruleFormParsers.prioMin`)}},{value:2,get label(){return V.t(`helpers.ruleFormParsers.prioLow`)}},{value:3,get label(){return V.t(`helpers.ruleFormParsers.prioDefault`)}},{value:4,get label(){return V.t(`helpers.ruleFormParsers.prioHigh`)}},{value:5,get label(){return V.t(`helpers.ruleFormParsers.prioMax`)}}];function Zu(e,t){return e.options&&e.options.length>0?e.options:t}var Qu=[{value:``,get label(){return V.t(`helpers.ruleFormParsers.speedDefault`)}},{value:`1`,get label(){return V.t(`helpers.ruleFormParsers.speedReal`)}},{value:`2`,label:`2×`},{value:`3`,label:`3×`},{value:`4`,label:`4×`},{value:`6`,label:`6×`},{value:`8`,label:`8×`}];function $u(e){if(e===``)return;let t=Number(e);return Number.isFinite(t)&&t>=1&&t<=8?t:void 0}var ed=new Map(Object.entries({"device-offline":`Device offline`,"device-online":`Device online`,"device-disabled":`Device switched off`,"device-enabled":`Device switched on`,"stream-offline":`Stream offline`,"stream-online":`Stream online`,"device-battery-low":`Battery low`,"device-battery-normal":`Battery back to normal`,"device-consumable-low":`Consumable low`,"device-consumable-normal":`Consumable back to normal`,"detection-blind":`Camera detecting nothing`,"motion-noisy":`Camera motion constant, no subject`,"motion-calm":`Camera motion calm again`,"recording-stalled":`Recording stalled`,"recording-healthy":`Recording healthy again`,"recording-degraded":`Recording degraded (restart storm)`,"device-attention-required":`Device needs attention`,"device-attention-resolved":`Device attention resolved`,"storage-location-low":`Storage location low`,"storage-location-critical":`Storage location critical`,"storage-location-ok":`Storage location ok again`,"node-offline":`Node offline`,"node-online":`Node online`,"node-restarting":`Node restarting`,"node-updating":`Node updating (restart imminent)`,"node-inference-unavailable":`Node has no usable inference device`,"addon-crash-loop":`Addon stopped after repeated crashes`,"addon-update-available":`Addon update available`,"addon-updated":`Addons updated`,"server-update-available":`Server update available`,"server-updated":`Server updated`,"wrapper-update-available":`Container / app update available`,"export-completed":`Export completed`,"backup-completed":`Backup completed`,"alert-critical":`Critical alert raised`,"alert-error":`Error alert raised`,"alert-critical-resolved":`Critical alert resolved`,"rule-broken":`Notification rule broken`,"rule-repaired":`Notification rule repaired`,"alarm-arm-refused":`Alarm arm refused (something is open)`,"alarm-check-failed":`Alarm check failed (armed anyway)`,"alarm-arming":`Alarm arming (exit delay)`,"alarm-armed":`Alarm armed`,"alarm-pending":`Alarm entry delay started`,"alarm-triggered":`Alarm triggered`,"alarm-rearmed":`Alarm re-armed after siren`,"alarm-sensor-bypass":`Alarm sensor bypass`,"alarm-disarmed":`Alarm disarmed`}));function td(e){return ed.get(e)}var nd={"device-state":`A device the hub can no longer reach, or that came back. Switched off / on is a device an operator turned off or back on — not a fault, a choice.`,streams:`A stream that stopped or came back.`,battery:`A battery below the cluster threshold, and (optionally) its return to normal. Devices with a binary low-battery indicator are judged by the indicator, not by the percentage.`,consumables:`A consumable — filter, brush, bag, supply or waste tank — at or below this rule’s threshold, or that the device reports as due for replacement, and (optionally) its return to normal after a change. A device that only says "replace" is judged by that, not by a percentage.`,"detection-blind":`A camera that MOVED — at least 10 minutes of motion over 3 sessions — was analysed, and whose detector produced nothing at all, not even a candidate under the confidence floor.`,"motion-noise":`A camera whose motion fires constantly with no subject for an hour — a quarter of the time in motion, or 40 sessions — and (optionally) its return to calm. The detector is fine; tune the motion zones or sensitivity.`,recording:`A camera whose recording is on but no footage is landing (stall), a writer that burned its restart budget (degraded), and (optionally) the return to healthy writing.`,"device-attention":`A device whose own addon raised a critical alert because it needs the operator (a missing or rejected PIN), and the return to normal.`,nodes:`An agent or worker node joining or leaving the cluster, or an online node whose inference devices all went away.`,addons:`An addon the hub has stopped restarting after repeated crashes.`,"addon-updates":`A newer version of an addon, or an addon update that just finished.`,updates:`A newer version of the server itself, or of the container / app the node runs inside, is available — or a server update just finished.`,"backups-exports":`A scheduled or manual backup of the hub finished, or a footage export finished rendering.`,alerts:`A critical or error alert opening — a runner that failed or was refused, a recording location out of space, an expired sign-in — and (optionally) a critical alert resolving. One notification per alert episode.`,storage:`A storage location running low or critical on free space — or whose capacity probe failed — and (optionally) its return to ok.`,"rule-health":`A notification rule that cannot work — it no longer loads, or still names a device or destination that was deleted — and (optionally) its repair.`,alarm:`The alarm panel refusing to arm, arming, armed, counting down to a siren, going off, re-arming, excluding an open sensor, or being disarmed.`},rd=st.map(e=>({id:e.id,family:e.family,label:e.label,hint:nd[e.id]??``,kinds:e.kinds.flatMap(e=>{let t=td(e);return t===void 0?[]:[{value:e,label:t}]})}));function id(e){return rd.filter(t=>t.family===e)}function ad(e){let t=wt(e).conditions.systemEvent;return t===void 0?{kinds:(id(e)[0]?.kinds??[]).map(e=>e.value)}:{...t,kinds:[...t.kinds]}}var od=rd.flatMap(e=>e.kinds);function sd(e){return od.find(t=>t.value===e)?.label??e}function cd(e){return{devices:zt(e,`deviceIds`),deviceTypes:zt(e,`deviceTypes`),nodes:zt(e,`nodeIds`),packages:zt(e,`packageNames`),consumableThreshold:zt(e,`consumableLowPercent`)}}function ld(e,t){let n=ct[e],r=cd(t);return{devices:n.includes(`deviceIds`)&&r.devices,excludeDevices:n.includes(`excludeDeviceIds`)&&r.devices,deviceTypes:n.includes(`deviceTypes`)&&r.deviceTypes,nodes:n.includes(`nodeIds`)&&r.nodes,packages:n.includes(`packageNames`)&&r.packages,consumableThreshold:n.includes(`consumableLowPercent`)&&r.consumableThreshold}}var ud=Object.values(yt).map(e=>({value:e,label:dd(e)})).toSorted((e,t)=>e.label.localeCompare(t.label));function dd(e){let t=e.replaceAll(`-`,` `);return t.charAt(0).toUpperCase()+t.slice(1)}function fd(e,t){let n=[],r=new Set;for(let i of e.kinds){let e=gt(i.value);if(e===void 0){n.push({key:i.value,label:i.label,kinds:[i.value],clears:[i.value]});continue}r.has(e.id)||(r.add(e.id),n.push({key:`class:${e.id}`,label:t?e.snapshotLabel:e.label,kinds:t?[...e.bad]:pt(e),clears:pt(e),classId:e.id,...t&&e.snapshotSection===null?{noSnapshot:!0}:{}}))}return n}function pd(e,t){return t.clears.some(t=>e.includes(t))}function md(e,t,n){if(!id(n).some(e=>e.kinds.some(e=>t.kinds.includes(e.value))))return e;let r=e?.kinds??[];if(pd(r,t)){let i=r.filter(e=>!t.clears.includes(e));return i.length===0?e:vd(e,i,n)}return vd(e,od.filter(e=>t.kinds.includes(e.value)||r.includes(e.value)).map(e=>e.value),n)}function hd(e,t){return t===void 0?void 0:vd(t,t.kinds,e)}function gd(e,t){let n=e?.kinds??[];if(n.length===0)return;let r=_d(t,`deviceIds`,e?.deviceIds),i=_d(t,`excludeDeviceIds`,e?.excludeDeviceIds),a=_d(t,`deviceTypes`,e?.deviceTypes),o=_d(t,`nodeIds`,e?.nodeIds),s=_d(t,`packageNames`,e?.packageNames),c=Object.prototype.hasOwnProperty.call(t,`consumableLowPercent`)?t.consumableLowPercent:e?.consumableLowPercent;return{kinds:[...n],...r===void 0?{}:{deviceIds:[...r]},...i===void 0?{}:{excludeDeviceIds:[...i]},...a===void 0?{}:{deviceTypes:[...a]},...o===void 0?{}:{nodeIds:[...o]},...s===void 0?{}:{packageNames:[...s]},...c===void 0?{}:{consumableLowPercent:c}}}function _d(e,t,n){let r=Object.prototype.hasOwnProperty.call(e,t)?e[t]:n;return r!==void 0&&r.length===0?void 0:r}function vd(e,t,n){let r=ld(n,t),i=r.devices?e?.deviceIds:void 0,a=r.excludeDevices?e?.excludeDeviceIds:void 0,o=r.deviceTypes?e?.deviceTypes:void 0,s=r.nodes?e?.nodeIds:void 0,c=r.packages?e?.packageNames:void 0,l=r.consumableThreshold?e?.consumableLowPercent:void 0;return{kinds:[...t],...i&&i.length>0?{deviceIds:[...i]}:{},...a&&a.length>0?{excludeDeviceIds:[...a]}:{},...o&&o.length>0?{deviceTypes:[...o]}:{},...s&&s.length>0?{nodeIds:[...s]}:{},...c&&c.length>0?{packageNames:[...c]}:{},...l===void 0?{}:{consumableLowPercent:l}}}var yd=95;function bd(e){let t=e.trim();if(t===``)return{kind:`clear`};let n=Number(t);return Number.isInteger(n)&&n>=1&&n<=yd?{kind:`set`,value:n}:{kind:`invalid`}}function xd(e,t=2){if(e===void 0||e.length===0)return V.t(`helpers.notificationSystemEvents.noneSelected`);let n=e.slice(0,t).map(sd).join(`, `),r=e.length-Math.min(t,e.length);return r>0?`${n} +${r}`:n}function Sd(e){if(e===void 0)return`—`;let t=[],n=e.deviceIds?.length??0,r=e.deviceTypes?.length??0,i=e.nodeIds?.length??0,a=e.packageNames?.length??0,o=e.excludeDeviceIds?.length??0;r>0&&t.push(e.deviceTypes?.map(dd).join(`, `)??``),n>0&&t.push(`${n} device${n===1?``:`s`}`),i>0&&t.push(`${i} node${i===1?``:`s`}`),a>0&&t.push(`${a} package${a===1?``:`s`}`);let s=o>0?`except ${o} device${o===1?``:`s`}`:null,c=e.consumableLowPercent===void 0?[]:[`consumables at ${e.consumableLowPercent}%`];return t.length===0?[s===null?`Everything`:`Everything ${s}`,...c].join(` · `):[...t,...s===null?[]:[s],...c].join(` · `)}function Cd(e){return e===void 0||(e.deviceTypes?.length??0)===0?!1:e.kinds.some(e=>Ot.includes(e))}var wd=[`all`,`only`,`except`];function Td(e,t){return(e??[]).length>0?`only`:(t??[]).length>0?`except`:`all`}function Ed(e,t){let n=[...e??[]],r=[...t??[]];return{mode:Td(n,r),include:n,exclude:r,legacyBoth:n.length>0&&r.length>0}}function Dd(e,t){return{...e,mode:t}}function Od(e){switch(e.mode){case`only`:return e.include;case`except`:return e.exclude;case`all`:return[]}}function kd(e,t){switch(e.mode){case`only`:return{...e,include:[...t]};case`except`:return{...e,exclude:[...t]};case`all`:return e}}function Ad(e){return e.mode===`only`&&e.legacyBoth?e.exclude:[]}function jd(e){return{...e,exclude:[],legacyBoth:!1}}function Md(e){switch(e.mode){case`all`:return{};case`except`:return e.exclude.length>0?{exclude:[...e.exclude]}:{};case`only`:{let t=Ad(e);return{...e.include.length>0?{include:[...e.include]}:{},...t.length>0?{exclude:[...t]}:{}}}}}function Nd(e){let t=Md(e),n=t.include??[],r=t.exclude??[];return[...e.include.filter(e=>!n.includes(e)),...e.exclude.filter(e=>!r.includes(e))]}var Pd=[`onActivation`,`onDeactivation`,`onTrigger`,`onTriggerOff`],Fd={onActivation:{get title(){return V.t(`helpers.notificationRuleActions.onActivationTitle`)},get hint(){return V.t(`helpers.notificationRuleActions.onActivationHint`)}},onDeactivation:{get title(){return V.t(`helpers.notificationRuleActions.onDeactivationTitle`)},get hint(){return V.t(`helpers.notificationRuleActions.onDeactivationHint`)}},onTrigger:{get title(){return V.t(`helpers.notificationRuleActions.onTriggerTitle`)},get hint(){return V.t(`helpers.notificationRuleActions.onTriggerHint`)}},onTriggerOff:{get title(){return V.t(`helpers.notificationRuleActions.onTriggerOffTitle`)},get hint(){return V.t(`helpers.notificationRuleActions.onTriggerOffHint`)}}},Id={onActivation:[],onDeactivation:[],onTrigger:[],onTriggerOff:[],buttons:[]};function Ld(e){return e===void 0?Id:{onActivation:[...e.onActivation??[]],onDeactivation:[...e.onDeactivation??[]],onTrigger:[...e.onTrigger??[]],onTriggerOff:[...e.onTriggerOff??[]],buttons:[...e.buttons??[]]}}function Rd(e){let t=e.buttons.filter(e=>e.id.trim()!==``&&e.label.trim()!==``&&e.sequenceId.trim()!==``),n={onActivation:e.onActivation,onDeactivation:e.onDeactivation,onTrigger:e.onTrigger,onTriggerOff:e.onTriggerOff};if(!(!Pd.some(e=>n[e].length>0)&&t.length===0))return{...n.onActivation.length>0?{onActivation:[...n.onActivation]}:{},...n.onDeactivation.length>0?{onDeactivation:[...n.onDeactivation]}:{},...n.onTrigger.length>0?{onTrigger:[...n.onTrigger]}:{},...n.onTriggerOff.length>0?{onTriggerOff:[...n.onTriggerOff]}:{},...t.length>0?{buttons:t}:{}}}function zd(e,t){let n=[];for(let r of Pd){let i=e[r];i.length>4&&n.push({kind:`too-many`,message:V.t(`helpers.notificationRuleActions.tooMany`,{title:Fd[r].title})});for(let e of i)e.kind===`sequence`&&!t.has(e.sequenceId)&&n.push({kind:`unknown-sequence`,message:V.t(`helpers.notificationRuleActions.hookUnknownSeq`,{title:Fd[r].title})})}let r=new Set;for(let i of e.buttons){let e=i.id.trim();e!==``&&(r.has(e)&&n.push({kind:`duplicate-button`,message:V.t(`helpers.notificationRuleActions.dupButton`,{id:e})}),r.add(e),t.has(i.sequenceId.trim())||n.push({kind:`unknown-sequence`,message:V.t(`helpers.notificationRuleActions.buttonUnknownSeq`,{label:i.label||e})}))}return n}function Bd(e,t){return{id:`action-${String(e+1)}`,label:V.t(`helpers.notificationRuleActions.newButtonLabel`),sequenceId:t}}function Vd(){return{kind:`do`,action:{kind:`cap`,deviceId:0,cap:``,method:``}}}function Hd(e){return{kind:`sequence`,sequenceId:e}}function Ud(){return{kind:`wait`,seconds:5}}var Wd=[{value:`acknowledge`,get label(){return V.t(`helpers.notificationRuleActions.icon_acknowledge`)}},{value:`dismiss`,get label(){return V.t(`helpers.notificationRuleActions.icon_dismiss`)}},{value:`silence`,get label(){return V.t(`helpers.notificationRuleActions.icon_silence`)}},{value:`snooze`,get label(){return V.t(`helpers.notificationRuleActions.icon_snooze`)}},{value:`view`,get label(){return V.t(`helpers.notificationRuleActions.icon_view`)}},{value:`play`,get label(){return V.t(`helpers.notificationRuleActions.icon_play`)}},{value:`camera`,get label(){return V.t(`helpers.notificationRuleActions.icon_camera`)}},{value:`open`,get label(){return V.t(`helpers.notificationRuleActions.icon_open`)}},{value:`close`,get label(){return V.t(`helpers.notificationRuleActions.icon_close`)}},{value:`unlock`,get label(){return V.t(`helpers.notificationRuleActions.icon_unlock`)}},{value:`lock`,get label(){return V.t(`helpers.notificationRuleActions.icon_lock`)}},{value:`disarm`,get label(){return V.t(`helpers.notificationRuleActions.icon_disarm`)}},{value:`arm`,get label(){return V.t(`helpers.notificationRuleActions.icon_arm`)}},{value:`arm-home`,get label(){return V.t(`helpers.notificationRuleActions.icon_arm_home`)}},{value:`arm-away`,get label(){return V.t(`helpers.notificationRuleActions.icon_arm_away`)}},{value:`arm-night`,get label(){return V.t(`helpers.notificationRuleActions.icon_arm_night`)}},{value:`light`,get label(){return V.t(`helpers.notificationRuleActions.icon_light`)}},{value:`alert`,get label(){return V.t(`helpers.notificationRuleActions.icon_alert`)}}],Gd=[10,30,60],Kd=[5,10,15,30,60,120,240,480];function qd(e){return e>=60&&e%60==0?V.t(`helpers.ruleFormState.snoozeHours`,{count:e/60}):V.t(`helpers.ruleFormState.snoozeMin`,{count:e})}var Jd=new Set([`alarm-arm-refused`,`alarm-check-failed`,`alarm-arming`,`alarm-armed`,`alarm-pending`,`alarm-triggered`,`alarm-rearmed`,`alarm-sensor-bypass`,`alarm-disarmed`]),Yd=`alarm-panel`;function Xd(e,t){for(let t of e.systemEvent?.kinds??[])if(Jd.has(t))return!0;for(let e of t)if(e.kind===`cap`&&e.cap===Yd)return!0;return!1}function Zd(e,t){let n=new Map(t.map(e=>[e.id,e])),r=[];for(let t of[`onActivation`,`onDeactivation`,`onTrigger`,`onTriggerOff`])for(let i of e[t])if(i.kind===`do`)r.push(i.action);else{let e=n.get(i.sequenceId);e!==void 0&&r.push(...e.actions)}for(let t of e.buttons){let e=n.get(t.sequenceId);e!==void 0&&r.push(...e.actions)}return r}function Qd(e){let{devices:t,devicesExclude:n,classes:r,classesExclude:i,...a}=e;return{conditions:a,deviceScope:Ed(t,n),classScope:Ed(r,i)}}function $d(e){let t=Md(e.deviceScope),n=Md(e.classScope);return{...e.conditions,...t.include===void 0?{}:{devices:[...t.include]},...t.exclude===void 0?{}:{devicesExclude:[...t.exclude]},...n.include===void 0?{}:{classes:[...n.include]},...n.exclude===void 0?{}:{classesExclude:[...n.exclude]}}}function ef(e){return e.deviceScope.mode===`only`?e.deviceScope.include:[]}function tf(e,t,n){let r=Zt(n);return e.some(e=>e.id===t&&Nt(e,n.delivery,r))}function nf(e=`immediate`,t={}){return{name:``,enabled:!0,delivery:e,targetIds:[],targetUsers:[],targetParams:{},priority:3,mediaImage:jt({},Zt({delivery:e,conditions:t})),mediaShowTriggerZone:!1,mediaShowSubjectPath:!1,mediaGif:!1,mediaClip:!1,mediaProfile:void 0,mediaClipSpeed:void 0,mediaLinkedCameras:void 0,templateTitle:``,templateBody:``,...Qd(t),schedule:void 0,systemEventDelivery:void 0,snoozeAllowGlobal:!1,groupingSec:void 0,snoozeOptions:void 0,actions:Id,cooldownSec:30,cooldownScope:`rule-device`,cooldownGranularity:void 0}}function rf(e){let t={};for(let n of e.targets)n.params&&Object.keys(n.params).length>0&&(t[n.targetId]=n.params);return{name:e.name,enabled:e.enabled,delivery:e.delivery,targetIds:e.targets.map(e=>e.targetId),targetUsers:e.targetUsers??[],targetParams:t,priority:e.priority,mediaImage:jt(e.media,Zt(e)),mediaShowTriggerZone:e.media.showTriggerZone===!0,mediaShowSubjectPath:e.media.showSubjectPath===!0,mediaGif:e.media.gif===!0,mediaClip:e.media.clip===!0,mediaProfile:e.media.profile,mediaClipSpeed:e.media.clipSpeed,mediaLinkedCameras:e.media.linkedCameras,templateTitle:e.template?.title??``,templateBody:e.template?.body??``,...Qd(e.conditions),schedule:e.schedule,systemEventDelivery:e.systemEventDelivery,snoozeAllowGlobal:e.snoozeAllowGlobal===!0,groupingSec:e.groupingSec,snoozeOptions:e.snoozeOptions,actions:Ld(e.actions),cooldownSec:e.throttle.cooldownSec,cooldownScope:e.throttle.scope,cooldownGranularity:e.throttle.granularity}}function af(e,t){let n=[];if(ff(e)){let r=e.groupingSec;r!==void 0&&(!Number.isInteger(r)||r<5||r>60)&&n.push(`The grouping window is a whole number of seconds between 5 and 60.`);let i=t?.confirm;i?.enabled===!0&&i.expect!==void 0&&!pf(i.expect)&&n.push(`This rule’s AI confirm expects more than one subject, but a grouped message judges one picture per subject, so it would never send. Remove the confirm expectation (viewer or API), or choose Immediate.`)}if(ht(e.conditions.audio)&&n.push(`This sound rule names neither a sound nor a level threshold, so it can never fire — every sample would count as a hit and the engine refuses it rather than notifying on silence. Pick at least one sound, or add a level.`),(!Number.isInteger(e.cooldownSec)||e.cooldownSec<0||e.cooldownSec>86400)&&n.push(`The cooldown is a whole number of seconds between 0 and ${String(ku)} (24 hours). 0 means every match is delivered.`),cf(e))for(let t of bt({delivery:e.delivery,conditions:e.conditions,...e.systemEventDelivery===void 0?{}:{systemEventDelivery:e.systemEventDelivery},...Rd(e.actions)===void 0?{}:{actions:Rd(e.actions)}}))n.push(Lt(t));return n}function of(e){let t=e.systemEventDelivery;if(t===void 0)return{};if(!Vt(e.delivery))return t.mode===`summary`?{systemEventDelivery:{mode:`instant`}}:{};if(t.mode===`summary`&&vt(t.schedule)===null){let e=It(t.schedule);if(e!==null&&e.times.length>0)return{systemEventDelivery:{...t,schedule:rt(e.times,t.schedule.timezone)}}}return{systemEventDelivery:t}}function sf(e){if(!cf(e))return null;if(!lt(e.templateBody))return V.t(`helpers.ruleFormState.summaryWarnNone`,{token:`{{summaryText}}`});let t=e.templateBody;return(e.systemEventDelivery?.mode===`summary`?e.systemEventDelivery.split:void 0)===`section`&&t.trim().length>0&&!/\{\{\s*summaryText\s*\}\}/.test(t)?V.t(`helpers.ruleFormState.summaryWarnSplit`,{token:`{{summaryText}}`}):null}function cf(e){return Vt(e.delivery)&&e.systemEventDelivery?.mode===`summary`}function lf(e,t,n=new Set){return af(e,t).length===0&&Cu(e.delivery)&&(!Vt(e.delivery)||_f(e)>0)&&Zt(e)!==`mixed`&&e.name.trim().length>0&&(e.targetIds.length>0||e.targetUsers.length>0)&&zd(e.actions,n).length===0}function uf(e,t){let n=hf(e.conditions,t);return Vt(t)&&(n.systemEvent?.kinds.length??0)===0?{...e,delivery:t,conditions:{...n,systemEvent:ad(`device-events`)}}:{...e,delivery:t,conditions:n}}function df(e,t){return t===`immediate-grouped`?{...uf(e,`immediate`),groupingSec:e.groupingSec??20}:{...uf(e,t),groupingSec:void 0}}function ff(e){return e.groupingSec!==void 0&&Yt(e)}function pf(e){switch(e.op){case`>`:return 1>e.count;case`<=`:return 1<=e.count;case`<`:return 1<e.count;case`==`:return e.count===1;default:return 1>=e.count}}var mf=new Set([`immediate`,`track-end`,`package-event`]);function hf(e,t){if(e.source!==`pipeline`||mf.has(t))return e;let{source:n,...r}=e;return r}function gf(e,t){return Xt(e.conditions.systemEvent)===t?e:{...e,conditions:{...e.conditions,systemEvent:ad(t)}}}function _f(e){return e.conditions.systemEvent?.kinds.length??0}function vf(e,t){return e.appliesTo.includes(t)}var yf={source:`any`};function bf(e,t){if(t==null)return!0;if(Array.isArray(t))return t.length===0;if(typeof t==`string`)return t.length===0||yf[e]===t;if(typeof t==`number`)return!Number.isFinite(t);if(typeof t==`object`){if(`ids`in t){let e=t.ids;return!Array.isArray(e)||e.length===0}if(`values`in t){let e=t.values;return!Array.isArray(e)||e.length===0}return!1}return!1}var xf=Jt.filter(e=>e.id===`audio`);function Sf(e){if(e.length===0)return e;let t=new Set(e.map(e=>e.id)),n=xf.filter(e=>!t.has(e.id));return n.length===0?e:[...e,...n]}function Cf(e,t,n,r=Zt({delivery:t,conditions:e})){let i=n.length===0?null:new Set(n.filter(e=>e.id!==`schedule`&&Nt(e,t,r)).map(e=>e.id)),a={};for(let[t,n]of Object.entries(e))i!==null&&!i.has(t)||Ku(t,e)&&(bf(t,n)||(a[t]=n));return a}function wf(e,t){if(e===void 0)return{};let n=hd(e,t.systemEvent);return n===void 0?{}:{systemEvent:n}}function Tf(e){return e!==void 0&&e.windows.length>0}function Ef(e){let t={...e.clipPreRollSec===void 0?{}:{clipPreRollSec:e.clipPreRollSec},...e.clipPostRollSec===void 0?{}:{clipPostRollSec:e.clipPostRollSec}};return Object.keys(t).length>0?t:void 0}function Df(e){let t=Ef(e.media);return{...e.confirm===void 0?{}:{confirm:e.confirm},...t===void 0?{}:{media:t}}}function Of(e,t,n=[]){let r=e.templateTitle.trim(),i=e.templateBody.trim(),a=r.length>0||i.length>0?{...r.length>0?{title:r}:{},...i.length>0?{body:i}:{}}:void 0,o=Rd(e.actions),s=Zt(e),c=At(s),l=ot(s),u=n.length===0?!0:n.some(t=>t.id===`schedule`&&vf(t,e.delivery)),d=!cf(e)&&u&&Tf(e.schedule)?e.schedule:void 0,f=n.length===0?!0:n.some(t=>t.id===`devices`&&vf(t,e.delivery)),p=n.length===0?!0:n.some(t=>t.id===`devicesExclude`&&vf(t,e.delivery)),{devices:m,devicesExclude:h,...g}=$d(e),_=Cf(g,e.delivery,n,s);return{name:e.name.trim(),enabled:e.enabled,delivery:e.delivery,conditions:{..._,...f&&m!==void 0?{devices:m}:{},...p&&h!==void 0?{devicesExclude:h}:{},...wf(l,e.conditions)},...d?{schedule:d}:{},...of(e),targets:e.targetIds.map(t=>{let n=e.targetParams[t];return n&&Object.keys(n).length>0?{targetId:t,params:n}:{targetId:t}}),...e.targetUsers.length>0?{targetUsers:[...e.targetUsers]}:{},media:c.carriesMedia?{image:e.mediaImage,...e.mediaShowTriggerZone&&e.mediaImage!==`crop`&&e.mediaImage!==`none`&&Bt(_).length>0?{showTriggerZone:!0}:{},...e.mediaShowSubjectPath&&e.mediaImage!==`none`&&qt(s)?{showSubjectPath:!0}:{},...e.mediaGif?{gif:!0}:{},...e.mediaClip?{clip:!0}:{},...e.mediaProfile===void 0?{}:{profile:e.mediaProfile},...e.mediaClipSpeed===void 0?{}:{clipSpeed:e.mediaClipSpeed},...s===`sensor`&&e.mediaImage!==`none`&&e.mediaLinkedCameras!==void 0?{linkedCameras:e.mediaLinkedCameras}:{},...(e.mediaGif||e.mediaClip)&&t?.media?.clipPreRollSec!==void 0?{clipPreRollSec:t.media.clipPreRollSec}:{},...(e.mediaGif||e.mediaClip)&&t?.media?.clipPostRollSec!==void 0?{clipPostRollSec:t.media.clipPostRollSec}:{}}:{image:`none`},throttle:{cooldownSec:e.cooldownSec,scope:e.cooldownScope,...e.cooldownGranularity===void 0?{}:{granularity:e.cooldownGranularity}},priority:e.priority,...a?{template:a}:{},...e.snoozeAllowGlobal?{snoozeAllowGlobal:!0}:{},...ff(e)?{groupingSec:e.groupingSec}:{},...e.snoozeOptions===void 0?{}:{snoozeOptions:[...e.snoozeOptions]},...t?.confirm===void 0?{}:{confirm:t.confirm},...o===void 0?{}:{actions:o}}}function kf(e,t){let n=Of(e,void 0,t);return[`template`,`schedule`,`targetUsers`,`snoozeOptions`,`snoozeAllowGlobal`,`groupingSec`,`actions`].filter(e=>n[e]===void 0)}var Af=[{key:`rule`,get label(){return V.t(`helpers.ruleFormTabs.tab_rule`)},fields:[`name`,`enabled`,`delivery`,`groupingSec`,`targetIds`,`targetUsers`,`targetParams`]},{key:`devices`,get label(){return V.t(`helpers.ruleFormTabs.tab_devices`)},fields:[`deviceScope`]},{key:`conditions`,get label(){return V.t(`helpers.ruleFormTabs.tab_conditions`)},fields:[`conditions`,`classScope`,`schedule`,`systemEventDelivery`]},{key:`notification`,get label(){return V.t(`helpers.ruleFormTabs.tab_notification`)},fields:[`priority`,`mediaImage`,`mediaShowTriggerZone`,`mediaShowSubjectPath`,`mediaGif`,`mediaClip`,`mediaProfile`,`mediaClipSpeed`,`mediaLinkedCameras`,`templateTitle`,`templateBody`]},{key:`actions`,get label(){return V.t(`helpers.ruleFormTabs.tab_actions`)},fields:[`actions`]},{key:`advanced`,get label(){return V.t(`helpers.ruleFormTabs.tab_advanced`)},fields:[`snoozeAllowGlobal`,`snoozeOptions`,`cooldownSec`,`cooldownScope`,`cooldownGranularity`]}];function jf(e,t={}){let n=Zt({delivery:e,conditions:t}),r=At(n),i=Af.map(e=>e.key===`conditions`?{...e,label:r.label}:e);return Pt(n)?i.filter(e=>e.key!==`devices`):i}function Mf(e){if(e.audio!==void 0)return V.t(`helpers.ruleFormTabs.condSound`);if(e.occupancy!==void 0)return V.t(`helpers.ruleFormTabs.condOccupancy`)}function Nf(e){let t=Zt(e),n=Ut($d(e),t);return t===`sensor`&&e.conditions.sensorTransition!==void 0&&!Ku(`sensorTransition`,e.conditions)?[...n,{conditionId:`sensorTransition`,reason:Dt}]:n}var Pf=`rule`;function Ff(e){return Af.find(t=>t.key===e)?.key}function If(e){return e?.toLowerCase().startsWith(`it`)===!0?`it`:`en`}function Lf(){let{i18n:e}=H(),t=If(e.language);return e=>Tt(e,t)}a();var Rf=`block text-[11px] font-medium text-foreground`,zf=`text-[10px] text-foreground-subtle mt-0.5`;function Bf({cameras:e,fleet:t,value:n,onChange:r,emptyMeansAll:i=!1,savedHadDevices:a=!1}){return P(Nn,{devices:e,listState:t.state,fleet:t,value:n,onChange:r,emptyMeansAll:i,savedHadDevices:a})}function Vf({value:e,placeholder:t,onChange:n}){let{t:r}=H(),[i,a]=f(``),o=()=>{let t=i.trim();if(t.length===0||e.includes(t)){a(``);return}n([...e,t]),a(``)},s=t=>n(e.filter(e=>e!==t));return y(`div`,{className:`mt-1 space-y-1.5`,children:[e.length>0&&P(`div`,{className:`flex flex-wrap gap-1`,children:e.map(e=>y(`span`,{className:`inline-flex items-center gap-1 rounded bg-surface-hover px-1.5 py-0.5 text-[11px] text-foreground`,children:[e,P(`button`,{type:`button`,onClick:()=>s(e),"aria-label":r(`system.notificationConditionWidgets.remove`,`remove {{v}}`,{v:e}),className:`text-foreground-subtle hover:text-danger`,children:P(Oe,{className:`h-3 w-3`})})]},e))}),P(B,{value:i,placeholder:t,onChange:e=>a(e.target.value),onKeyDown:e=>{e.key===`Enter`&&(e.preventDefault(),o())},onBlur:o})]})}function Hf({picker:e,value:t,onChange:n}){let{t:r}=H(),i=d(()=>it(e),[e]),a=d(()=>new Set(t),[t]),o=t.filter(e=>!i.has(e)),s=e=>{n(a.has(e)?t.filter(t=>t!==e):[...t,e])};return y(`div`,{className:`space-y-2`,children:[o.length>0&&P(`div`,{className:`flex flex-wrap gap-1`,children:o.map(e=>y(`button`,{type:`button`,onClick:()=>n(t.filter(t=>t!==e)),className:`inline-flex items-center gap-1 rounded border border-border px-1.5 py-0.5 text-[10px] text-foreground hover:bg-surface-hover`,title:r(`system.notificationConditionWidgets.customValueClickToRemove`,`Custom value — click to remove`),children:[e,` ×`]},e))}),e.groups.map(e=>y(`div`,{children:[P(`div`,{className:`text-[10px] uppercase tracking-wide text-foreground-muted mb-1`,children:e.fallbackLabel}),P(`div`,{className:`flex flex-wrap gap-1`,children:e.options.map(e=>{let t=a.has(e.value);return P(`button`,{type:`button`,"aria-pressed":t,onClick:()=>s(e.value),className:t?`rounded border border-primary bg-primary/15 px-1.5 py-0.5 text-[10px] text-foreground`:`rounded border border-border px-1.5 py-0.5 text-[10px] text-foreground hover:bg-surface-hover`,children:e.label},e.value)})})]},e.key))]})}function Uf({value:e,min:t,max:n,step:r,onChange:i}){let{t:a}=H();return y(`div`,{className:`mt-1 flex items-center gap-2`,children:[P(B,{type:`number`,value:e??``,min:t,max:n,step:r,className:`max-w-[8rem]`,onChange:e=>{let t=e.target.value;if(t===``){i(void 0);return}let n=Number(t);i(Number.isFinite(n)?n:void 0)}}),e!==void 0&&n!==void 0&&P(`input`,{type:`range`,min:t,max:n,step:r,value:e,onChange:e=>i(Number(e.target.value)),className:`flex-1 accent-primary`,"aria-label":a(`common.valueWord`)})]})}function Wf({value:e,onChange:t,options:n}){let{t:r}=H(),i=Gf(n??[]),a=i.length>0?i:qu;return y(`div`,{className:`mt-1 space-y-1`,children:[P(Mn,{value:e??`enter`,options:a.map(e=>({value:e.value,label:r(`notificationRules.crossing.${e.value}`,e.label)})),onChange:e=>t(Yu(e.target.value))}),P(`p`,{className:zf,children:r(`notificationRules.crossing.hint`,`Which way the subject crosses the zone.`)})]})}function Gf(e){let t=[];for(let n of e){let e=n.value===``||n.value===`enter`?Ju:Yu(n.value);e===void 0||t.some(t=>t.value===e)||t.push({value:e,label:n.label})}return t}function Kf({deviceIds:e,cameras:t,value:n,onChange:r}){let{options:i,loading:a}=lu(e,t);return P(pu,{options:i,value:n,onChange:r,loading:a,noFreeText:!0,emptyHint:e.length===0?`Select cameras first — a rule can only use zones those cameras actually have.`:`The selected cameras have no zones. Draw one in the camera’s zone editor first.`,placeholder:``})}function qf({deviceIds:e,value:t,onChange:n}){let{t:r}=H(),{options:i,loading:a}=uu(e);return P(pu,{options:i,value:t,onChange:n,loading:a,emptyHint:e.length===0?`Select cameras above to pick their event kinds — or type a token.`:`No event kinds reported for the selected cameras — type a token.`,placeholder:r(`system.notificationConditionWidgets.eventToken`,`Event token…`)})}var Jf=[{value:`became-occupied`,labelKey:`system.notificationConditionWidgets.opBecameOccupied`},{value:`became-free`,labelKey:`system.notificationConditionWidgets.opBecameFree`},{value:`>=`,labelKey:`system.notificationConditionWidgets.opCountAtLeast`},{value:`<=`,labelKey:`system.notificationConditionWidgets.opCountAtMost`}];function Yf(e,t){let n=e.map(e=>({value:e.value,label:e.label}));return t===void 0||t===``||n.some(e=>e.value===t)?n:[...n,{value:t,label:V.t(`system.notificationConditionWidgets.subTypeNeverCountsAlways`,`{{stored}} — sub-type, never counts (always 0)`,{stored:t})}]}function Xf({deviceIds:e,cameras:t,classOptions:n,value:r,onChange:i}){let{t:a}=H(),{options:o,loading:s}=lu(e,t),c=r??Mt,l=e=>i({...c,...e}),u=c.op===`became-occupied`||c.op===`became-free`,d=Yf(n,c.className);return y(`div`,{className:`mt-1 space-y-1.5`,children:[y(`div`,{className:`flex flex-wrap items-center gap-1.5`,children:[P(`div`,{className:`min-w-[10rem]`,children:P(Mn,{value:c.zoneId??``,options:[{value:``,label:s?a(`system.notificationConditionWidgets.loadingZones`,`Loading zones…`):a(`system.notificationConditionWidgets.wholeFrame`,`— whole frame —`)},...o.map(e=>({value:e.value,label:e.label}))],onChange:e=>l({zoneId:e.target.value===``?void 0:e.target.value})})}),P(`div`,{className:`min-w-[9rem]`,children:P(Mn,{value:c.className??``,options:[{value:``,label:a(`system.notificationConditionWidgets.anyClass`,`— any class —`)},...d],onChange:e=>l({className:e.target.value===``?void 0:e.target.value})})}),P(`div`,{className:`min-w-[9rem]`,children:P(Mn,{value:c.op,options:Jf.map(e=>({value:e.value,label:a(e.labelKey)})),onChange:e=>{let t=Jf.find(t=>t.value===e.target.value);t&&l({op:t.value})}})})]}),y(`div`,{className:`flex flex-wrap items-center gap-3 text-xs text-foreground-subtle`,children:[y(`label`,{className:`flex items-center gap-1`,children:[u?a(`system.notificationConditionWidgets.threshold`,`Threshold`):a(`system.notificationConditionWidgets.count`,`Count`),P(B,{type:`number`,min:0,className:`w-16`,value:String(c.count),onChange:e=>l({count:Math.max(0,Number(e.target.value)||0)})})]}),y(`label`,{className:`flex items-center gap-1`,children:[a(`system.notificationConditionWidgets.holdFor`,`Hold for`),P(B,{type:`number`,min:0,max:3600,className:`w-16`,value:String(c.sustainSeconds),onChange:e=>l({sustainSeconds:Math.min(3600,Math.max(0,Number(e.target.value)||0))})}),`s`]}),r===void 0?null:P(`button`,{type:`button`,onClick:()=>i(void 0),className:`underline hover:text-foreground`,children:a(`system.notificationConditionWidgets.clear`,`Clear`)})]}),e.length===0&&P(`p`,{className:`text-[11px] text-warning`,children:a(`system.notificationConditionWidgets.noCameraPickedOnThe`,`No camera picked on the Devices tab: this watches EVERY camera's occupancy, and no zone can be offered until you choose one — a zone id belongs to a camera.`)}),P(`p`,{className:`text-[11px] text-foreground-subtle`,children:a(`system.notificationConditionWidgets.countsConfirmedTrackedObjectsFrom`,`Counts confirmed tracked objects from zone analytics. The change must hold for the sustain window before it fires; with no snapshot for the camera or zone the rule never fires.`)})]})}var Zf=[{value:`label`,labelKey:`system.notificationConditionWidgets.audioModeLabel`,Icon:Ae},{value:`level`,labelKey:`system.notificationConditionWidgets.audioModeLevel`,Icon:qe}];function Qf({taxonomy:e,value:t,onChange:n}){let{t:r}=H(),i=$t(t),a=e=>n(Et(t,e)),{choices:o,unknownLabels:s}=_t(e,i.labels),c=Ct(t)??`label`;return y(`div`,{className:`mt-1 space-y-2`,children:[y(`div`,{className:`flex flex-wrap items-center gap-1`,children:[Zf.map(e=>P(`button`,{type:`button`,"aria-pressed":c===e.value,onClick:()=>a({mode:e.value}),className:`rounded border px-2 py-0.5 text-[11px] ${c===e.value?`border-primary bg-primary/15 text-foreground`:`border-border text-foreground-subtle hover:bg-surface-hover`}`,children:y(`span`,{className:`inline-flex items-center gap-1`,children:[P(e.Icon,{className:`h-3 w-3`}),r(e.labelKey)]})},e.value)),t===void 0?null:P(`button`,{type:`button`,onClick:()=>n(void 0),className:`ml-1 text-xs text-foreground-subtle underline hover:text-foreground`,children:r(`system.notificationConditionWidgets.clear`,`Clear`)})]}),c===`label`?y(E,{children:[P(`div`,{className:`flex flex-wrap gap-1`,children:o.map(e=>{let t=at(i.labels,e.value),n=e.unknown?`border-dashed border-warning text-warning`:t?`border-primary bg-primary/15 text-foreground`:`border-border text-foreground hover:bg-surface-hover`;return P(`button`,{type:`button`,"aria-pressed":t,title:e.unknown?r(`system.notificationConditionWidgets.storedByTheRuleNot`,`Stored by the rule — not offered by this hub`):void 0,onClick:()=>a({labels:ft(i.labels,e.value)}),className:`rounded border px-1.5 py-0.5 text-[10px] ${n}`,children:y(`span`,{className:`inline-flex items-center gap-1`,children:[P(er,{iconId:e.iconId,size:12}),e.label]})},e.value)})}),s.length>0&&y(`p`,{className:`text-[10px] text-warning`,children:[r(`system.notificationConditionWidgets.keptFromTheRuleUnknown`,`Kept from the rule, unknown to this hub:`),` `,s.join(`, `)]}),y(`div`,{className:`flex flex-wrap items-center gap-3 text-xs text-foreground-subtle`,children:[y(`label`,{className:`flex items-center gap-1`,children:[r(`system.notificationConditionWidgets.confirmAfter`,`Confirm after`),P(B,{type:`number`,min:1,max:20,step:1,className:`w-16`,value:String(i.confirmHits??2),onChange:e=>a({confirmHits:Number(e.target.value)})}),r(`system.notificationConditionWidgets.frames`)]}),y(`label`,{className:`flex items-center gap-1`,children:[r(`system.notificationConditionWidgets.within`),P(B,{type:`number`,min:1,max:60,step:1,className:`w-16`,value:String(i.confirmWindowSec??5),onChange:e=>a({confirmWindowSec:Number(e.target.value)})}),`s`]})]}),P(`p`,{className:`text-[11px] text-foreground-subtle`,children:r(`system.notificationConditionWidgets.audioConfirmHint`,{hits:2,window:5})})]}):y(E,{children:[P(`div`,{className:`flex flex-wrap items-center gap-3 text-xs text-foreground-subtle`,children:y(`label`,{className:`flex items-center gap-1`,children:[r(`system.notificationConditionWidgets.louderThan`,`Louder than`),P(B,{type:`number`,min:xt,max:0,step:3,className:`w-20`,value:String(i.dbThreshold??St),onChange:e=>a({dbThreshold:Number(e.target.value)})}),`dBFS`]})}),y(`div`,{className:`flex flex-wrap items-center gap-3 text-xs text-foreground-subtle`,children:[y(`label`,{className:`flex items-center gap-1`,children:[r(`system.notificationConditionWidgets.hits`,`Hits`),P(B,{type:`number`,min:1,max:100,step:5,className:`w-16`,value:String(i.hitPercent),onChange:e=>a({hitPercent:Number(e.target.value)})}),r(`system.notificationConditionWidgets.hitsPercentDefault`,{value:ut.hitPercent})]}),y(`label`,{className:`flex items-center gap-1`,children:[r(`system.notificationConditionWidgets.over`),P(B,{type:`number`,min:1,max:300,step:5,className:`w-16`,value:String(i.samplingSeconds),onChange:e=>a({samplingSeconds:Number(e.target.value)})}),r(`system.notificationConditionWidgets.secondsDefault`,{value:ut.samplingSeconds})]})]}),P(`p`,{className:`text-[11px] text-foreground-subtle`,children:r(`system.notificationConditionWidgets.dbfsHint`,{min:xt})})]}),ht(t)?P(`p`,{className:`text-[11px] text-warning`,children:r(`system.notificationConditionWidgets.withNeitherASoundNor`,`With neither a sound nor a level threshold this can never match — every sample would be a hit, so the engine refuses it rather than notifying on silence.`)}):null]})}function $f({value:e,onChange:t}){let{t:n}=H(),r=e?.values??[],i=e?.maxDistance??1,a=e=>t(e.length>0?{values:e,maxDistance:i}:void 0),o=e=>t(r.length>0?{values:r,maxDistance:e}:void 0),s=fu().filter(e=>!r.includes(e));return y(`div`,{className:`mt-1 space-y-1.5`,children:[P(Vf,{value:r,placeholder:n(`system.notificationConditionWidgets.plateText`,`Plate text…`),onChange:a}),s.length>0&&y(`div`,{className:`flex flex-wrap items-center gap-1`,children:[P(`span`,{className:`text-[10px] text-foreground-subtle`,children:n(`system.notificationConditionWidgets.seen`,`Seen:`)}),s.slice(0,12).map(e=>P(`button`,{type:`button`,onClick:()=>a([...r,e]),className:`rounded border border-border px-1.5 py-0.5 text-[10px] text-foreground-subtle hover:bg-surface-hover hover:text-foreground`,children:e},e))]}),y(`label`,{className:`flex items-center gap-2 text-[11px] text-foreground-subtle`,children:[n(`system.notificationConditionWidgets.maxDistance`,`Max distance`),P(B,{type:`number`,min:0,max:3,step:1,value:i,className:`max-w-[5rem]`,onChange:e=>{let t=Number(e.target.value);o(Number.isFinite(t)?Math.max(0,Math.min(3,t)):1)}})]})]})}function ep({gateable:e,value:t,onChange:n}){let{t:r}=H(),i=Lf(),a=e.find(e=>e.id===t?.deviceId),o=new Set(t?.states??[]),s=e=>{let t=Number(e);if(!Number.isFinite(t)||t===0)return n(void 0);n({deviceId:t,states:[]})},c=e=>{if(t===void 0)return;let r=new Set(o);r.has(e)?r.delete(e):r.add(e),n(r.size===0?void 0:{deviceId:t.deviceId,states:[...r]})};return y(`div`,{className:`mt-1 space-y-2`,children:[P(Mn,{value:t===void 0?``:String(t.deviceId),options:[{value:``,label:r(`system.notificationConditionWidgets.noDeviceGate`,`— no device gate —`)},...e.map(e=>({value:String(e.id),label:e.name}))],onChange:e=>s(e.target.value)}),a!==void 0&&P(`div`,{className:`flex flex-wrap gap-1.5`,children:a.states.map(e=>P(`button`,{type:`button`,onClick:()=>c(e),className:o.has(e)?`rounded-md border border-primary bg-primary/10 px-2 py-0.5 text-[11px] text-primary`:`rounded-md border border-border px-2 py-0.5 text-[11px] text-foreground-subtle`,children:i(e)},e))}),a!==void 0&&a.states.length===0&&P(`p`,{className:`text-[10px] text-foreground-subtle mt-0.5`,children:r(`system.notificationConditionWidgets.thisDeviceReportsNoState`,`This device reports no state the gate can read, so it cannot arm a rule.`)}),t!==void 0&&P(`p`,{className:`text-[10px] text-foreground-subtle mt-0.5`,children:r(`system.notificationConditionWidgets.theRuleIsSilentWhile`,`The rule is silent while the device is in any other state — including when its state cannot be read at all.`)})]})}function tp(e,t){let n=t(e.verdict);return e.latched?`${n} · ${t(`latched`)}`:n}function np({scenes:e,value:t,onChange:n}){let{t:r}=H(),i=Lf(),a=e.find(e=>e.sceneId===t?.sceneId),o=r=>{if(r===``)return n(void 0);let i=e.find(e=>e.sceneId===r);if(i===void 0)return n(void 0);n({sceneId:r,deviceId:i.deviceId,requiredState:t?.requiredState??`diverged`,...t?.latched===void 0?{}:{latched:t.latched}})},s=e=>{t!==void 0&&n({...t,requiredState:e===`matched`?`matched`:`diverged`})},c=e=>{if(t!==void 0){if(e===``){let{latched:e,...r}=t;return n(r)}n({...t,latched:e===`latched`})}};return e.length===0?P(`p`,{className:zf,children:r(`notificationRules.scene.none`,`No scenes yet — create one on the Scenes page.`)}):y(`div`,{className:`mt-1 space-y-2`,children:[P(Mn,{value:t?.sceneId??``,options:[{value:``,label:r(`notificationRules.scene.noGate`,`— no scene gate —`)},...e.map(e=>({value:e.sceneId,label:`${e.cameraName} · ${e.label} — ${tp(e,i)}`}))],onChange:e=>o(e.target.value)}),t!==void 0&&y(`div`,{className:`flex flex-wrap items-center gap-2`,children:[y(`label`,{className:`flex items-center gap-2 text-[11px] text-foreground-subtle`,children:[r(`notificationRules.scene.onlyWhile`,`Only while it is`),P(Mn,{value:t.requiredState,options:[{value:`diverged`,label:i(`diverged`)},{value:`matched`,label:i(`matched`)}],onChange:e=>s(e.target.value)})]}),y(`label`,{className:`flex items-center gap-2 text-[11px] text-foreground-subtle`,children:[r(`notificationRules.scene.read`,`Read`),P(Mn,{value:t.latched===void 0?``:t.latched?`latched`:`live`,options:[{value:``,label:a===void 0?r(`notificationRules.scene.readOwn`,`The scene's own setting`):`${r(`notificationRules.scene.readOwn`,`The scene's own setting`)} (${i(a.emit)})`},{value:`latched`,label:i(`latched`)},{value:`live`,label:i(`live`)}],onChange:e=>c(e.target.value)})]})]}),a!==void 0&&y(`p`,{className:`text-[10px] text-foreground-subtle mt-0.5`,children:[r(`notificationRules.scene.rightNow`,`Right now:`),` `,tp(a,i)]}),t!==void 0&&a===void 0&&P(`p`,{className:`text-[10px] text-foreground-subtle mt-0.5`,children:r(`notificationRules.scene.missing`,`This scene no longer exists — pick another or remove the gate.`)})]})}var rp={days:[0,1,2,3,4,5,6],minute:480},ip=[{value:1,get label(){return V.t(`helpers.notificationSystemEventDelivery.wd_mon`)}},{value:2,get label(){return V.t(`helpers.notificationSystemEventDelivery.wd_tue`)}},{value:3,get label(){return V.t(`helpers.notificationSystemEventDelivery.wd_wed`)}},{value:4,get label(){return V.t(`helpers.notificationSystemEventDelivery.wd_thu`)}},{value:5,get label(){return V.t(`helpers.notificationSystemEventDelivery.wd_fri`)}},{value:6,get label(){return V.t(`helpers.notificationSystemEventDelivery.wd_sat`)}},{value:0,get label(){return V.t(`helpers.notificationSystemEventDelivery.wd_sun`)}}];function ap(e){let t=Math.floor(e/60),n=e%60;return`${String(t).padStart(2,`0`)}:${String(n).padStart(2,`0`)}`}function op(e){let[t,n]=e.split(`:`),r=Number(t)*60+Number(n);return Number.isFinite(r)?Math.max(0,Math.min(1439,r)):0}function sp(e){if(typeof e!=`object`||!e||!(`data`in e))return;let t=e.data;if(!(typeof t!=`object`||!t||!(`code`in t)))return typeof t.code==`string`?t.code:void 0}function cp(e){let t=Object.entries(e).map(([e,t])=>`${e} ${String(t)}`);return t.length>0?V.t(`helpers.notificationSystemEventDelivery.dropped`,{parts:t.join(`, `)}):null}function lp(e,t,n,r=`rule`){if(e===`error`)return sp(n)===`NOT_FOUND`?{lines:[`This hub does not serve summary rules yet — update @camstack/server first. A rule saved now would be stored without its summary, and stay instant.`]}:{lines:[`The preview could not be read: ${n instanceof Error?n.message:String(n)}`]};if(e!==`success`||t===void 0)return null;let i=[];if(r===`section`&&t.split===void 0&&i.push(`This hub does not send per-category summaries yet — update @camstack/server first. Until then it sends one message.`),t.empty)i.push(`Nothing to report right now — no notification would be sent.`);else if(t.split===`section`&&t.rows!==void 0){let e=t.rows.length;i.push(`${String(e)} notification${e===1?``:`s`} would be sent now, one per category:`);for(let e of t.rows)i.push(`${e.title}\n${e.text}`)}else i.push(`${String(t.count)} item(s) would be sent now:\n${t.text}`);let a=cp(t.dropped);return a!==null&&i.push(a),t.excludedGroups.includes(`backups-exports`)&&i.push(`Backups and exports are completed jobs, not a state — they are not in a summary.`),{lines:i}}function up(e,t){return{...e,schedule:t}}function dp(e,t){let{split:n,...r}=e;return t===`section`?{...r,split:t}:r}function fp(e){return ap(e)}function pp(e){return op(e)}function mp(){return{days:[1,2,3,4,5],startMinute:540,endMinute:1080}}function hp(e){return{days:[...rp.days],minute:e}}var gp=`Always active — add a window to restrict when the rule fires.`;function _p({value:e,onChange:t,mode:n=`windows`,defaultMinute:r=rp.minute,emptyHint:i}){return n===`times`?P(yp,{value:e,onChange:t,defaultMinute:r}):P(vp,{value:e,onChange:t,emptyHint:i??gp})}function vp({value:e,onChange:t,emptyHint:n}){let{t:r}=H(),i=e?.windows??[],a=e?.invert??!1,o=(n,r)=>{if(n.length===0){t(void 0);return}t({windows:n,...r?{invert:!0}:{},...e?.timezone?{timezone:e.timezone}:{}})},s=()=>o([...i,mp()],a),c=e=>o(i.filter((t,n)=>n!==e),a),l=(e,t)=>o(i.map((n,r)=>r===e?t:n),a);return y(`div`,{className:`mt-1 space-y-2`,"data-testid":`schedule-field-windows`,children:[i.length===0?P(`p`,{className:zf,children:n}):i.map((e,t)=>P(bp,{window:e,onChange:e=>l(t,e),onRemove:()=>c(t)},t)),y(`div`,{className:`flex items-center gap-3`,children:[y(`button`,{type:`button`,onClick:s,className:`flex items-center gap-1 rounded-md bg-surface-hover px-2 py-1 text-[11px] text-foreground-subtle hover:text-foreground`,children:[P(Ie,{className:`h-3 w-3`}),` `,r(`system.notificationScheduleField.addWindow`)]}),i.length>0&&y(`label`,{className:`flex items-center gap-1.5 text-[11px] text-foreground-subtle`,children:[P(`input`,{type:`checkbox`,checked:a,onChange:e=>o([...i],e.target.checked),className:`accent-primary`}),r(`system.notificationScheduleField.activeOutsideTheWindows`,`Active outside the windows`)]})]})]})}function yp({value:e,onChange:t,defaultMinute:n}){let{t:r}=H(),i=e?.timezone,a=e===void 0?{times:[],approximated:!1}:It(e);if(a===null)return y(`div`,{className:`mt-1 space-y-2`,"data-testid":`schedule-field-times-fallback`,children:[P(`p`,{className:zf,children:r(`system.notificationScheduleField.invertedScheduleShownAsBands`,`Inverted schedule — shown as bands. Clear the invert flag (or the windows) to author punctual times.`)}),P(vp,{value:e,onChange:t,emptyHint:gp})]});let o=a.times,s=e=>{if(e.length===0){t(void 0);return}t(rt(e,i))};return y(`div`,{className:`mt-1 space-y-2`,"data-testid":`schedule-field-times`,children:[a.approximated&&P(`p`,{className:`text-[10px] text-foreground-subtle mt-0.5`,"data-testid":`schedule-field-times-approximated`,children:r(`system.notificationScheduleField.shownAsSendAtTimes`,`Shown as send-at times from each window's end (when the summary fires). Edit or save to store them as punctual one-minute windows.`)}),o.length===0?P(`p`,{className:zf,children:r(`system.notificationScheduleField.noTimesYetAddOne`,`No times yet — add one to send on those days at that clock time.`)}):o.map((e,t)=>P(xp,{time:e,index:t,onChange:e=>s(o.map((n,r)=>r===t?e:n)),onRemove:o.length>1?()=>s(o.filter((e,n)=>n!==t)):void 0},t)),y(`button`,{type:`button`,onClick:()=>s([...o,hp(n)]),className:`flex items-center gap-1 rounded-md bg-surface-hover px-2 py-1 text-[11px] text-foreground-subtle hover:text-foreground`,"data-testid":`schedule-field-add-time`,children:[P(Ie,{className:`h-3 w-3`}),` `,r(`system.notificationScheduleField.addTime`)]})]})}function bp({window:e,onChange:t,onRemove:n}){let{t:r}=H();return y(`div`,{className:`space-y-1.5 rounded-md border border-border p-2`,children:[y(`div`,{className:`flex items-center gap-2 text-xs`,children:[P(`input`,{type:`time`,value:fp(e.startMinute),onChange:n=>t({...e,startMinute:pp(n.target.value)}),className:`rounded-md border border-border bg-background px-1 py-0.5`}),P(`span`,{className:`text-foreground-subtle`,children:`→`}),P(`input`,{type:`time`,value:fp(e.endMinute),onChange:n=>t({...e,endMinute:pp(n.target.value)}),className:`rounded-md border border-border bg-background px-1 py-0.5`}),P(`span`,{className:`flex-1`}),P(`button`,{type:`button`,onClick:n,"aria-label":r(`system.notificationScheduleField.removeWindow`,`Remove window`),className:`text-foreground-subtle hover:text-danger`,children:P(ie,{className:`h-3.5 w-3.5`})})]}),P(Sp,{days:e.days,onToggle:n=>{let r=e.days.includes(n)?e.days.filter(e=>e!==n):[...e.days,n];r.length!==0&&t({...e,days:r})}})]})}function xp({time:e,index:t,onChange:n,onRemove:r}){let{t:i}=H();return y(`div`,{className:`space-y-1.5 rounded-md border border-border p-2`,children:[y(`div`,{className:`flex items-center gap-2 text-xs`,children:[P(`span`,{className:`text-foreground-subtle`,children:i(`system.notificationScheduleField.at`,`At`)}),P(`input`,{type:`time`,value:ap(e.minute),onChange:t=>n({...e,minute:op(t.target.value)}),className:`rounded-md border border-border bg-background px-1 py-0.5`,"data-testid":`schedule-field-time-${String(t)}`}),P(`span`,{className:`flex-1`}),r!==void 0&&P(`button`,{type:`button`,onClick:r,"aria-label":i(`system.notificationScheduleField.removeTime`,`Remove time`),className:`text-foreground-subtle hover:text-danger`,children:P(ie,{className:`h-3.5 w-3.5`})})]}),P(Sp,{days:e.days,onToggle:t=>{let r=e.days.includes(t)?e.days.filter(e=>e!==t):[...e.days,t];r.length!==0&&n({...e,days:r})}})]})}function Sp({days:e,onToggle:t}){return P(`div`,{className:`flex flex-wrap gap-1`,children:ip.map(n=>P(`button`,{type:`button`,onClick:()=>t(n.value),className:`rounded px-1.5 py-0.5 text-[10px] ${e.includes(n.value)?`bg-primary text-primary-foreground`:`bg-surface-hover text-foreground-subtle`}`,children:n.label},n.value))})}function Cp(e){return e>=8}a();function wp(e){if(typeof e!=`object`||!e)return;let t=Reflect.get(e,`windows`);if(!(!Array.isArray(t)||t.length===0))return e}function Tp(e){return e.type===`multiselect`}function Ep(e){let t=e.suggestions;return t===void 0||t.length===0?[]:t.map(e=>({value:e,label:e}))}function Dp(e){return e.map(e=>({value:e.value,label:e.label,...e.description===void 0?{}:{description:e.description},...e.iconId===void 0?{}:{iconId:e.iconId}}))}function Op(e){return Array.isArray(e)?e.filter(e=>typeof e==`string`):[]}function kp({field:e,values:t,onChange:n,onChangeMany:r,disabled:i,translationFn:a,onTestField:o,externalProbe:s,allFields:c,onAction:l}){let{t:u}=H();if(e.type===`tags`){if(!Er(e,t,c))return null;let r=e.creatable!==!1;return P(An,{mode:`multi`,options:Ep(e),value:Op(t[e.key]),onChange:t=>n(e.key,t),disabled:i===!0||e.disabled===!0,creatable:r,...e.createLabel===void 0?{}:{createLabel:e.createLabel},...e.maxTags===void 0?{}:{maxItems:e.maxTags},label:jp(e.label,a),description:e.description===void 0?void 0:jp(e.description,a),placeholder:e.placeholder??u(`formBuilder.formBuilder.searchOrAdd`,`Search or add…`),testId:`config-tags-${e.key}`})}if(e.type===`schedule`){if(!Er(e,t,c))return null;let r=jp(e.label,a),i=e.description===void 0?void 0:jp(e.description,a),o=e.mode===`times`?`times`:`windows`;return y(`div`,{className:`space-y-1`,"data-testid":`config-schedule-${e.key}`,children:[r!==void 0&&P(`label`,{className:`block text-[11px] font-medium text-foreground-subtle`,children:r}),i!==void 0&&P(`p`,{className:`text-[10px] text-foreground-subtle`,children:i}),P(_p,{mode:o,value:wp(t[e.key]),onChange:t=>n(e.key,t)})]})}return Tp(e)&&(Cp(e.options.length)||e.creatable===!0)?Er(e,t,c)?P(An,{mode:`multi`,options:Dp(e.options),value:Op(t[e.key]),onChange:t=>n(e.key,t),disabled:i===!0||e.disabled===!0,creatable:e.creatable===!0,...e.createLabel===void 0?{}:{createLabel:e.createLabel},...e.maxItems===void 0?{}:{maxItems:e.maxItems},label:jp(e.label,a),description:e.description===void 0?void 0:jp(e.description,a),placeholder:e.placeholder??u(`formBuilder.formBuilder.searchToAdd`,`Search to add…`),testId:`config-multiselect-${e.key}`,listboxId:`msel-${e.key}`}):null:P(cr,{field:e,values:t,onChange:n,onChangeMany:r,disabled:i,translationFn:a,onTestField:o,externalProbe:s,allFields:c,onAction:l})}function Ap(e){return/^[a-zA-Z0-9_]+(\.[a-zA-Z0-9_]+)+$/.test(e)}function jp(e,t){if(e!==void 0)return t&&Ap(e)?t(e):e}function Mp({section:e,values:t,onChange:n,onChangeMany:r,disabled:i,translationFn:a,onTestField:o,probeResults:s,onAction:c}){let[l,u]=f(e.defaultCollapsed??!1),d=e.style===`accordion`;if(e.fields.reduce((n,r)=>n+ +!!Er(r,t,e.fields),0)===0)return null;let p=e.fields,m=e.columns??2,h=m===1?`grid-cols-1`:m===3?`grid-cols-1 @[480px]:grid-cols-2 @[880px]:grid-cols-3`:m===4?`grid-cols-1 @[480px]:grid-cols-2 @[1140px]:grid-cols-4`:`grid-cols-1 @[480px]:grid-cols-2`,g=e.fields.length===1&&e.fields[0]?.type===`widget`?e.fields[0]:void 0,_=g!==void 0||!e.title&&!e.description;return y(`div`,{className:`@container rounded-lg border border-border bg-surface p-3`,style:{containerType:`inline-size`},"data-settings-section":e.id,children:[!_&&y(`div`,{className:[`flex items-center justify-between mb-2`,d?`cursor-pointer`:``].join(` `),onClick:d?()=>u(e=>!e):void 0,children:[y(`div`,{children:[e.title&&P(`h3`,{className:`text-[11px] font-semibold text-foreground-subtle uppercase tracking-wider`,children:jp(e.title,a)}),e.description&&P(`p`,{className:`text-[10px] text-foreground-subtle mt-0.5`,children:jp(e.description,a)})]}),d&&P(`span`,{className:`text-foreground-subtle text-xs ml-2`,children:l?`▸`:`▾`})]}),!(l&&!_)&&(g===void 0?P(E,{children:P(`div`,{className:`grid ${h} gap-x-3 gap-y-2.5`,children:p.map(l=>P(kp,{field:l,values:t,onChange:n,onChangeMany:r,disabled:i,translationFn:a,onTestField:o,externalProbe:s?.[l.key],allFields:e.fields,onAction:c},l.key))})}):P(cr,{field:g,values:t,onChange:n,onChangeMany:r,disabled:i,translationFn:a,onTestField:o,externalProbe:s?.[g.key],allFields:e.fields,onAction:c},g.key))]})}function Np({schema:e,values:t,onChange:n,disabled:r,translationFn:i,onTestField:a,probeResults:o,onClearProbe:s,onAction:c,visibilityContext:l}){let u=l?{...l,...t}:t,d=(e,r)=>{n({...t,[e]:r}),s?.(e)},f=e=>{n({...t,...e});for(let t of Object.keys(e))s?.(t)};return P(`div`,{className:`space-y-4`,children:e.sections.map((e,t)=>P(Mp,{section:e,values:u,onChange:d,onChangeMany:f,disabled:r,translationFn:i,onTestField:a,probeResults:o,onAction:c},`${e.id}-${t}`))})}function Pp({pendingCount:e,onSave:t,onDiscard:n,saving:r=!1,saveLabel:i=`Save`,discardLabel:a=`Discard`}){let{t:o}=H();return e<=0?null:y(`div`,{className:`sticky bottom-0 -mb-3 flex items-center justify-between gap-3 rounded-lg border border-primary/40 bg-primary/5 px-3 py-2 shadow-sm z-10`,children:[P(`span`,{className:`text-xs text-foreground`,children:o(`formBuilder.saveBar.unsavedChanges`,{count:e})}),y(`div`,{className:`flex items-center gap-2`,children:[P(`button`,{type:`button`,onClick:n,disabled:r,className:`inline-flex items-center rounded-md border border-border px-2.5 py-1 text-xs text-foreground-subtle hover:bg-surface-hover disabled:opacity-50`,children:a}),P(`button`,{type:`button`,onClick:t,disabled:r,className:`inline-flex items-center rounded-md bg-primary px-3 py-1 text-xs font-medium text-primary-foreground hover:bg-primary/90 disabled:opacity-50`,children:r?o(`formBuilder.formSaveBar.saving`,`Saving…`):i})]})]})}function Fp({tabs:e,activeId:t,onChange:n,countByTab:r,pendingByTab:i}){return e.length===0?null:P(`div`,{className:`flex flex-wrap items-center gap-1 border-b border-border shrink-0`,children:e.map(e=>{let a=e.id===t,o=r?.get(e.id)??0,s=i?.get(e.id)??0;return y(`button`,{type:`button`,onClick:()=>n(e.id),className:`relative shrink-0 px-3 py-1.5 text-xs font-medium rounded-t-md transition-colors -mb-px border-b-2 whitespace-nowrap ${a?`text-primary border-primary bg-primary/5`:`text-foreground-subtle border-transparent hover:text-foreground hover:bg-surface-hover`}`,children:[e.label,o>0&&y(`span`,{className:`ml-1.5 text-[10px] opacity-60`,children:[`(`,o,`)`]}),s>0&&P(`span`,{className:`ml-1.5 inline-flex h-1.5 w-1.5 rounded-full bg-primary`})]},e.id)})})}a();function Ip({schema:e,values:t,pendingKeys:n,onChange:r,onAction:i,onSave:a,onDiscard:o,disabled:s,activeSubTab:c,onSubTabChange:l,flattenTabs:u=!1,visibilityContext:p,hideSaveBar:m=!1}){let h=e.tabs??[],g=d(()=>{let t=new Map;for(let n of e.sections){let e=n.tab??`general`,r=t.get(e)??[];r.push(n),t.set(e,r)}return t},[e.sections]),_=new Set(h.map(e=>e.id)),v=[...h,...[...g.keys()].filter(e=>!_.has(e)).map(e=>({id:e,label:e,icon:`wrench`,order:100}))],b=v[0]?.id??`general`,[x,S]=f(b),C=l!==void 0,w=new Set(v.map(e=>e.id)),T=M(new Set);for(let e of w)T.current.add(e);let E=T.current,D=(e=>e&&(w.has(e)||E.has(e))?e:b)(C?c:x),O=e=>{C?l(e):S(e)},k=g.get(D)??[],A={sections:k.length<=1?k.length===1?[{...k[0],title:``}]:k:k.every(e=>!e.title)?[{...k[0],title:``,fields:k.flatMap(e=>e.fields)}]:k},j=m?null:P(Pp,{pendingCount:n.length,onSave:()=>a(n),onDiscard:()=>o(n),saving:s});if(u||v.length<=1)return y(`div`,{className:`flex flex-col gap-3`,children:[P(Np,{schema:e,values:t,onChange:r,onAction:i,disabled:s,visibilityContext:p}),j]});let N=new Map,F=new Map;for(let[e,t]of g){N.set(e,t.length);let r=new Set,i=e=>{for(let t of e)if(`key`in t&&typeof t.key==`string`&&r.add(t.key),t.type===`group`)i(t.fields);else if(t.type===`sub-tabs`)for(let e of t.tabs)i(e.fields)};for(let e of t)i(e.fields);let a=n.filter(e=>r.has(e)).length;a>0&&F.set(e,a)}return y(`div`,{className:`flex flex-col gap-3`,children:[P(Fp,{tabs:v.map(e=>({id:e.id,label:e.label})),activeId:D,onChange:O,countByTab:N,pendingByTab:F}),P(ir,{tabKey:D,children:P(Np,{schema:A,values:t,onChange:r,onAction:i,disabled:s,visibilityContext:p})}),j]})}var Lp=`device-export`,Rp=`export`,zp=`Export`;function Bp(e){return e.type===`separator`||e.type===`info`||e.type===`object-array`||e.type===`widget`||e.type===`addon-action-button`||e.type===`device-action-button`?!1:e.type===`group`?e.fields.some(Bp):e.type===`sub-tabs`?e.tabs.some(e=>e.fields.some(Bp)):e.writerCapName===Lp}function Vp(e){return e.tab===`export`?!0:e.fields.some(Bp)}var Hp=`host/extensions-panel`;function Up(e){return e.type===`widget`?e.widgetId===Hp:e.type===`group`?e.fields.some(Up):e.type===`sub-tabs`?e.tabs.some(e=>e.fields.some(Up)):!1}function Wp(e){return e.fields.some(Up)}function Gp(e,t){return!t&&e!==void 0&&mt.includes(e)}function Kp(e){return e.location!==`top-tab`&&e.location!==`hero`&&!Vp(e)&&!Wp(e)}function qp(e,t,n,r){return!r||Gp(t,n)?!0:(e??[]).some(Kp)}function Jp(e,t){for(let n of e){if(n.type===`group`){Jp(n.fields,t);continue}if(n.type===`sub-tabs`){for(let e of n.tabs)Jp(e.fields,t);continue}if(!(`value`in n))continue;let e=n.value===void 0?n.default:n.value;e!==void 0&&(t[n.key]=e)}}function Yp(e){let t={};for(let n of e)Jp(n.fields,t);return t}a();function Xp(e,t){return t&&t===`admin`?e:!0}function Zp(e){if(!e)return null;let t={sections:[...e.sections].toSorted((e,t)=>{let n=e.tab??`general`,r=t.tab??`general`;return n===r?Vp(e)&&Vp(t)?e.id.localeCompare(t.id):(e.order??0)-(t.order??0):n.localeCompare(r)})};return e.tabs?{...t,tabs:e.tabs}:t}function Qp(e){return e.type===`separator`||e.type===`info`||e.type===`button`||e.type===`widget`||e.type===`addon-action-button`||e.type===`device-action-button`||e.type===`account-sign-in`||e.type===`secret-presence`}function $p(e){return e.key}function em(e){if(!Qp(e))return e.value}function tm(e){return Qp(e)?null:e}function nm(e,t){for(let n of e)if(t(n),n.type===`group`)nm(n.fields,t);else if(n.type===`sub-tabs`)for(let e of n.tabs)nm(e.fields,t)}function rm(e){if(!e)return{};let t={};for(let n of e.sections)nm(n.fields,e=>{let n=$p(e);n!==null&&(t[n]=em(e))});return t}function im(e,t){if(!e)return null;let n=null;for(let r of e.sections)if(nm(r.fields,e=>{if(n!==null||$p(e)!==t)return;let r=tm(e);r&&r.writerCapName&&r.writerAddonId&&(n={capName:r.writerCapName,addonId:r.writerAddonId})}),n!==null)break;return n}function am(e){return{...e,fields:e.fields.map(om)}}function om(e){return e.type===`separator`||e.type===`info`||e.type===`button`||e.type===`object-array`?e:{...e,readonlyField:!0}}function sm(e,t){return e&&{...e,sections:e.sections.map(e=>({...e,fields:e.fields.map(e=>{let n=tm(e);return n?Xp(t,n.minRole)?e:om(e):e})}))}}function cm({deviceId:e,sectionFilter:t,activeSubTab:n,onSubTabChange:r,flattenSubTabs:i,subTabGrouping:a}){let{t:o}=H(),c=j(),{user:l}=Wl(),u=l?.isAdmin===!0,f=M(!1),{data:m,isLoading:h}=Hr({deviceId:e},{refetchInterval:()=>f.current?!1:2500,enabled:Number.isFinite(e)}),{data:g}=Mr({deviceId:e},{enabled:Number.isFinite(e)}),_=m?.settings??null,v=m?.live??null,b=d(()=>{if(!_&&!v)return null;let e=_?.sections??[],n=(v?.sections??[]).map(am),r=[...e,...n],i=t?r.filter(t):r.filter(Kp);if(i.length===0)return null;if(a){let e=i.map(e=>({...e,tab:a.groupOf(e)})),t=new Set(e.map(e=>e.tab)),n=a.tabs.filter(e=>t.has(e.id));return n.length>0?{tabs:n,sections:e}:{sections:e}}let o=new Set;for(let e of i)o.add(e.tab??`general`);let s=[..._?.tabs??[],...(v?.tabs??[]).filter(e=>!(_?.tabs??[]).some(t=>t.id===e.id))].filter(e=>o.has(e.id));return s.length>0?{tabs:s,sections:i}:{sections:i}},[_,v,t,a]),x=d(()=>Yp([..._?.sections??[],...v?.sections??[]]),[_,v]),S=d(()=>Zp(b),[b]),C=d(()=>sm(S,u),[S,u]),w=d(()=>rm(C),[C]),T=Nr(),E=or(),D=Fn(),O=Jn(),k=Gn({onSuccess:()=>{c.invalidateQueries({queryKey:[[`deviceManager`,`getDeviceAggregate`]]})}}),A={isPending:k.isPending,mutate:t=>{k.mutate({deviceId:e,changes:[...t]})}},N=Kl({schema:C,serverValues:w,onImmediateSave:p(e=>{let t=Object.entries(e).map(([e,t])=>{let n=im(C,e);return n?{writerCapName:n.capName,writerAddonId:n.addonId,key:e,value:t}:null}).filter(e=>e!==null);t.length>0&&A.mutate(t)},[C,A]),onDeferredSave:p(async t=>{let n=Object.entries(t).map(([e,t])=>{let n=im(C,e);return n?{writerCapName:n.capName,writerAddonId:n.addonId,key:e,value:t}:null}).filter(e=>e!==null);if(n.length!==0)try{let t=await k.mutateAsync({deviceId:e,changes:n});if(t.failures.length>0)throw Error(t.failures.map(e=>e.error).join(`; `))}finally{await c.invalidateQueries({queryKey:[[`deviceManager`,`getDeviceAggregate`]]})}},[C,k,e,c])}),{values:F,pendingKeys:I,handleChange:ee,handleSave:L,handleDiscard:te}=N;f.current=N.editingPaused;let ne=wc(),re=M(L),ie=M(te);re.current=L,ie.current=te;let ae=ne?.register,oe=k.isError?k.error instanceof Error?k.error.message:String(k.error):null,R=I.join(`\0`);if(s(()=>{if(ae===void 0)return;let e=R===``?[]:R.split(`\0`);return ae({id:`export`,dirty:e.length>0,saving:k.isPending,error:oe,save:()=>(re.current(e),Promise.resolve()),discard:()=>ie.current(e)})},[ae,R,k.isPending,oe]),h)return y(`div`,{className:`flex items-center justify-center py-12 text-foreground-subtle`,children:[P(Re,{className:`h-4 w-4 animate-spin mr-2`}),P(`span`,{className:`text-xs`,children:o(`device.deviceAggregateSection.loadingDeviceAggregate`,`Loading device aggregate…`)})]});if(!C||C.sections.length===0)return P(`div`,{className:`text-xs text-foreground-subtle italic py-4 text-center`,children:o(`device.deviceAggregateSection.noAggregateContributionsForThis`,`No aggregate contributions for this device.`)});async function se(t,n,r){if(t===`regenerate-rtsp-token`){let t=[`rtspUrl:`,`regenerateToken:`].find(e=>n.startsWith(e));if(!t)throw Error(`regenerate-rtsp-token: unrecognised key "${n}" (expected "rtspUrl:<streamId>" or "regenerateToken:<streamId>")`);let r=n.slice(t.length);if(!r)throw Error(`regenerate-rtsp-token: key "${n}" has no streamId after prefix`);let i=Gt(e,r);await T.mutateAsync({brokerId:i}),c.invalidateQueries({queryKey:[[`deviceManager`,`getDeviceAggregate`]]});return}if(t===`test-probe`){if(!g)return{status:`error`,error:o(`device.deviceAggregateSection.metadataNotLoaded`)};try{return await D.mutateAsync({addonId:g.addonId,type:g.type,key:n,value:r})}catch(e){return{status:`error`,error:e instanceof Error?e.message:String(e)}}}if(t===`refresh-probe`){if(!n.startsWith(`probedInfo:`))throw Error(`refresh-probe: unrecognised key "${n}" (expected "probedInfo:<streamId>")`);let t=n.slice(11);if(!t)throw Error(`refresh-probe: key "${n}" has no streamId after prefix`);let r=Gt(e,t),i=await E.mutateAsync({brokerId:r});return c.invalidateQueries({queryKey:[[`deviceManager`,`getDeviceAggregate`]]}),i}if(t===`device-custom-action`){let t=await O.mutateAsync({deviceId:e,action:n,input:r});return c.invalidateQueries({queryKey:[[`deviceManager`,`getDeviceAggregate`]]}),t}throw Error(`[device-aggregate] unknown action "${t}"`)}return P(Ip,{schema:C,values:F,pendingKeys:I,onChange:ee,onAction:se,onSave:L,onDiscard:te,hideSaveBar:ne!==null,disabled:A.isPending,activeSubTab:n,onSubTabChange:r,flattenTabs:i,visibilityContext:x})}a();function lm({deviceId:e,onClose:t}){let{t:n}=H(),[r,i]=f(`info`),{data:a}=Mr({deviceId:e},{enabled:e>0}),o=Pr(e),s=Ws(o.presence,o.list),c=r===`history`&&!s?`info`:r,l=typeof a?.name==`string`&&a.name.length>0?a.name:`#${String(e)}`,u=typeof a?.name==`string`?a.name:``,d=typeof a?.location==`string`?a.location:``,p=[[`info`,n(`deviceQuickDetail.tabInfo`,{defaultValue:`Device info`})],[`export`,n(`deviceQuickDetail.tabExport`,{defaultValue:`Export`})],...s?[[`history`,n(`deviceQuickDetail.tabHistory`,{defaultValue:`History`})]]:[]];return P(hr,{open:!0,onOpenChange:e=>!e&&t(),children:P(Dr,{width:`lg`,scroll:`body`,children:y(Tc,{deviceId:e,seed:a==null?null:{name:u,location:d,role:typeof a.role==`string`?a.role:null,display:a.display},showOpenFull:!0,onClose:t,children:[P(rr,{children:P(Kr,{children:l})}),P(`div`,{className:`mt-3 flex items-center gap-1 rounded-md bg-surface-hover p-0.5 w-fit`,children:p.map(([e,t])=>P(`button`,{type:`button`,onClick:()=>i(e),className:`px-2.5 py-1 rounded text-[11px] font-medium transition-colors ${c===e?`bg-surface text-foreground shadow-sm`:`text-foreground-subtle hover:text-foreground`}`,children:t},e))}),P(Fr,{className:`mt-3`,children:y(Kn,{deviceId:e,device:a??void 0,children:[P(`div`,{className:c===`info`?void 0:`hidden`,children:P(uc,{})}),P(`div`,{className:c===`export`?void 0:`hidden`,children:P(cm,{deviceId:e,sectionFilter:Vp})}),s?P(`div`,{className:c===`history`?void 0:`hidden`,children:P(Us,{deviceId:e})}):null]})})]})})})}function um({children:e}){let[t,n]=f(null),r=p(e=>n(e),[]),i=p(()=>n(null),[]);return y(Ln,{open:r,children:[e,t===null?null:P(lm,{deviceId:t,onClose:i})]})}a();function dm({tabs:e,active:t,onChange:n}){return P(`div`,{className:`flex rounded-lg border border-border bg-surface p-0.5 gap-0.5`,children:e.map(e=>P(`button`,{type:`button`,onClick:()=>n(e.id),className:[`flex-1 rounded-md px-3 py-1.5 text-xs font-medium transition-colors`,t===e.id?`bg-primary/12 text-primary`:`text-foreground-subtle hover:text-foreground hover:bg-surface-hover`].join(` `),children:e.label},e.id))})}function fm(e){let t=e.formats;if(!t)return``;let n=Object.values(t).filter(e=>e!==void 0&&e.sizeMB>0).map(e=>e.sizeMB);if(n.length===0)return``;let r=Math.min(...n),i=Math.max(...n);return r===i?`${r} MB`:`${r}-${i} MB`}function pm(e){return`${e.inputSize.width}x${e.inputSize.height}`}function mm(e){return e.formats?Object.keys(e.formats).filter(t=>e.formats[t]!==void 0):[]}function hm({entry:e,selected:t,onSelect:n,disabled:r}){let{t:i}=H(),a=fm(e),o=pm(e),s=mm(e);return y(`button`,{type:`button`,onClick:n,disabled:r,className:[`w-full text-left rounded-lg border p-3 transition-all`,t?`border-primary bg-primary/5 ring-1 ring-primary/30`:`border-border bg-background hover:border-foreground-subtle/40 hover:bg-surface-hover/50`,r?`opacity-50 cursor-not-allowed`:`cursor-pointer`].join(` `),children:[P(`div`,{className:`flex items-start justify-between gap-2`,children:y(`div`,{className:`flex-1 min-w-0`,children:[y(`div`,{className:`flex items-center gap-2`,children:[P(`span`,{className:`text-xs font-semibold text-foreground truncate`,children:e.name}),t&&P(me,{className:`h-3.5 w-3.5 text-primary shrink-0`})]}),P(`p`,{className:`text-[10px] text-foreground-subtle mt-0.5 line-clamp-2`,children:e.description})]})}),y(`div`,{className:`flex items-center gap-3 mt-2 flex-wrap`,children:[y(`span`,{className:`inline-flex items-center gap-1 text-[10px] text-foreground-subtle`,children:[P(be,{className:`h-3 w-3`}),o]}),a&&P(`span`,{className:`text-[10px] text-foreground-subtle`,children:a}),s.length>0&&P(`div`,{className:`flex gap-1`,children:s.map(e=>P(`span`,{className:`text-[9px] uppercase rounded bg-surface border border-border px-1 py-0.5 text-foreground-subtle font-mono`,children:e},e))}),e.labels.length>0&&P(`span`,{className:`text-[10px] text-foreground-subtle`,children:i(`common.labels`,{count:e.labels.length})})]})]})}function gm({field:e,value:t,onChange:n,disabled:r}){let{t:i}=H(),a=e.catalog??[],o=a.length>0,s=Qt(a).length>0,c=e.allowCustomPath!==!1||e.allowCustom===!0,l=[...o?[{id:`catalog`,label:i(`formBuilder.modelSelector.models`,`Models ({{length}})`,{length:a.length})}]:[],...c?[{id:`custom`,label:i(`formBuilder.modelSelector.customPath`,`Custom Path`)}]:[]],[u,d]=f(o?`catalog`:`custom`),p=t==null?``:String(t);return y(`div`,{className:`space-y-3`,children:[l.length>1&&P(dm,{tabs:l,active:u,onChange:d}),u===`catalog`&&o&&s&&P(zr,{catalog:a,value:p,onChange:e=>n(e),disabled:r||e.disabled}),u===`catalog`&&o&&!s&&P(`div`,{className:`space-y-1.5 max-h-[320px] overflow-y-auto pr-1`,children:a.filter(e=>e.legacy!==!0).map(t=>P(hm,{entry:t,selected:p===t.id,onSelect:()=>n(t.id),disabled:r||e.disabled},t.id))}),u===`catalog`&&!o&&y(`div`,{className:`rounded-md border border-info/30 bg-info/5 px-3 py-2 flex items-start gap-2`,children:[P(Le,{className:`h-3.5 w-3.5 text-info shrink-0 mt-0.5`}),P(`p`,{className:`text-[11px] text-foreground-subtle leading-relaxed`,children:i(`formBuilder.modelSelector.noPredefinedModelsAvailableUse`,`No predefined models available. Use the Custom Path tab to specify a model file path or URL.`)})]}),u===`custom`&&c&&y(`div`,{className:`space-y-2`,children:[P(`input`,{type:`text`,className:`w-full rounded-md border border-border bg-background px-3 py-2 text-sm text-foreground focus:border-primary focus:ring-1 focus:ring-primary/30 outline-none disabled:opacity-50`,placeholder:i(`formBuilder.modelSelector.enterPathLikeDataModels`,`Enter path like /data/models/custom.onnx or https://...`),value:p,disabled:r||e.disabled,onChange:e=>n(e.target.value)}),e.acceptFormats&&e.acceptFormats.length>0&&y(`p`,{className:`text-[10px] text-foreground-subtle`,children:[i(`formBuilder.modelSelector.acceptedFormats`,`Accepted formats:`),` `,e.acceptFormats.join(`, `)]})]}),(e.compatibilityNote||e.conversionGuideUrl)&&y(`div`,{className:`flex items-start justify-between gap-3 pt-1`,children:[e.compatibilityNote&&y(`p`,{className:`flex items-start gap-1 text-[10px] text-foreground-subtle`,children:[P(Le,{className:`h-3 w-3 mt-0.5 shrink-0`}),e.compatibilityNote]}),e.conversionGuideUrl&&y(`a`,{href:e.conversionGuideUrl,target:`_blank`,rel:`noopener noreferrer`,className:`flex items-center gap-1 text-[11px] text-primary hover:underline shrink-0`,children:[i(`formBuilder.modelSelector.howToConvertYourModel`,`How to convert your model`),P(I,{className:`h-3 w-3`})]})]})]})}function _m({to:e}){let{search:t}=J();return P(Y,{to:`${e}${t}`,replace:!0})}a();function vm(){return V.t(`helpers.keychainRevealHost.forbidden`)}function ym(e){if(typeof e!=`object`||!e)return null;let t=Reflect.get(e,`data`);if(typeof t!=`object`||!t)return null;let n=Reflect.get(t,`code`);return typeof n==`string`?n:null}function bm(e){let t=ym(e);if(t===`FORBIDDEN`||t===`UNAUTHORIZED`)return vm();let n=e instanceof Error?e.message:String(e);return n.length>0?V.t(`helpers.keychainRevealHost.failedWith`,{message:n}):V.t(`helpers.keychainRevealHost.failed`)}function xm({children:e}){let t=bn();return P(Dn,{reveal:p(async e=>{try{return(await t.mutateAsync({ref:e})).value}catch(e){throw Error(bm(e))}},[t]),children:e})}a();function Sm(){let e=ze(),t=j(),[n,r]=f(()=>e.isConnected()?`connected`:`disconnected`),i=M(!1),[a,o]=f(0),[c,l]=f([]);s(()=>e.subscribeConnectionEvents(e=>{r(t=>(t!==`connected`&&e===`connected`&&i.current&&o(e=>e+1),e!==`connected`&&(i.current=!0),e))}),[e]),s(()=>{a!==0&&t.invalidateQueries({queryKey:[[`addons`,`getLastRestart`]]})},[a,t]);let{data:u}=nr(void 0,{enabled:n===`connected`&&a>0,staleTime:0,refetchOnMount:!1,refetchOnWindowFocus:!1}),d=M(null);return s(()=>{if(u==null||u.requestedAt===d.current)return;d.current=u.requestedAt;let e=wm(u);l(t=>[...t,e]);let t=window.setTimeout(()=>{l(t=>t.filter(t=>t.id!==e.id))},6e3);return()=>window.clearTimeout(t)},[u]),P(E,{children:c.length>0&&P(Cm,{toasts:c})})}function Cm({toasts:e}){return P(`div`,{className:`fixed top-[calc(env(safe-area-inset-top)+1rem)] right-[calc(env(safe-area-inset-right)+1rem)] z-50 flex flex-col gap-2 max-w-sm w-full pointer-events-none`,children:e.map(e=>y(`div`,{className:`pointer-events-auto flex items-start gap-2 px-3 py-2.5 rounded-md border border-green-500/30 bg-green-500/10 shadow-lg backdrop-blur-sm`,children:[P(Be,{className:`w-4 h-4 shrink-0 mt-0.5 text-green-400`}),y(`div`,{children:[P(`div`,{className:`text-[11px] font-semibold text-foreground`,children:e.title}),P(`div`,{className:`text-[10px] text-foreground-subtle mt-0.5`,children:e.message})]})]},e.id))})}function wm(e){let t=`restart-${e.requestedAt}`;if(e.kind===`framework-update`&&e.packageName!==void 0&&e.toVersion!==void 0){let n=e.fromVersion===void 0?`v${e.toVersion}`:`v${e.fromVersion} → v${e.toVersion}`;return{id:t,title:V.t(`system.reconnectOverlay.frameworkUpdated`,`Framework updated`),message:V.t(`system.reconnectOverlay.isNow`,`{{packageName}} is now {{fromTo}}.`,{packageName:e.packageName,fromTo:n})}}return{id:t,title:V.t(`system.reconnectOverlay.serverRestarted`,`Server restarted`),message:e.requestedBy===void 0?V.t(`system.reconnectOverlay.manualRestartCompleted`,`Manual restart completed.`):V.t(`system.reconnectOverlay.manualRestartByCompleted`,`Manual restart by {{requestedBy}} completed.`,{requestedBy:e.requestedBy})}}var Tm=`/system/settings`,Em=[{path:`/system/secrets`,tab:`secrets`},{path:`/system/capabilities`,tab:`capabilities`}];function Dm(e,t=``){let n=new URLSearchParams(t);return n.delete(`tab`),n.set(`tab`,e),`${Tm}?${n.toString()}`}function Om({tab:e}){let{search:t,hash:n}=J();return P(Y,{to:`${Dm(e,t)}${n}`,replace:!0})}a();var km={info:{bg:`bg-info/10`,border:`border-info/30`,icon:Le},warning:{bg:`bg-warning/10`,border:`border-warning/30`,icon:le},critical:{bg:`bg-danger/10`,border:`border-danger/30`,icon:Me}};function Am({toast:e,onDismiss:t}){let n=km[e.severity]??km.info,r=n.icon;return s(()=>{let n=e.duration??5e3;if(n<=0)return;let r=setTimeout(()=>t(e.id),n);return()=>clearTimeout(r)},[e.id,e.duration,t]),y(`div`,{className:`flex items-start gap-3 px-4 py-3 rounded-lg border ${n.border} ${n.bg} shadow-lg backdrop-blur-sm animate-in slide-in-from-right-5 fade-in duration-200`,children:[P(r,{className:`h-4 w-4 shrink-0 mt-0.5 text-foreground-subtle`}),y(`div`,{className:`flex-1 min-w-0`,children:[P(`div`,{className:`text-xs font-semibold text-foreground`,children:e.title}),P(`div`,{className:`text-[11px] text-foreground-subtle mt-0.5`,children:e.message})]}),P(`button`,{type:`button`,onClick:()=>t(e.id),className:`shrink-0 p-0.5 rounded hover:bg-surface-hover transition-colors`,children:P(Oe,{className:`h-3.5 w-3.5 text-foreground-subtle`})})]})}function jm(){let[e,t]=f([]),n=p(e=>{t(t=>t.filter(t=>t.id!==e))},[]);return Bn(void 0,{onData:e=>{let n=e,r=`toast-${Date.now()}-${Math.random().toString(36).slice(2,8)}`;t(e=>[...e,{...n,id:r,timestamp:Date.now()}])}}),e.length===0?null:P(`div`,{className:`fixed bottom-[calc(env(safe-area-inset-bottom)+1rem)] right-[calc(env(safe-area-inset-right)+1rem)] z-50 flex flex-col gap-2 max-w-sm w-full pointer-events-none`,children:e.map(e=>P(`div`,{className:`pointer-events-auto`,children:P(Am,{toast:e,onDismiss:n})},e.id))})}function Mm(e){return(t,n,r)=>e(t,{...typeof n==`string`?{defaultValue:n}:{defaultValue_one:n.one,defaultValue_other:n.other},...r})}var Nm=(e,t,n)=>Mm(V.t.bind(V))(e,t,n);a();function Pm({children:e}){let{t}=H();return P(He,{t:d(()=>Mm(t),[t]),children:e})}a();function Fm(e){if(typeof e!=`object`||!e)return;let{data:t}=e;return t?.code}function Im(e,t){let n=Fm(e);return n===`UNAUTHORIZED`||n===`FORBIDDEN`?!0:/UNAUTHORIZED|FORBIDDEN/.test(t)}function Lm(e,t,n,r){let[i,a]=f(!1),[o,c]=f(null);return s(()=>{if(a(!1),c(null),!t){a(!0);return}let i=!1;e.init().catch(()=>void 0);let o=t=>{e.awaitConnected().then(()=>{i||a(!0)},e=>{if(i)return;let s=e instanceof Error?e.message:String(e);if(Im(e,s)){if(t&&r!==void 0){r().then(e=>{if(!i){if(e){o(!1);return}console.warn(`[boot-gate] logout: probe UNAUTHORIZED and the refresh was refused`),n()}},()=>{i||(console.warn(`[boot-gate] logout: probe UNAUTHORIZED and recovery failed`),n())});return}console.warn(`[boot-gate] logout: probe UNAUTHORIZED after a successful refresh`,s),n();return}c(s),a(!0)})};return o(!0),()=>{i=!0}},[e,t,n,r]),{bootReady:i,bootError:o}}a();var Rm=3e4;function zm(e){let t=M(e);t.current=e,s(()=>{let e=null,n=()=>{if(document.visibilityState===`hidden`){e=Date.now();return}if(document.visibilityState===`visible`&&e!==null){let n=Date.now()-e;e=null,n>=Rm&&t.current()}},r=()=>{t.current()},i=e=>{e.persisted&&t.current()};return document.addEventListener(`visibilitychange`,n),window.addEventListener(`online`,r),window.addEventListener(`pageshow`,i),()=>{document.removeEventListener(`visibilitychange`,n),window.removeEventListener(`online`,r),window.removeEventListener(`pageshow`,i)}},[])}a();function Bm(){let{t:e}=H();return y(`div`,{role:`status`,"aria-busy":`true`,"aria-label":e(`layouts.addonPageLoader.loading`,`Loading page`),"data-testid":`addon-page-loading`,className:`flex flex-col gap-4 p-2 sm:p-4`,children:[P(wr,{className:`h-7 w-48`}),P(wr,{className:`h-5 w-72 max-w-full`}),P(wr,{className:`h-40`})]})}function Vm({message:e}){let{t}=H();return P(`div`,{className:`p-2 sm:p-4`,"data-testid":`addon-page-error`,children:P(Cn,{title:t(`layouts.addonPageLoader.failedTitle`,`This page could not be shown`),message:e})})}var Hm=class extends _{state={error:null,resetKey:this.props.resetKey};static getDerivedStateFromError(e){return{error:e instanceof Error?e:Error(String(e))}}static getDerivedStateFromProps(e,t){return e.resetKey===t.resetKey?null:{error:null,resetKey:e.resetKey}}componentDidCatch(e,t){console.error(`[addon-page] ${this.props.resetKey} crashed`,e,t.componentStack)}render(){return this.state.error===null?this.props.children:P(Vm,{message:this.state.error.message})}};function Um({pageKey:e,children:t}){return P(Hm,{resetKey:e,children:P(w,{fallback:P(Bm,{}),children:t})})}a();function Wm(e){let t=new Set,n=new Set,r=e=>e.page.remoteName.includes(e.addonId.replace(/[^a-zA-Z0-9]+/g,`_`)),i=[...e.filter(r),...e.filter(e=>!r(e))],a=[];for(let e of i){let r=`${e.addonId}::${e.page.id}`;t.has(r)||n.has(e.page.path)||(t.add(r),n.add(e.page.path),a.push({id:e.page.id,addonId:e.addonId,label:e.page.label,icon:e.page.icon,path:e.page.path,remoteName:e.page.remoteName,bundle:e.page.bundle,bundleUrl:e.bundleUrl,...e.page.section===void 0?{}:{section:e.page.section},...e.page.sectionLabel===void 0?{}:{sectionLabel:e.page.sectionLabel}}))}return a}var Gm=new Map,Km=new Map,qm=new Set;function Jm(e){return!e||typeof e!=`object`?!1:typeof e.default==`function`}async function Ym(e,t){let i=Gm.get(e);if(i)return i;let a=Km.get(e);if(a)return a;qm.has(e)||(In(),r([{name:e,entry:z(t),type:`module`}],{force:!1}),qm.add(e));let o=n(`${e}/page`).then(n=>{if(!Jm(n))throw Error(`Addon page remote ${e} (${t}) does not expose a default React component on './page'`);return Gm.set(e,n.default),Km.delete(e),n.default}).catch(t=>{throw Km.delete(e),t});return Km.set(e,o),o}function Xm(){let{t:e}=H(),{pagePath:t}=Ia(),n=Ma(),r=ze(),{data:i}=Ar(void 0),a=d(()=>i?Wm(i):void 0,[i]),o=a?.find(e=>e.path===`/addon/${t}`),c=o?.remoteName,l=o?.bundleUrl,[u,p]=f(null),[m,h]=f(null);return s(()=>{if(!c||!l)return;h(null);let e=Gm.get(c);if(e){p(()=>e);return}p(null);let t=!1;return Ym(c,l).then(e=>{t||p(()=>e)}).catch(e=>{t||h(e instanceof Error?e.message:String(e))}),()=>{t=!0}},[c,l]),a?o?m?P(Vm,{message:m}):u?P(Um,{pageKey:o.remoteName,children:P(u,{trpc:r.trpcClient,theme:{isDark:document.documentElement.classList.contains(`dark`)},navigate:e=>{n(e.startsWith(`/`)?e:`/${e}`)}})}):P(Bm,{}):P(`div`,{className:`flex items-center justify-center h-full text-foreground-subtle`,children:e(`layouts.addonPageLoader.addonPageNotFound`,`Addon page not found`)}):P(Bm,{})}function Zm({children:e}){return P(Wr,{value:Qm(Zn({})),children:e})}function Qm(e){return e.data===void 0?e.isPending?{status:`pending`}:{status:`unknown`,reason:e.isError?String(e.error):`no palette`}:e.data.status===`unknown`?{status:`unknown`,reason:e.data.reason}:{status:`ready`,palette:e.data}}function $m(){let e=mr(),{t}=H();return e.status===`unknown`?P(`p`,{role:`status`,className:`shrink-0 px-4 py-1 text-xs text-warning`,children:t(`pipeline.palette.unknown`,`The stored palette cannot be read ({{reason}}). Boxes use the bundled CamStack preset.`,{reason:e.reason})}):null}Qr();var eh=/\p{Mn}/gu;function th(e){return e.normalize(`NFD`).replace(eh,``).toLowerCase().trim()}var nh=[`device`,`page`,`integration`],rh=0,ih=1,ah=2,oh=3,sh=4,ch=5,lh=6,uh=7;function dh(e,t,n,r){return n.includes(r)?rh:e===r?ih:e.startsWith(r)?ah:e.split(/\s+/).some(e=>e.startsWith(r))?oh:e.includes(r)?sh:t.some(e=>e.includes(r))?ch:null}function fh(e,t){let n=0;for(let r=0;r<e.length&&n<t.length;r++)e[r]===t[n]&&n++;return n===t.length}function ph(e){return e<4?0:e<=7?1:e<=12?2:3}function mh(e,t,n){if(e===t)return 0;if(n<=0||Math.abs(e.length-t.length)>n)return null;let r=t.length,i=Array(r+1).fill(0),a=Array.from({length:r+1},(e,t)=>t),o=Array(r+1).fill(0);for(let s=1;s<=e.length;s++){o[0]=s;let c=s,l=e[s-1];for(let n=1;n<=r;n++){let r=t[n-1],u=l===r?0:1,d=Math.min((a[n]??1/0)+1,o[n-1]+1,(a[n-1]??1/0)+u);s>1&&n>1&&l===t[n-2]&&e[s-2]===r&&(d=Math.min(d,(i[n-2]??1/0)+1)),o[n]=d,d<c&&(c=d)}if(c>n)return null;let u=i;i=a,a=o,o=u}let s=a[r]??1/0;return s<=n?s:null}function hh(e,t){if(fh(e,t))return lh;let n=ph(t.length);if(n>0){for(let r of e.split(/\s+/))if(mh(r,t,n)!==null)return uh}return null}function gh(e,t,n=200){let r=th(t);if(r.length===0)return{groups:[],totalMatched:0,truncated:!1};let i=new Map;for(let t of e){let e=th(t.label),n=dh(e,(t.keywords??[]).map(th),(t.identifiers??[]).map(th),r)??hh(e,r);if(n===null)continue;let a=i.get(t.domain)??[];a.push({item:t,rank:n}),i.set(t.domain,a)}let a=0;for(let e of i.values())a+=e.length;let o=n,s=[];for(let e of nh){let t=i.get(e);if(!t||t.length===0||o<=0)continue;t.sort((e,t)=>e.rank-t.rank||e.item.label.localeCompare(t.item.label));let n=t.slice(0,o).map(e=>e.item);o-=n.length,s.push({domain:e,items:n})}return{groups:s,totalMatched:a,truncated:a>n}}function _h(e){return e.flatMap(e=>e.items)}function vh(e){let t=new Map;for(let n of e)t.set(n.id,n.name);let n=new Map;for(let r of e){let e=r.parentDeviceId;e!==null&&e!==r.id&&n.set(r.id,t.get(e)??`#${String(e)}`)}return n}function yh(e,t){return e.filter(e=>!e.adminOnly||t)}function bh({t:e,isAdmin:t}){let n=yh([{label:e(`nav.devices`,`Devices`),icon:L,path:`/devices`},{label:e(`nav.integrations`),icon:ue,path:`/integrations`},{label:e(`nav.build`,`Build-your-self`),icon:Qe,path:`/build`,adminOnly:!0},{label:e(`nav.locations`,`Locations`),icon:Je,path:`/locations`,adminOnly:!0},{label:e(`nav.viewer`,`Viewer`),icon:en,path:`/live`}],t),r=yh([{label:e(`nav.library`,`Library`),icon:tn,path:`/library`,adminOnly:!0,keywords:[`People`,`Vehicles`,`Events`,`Scenes`,`plates`,`faces`,`detection-intelligence`]},{label:e(`nav.recordings`,`Recordings`),icon:re,path:`/recordings`,adminOnly:!0}],t),i=yh([{label:e(`nav.nodes`,`Nodes`),icon:tt,path:`/system/nodes`,adminOnly:!0},{label:e(`nav.history`,`History`),icon:ee,path:`/system/history`,adminOnly:!0,keywords:[`charts`,`graphs`,`energy`,`temperature`,`metrics`,`trends`]},{label:e(`nav.pipeline`,`Pipeline`),icon:hn,path:`/system/pipeline`},{label:e(`system.addons`),icon:ge,path:`/system/addons`,adminOnly:!0},{label:e(`system.ai`,`AI`),icon:Se,path:`/system/ai`,adminOnly:!0}],t),a=yh([{label:e(`system.identity`,`Identity & Access`),icon:Ue,path:`/system/identity`,adminOnly:!0},{label:e(`system.network`,`Network`),icon:sn,path:`/system/network`,adminOnly:!0},{label:e(`system.integrations`,`Connectivity`),icon:ue,path:`/system/integrations`,adminOnly:!0},{label:e(`system.data`,`Data`),icon:ae,path:`/system/data`,adminOnly:!0},{label:e(`system.notifications`,`Notifications`),icon:se,path:`/system/notifications`,adminOnly:!0},{label:e(`system.calendars`,`Calendars`),icon:an,path:`/system/calendars`,adminOnly:!0},{label:e(`system.systemNav`,`System`),icon:Ye,path:Tm,adminOnly:!0},{label:e(`system.logs`,`Logs`),icon:Ve,path:`/system/logs`,adminOnly:!0},{label:e(`system.terminal`,`Terminal`),icon:ln,path:`/system/terminal`,adminOnly:!0}],t);return[{key:`top`,label:null,items:n},{key:`detection`,label:e(`nav.detectionSection`,`Detection`),items:r},{key:`cluster`,label:e(`nav.clusterSection`,`Cluster`),items:i},{key:`administration`,label:e(`system.title`,`Administration`),items:a}]}var xh={gauge:de,puzzle:ge,bot:ce,cpu:be,terminal:ln,box:Fe,boxes:Fe,monitor:en,wrench:je,activity:qe,plug:ue,"graduation-cap":te};function Sh(e){return xh[e]??ge}function Ch(e,t){for(let n of bh(t))for(let t of n.items)if(t.path===e)return{icon:t.icon,title:t.label,path:t.path};return null}var wh=` · `;function Th(e,t,n,r){let i=[`#${t}`];return r!==void 0&&i.push(r),e.stableId.length>0&&e.stableId!==n&&i.push(e.stableId),i.push(e.type),e.disabled&&i.push(`disabled`),i.join(wh)}function Eh(e,t=null){let n=vh(e),r=Cr(t);return e.map(e=>{let t=String(e.id),i=e.name||e.stableId||`#${t}`,a=n.get(e.id),o=r(e),s=o.kind===`resolved`?o.integration.name:``;return{key:`device:${t}`,domain:`device`,label:i,subtitle:Th(e,t,i,a),identifiers:[t,`#${t}`],keywords:[e.stableId,e.addonId,e.location??``,a??``,s].filter(e=>e.length>0),path:`/devices/${t}`,icon:Ur(e.type).icon}})}function Dh(e){return e.map(e=>({key:`integration:${e.id}`,domain:`integration`,label:e.name||e.addonId,subtitle:e.enabled?e.addonId:V.t(`helpers.searchItems.disabled`,{addonId:e.addonId}),keywords:[e.addonId,e.processState],path:`/integrations/${e.id}`}))}function Oh(e,t,n){let r=e.section?.trim();return r?t[r]??e.sectionLabel?.trim()??r:n}function kh(e,t,n){let r=e.flatMap(e=>e.items.map(t=>({key:`page:${t.path}`,domain:`page`,label:t.label,subtitle:e.label??void 0,path:t.path,icon:t.icon,...t.keywords!==void 0&&t.keywords.length>0?{keywords:t.keywords}:{}}))),i={detection:n.detection,cluster:n.cluster,administration:n.administration},a=t.map(e=>({key:`page:addon:${e.addonId}:${e.id}`,domain:`page`,label:e.label,subtitle:Oh(e,i,n.ungrouped),keywords:[e.addonId],path:e.path,icon:Sh(e.icon)}));return[...r,...a]}a();var Ah={device:{labelKey:`search.resultsList.devices`,icon:L},page:{labelKey:`search.resultsList.pages`,icon:rn},integration:{labelKey:`search.resultsList.integrations`,icon:ue}};function jh({groups:e,activeKey:t,query:n,totalMatched:r,truncated:i,onSelect:a,onHover:o}){let{t:c}=H(),l=M(null);if(s(()=>{t&&(l.current?.querySelector(`[data-key="${CSS.escape(t)}"]`))?.scrollIntoView({block:`nearest`})},[t]),n.trim().length===0)return null;if(e.length===0)return P(`div`,{className:`px-3 py-4 text-center text-[12px] text-foreground-subtle`,children:c(`search.resultsList.noResults`,{query:n})});let u=e.reduce((e,t)=>e+t.items.length,0);return y(E,{children:[P(`div`,{ref:l,role:`listbox`,className:`max-h-[60vh] overflow-y-auto py-1`,children:e.map(e=>{let n=Ah[e.domain],r=n.icon;return y(`div`,{className:`px-1 py-1`,children:[y(`div`,{className:`sticky top-0 z-10 flex items-center gap-1.5 bg-surface px-2 py-1 text-[10px] font-semibold uppercase tracking-widest text-foreground-subtle/60`,children:[P(r,{className:`h-3 w-3`}),c(n.labelKey)]}),e.items.map(e=>{let r=e.icon??n.icon,i=e.key===t;return y(`button`,{type:`button`,role:`option`,"aria-selected":i,"data-key":e.key,onMouseEnter:()=>o(e),onClick:()=>a(e),className:`flex w-full items-center gap-2.5 rounded-md px-2 py-1.5 text-left text-[12px] transition-colors ${i?`bg-primary/12 text-primary`:`text-foreground hover:bg-surface-hover`}`,children:[P(r,{className:`h-3.5 w-3.5 shrink-0 ${i?`text-primary`:`text-foreground-subtle`}`}),y(`span`,{className:`flex-1 min-w-0`,children:[P(`span`,{className:`block truncate font-medium`,children:e.label}),e.subtitle&&P(`span`,{className:`block truncate text-[10px] text-foreground-subtle`,children:e.subtitle})]})]},e.key)})]},e.domain)})}),i&&P(`div`,{className:`border-t border-border px-3 py-1.5 text-center text-[10px] text-foreground-subtle`,children:c(`search.truncatedResults`,`Showing first {{shown}} of {{total}} — refine your search.`,{shown:u,total:r})})]})}a();function Mh({navSections:e,addonPages:t,compact:n,onNavigated:r}){let{t:i}=H(),a=Ma(),o=M(null),c=M(null),l=M(null),[u,m]=f(null),[h,g]=f(``),[_,v]=f(0),[b,x]=f(!1),{data:S}=Gr({projection:`slim`}),{data:C}=lr(void 0),w=d(()=>{let n={detection:i(`nav.detectionSection`,`Detection`),cluster:i(`nav.clusterSection`,`Cluster`),administration:i(`system.title`,`Administration`),ungrouped:i(`nav.addonPages`,`Addon Pages`)};return[...Eh(S??[],C??null),...kh(e,t,n),...Dh(C??[])]},[S,C,e,t,i]),{groups:T,totalMatched:E,truncated:D}=d(()=>gh(w,h),[w,h]),O=d(()=>_h(T),[T]);s(()=>{v(0)},[h,w]),s(()=>{b&&o.current?.focus()},[b]);let k=p(()=>{x(!1),g(``),v(0)},[]),A=p(e=>{a(e.path),k(),o.current?.blur(),r?.()},[a,k,r]);s(()=>{function e(e){(e.metaKey||e.ctrlKey)&&e.key.toLowerCase()===`k`&&(e.preventDefault(),x(!0))}return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[]),s(()=>{if(!b)return;function e(e){if(!(e.target instanceof Node))return;let t=c.current?.contains(e.target)===!0,n=l.current?.contains(e.target)===!0;!t&&!n&&x(!1)}return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[b]);let j=b&&h.trim().length>0;s(()=>{if(!j){m(null);return}let e=()=>{let e=o.current?.getBoundingClientRect();e&&m({left:e.left,top:e.bottom+4,width:e.width})};return e(),window.addEventListener(`resize`,e),window.addEventListener(`scroll`,e,!0),()=>{window.removeEventListener(`resize`,e),window.removeEventListener(`scroll`,e,!0)}},[j]);let N=O[_]?.key??null,F=i(`search.placeholder`,`Search devices, pages, integrations…`),I=y(`div`,{className:`relative`,children:[P(Ae,{className:`pointer-events-none absolute left-2 top-1/2 h-3.5 w-3.5 -translate-y-1/2 text-foreground-subtle`}),P(`input`,{ref:o,type:`text`,value:h,placeholder:F,"aria-label":F,role:`combobox`,"aria-expanded":b&&h.trim().length>0,"aria-controls":`global-search-results`,onChange:e=>{g(e.target.value),x(!0)},onFocus:()=>x(!0),onKeyDown:e=>{if(e.key===`ArrowDown`)e.preventDefault(),O.length>0&&v(e=>(e+1)%O.length);else if(e.key===`ArrowUp`)e.preventDefault(),O.length>0&&v(e=>(e-1+O.length)%O.length);else if(e.key===`Enter`){e.preventDefault();let t=O[_];t&&A(t)}else e.key===`Escape`&&(e.preventDefault(),k(),o.current?.blur())},className:`w-full rounded-md border border-border bg-surface py-1.5 pl-7 pr-6 text-[12px] text-foreground placeholder:text-foreground-subtle/70 focus:outline-none focus:ring-1 focus:ring-primary/50`}),h.length>0&&P(`button`,{type:`button`,"aria-label":i(`search.globalSearch.clearSearch`,`Clear search`),onClick:()=>{g(``),o.current?.focus()},className:`absolute right-1.5 top-1/2 -translate-y-1/2 text-foreground-subtle hover:text-foreground`,children:P(Oe,{className:`h-3 w-3`})}),j&&u!==null&&$r(P(`div`,{ref:l,id:`global-search-results`,className:`fixed z-50 w-max max-w-[26rem] rounded-lg border border-border bg-surface shadow-xl`,style:{left:u.left,top:u.top,minWidth:u.width},children:P(jh,{groups:T,activeKey:N,query:h,totalMatched:E,truncated:D,onSelect:A,onHover:e=>{let t=O.findIndex(t=>t.key===e.key);t>=0&&v(t)}})}),document.body)]});return n?P(`div`,{ref:c,className:`px-1.5 pb-1.5`,children:b?P(`div`,{className:`fixed z-50 w-max min-w-72 max-w-[26rem]`,style:{left:`calc(env(safe-area-inset-left) + 3.5rem)`,top:`calc(env(safe-area-inset-top) + 3.5rem)`},children:I}):P(`button`,{type:`button`,onClick:()=>x(!0),"aria-label":F,title:F,className:`flex w-full items-center justify-center rounded-md px-0 py-2 text-foreground-subtle hover:bg-surface-hover hover:text-foreground transition-colors`,children:P(Ae,{className:`h-3.5 w-3.5 shrink-0`})})}):P(`div`,{ref:c,className:`px-2 pb-2`,children:I})}var Nh=/^(\d{1,3}\.){3}\d{1,3}$/;function Ph(e){let t=e.startsWith(`[`)&&e.endsWith(`]`)?e.slice(1,-1):e;return!!(Nh.test(t)||t.includes(`:`))}function Fh(e,t){return!t||Ph(e)?!1:e===t||e.endsWith(`.${t}`)}a();var Ih=`auth-webauthn/passkey-enrollment`,Lh=`camstack_passkey_prompt_dismissed:`,Rh=720*60*60*1e3;function zh(e){try{let t=localStorage.getItem(`${Lh}${e}`);if(!t)return!1;let n=Number(t);return Number.isFinite(n)?Date.now()-n<Rh:!1}catch{return!1}}function Bh(e){try{localStorage.setItem(`${Lh}${e}`,String(Date.now()))}catch{}}function Vh(){let{user:e}=Wl(),{t}=H(),n=ze(),r=kn(Ih),[i,a]=f(!1),[o,s]=f(!1),c=d(()=>e?zh(e.id):!0,[e]),l=tr.auth.listLoginMethods.useQuery().data?.find(e=>e.kind===`passkey`),u=l!==void 0&&Fh(window.location.hostname,l.rpId),m=e!==null&&u&&r!=null&&!c,h=T({queryKey:[`auth`,`listOwnPasskeys`],queryFn:()=>n.listOwnPasskeys(),enabled:m,staleTime:6e4}),g=p(()=>{e&&Bh(e.id),a(!0),s(!1)},[e]),_=p(()=>{s(!1),h.refetch()},[h]);return!m||i||h.data===void 0||h.data.length>0?null:y(`div`,{className:`shrink-0 border-b border-primary/20 bg-primary/5`,children:[y(`div`,{className:`flex items-center gap-2.5 px-3 py-2 text-xs text-foreground`,children:[P(nn,{className:`h-4 w-4 text-primary shrink-0`}),P(`span`,{className:`flex-1 min-w-0`,children:t(`passkeyPrompt.message`,`Save a passkey for faster sign-in?`)}),P(`button`,{onClick:()=>s(e=>!e),className:`rounded bg-primary px-2.5 py-1 text-[11px] font-semibold text-primary-foreground hover:bg-primary/90`,children:t(`passkeyPrompt.enrollNow`,`Enroll now`)}),P(`button`,{onClick:g,className:`inline-flex items-center gap-1 rounded border border-border px-2 py-1 text-[11px] text-foreground-subtle hover:text-foreground hover:bg-surface-hover`,children:t(`passkeyPrompt.notNow`,`Not now`)}),P(`button`,{onClick:g,"aria-label":t(`passkeyPrompt.notNow`,`Not now`),className:`p-1 rounded text-foreground-subtle hover:text-foreground`,children:P(Oe,{className:`h-3.5 w-3.5`})})]}),o&&P(`div`,{className:`px-3 pb-3`,children:y(`div`,{className:`max-w-xl`,children:[P(dr,{widgetId:Ih,host:`dashboard`}),P(`div`,{className:`mt-2 flex justify-end`,children:P(`button`,{onClick:_,className:`rounded border border-border px-2.5 py-1 text-[11px] text-foreground-subtle hover:text-foreground hover:bg-surface-hover`,children:t(`common.close`,`Close`)})})]})})]})}var Hh=6e4;function Uh(){let e=fr(void 0,{staleTime:Hh});return{info:e.data?.serverName??null,isLoading:e.isLoading}}a();var Wh=`system-config`,Gh=`hub`,Kh=`camstack_server_name_prompt_dismissed`;function qh(){try{return sessionStorage.getItem(Kh)===`1`}catch{return!1}}function Jh(){try{sessionStorage.setItem(Kh,`1`)}catch{}}function Yh(e){return e.isAdmin&&e.info!==null&&e.info.isDefault&&!e.dismissed}function Xh(){let{user:e}=Wl(),{info:t}=Uh(),[n,r]=f(qh);return Yh({isAdmin:e?.isAdmin===!0,info:t,dismissed:n})?P(Zh,{suggestion:t?.name??``,onLater:()=>{Jh(),r(!0)}}):null}function Zh({suggestion:e,onLater:t}){let{t:n}=H(),r=j(),i=ur(),[a,o]=f(e),[c,l]=f(null),u=M(null);s(()=>u.current?.focus(),[]);let d=p(async()=>{let e=Wt.safeParse(a);if(!e.success){l(e.error.issues[0]?.message??n(`serverName.invalid`,`Not a valid name`));return}l(null);try{await i.mutateAsync({addonId:Wh,nodeId:Gh,patch:{name:e.data}}),await r.invalidateQueries({queryKey:[[`system`,`info`]]}),await r.invalidateQueries({queryKey:[[`addonSettings`]]})}catch(e){l(e instanceof Error&&e.message.length>0?e.message:`Could not save`)}},[r,i,n,a]);return P(hr,{open:!0,onOpenChange:e=>!e&&t(),children:P(Dr,{children:y(`form`,{onSubmit:e=>{e.preventDefault(),i.isPending||d()},children:[y(rr,{children:[P(Kr,{children:n(`serverName.title`,`Name this server`)}),P(vr,{children:n(`serverName.description`,`Pick a name for this hub. It shows in the admin UI and on the apps’ sign-in screen. You can change it later in System settings.`)})]}),P(Fr,{children:P(qn,{label:n(`serverName.label`,`Server name`),...c===null?{}:{error:c},children:P(B,{ref:u,value:a,maxLength:48,onChange:e=>o(e.target.value),state:c===null?`default`:`error`,"aria-label":n(`serverName.label`,`Server name`)})})}),y(_r,{children:[P(Tn,{type:`button`,variant:`ghost`,onClick:t,disabled:i.isPending,children:n(`serverName.later`,`Later`)}),y(Tn,{type:`submit`,disabled:i.isPending||a.trim().length===0,children:[i.isPending&&P(Re,{className:`h-4 w-4 animate-spin`}),n(`common.save`,`Save`)]})]})]})})})}var Qh=4,$h=160,eg=320,tg=`env(safe-area-inset-top)`,ng=`env(safe-area-inset-bottom)`;function rg(e){let{rect:t,viewportWidth:n,viewportHeight:r}=e,i=Math.min(eg,n-16),a={position:`fixed`,left:Math.max(8,Math.min(t.left,n-8-i)),width:i,zIndex:9999};if(r-t.bottom>=t.top){let e=`max(${t.bottom+Qh}px, calc(${tg} + 8px))`;return{...a,top:e,maxHeight:`max(${$h}px, calc(100dvh - ${e} - ${ng} - 8px))`}}let o=`max(${r-t.top+Qh}px, calc(${ng} + 8px))`;return{...a,bottom:o,maxHeight:`max(${$h}px, calc(100dvh - ${o} - ${tg} - 8px))`}}function ig(e){return e===`totp`||e===`passkey`}function ag(e){if(!e.startsWith(`#`))return null;let t=new URLSearchParams(e.slice(1)),n=t.get(`challenge`);if(n!==null){if(n.length===0)return null;let e=(t.get(`factors`)??``).split(`,`).filter(ig);return e.length===0?null:{kind:`challenge`,challengeToken:n,factors:e}}let r=t.get(`error`);return r===`sso-not-linked`||r===`sso-state`?{kind:`error`,code:r,provider:t.get(`provider`)}:null}function og(e,t){switch(e){case`sso-not-linked`:return V.t(`helpers.ssoReturn.notLinked`,{provider:t??V.t(`helpers.ssoReturn.signInFallback`)});case`sso-state`:return V.t(`helpers.ssoReturn.state`)}}var sg={expired:`helpers.ssoReturn.link.expired`,provider:`helpers.ssoReturn.link.provider`,session:`helpers.ssoReturn.link.session`,conflict:`helpers.ssoReturn.link.conflict`,state:`helpers.ssoReturn.link.state`};function cg(e){let t=new URLSearchParams(e),n=t.get(`linked`);if(n!==null&&n.length>0)return{kind:`linked`,provider:n};let r=t.get(`linkError`);return r===null?null:{kind:`error`,message:V.t(sg[r]??`helpers.ssoReturn.link.failed`)}}var lg=`camstack:sso-return`,ug=`camstack:sso-ack`,dg=`/sso-complete`,fg=1500,pg=520,mg=680;function hg(e){if(!e.startsWith(`#`))return null;let t=new URLSearchParams(e.slice(1)),n=t.get(`return`);t.delete(`return`);let r=t.toString();return n===`login`?r.length>0?{target:n,fragment:r}:null:n===`profile`&&r.length>0?{target:n,query:r}:null}function gg(e){return e.target===`login`?`/login#${e.fragment}`:`/system/my-access?${e.query}`}function _g(e){let t=new URL(e,`http://placeholder.invalid`);return t.searchParams.set(`popup`,`1`),/^[a-z][a-z0-9+.-]*:/i.test(e)?t.toString():`${t.pathname}${t.search}${t.hash}`}function vg(e=window){let t=Math.max(0,Math.round(e.screenX+(e.outerWidth-pg)/2)),n=Math.max(0,Math.round(e.screenY+(e.outerHeight-mg)/2));return[`popup=yes`,`width=${pg}`,`height=${mg}`,`left=${t}`,`top=${n}`,`toolbar=no`,`menubar=no`,`location=no`,`status=no`,`resizable=yes`,`scrollbars=yes`].join(`,`)}function yg(e){try{return window.open(e??`about:blank`,`camstack-sso`,vg())??null}catch{return null}}function bg(e){if(typeof e!=`object`||!e)return!1;let t=e;return t.target===`login`?typeof t.fragment==`string`:t.target===`profile`?typeof t.query==`string`:!1}function xg(e){if(typeof e!=`object`||!e)return!1;let t=e;return t.type===`camstack:sso-return`&&bg(t.completion)}function Sg(e,t,n){return t===null||e.source!==t||e.origin!==n?null:xg(e.data)?e.data.completion:null}var Cg=`camstack-sso`,wg=`camstack:sso-done`;function Tg(e,t){return e.target===`profile`?{target:`profile`,query:e.query}:t?{target:`login`}:null}function Eg(e){if(typeof e!=`object`||!e)return null;let t=e;if(t.type!==`camstack:sso-done`)return null;let n=Object.keys(t).sort().join(`,`);return t.target===`login`&&n===`target,type`?{target:`login`}:t.target===`profile`&&typeof t.query==`string`&&n===`query,target,type`?{target:`profile`,query:t.query}:null}function Dg(e){return typeof e==`object`&&!!e&&e.type===`camstack:sso-done-ack`}function Og(e){try{let t=e.location.origin;return typeof t==`string`?t:null}catch{return null}}function kg(){if(typeof BroadcastChannel>`u`)return null;try{let e=new BroadcastChannel(Cg);return{post:t=>e.postMessage(t),subscribe:t=>{let n=e=>t(e.data);return e.addEventListener(`message`,n),()=>e.removeEventListener(`message`,n)},close:()=>e.close()}}catch{return null}}var Ag=500;function jg(e,t,n=window,r={}){let i=n.location.origin,a=r.channel===void 0?kg():null,o=r.channel===void 0?a:r.channel,s=r.setInterval??((e,t)=>window.setInterval(e,t)),c=r.clearInterval??(e=>window.clearInterval(e)),l=!1,u=!1,d=r=>{let a=Sg(r,e,i);a===null||l||(l=!0,n.removeEventListener(`message`,d),e.postMessage({type:ug},i),t.onReturn(a))};n.addEventListener(`message`,d);let f=o?.subscribe(e=>{let n=Eg(e);n===null||l||(l=!0,o.post({type:`camstack:sso-done-ack`}),t.onDone?.(n))})??null,p=s(()=>{u||!e.closed||(u=!0,c(p),t.onClosed?.())},Ag);return()=>{n.removeEventListener(`message`,d),f?.(),a?.close(),c(p)}}function Mg(e,t,n){if(t===null||e.source!==t||e.origin!==n)return!1;let r=e.data;return typeof r==`object`&&!!r&&r.type===`camstack:sso-ack`}function Ng(e,t){return new Promise(n=>{let r=!1,i=t(()=>{r||(r=!0,i(),n(!0))});e.setTimeout(()=>{r||(r=!0,i(),n(!1))},fg)})}function Pg(e,t,n){let r=Ng(n,e=>{let r=r=>{Mg(r,t,n.origin)&&e()};return n.addEventListener(`message`,r),()=>n.removeEventListener(`message`,r)});try{let r={type:lg,completion:e};t.postMessage(r,n.origin)}catch{}return r}function Fg(e,t,n){let r=Ng(n,e=>t.subscribe(t=>{Dg(t)&&e()}));return t.post({type:wg,...e}),r}async function Ig(e,t){let n=t.opener!==null&&!t.opener.closed?t.opener:null;if(n!==null&&Og(n)===t.origin&&await Pg(e,n,t)){t.close();return}let r=e.target===`login`?new URLSearchParams(e.fragment).get(`token`):null,i=r!==null&&r.length>0,a=Tg(e,i);if(a!==null&&t.channel!==null&&(r!==null&&i&&await t.persistSession(r),await Fg(a,t.channel,t))){t.close();return}if(n!==null&&e.target===`profile`){let n=cg(`?${e.query}`);if(n?.kind===`error`){t.showResult({kind:`link-error`,message:n.message});return}t.close();return}t.continueAt(gg(e))}function Lg(e,t){return(t.length>0&&e.startsWith(t)?e.slice(t.length):e).replace(/\/+$/,``)===dg}var Rg=`camstack:broker-oauth`;function zg(e){if(typeof e!=`object`||!e)return!1;let t=e;return t.type===`camstack:broker-oauth`&&typeof t.ok==`boolean`}function Bg(e,t){return e.split(`{{brokerId}}`).join(encodeURIComponent(t))}function Vg(e,t,n=window){let r=n.location.origin,i=!1,a=e=>{i||(i=!0,n.removeEventListener(`message`,o),window.clearInterval(s),t(e))},o=t=>{t.origin!==r||t.source!==e||zg(t.data)&&a({ok:t.data.ok,...t.data.brokerId===void 0?{}:{brokerId:t.data.brokerId},...t.data.error===void 0?{}:{error:t.data.error}})};n.addEventListener(`message`,o);let s=window.setInterval(()=>{e.closed&&a({ok:!0})},500);return()=>{i=!0,n.removeEventListener(`message`,o),window.clearInterval(s)}}var Hg={open:e=>yg(e),assign:e=>window.location.assign(e),watch:(e,t)=>Vg(e,t)};function Ug(e,t,n=Hg){let r=z(_g(e)),i=n.open(r);if(i===null){n.assign(r);return}n.watch(i,e=>{t?.(e)})}function Wg(e,t,n){Ug(Bg(e,t),n)}var Gg=!1;function Kg(){return Gg}function qg(){Gg=!0}function Jg(e){return!e.read&&e.severity===`critical`}function Yg(e){return e.filter(Jg)}function Xg(e){return e!==void 0&&typeof e.href==`string`&&e.href.length>0}var Zg=/^\/addon\/[^/?#]+\/oauth\//;function Qg(e){return e.navigation===void 0?Zg.test(e.href):e.navigation===`server`}function $g({action:e,className:t,onActivate:n}){let r=j();return Qg(e)?P(`a`,{href:z(e.href),className:t,onClick:t=>{t.preventDefault(),n?.(t),Ug(e.href,()=>{r.invalidateQueries({queryKey:[[`alerts`]]}),r.invalidateQueries({queryKey:[[`broker`]]}),r.invalidateQueries({queryKey:[[`recordEntries`]]})})},children:e.label}):P($o,{to:e.href,className:t,onClick:n,children:e.label})}a(),Qr();var e_={info:Le,success:Be,warning:le,error:Me,critical:on},t_={info:`text-info`,success:`text-success`,warning:`text-warning`,error:`text-danger`,critical:`text-danger`},n_={active:`border-l-info`,"in-progress":`border-l-warning`,completed:`border-l-success`,failed:`border-l-danger`,dismissed:`border-l-foreground-subtle/30`};function r_(e){let t=Math.floor((Date.now()-e)/1e3);if(t<60)return V.t(`helpers.relativeTime.justNow`);let n=Math.floor(t/60);if(n<60)return V.t(`helpers.relativeTime.minutesAgo`,{count:n});let r=Math.floor(n/60);if(r<24)return V.t(`helpers.relativeTime.hoursAgo`,{count:r});let i=Math.floor(r/24);return V.t(`helpers.relativeTime.daysAgo`,{count:i})}function i_(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function a_(e){return typeof e==`string`&&e.length>0?e:void 0}function o_(e){if(i_(e.metadata)){let t=a_(e.metadata.nodeId)??a_(e.metadata.agentId);if(t!==void 0)return t}let t=e.source;if(t!==void 0&&!(t.type!==`node`&&t.type!==`agent`))return a_(t.id)}function s_({alert:e,onMarkRead:t,onDismiss:n}){let{t:r}=H(),i=e.severity in e_?e.severity:`info`,a=Xg(e.action)?e.action:void 0,o=e.status in n_?e.status:`active`,s=e_[i],c=t_[i],l=n_[o],{nodes:u}=pr(),d=o_(e),f=d===void 0?void 0:u.find(e=>e.id===d),p=d===void 0?void 0:f?.name??d;return y(`div`,{className:`flex items-start gap-2.5 px-3 py-2.5 border-l-2 ${l} ${e.read?`opacity-60`:``} hover:bg-surface-hover transition-colors`,children:[P(s,{className:`h-3.5 w-3.5 shrink-0 mt-0.5 ${c}`}),y(`div`,{className:`flex-1 min-w-0`,children:[y(`div`,{className:`flex items-center gap-1.5`,children:[P(`span`,{className:`text-[11px] font-semibold ${e.read?`text-foreground-subtle`:`text-foreground`}`,children:e.title}),!e.read&&P(`span`,{className:`h-1.5 w-1.5 rounded-full bg-primary shrink-0`})]}),p!==void 0&&P(`div`,{className:`text-foreground-subtle text-[10px] mt-0.5 truncate`,children:p}),P(`div`,{className:`text-[10px] text-foreground-subtle mt-0.5 line-clamp-2`,children:e.message}),a!==void 0&&P($g,{action:a,className:`inline-flex mt-1.5 items-center rounded-md bg-primary px-2 py-0.5 text-[10px] font-medium text-primary-foreground hover:bg-primary/90 transition-colors`,onActivate:e=>e.stopPropagation()}),e.status===`in-progress`&&e.progress!==void 0&&y(`div`,{className:`mt-1.5 flex items-center gap-2`,children:[P(`div`,{className:`flex-1 h-1 bg-surface-hover rounded-full overflow-hidden`,children:P(`div`,{className:`h-full bg-primary rounded-full transition-all duration-300`,style:{width:`${String(Math.min(100,Math.max(0,e.progress)))}%`}})}),y(`span`,{className:`text-[9px] text-foreground-subtle font-mono shrink-0`,children:[String(Math.round(e.progress)),`%`]})]}),P(`div`,{className:`text-[9px] text-foreground-subtle/60 mt-1`,children:r_(e.updatedAt)})]}),y(`div`,{className:`flex items-center gap-0.5 shrink-0`,children:[!e.read&&P(`button`,{type:`button`,onClick:n=>{n.stopPropagation(),t(e.id)},className:`p-1 rounded hover:bg-surface-hover transition-colors`,title:r(`ui.alertBell.markAsRead`,`Mark as read`),children:P(me,{className:`h-3 w-3 text-foreground-subtle`})}),e.status!==`in-progress`&&P(`button`,{type:`button`,onClick:t=>{t.stopPropagation(),n(e.id)},className:`p-1 rounded hover:bg-surface-hover transition-colors`,title:r(`ui.alertBell.dismiss`,`Dismiss`),children:P(Oe,{className:`h-3 w-3 text-foreground-subtle`})})]})]})}function c_({variant:e=`icon`,compact:t=!1}={}){let{t:n}=H(),[r,i]=f(!1),[a,o]=f(!1),c=M(null),l=M(null),u=j(),{data:d=0}=Pn(void 0,{refetchInterval:3e4}),{data:m=[],isLoading:h}=Un({limit:50},{enabled:r}),g=a?m:m.filter(e=>!e.read),_=m.filter(e=>e.read).length,v=()=>{u.invalidateQueries({queryKey:[[`alerts`]]})},b=gn({onSuccess:v}),x=Xr({onSuccess:v}),S=On({onSuccess:v});gr(`alert.created`,()=>{u.invalidateQueries({queryKey:[[`alerts`]]})}),gr(`alert.updated`,()=>{u.invalidateQueries({queryKey:[[`alerts`]]})}),s(()=>{if(!r)return;let e=e=>{let t=e.target;c.current&&!c.current.contains(t)&&l.current&&!l.current.contains(t)&&i(!1)};return document.addEventListener(`mousedown`,e),document.addEventListener(`touchstart`,e),()=>{document.removeEventListener(`mousedown`,e),document.removeEventListener(`touchstart`,e)}},[r]);let C=p(e=>{b.mutate({alertId:e})},[b]),w=p(e=>{e&&S.mutate({alertId:e})},[S]),T=p(()=>{x.mutate(void 0),i(!1)},[x]),E=g.filter(Jg),D=new Set(E.map(e=>e.id)),O=g.filter(e=>e.status===`in-progress`&&!D.has(e.id)),k=g.filter(e=>e.status!==`in-progress`&&!D.has(e.id)),[A,N]=f({}),F=p(()=>{let e=l.current;e&&N(rg({rect:e.getBoundingClientRect(),viewportWidth:window.innerWidth,viewportHeight:window.innerHeight}))},[]);return s(()=>{if(!r)return;F();let e=()=>F();return window.addEventListener(`resize`,e),window.addEventListener(`scroll`,e,!0),()=>{window.removeEventListener(`resize`,e),window.removeEventListener(`scroll`,e,!0)}},[r,F]),y(`div`,{children:[e===`sidebar`?y(`button`,{ref:l,type:`button`,onClick:()=>i(!r),className:`flex w-full items-center gap-2.5 rounded-md ${t?`justify-center px-0 py-2`:`px-2.5 py-1.5`} text-[12px] text-foreground-subtle hover:bg-surface-hover hover:text-foreground transition-colors`,title:t?d>0?n(`ui.alertBell.alertsUnread`,{count:d}):n(`ui.alertBell.alerts`):void 0,children:[y(`span`,{className:`relative inline-flex shrink-0`,children:[P(Ve,{className:`h-3.5 w-3.5`}),t&&d>0&&P(`span`,{className:`absolute -top-1 -right-1 h-2 w-2 rounded-full bg-primary`})]}),!t&&P(`span`,{className:`flex-1 text-left`,children:n(`ui.alertBell.alerts`,`Alerts`)}),!t&&d>0&&P(`span`,{className:`flex items-center justify-center h-4 min-w-4 px-1 rounded-full bg-primary text-primary-foreground text-[9px] font-bold leading-none`,children:d>99?`99+`:String(d)})]}):y(`button`,{ref:l,type:`button`,onClick:()=>i(!r),className:`relative p-1.5 rounded-md hover:bg-surface-hover text-foreground-subtle hover:text-foreground transition-colors`,"aria-label":n(`ui.alertBell.alerts`,`Alerts`),children:[P(Ve,{className:`h-4.5 w-4.5`}),d>0&&P(`span`,{className:`absolute -top-0.5 -right-0.5 flex items-center justify-center h-4 min-w-4 px-0.5 rounded-full bg-primary text-primary-foreground text-[9px] font-bold leading-none`,children:d>99?`99+`:String(d)})]}),r&&$r(y(`div`,{ref:c,style:A,className:`bg-surface border border-border rounded-lg shadow-xl flex flex-col overflow-hidden`,children:[y(`div`,{className:`flex items-center justify-between px-3 py-2 border-b border-border shrink-0`,children:[P(`span`,{className:`text-[12px] font-semibold text-foreground`,children:n(`ui.alertBell.alerts`,`Alerts`)}),y(`div`,{className:`flex items-center gap-2`,children:[_>0&&y(`label`,{className:`flex items-center gap-1 text-[10px] text-foreground-subtle cursor-pointer select-none`,children:[P(`input`,{type:`checkbox`,checked:a,onChange:e=>o(e.target.checked),className:`h-3 w-3 rounded border-border accent-primary cursor-pointer`}),n(`ui.alertBell.showRead`,`Show read`)]}),d>0&&y(`button`,{type:`button`,onClick:T,className:`flex items-center gap-1 text-[10px] text-primary hover:text-primary/80 transition-colors`,children:[P(dn,{className:`h-3 w-3`}),n(`ui.alertBell.markAllRead`,`Mark all read`)]})]})]}),y(`div`,{className:`flex-1 overflow-y-auto`,children:[h&&P(`div`,{className:`flex items-center justify-center py-8`,children:P(Re,{className:`h-4 w-4 animate-spin text-foreground-subtle`})}),!h&&g.length===0&&y(`div`,{className:`flex flex-col items-center justify-center py-8 text-foreground-subtle`,children:[P(Ve,{className:`h-6 w-6 mb-2 opacity-40`}),P(`span`,{className:`text-[11px]`,children:m.length>0?n(`ui.alertBell.noUnreadAlerts`,`No unread alerts`):n(`ui.alertBell.noAlerts`,`No alerts`)}),m.length>0&&!a&&P(`button`,{type:`button`,onClick:()=>o(!0),className:`text-[10px] text-primary mt-1 hover:underline`,children:n(`ui.alertBell.showRead`,{count:_})})]}),E.length>0&&y(`div`,{className:`border-b border-border`,children:[P(`div`,{className:`px-3 py-1.5 bg-danger/5`,children:P(`span`,{className:`text-[9px] font-semibold uppercase tracking-widest text-danger`,children:n(`ui.alertBell.urgent`,`Urgent`)})}),E.map(e=>P(s_,{alert:e,onMarkRead:C,onDismiss:w},e.id))]}),O.length>0&&y(`div`,{className:`border-b border-border`,children:[P(`div`,{className:`px-3 py-1.5 bg-surface-hover/50`,children:P(`span`,{className:`text-[9px] font-semibold uppercase tracking-widest text-foreground-subtle/60`,children:n(`ui.alertBell.inProgress`,`In Progress`)})}),O.map(e=>P(s_,{alert:e,onMarkRead:C,onDismiss:w},e.id))]}),k.map(e=>P(s_,{alert:e,onMarkRead:C,onDismiss:w},e.id))]})]}),document.body)]})}a(),Qr();function l_({alert:e,onMarkRead:t}){let{t:n}=H(),r=Xg(e.action)?e.action:void 0;return y(`div`,{className:`border-b border-border last:border-b-0 px-3 py-2.5`,children:[P(`div`,{className:`text-[12px] font-semibold text-foreground`,children:e.title}),P(`div`,{className:`text-[11px] text-foreground-muted mt-0.5`,children:e.message}),y(`div`,{className:`mt-2 flex flex-wrap items-center gap-2`,children:[r!==void 0&&P($g,{action:r,className:`inline-flex items-center justify-center rounded-md bg-primary px-2.5 py-1 text-[11px] font-medium text-primary-foreground hover:bg-primary/90 transition-colors`}),P(Tn,{type:`button`,variant:`ghost`,size:`sm`,onClick:()=>t(e.id),children:n(`ui.alertBell.markAsRead`,`Mark as read`)})]})]})}function u_(){let{t:e}=H(),t=j(),[n,r]=f(Kg()),{data:i=[],isLoading:a}=Un({limit:50}),o=d(()=>Yg(i),[i]),s=gn({onSuccess:p(()=>{t.invalidateQueries({queryKey:[[`alerts`]]})},[t])}),c=p(e=>{s.mutate({alertId:e})},[s]),l=p(()=>{qg(),r(!0)},[]);return a||n||o.length===0?null:$r(P(`div`,{className:`fixed inset-x-0 bottom-0 z-[10000] flex justify-center p-2 sm:p-4 pb-[max(0.5rem,env(safe-area-inset-bottom))] pointer-events-none`,"data-testid":`critical-alerts-on-load-panel`,children:y(`div`,{className:`pointer-events-auto w-full max-w-lg bg-surface border border-danger/30 rounded-lg shadow-xl flex flex-col max-h-[min(70dvh,32rem)] overflow-hidden`,role:`region`,"aria-labelledby":`critical-alerts-panel-title`,children:[y(`div`,{className:`flex items-start justify-between gap-2 px-3 py-2.5 border-b border-border shrink-0 bg-danger/5`,children:[y(`div`,{children:[P(`h2`,{id:`critical-alerts-panel-title`,className:`text-[12px] font-semibold text-foreground`,children:e(`ui.criticalAlertsPanel.title`,`Urgent alerts`)}),P(`p`,{className:`text-[10px] text-foreground-muted mt-0.5`,children:e(`ui.criticalAlertsPanel.subtitle`,`These need your attention.`)})]}),P(Hn,{type:`button`,variant:`ghost`,onClick:l,"aria-label":e(`ui.criticalAlertsPanel.close`,`Close`),"data-testid":`critical-alerts-panel-close`,icon:Oe})]}),P(`div`,{className:`flex-1 overflow-y-auto`,children:o.map(e=>P(l_,{alert:e,onMarkRead:c},e.id))})]})}),document.body)}a();function d_(){let e=Bc();return C(e.subscribe,e.getSnapshot,e.getSnapshot)}var f_=[`detection`,`cluster`,`administration`];function p_(e){return f_.includes(e)}function m_(e){let t=new Map,n=new Map,r=[];for(let i of e){let e=i.section?.trim();if(e===void 0||e.length===0){r.push(i);continue}if(p_(e)){let n=t.get(e)??[];n.push(i),t.set(e,n);continue}let a=n.get(e);a?a.pages.push(i):n.set(e,{label:i.sectionLabel?.trim()||e,pages:[i]})}return{known:t,custom:[...n.entries()].map(([e,t])=>({id:e,label:t.label,pages:t.pages})),ungrouped:r}}var h_=`camstack:last-path`,g_=512,__=[`/login`,`/change-password`,`/access-denied`,`/logout`];function v_(e){return!e.startsWith(`/`)||e.startsWith(`//`)||e.length>g_?!1:!__.some(t=>e===t||e.startsWith(t+`/`))}function y_(e){if(!(typeof window>`u`)&&v_(e))try{window.localStorage.setItem(h_,e)}catch{}}function b_(){if(typeof window>`u`)return null;try{let e=window.localStorage.getItem(h_);return e===null?null:v_(e)?e:null}catch{return null}}var x_=`/devices`;function S_(e){return e!==void 0&&v_(e)?e:b_()??x_}function C_(e){return e.split(`.`)[0]===`0`?`${e} beta`:e}function w_(e){if(e===null)return null;let t=e.trim();return t.length>0?t:null}function T_(e){let t=w_(e.productVersion),n=w_(e.serverVersion),r=w_(e.fallbackVersion);return t!==null&&n!==null?{kind:`both`,productLabel:C_(t),serverVersion:n}:t===null?n===null?r===null?{kind:`none`}:{kind:`fallback`,version:r}:{kind:`server`,serverVersion:n}:{kind:`product`,productLabel:C_(t)}}function E_(e,t){if(!Object.hasOwn(e,t))return null;let n=Reflect.get(e,t);return typeof n==`string`?n:null}function D_(e){return typeof e!=`object`||!e?null:{productVersion:E_(e,`productVersion`),serverVersion:E_(e,`serverVersion`)}}a();function O_(e,t){return e.kind===`both`?t(`releaseIdentity.both`,`{{product}} · server {{server}}`,{product:e.productLabel,server:e.serverVersion}):e.kind===`product`?e.productLabel:e.kind===`server`?t(`releaseIdentity.serverOnly`,`server {{version}}`,{version:e.serverVersion}):e.kind===`fallback`?t(`releaseIdentity.fallback`,`v{{version}}`,{version:e.version}):null}function k_({placement:e,compact:t=!1}){let{t:n}=H(),[r,i]=f({kind:`fallback`,version:`1.2.474`});s(()=>{let e=new AbortController;return fetch(z(`/api/release-identity`),{signal:e.signal}).then(async e=>e.ok?D_(await e.json()):null).then(t=>{e.signal.aborted||t===null||i(T_({productVersion:t.productVersion,serverVersion:t.serverVersion,fallbackVersion:`1.2.474`}))}).catch(t=>{e.signal.aborted||t instanceof DOMException&&t.name}),()=>e.abort()},[]);let a=O_(r,n);return a===null?null:e===`login`?P(`span`,{"data-testid":`release-identity`,children:a}):P(`div`,{"data-testid":`release-identity`,className:`pt-1 text-[10px] text-foreground-disabled select-none truncate ${t?`text-center`:`px-2`}`,title:a,children:a})}a();var A_=g(!0);function j_(e){return e===`/addon`||e.startsWith(`/addon/`)}function M_(e,t,n){let r=[...e.filter(e=>e!==t),t];return r.length<=n?r:r.slice(r.length-n)}function N_({maxCached:e=6}){let t=Fa(),n=J(),r=ka(),i=v(q),a=n.pathname,o=j_(a),s=M(new Map),c=M([]);if(o){s.current.set(a,{key:a,outlet:t,location:n,navigationType:r,routeContext:i});let o=M_(c.current,a,e),l=new Set(o);for(let e of s.current.keys())l.has(e)||s.current.delete(e);c.current=o}return y(E,{children:[c.current.map(e=>{let t=s.current.get(e);if(t?.outlet==null)return null;let n=o&&e===a;return P(`div`,{className:n?`h-full min-h-0`:void 0,style:n?void 0:{display:`none`},hidden:!n,"aria-hidden":!n,children:P(A_.Provider,{value:n,children:P(ba.Provider,{value:{location:t.location,navigationType:t.navigationType},children:P(q.Provider,{value:t.routeContext,children:t.outlet})})})},e)}),!o&&t!=null?P(`div`,{className:`h-full min-h-0`,children:t},a):null]})}a();var P_={dark:oe,light:R,system:en};function F_(){return P(`div`,{className:`flex h-full min-h-[50vh] items-center justify-center`,children:P(`span`,{className:`h-4 w-4 animate-spin rounded-full border-2 border-primary/30 border-t-primary`})})}function I_(){let e=J(),t=Ma(),{user:n,logout:r}=Wl(),i=br(),{t:a}=H(),o=yr(),c=Ir(),{info:l}=Uh();s(()=>{document.title=l===null?`CamStack Admin`:`${l.name} \u00b7 CamStack Admin`},[l]);let u=Ac(d_()),[p,m]=f(!1);s(()=>{y_(e.pathname+e.search)},[e.pathname,e.search]);let[h,g]=f(()=>typeof window>`u`?!1:window.localStorage.getItem(`camstack:sidebar-collapsed`)===`1`);s(()=>{typeof window>`u`||window.localStorage.setItem(`camstack:sidebar-collapsed`,h?`1`:`0`)},[h]);let[_]=f(()=>{if(typeof window>`u`)return new Set;try{let e=window.localStorage.getItem(`camstack:sidebar-collapsed-groups`);if(!e)return new Set;let t=JSON.parse(e);return Array.isArray(t)?new Set(t.filter(e=>typeof e==`string`)):new Set}catch{return new Set}});s(()=>{typeof window>`u`||window.localStorage.setItem(`camstack:sidebar-collapsed-groups`,JSON.stringify([..._]))},[_]),s(()=>{c&&window.localStorage.getItem(`camstack:sidebar-collapsed`)===null&&g(!0)},[c]);let{data:v=[]}=qr({nodeId:`hub`},{refetchInterval:3e4}),b=v.length,x=j(),S=M(Date.now()),{data:C}=Ar(void 0,{staleTime:0,refetchOnMount:`always`,refetchInterval:e=>{let t=e.state.data;return t&&t.length>0||Date.now()-S.current>=3e4?!1:2e3}}),T=d(()=>C&&n?.isAdmin?Wm(C):[],[C,n?.isAdmin]),D=d(()=>m_(T),[T]),O=D.known.get(`detection`)??[],k=D.known.get(`cluster`)??[],A=D.known.get(`administration`)??[];gr(`addon.page-ready`,()=>{x.invalidateQueries({queryKey:[[`addonPages`,`listPages`]]})});let N=()=>{r(),t(`/login`)},F=t=>!!(e.pathname===t||e.pathname.startsWith(t+`/`)),I=[`/system/pipeline`,`/live`,`/addon/osd-manager`,`/build`].some(t=>e.pathname===t||e.pathname.startsWith(t+`/`)),ee=n?.isAdmin===!0,L=d(()=>bh({t:a,isAdmin:ee}),[a,ee]),te=L[0]?.items??[],ne=L[1]?.items??[],re=L[2]?.items??[],ie=L[3]?.items??[],ae=i?.mode??`system`,oe={dark:a(`theme.dark`),light:a(`theme.light`),system:a(`theme.system`)},R=h&&!o,se=(e,t=`md`)=>`flex w-full items-center gap-2.5 rounded-md ${R?`justify-center px-0 py-2`:`px-2.5 py-1.5`} ${t===`lg`?`text-[13px] font-medium`:`text-[12px]`} transition-all ${e?t===`lg`?`bg-primary/12 text-primary shadow-sm shadow-primary/5`:`bg-primary/12 text-primary`:`text-foreground-subtle hover:bg-surface-hover hover:text-foreground`}`,ce=(e,t)=>e===0?null:R?P(`div`,{className:`pt-3 mb-1 mx-2 border-t border-border/60`},`sep-${t}`):P(`div`,{className:`pt-4 pb-1.5 px-2.5`,children:P(`span`,{className:`text-[10px] font-semibold uppercase tracking-widest text-foreground-subtle/60`,children:t})},`hdr-${t}`),le=e=>{let n=F(e.path),r=Sh(e.icon);return y(`button`,{onClick:()=>{t(e.path),m(!1)},className:se(n),title:R?e.label:void 0,children:[P(r,{className:`h-3.5 w-3.5 shrink-0 ${n?`text-primary`:``}`}),!R&&e.label]},`${e.addonId}::${e.id}`)},ue=e=>{let n=e.icon,r=F(e.path),i=e.path===`/system/addons`;return y(`button`,{"data-testid":`nav-${e.path.replace(/^\//,``).replace(/\//g,`-`)}`,onClick:()=>{t(e.path),m(!1)},className:se(r),title:R?e.label:void 0,children:[P(n,{className:`h-3.5 w-3.5 shrink-0 ${r?`text-primary`:``}`}),!R&&y(E,{children:[P(`span`,{className:`flex-1 text-left`,children:e.label}),i&&b>0&&P(`span`,{className:`ml-auto rounded-full bg-primary px-1.5 py-0.5 text-[9px] font-bold text-primary-foreground leading-none`,children:b})]}),R&&i&&b>0&&P(`span`,{className:`absolute mt-[-14px] ml-3 h-2 w-2 rounded-full bg-primary`})]},e.path)},de=y(E,{children:[y(`div`,{className:`flex h-14 items-center border-b border-border ${R?`justify-center px-1`:`pl-3 pr-4 gap-2`}`,children:[!R&&P(`img`,{src:i?.resolvedMode===`light`?z(`/brand/logo-horizontal-light.svg`):z(`/brand/logo-horizontal-dark.svg`),alt:a(`layouts.appLayout.camstackAdmin`,`CamStack Admin`),className:`h-9 flex-1 min-w-0`}),!o&&P(`button`,{onClick:()=>g(e=>!e),className:`p-1.5 rounded-md hover:bg-surface-hover text-foreground-subtle transition-colors flex-shrink-0 ${R?``:`mr-2`}`,"aria-label":h?a(`layouts.appLayout.expandSidebar`,`Expand sidebar`):a(`layouts.appLayout.collapseSidebar`,`Collapse sidebar`),title:h?a(`layouts.appLayout.expandSidebar`,`Expand sidebar`):a(`layouts.appLayout.collapseSidebar`,`Collapse sidebar`),children:P(h?et:Te,{className:`h-4 w-4`})})]}),!R&&l!==null&&P(`div`,{"data-testid":`sidebar-server-name`,title:l.name,className:`truncate border-b border-border px-3 py-1.5 text-xs font-medium text-foreground-muted`,children:l.name}),P(`div`,{className:`border-b border-border pt-2`,children:P(Mh,{navSections:L,addonPages:T,compact:R,onNavigated:()=>m(!1)})}),y(`nav`,{className:`flex-1 overflow-y-auto py-3 ${R?`px-1.5`:`px-2`} space-y-0.5`,children:[te.map(e=>ue(e)),ce(ne.length+O.length,a(`nav.detectionSection`,`Detection`)),ne.map(e=>ue(e)),O.map(e=>le(e)),ce(re.length+k.length,a(`nav.clusterSection`,`Cluster`)),re.map(e=>ue(e)),k.map(e=>le(e)),ce(ie.length+A.length,a(`system.title`,`Administration`)),ie.map(e=>ue(e)),A.map(e=>le(e)),D.custom.map(e=>y(`div`,{className:`contents`,children:[ce(e.pages.length,e.label),e.pages.map(e=>le(e))]},`custom-${e.id}`)),ce(D.ungrouped.length,a(`nav.addonPages`,`Addon Pages`)),D.ungrouped.map(e=>le(e))]}),y(`div`,{className:`border-t border-border ${R?`p-1.5`:`p-2`} space-y-0.5`,children:[y(`button`,{onClick:()=>i?.toggleMode(),className:se(!1),title:R?oe[ae]:void 0,children:[(()=>{let e=P_[ae];return P(e,{className:`h-3.5 w-3.5 shrink-0`})})(),!R&&P(`span`,{children:oe[ae]})]}),P(c_,{variant:`sidebar`,compact:R}),y(`button`,{type:`button`,onClick:()=>t(`/system/my-access`),className:se(F(`/system/my-access`)),title:R?a(`system.myAccess`,`My access`):void 0,children:[P(Ke,{className:`h-3.5 w-3.5 shrink-0`}),!R&&P(`span`,{className:`truncate`,children:a(`system.myAccess`,`My access`)})]}),y(`button`,{onClick:N,className:se(!1).replace(`hover:text-foreground`,`hover:text-danger`),title:R?n?.username??a(`layouts.appLayout.logout`,`Logout`):void 0,children:[P(pn,{className:`h-3.5 w-3.5 shrink-0`}),!R&&P(`span`,{className:`truncate`,children:n?.username??a(`layouts.appLayout.user`,`User`)})]}),P(k_,{placement:`sidebar`,compact:R})]})]});return y(`div`,{className:`flex h-dvh overflow-hidden bg-background text-foreground pt-[env(safe-area-inset-top)] pb-[env(safe-area-inset-bottom)]`,children:[!o&&P(`aside`,{className:`flex flex-col border-r border-border bg-surface/80 backdrop-blur-sm shrink-0 transition-[width] duration-150 ease-out ${R?`w-12`:`w-48`}`,children:de}),o&&P(Wn,{open:p,onClose:()=>m(!1),width:`w-64`,children:de}),y(`div`,{className:`flex flex-1 flex-col min-w-0`,children:[u!==null&&y(`div`,{className:`flex items-center justify-center gap-2 px-3 py-2 text-[12px] font-medium shrink-0 ${u.severity===`danger`?`bg-danger/90 text-white`:`bg-warning/15 text-warning border-b border-warning/30`}`,children:[u.severity===`danger`?P(Ce,{className:`h-3.5 w-3.5`}):P(qe,{className:`h-3.5 w-3.5`}),P(`span`,{children:a(u.i18nKey,{defaultValue:u.message,...u.i18nParams})}),u.action===`sign-in`&&P(`button`,{onClick:()=>r(),className:`ml-2 rounded border border-white/40 px-2 py-0.5 text-[11px] font-semibold hover:bg-white/10`,children:a(`connection.signIn`,`Sign in`)}),u.showSpinner&&P(Re,{className:`h-3.5 w-3.5 animate-spin`})]}),P(Vh,{}),P(Xh,{}),P(u_,{}),o&&y(`header`,{className:`flex items-center h-12 border-b border-border px-3 shrink-0 bg-surface/80 backdrop-blur-sm`,children:[P(`button`,{onClick:()=>m(!0),className:`p-1.5 -ml-1.5 rounded-md hover:bg-surface-hover text-foreground-muted transition-colors`,"aria-label":a(`layouts.appLayout.openMenu`,`Open menu`),children:P(fe,{className:`h-5 w-5`})}),P(`div`,{className:`flex-1 flex justify-center`,children:P(`img`,{src:i?.resolvedMode===`light`?z(`/brand/logo-horizontal-light.svg`):z(`/brand/logo-horizontal-dark.svg`),alt:a(`layouts.appLayout.camstack`,`CamStack`),className:`h-7`})}),P(c_,{})]}),y(Zm,{children:[P($m,{}),P(`main`,{className:`relative flex-1 min-h-0 overscroll-contain bg-background ${I?`overflow-hidden`:`overflow-auto`}`,children:P(w,{fallback:P(F_,{}),children:P(N_,{})})})]})]})]})}function $({children:e,requireAdmin:t}){let{t:n}=H(),{user:r,loading:i,mustChangePassword:a}=Wl(),o=J();return i?P(`div`,{className:`flex h-screen items-center justify-center bg-background text-foreground-subtle`,children:n(`layouts.protectedRoute.loading`,`Loading...`)}):r?a&&o.pathname!==`/change-password`?P(Y,{to:`/change-password`,replace:!0}):t&&!r.isAdmin?P(Y,{to:`/access-denied`,replace:!0}):P(E,{children:e}):P(Y,{to:`/login`,replace:!0,state:{from:o.pathname+o.search}})}var L_=`customize`,R_=`/build/compositions/new`,z_=`/build/compositions/:blockId`,B_=`/build?tab=custom-device`;function V_(e){return`/devices/${e}?tab=${L_}`}var H_=`integration`,U_=`section`,W_=[H_,U_],G_={connectivity:{path:`/system/integrations`,tab:null},remoteAccess:{path:`/system/network`,tab:`remote-access`},mesh:{path:`/system/network`,tab:`mesh`},turn:{path:`/system/network`,tab:`turn`},authentication:{path:`/system/identity`,tab:`authentication`},access:{path:`/system/identity`,tab:`access`},logging:{path:`/system/logs`,tab:`destinations`}},K_=`settings`,q_=`activity`;function J_(e,t={}){let{path:n,tab:r}=G_[e],i=new URLSearchParams;r===null?t.kindSection!==void 0&&i.set(`tab`,t.kindSection):i.set(`tab`,r),t.integration!==void 0&&i.set(H_,t.integration),t.section!==void 0&&i.set(U_,t.section);let a=i.toString();return a.length>0?`${n}?${a}`:n}function Y_(e){let{ids:t,requested:n,answered:r,legacyGroup:i=null,groupFirst:a={}}=e;if(n!==null&&t.includes(n))return{selectedId:n,staleId:null};let o=n!==null&&r?n:null,s=i===null?void 0:a[i];return s!==void 0&&t.includes(s)?{selectedId:s,staleId:o}:{selectedId:t[0]??null,staleId:o}}function X_(e,t,n=null,r=null){let i=new URLSearchParams(e);return i.set(H_,t),r===null?i.delete(U_):i.set(U_,r),n!==null&&i.delete(n),i}function Z_(e){return e===`/admin`||e===`/admin/`?`/`:e.startsWith(`/admin/`)?e.slice(6):e}function Q_(){let{t:e}=H(),t=Ma();return y(`div`,{className:`flex flex-col items-center justify-center text-foreground py-16 px-4`,children:[P(`div`,{className:`flex h-16 w-16 items-center justify-center rounded-2xl bg-danger/10 mb-4`,children:P(fn,{className:`h-8 w-8 text-danger`})}),P(`h1`,{className:`text-xl font-bold`,children:e(`accessDenied.accessDenied`,`Access Denied`)}),P(`p`,{className:`mt-2 text-sm text-foreground-subtle`,children:e(`accessDenied.youDonTHavePermission`,`You don't have permission to access this page.`)}),P(`button`,{onClick:()=>t(`/devices`),className:`mt-6 rounded-lg bg-primary px-5 py-2.5 text-sm font-medium text-primary-foreground shadow-md shadow-primary/20 hover:shadow-lg transition-all`,children:e(`accessDenied.goToDevices`,`Go to Devices`)})]})}var $_=`auth.password-incorrect`;function ev(e,t){return typeof e==`object`&&e?Reflect.get(e,t):void 0}function tv(e){if(!(e instanceof Error))return{kind:`connection-lost`};let t=ev(e,`data`);return typeof t!=`object`||!t?{kind:`connection-lost`}:ev(ev(t,`i18n`),`code`)===$_?{kind:`wrong-current`}:ev(t,`code`)===`UNAUTHORIZED`?{kind:`session-ended`}:{kind:`rejected`,message:e.message}}a();var nv=8;function rv(e,t){let n=tv(e);switch(n.kind){case`wrong-current`:return t(`changePassword.errorWrongCurrent`,`The current password is incorrect.`);case`session-ended`:return t(`changePassword.errorSessionEnded`,`Your session ended before the change was confirmed. Sign in again — try the new password first.`);case`connection-lost`:return t(`changePassword.errorConnectionLost`,`The connection to the hub dropped before it confirmed the change. Sign in again — try the new password first.`);case`rejected`:return n.message}}function iv(){let{t:e}=H(),{user:t,mustChangePassword:n,clearMustChangePassword:r,logout:i}=Wl(),a=ze(),o=br(),s=Ma(),[c,l]=f(``),[u,d]=f(``),[p,m]=f(``),[h,g]=f(!1),[_,v]=f(``),[b,x]=f(!1),S=n?Pl:c;return P(`div`,{className:`flex min-h-screen items-center justify-center bg-background p-4`,children:y(`div`,{className:`w-full max-w-sm`,children:[P(`div`,{className:`flex justify-center mb-8`,children:P(`img`,{src:o?.resolvedMode===`light`?z(`/brand/logo-horizontal-light.svg`):z(`/brand/logo-horizontal-dark.svg`),alt:e(`changePassword.camstackAdmin`,`CamStack Admin`),className:`h-12`})}),y(`form`,{onSubmit:async i=>{if(i.preventDefault(),v(``),!t){v(`Not signed in`);return}if(!n&&c.length===0){v(e(`changePassword.enterCurrent`,`Enter your current password`));return}if(u.length<nv){v(`Password must be at least ${nv} characters`);return}if(u!==p){v(`The two passwords do not match`);return}if(u===`changeme`){v(`Choose a password different from the seed default`);return}x(!0);try{await a.changeOwnPassword({currentPassword:S,newPassword:u}),r(),s(`/devices`,{replace:!0})}catch(t){v(rv(t,e))}finally{x(!1)}},className:`space-y-4 rounded-xl border border-border bg-surface p-6 shadow-xl shadow-black/10`,children:[y(`div`,{className:`space-y-1`,children:[P(`h1`,{className:`text-sm font-semibold text-foreground`,children:e(`changePassword.setANewPassword`,`Set a new password`)}),P(`p`,{className:`text-xs text-foreground-subtle`,children:n?e(`changePassword.youMustRotateTheSeed`,`You must rotate the seed password before continuing.`):e(`changePassword.chooseANewPasswordFor`,`Choose a new password for your account.`)})]}),_&&P(`div`,{role:`alert`,className:`rounded-md bg-danger/10 border border-danger/20 px-3 py-2 text-xs text-danger`,children:_}),!n&&y(`div`,{className:`space-y-1.5`,children:[P(`label`,{className:`text-xs font-medium text-foreground-subtle`,children:e(`changePassword.currentPassword`,`Current password`)}),P(`input`,{"data-testid":`change-password-current`,type:h?`text`:`password`,value:c,onChange:e=>l(e.target.value),autoComplete:`current-password`,className:`w-full rounded-lg border border-border bg-background px-3 py-2.5 text-sm text-foreground placeholder:text-foreground-disabled focus:border-primary focus:ring-1 focus:ring-primary/30 outline-none transition-all`,autoFocus:!0})]}),y(`div`,{className:`space-y-1.5`,children:[P(`label`,{className:`text-xs font-medium text-foreground-subtle`,children:e(`changePassword.newPassword`,`New password`)}),y(`div`,{className:`relative`,children:[P(`input`,{"data-testid":`change-password-new`,type:h?`text`:`password`,value:u,onChange:e=>d(e.target.value),autoComplete:`new-password`,className:`w-full rounded-lg border border-border bg-background px-3 py-2.5 pr-10 text-sm text-foreground placeholder:text-foreground-disabled focus:border-primary focus:ring-1 focus:ring-primary/30 outline-none transition-all`,autoFocus:n}),P(`button`,{type:`button`,onClick:()=>g(!h),className:`absolute right-2.5 top-1/2 -translate-y-1/2 text-foreground-subtle hover:text-foreground transition-colors`,tabIndex:-1,children:P(h?nt:pe,{className:`h-4 w-4`})})]})]}),y(`div`,{className:`space-y-1.5`,children:[P(`label`,{className:`text-xs font-medium text-foreground-subtle`,children:e(`changePassword.confirmNewPassword`,`Confirm new password`)}),P(`input`,{"data-testid":`change-password-confirm`,type:h?`text`:`password`,value:p,onChange:e=>m(e.target.value),autoComplete:`new-password`,className:`w-full rounded-lg border border-border bg-background px-3 py-2.5 text-sm text-foreground placeholder:text-foreground-disabled focus:border-primary focus:ring-1 focus:ring-primary/30 outline-none transition-all`})]}),P(`button`,{"data-testid":`change-password-submit`,type:`submit`,disabled:b||!u||!p,className:`w-full rounded-lg bg-primary px-4 py-2.5 text-sm font-semibold text-primary-foreground shadow-md shadow-primary/20 hover:shadow-lg hover:shadow-primary/30 disabled:opacity-50 disabled:shadow-none transition-all`,children:b?e(`changePassword.saving`,`Saving…`):e(`changePassword.saveAndContinue`,`Save and continue`)}),n&&P(`button`,{type:`button`,onClick:()=>{i(),s(`/login`,{replace:!0})},className:`w-full text-xs text-foreground-subtle hover:text-foreground transition-colors`,children:e(`changePassword.signOutInstead`,`Sign out instead`)})]})]})})}function av(e){let t=new Uint8Array(e),n=``;for(let e of t)n+=String.fromCharCode(e);return btoa(n).replace(/\+/g,`-`).replace(/\//g,`_`).replace(/=/g,``)}function ov(e){let t=e.replace(/-/g,`+`).replace(/_/g,`/`),n=(4-t.length%4)%4,r=t.padEnd(t.length+n,`=`),i=atob(r),a=new ArrayBuffer(i.length),o=new Uint8Array(a);for(let e=0;e<i.length;e++)o[e]=i.charCodeAt(e);return a}function sv(){return window?.PublicKeyCredential!==void 0&&typeof window.PublicKeyCredential==`function`}function cv(e){let{id:t}=e;return{...e,id:ov(t),transports:e.transports}}function lv(e){return e===`localhost`||/^([a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,}$/i.test(e)}var uv=class extends Error{constructor({message:e,code:t,cause:n,name:r}){super(e,{cause:n}),this.name=r??n.name,this.code=t}},dv=new class{createNewAbortSignal(){if(this.controller){let e=Error(`Cancelling existing WebAuthn API call for new one`);e.name=`AbortError`,this.controller.abort(e)}let e=new AbortController;return this.controller=e,e.signal}cancelCeremony(){if(this.controller){let e=Error(`Manually cancelling existing WebAuthn API call`);e.name=`AbortError`,this.controller.abort(e),this.controller=void 0}}},fv=[`cross-platform`,`platform`];function pv(e){if(e&&!(fv.indexOf(e)<0))return e}function mv(){if(!sv())return new Promise(e=>e(!1));let e=window.PublicKeyCredential;return e.isConditionalMediationAvailable===void 0?new Promise(e=>e(!1)):e.isConditionalMediationAvailable()}function hv({error:e,options:t}){let{publicKey:n}=t;if(!n)throw Error(`options was missing required publicKey property`);if(e.name===`AbortError`){if(t.signal instanceof AbortSignal)return new uv({message:`Authentication ceremony was sent an abort signal`,code:`ERROR_CEREMONY_ABORTED`,cause:e})}else if(e.name===`NotAllowedError`)return new uv({message:e.message,code:`ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY`,cause:e});else if(e.name===`SecurityError`){let t=window.location.hostname;if(!lv(t))return new uv({message:`${window.location.hostname} is an invalid domain`,code:`ERROR_INVALID_DOMAIN`,cause:e});if(n.rpId!==t)return new uv({message:`The RP ID "${n.rpId}" is invalid for this domain`,code:`ERROR_INVALID_RP_ID`,cause:e})}else if(e.name===`UnknownError`)return new uv({message:`The authenticator was unable to process the specified options, or could not create a new assertion signature`,code:`ERROR_AUTHENTICATOR_GENERAL_ERROR`,cause:e});return e}async function gv(e){let{optionsJSON:t,useBrowserAutofill:n=!1,verifyBrowserAutofillInput:r=!0}=e;if(!sv())throw Error(`WebAuthn is not supported in this browser`);let i;t.allowCredentials?.length!==0&&(i=t.allowCredentials?.map(cv));let a={...t,challenge:ov(t.challenge),allowCredentials:i},o={};if(n){if(!await mv())throw Error(`Browser does not support WebAuthn autofill`);if(document.querySelectorAll(`input[autocomplete$='webauthn']`).length<1&&r)throw Error('No <input> with "webauthn" as the only or last value in its `autocomplete` attribute was detected');o.mediation=`conditional`,a.allowCredentials=[]}o.publicKey=a,o.signal=dv.createNewAbortSignal();let s;try{s=await navigator.credentials.get(o)}catch(e){throw hv({error:e,options:o})}if(!s)throw Error(`Authentication was not completed`);let{id:c,rawId:l,response:u,type:d}=s,f;return u.userHandle&&(f=av(u.userHandle)),{id:c,rawId:av(l),response:{authenticatorData:av(u.authenticatorData),clientDataJSON:av(u.clientDataJSON),signature:av(u.signature),userHandle:f},type:d,clientExtensionResults:s.getClientExtensionResults(),authenticatorAttachment:pv(s.authenticatorAttachment)}}function _v(e){return typeof e==`object`&&!!e}function vv(e){return _v(e)&&typeof e.challenge==`string`}a();async function yv(e){if(!vv(e))throw Error(`passkey authentication options missing challenge`);let t=await gv({optionsJSON:e});return Object.fromEntries(Object.entries(t))}function bv({method:e,challengeToken:t,onComplete:n,onSecondFactor:r,onError:i}){let[a,o]=f(!1),[s,c]=f(null),l=async()=>{c(null),o(!0);try{let e=Z();if(t){let r=await yv((await e.loginBeginPasskey(t)).optionsJSON),i=await e.loginVerifyPasskey(t,r,{refreshable:!0});n(i.token,i);return}let a=await yv((await e.passkeyLoginBegin()).optionsJSON),o=await e.passkeyLoginFinish(a,{refreshable:!0}),s=o.secondFactors??(o.requiresTotp===!0?[`totp`]:[]);if(s.length>0){if(r)r({challengeToken:o.token,factors:s});else{let e=`Additional verification is required — sign in with your password to continue.`;c(e),i?.(e)}return}n(o.token,o)}catch(e){let n=t?`Passkey verification failed`:`Passkey sign-in failed`,r=e instanceof Error?e.message:n;c(r),i?.(r)}finally{o(!1)}};return y(`div`,{className:`space-y-2`,children:[y(`button`,{type:`button`,"data-testid":t?`login-passkey`:`login-passkey-direct`,onClick:()=>void l(),disabled:a,className:`w-full flex items-center justify-center gap-2 rounded-lg border border-border bg-surface px-4 py-2.5 text-sm font-medium text-foreground hover:bg-surface-hover disabled:opacity-50 transition-colors`,children:[a?P(Re,{className:`h-4 w-4 animate-spin text-primary`}):P(nn,{className:`h-4 w-4 text-primary`}),e.label]}),s&&P(`div`,{className:`rounded-md bg-danger/10 border border-danger/20 px-3 py-2 text-xs text-danger`,children:s})]})}var xv=()=>window.location.hostname;function Sv(e,t=xv){return sv()&&Fh(t(),e.rpId)}function Cv(e,t=xv){let n=e.filter(e=>e.kind===`passkey`&&e.stage===`second-factor`).filter(e=>Sv(e,t));return{passkeyMethods:n,widgetMethods:n.length>0?[]:e.filter(e=>e.kind===`widget`&&e.stage===`second-factor`)}}function wv(e,t){let n=e.includes(`passkey`),r=t.passkeyMethods.length>0||t.widgetMethods.length>0,i=e.includes(`totp`);return n&&!r&&!i}function Tv(e){let t=e.onComplete,n=e.onSecondFactor;return typeof t==`function`?{onComplete:t,onSecondFactor:typeof n==`function`?n:void 0}:null}function Ev({methods:e,widgetConfig:t,onRedirect:n}){let{t:r}=H();Br();let i=e.filter(e=>e.kind!==`passkey`||Sv(e));return i.length===0?null:y(`div`,{className:`mt-6 space-y-3`,children:[y(`div`,{className:`flex items-center gap-3`,children:[P(`div`,{className:`h-px flex-1 bg-border`}),P(`span`,{className:`text-[10px] uppercase tracking-wider text-foreground-subtle`,children:r(`login.primaryLoginMethods.orContinueWith`,`Or continue with`)}),P(`div`,{className:`h-px flex-1 bg-border`})]}),P(`div`,{className:`space-y-2`,children:i.map(e=>{if(e.kind===`redirect`){let t=(e.icon===void 0?void 0:kr(e.icon))??Ke;return y(`a`,{href:e.startUrl,onClick:t=>{n?.(e)===!0&&t.preventDefault()},className:`flex items-center justify-center gap-2 w-full rounded-lg border border-border bg-surface px-4 py-2.5 text-sm font-medium text-foreground hover:bg-surface-hover transition-colors`,children:[P(t,{className:`h-4 w-4 text-primary`}),e.label]},e.id)}if(e.kind===`passkey`){let n=Tv(t);return n?P(bv,{method:e,onComplete:n.onComplete,onSecondFactor:n.onSecondFactor},e.id):null}return P(Dv,{method:e,config:t},e.id)})})]})}function Dv({method:e,config:t}){let{t:n}=H(),r=wn(e.remote,e.bundleUrl);return r===null?y(`div`,{className:`flex items-center justify-center gap-2 rounded-lg border border-border bg-background px-4 py-2.5 text-xs text-foreground-subtle`,children:[P(Re,{className:`h-3.5 w-3.5 animate-spin`}),n(`common.loading`,`Loading…`)]}):r===void 0?y(`div`,{"data-testid":`login-method-load-error`,className:`flex items-center justify-center gap-2 rounded-lg border border-danger/20 bg-danger/10 px-4 py-2.5 text-xs text-danger`,children:[P(Me,{className:`h-3.5 w-3.5 shrink-0`}),n(`login.primaryMethods.loadFailed`)]}):P(r,{instanceId:e.id,host:`dashboard`,config:t})}var Ov=4e3,kv=/^[A-Za-z0-9._-]{1,64}$/;function Av(e){let t=e.addonId!==void 0&&kv.test(e.addonId)?e.addonId:null,n=e.integration!==void 0&&kv.test(e.integration)?e.integration:null;if(t!==null&&e.brokerId!==void 0)return J_(`connectivity`,{integration:t,kindSection:`brokers`});let r=n??t;return J_(`connectivity`,r===null?{}:{integration:r})}function jv(e,t){let n=t.opener;if(n===null||n.closed||Og(n)!==t.origin)return!1;try{return n.postMessage({type:Rg,ok:e.status===`success`,...e.brokerId===void 0?{}:{brokerId:e.brokerId},...e.status===`error`?{error:e.reason??`unknown`}:{}},t.origin),!0}catch{return!1}}a();var Mv=500;function Nv(e){let{t}=H();switch(e){case`access_denied`:return t(`oauthLanding.reason.access_denied`,`Access was denied, so nothing was connected.`);case`invalid_state`:return t(`oauthLanding.reason.invalid_state`,`This sign-in link expired or was already used. Start the sign-in again.`);case`invalid_request`:return t(`oauthLanding.reason.invalid_request`,`The request was not valid for this hub. Start the link again from the beginning.`);case`unknown_broker`:return t(`oauthLanding.reason.unknown_broker`,`That connection no longer exists. Add it again, then sign in.`);case`not_configured`:return t(`oauthLanding.reason.not_configured`,`The connection is missing its client ID or secret. Fill them in, save, then sign in.`);case`exchange_failed`:return t(`oauthLanding.reason.exchange_failed`,`The provider did not accept the sign-in. Check the client ID and secret, then try again.`);case`no_refresh_token`:return t(`oauthLanding.reason.no_refresh_token`,`The provider returned no long-lived access. Remove CamStack from the account’s connected apps, then sign in again.`);case`unavailable`:return t(`oauthLanding.reason.unavailable`,`The hub is still starting this integration. Wait a moment and try again.`);case`unknown`:return t(`oauthLanding.reason.unknown`,`Something went wrong. Try again in a moment.`)}}function Pv({outcome:e}){let{t}=H(),n=Nv(e.reason??`unknown`);if(e.status===`error`)return y(E,{children:[P(Ge,{className:`mx-auto h-8 w-8 text-danger`,"aria-hidden":!0}),P(`h1`,{"data-testid":`oauth-landing-title`,className:`text-sm font-semibold text-foreground`,children:t(`oauthLanding.errorTitle`,`Sign-in did not finish`)}),P(`p`,{"data-testid":`oauth-landing-reason`,className:`rounded-md border border-danger/20 bg-danger/10 px-3 py-2 text-xs text-danger`,children:n})]});let r=e.action===`disconnect`;return y(E,{children:[P(Be,{className:`mx-auto h-8 w-8 text-success`,"aria-hidden":!0}),P(`h1`,{"data-testid":`oauth-landing-title`,className:`text-sm font-semibold text-foreground`,children:r?t(`oauthLanding.signedOutTitle`,`Signed out`):t(`oauthLanding.successTitle`,`Signed in`)}),P(`p`,{className:`text-xs text-foreground-muted`,children:r?t(`oauthLanding.signedOutBody`,`The account was disconnected from this hub.`):t(`oauthLanding.successBody`,`The account is connected. Returning to CamStack…`)})]})}function Fv({outcome:e,closable:t,onContinue:n,onClose:r}){let{t:i}=H(),a=Av(e);return s(()=>{if(e.status!==`success`)return;let t=window.setTimeout(()=>n(a),Ov);return()=>window.clearTimeout(t)},[e.status,n,a]),P(`main`,{className:`flex min-h-screen items-center justify-center bg-background p-4`,children:y(`div`,{className:`w-full max-w-sm space-y-4`,children:[P(`div`,{className:`flex justify-center`,children:y(`picture`,{children:[P(`source`,{media:`(prefers-color-scheme: dark)`,srcSet:z(`/brand/logo-horizontal-dark.svg`)}),P(`img`,{src:z(`/brand/logo-horizontal-light.svg`),alt:i(`oauthLanding.brand`,`CamStack`),className:`h-12`})]})}),y(`div`,{className:`space-y-4 rounded-xl border border-border bg-surface p-6 text-center shadow-xl shadow-black/10`,children:[P(Pv,{outcome:e}),y(`div`,{className:`flex flex-col gap-2`,children:[P(Tn,{type:`button`,variant:`primary`,onClick:()=>n(a),children:i(`oauthLanding.back`,`Back to CamStack`)}),t&&P(Tn,{type:`button`,variant:`ghost`,onClick:r,children:i(`oauthLanding.close`,`Close this window`)})]})]})]})})}function Iv(e,t){window.history.replaceState(null,``,window.location.pathname);let n=window.opener,r=jv(t,{opener:n,origin:window.location.origin}),i=()=>e.render(P(Fv,{outcome:t,closable:r,onContinue:e=>window.location.replace(z(e)),onClose:()=>window.close()}));if(r&&t.status===`success`){window.close(),window.setTimeout(i,Mv);return}i()}function Lv(e){return Ht(e)}var Rv=`Done — you can close this window.`,zv=500,Bv=`camstack_admin_token`;async function Vv(e,t=``){try{let n=$c(new URLSearchParams(t));n!==null&&n.token===e?Zc(n):localStorage.setItem(Bv,e)}catch{}await fetch(z(`/api/auth/session`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({token:e})}).catch(()=>{})}function Hv(){try{let e=localStorage.getItem(Bv);return e!==null&&e.length>0?e:null}catch{return null}}function Uv(e){let t=Lv(window.location.hash);if(t!==null){Iv(e,t);return}let n=hg(window.location.hash);window.history.replaceState(null,``,window.location.pathname);let r=t=>e.render(P(Wv,{completion:n,result:t}));if(r(null),n===null)return;let i=kg();Ig(n,{opener:window.opener,origin:window.location.origin,channel:i,addEventListener:(e,t)=>window.addEventListener(e,t),removeEventListener:(e,t)=>window.removeEventListener(e,t),close:()=>{window.close(),window.setTimeout(()=>r({kind:`done`,message:Rv}),zv)},continueAt:e=>window.location.replace(z(e)),persistSession:e=>Vv(e,n.target===`login`?n.fragment:``),showResult:r,setTimeout:(e,t)=>window.setTimeout(e,t)})}function Wv({completion:e,result:t}){let{t:n}=H();return P(`div`,{className:`flex min-h-screen items-center justify-center bg-background p-4`,children:P(`div`,{className:`flex flex-col items-center gap-3 text-sm text-foreground-subtle`,children:e===null?P(`a`,{className:`text-primary underline`,href:z(`/login`),children:n(`ssoComplete.nothingToFinishHereGo`,`Nothing to finish here — go to sign-in`)}):t===null?y(`span`,{className:`flex items-center gap-3`,children:[P(`span`,{className:`h-4 w-4 animate-spin rounded-full border-2 border-primary/30 border-t-primary`}),n(`ssoComplete.finishingSignIn`,`Finishing sign-in…`)]}):y(E,{children:[P(`span`,{"data-testid":`sso-complete-result`,className:t.kind===`link-error`?`text-danger`:`text-foreground`,children:t.message}),P(`button`,{type:`button`,className:`rounded-md border border-border px-3 py-1.5 text-foreground hover:bg-surface-hover`,onClick:()=>window.close(),children:n(`ssoComplete.closeThisWindow`,`Close this window`)})]})})})}a();function Gv(e){if(typeof e!=`object`||!e)return!1;let t=Reflect.get(e,`message`),n=Reflect.get(e,`data`);return(typeof n==`object`&&n?Reflect.get(n,`code`):void 0)===`FORBIDDEN`||typeof t==`string`&&/sign in again first/i.test(t)}function Kv(){let e=new URLSearchParams(window.location.search);return ml({codeChallenge:e.get(`code_challenge`),codeChallengeMethod:e.get(`code_challenge_method`),state:e.get(`state`),purpose:e.get(`purpose`)})}function qv(e){return Math.min(1e3*2**e,15e3)}function Jv(){let{t:e}=H(),{login:t,verifyTotp:n,finalizePasskeyLogin:r,user:i}=Wl(),{i18n:a}=H(),o=br(),c=Ma(),l=J(),u=new URLSearchParams(window.location.search).get(`next`);s(()=>{Cl(u)},[u]);let d=new URLSearchParams(window.location.search).get(`redirect`);s(()=>{Ml(d)},[d]);let p=Kv();s(()=>{_l(p)},[p?.codeChallenge,p?.state,p?.purpose]);let m=l.state,h=S_(m?.from),[g,_]=f(``),[v,b]=f(``),[x,S]=f(!1),[C,w]=f(``),[T,D]=f(!1),[O,k]=f(`credentials`),[A,j]=f(``),[N,I]=f([]),[ee,L]=f(``),[te,ne]=f(void 0),[re,ie]=f(`sso-not-linked`),ae=tr.auth.listLoginMethods.useQuery(void 0,{retry:!0,retryDelay:qv}),oe=ae.data===void 0,R=(ae.data??[]).filter(e=>e.kind!==`device-certificate`),se=tr.auth.getServerName.useQuery().data,ce=R.filter(e=>e.stage===`primary`),le=Cv(R);s(()=>{let e=ag(window.location.hash);if(e!==null){if(window.history.replaceState({},``,window.location.pathname+window.location.search),e.kind===`challenge`){j(e.challengeToken),I(e.factors),L(``),k(`second-factor`);return}ie(e.code),ne(e.provider)}},[]);let ue=te==null?null:R.find(e=>e.id===te&&`label`in e)?.label??null,de=C||(te===void 0?``:og(re,ue)),{passkeyMethods:fe,widgetMethods:me}=le,he=M(!1),ge=async()=>{if(he.current)return;he.current=!0;let e=bl(d);if(e?.kind===`app-callback`){await be(e.url);return}else if(e){window.location.assign(z(e.path));return}let t=Tl(u);t?window.location.assign(z(t)):c(h,{replace:!0})},[_e,ye]=f(null),be=async e=>{ye({callbackBase:e,mintedUrl:null,failed:!1});try{let t=Kv()??vl();if(t===null)throw Error(`The app sent no PKCE challenge and state`);let{code:n}=await Z().trpcClient.auth.createHandoffCode.mutate({purpose:t.purpose,codeChallenge:t.codeChallenge,state:t.state}),r=yl(e,n,t.state);ye({callbackBase:e,mintedUrl:r,failed:!1}),window.location.assign(r)}catch(t){if(Gv(t)){he.current=!1,ye(null),w(`Sign in again to confirm it is you.`);return}ye({callbackBase:e,mintedUrl:null,failed:!0})}},xe=i!==null,[Se,Ce]=f(!1);s(()=>{!xe||!d&&!u||Se||(Ce(!0),ge())},[xe,d,u,Se]);let we=async e=>{e.preventDefault(),w(``),ne(void 0),D(!0);try{let e=await t(g,v);if(e.kind===`second-factor`){j(e.challengeToken),I(e.factors),k(`second-factor`);return}v===`changeme`?c(`/change-password`,{replace:!0}):await ge()}catch(e){w(e instanceof Error?e.message:`Login failed`)}finally{D(!1)}},Te=async e=>{e.preventDefault(),w(``),D(!0);try{await n(A,ee.trim()),await ge()}catch(e){w(e instanceof Error?e.message:`TOTP verification failed`),L(``)}finally{D(!1)}},Ee=async(e,t)=>{try{await r(e,t),await ge()}catch(e){w(e instanceof Error?e.message:`Passkey sign-in failed`)}},De=M(null);s(()=>()=>De.current?.(),[]);let Oe=async e=>{if(e.target!==`login`)return;let t=$c(new URLSearchParams(e.fragment));if(t!==null){try{await r(t.token,t),await ge()}catch(e){w(e instanceof Error?e.message:`Sign-in failed`)}return}let n=ag(`#${e.fragment}`);if(n!==null){if(n.kind===`challenge`){Ae({challengeToken:n.challengeToken,factors:n.factors});return}ie(n.code),ne(n.provider)}},ke=e=>{if(dl(d)?.kind===`app-callback`)return!1;let t=yg(z(_g(e.startUrl)));return t===null?!1:(w(``),ne(void 0),De.current?.(),De.current=jg(t,{onReturn:e=>{De.current?.(),De.current=null,Oe(e)},onDone:e=>{if(De.current?.(),De.current=null,e.target!==`login`)return;let t=Hv()===null?null:Xc();t!==null&&Oe({target:`login`,fragment:new URLSearchParams({token:t.token,...t.refreshToken===void 0?{}:{refreshToken:t.refreshToken},...t.expiresAt===void 0?{}:{expiresAt:String(t.expiresAt)}}).toString()})}}),!0)},Ae=e=>{let t=e.factors.filter(e=>e===`totp`||e===`passkey`);j(e.challengeToken),I(t),L(``),w(``),k(`second-factor`)};return _e===null?P(`div`,{className:`flex min-h-screen items-center justify-center bg-background p-4`,children:y(`div`,{className:`w-full max-w-sm`,children:[P(`div`,{className:`flex justify-center mb-8`,children:P(`img`,{src:o?.resolvedMode===`light`?z(`/brand/logo-horizontal-light.svg`):z(`/brand/logo-horizontal-dark.svg`),alt:e(`login.camstackAdmin`,`CamStack Admin`),className:`h-12`})}),se!==void 0&&!se.isDefault&&P(`p`,{"data-testid":`login-server-name`,className:`-mt-4 mb-6 text-center text-sm text-foreground-muted`,children:P(Vs,{i18nKey:`login.signInTo`,values:{name:se.name},components:{b:P(`span`,{className:`font-semibold text-foreground`})}})}),O===`credentials`?y(`form`,{onSubmit:we,className:`space-y-4 rounded-xl border border-border bg-surface p-6 shadow-xl shadow-black/10`,children:[de&&P(`div`,{"data-testid":`login-error`,className:`rounded-md bg-danger/10 border border-danger/20 px-3 py-2 text-xs text-danger`,children:de}),y(`div`,{className:`space-y-1.5`,children:[P(`label`,{className:`text-xs font-medium text-foreground-subtle`,children:e(`login.username`,`Username`)}),P(`input`,{"data-testid":`login-username`,type:`text`,placeholder:e(`login.username`,`Username`),value:g,onChange:e=>_(e.target.value),className:`w-full rounded-lg border border-border bg-background px-3 py-2.5 text-sm text-foreground placeholder:text-foreground-disabled focus:border-primary focus:ring-1 focus:ring-primary/30 outline-none transition-all`,autoFocus:!0})]}),y(`div`,{className:`space-y-1.5`,children:[P(`label`,{className:`text-xs font-medium text-foreground-subtle`,children:e(`login.password`,`Password`)}),y(`div`,{className:`relative`,children:[P(`input`,{"data-testid":`login-password`,type:x?`text`:`password`,placeholder:e(`login.password`,`Password`),value:v,onChange:e=>b(e.target.value),className:`w-full rounded-lg border border-border bg-background px-3 py-2.5 pr-10 text-sm text-foreground placeholder:text-foreground-disabled focus:border-primary focus:ring-1 focus:ring-primary/30 outline-none transition-all`}),P(`button`,{type:`button`,onClick:()=>S(!x),className:`absolute right-2.5 top-1/2 -translate-y-1/2 text-foreground-subtle hover:text-foreground transition-colors`,tabIndex:-1,children:P(x?nt:pe,{className:`h-4 w-4`})})]})]}),P(`button`,{"data-testid":`login-submit`,type:`submit`,disabled:T||!g||!v,className:`w-full rounded-lg bg-primary px-4 py-2.5 text-sm font-semibold text-primary-foreground shadow-md shadow-primary/20 hover:shadow-lg hover:shadow-primary/30 disabled:opacity-50 disabled:shadow-none transition-all`,children:T?y(`span`,{className:`flex items-center justify-center gap-2`,children:[P(`span`,{className:`h-4 w-4 animate-spin rounded-full border-2 border-primary-foreground/30 border-t-primary-foreground`}),e(`login.loggingIn`,`Logging in...`)]}):e(`login.logIn`,`Log in`)})]}):y(`div`,{className:`space-y-4 rounded-xl border border-border bg-surface p-6 shadow-xl shadow-black/10`,children:[y(`div`,{className:`flex items-center gap-2 pb-1 border-b border-border`,children:[P(F,{className:`h-4 w-4 text-primary`}),P(`div`,{className:`text-sm font-medium text-foreground`,children:e(`login.twoFactorAuthentication`,`Two-factor authentication`)})]}),P(`p`,{className:`text-xs text-foreground-subtle`,children:g?P(E,{children:P(Vs,{i18nKey:`login.finishSigningInAs`,values:{username:g},components:{mono:P(`span`,{className:`font-mono text-foreground`})}})}):e(`login.finishSigningInAs`,`Finish signing in.`)}),C&&P(`div`,{className:`rounded-md bg-danger/10 border border-danger/20 px-3 py-2 text-xs text-danger`,children:C}),N.includes(`passkey`)&&fe.map(e=>P(bv,{method:e,challengeToken:A,onComplete:Ee},e.id)),N.includes(`passkey`)&&me.map(e=>P(Dv,{method:e,config:{challengeToken:A,onComplete:Ee}},e.id)),wv(N,le)&&P(`div`,{className:`rounded-md border border-border bg-background px-3 py-2 text-xs text-foreground-subtle`,children:e(`login.passkeyVerificationIsnTAvailable`,`Passkey verification isn't available on this address. Open the hub via its domain URL to complete sign-in.`)}),N.includes(`passkey`)&&N.includes(`totp`)&&y(`div`,{className:`flex items-center gap-3`,children:[P(`div`,{className:`h-px flex-1 bg-border`}),P(`span`,{className:`text-[10px] uppercase tracking-wider text-foreground-subtle`,children:`or`}),P(`div`,{className:`h-px flex-1 bg-border`})]}),N.includes(`totp`)&&y(`form`,{onSubmit:Te,className:`space-y-4`,children:[y(`div`,{className:`space-y-1.5`,children:[P(`label`,{className:`text-xs font-medium text-foreground-subtle`,children:e(`login.authenticationCode`,`Authentication code`)}),P(`input`,{"data-testid":`login-totp`,type:`text`,inputMode:`numeric`,autoComplete:`one-time-code`,placeholder:`123456`,value:ee,onChange:e=>L(e.target.value.replace(/\D/g,``).slice(0,6)),className:`w-full rounded-lg border border-border bg-background px-3 py-3 text-center text-2xl font-mono tracking-widest text-foreground placeholder:text-foreground-disabled focus:border-primary focus:ring-1 focus:ring-primary/30 outline-none transition-all`,autoFocus:!0})]}),P(`button`,{"data-testid":`login-totp-submit`,type:`submit`,disabled:T||ee.length!==6,className:`w-full rounded-lg bg-primary px-4 py-2.5 text-sm font-semibold text-primary-foreground shadow-md shadow-primary/20 hover:shadow-lg hover:shadow-primary/30 disabled:opacity-50 disabled:shadow-none transition-all`,children:T?y(`span`,{className:`flex items-center justify-center gap-2`,children:[P(`span`,{className:`h-4 w-4 animate-spin rounded-full border-2 border-primary-foreground/30 border-t-primary-foreground`}),e(`login.verifying`,`Verifying...`)]}):e(`login.verifyAndSignIn`,`Verify and sign in`)})]}),y(`button`,{type:`button`,onClick:()=>{k(`credentials`),j(``),I([]),L(``),w(``)},className:`w-full flex items-center justify-center gap-1.5 text-xs text-foreground-subtle hover:text-foreground transition-colors`,children:[P(ve,{className:`h-3 w-3`}),e(`login.backToUsernamePassword`,`Back to username + password`)]})]}),O===`credentials`&&oe&&y(`p`,{"data-testid":`login-methods-pending`,role:`status`,className:`mt-4 flex items-center justify-center gap-2 text-xs text-foreground-subtle`,children:[P(`span`,{className:`h-3 w-3 animate-spin rounded-full border-2 border-foreground-subtle/30 border-t-foreground-subtle`}),e(`login.methodsPending`,`Loading other sign-in options...`)]}),O===`credentials`&&P(Ev,{methods:ce,widgetConfig:{onComplete:Ee,onSecondFactor:Ae,locale:a.language},onRedirect:ke}),P(`p`,{className:`mt-6 text-center text-[10px] text-foreground-subtle/50`,children:P(k_,{placement:`login`})})]})}):P(`div`,{className:`flex min-h-screen items-center justify-center bg-background p-4`,children:y(`div`,{className:`w-full max-w-sm rounded-xl border border-border bg-surface p-6 text-center space-y-4`,children:[P(`h1`,{className:`text-sm font-semibold text-foreground`,children:e(`login.returningToTheApp`,`Returning to the app…`)}),_e.failed?y(E,{children:[P(`p`,{className:`text-xs text-danger`,children:e(`login.couldNotPrepareTheSign`,`Could not prepare the sign-in handoff. You are logged in — retry below.`)}),P(`button`,{onClick:()=>void be(_e.callbackBase),className:`inline-flex rounded-lg bg-primary px-4 py-2 text-sm font-medium text-primary-foreground hover:bg-primary/90`,children:e(`common.retry`,`Retry`)})]}):_e.mintedUrl===null?P(`p`,{className:`text-xs text-foreground-subtle`,children:e(`login.preparingAOneTimeSign`,`Preparing a one-time sign-in code…`)}):y(E,{children:[P(`p`,{className:`text-xs text-foreground-subtle`,children:e(`login.ifTheAppDoesNot`,`If the app does not open automatically, tap below (the code expires in 60s).`)}),P(`a`,{href:_e.mintedUrl,className:`inline-flex rounded-lg bg-primary px-4 py-2 text-sm font-medium text-primary-foreground hover:bg-primary/90`,children:e(`login.openCamstack`,`Open CamStack`)})]})]})})}a();function Yv(){let{pathname:e,search:t,hash:n}=J();return P(Y,{to:`${Z_(e)}${t}${n}`,replace:!0})}function Xv(){return P(Y,{to:b_()??`/devices`,replace:!0})}var Zv=m(()=>i(()=>import(`./Devices-B-b5cUYn.js`).then(e=>({default:e.DevicesPage})),__vite__mapDeps([0,1,2,3,4,5,6,7,8]),import.meta.url)),Qv=m(()=>i(()=>import(`./Integrations-DtQc1eDp.js`).then(e=>({default:e.IntegrationsPage})),__vite__mapDeps([9,1,2,3,4,10,5,6,11,12,13,7,8]),import.meta.url)),$v=m(()=>i(()=>import(`./IntegrationDetail-DLncDXox.js`).then(e=>({default:e.IntegrationDetailPage})),__vite__mapDeps([14,1,2,3,4,15,5,16,11,12,13,7,17]),import.meta.url)),ey=m(()=>i(()=>import(`./Pipeline-r8TFI-Fa.js`).then(e=>({default:e.PipelinePage})),__vite__mapDeps([18,1,2,3,4,10,5,19,20,21,22,16,23,24,8]),import.meta.url)),ty=m(()=>i(()=>import(`./DeviceDetail-tZevLHDV.js`).then(e=>({default:e.DeviceDetailPage})),__vite__mapDeps([25,1,2,3,4,10,5,26,27,28,29,19,30,22,31,32,33,34,35,36,23,8,37,13]),import.meta.url)),ny=m(()=>i(()=>import(`./Showroom-BX1LrKmF.js`).then(e=>({default:e.ShowroomPage})),__vite__mapDeps([38,1,2,3,4]),import.meta.url)),ry=m(()=>i(()=>import(`./EmbedPlayerPage-CI3OOtRg.js`).then(e=>({default:e.EmbedPlayerPage})),__vite__mapDeps([39,1,2,3,4,5]),import.meta.url)),iy=m(()=>i(()=>import(`./Library-DbHcY62a.js`).then(e=>({default:e.LibraryPage})),__vite__mapDeps([40,1,2,3,4,10,5,41,19,21,42,43,34,44,37,13]),import.meta.url)),ay=m(()=>i(()=>import(`./Recordings-BrpMcrZw.js`).then(e=>({default:e.RecordingsPage})),__vite__mapDeps([45,1,2,3,4,10,5,46,43,47,26,48,49,50,37,13]),import.meta.url)),oy=m(()=>i(()=>import(`./Viewer-BW9JCbu_.js`).then(e=>({default:e.ViewerPage})),__vite__mapDeps([51,2,3,4,52,5,13,1]),import.meta.url)),sy=m(()=>i(()=>import(`./Build-C2qKCizt.js`).then(e=>({default:e.BuildPage})),__vite__mapDeps([53,1,2,3,4,10,5,29,54,19,43,55,31,32,33,56]),import.meta.url)),cy=m(()=>i(()=>import(`./CompositionEditorPage-syg6YTJF.js`).then(e=>({default:e.CompositionEditorPage})),__vite__mapDeps([57,1,2,3,4,29,5,6,55,31,10,32,33]),import.meta.url)),ly=m(()=>i(()=>import(`./Locations-CfYQkG2R.js`).then(e=>({default:e.LocationsPage})),__vite__mapDeps([58,1,2,3,4,10,5,29,59,42,43,35,32,33]),import.meta.url)),uy=m(()=>i(()=>import(`./Addons-CPaW6tLw.js`).then(e=>({default:e.AddonsPage})),__vite__mapDeps([60,1,2,3,4,19,5,6,16,61,13]),import.meta.url)),dy=m(()=>i(()=>import(`./AiProfiles-FpbSg3kP.js`).then(e=>({default:e.AiProfilesPage})),__vite__mapDeps([62,1,2,3,4,10,5,63,64,6,43,13]),import.meta.url)),fy=m(()=>i(()=>import(`./MyAccess-CjUd-G8J.js`).then(e=>({default:e.MyAccessPage})),__vite__mapDeps([65,1,2,3,4,10,5,19,66,67,68,6,43,69,13]),import.meta.url)),py=m(()=>i(()=>import(`./Logs-CMYLVX21.js`).then(e=>({default:e.LogsPage})),__vite__mapDeps([70,1,2,3,4,71,22,5,6,43,72,73,16,74,17,13,75]),import.meta.url)),my=m(()=>i(()=>import(`./Identity-CjEfAbi1.js`).then(e=>({default:e.IdentityPage})),__vite__mapDeps([76,1,2,3,4,10,5,77,19,66,67,68,6,43,72,73,16,74,17,13,69,75]),import.meta.url)),hy=m(()=>i(()=>import(`./Network-Dudx2Fcg.js`).then(e=>({default:e.NetworkPage})),__vite__mapDeps([78,1,2,3,4,10,5,29,19,79,6,43,72,73,16,74,17,13,75]),import.meta.url)),gy=m(()=>i(()=>import(`./Integrations-xxkUIJ67.js`).then(e=>({default:e.IntegrationsPage})),__vite__mapDeps([80,1,2,3,4,10,5,19,79,67,81,43,72,73,6,16,74,17,13,12]),import.meta.url)),_y=m(()=>i(()=>import(`./Data-VG64mGmK.js`).then(e=>({default:e.DataPage})),__vite__mapDeps([82,1,2,3,4,10,5,83,30,49,6,43,47,26,48,50,37,13]),import.meta.url)),vy=m(()=>i(()=>import(`./System-CvErxLx3.js`).then(e=>({default:e.SystemPage})),__vite__mapDeps([84,1,2,3,4,10,5,19,66,6,43,16,74,17,13]),import.meta.url)),yy=m(()=>i(()=>import(`./Cluster-BvxOiIZ7.js`).then(e=>({default:e.ClusterPage})),__vite__mapDeps([85,1,2,3,4,10,5,49,86,68,6,16,24,61,50]),import.meta.url)),by=m(()=>i(()=>import(`./Terminal-COEKXIAj.js`).then(e=>({default:e.TerminalPage})),__vite__mapDeps([87,1,2,3,4,19,5,6,16,88]),import.meta.url)),xy=m(()=>i(()=>import(`./Notifications-DE5Wtais.js`).then(e=>({default:e.NotificationsPage})),__vite__mapDeps([89,1,2,3,4,10,5,28,19,63,90,6,43,56,36,44,13,33]),import.meta.url)),Sy=m(()=>i(()=>import(`./History-BJcol9mz.js`).then(e=>({default:e.HistoryPage})),__vite__mapDeps([91,1,2,3,4,5,6]),import.meta.url)),Cy=m(()=>i(()=>import(`./Calendars-BRTmlFIt.js`).then(e=>({default:e.CalendarsPage})),__vite__mapDeps([92,1,2,3,4,10,5,19,6]),import.meta.url)),wy=new D({defaultOptions:{queries:{gcTime:0,staleTime:0,retry:!1,refetchOnWindowFocus:!1}}});Lr(wy);function Ty({field:e,value:t,onChange:n,disabled:r}){return P(gm,{field:e,value:t,onChange:n,disabled:r})}var Ey={"model-selector":Ty};function Dy({children:e}){let{t}=H(),{user:n,logout:r}=Wl(),[i,a]=f(0),o=M(n?.username??null);s(()=>{let e=n?.username??null;e!==o.current&&(o.current=e,Wc(),a(e=>e+1))},[n]);let c=d(()=>Z(),[i]),l=p(()=>{Z().reconnect(),a(e=>e+1),wy.invalidateQueries()},[]);zm(p(()=>cl(l),[l])),s(()=>il(()=>{Z().isSocketTokenStale()&&l()}),[l]);let u=p(async()=>{let e=await ll();return e&&l(),e},[l]),{bootReady:m,bootError:h}=Lm(c,n??null,r,u);return P(Pm,{children:P(Pe,{system:c,children:P(tr.Provider,{client:c.trpcClient,queryClient:wy,children:y(Vn,{children:[P(vn,{children:m?e:P(Oy,{})}),m&&P(Sm,{}),h!==null&&m&&y(`div`,{className:`fixed bottom-[calc(env(safe-area-inset-bottom)+1rem)] right-[calc(env(safe-area-inset-right)+1rem)] z-50 max-w-sm rounded-lg border border-warning/30 bg-warning/10 px-3 py-2 text-xs text-warning shadow-lg`,children:[t(`app.bootProbeFailed`,`Boot probe failed:`),` `,h,`. Retrying in background.`]})]})})})})}function Oy(){let{t:e}=H();return P(`div`,{className:`flex min-h-screen items-center justify-center bg-background`,children:y(`div`,{className:`flex items-center gap-3 text-sm text-foreground-subtle`,children:[P(`span`,{className:`h-4 w-4 animate-spin rounded-full border-2 border-primary/30 border-t-primary`}),e(`app.connecting`,`Connecting…`)]})})}function ky(){return P(`div`,{className:`flex min-h-screen items-center justify-center bg-background`,children:P(`span`,{className:`h-4 w-4 animate-spin rounded-full border-2 border-primary/30 border-t-primary`})})}function Ay(){return P(ar,{defaultMode:`dark`,children:P(N,{client:wy,children:P(Ul,{children:P(Dy,{children:P(Qn,{children:P(xm,{children:y(jn,{renderers:Ey,children:[P(Zo,{basename:We(),children:P(um,{children:P(w,{fallback:P(ky,{}),children:y(so,{children:[P(X,{path:`/login`,element:P(Jv,{})}),P(X,{path:`/admin/*`,element:P(Yv,{})}),P(X,{path:`/admin`,element:P(Yv,{})}),P(X,{path:`/change-password`,element:P($,{children:P(iv,{})})}),P(X,{path:`/showroom`,element:P(ny,{})}),P(X,{path:`/embed/player`,element:P(ry,{})}),y(X,{element:P($,{children:P(di,{children:P(I_,{})})}),children:[P(X,{index:!0,element:P(Xv,{})}),P(X,{path:`/access-denied`,element:P(Q_,{})}),P(X,{path:`/dashboard`,element:P(Y,{to:`/devices`,replace:!0})}),P(X,{path:`/devices`,element:P(Zv,{})}),P(X,{path:`/cameras`,element:P(Y,{to:`/devices`,replace:!0})}),P(X,{path:`/integrations`,element:P(Qv,{})}),P(X,{path:`/integrations/:integrationId`,element:P($v,{})}),P(X,{path:`/system/pipeline`,element:P(ey,{})}),P(X,{path:`/pipeline`,element:P(Y,{to:`/system/pipeline`,replace:!0})}),P(X,{path:`/live`,element:P(oy,{})}),P(X,{path:`/devices/:deviceId`,element:P(ty,{})}),P(X,{path:`/system/logs`,element:P($,{requireAdmin:!0,children:P(py,{})})}),P(X,{path:`/system/addons`,element:P($,{requireAdmin:!0,children:P(uy,{})})}),P(X,{path:`/system/ai`,element:P($,{requireAdmin:!0,children:P(dy,{})})}),P(X,{path:`/system/settings`,element:P($,{requireAdmin:!0,children:P(vy,{})})}),P(X,{path:`/system/nodes`,element:P($,{requireAdmin:!0,children:P(yy,{})})}),P(X,{path:`/system/notifications`,element:P($,{requireAdmin:!0,children:P(xy,{})})}),P(X,{path:`/system/history`,element:P($,{requireAdmin:!0,children:P(Sy,{})})}),P(X,{path:`/system/calendars`,element:P($,{requireAdmin:!0,children:P(Cy,{})})}),P(X,{path:`/system/identity`,element:P($,{requireAdmin:!0,children:P(my,{})})}),P(X,{path:`/system/my-access`,element:P(fy,{})}),P(X,{path:`/system/network`,element:P($,{requireAdmin:!0,children:P(hy,{})})}),P(X,{path:`/system/integrations`,element:P($,{requireAdmin:!0,children:P(gy,{})})}),P(X,{path:`/system/data`,element:P($,{requireAdmin:!0,children:P(_y,{})})}),P(X,{path:`/system`,element:P(Y,{to:Tm,replace:!0})}),P(X,{path:`/system/terminal`,element:P($,{requireAdmin:!0,children:P(by,{})})}),Em.map(e=>P(X,{path:e.path,element:P(Om,{tab:e.tab})},e.path)),P(X,{path:`/system/users`,element:P(Y,{to:`/system/identity?tab=users`,replace:!0})}),P(X,{path:`/system/api-keys`,element:P(Y,{to:`/system/identity?tab=api-keys`,replace:!0})}),P(X,{path:`/system/authentication`,element:P(Y,{to:J_(`authentication`),replace:!0})}),P(X,{path:`/system/linked-sessions`,element:P(Y,{to:`/system/identity?tab=linked-sessions`,replace:!0})}),P(X,{path:`/system/remote-access`,element:P(Y,{to:J_(`remoteAccess`),replace:!0})}),P(X,{path:`/system/turn`,element:P(Y,{to:J_(`turn`),replace:!0})}),P(X,{path:`/system/storage`,element:P(Y,{to:`/system/data?tab=storage`,replace:!0})}),P(X,{path:`/system/backup`,element:P(Y,{to:`/system/data?tab=backup`,replace:!0})}),P(X,{path:`/library`,element:P($,{requireAdmin:!0,children:P(iy,{})})}),P(X,{path:`/retrain`,element:P(Y,{to:`/addon/training`,replace:!0})}),P(X,{path:`/recordings`,element:P($,{requireAdmin:!0,children:P(ay,{})})}),P(X,{path:`/build`,element:P($,{requireAdmin:!0,children:P(sy,{})})}),P(X,{path:R_,element:P($,{requireAdmin:!0,children:P(cy,{})})}),P(X,{path:z_,element:P($,{requireAdmin:!0,children:P(cy,{})})}),P(X,{path:`/locations`,element:P($,{requireAdmin:!0,children:P(ly,{})})}),P(X,{path:`/automation`,element:P(_m,{to:`/build`})}),P(X,{path:`/addon/:pagePath`,element:P($,{requireAdmin:!0,children:P(Xm,{})})}),P(X,{path:`*`,element:P(Y,{to:`/devices`,replace:!0})})]})]})})})}),P(jm,{})]})})})})})})})}a(),window.__camstackUiLibrary=Or,window.__camstackSdk=jr,window.__camstackTypes=Kt;var jy=ei(document.getElementById(`root`));Lg(window.location.pathname,We())?Uv(jy):jy.render(P(S,{children:P(Ay,{})}));export{Kf as $,Wl as $n,pd as $t,zp as A,Lu as An,Hd as At,Qf as B,Yl as Bn,kd as Bt,Nm as C,$u as Cn,sf as Ct,qp as D,yu as Dn,Rd as Dt,cm as E,Nu as En,Fd as Et,_p as F,lu as Fn,jd as Ft,zf as G,ou as Gn,bd as Gt,Bf as H,nu as Hn,yd as Ht,rp as I,ru as In,Nd as It,Xf as J,Jl as Jn,Sd as Jt,Rf as K,eu as Kn,gd as Kt,lp as L,Ql as Ln,Ed as Lt,Fp as M,bu as Mn,zd as Mt,Pp as N,pu as Nn,wd as Nt,Gp as O,xu as On,Bd as Ot,Np as P,du as Pn,Md as Pt,Hf as Q,Kl as Qn,sd as Qt,up as R,ql as Rn,Ad as Rt,vh as S,Vu as Sn,qd as St,bm as T,Fu as Tn,Pd as Tt,ep as U,$l as Un,ud as Ut,Wf as V,Xl as Vn,Dd as Vt,qf as W,tu as Wn,Cd as Wt,np as X,cu as Xn,fd as Xt,$f as Y,iu as Yn,ld as Yt,Vf as Z,su as Zn,id as Zt,jg as _,vu as _n,Xd as _t,G_ as a,Mu as an,tc as ar,kf as at,Uh as b,Tu as bn,tf as bt,K_ as c,Ru as cn,qs as cr,Sf as ct,X_ as d,wu as dn,Y as dr,df as dt,md as en,Tc as er,Pf as et,B_ as f,Wu as fn,Ma as fr,gf as ft,yg as g,_u as gn,lf as gt,Wg as h,Au as hn,Zd as ht,W_ as i,ku as in,ac as ir,jf as it,Vp as j,Gu as jn,Ud as jt,Rp as k,zu as kn,Vd as kt,J_ as l,Uu as ln,Vs as lr,Gd as lt,V_ as m,Ku as mn,ss as mr,ef as mt,gv as n,Qu as nn,uc as nr,Nf as nt,H_ as o,hu as on,ec as or,Of as ot,L_ as p,Hu as pn,Ia as pr,nf as pt,Uf as q,Zl as qn,xd as qt,q_ as r,Pu as rn,nc as rr,Ff as rt,U_ as s,Iu as sn,$s as sr,Df as st,vv as t,Bu as tn,wc as tr,Mf as tt,Y_ as u,Xu as un,$o as ur,Kd as ut,_g as v,Zu as vn,cf as vt,Tm as w,ju as wn,Wd as wt,Ch as x,Eu as xn,rf as xt,cg as y,Cu as yn,af as yt,dp as z,au as zn,Od as zt};