@camstack/addon-admin-ui 1.2.489 → 1.2.491

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. package/dist/assets/{AddonAssetIcon-C0cWByHj.js → AddonAssetIcon-C-W05jOS.js} +1 -1
  2. package/dist/assets/{Addons-DtmmHLxt.js → Addons-DzzCgAq-.js} +1 -1
  3. package/dist/assets/{AdminPage-D6Yva5zf.js → AdminPage-Dy-fEJbf.js} +1 -1
  4. package/dist/assets/{AdminSectionedPage-ytDsnoAA.js → AdminSectionedPage-CLYqZKQj.js} +1 -1
  5. package/dist/assets/AiProfiles-CgwzlUVs.js +3 -0
  6. package/dist/assets/{BrokerEditorDialog-CTEagRft.js → BrokerEditorDialog-BfNVIR0c.js} +1 -1
  7. package/dist/assets/Build-CkP-FHmg.js +40 -0
  8. package/dist/assets/{Calendars-BzsJnrEA.js → Calendars-CJ9P43Kk.js} +1 -1
  9. package/dist/assets/{Cluster-C2D1ovUW.js → Cluster-BY0AJ7Y8.js} +1 -1
  10. package/dist/assets/{CompositionBlockEditor-CYmfatQE.js → CompositionBlockEditor-CosgjAjy.js} +1 -1
  11. package/dist/assets/{CompositionEditorPage-B5Cgu9cj.js → CompositionEditorPage-CJx0RCW8.js} +1 -1
  12. package/dist/assets/{Data-ChStbBhF.js → Data-B9ZuZX-A.js} +1 -1
  13. package/dist/assets/DeviceDetail-CB185X1z.js +2 -0
  14. package/dist/assets/{DeviceDoActionFields-GHZBRE4Q.js → DeviceDoActionFields-Bb2ej2cH.js} +1 -1
  15. package/dist/assets/{Devices-Bzyikktm.js → Devices-BF4EQ5d8.js} +1 -1
  16. package/dist/assets/{EmbedPlayerPage-ClpQaFoO.js → EmbedPlayerPage-evY5cBae.js} +1 -1
  17. package/dist/assets/HelperWizard-CD_0QhkR.js +2 -0
  18. package/dist/assets/{History-C6N6VRgs.js → History-afx6dKjt.js} +1 -1
  19. package/dist/assets/{Identity-CvFSqL46.js → Identity-BrjQOQ40.js} +1 -1
  20. package/dist/assets/{IntegrationDetail-AVnEA7GO.js → IntegrationDetail-DWTyAAj6.js} +1 -1
  21. package/dist/assets/{IntegrationHub-BqWPAkYu.js → IntegrationHub-BXbnNmwc.js} +1 -1
  22. package/dist/assets/{Integrations-CBEyPYvE.js → Integrations-B_RGvZtR.js} +1 -1
  23. package/dist/assets/{Integrations-BYiw8_da.js → Integrations-kKJWlcWD.js} +1 -1
  24. package/dist/assets/{Library-BcuUHsq3.js → Library-jWD_BsMv.js} +1 -1
  25. package/dist/assets/{Locations-BrPK_nfE.js → Locations-Da36xo8K.js} +1 -1
  26. package/dist/assets/{Logs-D_Jnlf_J.js → Logs-DWUljlNw.js} +1 -1
  27. package/dist/assets/{MaskShapeCanvas-C1WSjh5s.js → MaskShapeCanvas-BvI_4dLm.js} +1 -1
  28. package/dist/assets/{MotionZonesSettings-BB6LidaW.js → MotionZonesSettings-BvSmNtWZ.js} +1 -1
  29. package/dist/assets/{MyAccess-DjL1Z681.js → MyAccess-DyOUww3e.js} +1 -1
  30. package/dist/assets/{Network-DjKf4STc.js → Network-f3eno7Nz.js} +1 -1
  31. package/dist/assets/{NodeAddonsSettingsPanel-ivvFi7qU.js → NodeAddonsSettingsPanel-TyErVJaa.js} +1 -1
  32. package/dist/assets/Notifications-Bx6F55kk.js +1 -0
  33. package/dist/assets/Pipeline-yNzjqrit.js +1 -0
  34. package/dist/assets/{PrivacyMaskSettings-CSdKuS75.js → PrivacyMaskSettings-BBpPNBYz.js} +1 -1
  35. package/dist/assets/{Recordings-Ce8DTG1O.js → Recordings-Ci4LULiQ.js} +1 -1
  36. package/dist/assets/{ScanNetworkModal-81xkyJSk.js → ScanNetworkModal-Dn_Cbh-y.js} +1 -1
  37. package/dist/assets/{SceneMonitorEditor-ucsduhsM.js → SceneMonitorEditor-CuPQcK5y.js} +1 -1
  38. package/dist/assets/{SessionsList-Dgrg9zT1.js → SessionsList-DRYMTqqU.js} +1 -1
  39. package/dist/assets/{Showroom-CkHdCDH1.js → Showroom-Hd3Y1pZa.js} +1 -1
  40. package/dist/assets/{System-HvIXTTB1.js → System-C4I1BL8G.js} +1 -1
  41. package/dist/assets/{Terminal-CwE2WbSi.js → Terminal-DZwz7oSc.js} +1 -1
  42. package/dist/assets/{Viewer-B6suHwLq.js → Viewer-Dupx7vL4.js} +1 -1
  43. package/dist/assets/{_virtual_mf-localSharedImportMap___mfe_internal__admin_ui_host-BkS64PhS.js → _virtual_mf-localSharedImportMap___mfe_internal__admin_ui_host-CWGVTk4s.js} +1 -1
  44. package/dist/assets/{addon-icons-context-BY_MClqz.js → addon-icons-context-CzTWZHSh.js} +1 -1
  45. package/dist/assets/{archive-DSecC29S.js → archive-COytoRbW.js} +1 -1
  46. package/dist/assets/{assignment-candidates-CCD35Rpj.js → assignment-candidates-6WyXElcY.js} +1 -1
  47. package/dist/assets/{authed-media-Dow1_6zk.js → authed-media-BYn8KpCA.js} +1 -1
  48. package/dist/assets/{bell-off-kKEnaAlY.js → bell-off-CqaftCCC.js} +1 -1
  49. package/dist/assets/{board-model-CGmvb_0S.js → board-model-BnBpDyVJ.js} +1 -1
  50. package/dist/assets/{boxes-D29FuJd_.js → boxes-DiH5aKPU.js} +1 -1
  51. package/dist/assets/circle-slash-DjmuKPXI.js +1 -0
  52. package/dist/assets/client-CoTSmvjZ.js +358 -0
  53. package/dist/assets/{cloud-upload-CNHrN4UO.js → cloud-upload-CydKKaEp.js} +1 -1
  54. package/dist/assets/crop-FLPers4o.js +1 -0
  55. package/dist/assets/{device-integration-icon-Dg_7SOuH.js → device-integration-icon-BJlT_oa3.js} +1 -1
  56. package/dist/assets/device-picker-model-GAczoeeF.js +1 -0
  57. package/dist/assets/{dist-pyNtUJBC.js → dist-ByomGInQ.js} +1 -1
  58. package/dist/assets/dist-yzJdpluK.js +358 -0
  59. package/dist/assets/{eraser-DQdA4r-4.js → eraser-BvwiPI1u.js} +1 -1
  60. package/dist/assets/{format-CvRuKl82.js → format-pVRrtm44.js} +1 -1
  61. package/dist/assets/{hard-drive-download-BWtxkXEP.js → hard-drive-download-qh4K1hU8.js} +1 -1
  62. package/dist/assets/{hostInit-C4zImIaq.js → hostInit-BSSPz1Tp.js} +1 -1
  63. package/dist/assets/i18n-CI5vBtLY.js +1 -0
  64. package/dist/assets/{icons-CeHJ12H1.js → icons-wHAKhjV4.js} +1 -1
  65. package/dist/assets/{index-4kmzPYxW.js → index-B5aMjANu.js} +3 -3
  66. package/dist/assets/{key-ibd36DX6.js → key-GQVUlMPP.js} +1 -1
  67. package/dist/assets/{key-round-Cx5S95mB.js → key-round-BYU9tibU.js} +1 -1
  68. package/dist/assets/{layers-f2rCYTNI.js → layers-wvbWI8iv.js} +1 -1
  69. package/dist/assets/{linked-devices-model-DBaDc0Fe.js → linked-devices-model-CXZKHslN.js} +1 -1
  70. package/dist/assets/{list-ordered-DVEuSX72.js → list-ordered-DcXCNlr1.js} +1 -1
  71. package/dist/assets/{location-owned-usage-D20qY7jM.js → location-owned-usage-BP75gZgA.js} +1 -1
  72. package/dist/assets/{log-in-YSzSSnpb.js → log-in-BEcXcuRp.js} +1 -1
  73. package/dist/assets/{memory-stick-BxkFX9Lp.js → memory-stick-CzBkDqRK.js} +1 -1
  74. package/dist/assets/{message-square-plus-CReLm1AI.js → message-square-plus-DAfPpZoi.js} +1 -1
  75. package/dist/assets/{mf-entry-bootstrap-0-3901d897.js → mf-entry-bootstrap-0-2a116f23.js} +2 -2
  76. package/dist/assets/{mic-off-CzIbHCeE.js → mic-off-DJsgLuRv.js} +1 -1
  77. package/dist/assets/{monitor-off-D6AnJas6.js → monitor-off-BIDr69WD.js} +1 -1
  78. package/dist/assets/{monitor-smartphone-BYEnK_6t.js → monitor-smartphone-0cl5JG2q.js} +1 -1
  79. package/dist/assets/mount-GAczoeeF.js +1 -0
  80. package/dist/assets/{player-overlays-nQJCQERn.js → player-overlays-DN3wN3kB.js} +1 -1
  81. package/dist/assets/{recycle-CWMxz1Q3.js → recycle-6xhPDDKa.js} +1 -1
  82. package/dist/assets/remoteEntry-CxXnwLxt.js +1 -0
  83. package/dist/assets/{scan-eye-t_4fVxI4.js → scan-eye-C_qPMtrX.js} +1 -1
  84. package/dist/assets/{scissors-DL5nVl1a.js → scissors-5gO0XeLA.js} +1 -1
  85. package/dist/assets/{search-x-CbPl9Xi3.js → search-x-LetCZ_ep.js} +1 -1
  86. package/dist/assets/{send-BQl_zLK4.js → send-BfNViT0x.js} +1 -1
  87. package/dist/assets/{settings-2-7F6aVC_u.js → settings-2-T7g84dNm.js} +1 -1
  88. package/dist/assets/{sigma-kEBBYTCa.js → sigma-BlXZ2aw7.js} +1 -1
  89. package/dist/assets/{speaker-CkI0pe60.js → speaker-Ca-uaBj6.js} +1 -1
  90. package/dist/assets/src-DaPCpXY_.js +67 -0
  91. package/dist/assets/{step-inspector-model-HSCaPOVt.js → step-inspector-model-CQm0mKvR.js} +1 -1
  92. package/dist/assets/{table-2-Cukv2oib.js → table-2-CxbhwUvc.js} +1 -1
  93. package/dist/assets/{timer-reset-hysIbh2s.js → timer-reset-BZJJw_vy.js} +1 -1
  94. package/dist/assets/{ungroup-D4Nql8ck.js → ungroup-B0PNlyKk.js} +1 -1
  95. package/dist/assets/{unlink-DNVVxO6S.js → unlink-BTcNOC7C.js} +1 -1
  96. package/dist/assets/{usb-DNmhv4AW.js → usb-CVx1D-fe.js} +1 -1
  97. package/dist/assets/{use-scenes-feed-BUQTm5ig.js → use-scenes-feed-CyaFpfUP.js} +1 -1
  98. package/dist/assets/{use-stationary-objects-B4f1cFoy.js → use-stationary-objects-CE5HpIjg.js} +1 -1
  99. package/dist/assets/useEventInvalidation-GAczoeeF.js +1 -0
  100. package/dist/assets/{useNodeUrlSelection-BKSL_pMO.js → useNodeUrlSelection-DzLKeuVO.js} +1 -1
  101. package/dist/assets/user-round-DmS1e16J.js +1 -0
  102. package/dist/assets/{user-x-DGZKKLZG.js → user-x-CDW03V4s.js} +1 -1
  103. package/dist/assets/{video-DEeXGFHo.js → video-CWc9XxJk.js} +1 -1
  104. package/dist/assets/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__admin_ui_host__remoteEntry-_hash_-CF1E4s_B.js → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__admin_ui_host__remoteEntry-_hash_-Dq9ZgXY3.js} +2 -2
  105. package/dist/index.html +9 -9
  106. package/dist/server/addon.js +22 -6
  107. package/package.json +1 -1
  108. package/dist/assets/AiProfiles-Dr62eghf.js +0 -3
  109. package/dist/assets/Build-B8CmNZth.js +0 -40
  110. package/dist/assets/DeviceDetail-B4rdvagQ.js +0 -2
  111. package/dist/assets/HelperWizard-C9VjtAAi.js +0 -2
  112. package/dist/assets/Notifications-Ck0_YzEY.js +0 -1
  113. package/dist/assets/Pipeline-4J5lhNWd.js +0 -1
  114. package/dist/assets/circle-slash-BEdaE_jf.js +0 -1
  115. package/dist/assets/client-CdHPjeIs.js +0 -358
  116. package/dist/assets/crop-E8rhIxyE.js +0 -1
  117. package/dist/assets/device-picker-model-CdWcoivb.js +0 -1
  118. package/dist/assets/dist-CMh2DitE.js +0 -358
  119. package/dist/assets/i18n-Dgilx0WT.js +0 -1
  120. package/dist/assets/mount-CdWcoivb.js +0 -1
  121. package/dist/assets/remoteEntry-BNS8ga8f.js +0 -1
  122. package/dist/assets/src-DzfpPZrG.js +0 -67
  123. package/dist/assets/useEventInvalidation-CdWcoivb.js +0 -1
  124. package/dist/assets/user-round-I0Uty2ao.js +0 -1
@@ -1,4 +1,4 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./Devices-Bzyikktm.js","./src-DzfpPZrG.js","./player-overlays-nQJCQERn.js","./client-CdHPjeIs.js","./__vite-browser-external-BlMfPwfH.js","./useTranslation-BJr-n0es.js","./AdminPage-D6Yva5zf.js","./device-integration-icon-Dg_7SOuH.js","./useEventInvalidation-CdWcoivb.js","./Integrations-CBEyPYvE.js","./i18n-Dgilx0WT.js","./table-2-Cukv2oib.js","./ScanNetworkModal-81xkyJSk.js","./BrokerEditorDialog-CTEagRft.js","./log-in-YSzSSnpb.js","./mount-CdWcoivb.js","./IntegrationDetail-AVnEA7GO.js","./search-x-CbPl9Xi3.js","./NodeAddonsSettingsPanel-ivvFi7qU.js","./addon-icons-context-BY_MClqz.js","./Pipeline-4J5lhNWd.js","./video-DEeXGFHo.js","./usb-DNmhv4AW.js","./crop-E8rhIxyE.js","./layers-f2rCYTNI.js","./step-inspector-model-HSCaPOVt.js","./board-model-CGmvb_0S.js","./DeviceDetail-B4rdvagQ.js","./archive-DSecC29S.js","./scan-eye-t_4fVxI4.js","./bell-off-kKEnaAlY.js","./boxes-D29FuJd_.js","./sigma-kEBBYTCa.js","./circle-slash-BEdaE_jf.js","./HelperWizard-C9VjtAAi.js","./assignment-candidates-CCD35Rpj.js","./device-picker-model-CdWcoivb.js","./use-stationary-objects-B4f1cFoy.js","./linked-devices-model-DBaDc0Fe.js","./format-CvRuKl82.js","./authed-media-Dow1_6zk.js","./Showroom-CkHdCDH1.js","./EmbedPlayerPage-ClpQaFoO.js","./Library-BcuUHsq3.js","./user-x-DGZKKLZG.js","./user-round-I0Uty2ao.js","./AdminSectionedPage-ytDsnoAA.js","./use-scenes-feed-BUQTm5ig.js","./Recordings-Ce8DTG1O.js","./scissors-DL5nVl1a.js","./location-owned-usage-D20qY7jM.js","./eraser-DQdA4r-4.js","./hard-drive-download-BWtxkXEP.js","./format-size-DIxKXxtj.js","./Viewer-B6suHwLq.js","./monitor-off-D6AnJas6.js","./Build-B8CmNZth.js","./ungroup-D4Nql8ck.js","./CompositionBlockEditor-CYmfatQE.js","./DeviceDoActionFields-GHZBRE4Q.js","./CompositionEditorPage-B5Cgu9cj.js","./Locations-BrPK_nfE.js","./speaker-CkI0pe60.js","./Addons-DtmmHLxt.js","./useNodeUrlSelection-BKSL_pMO.js","./AiProfiles-Dr62eghf.js","./send-BQl_zLK4.js","./message-square-plus-CReLm1AI.js","./MyAccess-DjL1Z681.js","./key-round-Cx5S95mB.js","./monitor-smartphone-BYEnK_6t.js","./unlink-DNVVxO6S.js","./SessionsList-Dgrg9zT1.js","./Logs-D_Jnlf_J.js","./timer-reset-hysIbh2s.js","./IntegrationHub-BqWPAkYu.js","./settings-2-7F6aVC_u.js","./AddonAssetIcon-C0cWByHj.js","./addon-display-names-BkwMrExv.js","./Identity-CvFSqL46.js","./key-ibd36DX6.js","./Network-DjKf4STc.js","./Integrations-BYiw8_da.js","./recycle-CWMxz1Q3.js","./Data-ChStbBhF.js","./cloud-upload-CNHrN4UO.js","./System-HvIXTTB1.js","./Cluster-C2D1ovUW.js","./memory-stick-BxkFX9Lp.js","./Terminal-CwE2WbSi.js","./Terminal-kHJ-D0s7.css","./Notifications-Ck0_YzEY.js","./list-ordered-DVEuSX72.js","./History-C6N6VRgs.js","./Calendars-BzsJnrEA.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_-CF1E4s_B.js";import{t as i}from"./vite-preload-helper-kNaey6uv.js";import{A as a,C as o,D as s,F as c,G as l,H as u,I as d,J as f,K as p,M as m,N as h,O as g,P as _,Q as v,R as y,S as b,V as x,X as S,Y as C,Z as w,a as T,d as E,et as D,i as O,j as k,k as A,m as j,o as M,u as N,x as P,z as F}from"./_virtual_mf___mfe_internal__admin_ui_host__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-CEyXHAdg.js";import{$n as ee,An as te,Bn as ne,Br as re,Ci as ie,Dr as ae,En as oe,Ir as se,Lt as ce,Mi as le,Ni as I,Oi as ue,Or as de,Pt as fe,Q as L,Qt as pe,Ri as me,Sn as he,T as ge,Tr as _e,Vr as ve,Wi as ye,Yr as be,Z as xe,Zi as Se,Zn as Ce,Zr as we,_t as Te,bi as Ee,ci as De,cn as Oe,dn as ke,dt as Ae,en as je,fn as Me,ft as Ne,gi as Pe,hr as Fe,ht as Ie,ia as Le,ir as Re,it as ze,kn as Be,kr as Ve,mi as He,mn as Ue,na as We,nr as Ge,on as Ke,ot as qe,pi as Je,pn as Ye,qn as Xe,qt as Ze,rt as Qe,sr as $e,ut as et,wi as tt,xi as nt,xn as rt,yr as it,zr as at}from"./player-overlays-nQJCQERn.js";import{$i as ot,A as st,At as ct,Bt as lt,Cr as ut,Ct as dt,Dt as ft,Et as pt,F as mt,Ft as ht,G as gt,Hr as _t,Ht as vt,I as yt,It as bt,L as xt,Lt as St,M as Ct,N as wt,Nt as Tt,Pt as Et,Rt as Dt,Sr as Ot,St as kt,T as At,Vt as jt,W as Mt,Zn as Nt,a as Pt,bt as Ft,ct as It,dt as Lt,ft as Rt,ht as zt,i as Bt,j as Vt,ja as Ht,k as Ut,kt as Wt,la as Gt,lt as Kt,mt as qt,n as Jt,na as Yt,pt as Xt,t as Zt,ut as Qt,vt as $t,wr as en,wt as tn,yt as nn,zt as rn}from"./client-CdHPjeIs.js";import{a as an,c as on,d as sn,f as cn,h as ln,i as un,l as dn,m as fn,n as pn,o as mn,p as hn,r as gn,s as _n,t as vn,u as yn}from"./video-DEeXGFHo.js";import{$r as bn,Ad as xn,At as Sn,Br as Cn,Bu as wn,Cd as Tn,Cu as En,Gi as Dn,Gr as On,Ho as kn,Hr as An,Ht as jn,Il as Mn,Io as Nn,Ir as Pn,It as Fn,Ji as In,Jo as Ln,Jr as Rn,Ki as zn,Kr as Bn,Ln as Vn,Lo as Hn,Ni as Un,Or as Wn,Pl as Gn,Pr as Kn,Ps as qn,Qo as Jn,R as Yn,Ro as Xn,Rr as Zn,Td as Qn,Ti as $n,Tr as er,Uo as tr,Ur as nr,W as rr,Wo as ir,Wr as ar,Wt as or,Yi as sr,Yo as cr,Yr as lr,Zr as ur,_o as dr,_r as fr,_u as pr,an as mr,cr as hr,dn as gr,dr as _r,ei as vr,fr as yr,gd as br,gr as xr,gt as Sr,hd as Cr,ho as wr,hr as Tr,id as Er,in as Dr,kd as Or,l as kr,ld as R,ln as Ar,mi as jr,mo as Mr,mr as Nr,n as Pr,ni as Fr,nn as Ir,nr as Lr,on as Rr,os as zr,p as Br,pr as Vr,qi as Hr,qr as Ur,rd as Wr,ri as Gr,rn as Kr,sn as qr,sr as Jr,ud as Yr,ur as Xr,vd as Zr,vo as Qr,vu as $r,xo as ei,xt as ti,y as ni,yd as ri,yi as ii,ys as ai,zr as oi,zt as si}from"./src-DzfpPZrG.js";import{r as ci,t as li}from"./_virtual_mf___mfe_internal__admin_ui_host__loadShare__react_mf_2_dom__loadShare__.js-BPba2g2p.js";import{t as ui}from"./_virtual_mf___mfe_internal__admin_ui_host__loadShare__react_mf_2_dom_mf_1_client__loadShare__.js-ZBKFTPET.js";import{n as di,t as z}from"./i18n-Dgilx0WT.js";import{a as fi,c as pi,i as mi,l as hi,n as gi,o as _i,s as vi,t as B,u as yi}from"./useTranslation-BJr-n0es.js";import"./mount-CdWcoivb.js";import{n as bi,t as xi}from"./addon-icons-context-BY_MClqz.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)}})(),D();var Si=/^(?:[a-z][a-z0-9+.-]*:|[\\/]{2})/i,Ci=/^[\\/]{2}/;function wi(e,t){return t+e.replace(/\\/g,`/`)}var Ti=`popstate`;function Ei(e){return typeof e==`object`&&!!e&&`pathname`in e&&`search`in e&&`hash`in e&&`state`in e&&`key`in e}function Di(e={}){function t(e,t){let n=t.state?.masked,{pathname:r,search:i,hash:a}=n||e.location;return Ai(``,{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:ji(t)}return Ni(t,n,null,e)}function V(e,t){if(e===!1||e==null)throw Error(t)}function H(e,t){if(!e){typeof console<`u`&&console.warn(t);try{throw Error(t)}catch{}}}function Oi(){return Math.random().toString(36).substring(2,10)}function ki(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 Ai(e,t,n=null,r,i){return{pathname:typeof e==`string`?e:e.pathname,search:``,hash:``,...typeof t==`string`?Mi(t):t,state:n,key:t&&t.key||r||Oi(),mask:i}}function ji({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 Mi(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 Ni(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=Ei(e)?e:Ai(h.location,e,t);n&&n(r,e),l=u()+1;let d=ki(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=Ei(e)?e:Ai(h.location,e,t);n&&n(r,e),l=u();let i=ki(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 Pi(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(Ti,d),c=e,()=>{i.removeEventListener(Ti,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 Pi(e,t,n=!1){let r=`http://localhost`;e&&(r=e.location.origin===`null`?e.location.href:e.location.origin),V(r,`No window.location.(origin|href) available to create URL`);let i=typeof t==`string`?t:ji(t);return i=i.replace(/ $/,`%20`),!n&&Ci.test(i)&&(i=r+i),new URL(i,r)}function Fi(e,t,n=`/`){return Ii(e,t,n,!1)}function Ii(e,t,n,r,i){let a=na((typeof t==`string`?Mi(t):t).pathname||`/`,n);if(a==null)return null;let o=i??Ri(e),s=null,c=ta(a);for(let e=0;s==null&&e<o.length;++e)s=Zi(o[e],c,r);return s}function Li(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 Ri(e){let t=zi(e);return Vi(t),t}function zi(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;V(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=U([r,c.relativePath]),u=n.concat(c);e.children&&e.children.length>0&&(V(e.index!==!0,`Index routes must not have child routes. Please remove all child routes from route path "${l}".`),zi(e.children,t,u,l,o)),!(e.path==null&&!e.index)&&t.push({path:l,score:Yi(l,e.index),routesMeta:u.map((e,t)=>{let[n,r]=ea(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 Bi(e.path))a(e,t,!0,n)}),t}function Bi(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=Bi(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 Vi(e){e.sort((e,t)=>e.score===t.score?Xi(e.routesMeta.map(e=>e.childrenIndex),t.routesMeta.map(e=>e.childrenIndex)):t.score-e.score)}var Hi=/^:[\w-]+$/,Ui=3,Wi=2,Gi=1,Ki=10,qi=-2,Ji=e=>e===`*`;function Yi(e,t){let n=e.split(`/`),r=n.length;return n.some(Ji)&&(r+=qi),t&&(r+=Wi),n.filter(e=>!Ji(e)).reduce((e,t)=>e+(Hi.test(t)?Ui:t===``?Gi:Ki),r)}function Xi(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 Zi(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?$i(u,l,s.matcher,s.compiledParams):Qi(u,l),f=s.route;if(!d&&c&&n&&!r[r.length-1].route.index&&(d=Qi({path:s.relativePath,caseSensitive:s.caseSensitive,end:!1},l)),!d)return null;Object.assign(i,d.params),o.push({params:i,pathname:U([a,d.pathname]),pathnameBase:da(U([a,d.pathnameBase])),route:f}),d.pathnameBase!==`/`&&(a=U([a,d.pathnameBase]))}return o}function Qi(e,t){typeof e==`string`&&(e={path:e,caseSensitive:!1,end:!0});let[n,r]=ea(e.path,e.caseSensitive,e.end);return $i(e,t,n,r)}function $i(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 ea(e,t=!1,n=!0){H(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 ta(e){try{return e.split(`/`).map(e=>decodeURIComponent(e).replace(/\//g,`%2F`)).join(`/`)}catch(t){return H(!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 na(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 ra(e,t=`/`){let{pathname:n,search:r=``,hash:i=``}=typeof e==`string`?Mi(e):e,a;return n?(n=la(n),a=n.startsWith(`/`)?ia(n.substring(1),`/`):ia(n,t)):a=t,{pathname:a,search:fa(r),hash:pa(i)}}function ia(e,t){let n=ua(t).split(`/`);return e.split(`/`).forEach(e=>{e===`..`?n.length>1&&n.pop():e!==`.`&&n.push(e)}),n.length>1?n.join(`/`):`/`}function aa(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 oa(e){return e.filter((e,t)=>t===0||e.route.path&&e.route.path.length>0)}function sa(e){let t=oa(e);return t.map((e,n)=>n===t.length-1?e.pathname:e.pathnameBase)}function ca(e,t,n,r=!1){let i;typeof e==`string`?i=Mi(e):(i={...e},V(!i.pathname||!i.pathname.includes(`?`),aa(`?`,`pathname`,`search`,i)),V(!i.pathname||!i.pathname.includes(`#`),aa(`#`,`pathname`,`hash`,i)),V(!i.search||!i.search.includes(`#`),aa(`#`,`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=ra(i,s),l=o&&o!==`/`&&o.endsWith(`/`),u=(a||o===`.`)&&n.endsWith(`/`);return!c.pathname.endsWith(`/`)&&(l||u)&&(c.pathname+=`/`),c}var la=e=>e.replace(/[\\/]{2,}/g,`/`),U=e=>la(e.join(`/`)),ua=e=>e.replace(/\/+$/,``),da=e=>ua(e).replace(/^\/*/,`/`),fa=e=>!e||e===`?`?``:e.startsWith(`?`)?e:`?`+e,pa=e=>!e||e===`#`?``:e.startsWith(`#`)?e:`#`+e,ma=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 ha(e){return e!=null&&typeof e.status==`number`&&typeof e.statusText==`string`&&typeof e.internal==`boolean`&&`data`in e}function ga(e){return U(e.map(e=>e.route.path).filter(Boolean))||`/`}var _a=typeof window<`u`&&window.document!==void 0&&window.document.createElement!==void 0;function va(e,t){let n=e;if(typeof n!=`string`||!Si.test(n))return{absoluteURL:void 0,isExternal:!1,to:n};let r=n,i=!1;if(_a)try{let e=new URL(window.location.href),r=Ci.test(n)?new URL(wi(n,e.protocol)):new URL(n),a=na(r.pathname,t);r.origin===e.origin&&a!=null?n=a+r.search+r.hash:i=!0}catch{H(!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 ya=[`POST`,`PUT`,`PATCH`,`DELETE`];new Set(ya);var ba=[`GET`,...ya];new Set(ba);var xa=[`about:`,`blob:`,`chrome:`,`chrome-untrusted:`,`content:`,`data:`,`devtools:`,`file:`,`filesystem:`,`javascript:`];function Sa(e){try{return xa.includes(new URL(e).protocol)}catch{return!1}}var Ca=A(null);Ca.displayName=`DataRouter`;var wa=A(null);wa.displayName=`DataRouterState`;var Ta=A(!1);function Ea(){return F(Ta)}var Da=A({isTransitioning:!1});Da.displayName=`ViewTransition`;var Oa=A(new Map);Oa.displayName=`Fetchers`;var ka=A(null);ka.displayName=`Await`;var W=A(null);W.displayName=`Navigation`;var Aa=A(null);Aa.displayName=`Location`;var G=A({outlet:null,matches:[],isDataRoute:!1});G.displayName=`Route`;var ja=A(null);ja.displayName=`RouteError`;var Ma=`REACT_ROUTER_ERROR`,Na=`REDIRECT`,Pa=`ROUTE_ERROR_RESPONSE`;function Fa(e){if(e.startsWith(`${Ma}:${Na}:{`))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 Ia(e){if(e.startsWith(`${Ma}:${Pa}:{`))try{let t=JSON.parse(e.slice(40));if(typeof t==`object`&&t&&typeof t.status==`number`&&typeof t.statusText==`string`)return new ma(t.status,t.statusText,t.data)}catch{}}function La(e,{relative:t}={}){V(Ra(),`useHref() may be used only in the context of a <Router> component.`);let{basename:n,navigator:r}=F(W),{hash:i,pathname:a,search:o}=Ka(e,{relative:t}),s=a;return n!==`/`&&(s=a===`/`?n:U([n,a])),r.createHref({pathname:s,search:o,hash:i})}function Ra(){return F(Aa)!=null}function K(){return V(Ra(),`useLocation() may be used only in the context of a <Router> component.`),F(Aa).location}function za(){return F(Aa).navigationType}var Ba=`You should call navigate() in a React.useEffect(), not when your component is first rendered.`;function Va(e){F(W).static||l(e)}function q(){let{isDataRoute:e}=F(G);return e?fo():Ha()}function Ha(){V(Ra(),`useNavigate() may be used only in the context of a <Router> component.`);let e=F(Ca),{basename:t,navigator:n}=F(W),{matches:r}=F(G),{pathname:i}=K(),a=JSON.stringify(sa(r)),o=f(!1);return Va(()=>{o.current=!0}),y((r,s={})=>{if(H(o.current,Ba),!o.current)return;if(typeof r==`number`){n.go(r);return}let c=ca(r,JSON.parse(a),i,s.relative===`path`);e==null&&t!==`/`&&(c.pathname=c.pathname===`/`?t:U([t,c.pathname])),(s.replace?n.replace:n.push)(c,s.state,s)},[t,n,a,i,e])}var Ua=A(null);function Wa(e){let t=F(G).outlet;return p(()=>t&&a(Ua.Provider,{value:e},t),[t,e])}function Ga(){let{matches:e}=F(G);return e[e.length-1]?.params??{}}function Ka(e,{relative:t}={}){let{matches:n}=F(G),{pathname:r}=K(),i=JSON.stringify(sa(n));return p(()=>ca(e,JSON.parse(i),r,t===`path`),[e,i,r,t])}function qa(e,t){return Ja(e,t)}function Ja(e,t,n){V(Ra(),`useRoutes() may be used only in the context of a <Router> component.`);let{navigator:r}=F(W),{matches:i}=F(G),o=i[i.length-1],s=o?o.params:{},c=o?o.pathname:`/`,l=o?o.pathnameBase:`/`,u=o&&o.route;{let e=u&&u.path||``;mo(c,!u||e.endsWith(`*`)||e.endsWith(`*?`),`You rendered descendant <Routes> (or called \`useRoutes()\`) at "${c}" (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-BF4EQ5d8.js","./src-DaPCpXY_.js","./player-overlays-DN3wN3kB.js","./client-CoTSmvjZ.js","./__vite-browser-external-BlMfPwfH.js","./useTranslation-BJr-n0es.js","./AdminPage-Dy-fEJbf.js","./device-integration-icon-BJlT_oa3.js","./useEventInvalidation-GAczoeeF.js","./Integrations-B_RGvZtR.js","./i18n-CI5vBtLY.js","./table-2-CxbhwUvc.js","./ScanNetworkModal-Dn_Cbh-y.js","./BrokerEditorDialog-BfNVIR0c.js","./log-in-BEcXcuRp.js","./mount-GAczoeeF.js","./IntegrationDetail-DWTyAAj6.js","./search-x-LetCZ_ep.js","./NodeAddonsSettingsPanel-TyErVJaa.js","./addon-icons-context-CzTWZHSh.js","./Pipeline-yNzjqrit.js","./video-CWc9XxJk.js","./usb-CVx1D-fe.js","./crop-FLPers4o.js","./layers-wvbWI8iv.js","./step-inspector-model-CQm0mKvR.js","./board-model-BnBpDyVJ.js","./DeviceDetail-CB185X1z.js","./archive-COytoRbW.js","./scan-eye-C_qPMtrX.js","./bell-off-CqaftCCC.js","./boxes-DiH5aKPU.js","./sigma-BlXZ2aw7.js","./circle-slash-DjmuKPXI.js","./HelperWizard-CD_0QhkR.js","./assignment-candidates-6WyXElcY.js","./device-picker-model-GAczoeeF.js","./use-stationary-objects-CE5HpIjg.js","./linked-devices-model-CXZKHslN.js","./format-pVRrtm44.js","./authed-media-BYn8KpCA.js","./Showroom-Hd3Y1pZa.js","./EmbedPlayerPage-evY5cBae.js","./Library-jWD_BsMv.js","./user-x-CDW03V4s.js","./user-round-DmS1e16J.js","./AdminSectionedPage-CLYqZKQj.js","./use-scenes-feed-CyaFpfUP.js","./Recordings-Ci4LULiQ.js","./scissors-5gO0XeLA.js","./location-owned-usage-BP75gZgA.js","./eraser-BvwiPI1u.js","./hard-drive-download-qh4K1hU8.js","./format-size-DIxKXxtj.js","./Viewer-Dupx7vL4.js","./monitor-off-BIDr69WD.js","./Build-CkP-FHmg.js","./ungroup-B0PNlyKk.js","./CompositionBlockEditor-CosgjAjy.js","./DeviceDoActionFields-Bb2ej2cH.js","./CompositionEditorPage-CJx0RCW8.js","./Locations-Da36xo8K.js","./speaker-Ca-uaBj6.js","./Addons-DzzCgAq-.js","./useNodeUrlSelection-DzLKeuVO.js","./AiProfiles-CgwzlUVs.js","./send-BfNViT0x.js","./message-square-plus-DAfPpZoi.js","./MyAccess-DyOUww3e.js","./key-round-BYU9tibU.js","./monitor-smartphone-0cl5JG2q.js","./unlink-BTcNOC7C.js","./SessionsList-DRYMTqqU.js","./Logs-DWUljlNw.js","./timer-reset-BZJJw_vy.js","./IntegrationHub-BXbnNmwc.js","./settings-2-T7g84dNm.js","./AddonAssetIcon-C-W05jOS.js","./addon-display-names-BkwMrExv.js","./Identity-BrjQOQ40.js","./key-GQVUlMPP.js","./Network-f3eno7Nz.js","./Integrations-kKJWlcWD.js","./recycle-6xhPDDKa.js","./Data-B9ZuZX-A.js","./cloud-upload-CydKKaEp.js","./System-C4I1BL8G.js","./Cluster-BY0AJ7Y8.js","./memory-stick-CzBkDqRK.js","./Terminal-DZwz7oSc.js","./Terminal-kHJ-D0s7.css","./Notifications-Bx6F55kk.js","./list-ordered-DcXCNlr1.js","./History-afx6dKjt.js","./Calendars-CJ9P43Kk.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_-Dq9ZgXY3.js";import{t as i}from"./vite-preload-helper-kNaey6uv.js";import{A as a,C as o,D as s,F as c,G as l,H as u,I as d,J as f,K as p,M as m,N as h,O as g,P as _,Q as v,R as y,S as b,V as x,X as S,Y as C,Z as w,a as T,d as E,et as D,i as O,j as k,k as A,m as j,o as M,u as N,x as P,z as F}from"./_virtual_mf___mfe_internal__admin_ui_host__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-CEyXHAdg.js";import{$n as ee,An as te,Bn as ne,Br as re,Ci as ie,Dr as ae,En as oe,Ir as se,Lt as ce,Mi as le,Ni as I,Oi as ue,Or as de,Pt as fe,Q as L,Qt as pe,Ri as me,Sn as he,T as ge,Tr as _e,Vr as ve,Wi as ye,Yr as be,Z as xe,Zi as Se,Zn as Ce,Zr as we,_t as Te,bi as Ee,ci as De,cn as Oe,dn as ke,dt as Ae,en as je,fn as Me,ft as Ne,gi as Pe,hr as Fe,ht as Ie,ia as Le,ir as Re,it as ze,kn as Be,kr as Ve,mi as He,mn as Ue,na as We,nr as Ge,on as Ke,ot as qe,pi as Je,pn as Ye,qn as Xe,qt as Ze,rt as Qe,sr as $e,ut as et,wi as tt,xi as nt,xn as rt,yr as it,zr as at}from"./player-overlays-DN3wN3kB.js";import{A as ot,At as st,Bt as ct,Ct as lt,Dr as ut,Dt as dt,Er as ft,Et as pt,F as mt,Fa as ht,Ft as gt,G as _t,Ht as vt,I as yt,It as bt,Kr as xt,L as St,Lt as Ct,M as wt,N as Tt,Nt as Et,Or as Dt,Pt as Ot,Rt as kt,St as At,T as jt,Vt as Mt,W as Nt,a as Pt,bt as Ft,ct as It,dt as Lt,ft as Rt,ht as zt,i as Bt,j as Vt,k as Ht,kt as Ut,lt as Wt,mt as Gt,n as Kt,oa as qt,pa as Jt,pt as Yt,ra as Xt,t as Zt,tr as Qt,ut as $t,vt as en,wt as tn,yt as nn,zt as rn}from"./client-CoTSmvjZ.js";import{a as an,c as on,d as sn,f as cn,h as ln,i as un,l as dn,m as fn,n as pn,o as mn,p as hn,r as gn,s as _n,t as vn,u as yn}from"./video-CWc9XxJk.js";import{$r as bn,Ad as xn,At as Sn,Br as Cn,Bu as wn,Cd as Tn,Cu as En,Gi as Dn,Gr as On,Ho as kn,Hr as An,Ht as jn,Il as Mn,Io as Nn,Ir as Pn,It as Fn,Ji as In,Jo as Ln,Jr as Rn,Ki as zn,Kr as Bn,Ln as Vn,Lo as Hn,Ni as Un,Or as Wn,Pl as Gn,Pr as Kn,Ps as qn,Qo as Jn,R as Yn,Ro as Xn,Rr as Zn,Td as Qn,Ti as $n,Tr as er,Uo as tr,Ur as nr,W as rr,Wo as ir,Wr as ar,Wt as or,Yi as sr,Yo as cr,Yr as lr,Zr as ur,_o as dr,_r as fr,_u as pr,an as mr,cr as hr,dn as gr,dr as _r,ei as vr,fr as yr,gd as br,gr as xr,gt as Sr,hd as Cr,ho as wr,hr as Tr,id as Er,in as Dr,kd as Or,l as kr,ld as R,ln as Ar,mi as jr,mo as Mr,mr as Nr,n as Pr,ni as Fr,nn as Ir,nr as Lr,on as Rr,os as zr,p as Br,pr as Vr,qi as Hr,qr as Ur,rd as Wr,ri as Gr,rn as Kr,sn as qr,sr as Jr,ud as Yr,ur as Xr,vd as Zr,vo as Qr,vu as $r,xo as ei,xt as ti,y as ni,yd as ri,yi as ii,ys as ai,zr as oi,zt as si}from"./src-DaPCpXY_.js";import{r as ci,t as li}from"./_virtual_mf___mfe_internal__admin_ui_host__loadShare__react_mf_2_dom__loadShare__.js-BPba2g2p.js";import{t as ui}from"./_virtual_mf___mfe_internal__admin_ui_host__loadShare__react_mf_2_dom_mf_1_client__loadShare__.js-ZBKFTPET.js";import{n as di,t as z}from"./i18n-CI5vBtLY.js";import{a as fi,c as pi,i as mi,l as hi,n as gi,o as _i,s as vi,t as B,u as yi}from"./useTranslation-BJr-n0es.js";import"./mount-GAczoeeF.js";import{n as bi,t as xi}from"./addon-icons-context-CzTWZHSh.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)}})(),D();var Si=/^(?:[a-z][a-z0-9+.-]*:|[\\/]{2})/i,Ci=/^[\\/]{2}/;function wi(e,t){return t+e.replace(/\\/g,`/`)}var Ti=`popstate`;function Ei(e){return typeof e==`object`&&!!e&&`pathname`in e&&`search`in e&&`hash`in e&&`state`in e&&`key`in e}function Di(e={}){function t(e,t){let n=t.state?.masked,{pathname:r,search:i,hash:a}=n||e.location;return Ai(``,{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:ji(t)}return Ni(t,n,null,e)}function V(e,t){if(e===!1||e==null)throw Error(t)}function H(e,t){if(!e){typeof console<`u`&&console.warn(t);try{throw Error(t)}catch{}}}function Oi(){return Math.random().toString(36).substring(2,10)}function ki(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 Ai(e,t,n=null,r,i){return{pathname:typeof e==`string`?e:e.pathname,search:``,hash:``,...typeof t==`string`?Mi(t):t,state:n,key:t&&t.key||r||Oi(),mask:i}}function ji({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 Mi(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 Ni(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=Ei(e)?e:Ai(h.location,e,t);n&&n(r,e),l=u()+1;let d=ki(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=Ei(e)?e:Ai(h.location,e,t);n&&n(r,e),l=u();let i=ki(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 Pi(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(Ti,d),c=e,()=>{i.removeEventListener(Ti,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 Pi(e,t,n=!1){let r=`http://localhost`;e&&(r=e.location.origin===`null`?e.location.href:e.location.origin),V(r,`No window.location.(origin|href) available to create URL`);let i=typeof t==`string`?t:ji(t);return i=i.replace(/ $/,`%20`),!n&&Ci.test(i)&&(i=r+i),new URL(i,r)}function Fi(e,t,n=`/`){return Ii(e,t,n,!1)}function Ii(e,t,n,r,i){let a=na((typeof t==`string`?Mi(t):t).pathname||`/`,n);if(a==null)return null;let o=i??Ri(e),s=null,c=ta(a);for(let e=0;s==null&&e<o.length;++e)s=Zi(o[e],c,r);return s}function Li(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 Ri(e){let t=zi(e);return Vi(t),t}function zi(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;V(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=U([r,c.relativePath]),u=n.concat(c);e.children&&e.children.length>0&&(V(e.index!==!0,`Index routes must not have child routes. Please remove all child routes from route path "${l}".`),zi(e.children,t,u,l,o)),!(e.path==null&&!e.index)&&t.push({path:l,score:Yi(l,e.index),routesMeta:u.map((e,t)=>{let[n,r]=ea(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 Bi(e.path))a(e,t,!0,n)}),t}function Bi(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=Bi(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 Vi(e){e.sort((e,t)=>e.score===t.score?Xi(e.routesMeta.map(e=>e.childrenIndex),t.routesMeta.map(e=>e.childrenIndex)):t.score-e.score)}var Hi=/^:[\w-]+$/,Ui=3,Wi=2,Gi=1,Ki=10,qi=-2,Ji=e=>e===`*`;function Yi(e,t){let n=e.split(`/`),r=n.length;return n.some(Ji)&&(r+=qi),t&&(r+=Wi),n.filter(e=>!Ji(e)).reduce((e,t)=>e+(Hi.test(t)?Ui:t===``?Gi:Ki),r)}function Xi(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 Zi(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?$i(u,l,s.matcher,s.compiledParams):Qi(u,l),f=s.route;if(!d&&c&&n&&!r[r.length-1].route.index&&(d=Qi({path:s.relativePath,caseSensitive:s.caseSensitive,end:!1},l)),!d)return null;Object.assign(i,d.params),o.push({params:i,pathname:U([a,d.pathname]),pathnameBase:da(U([a,d.pathnameBase])),route:f}),d.pathnameBase!==`/`&&(a=U([a,d.pathnameBase]))}return o}function Qi(e,t){typeof e==`string`&&(e={path:e,caseSensitive:!1,end:!0});let[n,r]=ea(e.path,e.caseSensitive,e.end);return $i(e,t,n,r)}function $i(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 ea(e,t=!1,n=!0){H(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 ta(e){try{return e.split(`/`).map(e=>decodeURIComponent(e).replace(/\//g,`%2F`)).join(`/`)}catch(t){return H(!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 na(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 ra(e,t=`/`){let{pathname:n,search:r=``,hash:i=``}=typeof e==`string`?Mi(e):e,a;return n?(n=la(n),a=n.startsWith(`/`)?ia(n.substring(1),`/`):ia(n,t)):a=t,{pathname:a,search:fa(r),hash:pa(i)}}function ia(e,t){let n=ua(t).split(`/`);return e.split(`/`).forEach(e=>{e===`..`?n.length>1&&n.pop():e!==`.`&&n.push(e)}),n.length>1?n.join(`/`):`/`}function aa(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 oa(e){return e.filter((e,t)=>t===0||e.route.path&&e.route.path.length>0)}function sa(e){let t=oa(e);return t.map((e,n)=>n===t.length-1?e.pathname:e.pathnameBase)}function ca(e,t,n,r=!1){let i;typeof e==`string`?i=Mi(e):(i={...e},V(!i.pathname||!i.pathname.includes(`?`),aa(`?`,`pathname`,`search`,i)),V(!i.pathname||!i.pathname.includes(`#`),aa(`#`,`pathname`,`hash`,i)),V(!i.search||!i.search.includes(`#`),aa(`#`,`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=ra(i,s),l=o&&o!==`/`&&o.endsWith(`/`),u=(a||o===`.`)&&n.endsWith(`/`);return!c.pathname.endsWith(`/`)&&(l||u)&&(c.pathname+=`/`),c}var la=e=>e.replace(/[\\/]{2,}/g,`/`),U=e=>la(e.join(`/`)),ua=e=>e.replace(/\/+$/,``),da=e=>ua(e).replace(/^\/*/,`/`),fa=e=>!e||e===`?`?``:e.startsWith(`?`)?e:`?`+e,pa=e=>!e||e===`#`?``:e.startsWith(`#`)?e:`#`+e,ma=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 ha(e){return e!=null&&typeof e.status==`number`&&typeof e.statusText==`string`&&typeof e.internal==`boolean`&&`data`in e}function ga(e){return U(e.map(e=>e.route.path).filter(Boolean))||`/`}var _a=typeof window<`u`&&window.document!==void 0&&window.document.createElement!==void 0;function va(e,t){let n=e;if(typeof n!=`string`||!Si.test(n))return{absoluteURL:void 0,isExternal:!1,to:n};let r=n,i=!1;if(_a)try{let e=new URL(window.location.href),r=Ci.test(n)?new URL(wi(n,e.protocol)):new URL(n),a=na(r.pathname,t);r.origin===e.origin&&a!=null?n=a+r.search+r.hash:i=!0}catch{H(!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 ya=[`POST`,`PUT`,`PATCH`,`DELETE`];new Set(ya);var ba=[`GET`,...ya];new Set(ba);var xa=[`about:`,`blob:`,`chrome:`,`chrome-untrusted:`,`content:`,`data:`,`devtools:`,`file:`,`filesystem:`,`javascript:`];function Sa(e){try{return xa.includes(new URL(e).protocol)}catch{return!1}}var Ca=A(null);Ca.displayName=`DataRouter`;var wa=A(null);wa.displayName=`DataRouterState`;var Ta=A(!1);function Ea(){return F(Ta)}var Da=A({isTransitioning:!1});Da.displayName=`ViewTransition`;var Oa=A(new Map);Oa.displayName=`Fetchers`;var ka=A(null);ka.displayName=`Await`;var W=A(null);W.displayName=`Navigation`;var Aa=A(null);Aa.displayName=`Location`;var G=A({outlet:null,matches:[],isDataRoute:!1});G.displayName=`Route`;var ja=A(null);ja.displayName=`RouteError`;var Ma=`REACT_ROUTER_ERROR`,Na=`REDIRECT`,Pa=`ROUTE_ERROR_RESPONSE`;function Fa(e){if(e.startsWith(`${Ma}:${Na}:{`))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 Ia(e){if(e.startsWith(`${Ma}:${Pa}:{`))try{let t=JSON.parse(e.slice(40));if(typeof t==`object`&&t&&typeof t.status==`number`&&typeof t.statusText==`string`)return new ma(t.status,t.statusText,t.data)}catch{}}function La(e,{relative:t}={}){V(Ra(),`useHref() may be used only in the context of a <Router> component.`);let{basename:n,navigator:r}=F(W),{hash:i,pathname:a,search:o}=Ka(e,{relative:t}),s=a;return n!==`/`&&(s=a===`/`?n:U([n,a])),r.createHref({pathname:s,search:o,hash:i})}function Ra(){return F(Aa)!=null}function K(){return V(Ra(),`useLocation() may be used only in the context of a <Router> component.`),F(Aa).location}function za(){return F(Aa).navigationType}var Ba=`You should call navigate() in a React.useEffect(), not when your component is first rendered.`;function Va(e){F(W).static||l(e)}function q(){let{isDataRoute:e}=F(G);return e?fo():Ha()}function Ha(){V(Ra(),`useNavigate() may be used only in the context of a <Router> component.`);let e=F(Ca),{basename:t,navigator:n}=F(W),{matches:r}=F(G),{pathname:i}=K(),a=JSON.stringify(sa(r)),o=f(!1);return Va(()=>{o.current=!0}),y((r,s={})=>{if(H(o.current,Ba),!o.current)return;if(typeof r==`number`){n.go(r);return}let c=ca(r,JSON.parse(a),i,s.relative===`path`);e==null&&t!==`/`&&(c.pathname=c.pathname===`/`?t:U([t,c.pathname])),(s.replace?n.replace:n.push)(c,s.state,s)},[t,n,a,i,e])}var Ua=A(null);function Wa(e){let t=F(G).outlet;return p(()=>t&&a(Ua.Provider,{value:e},t),[t,e])}function Ga(){let{matches:e}=F(G);return e[e.length-1]?.params??{}}function Ka(e,{relative:t}={}){let{matches:n}=F(G),{pathname:r}=K(),i=JSON.stringify(sa(n));return p(()=>ca(e,JSON.parse(i),r,t===`path`),[e,i,r,t])}function qa(e,t){return Ja(e,t)}function Ja(e,t,n){V(Ra(),`useRoutes() may be used only in the context of a <Router> component.`);let{navigator:r}=F(W),{matches:i}=F(G),o=i[i.length-1],s=o?o.params:{},c=o?o.pathname:`/`,l=o?o.pathnameBase:`/`,u=o&&o.route;{let e=u&&u.path||``;mo(c,!u||e.endsWith(`*`)||e.endsWith(`*?`),`You rendered descendant <Routes> (or called \`useRoutes()\`) at "${c}" (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 d=K(),f;if(t){let e=typeof t==`string`?Mi(t):t;V(l===`/`||e.pathname?.startsWith(l),`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 "${l}" but pathname "${e.pathname}" was given in the \`location\` prop.`),f=e}else f=d;let p=f.pathname||`/`,m=p;if(l!==`/`){let e=l.replace(/^\//,``).split(`/`);m=`/`+p.replace(/^\//,``).split(`/`).slice(e.length).join(`/`)}let h=n&&n.state.matches.length?n.state.matches.map(e=>Object.assign(e,{route:n.manifest[e.route.id]||e.route})):Fi(e,{pathname:m});H(u||h!=null,`No routes matched location "${f.pathname}${f.search}${f.hash}" `),H(h==null||h[h.length-1].route.element!==void 0||h[h.length-1].route.Component!==void 0||h[h.length-1].route.lazy!==void 0,`Matched leaf route at location "${f.pathname}${f.search}${f.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 g=to(h&&h.map(e=>Object.assign({},e,{params:Object.assign({},s,e.params),pathname:U([l,r.encodeLocation?r.encodeLocation(e.pathname.replace(/%/g,`%25`).replace(/\?/g,`%3F`).replace(/#/g,`%23`)).pathname:e.pathname]),pathnameBase:e.pathnameBase===`/`?l:U([l,r.encodeLocation?r.encodeLocation(e.pathnameBase.replace(/%/g,`%25`).replace(/\?/g,`%3F`).replace(/#/g,`%23`)).pathname:e.pathnameBase])})),i,n);return t&&g?a(Aa.Provider,{value:{location:{pathname:`/`,search:``,hash:``,state:null,key:`default`,mask:void 0,...f},navigationType:`POP`}},g):g}function Ya(){let e=uo(),t=ha(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},o={padding:`2px 4px`,backgroundColor:r},s=null;return console.error(`Error handled by React Router default ErrorBoundary:`,e),s=a(u,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:o},`ErrorBoundary`),` or`,` `,a(`code`,{style:o},`errorElement`),` prop on your route.`)),a(u,null,a(`h2`,null,`Unexpected Application Error!`),a(`h3`,{style:{fontStyle:`italic`}},t),n?a(`pre`,{style:i},n):null,s)}var Xa=a(Ya,null),Za=class extends c{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=Ia(e.digest);t&&(e=t)}let t=e===void 0?this.props.children:a(G.Provider,{value:this.props.routeContext},a(ja.Provider,{value:e,children:this.props.component}));return this.context?a($a,{error:e},t):t}};Za.contextType=Ta;var Qa=new WeakMap;function $a({children:e,error:t}){let{basename:n}=F(W);if(typeof t==`object`&&t&&`digest`in t&&typeof t.digest==`string`){let e=Fa(t.digest);if(e){let r=Qa.get(t);if(r)throw r;let i=va(e.location,n),o=i.absoluteURL||i.to;if(Sa(o))throw Error(`Invalid redirect location`);if(_a&&!Qa.get(t))if(i.isExternal||e.reloadDocument)window.location.href=o;else{let n=Promise.resolve().then(()=>window.__reactRouterDataRouter.navigate(i.to,{replace:e.replace}));throw Qa.set(t,n),n}return a(`meta`,{httpEquiv:`refresh`,content:`0;url=${o}`})}}return e}function eo({routeContext:e,match:t,children:n}){let r=F(Ca);return r&&r.static&&r.staticContext&&(t.route.errorElement||t.route.ErrorBoundary)&&(r.staticContext._deepestRenderedBoundaryId=t.route.id),a(G.Provider,{value:e},n)}function to(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,o=r?.errors;if(o!=null){let e=i.findIndex(e=>e.route.id&&o?.[e.route.id]!==void 0);V(e>=0,`Could not find a matching route for errors on route IDs: ${Object.keys(o).join(`,`)}`),i=i.slice(0,Math.min(i.length,e+1))}let s=!1,c=-1;if(n&&r){s=r.renderFallback;for(let e=0;e<i.length;e++){let t=i[e];if((t.route.HydrateFallback||t.route.hydrateFallbackElement)&&(c=e),t.route.id){let{loaderData:e,errors:a}=r,o=t.route.loader&&!e.hasOwnProperty(t.route.id)&&(!a||a[t.route.id]===void 0);if(t.route.lazy||o){n.isStatic&&(s=!0),i=c>=0?i.slice(0,c+1):[i[0]];break}}}}let l=n?.onError,u=r&&l?(e,t)=>{l(e,{location:r.location,params:r.matches?.[0]?.params??{},pattern:ga(r.matches),errorInfo:t})}:void 0;return i.reduceRight((e,n,l)=>{let d,f=!1,p=null,m=null;r&&(d=o&&n.route.id?o[n.route.id]:void 0,p=n.route.errorElement||Xa,s&&(c<0&&l===0?(mo(`route-fallback`,!1,"No `HydrateFallback` element provided to render during initial hydration"),f=!0,m=null):c===l&&(f=!0,m=n.route.hydrateFallbackElement||null)));let h=t.concat(i.slice(0,l+1)),g=()=>{let t;return t=d?p:f?m:n.route.Component?a(n.route.Component,null):n.route.element?n.route.element:e,a(eo,{match:n,routeContext:{outlet:e,matches:h,isDataRoute:r!=null},children:t})};return r&&(n.route.ErrorBoundary||n.route.errorElement||l===0)?a(Za,{location:r.location,revalidation:r.revalidation,component:p,error:d,children:g(),routeContext:{outlet:null,matches:h,isDataRoute:!0},onError:u}):g()},null)}function no(e){return`${e} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function ro(e){let t=F(Ca);return V(t,no(e)),t}function io(e){let t=F(wa);return V(t,no(e)),t}function ao(e){let t=F(G);return V(t,no(e)),t}function oo(e){let t=ao(e),n=t.matches[t.matches.length-1];return V(n.route.id,`${e} can only be used on routes that contain a unique "id"`),n.route.id}function so(){return oo(`useRouteId`)}function co(){let e=io(`useNavigation`);return p(()=>{let{matches:t,historyAction:n,...r}=e.navigation;return r},[e.navigation])}function lo(){let{matches:e,loaderData:t}=io(`useMatches`);return p(()=>e.map(e=>Li(e,t)),[e,t])}function uo(){let e=F(ja),t=io(`useRouteError`),n=oo(`useRouteError`);return e===void 0?t.errors?.[n]:e}function fo(){let{router:e}=ro(`useNavigate`),t=oo(`useNavigate`),n=f(!1);return Va(()=>{n.current=!0}),y(async(r,i={})=>{H(n.current,Ba),n.current&&(typeof r==`number`?await e.navigate(r):await e.navigate(r,{fromRouteId:t,...i}))},[e,t])}var po={};function mo(e,t,n){!t&&!po[e]&&(po[e]=!0,H(!1,n))}_(ho);function ho({routes:e,manifest:t,future:n,state:r,isStatic:i,onError:a}){return Ja(e,void 0,{manifest:t,state:r,isStatic:i,onError:a,future:n})}function J({to:e,replace:t,state:n,relative:r}){V(Ra(),`<Navigate> may be used only in the context of a <Router> component.`);let{static:i}=F(W);H(!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}=F(G),{pathname:o}=K(),s=q(),c=ca(e,sa(a),o,r===`path`),l=JSON.stringify(c);return x(()=>{s(JSON.parse(l),{replace:t,state:n,relative:r})},[s,l,r,t,n]),null}function Y(e){V(!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 go({basename:e=`/`,children:t=null,location:n,navigationType:r=`POP`,navigator:i,static:o=!1,useTransitions:s}){V(!Ra(),`You cannot render a <Router> inside another <Router>. You should never have more than one in your app.`);let c=e.replace(/^\/*/,`/`),l=p(()=>({basename:c,navigator:i,static:o,useTransitions:s,future:{}}),[c,i,o,s]);typeof n==`string`&&(n=Mi(n));let{pathname:u=`/`,search:d=``,hash:f=``,state:m=null,key:h=`default`,mask:g}=n,_=p(()=>{let e=na(u,c);return e==null?null:{location:{pathname:e,search:d,hash:f,state:m,key:h,mask:g},navigationType:r}},[c,u,d,f,m,h,r,g]);return H(_!=null,`<Router basename="${c}"> is not able to match the URL "${u}${d}${f}" because it does not start with the basename, so the <Router> won't render anything.`),_==null?null:a(W.Provider,{value:l},a(Aa.Provider,{children:t,value:_}))}function _o({children:e,location:t}){return qa(vo(e),t)}function vo(e,t=[]){let n=[];return s.forEach(e,(e,r)=>{if(!m(e))return;let i=[...t,r];if(e.type===u){n.push.apply(n,vo(e.props.children,i));return}V(e.type===Y,`[${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>`),V(!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=vo(e.props.children,i)),n.push(a)}),n}var yo=`get`,bo=`application/x-www-form-urlencoded`;function xo(e){return typeof HTMLElement<`u`&&e instanceof HTMLElement}function So(e){return xo(e)&&e.tagName.toLowerCase()===`button`}function Co(e){return xo(e)&&e.tagName.toLowerCase()===`form`}function wo(e){return xo(e)&&e.tagName.toLowerCase()===`input`}function To(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}function Eo(e,t){return e.button===0&&(!t||t===`_self`)&&!To(e)}function Do(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 Oo(e,t){let n=Do(e);return t&&t.forEach((e,r)=>{n.has(r)||t.getAll(r).forEach(e=>{n.append(r,e)})}),n}var ko=null;function Ao(){if(ko===null)try{new FormData(document.createElement(`form`),0),ko=!1}catch{ko=!0}return ko}var jo=new Set([`application/x-www-form-urlencoded`,`multipart/form-data`,`text/plain`]);function Mo(e){return e!=null&&!jo.has(e)?(H(!1,`"${e}" is not a valid \`encType\` for \`<Form>\`/\`<fetcher.Form>\` and will default to "${bo}"`),null):e}function No(e,t){let n,r,i,a,o;if(Co(e)){let o=e.getAttribute(`action`);r=o?na(o,t):null,n=e.getAttribute(`method`)||yo,i=Mo(e.getAttribute(`enctype`))||bo,a=new FormData(e)}else if(So(e)||wo(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?na(s,t):null,n=e.getAttribute(`formmethod`)||o.getAttribute(`method`)||yo,i=Mo(e.getAttribute(`formenctype`))||Mo(o.getAttribute(`enctype`))||bo,a=new FormData(o,e),!Ao()){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(xo(e))throw Error(`Cannot submit element that is not <form>, <button>, or <input type="submit|image">`);else n=yo,r=null,i=bo,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 Po={"&":`\\u0026`,">":`\\u003e`,"<":`\\u003c`,"\u2028":`\\u2028`,"\u2029":`\\u2029`},Fo=/[&><\u2028\u2029]/g;function Io(e){return e.replace(Fo,e=>Po[e])}function Lo(e,t){if(e===!1||e==null)throw Error(t)}function Ro(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&&na(i.pathname,t)===`/`?i.pathname=`${ua(t)}/_root.${r}`:i.pathname=`${ua(i.pathname)}.${r}`,i}async function zo(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 Bo(e){return e!=null&&typeof e.page==`string`}function Vo(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 Ho(e,t,n){return qo((await Promise.all(e.map(async e=>{let r=t.routes[e.route.id];if(r){let e=await zo(r,n);return e.links?e.links():[]}return[]}))).flat(1).filter(Vo).filter(e=>e.rel===`stylesheet`||e.rel===`preload`).map(e=>e.rel===`stylesheet`?{...e,rel:`prefetch`,as:`style`}:{...e,rel:`prefetch`}))}function Uo(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 Wo(e,t,{includeHydrateFallback:n}={}){return Go(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 Go(e){return[...new Set(e)]}function Ko(e){let t={},n=Object.keys(e).sort();for(let r of n)t[r]=e[r];return t}function qo(e,t){let n=new Set,r=new Set(t);return e.reduce((e,i)=>{if(t&&!Bo(i)&&i.as===`script`&&i.href&&r.has(i.href))return e;let a=JSON.stringify(Ko(i));return n.has(a)||(n.add(a),e.push({key:a,link:i})),e},[])}function Jo(){let e=F(Ca);return Lo(e,`You must render this element inside a <DataRouterContext.Provider> element`),e}function Yo(){let e=F(wa);return Lo(e,`You must render this element inside a <DataRouterStateContext.Provider> element`),e}var Xo=A(void 0);Xo.displayName=`FrameworkContext`;function Zo(){let e=F(Xo);return Lo(e,`You must render this element inside a <HydratedRouter> element`),e}function Qo(e,t){let n=F(Xo),[r,i]=C(!1),[a,o]=C(!1),{onFocus:s,onBlur:c,onMouseEnter:l,onMouseLeave:u,onTouchStart:d}=t,p=f(null);x(()=>{if(e===`render`&&o(!0),e===`viewport`){let e=new IntersectionObserver(e=>{e.forEach(e=>{o(e.isIntersecting)})},{threshold:.5});return p.current&&e.observe(p.current),()=>{e.disconnect()}}},[e]),x(()=>{if(r){let e=setTimeout(()=>{o(!0)},100);return()=>{clearTimeout(e)}}},[r]);let m=()=>{i(!0)},h=()=>{i(!1),o(!1)};return n?e===`intent`?[a,p,{onFocus:$o(s,m),onBlur:$o(c,h),onMouseEnter:$o(l,m),onMouseLeave:$o(u,h),onTouchStart:$o(d,m)}]:[a,p,{}]:[!1,p,{}]}function $o(e,t){return n=>{e&&e(n),n.defaultPrevented||t(n)}}function es({page:e,...t}){let n=Ea(),{nonce:r}=Zo(),{router:i}=Jo(),o=p(()=>Fi(i.routes,e,i.basename),[i.routes,e,i.basename]);return o?(t.nonce==null&&r&&(t={...t,nonce:r}),a(n?ns:rs,{page:e,matches:o,...t})):null}function ts(e){let{manifest:t,routeModules:n}=Zo(),[r,i]=C([]);return x(()=>{let r=!1;return Ho(e,t,n).then(e=>{r||i(e)}),()=>{r=!0}},[e,t,n]),r}function ns({page:e,matches:t,...n}){let r=K(),{future:i}=Zo(),{basename:o}=Jo();return a(u,null,p(()=>{if(e===r.pathname+r.search+r.hash)return[];let n=Ro(e,o,i.v8_trailingSlashAwareDataRequests,`rsc`),a=!1,s=[];for(let e of t)typeof e.route.shouldRevalidate==`function`?a=!0:s.push(e.route.id);return a&&s.length>0&&n.searchParams.set(`_routes`,s.join(`,`)),[n.pathname+n.search]},[o,i.v8_trailingSlashAwareDataRequests,e,r,t]).map(e=>a(`link`,{key:e,rel:`prefetch`,as:`fetch`,href:e,...n})))}function rs({page:e,matches:t,...n}){let r=K(),{future:i,manifest:o,routeModules:s}=Zo(),{basename:c}=Jo(),{loaderData:l,matches:d}=Yo(),f=p(()=>Uo(e,t,d,o,r,`data`),[e,t,d,o,r]),m=p(()=>Uo(e,t,d,o,r,`assets`),[e,t,d,o,r]),h=p(()=>{if(e===r.pathname+r.search+r.hash)return[];let n=new Set,a=!1;if(t.forEach(e=>{let t=o.routes[e.route.id];!t||!t.hasLoader||(!f.some(t=>t.route.id===e.route.id)&&e.route.id in l&&s[e.route.id]?.shouldRevalidate||t.hasClientLoader?a=!0:n.add(e.route.id))}),n.size===0)return[];let u=Ro(e,c,i.v8_trailingSlashAwareDataRequests,`data`);return a&&n.size>0&&u.searchParams.set(`_routes`,t.filter(e=>n.has(e.route.id)).map(e=>e.route.id).join(`,`)),[u.pathname+u.search]},[c,i.v8_trailingSlashAwareDataRequests,l,r,o,f,t,e,s]),g=p(()=>Wo(m,o),[m,o]),_=ts(m);return a(u,null,h.map(e=>a(`link`,{key:e,rel:`prefetch`,as:`fetch`,href:e,...n})),g.map(e=>a(`link`,{key:e,rel:`modulepreload`,href:e,...n})),_.map(({key:e,link:t})=>a(`link`,{key:e,nonce:n.nonce,...t,crossOrigin:t.crossOrigin??n.crossOrigin})))}function is(...e){return t=>{e.forEach(e=>{typeof e==`function`?e(t):e!=null&&(e.current=t)})}}var as=typeof window<`u`&&window.document!==void 0&&window.document.createElement!==void 0;try{as&&(window.__reactRouterVersion=`7.18.0`)}catch{}function os({basename:e,children:t,useTransitions:n,window:r}){let i=f();i.current??=Di({window:r,v5Compat:!0});let o=i.current,[s,c]=C({action:o.action,location:o.location}),u=y(e=>{n===!1?c(e):d(()=>c(e))},[n]);return l(()=>o.listen(u),[o,u]),a(go,{basename:e,children:t,location:s.location,navigationType:s.action,navigator:o,useTransitions:n})}function ss({basename:e,children:t,history:n,useTransitions:r}){let[i,o]=C({action:n.action,location:n.location}),s=y(e=>{r===!1?o(e):d(()=>o(e))},[r]);return l(()=>n.listen(s),[n,s]),a(go,{basename:e,children:t,location:i.location,navigationType:i.action,navigator:n,useTransitions:r})}ss.displayName=`unstable_HistoryRouter`;var cs=k(function({onClick:e,discover:t=`render`,prefetch:n=`none`,relative:r,reloadDocument:i,replace:o,mask:s,state:c,target:l,to:d,preventScrollReset:f,viewTransition:p,defaultShouldRevalidate:m,...h},g){let{basename:_,navigator:v,useTransitions:y}=F(W),b=typeof d==`string`&&Si.test(d),x=va(d,_);d=x.to;let S=La(d,{relative:r}),C=K(),w=null;if(s){let e=ca(s,[],C.mask?C.mask.pathname:`/`,!0);_!==`/`&&(e.pathname=e.pathname===`/`?_:U([_,e.pathname])),w=v.createHref(e)}let[T,E,D]=Qo(n,h),O=hs(d,{replace:o,mask:s,state:c,target:l,preventScrollReset:f,relative:r,viewTransition:p,defaultShouldRevalidate:m,useTransitions:y});function k(t){e&&e(t),t.defaultPrevented||O(t)}let A=!(x.isExternal||i),j=a(`a`,{...h,...D,href:(A?w:void 0)||x.absoluteURL||S,onClick:A?k:e,ref:is(g,E),target:l,"data-discover":!b&&t===`render`?`true`:void 0});return T&&!b?a(u,null,j,a(es,{page:S})):j});cs.displayName=`Link`;var ls=k(function({"aria-current":e=`page`,caseSensitive:t=!1,className:n=``,end:r=!1,style:i,to:o,viewTransition:s,children:c,...l},u){let d=Ka(o,{relative:l.relative}),f=K(),p=F(wa),{navigator:m,basename:h}=F(W),g=p!=null&&Es(d)&&s===!0,_=m.encodeLocation?m.encodeLocation(d).pathname:d.pathname,v=f.pathname,y=p&&p.navigation&&p.navigation.location?p.navigation.location.pathname:null;t||(v=v.toLowerCase(),y=y?y.toLowerCase():null,_=_.toLowerCase()),y&&h&&(y=na(y,h)||y);let b=_!==`/`&&_.endsWith(`/`)?_.length-1:_.length,x=v===_||!r&&v.startsWith(_)&&v.charAt(b)===`/`,S=y!=null&&(y===_||!r&&y.startsWith(_)&&y.charAt(_.length)===`/`),C={isActive:x,isPending:S,isTransitioning:g},w=x?e:void 0,T;T=typeof n==`function`?n(C):[n,x?`active`:null,S?`pending`:null,g?`transitioning`:null].filter(Boolean).join(` `);let E=typeof i==`function`?i(C):i;return a(cs,{...l,"aria-current":w,className:T,ref:u,style:E,to:o,viewTransition:s},typeof c==`function`?c(C):c)});ls.displayName=`NavLink`;var us=k(({discover:e=`render`,fetcherKey:t,navigate:n,reloadDocument:r,replace:i,state:o,method:s=yo,action:c,onSubmit:l,relative:u,preventScrollReset:f,viewTransition:p,defaultShouldRevalidate:m,...h},g)=>{let{useTransitions:_}=F(W),v=ys(),y=bs(c,{relative:u}),b=s.toLowerCase()===`get`?`get`:`post`,x=typeof c==`string`&&Si.test(c);return a(`form`,{ref:g,method:b,action:y,onSubmit:r?l:e=>{if(l&&l(e),e.defaultPrevented)return;e.preventDefault();let r=e.nativeEvent.submitter,a=r?.getAttribute(`formmethod`)||s,c=()=>v(r||e.currentTarget,{fetcherKey:t,method:a,navigate:n,replace:i,state:o,relative:u,preventScrollReset:f,viewTransition:p,defaultShouldRevalidate:m});_&&n!==!1?d(()=>c()):c()},...h,"data-discover":!x&&e===`render`?`true`:void 0})});us.displayName=`Form`;function ds({getKey:e,storageKey:t,...n}){let r=F(Xo),{basename:i}=F(W),o=K(),s=lo();ws({getKey:e,storageKey:t});let c=p(()=>{if(!r||!e)return null;let t=Cs(o,s,i,e);return t===o.key?null:t},[]);if(!r||r.isSpaMode)return null;let l=((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:`(${l})(${Io(JSON.stringify(t||xs))}, ${Io(JSON.stringify(c))})`}})}ds.displayName=`ScrollRestoration`;function fs(e){return`${e} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function ps(e){let t=F(Ca);return V(t,fs(e)),t}function ms(e){let t=F(wa);return V(t,fs(e)),t}function hs(e,{target:t,replace:n,mask:r,state:i,preventScrollReset:a,relative:o,viewTransition:s,defaultShouldRevalidate:c,useTransitions:l}={}){let u=q(),f=K(),p=Ka(e,{relative:o});return y(m=>{if(Eo(m,t)){m.preventDefault();let t=n===void 0?ji(f)===ji(p):n,h=()=>u(e,{replace:t,mask:r,state:i,preventScrollReset:a,relative:o,viewTransition:s,defaultShouldRevalidate:c});l?d(()=>h()):h()}},[f,u,p,n,r,i,t,e,a,o,s,c,l])}function gs(e){H(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=f(Do(e)),n=f(!1),r=K(),i=p(()=>Oo(r.search,n.current?null:t.current),[r.search]),a=q();return[i,y((e,t)=>{let r=Do(typeof e==`function`?e(new URLSearchParams(i)):e);n.current=!0,a(`?`+r,t)},[a,i])]}var _s=0,vs=()=>`__${String(++_s)}__`;function ys(){let{router:e}=ps(`useSubmit`),{basename:t}=F(W),n=so(),r=e.fetch,i=e.navigate;return y(async(e,a={})=>{let{action:o,method:s,encType:c,formData:l,body:u}=No(e,t);a.navigate===!1?await r(a.fetcherKey||vs(),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 bs(e,{relative:t}={}){let{basename:n}=F(W),r=F(G);V(r,`useFormAction must be used inside a RouteContext`);let[i]=r.matches.slice(-1),a={...Ka(e||`.`,{relative:t})},o=K();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:U([n,a.pathname])),ji(a)}var xs=`react-router-scroll-positions`,Ss={};function Cs(e,t,n,r){let i=null;return r&&(i=r(n===`/`?e:{...e,pathname:na(e.pathname,n)||e.pathname},t)),i??=e.key,i}function ws({getKey:e,storageKey:t}={}){let{router:n}=ps(`useScrollRestoration`),{restoreScrollPosition:r,preventScrollReset:i}=ms(`useScrollRestoration`),{basename:a}=F(W),o=K(),s=lo(),c=co();x(()=>(window.history.scrollRestoration=`manual`,()=>{window.history.scrollRestoration=`auto`}),[]),Ts(y(()=>{if(c.state===`idle`){let t=Cs(o,s,a,e);Ss[t]=window.scrollY}try{sessionStorage.setItem(t||xs,JSON.stringify(Ss))}catch(e){H(!1,`Failed to save scroll positions in sessionStorage, <ScrollRestoration /> will not work properly (${e}).`)}window.history.scrollRestoration=`auto`},[c.state,e,a,o,s,t])),typeof document<`u`&&(l(()=>{try{let e=sessionStorage.getItem(t||xs);e&&(Ss=JSON.parse(e))}catch{}},[t]),l(()=>{let t=n?.enableScrollRestoration(Ss,()=>window.scrollY,e?(t,n)=>Cs(t,n,a,e):void 0);return()=>t&&t()},[n,a,e]),l(()=>{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{H(!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 Ts(e,t){let{capture:n}=t||{};x(()=>{let t=n==null?void 0:{capture:n};return window.addEventListener(`pagehide`,e,t),()=>{window.removeEventListener(`pagehide`,e,t)}},[e,n])}function Es(e,{relative:t}={}){let n=F(Da);V(n!=null,"`useViewTransitionState` must be used within `react-router-dom`'s `RouterProvider`. Did you accidentally import `RouterProvider` from `react-router`?");let{basename:r}=ps(`useViewTransitionState`),i=Ka(e,{relative:t});if(!n.isTransitioning)return!1;let a=na(n.currentLocation.pathname,r)||n.currentLocation.pathname,o=na(n.nextLocation.pathname,r)||n.nextLocation.pathname;return Qi(i.pathname,o)!=null||Qi(i.pathname,a)!=null}var Ds=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}}))()),Os=/\s([^'"/\s><]+?)[\s/>]|([^\s=]+)=\s?(".*?"|'.*?')/g;function ks(e){var t={type:`tag`,name:``,voidElement:!1,attrs:{},children:[]},n=e.match(/<\/?([^\s]+?)[/\s>]/);if(n&&(t.name=n[1],(Ds.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(Os),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 As=/<[a-zA-Z0-9\-\!\/](?:"[^"]*"|'[^']*'|[^'">])*>/g,js=/^\s*$/,Ms=Object.create(null);function Ns(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(Ns,``)+`</`+t.name+`>`;case`comment`:return e+`<!--`+t.comment+`-->`}}var Ps={parse:function(e,t){t||={},t.components||=Ms;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(As,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=ks(s);return a<0?(r.push(m),r):((l=i[a]).children.push(m),r)}if(u&&(a++,(n=ks(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);js.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+Ns(``,t)},``)}};D();var Fs=(e,t)=>{if(!e)return!1;let n=e.props?.children??e.children;return t?n.length>0:!!n},Is=e=>{if(!e)return[];let t=e.props?.children??e.children;return e.props?.i18nIsDynamicList?Rs(t):t},Ls=e=>Array.isArray(e)&&e.every(m),Rs=e=>Array.isArray(e)?e:[e],zs=(e,t)=>{let n={...t};return n.props={...t.props,...e.props},n},Bs=e=>{let t={};if(!e)return t;let n=e=>{Rs(e).forEach(e=>{pi(e)||(Fs(e)?n(Is(e)):vi(e)&&!m(e)&&Object.assign(t,e))})};return n(e),t},Vs=(e,t,n,r)=>{if(!e)return``;let i=``,a=Rs(e),o=t?.transSupportBasicHtmlNodes?t.transKeepBasicHtmlNodesFor??[]:[];return a.forEach((e,a)=>{if(pi(e)){i+=`${e}`;return}if(m(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=pi(d)?d:Vs(d,t,n,r);i+=`<${c}>${e}</${c}>`;return}let f=Vs(d,t,n,r);i+=`<${a}>${f}</${a}>`;return}if(e===null){hi(n,`TRANS_NULL_VALUE`,`Passed in a null value as child`,{i18nKey:r});return}if(vi(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}hi(n,`TRANS_INVALID_OBJ`,`Invalid child - Object should only have keys {{ value, format }} (format is optional).`,{i18nKey:r,child:e});return}hi(n,`TRANS_INVALID_VAR`,`Passed in a variable like {number} - pass variables for interpolation as full objects like {{number}}.`,{i18nKey:r,child:e})}),i},Hs=(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},Us=(e,t,n,r,i,o,c)=>{if(n===``)return[];let l=i.transKeepBasicHtmlNodesFor||[],d=n&&new RegExp(l.map(e=>`<${e}`).join(`|`)).test(n);if(!e&&!t&&!d&&!c)return[n];let f=t??{},p=e=>{Rs(e).forEach(e=>{pi(e)||(Fs(e)?p(Is(e)):vi(e)&&!m(e)&&Object.assign(f,e))})};p(e);let h=Hs(n,l,f),_=Ps.parse(`<0>${h}</0>`),v={...f,...o},y=(e,t,n)=>{let r=Is(e),i=x(r,t.children,n);return Ls(r)&&i.length===0||e.props?.i18nIsDynamicList?r:i},b=(e,t,n,r,i)=>{e.dummy?(e.children=t,n.push(g(e,{key:r},i?void 0:t))):n.push(...s.map([e],e=>{if(e.type===u||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])}),g(e,n,i?null:t)}))},x=(e,n,o)=>{let s=Rs(e),u=Rs(n),f={};return u.reduce((e,n,u)=>{let p=n.children?.[0]?.content&&r.services.interpolator.interpolate(n.children[0].content,v,r.language);if(n.type===`tag`){let h=s[parseInt(n.name,10)];!h&&t&&(h=t[n.name]),o.length===1&&!h&&(h=o[0][n.name]),h||={};let g={...n.attrs};c&&Object.keys(g).forEach(e=>{let t=g[e];pi(t)&&(g[e]=_i(t))});let _=Object.keys(g).length===0?h:zs({props:g},h),S=m(_),C=S&&Fs(n,!0)&&!n.voidElement,w=d&&vi(_)&&_.dummy&&!S,T=vi(t)&&Object.hasOwnProperty.call(t,n.name);if(pi(_)){let t=r.services.interpolator.interpolate(_,v,r.language);e.push(t)}else if(Fs(_)||C)b(_,y(_,n,o),e,u);else if(w)b(_,x(s,n.children,o),e,u);else if(Number.isNaN(parseFloat(n.name)))if(T)b(_,y(_,n,o),e,u,n.voidElement);else if(i.transSupportBasicHtmlNodes&&l.indexOf(n.name)>-1)if(n.voidElement)e.push(a(n.name,{key:`${n.name}-${u}`}));else{let t=f[n.name]||0;f[n.name]=t+1;let r,i=0;for(let e=0;e<s.length;e+=1){let a=s[e];if(m(a)&&a.type===n.name){if(i===t){r=a;break}i+=1}}let c=x(r?Rs(Is(r)):s,n.children,o);e.push(a(n.name,{key:`${n.name}-${u}`},c))}else if(n.voidElement)e.push(`<${n.name} />`);else{let t=x(s,n.children,o);e.push(`<${n.name}>${t}</${n.name}>`)}else if(vi(_)&&!S){let t=n.children[0]?p:null;t&&e.push(t)}else b(_,p,e,u,n.children.length!==1||!p)}else if(n.type===`text`){let t=i.transWrapTextNodes,o=typeof i.unescape==`function`?i.unescape:fi().unescape,s=c?o(r.services.interpolator.interpolate(n.content,v,r.language)):r.services.interpolator.interpolate(n.content,v,r.language);t?e.push(a(t,{key:`${n.name}-${u}`},s)):e.push(s)}return e},[])};return Is(x([{dummy:!0,children:e||[]}],_,Rs(e||[]))[0])},Ws=(e,t,n)=>{let r=e.key||t,i=g(e,{key:r});if(!i.props||!i.props.children||n.indexOf(`${t}/>`)<0&&n.indexOf(`${t} />`)<0)return i;function o(){return a(u,null,i)}return a(o,{key:r})},Gs=(e,t)=>e.map((e,n)=>Ws(e,n,t)),Ks=(e,t)=>{let n={};return Object.keys(e).forEach(r=>{Object.assign(n,{[r]:Ws(e[r],r,t)})}),n},qs=(e,t,n,r)=>e?Array.isArray(e)?Gs(e,t):vi(e)?Ks(e,t):(yi(n,`TRANS_INVALID_COMPONENTS`,`<Trans /> "components" prop expects an object or array`,{i18nKey:r}),null):null,Js=e=>!vi(e)||Array.isArray(e)?!1:Object.keys(e).reduce((e,t)=>e&&Number.isNaN(Number.parseFloat(t)),!0);function Ys({children:e,count:t,parent:n,i18nKey:r,context:i,tOptions:o={},values:s,defaults:c,components:l,ns:u,i18n:d,t:f,shouldUnescape:p,...m}){let h=d||mi();if(!h)return yi(h,`NO_I18NEXT_INSTANCE`,`Trans: You need to pass in an i18next instance using i18nextReactModule`,{i18nKey:r}),e;let g=f||h.t.bind(h)||(e=>e),_={...fi(),...h.options?.react},v=u||g.ns||h.options?.defaultNS;v=pi(v)?[v]:v||[`translation`];let{transDefaultProps:y}=_,b=y?.tOptions?{...y.tOptions,...o}:o,x=p??y?.shouldUnescape,S=y?.values?{...y.values,...s}:s,C=y?.components?{...y.components,...l}:l,w=Vs(e,_,h,r),T=c||b?.defaultValue||w||_.transEmptyNodeValue||(typeof r==`function`?di(r):r),{hashTransKey:E}=_,D=r||(E?E(w||T):w||T);s=h.options?.interpolation?.defaultVariables?S&&Object.keys(S).length>0?{...S,...h.options.interpolation.defaultVariables}:{...h.options.interpolation.defaultVariables}:S;let O=Bs(e);O&&typeof O.count==`number`&&t===void 0&&(t=O.count);let k=s||t!==void 0&&!h.options?.interpolation?.alwaysFormat||!e?b.interpolation:{interpolation:{...b.interpolation,prefix:`#$?`,suffix:`?$#`}},A={...b,context:i||b.context,count:t,...s,...k,defaultValue:T,ns:v},j=D?g(D,A):T;j===D&&T&&(j=T);let M=qs(C,j,h,r),N=M||e,P=null;Js(M)&&(P=M,N=e);let F=Us(N,P,j,h,_,A,x),ee=n??_.defaultTransParent;return ee?a(ee,m,F):F}D();function Xs({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}=F(gi)||{},g=u||m||mi(),_=d||g?.t.bind(g);return Ys({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 Zs(e,t){return t.map(t=>({subject:{kind:`device`,deviceId:e},key:t.key,scope:t.scope}))}function Qs({deviceId:e}){let{t}=B(),{presence:n,list:r}=Br(e);return n===`absent`?null:n===`unknown`?b(er,{message:t(`deviceQuickDetail.historyUnknown`,`Could not tell whether this device has recorded history.`)}):n===`pending`||r.status===`pending`?b(Wn,{className:`h-24 w-full`,"aria-busy":`true`}):r.status===`error`?b(er,{title:t(`deviceQuickDetail.historyUnknown`,`Could not tell whether this device has recorded history.`),message:r.error}):r.data.length===0?null:o(`section`,{className:`flex flex-col gap-2`,"aria-label":t(`deviceQuickDetail.tabHistory`,`History`),children:[b(`div`,{className:`flex justify-end`,children:b(cs,{to:ni(Zs(e,r.data)),className:`text-xs text-primary hover:underline`,children:t(`deviceQuickDetail.openHistory`,`Open full history`)})}),b(kr,{deviceId:e})]})}function $s(e,t){return e===`present`&&t.status===`ok`&&(t.data?.length??0)>0}var ec={streaming:{icon:vn,labelKey:`capabilityBadges.streaming`},detection:{icon:at,labelKey:`capabilityBadges.detection`},recording:{icon:Je,labelKey:`capabilityBadges.recording`},audio:{icon:Ce,labelKey:`capabilityBadges.audio`},snapshot:{icon:ue,labelKey:`capabilityBadges.snapshot`},motion:{icon:et,labelKey:`capabilityBadges.motion`},ptz:{icon:ke,labelKey:`capabilityBadges.ptz`},webrtc:{icon:he,labelKey:`capabilityBadges.webrtc`},onvif:{icon:Ke,labelKey:`capabilityBadges.onvif`},analytics:{icon:we,labelKey:`capabilityBadges.analytics`},"battery-operated":{icon:ye,labelKey:`capabilityBadges.battery`},"native-snapshot":{icon:ue,labelKey:`capabilityBadges.nativeSnapshot`},"pan-tilt-zoom":{icon:ke,labelKey:`capabilityBadges.ptz`},"two-way-audio":{icon:Ce,labelKey:`capabilityBadges.twoWayAudio`},"doorbell-button":{icon:me,labelKey:`capabilityBadges.doorbell`},rebootable:{icon:rt,labelKey:`capabilityBadges.rebootable`},"vacuum-has-map":{icon:mn,labelKey:`capabilityBadges.map`},"vacuum-has-ai":{icon:pe,labelKey:`capabilityBadges.aiObstacle`},"mower-has-map":{icon:mn,labelKey:`capabilityBadges.map`},"mower-has-targeted-mowing":{icon:ae,labelKey:`capabilityBadges.targetedMowing`}},tc=le;function nc({capabilities:e,showLabels:t=!1}){let{t:n}=B();return b(`div`,{className:`flex items-center gap-1 flex-wrap`,children:e.map(e=>{let r=ec[e],i=r?.icon??tc,a=r?n(r.labelKey):e;return o(`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:[b(i,{className:`h-3 w-3`}),t&&b(`span`,{children:a})]},e)})})}D();var rc={amcrest:{icon:fn,color:`#3b82f6`,label:`Amcrest`},hikvision:{icon:Me,color:`#a855f7`,label:`Hikvision`},reolink:{icon:he,color:`#06b6d4`,label:`Reolink`},homeassistant:{icon:it,color:`#22d3ee`,label:`Home Assistant`},rtsp:{icon:Ie,color:`#78716c`,label:`RTSP`},onvif:{icon:Ie,color:`#78716c`,label:`ONVIF`}},ic={sm:`h-4 w-4`,md:`h-5 w-5`,lg:`h-6 w-6`,xl:`h-16 w-16`},ac={sm:`h-7 w-7`,md:`h-8 w-8`,lg:`h-10 w-10`,xl:`h-16 w-16`};function oc(e){let t=e.toLowerCase();return t.startsWith(`provider-`)?t.slice(9):t}function sc(e){return rc[oc(e)]??{icon:fn,color:`#78716c`,label:e}}function cc({type:e,size:t=`md`,showLabel:n}){let r=sc(e),i=r.icon,[a,s]=C(!1),c=bi(e);return o(`div`,{className:`flex items-center gap-2`,children:[b(`div`,{className:`flex items-center justify-center rounded-lg ${ac[t]}`,style:{backgroundColor:`${r.color}15`},children:a||!c?b(i,{className:ic[t],style:{color:r.color}}):b(`img`,{src:c,alt:r.label,className:ic[t],onError:()=>s(!0)})}),n&&b(`span`,{className:`text-xs font-medium text-foreground-subtle`,children:r.label})]})}function lc({label:e,value:t,layout:n=`inline`}){return n===`stacked`?o(`div`,{className:`min-w-0 flex flex-col gap-0.5 px-0.5`,children:[b(`span`,{className:`text-[11px] text-foreground-subtle`,children:e}),b(`div`,{className:`min-w-0 text-[11px] text-foreground`,children:t})]}):o(`div`,{className:`${ge} flex items-start gap-2 sm:gap-3`,children:[b(`span`,{className:`w-20 sm:w-28 flex-shrink-0 text-[11px] text-foreground-subtle`,children:e}),b(`div`,{className:`flex-1 min-w-0 text-[11px] text-foreground`,children:t})]})}D();function uc(e){return ei({addonId:e,projection:`slim`})}function dc(e){return dr({deviceId:e},{enabled:Number.isFinite(e)})}var fc=3e4,pc=2e3;function mc(e){let t=f(0);return t.current===0&&(t.current=Date.now()),wr({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>=fc?!1:pc}})}D();function hc({deviceId:e}){let{t}=B(),n=M(),{data:r}=dc(e),{data:i}=mc(e),[a,s]=C(null),c=tr({onSuccess:()=>{s(null),n.invalidateQueries({queryKey:[[`deviceManager`]]})},onError:e=>{s(`Could not change primary child: ${e.message}`)}});if(r==null||String(r.type??``)!==Yt.Container)return null;let l=(i??[]).map(e=>({id:e.id,stableId:e.stableId,type:e.type,name:e.name,...e.sourceInfo?{sourceInfo:{id:e.sourceInfo.id}}:{}}));if(l.length<=1)return null;let u=or(l,typeof r.linkDeviceId==`number`?r.linkDeviceId:null,typeof r.primaryChildEntityId==`string`?r.primaryChildEntityId:null),d=u===null?l[0].id:u.id;return o(P,{children:[b(lc,{label:t(`shared.primaryChildRow.primaryChild`,`Primary child`),value:b(jn,{childrenList:l,selectedId:d,onSetPrimary:t=>c.mutate({deviceId:e,primaryChildEntityId:t}),disabled:c.isPending})}),a!==null&&b(`p`,{role:`alert`,className:`px-3 sm:px-4 py-1.5 text-[11px] text-danger`,children:a})]})}D();var gc=[`manufacturer`,`model`,`hardware`,`firmware`,`serialNumber`,`uid`,`mac`,`itemNo`];function _c(e){return e.replace(/([a-z])([A-Z])/g,`$1 $2`).replace(/^./,e=>e.toUpperCase())}function vc(e){return e==null?`—`:typeof e==`string`||typeof e==`number`||typeof e==`boolean`?String(e):JSON.stringify(e)}function yc(){let{t:e}=B(),t=Ur(),n=Rn(),{data:r}=dr({deviceId:t??0},{enabled:t!==null}),{data:i}=Mr({deviceId:t??0},{enabled:t!==null}),a=r??n??null,[s,c]=C(`identity`);if(t===null||!a)return null;let l=String(a.stableId??``),u=String(a.addonId??``),d=typeof a.integrationId==`string`&&a.integrationId.length>0?a.integrationId:null,f=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 o(`div`,{className:`rounded-lg border border-border bg-surface overflow-hidden`,children:[o(`div`,{className:`border-b border-border px-3 sm:px-4 py-2 flex items-center justify-between gap-3`,children:[b(`h2`,{className:`text-[11px] font-semibold text-foreground uppercase tracking-wider`,children:e(`overviewAdapters.deviceInfoAdapter.deviceInfo`,`Device Info`)}),v&&o(`div`,{className:`flex items-center gap-1 rounded-md bg-surface-hover p-0.5`,children:[b(bc,{active:s===`identity`,onClick:()=>c(`identity`),label:e(`overviewAdapters.deviceInfoAdapter.identity`,`Identity`)}),b(bc,{active:s===`hardware`,onClick:()=>c(`hardware`),label:e(`overviewAdapters.deviceInfoAdapter.hardware`,`Hardware`)})]})]}),(!v||s===`identity`)&&o(`div`,{className:`divide-y divide-border`,children:[b(lc,{label:`ID`,value:o(`span`,{className:`font-mono text-[11px] text-foreground`,children:[`#${t}`,o(`span`,{className:`ml-1.5 text-foreground-subtle`,children:[`(`,l,`)`]})]})}),b(hc,{deviceId:t}),d!==null&&b(lc,{label:e(`overviewAdapters.deviceInfoAdapter.integration`,`Integration`),value:b(`span`,{className:`font-mono text-[11px]`,children:d})}),f!==null&&b(lc,{label:e(`overviewAdapters.deviceInfoAdapter.parent`,`Parent`),value:b(`span`,{className:`font-mono text-[11px]`,children:`#${String(f)}`})}),b(lc,{label:e(`overviewAdapters.deviceInfoAdapter.provider`,`Provider`),value:b(cc,{type:u,size:`sm`,showLabel:!0})}),b(lc,{label:e(`overviewAdapters.deviceInfoAdapter.capabilities`,`Capabilities`),value:g.length>0?b(nc,{capabilities:g,showLabels:!0}):b(`span`,{className:`text-[11px] text-foreground-subtle`,children:e(`overviewAdapters.deviceInfoAdapter.none`,`None`)})})]}),v&&s===`hardware`&&b(xc,{metadata:_})]})}function bc({active:e,onClick:t,label:n}){return b(`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 xc({metadata:e}){let{t}=B(),n=gc.filter(t=>t in e),r=Object.keys(e).filter(e=>!gc.includes(e)).toSorted(),i=[...n,...r];return o(`div`,{children:[b(`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.`)}),b(`div`,{className:`divide-y divide-border`,children:i.map(t=>b(lc,{label:_c(t),value:b(`span`,{className:`font-mono text-[11px] text-foreground break-all`,children:vc(e[t])})},t))})]})}function Sc(e,t){return e.icon===t.icon&&e.label===t.label&&e.unit===t.unit&&e.precision===t.precision&&e.hidden===t.hidden}function Cc(e){return{icon:e?.icon??``,label:e?.label??``,unit:e?.unit??``,precision:e?.precision===void 0?``:String(e.precision),hidden:e?.hidden===!0}}function wc(e){if(e.trim()===``)return;let t=Number.parseInt(e,10);return Number.isFinite(t)?t:void 0}function Tc(e,t){let n=wc(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 Ec(e){let t=Cc(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 Dc(e,t){if(e===null)return Ec(t);let n=Cc(t.display),r=e.name===t.name&&e.location===t.location&&e.role===t.role&&Sc(e.display,n);return!Oc(e)||r?Ec(t):e}function Oc(e){return e===null?!1:e.name!==e.baseName||e.location!==e.baseLocation||e.role!==e.baseRole||!Sc(e.display,e.baseDisplay)}function kc(e){return e.name.trim().length===0?`name`:null}function Ac(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},...Sc(e.display,e.baseDisplay)?{}:{display:Tc(e.display,e.persistedDisplay)}}}function jc(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(`; `)}}D();var Mc=A(null);function Nc(){return F(Mc)}function Pc({deviceId:e,seed:t,showOpenFull:n=!1,onClose:r,children:i}){let[a,o]=C(null),[s,c]=C([]),l=f(new Map);if(t!==null){let e=Dc(a,t);(a===null||e.name!==a.name||e.location!==a.location||e.role!==a.role||!Sc(e.display,a.display)||e.baseName!==a.baseName||e.baseLocation!==a.baseLocation||e.baseRole!==a.baseRole||!Sc(e.baseDisplay,a.baseDisplay)||e.persistedDisplay!==a.persistedDisplay)&&o(e)}let u=y(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))}),[]),d=p(()=>({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 b(Mc.Provider,{value:d,children:b(Fc,{deviceId:e,identity:a,contributions:s,onIdentitySaved:e=>o(e),showOpenFull:n,onClose:r,children:i})})}function Fc({deviceId:e,identity:t,contributions:n,onIdentitySaved:r,showOpenFull:i,onClose:a,children:s}){return o(P,{children:[s,b(Lc,{deviceId:e,identity:t,contributions:n,onIdentitySaved:r,showOpenFull:i,onClose:a})]})}function Ic(e){return e instanceof Error?e.message:String(e)}function Lc({deviceId:e,identity:t,contributions:n,onIdentitySaved:r,showOpenFull:i,onClose:a}){let{t:s}=B(),c=q(),l=ur(),u=M(),[d,f]=C(null),[p,m]=C(!1),h=kn(),g=Xn(),_=ir(),v=Hn(),y=jc([{dirty:Oc(t),saving:p,error:d},...n]),x=()=>{u.invalidateQueries({queryKey:[[`deviceManager`]]})};return o(`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:[y.error!==null&&b(`p`,{className:`text-xs text-danger`,children:y.error}),o(`div`,{className:`flex flex-wrap items-center justify-between gap-2`,children:[i?b(bn,{type:`button`,variant:`outline`,size:`sm`,onClick:()=>{(async()=>{y.dirty&&!await l({title:s(`deviceQuickDetail.leaveTitle`,`Discard unsaved changes?`),message:s(`deviceQuickDetail.leaveMessage`,`Unsaved edits on this device will be discarded.`),confirmLabel:s(`deviceQuickDetail.discard`,`Discard`),variant:`warning`})||(c(`/devices/${String(e)}?tab=customize`),a?.())})()},children:s(`deviceQuickDetail.openFull`,`Open full detail`)}):b(`span`,{}),o(`div`,{className:`flex items-center gap-2`,children:[b(bn,{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();f(null)},disabled:!y.dirty||y.saving,children:s(`deviceQuickDetail.discard`,`Discard`)}),b(bn,{type:`button`,size:`sm`,onClick:()=>{if(t!==null&&Oc(t)&&kc(t)===`name`){f(s(`deviceQuickDetail.nameRequired`,`Name is required`));return}f(null),m(!0),(async()=>{try{let i=t===null?{}:Ac(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){f(Ic(e))}finally{m(!1)}})()},disabled:!y.dirty||y.saving,children:y.saving?s(`deviceQuickDetail.saving`,`Saving…`):s(`deviceQuickDetail.save`,`Save`)})]})]})]})}function Rc(e){return e.hubReachable?e.authOk===!1?{kind:`auth-expired`}:{kind:`cluster-degraded`,offlineAgents:e.offlineAgents,offlineAgentIds:e.offlineAgentIds}:{kind:`hub-unreachable`}}function zc(e){switch(e.kind){case`connected`:return null;case`reconnecting`:return{severity:`warning`,message:z.t(`connection.reconnecting`),i18nKey:`connection.reconnecting`,showSpinner:!0};case`cluster-degraded`:{let t=e.offlineAgentIds??[];return t.length>0?{severity:`warning`,message:z.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:z.t(`connection.degradedCount`,{count:e.offlineAgents}),i18nKey:`connection.degradedCount`,i18nParams:{count:e.offlineAgents},showSpinner:!0}:{severity:`warning`,message:z.t(`connection.degraded`),i18nKey:`connection.degraded`,showSpinner:!0}}case`hub-unreachable`:return{severity:`danger`,message:z.t(`connection.disconnected`),i18nKey:`connection.disconnected`,showSpinner:!0};case`auth-expired`:return{severity:`danger`,message:z.t(`connection.sessionExpired`),i18nKey:`connection.sessionExpired`,showSpinner:!1,action:`sign-in`}}}var Bc=4e3,Vc=5e3;function Hc(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 Uc(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 Wc(e){let t=e.fetchFn??fetch,n=e.timeoutMs??Bc,r=e.origin.replace(/\/+$/,``),i;try{i=await Uc(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 Uc(t,`${r}/health/details`,n,{Authorization:`Bearer ${o}`});e.ok&&(a=await e.json())}catch{}let s;try{s=Hc(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 Uc(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 Gc={kind:`connected`},Kc={kind:`reconnecting`};function qc(e){let t=e.probeIntervalMs??Vc,n=new Set,r=Gc,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(Rc(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(Gc);return}if(e===`connecting`){c(),s(Kc);return}(r.kind===`connected`||r.kind===`reconnecting`)&&s(Kc),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 Jc=null;function Yc(){return Jc===null&&(Jc=qc({probe:()=>Wc({origin:xe(),getToken:()=>localStorage.getItem(`camstack_admin_token`)})})),Jc}function Xc(e){Yc().onSdkConnectionState(e)}function Zc(e){return e===`connected`}function Qc(e){j.setOnline(Zc(e))}var $c=null,el=0;function X(){if(!$c){let e=el;$c=Rr({serverUrl:xe(),token:localStorage.getItem(`camstack_admin_token`)??void 0,getLanguage:()=>z.language,refreshCredential:async e=>{e===`rejected`?await gl().refreshNow():await gl().ensureFresh()},onConnectionChange:t=>{e===el&&(Xc(t),Qc(t))}})}return $c}function Z(){let e=$c;$c=null,el+=1,e?.close()}var tl=`camstack_admin_token`,nl=`camstack_admin_refresh`,rl=`camstack_admin_token_expires`;function il(e){try{let t=localStorage.getItem(e);return t!==null&&t.length>0?t:null}catch{return null}}function al(e,t){try{t===null?localStorage.removeItem(e):localStorage.setItem(e,t)}catch{}}function ol(){let e=il(tl);if(e===null)return null;let t=il(nl),n=Number(il(rl));return{token:e,...t===null?{}:{refreshToken:t},...Number.isFinite(n)&&n>0?{expiresAt:n}:{}}}function sl(e){al(tl,e.token),al(nl,e.refreshToken??null),al(rl,e.expiresAt===void 0?null:String(e.expiresAt))}function cl(){al(tl,null),al(nl,null),al(rl,null)}function ll(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 ul(e){await fetch(L(`/api/auth/session`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({token:e})}).catch(()=>{})}var dl=new Set;function fl(e){return dl.add(e),()=>dl.delete(e)}var pl=new Set;function ml(e){return pl.add(e),()=>pl.delete(e)}var hl=null;function gl(){return hl===null&&(hl=new qr({refresh:async e=>{let t=ol();if(t?.refreshToken!==void 0&&t.refreshToken!==e&&(t.expiresAt??0)>Date.now()+6e4)return t;let n=await X().refreshSession(e);return{token:n.token,refreshToken:n.refreshToken,expiresAt:n.expiresAt}},onTokens:e=>{sl(e),X().setToken(e.token),ul(e.token);for(let e of pl)e()},onExpired:()=>{cl();for(let e of dl)e()}})),hl}function _l(e){sl(e),gl().adopt(e)}async function vl(e){try{await gl().ensureFresh()}catch(e){console.warn(`[admin-session] pre-reconnect refresh failed; reconnecting anyway`,e)}e()}async function yl(){return await gl().refreshNow()!==null}var bl=512;function xl(e){if(!e||e.length>bl)return null;let t=ot(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 Sl=/^[A-Za-z0-9_-]{43,128}$/,Cl=/^[A-Za-z0-9._~-]{1,256}$/;function wl(e){let{codeChallenge:t,state:n}=e;return!t||!Sl.test(t)||(e.codeChallengeMethod??`S256`)!==`S256`||!n||!Cl.test(n)?null:{codeChallenge:t,state:n,purpose:e.purpose===`step-up`?`step-up`:`new-session`}}var Tl=`camstack:login-app-handoff`;function El(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 wl({codeChallenge:n(`codeChallenge`),state:n(`state`),purpose:n(`purpose`)})}catch{return null}}function Dl(e,t=Date.now()){e!==null&&zl(Tl,JSON.stringify(e),El,t)}function Ol(e=Date.now()){return Bl(Tl,El,e)}function kl(e,t,n){return`${e}?${`code=${encodeURIComponent(t)}`}${n===void 0?``:`&state=${encodeURIComponent(n)}`}`}function Al(e,t=Date.now()){return Ul(t)??xl(e)}var jl=2048;function Ml(e){return!e||e.length>jl||!e.startsWith(`/`)||e.startsWith(`//`)||e.includes(`\\`)||e.includes(`://`)||e.includes(`..`)||e===`/login`||e.startsWith(`/login?`)||e.startsWith(`/login/`)?null:e}function Nl(e,t=Date.now()){zl(Ll,e,Ml,t)}function Pl(e=Date.now()){return Bl(Ll,Ml,e)}function Fl(e,t=Date.now()){return Pl(t)??Ml(e)}var Il=`camstack:login-redirect`,Ll=`camstack:login-next`,Rl=10*6e4;function zl(e,t,n,r){let i=Vl();if(!i||!n(t))return;let a={raw:t??``,at:r};try{i.setItem(e,JSON.stringify(a))}catch{}}function Bl(e,t,n){let r=Vl();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>Rl?null:t(a)}catch{return null}}function Vl(){if(typeof window>`u`)return null;try{return window.sessionStorage}catch{return null}}function Hl(e,t=Date.now()){zl(Il,e,xl,t)}function Ul(e=Date.now()){return Bl(Il,xl,e)}var Wl=`changeme`;function Gl(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:Kl(n.scopes)}}catch{return null}}function Kl(e){return Bt(Pt(e))}function ql(e){let t=Gl(e);return t?t.exp*1e3<Date.now():!0}D();var Jl=Wl;function Yl(e){return{token:e.token,...e.refreshToken===void 0?{}:{refreshToken:e.refreshToken},...e.expiresAt===void 0?{}:{expiresAt:e.expiresAt}}}async function Xl(e,t){if(await ul(e),t.kind===`path`){window.location.replace(L(t.path));return}try{Z();let e=Ol();if(e===null)throw Error(`The app sent no PKCE challenge and state`);let{code:n}=await X().trpcClient.auth.createHandoffCode.mutate({purpose:e.purpose,codeChallenge:e.codeChallenge,state:e.state});window.location.replace(kl(t.url,n,e.state))}catch{window.location.replace(L(`/`))}}async function Zl(e,t){await ul(e),window.location.replace(L(t))}var Ql=A(null);function $l({children:e}){let[t,n]=C(null),[r,i]=C(!0),[a,o]=C(!1);x(()=>{if(typeof window<`u`&&window.location.hash.startsWith(`#token=`)){let e=new URLSearchParams(window.location.hash.slice(1)),t=ll(e),n=t?.token??null;if(t!==null&&n!==null){_l(t);let r=Ul();if(r){Xl(n,r);return}let i=Pl()??Ml(e.get(`next`));if(i){Zl(n,i);return}window.history.replaceState({},``,L(`/`))}}s()},[]);let s=async()=>{let e=ol();if(e===null){i(!1);return}let t=e.token;if(e.refreshToken!==void 0){let n=gl();n.adopt(e),await n.ensureFresh();let r=ol();if(r===null){console.warn(`[auth] session restore: signed out — the hub refused the refresh token`),Z(),i(!1);return}t=r.token}if(ql(t)){console.warn(`[auth] session restore: signed out — access token expired and no refresh recovered it`),cl(),Z(),i(!1);return}let r=Gl(t);if(!r){console.warn(`[auth] session restore: signed out — the stored access token is unreadable`),cl(),Z(),i(!1);return}ul(t);let a=X();a.trpcClient.system.info.query().then(()=>n(r)).catch(async e=>{let t=e?.data?.code;if(t===`UNAUTHORIZED`||t===`FORBIDDEN`){if(await yl()){a.reconnect();try{await X().trpcClient.system.info.query();let e=ol();n(e&&Gl(e.token)||r);return}catch{}}console.warn(`[auth] session restore: logout, probe UNAUTHORIZED and refresh did not recover it`),gl().stop(),cl(),Z()}else n(r)}).finally(()=>i(!1))};x(()=>fl(()=>{Z(),n(null),o(!1)}),[]);let c=y(async(e,t)=>{let r=await X().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 _l(Yl(r)),await ul(a),Z(),n(Gl(a)),o(t===Jl),{kind:`ok`}},[]),l=y(async(e,t)=>{let r=await X().loginVerifyTotp(e,t,{refreshable:!0}),i=r.token;_l(Yl(r)),await ul(i),Z(),n(Gl(i)),o(!1)},[]),u=y(async(e,t)=>{_l({token:e,...t}),await ul(e),Z(),n(Gl(e)),o(!1)},[]),d=y(()=>{X().logout().catch(()=>{}),gl().stop(),cl(),fetch(L(`/api/auth/session`),{method:`DELETE`}).catch(()=>{}),Z(),n(null),o(!1)},[]),f=y(()=>{o(!1)},[]);return b(Ql.Provider,{value:{user:t,loading:r,mustChangePassword:a,login:c,verifyTotp:l,finalizePasskeyLogin:u,logout:d,clearMustChangePassword:f},children:e})}function eu(){let e=F(Ql);if(!e)throw Error(`useAuth must be used within AuthProvider`);return e}D();function tu(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 nu({schema:e,serverValues:t,onImmediateSave:n,onDeferredSave:r}){let[i,a]=C({}),[o,s]=C({}),[c,l]=C(!1),u=f(null),d=e?.sections??[],m=Object.keys(i).length>0,h=p(()=>({...t,...o,...i}),[t,o,i]);x(()=>{if(m||Object.keys(o).length>0){l(!0);return}u.current&&clearTimeout(u.current),u.current=setTimeout(()=>l(!1),500)},[m,o]),x(()=>()=>{u.current&&clearTimeout(u.current)},[]);let g=y(()=>{l(!0),u.current&&clearTimeout(u.current),u.current=setTimeout(()=>l(!1),2e3)},[]),_=y(e=>{g();let r={},o={},s={...t,...i};for(let[t,n]of Object.entries(e))s[t]!==n&&(tu(d,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})},[g,t,i,d,n]),v=y(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),c=r(t);if(c===void 0||typeof c.then!=`function`)return;s(e=>({...e,...t}));let l=()=>s(e=>{let t={...e};for(let e of o)delete t[e];return t});c.then(l,()=>{l(),a(e=>{let n={...e};for(let e of o)e in n||(n[e]=t[e]);return n})})},[i,r]),b=y(e=>{a(t=>{let n={...t};for(let t of e)delete n[t];return n})},[]),S=y(()=>{a({})},[]);return{values:h,pendingKeys:Object.keys(i),hasPendingEdits:m,editingPaused:c,handleChange:_,handleSave:v,handleDiscard:b,resetAll:S}}function Q(e){return t=>Object.prototype.hasOwnProperty.call(e,t)}var ru=Q({devices:!0}),iu=Q({classes:!0,classesExclude:!0,labelEquals:!0,identities:!0,identitiesExclude:!0,eventTypeTokens:!0,sensorKinds:!0}),au=Q({minConfidence:!0,minImportance:!0,minLabelConfidence:!0}),ou=Q({minDwellSeconds:!0}),su=Q({source:!0}),cu=Q({crossing:!0}),lu=Q({packagePhase:!0}),uu=Q({sensorTransition:!0}),du=Q({plates:!0}),fu=Q({occupancy:!0}),pu=Q({audio:!0}),mu=Q({systemEvent:!0}),hu=Q({deviceState:!0}),gu=Q({scene:!0});function _u(e,t){let n=e[t];return Array.isArray(n)?n:[]}function vu(e,t){let n=e[t];return typeof n==`number`?n:void 0}D();function yu(e,t){let n=qe().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 p(()=>{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 bu(e){let t=qe().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 p(()=>{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 xu(){let e=zr();return p(()=>({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 Su(){let e=Gn({limit:200}),t=Mn();return p(()=>{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 Cu({options:e,value:t,onChange:n,loading:r,emptyHint:i,placeholder:a,noFreeText:s=!1}){let{t:c}=B(),[l,u]=C(``),d=p(()=>new Set(e.map(e=>e.value)),[e]),f=p(()=>new Set(t),[t]),m=t.filter(e=>!d.has(e)),h=e=>{n(f.has(e)?t.filter(t=>t!==e):[...t,e])},g=()=>{let e=l.trim();e.length===0||t.includes(e)||(n([...t,e]),u(``))};return o(`div`,{className:`mt-1 space-y-1.5`,children:[m.length>0&&b(`div`,{className:`flex flex-wrap gap-1`,children:m.map(e=>o(`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:c(`system.notificationRulePickers.customValueClickToRemove`,`Custom value — click to remove`),children:[e,` ×`]},e))}),e.length>0?b(`div`,{className:`max-h-40 overflow-y-auto rounded-md border border-border divide-y divide-border`,children:e.map(e=>o(`label`,{className:`flex items-center gap-2.5 px-3 py-1.5 text-xs text-foreground cursor-pointer hover:bg-surface-hover`,children:[b(`input`,{type:`checkbox`,checked:f.has(e.value),onChange:()=>h(e.value),className:`accent-primary`}),b(`span`,{className:`flex-1 truncate`,children:e.label}),e.hint!==void 0&&b(`span`,{className:`text-[10px] text-foreground-subtle`,children:e.hint})]},e.value))}):b(`p`,{className:`text-[10px] text-foreground-subtle`,children:r===!0?c(`common.loading`,`Loading…`):i}),!s&&b(`input`,{value:l,onChange:e=>u(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 wu=[{value:`immediate`,get label(){return z.t(`helpers.ruleFormParsers.immediate`)},get hint(){return z.t(`helpers.ruleFormParsers.immediateHint`)}},{value:`track-end`,get label(){return z.t(`helpers.ruleFormParsers.trackEnd`)},get hint(){return z.t(`helpers.ruleFormParsers.trackEndHint`)}},{value:`device-event`,get label(){return z.t(`helpers.ruleFormParsers.deviceEvent`)},get hint(){return z.t(`helpers.ruleFormParsers.deviceEventHint`)}},{value:`package-event`,get label(){return z.t(`helpers.ruleFormParsers.packageEvent`)},get hint(){return z.t(`helpers.ruleFormParsers.packageEventHint`)}},{value:`system-event`,get label(){return z.t(`helpers.ruleFormParsers.systemEvent`)},get hint(){return z.t(`helpers.ruleFormParsers.systemEventHint`)}}],Tu=`Immediate, grouped`,Eu=wu.flatMap(e=>e.value===`immediate`?[e,{value:`immediate-grouped`,get label(){return z.t(`notificationRules.grouping.choice`)},get hint(){return z.t(`helpers.ruleFormParsers.groupedHint`)}}]:[e]);function Du(e){return e.groupingSec!==void 0&&$t(e)?`immediate-grouped`:e.delivery}function Ou(e){let t=(e.delivery===`immediate`||e.delivery===`track-end`)&&$t({delivery:`immediate`,conditions:e.conditions});return Eu.filter(e=>e.value!==`immediate-grouped`||t)}function ku(e){return Eu.find(t=>t.value===e)?.value}function Au(e,t=Tu){return Du(e)===`immediate-grouped`?`${t} · ${String(e.groupingSec)} s`:Mu(e.delivery)}function ju(e){if(e.trim().length===0)return;let t=Number(e);return Number.isFinite(t)&&t>=0?Math.trunc(t):void 0}function Mu(e){return wu.find(t=>t.value===e)?.label??e}function Nu(e){return wu.some(t=>t.value===e)}var Pu=[{key:`all`,get label(){return z.t(`helpers.ruleFormParsers.sec_all_label`)},get blurb(){return z.t(`helpers.ruleFormParsers.sec_all_blurb`)},get newRuleLabel(){return z.t(`helpers.ruleFormParsers.sec_all_new`)},get emptyHint(){return z.t(`helpers.ruleFormParsers.sec_all_empty`)},creatable:!0},{key:`detection`,get label(){return z.t(`helpers.ruleFormParsers.sec_detection_label`)},get blurb(){return z.t(`helpers.ruleFormParsers.sec_detection_blurb`)},get newRuleLabel(){return z.t(`helpers.ruleFormParsers.sec_detection_new`)},get emptyHint(){return z.t(`helpers.ruleFormParsers.sec_detection_empty`)},creatable:!0},{key:`sensor`,get label(){return z.t(`helpers.ruleFormParsers.sec_sensor_label`)},get blurb(){return z.t(`helpers.ruleFormParsers.sec_sensor_blurb`)},get newRuleLabel(){return z.t(`helpers.ruleFormParsers.sec_sensor_new`)},get emptyHint(){return z.t(`helpers.ruleFormParsers.sec_sensor_empty`)},creatable:!0},{key:`audio`,get label(){return z.t(`helpers.ruleFormParsers.sec_audio_label`)},get blurb(){return z.t(`helpers.ruleFormParsers.sec_audio_blurb`)},get newRuleLabel(){return z.t(`helpers.ruleFormParsers.sec_audio_new`)},get emptyHint(){return z.t(`helpers.ruleFormParsers.sec_audio_empty`)},creatable:!0},{key:`occupancy`,get label(){return z.t(`helpers.ruleFormParsers.sec_occupancy_label`)},get blurb(){return z.t(`helpers.ruleFormParsers.sec_occupancy_blurb`)},get newRuleLabel(){return z.t(`helpers.ruleFormParsers.sec_occupancy_new`)},get emptyHint(){return z.t(`helpers.ruleFormParsers.sec_occupancy_empty`)},creatable:!0},{key:`device-events`,get label(){return z.t(`helpers.ruleFormParsers.sec_deviceEvents_label`)},get blurb(){return z.t(`helpers.ruleFormParsers.sec_deviceEvents_blurb`)},get newRuleLabel(){return z.t(`helpers.ruleFormParsers.sec_deviceEvents_new`)},get emptyHint(){return z.t(`helpers.ruleFormParsers.sec_deviceEvents_empty`)},creatable:!0},{key:`system`,get label(){return z.t(`helpers.ruleFormParsers.sec_system_label`)},get blurb(){return z.t(`helpers.ruleFormParsers.sec_system_blurb`)},get newRuleLabel(){return z.t(`helpers.ruleFormParsers.sec_system_new`)},get emptyHint(){return z.t(`helpers.ruleFormParsers.sec_system_empty`)},creatable:!0},{key:`alarm`,get label(){return z.t(`helpers.ruleFormParsers.sec_alarm_label`)},get blurb(){return z.t(`helpers.ruleFormParsers.sec_alarm_blurb`)},get newRuleLabel(){return z.t(`helpers.ruleFormParsers.sec_alarm_new`)},get emptyHint(){return z.t(`helpers.ruleFormParsers.sec_alarm_empty`)},creatable:!0},{key:`mixed`,get label(){return z.t(`helpers.ruleFormParsers.sec_mixed_label`)},get blurb(){return z.t(`helpers.ruleFormParsers.sec_mixed_blurb`)},get newRuleLabel(){return z.t(`helpers.ruleFormParsers.sec_mixed_new`)},get emptyHint(){return z.t(`helpers.ruleFormParsers.sec_mixed_empty`)},creatable:!1}];function Fu(e){return Ft(nn(e)).editable}function Iu(e){return zt(Lu(e))}function Lu(e){switch(e){case`device-events`:case`system`:case`alarm`:case`mixed`:return e;default:return}}var Ru=new Map([[0,`helpers.ruleFormParsers.cdNone`],[60,`helpers.ruleFormParsers.cd1m`],[3600,`helpers.ruleFormParsers.cd1h`]]),zu=86400;function Bu(e){let t=Ru.get(e);return t===void 0?e%3600==0?z.t(`helpers.ruleFormParsers.cdHours`,{count:e/3600}):e%60==0?z.t(`helpers.ruleFormParsers.cdMinutes`,{count:e/60}):z.t(`helpers.ruleFormParsers.cdSeconds`,{count:e}):z.t(t)}function Vu(e){if(e.trim().length===0)return;let t=Number(e);return Number.isFinite(t)&&t>=0?Math.trunc(t):void 0}var Hu=[{value:`rule-device`,get label(){return z.t(`helpers.ruleFormParsers.scopeDevice`)}},{value:`rule`,get label(){return z.t(`helpers.ruleFormParsers.scopeRule`)}}];function Uu(e){return Hu.find(t=>t.value===e)?.value}var Wu=[{value:`per-class`,get label(){return z.t(`helpers.ruleFormParsers.granPerClass`)}},{value:`shared`,get label(){return z.t(`helpers.ruleFormParsers.granShared`)}}];function Gu(e){return Wu.find(t=>t.value===e)?.value}var Ku=[{value:`scene-boxes`,get label(){return z.t(`helpers.ruleFormParsers.imageSceneBoxes`)},get description(){return z.t(`helpers.ruleFormParsers.imageSceneBoxesDesc`)}},{value:`crop`,get label(){return z.t(`helpers.ruleFormParsers.imageCrop`)},get description(){return z.t(`helpers.ruleFormParsers.imageCropDesc`)}},{value:`clean`,get label(){return z.t(`helpers.ruleFormParsers.imageClean`)},get description(){return z.t(`helpers.ruleFormParsers.imageCleanDesc`)}},{value:`none`,get label(){return z.t(`helpers.ruleFormParsers.imageNone`)},get description(){return z.t(`helpers.ruleFormParsers.imageNoneDesc`)}}];function qu(e){return Ku.find(t=>t.value===e)?.value}var Ju=[{value:``,get label(){return z.t(`helpers.ruleFormParsers.linkedDefault`)}},{value:`mosaic`,get label(){return z.t(`helpers.ruleFormParsers.linkedMosaic`)}},{value:`each`,get label(){return z.t(`helpers.ruleFormParsers.linkedEach`)}}];function Yu(e){let t=Ju.find(t=>t.value===e)?.value;return t===``?void 0:t}var Xu=[{value:``,get label(){return z.t(`helpers.ruleFormParsers.profileLowest`)}},{value:`low`,get label(){return z.t(`helpers.ruleFormParsers.profileLow`)}},{value:`mid`,get label(){return z.t(`helpers.ruleFormParsers.profileMid`)}},{value:`high`,get label(){return z.t(`helpers.ruleFormParsers.profileHigh`)}}];function Zu(e){let t=Xu.find(t=>t.value===e)?.value;return t===``?void 0:t}var Qu=[{value:`any`,get label(){return z.t(`helpers.ruleFormParsers.srcAny`)}},{value:`pipeline`,get label(){return z.t(`helpers.ruleFormParsers.srcPipeline`)}},{value:`onboard`,get label(){return z.t(`helpers.ruleFormParsers.srcOnboard`)}},{value:`sensor`,get label(){return z.t(`helpers.ruleFormParsers.srcSensor`)}}],$u=[{value:`delivered`,get label(){return z.t(`helpers.ruleFormParsers.phaseDelivered`)}},{value:`picked-up`,get label(){return z.t(`helpers.ruleFormParsers.phasePickedUp`)}},{value:`both`,get label(){return z.t(`helpers.ruleFormParsers.phaseBoth`)}}],ed=[{value:``,get label(){return z.t(`helpers.ruleFormParsers.stBoth`)}},{value:`raised`,get label(){return z.t(`helpers.ruleFormParsers.stRaised`)}},{value:`cleared`,get label(){return z.t(`helpers.ruleFormParsers.stCleared`)}}];function td(e){return e===`raised`||e===`cleared`?e:void 0}function nd(e,t){return e===`sensorTransition`?gt(t.sensorKinds):!0}var rd=[{value:`enter`,get label(){return z.t(`helpers.ruleFormParsers.crossEnter`)}},{value:`exit`,get label(){return z.t(`helpers.ruleFormParsers.crossExit`)}},{value:`any`,get label(){return z.t(`helpers.ruleFormParsers.crossAny`)}}],id=`enter`;function ad(e){return e===`exit`||e===`any`?e:void 0}var od=[{value:1,get label(){return z.t(`helpers.ruleFormParsers.prioMin`)}},{value:2,get label(){return z.t(`helpers.ruleFormParsers.prioLow`)}},{value:3,get label(){return z.t(`helpers.ruleFormParsers.prioDefault`)}},{value:4,get label(){return z.t(`helpers.ruleFormParsers.prioHigh`)}},{value:5,get label(){return z.t(`helpers.ruleFormParsers.prioMax`)}}];function sd(e,t){return e.options&&e.options.length>0?e.options:t}var cd=[{value:``,get label(){return z.t(`helpers.ruleFormParsers.speedDefault`)}},{value:`1`,get label(){return z.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 ld(e){if(e===``)return;let t=Number(e);return Number.isFinite(t)&&t>=1&&t<=8?t:void 0}var ud=`notificationRules.systemEventKinds.`,dd=`notificationRules.systemEventGroups.`,fd=`notificationRules.systemEventHints.`;function pd(e){return!en.some(t=>t===e)}function md(e){let t=`${ud}${e}`;return z.exists(t)?z.t(t):e}function hd(){return ft.map(e=>({id:e.id,family:e.family,label:z.t(`${dd}${e.id}`,e.label),hint:z.t(`${fd}${e.id}`),kinds:e.kinds.filter(pd).map(e=>({value:e,label:md(e)}))}))}function gd(e){return hd().filter(t=>t.family===e)}function _d(e){let t=kt(e).conditions.systemEvent;return t===void 0?{kinds:(gd(e)[0]?.kinds??[]).map(e=>e.value)}:{...t,kinds:[...t.kinds]}}function vd(){return hd().flatMap(e=>e.kinds)}function yd(e){return{devices:Wt(e,`deviceIds`),deviceTypes:Wt(e,`deviceTypes`),nodes:Wt(e,`nodeIds`),packages:Wt(e,`packageNames`),consumableThreshold:Wt(e,`consumableLowPercent`)}}function bd(e,t){let n=pt[e],r=yd(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 xd=Object.values(Yt).map(e=>({value:e,label:Sd(e)})).toSorted((e,t)=>e.label.localeCompare(t.label));function Sd(e){let t=e.replaceAll(`-`,` `);return t.charAt(0).toUpperCase()+t.slice(1)}function Cd(e,t){let n=[],r=new Set;for(let i of e.kinds){let e=xt(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]:yt(e),clears:yt(e),classId:e.id,...t&&e.snapshotSection===null?{noSnapshot:!0}:{}}))}return n}function wd(e,t){return t.clears.some(t=>e.includes(t))}function Td(e,t,n){if(!gd(n).some(e=>e.kinds.some(e=>t.kinds.includes(e.value))))return e;let r=e?.kinds??[];if(wd(r,t)){let i=r.filter(e=>!t.clears.includes(e));return i.length===0?e:kd(e,i,n)}return kd(e,vd().filter(e=>t.kinds.includes(e.value)||r.includes(e.value)).map(e=>e.value),n)}function Ed(e,t){return t===void 0?void 0:kd(t,t.kinds,e)}function Dd(e,t){let n=e?.kinds??[];if(n.length===0)return;let r=Od(t,`deviceIds`,e?.deviceIds),i=Od(t,`excludeDeviceIds`,e?.excludeDeviceIds),a=Od(t,`deviceTypes`,e?.deviceTypes),o=Od(t,`nodeIds`,e?.nodeIds),s=Od(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 Od(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 kd(e,t,n){let r=bd(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 Ad=95;function jd(e){let t=e.trim();if(t===``)return{kind:`clear`};let n=Number(t);return Number.isInteger(n)&&n>=1&&n<=Ad?{kind:`set`,value:n}:{kind:`invalid`}}function Md(e,t=2){if(e===void 0||e.length===0)return z.t(`helpers.notificationSystemEvents.noneSelected`);let n=e.slice(0,t).map(md).join(`, `),r=e.length-Math.min(t,e.length);return r>0?`${n} +${r}`:n}function Nd(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(Sd).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 Pd(e){return e===void 0||(e.deviceTypes?.length??0)===0?!1:e.kinds.some(e=>Ot.includes(e))}var Fd=[`all`,`only`,`except`];function Id(e,t){return(e??[]).length>0?`only`:(t??[]).length>0?`except`:`all`}function Ld(e,t){let n=[...e??[]],r=[...t??[]];return{mode:Id(n,r),include:n,exclude:r,legacyBoth:n.length>0&&r.length>0}}function Rd(e,t){return{...e,mode:t}}function zd(e){switch(e.mode){case`only`:return e.include;case`except`:return e.exclude;case`all`:return[]}}function Bd(e,t){switch(e.mode){case`only`:return{...e,include:[...t]};case`except`:return{...e,exclude:[...t]};case`all`:return e}}function Vd(e){return e.mode===`only`&&e.legacyBoth?e.exclude:[]}function Hd(e){return{...e,exclude:[],legacyBoth:!1}}function Ud(e){switch(e.mode){case`all`:return{};case`except`:return e.exclude.length>0?{exclude:[...e.exclude]}:{};case`only`:{let t=Vd(e);return{...e.include.length>0?{include:[...e.include]}:{},...t.length>0?{exclude:[...t]}:{}}}}}function Wd(e){let t=Ud(e),n=t.include??[],r=t.exclude??[];return[...e.include.filter(e=>!n.includes(e)),...e.exclude.filter(e=>!r.includes(e))]}var Gd=[`onActivation`,`onDeactivation`,`onTrigger`,`onTriggerOff`],Kd={onActivation:{get title(){return z.t(`helpers.notificationRuleActions.onActivationTitle`)},get hint(){return z.t(`helpers.notificationRuleActions.onActivationHint`)}},onDeactivation:{get title(){return z.t(`helpers.notificationRuleActions.onDeactivationTitle`)},get hint(){return z.t(`helpers.notificationRuleActions.onDeactivationHint`)}},onTrigger:{get title(){return z.t(`helpers.notificationRuleActions.onTriggerTitle`)},get hint(){return z.t(`helpers.notificationRuleActions.onTriggerHint`)}},onTriggerOff:{get title(){return z.t(`helpers.notificationRuleActions.onTriggerOffTitle`)},get hint(){return z.t(`helpers.notificationRuleActions.onTriggerOffHint`)}}},qd={onActivation:[],onDeactivation:[],onTrigger:[],onTriggerOff:[],buttons:[]};function Jd(e){return e===void 0?qd:{onActivation:[...e.onActivation??[]],onDeactivation:[...e.onDeactivation??[]],onTrigger:[...e.onTrigger??[]],onTriggerOff:[...e.onTriggerOff??[]],buttons:[...e.buttons??[]]}}function Yd(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(!(!Gd.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 Xd(e,t){let n=[];for(let r of Gd){let i=e[r];i.length>4&&n.push({kind:`too-many`,message:z.t(`helpers.notificationRuleActions.tooMany`,{title:Kd[r].title})});for(let e of i)e.kind===`sequence`&&!t.has(e.sequenceId)&&n.push({kind:`unknown-sequence`,message:z.t(`helpers.notificationRuleActions.hookUnknownSeq`,{title:Kd[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:z.t(`helpers.notificationRuleActions.dupButton`,{id:e})}),r.add(e),t.has(i.sequenceId.trim())||n.push({kind:`unknown-sequence`,message:z.t(`helpers.notificationRuleActions.buttonUnknownSeq`,{label:i.label||e})}))}return n}function Zd(e,t){return{id:`action-${String(e+1)}`,label:z.t(`helpers.notificationRuleActions.newButtonLabel`),sequenceId:t}}function Qd(){return{kind:`do`,action:{kind:`cap`,deviceId:0,cap:``,method:``}}}function $d(e){return{kind:`sequence`,sequenceId:e}}function ef(){return{kind:`wait`,seconds:5}}var tf=[{value:`acknowledge`,get label(){return z.t(`helpers.notificationRuleActions.icon_acknowledge`)}},{value:`dismiss`,get label(){return z.t(`helpers.notificationRuleActions.icon_dismiss`)}},{value:`silence`,get label(){return z.t(`helpers.notificationRuleActions.icon_silence`)}},{value:`snooze`,get label(){return z.t(`helpers.notificationRuleActions.icon_snooze`)}},{value:`view`,get label(){return z.t(`helpers.notificationRuleActions.icon_view`)}},{value:`play`,get label(){return z.t(`helpers.notificationRuleActions.icon_play`)}},{value:`camera`,get label(){return z.t(`helpers.notificationRuleActions.icon_camera`)}},{value:`open`,get label(){return z.t(`helpers.notificationRuleActions.icon_open`)}},{value:`close`,get label(){return z.t(`helpers.notificationRuleActions.icon_close`)}},{value:`unlock`,get label(){return z.t(`helpers.notificationRuleActions.icon_unlock`)}},{value:`lock`,get label(){return z.t(`helpers.notificationRuleActions.icon_lock`)}},{value:`disarm`,get label(){return z.t(`helpers.notificationRuleActions.icon_disarm`)}},{value:`arm`,get label(){return z.t(`helpers.notificationRuleActions.icon_arm`)}},{value:`arm-home`,get label(){return z.t(`helpers.notificationRuleActions.icon_arm_home`)}},{value:`arm-away`,get label(){return z.t(`helpers.notificationRuleActions.icon_arm_away`)}},{value:`arm-night`,get label(){return z.t(`helpers.notificationRuleActions.icon_arm_night`)}},{value:`light`,get label(){return z.t(`helpers.notificationRuleActions.icon_light`)}},{value:`alert`,get label(){return z.t(`helpers.notificationRuleActions.icon_alert`)}}],nf=[10,30,60],rf=[5,10,15,30,60,120,240,480];function af(e){return e>=60&&e%60==0?z.t(`helpers.ruleFormState.snoozeHours`,{count:e/60}):z.t(`helpers.ruleFormState.snoozeMin`,{count:e})}var of=new Set([`alarm-arm-refused`,`alarm-check-failed`,`alarm-arming`,`alarm-armed`,`alarm-pending`,`alarm-triggered`,`alarm-rearmed`,`alarm-sensor-bypass`,`alarm-disarmed`]),sf=`alarm-panel`;function cf(e,t){for(let t of e.systemEvent?.kinds??[])if(of.has(t))return!0;for(let e of t)if(e.kind===`cap`&&e.cap===sf)return!0;return!1}function lf(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 uf(e){let{devices:t,devicesExclude:n,classes:r,classesExclude:i,...a}=e;return{conditions:a,deviceScope:Ld(t,n),classScope:Ld(r,i)}}function df(e){let t=Ud(e.deviceScope),n=Ud(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 ff(e){return e.deviceScope.mode===`only`?e.deviceScope.include:[]}function pf(e,t,n){let r=nn(n);return e.some(e=>e.id===t&&Rt(e,n.delivery,r))}function mf(e=`immediate`,t={}){return{name:``,enabled:!0,delivery:e,targetIds:[],targetUsers:[],targetParams:{},priority:3,mediaImage:It({},nn({delivery:e,conditions:t})),mediaShowTriggerZone:!1,mediaShowSubjectPath:!1,mediaGif:!1,mediaClip:!1,mediaProfile:void 0,mediaClipSpeed:void 0,mediaLinkedCameras:void 0,templateTitle:``,templateBody:``,...uf(t),schedule:void 0,systemEventDelivery:void 0,snoozeAllowGlobal:!1,groupingSec:void 0,snoozeOptions:void 0,askVerdict:void 0,actions:qd,cooldownSec:30,cooldownScope:`rule-device`,cooldownGranularity:void 0}}function hf(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:It(e.media,nn(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??``,...uf(e.conditions),schedule:e.schedule,systemEventDelivery:e.systemEventDelivery,snoozeAllowGlobal:e.snoozeAllowGlobal===!0,groupingSec:e.groupingSec,snoozeOptions:e.snoozeOptions,askVerdict:e.askVerdict,actions:Jd(e.actions),cooldownSec:e.throttle.cooldownSec,cooldownScope:e.throttle.scope,cooldownGranularity:e.throttle.granularity}}function gf(e,t){let n=[];if(wf(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&&!Tf(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(bt(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(zu)} (24 hours). 0 means every match is delivered.`),yf(e))for(let t of wt({delivery:e.delivery,conditions:e.conditions,...e.systemEventDelivery===void 0?{}:{systemEventDelivery:e.systemEventDelivery},...Yd(e.actions)===void 0?{}:{actions:Yd(e.actions)}}))n.push(Ut(t));return n}function _f(e){let t=e.systemEventDelivery;if(t===void 0)return{};if(!qt(e.delivery))return t.mode===`summary`?{systemEventDelivery:{mode:`instant`}}:{};if(t.mode===`summary`&&Ct(t.schedule)===null){let e=Vt(t.schedule);if(e!==null&&e.times.length>0)return{systemEventDelivery:{...t,schedule:st(e.times,t.schedule.timezone)}}}return{systemEventDelivery:t}}function vf(e){if(!yf(e))return null;if(!mt(e.templateBody))return z.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)?z.t(`helpers.ruleFormState.summaryWarnSplit`,{token:`{{summaryText}}`}):null}function yf(e){return qt(e.delivery)&&e.systemEventDelivery?.mode===`summary`}function bf(e,t,n=new Set){return gf(e,t).length===0&&Nu(e.delivery)&&(!qt(e.delivery)||kf(e)>0)&&nn(e)!==`mixed`&&e.name.trim().length>0&&(e.targetIds.length>0||e.targetUsers.length>0)&&Xd(e.actions,n).length===0}function xf(e,t){let n=Df(e.conditions,t);return qt(t)&&(n.systemEvent?.kinds.length??0)===0?{...e,delivery:t,conditions:{...n,systemEvent:_d(`device-events`)}}:{...e,delivery:t,conditions:n}}function Sf(e,t){return t===`immediate-grouped`?{...xf(e,`immediate`),groupingSec:e.groupingSec??20}:{...xf(e,t),groupingSec:void 0}}function Cf(e){return e.delivery===`immediate`||e.delivery===`track-end`}function wf(e){return e.groupingSec!==void 0&&$t(e)}function Tf(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 Ef=new Set([`immediate`,`track-end`,`package-event`]);function Df(e,t){if(e.source!==`pipeline`||Ef.has(t))return e;let{source:n,...r}=e;return r}function Of(e,t){return tn(e.conditions.systemEvent)===t?e:{...e,conditions:{...e.conditions,systemEvent:_d(t)}}}function kf(e){return e.conditions.systemEvent?.kinds.length??0}function Af(e,t){return e.appliesTo.includes(t)}var jf={source:`any`};function Mf(e,t){if(t==null)return!0;if(Array.isArray(t))return t.length===0;if(typeof t==`string`)return t.length===0||jf[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 Nf=ut.filter(e=>e.id===`audio`);function Pf(e){if(e.length===0)return e;let t=new Set(e.map(e=>e.id)),n=Nf.filter(e=>!t.has(e.id));return n.length===0?e:[...e,...n]}function Ff(e,t,n,r=nn({delivery:t,conditions:e})){let i=n.length===0?null:new Set(n.filter(e=>e.id!==`schedule`&&Rt(e,t,r)).map(e=>e.id)),a={};for(let[t,n]of Object.entries(e))i!==null&&!i.has(t)||nd(t,e)&&(Mf(t,n)||(a[t]=n));return a}function If(e,t){if(e===void 0)return{};let n=Ed(e,t.systemEvent);return n===void 0?{}:{systemEvent:n}}function Lf(e){return e!==void 0&&e.windows.length>0}function Rf(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 zf(e){let t=Rf(e.media);return{...e.confirm===void 0?{}:{confirm:e.confirm},...t===void 0?{}:{media:t}}}function Bf(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=Yd(e.actions),s=nn(e),c=Ft(s),l=dt(s),u=n.length===0?!0:n.some(t=>t.id===`schedule`&&Af(t,e.delivery)),d=!yf(e)&&u&&Lf(e.schedule)?e.schedule:void 0,f=n.length===0?!0:n.some(t=>t.id===`devices`&&Af(t,e.delivery)),p=n.length===0?!0:n.some(t=>t.id===`devicesExclude`&&Af(t,e.delivery)),{devices:m,devicesExclude:h,...g}=df(e),_=Ff(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}:{},...If(l,e.conditions)},...d?{schedule:d}:{},..._f(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`&&Kt(_).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}:{},...wf(e)?{groupingSec:e.groupingSec}:{},...e.snoozeOptions===void 0?{}:{snoozeOptions:[...e.snoozeOptions]},...e.askVerdict!==void 0&&Cf(e)?{askVerdict:e.askVerdict}:{},...t?.confirm===void 0?{}:{confirm:t.confirm},...o===void 0?{}:{actions:o}}}function Vf(e,t){let n=Bf(e,void 0,t);return[`template`,`schedule`,`targetUsers`,`snoozeOptions`,`snoozeAllowGlobal`,`groupingSec`,`actions`].filter(e=>n[e]===void 0)}var Hf=[{key:`rule`,get label(){return z.t(`helpers.ruleFormTabs.tab_rule`)},fields:[`name`,`enabled`,`delivery`,`groupingSec`,`targetIds`,`targetUsers`,`targetParams`]},{key:`devices`,get label(){return z.t(`helpers.ruleFormTabs.tab_devices`)},fields:[`deviceScope`]},{key:`conditions`,get label(){return z.t(`helpers.ruleFormTabs.tab_conditions`)},fields:[`conditions`,`classScope`,`schedule`,`systemEventDelivery`]},{key:`notification`,get label(){return z.t(`helpers.ruleFormTabs.tab_notification`)},fields:[`priority`,`mediaImage`,`mediaShowTriggerZone`,`mediaShowSubjectPath`,`mediaGif`,`mediaClip`,`mediaProfile`,`mediaClipSpeed`,`mediaLinkedCameras`,`templateTitle`,`templateBody`]},{key:`actions`,get label(){return z.t(`helpers.ruleFormTabs.tab_actions`)},fields:[`actions`]},{key:`advanced`,get label(){return z.t(`helpers.ruleFormTabs.tab_advanced`)},fields:[`snoozeAllowGlobal`,`snoozeOptions`,`askVerdict`,`cooldownSec`,`cooldownScope`,`cooldownGranularity`]}];function Uf(e,t={}){let n=nn({delivery:e,conditions:t}),r=Ft(n),i=Hf.map(e=>e.key===`conditions`?{...e,label:r.label}:e);return zt(n)?i.filter(e=>e.key!==`devices`):i}function Wf(e){if(e.audio!==void 0)return z.t(`helpers.ruleFormTabs.condSound`);if(e.occupancy!==void 0)return z.t(`helpers.ruleFormTabs.condOccupancy`)}function Gf(e){let t=nn(e),n=Xt(df(e),t);return t===`sensor`&&e.conditions.sensorTransition!==void 0&&!nd(`sensorTransition`,e.conditions)?[...n,{conditionId:`sensorTransition`,reason:Mt}]:n}var Kf=`rule`;function qf(e){return Hf.find(t=>t.key===e)?.key}function Jf(e){return e?.toLowerCase().startsWith(`it`)===!0?`it`:`en`}function Yf(){let{i18n:e}=B(),t=Jf(e.language);return e=>At(e,t)}D();var Xf=`block text-[11px] font-medium text-foreground`,Zf=`text-[10px] text-foreground-subtle mt-0.5`;function Qf({cameras:e,fleet:t,value:n,onChange:r,emptyMeansAll:i=!1,savedHadDevices:a=!1}){return b(Yn,{devices:e,listState:t.state,fleet:t,value:n,onChange:r,emptyMeansAll:i,savedHadDevices:a})}function $f({value:e,placeholder:t,onChange:n}){let{t:r}=B(),[i,a]=C(``),s=()=>{let t=i.trim();if(t.length===0||e.includes(t)){a(``);return}n([...e,t]),a(``)},c=t=>n(e.filter(e=>e!==t));return o(`div`,{className:`mt-1 space-y-1.5`,children:[e.length>0&&b(`div`,{className:`flex flex-wrap gap-1`,children:e.map(e=>o(`span`,{className:`inline-flex items-center gap-1 rounded bg-surface-hover px-1.5 py-0.5 text-[11px] text-foreground`,children:[e,b(`button`,{type:`button`,onClick:()=>c(e),"aria-label":r(`system.notificationConditionWidgets.remove`,`remove {{v}}`,{v:e}),className:`text-foreground-subtle hover:text-danger`,children:b(Ae,{className:`h-3 w-3`})})]},e))}),b(R,{value:i,placeholder:t,onChange:e=>a(e.target.value),onKeyDown:e=>{e.key===`Enter`&&(e.preventDefault(),s())},onBlur:s})]})}function ep({picker:e,value:t,onChange:n}){let{t:r}=B(),i=p(()=>ct(e),[e]),a=p(()=>new Set(t),[t]),s=t.filter(e=>!i.has(e)),c=e=>{n(a.has(e)?t.filter(t=>t!==e):[...t,e])};return o(`div`,{className:`space-y-2`,children:[s.length>0&&b(`div`,{className:`flex flex-wrap gap-1`,children:s.map(e=>o(`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=>o(`div`,{children:[b(`div`,{className:`text-[10px] uppercase tracking-wide text-foreground-muted mb-1`,children:e.fallbackLabel}),b(`div`,{className:`flex flex-wrap gap-1`,children:e.options.map(e=>{let t=a.has(e.value);return b(`button`,{type:`button`,"aria-pressed":t,onClick:()=>c(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 tp({value:e,min:t,max:n,step:r,onChange:i}){let{t:a}=B();return o(`div`,{className:`mt-1 flex items-center gap-2`,children:[b(R,{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&&b(`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 np({value:e,onChange:t,options:n}){let{t:r}=B(),i=rp(n??[]),a=i.length>0?i:rd;return o(`div`,{className:`mt-1 space-y-1`,children:[b(Er,{value:e??`enter`,options:a.map(e=>({value:e.value,label:r(`notificationRules.crossing.${e.value}`,e.label)})),onChange:e=>t(ad(e.target.value))}),b(`p`,{className:Zf,children:r(`notificationRules.crossing.hint`,`Which way the subject crosses the zone.`)})]})}function rp(e){let t=[];for(let n of e){let e=n.value===``||n.value===`enter`?id:ad(n.value);e===void 0||t.some(t=>t.value===e)||t.push({value:e,label:n.label})}return t}function ip({deviceIds:e,cameras:t,value:n,onChange:r}){let{options:i,loading:a}=yu(e,t);return b(Cu,{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 ap({deviceIds:e,value:t,onChange:n}){let{t:r}=B(),{options:i,loading:a}=bu(e);return b(Cu,{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 op=[{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 sp(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:z.t(`system.notificationConditionWidgets.subTypeNeverCountsAlways`,`{{stored}} — sub-type, never counts (always 0)`,{stored:t})}]}function cp({deviceIds:e,cameras:t,classOptions:n,value:r,onChange:i}){let{t:a}=B(),{options:s,loading:c}=yu(e,t),l=r??Lt,u=e=>i({...l,...e}),d=l.op===`became-occupied`||l.op===`became-free`,f=sp(n,l.className);return o(`div`,{className:`mt-1 space-y-1.5`,children:[o(`div`,{className:`flex flex-wrap items-center gap-1.5`,children:[b(`div`,{className:`min-w-[10rem]`,children:b(Er,{value:l.zoneId??``,options:[{value:``,label:c?a(`system.notificationConditionWidgets.loadingZones`,`Loading zones…`):a(`system.notificationConditionWidgets.wholeFrame`,`— whole frame —`)},...s.map(e=>({value:e.value,label:e.label}))],onChange:e=>u({zoneId:e.target.value===``?void 0:e.target.value})})}),b(`div`,{className:`min-w-[9rem]`,children:b(Er,{value:l.className??``,options:[{value:``,label:a(`system.notificationConditionWidgets.anyClass`,`— any class —`)},...f],onChange:e=>u({className:e.target.value===``?void 0:e.target.value})})}),b(`div`,{className:`min-w-[9rem]`,children:b(Er,{value:l.op,options:op.map(e=>({value:e.value,label:a(e.labelKey)})),onChange:e=>{let t=op.find(t=>t.value===e.target.value);t&&u({op:t.value})}})})]}),o(`div`,{className:`flex flex-wrap items-center gap-3 text-xs text-foreground-subtle`,children:[o(`label`,{className:`flex items-center gap-1`,children:[d?a(`system.notificationConditionWidgets.threshold`,`Threshold`):a(`system.notificationConditionWidgets.count`,`Count`),b(R,{type:`number`,min:0,className:`w-16`,value:String(l.count),onChange:e=>u({count:Math.max(0,Number(e.target.value)||0)})})]}),o(`label`,{className:`flex items-center gap-1`,children:[a(`system.notificationConditionWidgets.holdFor`,`Hold for`),b(R,{type:`number`,min:0,max:3600,className:`w-16`,value:String(l.sustainSeconds),onChange:e=>u({sustainSeconds:Math.min(3600,Math.max(0,Number(e.target.value)||0))})}),`s`]}),r===void 0?null:b(`button`,{type:`button`,onClick:()=>i(void 0),className:`underline hover:text-foreground`,children:a(`system.notificationConditionWidgets.clear`,`Clear`)})]}),e.length===0&&b(`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.`)}),b(`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 lp=[{value:`label`,labelKey:`system.notificationConditionWidgets.audioModeLabel`,Icon:Ye},{value:`level`,labelKey:`system.notificationConditionWidgets.audioModeLevel`,Icon:We}];function up({taxonomy:e,value:t,onChange:n}){let{t:r}=B(),i=rn(t),a=e=>n(jt(t,e)),{choices:s,unknownLabels:c}=St(e,i.labels),l=Dt(t)??`label`;return o(`div`,{className:`mt-1 space-y-2`,children:[o(`div`,{className:`flex flex-wrap items-center gap-1`,children:[lp.map(e=>b(`button`,{type:`button`,"aria-pressed":l===e.value,onClick:()=>a({mode:e.value}),className:`rounded border px-2 py-0.5 text-[11px] ${l===e.value?`border-primary bg-primary/15 text-foreground`:`border-border text-foreground-subtle hover:bg-surface-hover`}`,children:o(`span`,{className:`inline-flex items-center gap-1`,children:[b(e.Icon,{className:`h-3 w-3`}),r(e.labelKey)]})},e.value)),t===void 0?null:b(`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`)})]}),l===`label`?o(P,{children:[b(`div`,{className:`flex flex-wrap gap-1`,children:s.map(e=>{let t=lt(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 b(`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:vt(i.labels,e.value)}),className:`rounded border px-1.5 py-0.5 text-[10px] ${n}`,children:o(`span`,{className:`inline-flex items-center gap-1`,children:[b(Gr,{iconId:e.iconId,size:12}),e.label]})},e.value)})}),c.length>0&&o(`p`,{className:`text-[10px] text-warning`,children:[r(`system.notificationConditionWidgets.keptFromTheRuleUnknown`,`Kept from the rule, unknown to this hub:`),` `,c.join(`, `)]}),o(`div`,{className:`flex flex-wrap items-center gap-3 text-xs text-foreground-subtle`,children:[o(`label`,{className:`flex items-center gap-1`,children:[r(`system.notificationConditionWidgets.confirmAfter`,`Confirm after`),b(R,{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`)]}),o(`label`,{className:`flex items-center gap-1`,children:[r(`system.notificationConditionWidgets.within`),b(R,{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`]})]}),b(`p`,{className:`text-[11px] text-foreground-subtle`,children:r(`system.notificationConditionWidgets.audioConfirmHint`,{hits:2,window:5})})]}):o(P,{children:[b(`div`,{className:`flex flex-wrap items-center gap-3 text-xs text-foreground-subtle`,children:o(`label`,{className:`flex items-center gap-1`,children:[r(`system.notificationConditionWidgets.louderThan`,`Louder than`),b(R,{type:`number`,min:Tt,max:0,step:3,className:`w-20`,value:String(i.dbThreshold??Et),onChange:e=>a({dbThreshold:Number(e.target.value)})}),`dBFS`]})}),o(`div`,{className:`flex flex-wrap items-center gap-3 text-xs text-foreground-subtle`,children:[o(`label`,{className:`flex items-center gap-1`,children:[r(`system.notificationConditionWidgets.hits`,`Hits`),b(R,{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:ht.hitPercent})]}),o(`label`,{className:`flex items-center gap-1`,children:[r(`system.notificationConditionWidgets.over`),b(R,{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:ht.samplingSeconds})]})]}),b(`p`,{className:`text-[11px] text-foreground-subtle`,children:r(`system.notificationConditionWidgets.dbfsHint`,{min:Tt})})]}),bt(t)?b(`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 dp({value:e,onChange:t}){let{t:n}=B(),r=e?.values??[],i=e?.maxDistance??1,a=e=>t(e.length>0?{values:e,maxDistance:i}:void 0),s=e=>t(r.length>0?{values:r,maxDistance:e}:void 0),c=Su().filter(e=>!r.includes(e));return o(`div`,{className:`mt-1 space-y-1.5`,children:[b($f,{value:r,placeholder:n(`system.notificationConditionWidgets.plateText`,`Plate text…`),onChange:a}),c.length>0&&o(`div`,{className:`flex flex-wrap items-center gap-1`,children:[b(`span`,{className:`text-[10px] text-foreground-subtle`,children:n(`system.notificationConditionWidgets.seen`,`Seen:`)}),c.slice(0,12).map(e=>b(`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))]}),o(`label`,{className:`flex items-center gap-2 text-[11px] text-foreground-subtle`,children:[n(`system.notificationConditionWidgets.maxDistance`,`Max distance`),b(R,{type:`number`,min:0,max:3,step:1,value:i,className:`max-w-[5rem]`,onChange:e=>{let t=Number(e.target.value);s(Number.isFinite(t)?Math.max(0,Math.min(3,t)):1)}})]})]})}function fp({gateable:e,value:t,onChange:n}){let{t:r}=B(),i=Yf(),a=e.find(e=>e.id===t?.deviceId),s=new Set(t?.states??[]),c=e=>{let t=Number(e);if(!Number.isFinite(t)||t===0)return n(void 0);n({deviceId:t,states:[]})},l=e=>{if(t===void 0)return;let r=new Set(s);r.has(e)?r.delete(e):r.add(e),n(r.size===0?void 0:{deviceId:t.deviceId,states:[...r]})};return o(`div`,{className:`mt-1 space-y-2`,children:[b(Er,{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=>c(e.target.value)}),a!==void 0&&b(`div`,{className:`flex flex-wrap gap-1.5`,children:a.states.map(e=>b(`button`,{type:`button`,onClick:()=>l(e),className:s.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&&b(`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&&b(`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 pp(e,t){let n=t(e.verdict);return e.latched?`${n} · ${t(`latched`)}`:n}function mp({scenes:e,value:t,onChange:n}){let{t:r}=B(),i=Yf(),a=e.find(e=>e.sceneId===t?.sceneId),s=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}})},c=e=>{t!==void 0&&n({...t,requiredState:e===`matched`?`matched`:`diverged`})},l=e=>{if(t!==void 0){if(e===``){let{latched:e,...r}=t;return n(r)}n({...t,latched:e===`latched`})}};return e.length===0?b(`p`,{className:Zf,children:r(`notificationRules.scene.none`,`No scenes yet — create one on the Scenes page.`)}):o(`div`,{className:`mt-1 space-y-2`,children:[b(Er,{value:t?.sceneId??``,options:[{value:``,label:r(`notificationRules.scene.noGate`,`— no scene gate —`)},...e.map(e=>({value:e.sceneId,label:`${e.cameraName} · ${e.label} — ${pp(e,i)}`}))],onChange:e=>s(e.target.value)}),t!==void 0&&o(`div`,{className:`flex flex-wrap items-center gap-2`,children:[o(`label`,{className:`flex items-center gap-2 text-[11px] text-foreground-subtle`,children:[r(`notificationRules.scene.onlyWhile`,`Only while it is`),b(Er,{value:t.requiredState,options:[{value:`diverged`,label:i(`diverged`)},{value:`matched`,label:i(`matched`)}],onChange:e=>c(e.target.value)})]}),o(`label`,{className:`flex items-center gap-2 text-[11px] text-foreground-subtle`,children:[r(`notificationRules.scene.read`,`Read`),b(Er,{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=>l(e.target.value)})]})]}),a!==void 0&&o(`p`,{className:`text-[10px] text-foreground-subtle mt-0.5`,children:[r(`notificationRules.scene.rightNow`,`Right now:`),` `,pp(a,i)]}),t!==void 0&&a===void 0&&b(`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 hp={days:[0,1,2,3,4,5,6],minute:480},gp=[{value:1,get label(){return z.t(`helpers.notificationSystemEventDelivery.wd_mon`)}},{value:2,get label(){return z.t(`helpers.notificationSystemEventDelivery.wd_tue`)}},{value:3,get label(){return z.t(`helpers.notificationSystemEventDelivery.wd_wed`)}},{value:4,get label(){return z.t(`helpers.notificationSystemEventDelivery.wd_thu`)}},{value:5,get label(){return z.t(`helpers.notificationSystemEventDelivery.wd_fri`)}},{value:6,get label(){return z.t(`helpers.notificationSystemEventDelivery.wd_sat`)}},{value:0,get label(){return z.t(`helpers.notificationSystemEventDelivery.wd_sun`)}}];function _p(e){let t=Math.floor(e/60),n=e%60;return`${String(t).padStart(2,`0`)}:${String(n).padStart(2,`0`)}`}function vp(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 yp(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 bp(e){let t=Object.entries(e).map(([e,t])=>`${e} ${String(t)}`);return t.length>0?z.t(`helpers.notificationSystemEventDelivery.dropped`,{parts:t.join(`, `)}):null}function xp(e,t,n,r=`rule`){if(e===`error`)return yp(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=bp(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 Sp(e,t){return{...e,schedule:t}}function Cp(e,t){let{split:n,...r}=e;return t===`section`?{...r,split:t}:r}function wp(e){return _p(e)}function Tp(e){return vp(e)}function Ep(){return{days:[1,2,3,4,5],startMinute:540,endMinute:1080}}function Dp(e){return{days:[...hp.days],minute:e}}var Op=`Always active — add a window to restrict when the rule fires.`;function kp({value:e,onChange:t,mode:n=`windows`,defaultMinute:r=hp.minute,emptyHint:i}){return n===`times`?b(jp,{value:e,onChange:t,defaultMinute:r}):b(Ap,{value:e,onChange:t,emptyHint:i??Op})}function Ap({value:e,onChange:t,emptyHint:n}){let{t:r}=B(),i=e?.windows??[],a=e?.invert??!1,s=(n,r)=>{if(n.length===0){t(void 0);return}t({windows:n,...r?{invert:!0}:{},...e?.timezone?{timezone:e.timezone}:{}})},c=()=>s([...i,Ep()],a),l=e=>s(i.filter((t,n)=>n!==e),a),u=(e,t)=>s(i.map((n,r)=>r===e?t:n),a);return o(`div`,{className:`mt-1 space-y-2`,"data-testid":`schedule-field-windows`,children:[i.length===0?b(`p`,{className:Zf,children:n}):i.map((e,t)=>b(Mp,{window:e,onChange:e=>u(t,e),onRemove:()=>l(t)},t)),o(`div`,{className:`flex items-center gap-3`,children:[o(`button`,{type:`button`,onClick:c,className:`flex items-center gap-1 rounded-md bg-surface-hover px-2 py-1 text-[11px] text-foreground-subtle hover:text-foreground`,children:[b(te,{className:`h-3 w-3`}),` `,r(`system.notificationScheduleField.addWindow`)]}),i.length>0&&o(`label`,{className:`flex items-center gap-1.5 text-[11px] text-foreground-subtle`,children:[b(`input`,{type:`checkbox`,checked:a,onChange:e=>s([...i],e.target.checked),className:`accent-primary`}),r(`system.notificationScheduleField.activeOutsideTheWindows`,`Active outside the windows`)]})]})]})}function jp({value:e,onChange:t,defaultMinute:n}){let{t:r}=B(),i=e?.timezone,a=e===void 0?{times:[],approximated:!1}:Vt(e);if(a===null)return o(`div`,{className:`mt-1 space-y-2`,"data-testid":`schedule-field-times-fallback`,children:[b(`p`,{className:Zf,children:r(`system.notificationScheduleField.invertedScheduleShownAsBands`,`Inverted schedule — shown as bands. Clear the invert flag (or the windows) to author punctual times.`)}),b(Ap,{value:e,onChange:t,emptyHint:Op})]});let s=a.times,c=e=>{if(e.length===0){t(void 0);return}t(st(e,i))};return o(`div`,{className:`mt-1 space-y-2`,"data-testid":`schedule-field-times`,children:[a.approximated&&b(`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.`)}),s.length===0?b(`p`,{className:Zf,children:r(`system.notificationScheduleField.noTimesYetAddOne`,`No times yet — add one to send on those days at that clock time.`)}):s.map((e,t)=>b(Np,{time:e,index:t,onChange:e=>c(s.map((n,r)=>r===t?e:n)),onRemove:s.length>1?()=>c(s.filter((e,n)=>n!==t)):void 0},t)),o(`button`,{type:`button`,onClick:()=>c([...s,Dp(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:[b(te,{className:`h-3 w-3`}),` `,r(`system.notificationScheduleField.addTime`)]})]})}function Mp({window:e,onChange:t,onRemove:n}){let{t:r}=B();return o(`div`,{className:`space-y-1.5 rounded-md border border-border p-2`,children:[o(`div`,{className:`flex items-center gap-2 text-xs`,children:[b(`input`,{type:`time`,value:wp(e.startMinute),onChange:n=>t({...e,startMinute:Tp(n.target.value)}),className:`rounded-md border border-border bg-background px-1 py-0.5`}),b(`span`,{className:`text-foreground-subtle`,children:`→`}),b(`input`,{type:`time`,value:wp(e.endMinute),onChange:n=>t({...e,endMinute:Tp(n.target.value)}),className:`rounded-md border border-border bg-background px-1 py-0.5`}),b(`span`,{className:`flex-1`}),b(`button`,{type:`button`,onClick:n,"aria-label":r(`system.notificationScheduleField.removeWindow`,`Remove window`),className:`text-foreground-subtle hover:text-danger`,children:b(ce,{className:`h-3.5 w-3.5`})})]}),b(Pp,{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 Np({time:e,index:t,onChange:n,onRemove:r}){let{t:i}=B();return o(`div`,{className:`space-y-1.5 rounded-md border border-border p-2`,children:[o(`div`,{className:`flex items-center gap-2 text-xs`,children:[b(`span`,{className:`text-foreground-subtle`,children:i(`system.notificationScheduleField.at`,`At`)}),b(`input`,{type:`time`,value:_p(e.minute),onChange:t=>n({...e,minute:vp(t.target.value)}),className:`rounded-md border border-border bg-background px-1 py-0.5`,"data-testid":`schedule-field-time-${String(t)}`}),b(`span`,{className:`flex-1`}),r!==void 0&&b(`button`,{type:`button`,onClick:r,"aria-label":i(`system.notificationScheduleField.removeTime`,`Remove time`),className:`text-foreground-subtle hover:text-danger`,children:b(ce,{className:`h-3.5 w-3.5`})})]}),b(Pp,{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 Pp({days:e,onToggle:t}){return b(`div`,{className:`flex flex-wrap gap-1`,children:gp.map(n=>b(`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 Fp(e){return e>=8}D();function Ip(e){if(typeof e!=`object`||!e)return;let t=Reflect.get(e,`windows`);if(!(!Array.isArray(t)||t.length===0))return e}function Lp(e){return e.type===`multiselect`}function Rp(e){let t=e.suggestions;return t===void 0||t.length===0?[]:t.map(e=>({value:e,label:e}))}function zp(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 Bp(e){return Array.isArray(e)?e.filter(e=>typeof e==`string`):[]}function Vp({field:e,values:t,onChange:n,onChangeMany:r,disabled:i,translationFn:a,onTestField:s,externalProbe:c,allFields:l,onAction:u}){let{t:d}=B();if(e.type===`tags`){if(!hr(e,t,l))return null;let r=e.creatable!==!1;return b(Fr,{mode:`multi`,options:Rp(e),value:Bp(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:Up(e.label,a),description:e.description===void 0?void 0:Up(e.description,a),placeholder:e.placeholder??d(`formBuilder.formBuilder.searchOrAdd`,`Search or add…`),testId:`config-tags-${e.key}`})}if(e.type===`schedule`){if(!hr(e,t,l))return null;let r=Up(e.label,a),i=e.description===void 0?void 0:Up(e.description,a),s=e.mode===`times`?`times`:`windows`;return o(`div`,{className:`space-y-1`,"data-testid":`config-schedule-${e.key}`,children:[r!==void 0&&b(`label`,{className:`block text-[11px] font-medium text-foreground-subtle`,children:r}),i!==void 0&&b(`p`,{className:`text-[10px] text-foreground-subtle`,children:i}),b(kp,{mode:s,value:Ip(t[e.key]),onChange:t=>n(e.key,t)})]})}return Lp(e)&&(Fp(e.options.length)||e.creatable===!0)?hr(e,t,l)?b(Fr,{mode:`multi`,options:zp(e.options),value:Bp(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:Up(e.label,a),description:e.description===void 0?void 0:Up(e.description,a),placeholder:e.placeholder??d(`formBuilder.formBuilder.searchToAdd`,`Search to add…`),testId:`config-multiselect-${e.key}`,listboxId:`msel-${e.key}`}):null:b(Jr,{field:e,values:t,onChange:n,onChangeMany:r,disabled:i,translationFn:a,onTestField:s,externalProbe:c,allFields:l,onAction:u})}function Hp(e){return/^[a-zA-Z0-9_]+(\.[a-zA-Z0-9_]+)+$/.test(e)}function Up(e,t){if(e!==void 0)return t&&Hp(e)?t(e):e}function Wp({section:e,values:t,onChange:n,onChangeMany:r,disabled:i,translationFn:a,onTestField:s,probeResults:c,onAction:l}){let[u,d]=C(e.defaultCollapsed??!1),f=e.style===`accordion`;if(e.fields.reduce((n,r)=>n+ +!!hr(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 o(`div`,{className:`@container rounded-lg border border-border bg-surface p-3`,style:{containerType:`inline-size`},"data-settings-section":e.id,children:[!_&&o(`div`,{className:[`flex items-center justify-between mb-2`,f?`cursor-pointer`:``].join(` `),onClick:f?()=>d(e=>!e):void 0,children:[o(`div`,{children:[e.title&&b(`h3`,{className:`text-[11px] font-semibold text-foreground-subtle uppercase tracking-wider`,children:Up(e.title,a)}),e.description&&b(`p`,{className:`text-[10px] text-foreground-subtle mt-0.5`,children:Up(e.description,a)})]}),f&&b(`span`,{className:`text-foreground-subtle text-xs ml-2`,children:u?`▸`:`▾`})]}),!(u&&!_)&&(g===void 0?b(P,{children:b(`div`,{className:`grid ${h} gap-x-3 gap-y-2.5`,children:p.map(o=>b(Vp,{field:o,values:t,onChange:n,onChangeMany:r,disabled:i,translationFn:a,onTestField:s,externalProbe:c?.[o.key],allFields:e.fields,onAction:l},o.key))})}):b(Jr,{field:g,values:t,onChange:n,onChangeMany:r,disabled:i,translationFn:a,onTestField:s,externalProbe:c?.[g.key],allFields:e.fields,onAction:l},g.key))]})}function Gp({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 b(`div`,{className:`space-y-4`,children:e.sections.map((e,t)=>b(Wp,{section:e,values:u,onChange:d,onChangeMany:f,disabled:r,translationFn:i,onTestField:a,probeResults:o,onAction:c},`${e.id}-${t}`))})}function Kp({pendingCount:e,onSave:t,onDiscard:n,saving:r=!1,saveLabel:i=`Save`,discardLabel:a=`Discard`}){let{t:s}=B();return e<=0?null:o(`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:[b(`span`,{className:`text-xs text-foreground`,children:s(`formBuilder.saveBar.unsavedChanges`,{count:e})}),o(`div`,{className:`flex items-center gap-2`,children:[b(`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}),b(`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?s(`formBuilder.formSaveBar.saving`,`Saving…`):i})]})]})}function qp({tabs:e,activeId:t,onChange:n,countByTab:r,pendingByTab:i}){return e.length===0?null:b(`div`,{className:`flex flex-wrap items-center gap-1 border-b border-border shrink-0`,children:e.map(e=>{let a=e.id===t,s=r?.get(e.id)??0,c=i?.get(e.id)??0;return o(`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,s>0&&o(`span`,{className:`ml-1.5 text-[10px] opacity-60`,children:[`(`,s,`)`]}),c>0&&b(`span`,{className:`ml-1.5 inline-flex h-1.5 w-1.5 rounded-full bg-primary`})]},e.id)})})}D();function Jp({schema:e,values:t,pendingKeys:n,onChange:r,onAction:i,onSave:a,onDiscard:s,disabled:c,activeSubTab:l,onSubTabChange:u,flattenTabs:d=!1,visibilityContext:m,hideSaveBar:h=!1}){let g=e.tabs??[],_=p(()=>{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]),v=new Set(g.map(e=>e.id)),y=[...g,...[..._.keys()].filter(e=>!v.has(e)).map(e=>({id:e,label:e,icon:`wrench`,order:100}))],x=y[0]?.id??`general`,[S,w]=C(x),T=u!==void 0,E=new Set(y.map(e=>e.id)),D=f(new Set);for(let e of E)D.current.add(e);let O=D.current,k=(e=>e&&(E.has(e)||O.has(e))?e:x)(T?l:S),A=e=>{T?u(e):w(e)},j=_.get(k)??[],M={sections:j.length<=1?j.length===1?[{...j[0],title:``}]:j:j.every(e=>!e.title)?[{...j[0],title:``,fields:j.flatMap(e=>e.fields)}]:j},N=h?null:b(Kp,{pendingCount:n.length,onSave:()=>a(n),onDiscard:()=>s(n),saving:c});if(d||y.length<=1)return o(`div`,{className:`flex flex-col gap-3`,children:[b(Gp,{schema:e,values:t,onChange:r,onAction:i,disabled:c,visibilityContext:m}),N]});let P=new Map,F=new Map;for(let[e,t]of _){P.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 o(`div`,{className:`flex flex-col gap-3`,children:[b(qp,{tabs:y.map(e=>({id:e.id,label:e.label})),activeId:k,onChange:A,countByTab:P,pendingByTab:F}),b(Sr,{tabKey:k,children:b(Gp,{schema:M,values:t,onChange:r,onAction:i,disabled:c,visibilityContext:m})}),N]})}var Yp=`device-export`,Xp=`export`,Zp=`Export`;function Qp(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(Qp):e.type===`sub-tabs`?e.tabs.some(e=>e.fields.some(Qp)):e.writerCapName===Yp}function $p(e){return e.tab===`export`?!0:e.fields.some(Qp)}var em=`host/extensions-panel`;function tm(e){return e.type===`widget`?e.widgetId===em:e.type===`group`?e.fields.some(tm):e.type===`sub-tabs`?e.tabs.some(e=>e.fields.some(tm)):!1}function nm(e){return e.fields.some(tm)}function rm(e,t){return!t&&e!==void 0&&_t.includes(e)}function im(e){return e.location!==`top-tab`&&e.location!==`hero`&&!$p(e)&&!nm(e)}function am(e,t,n,r){return!r||rm(t,n)?!0:(e??[]).some(im)}function om(e,t){for(let n of e){if(n.type===`group`){om(n.fields,t);continue}if(n.type===`sub-tabs`){for(let e of n.tabs)om(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 sm(e){let t={};for(let n of e)om(n.fields,t);return t}D();function cm(e,t){return t&&t===`admin`?e:!0}function lm(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?$p(e)&&$p(t)?e.id.localeCompare(t.id):(e.order??0)-(t.order??0):n.localeCompare(r)})};return e.tabs?{...t,tabs:e.tabs}:t}function um(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 dm(e){return e.key}function fm(e){if(!um(e))return e.value}function pm(e){return um(e)?null:e}function mm(e,t){for(let n of e)if(t(n),n.type===`group`)mm(n.fields,t);else if(n.type===`sub-tabs`)for(let e of n.tabs)mm(e.fields,t)}function hm(e){if(!e)return{};let t={};for(let n of e.sections)mm(n.fields,e=>{let n=dm(e);n!==null&&(t[n]=fm(e))});return t}function gm(e,t){if(!e)return null;let n=null;for(let r of e.sections)if(mm(r.fields,e=>{if(n!==null||dm(e)!==t)return;let r=pm(e);r&&r.writerCapName&&r.writerAddonId&&(n={capName:r.writerCapName,addonId:r.writerAddonId})}),n!==null)break;return n}function _m(e){return{...e,fields:e.fields.map(vm)}}function vm(e){return e.type===`separator`||e.type===`info`||e.type===`button`||e.type===`object-array`?e:{...e,readonlyField:!0}}function ym(e,t){return e&&{...e,sections:e.sections.map(e=>({...e,fields:e.fields.map(e=>{let n=pm(e);return n?cm(t,n.minRole)?e:vm(e):e})}))}}function bm({deviceId:e,sectionFilter:t,activeSubTab:n,onSubTabChange:r,flattenSubTabs:i,subTabGrouping:a}){let{t:s}=B(),c=M(),{user:l}=eu(),u=l?.isAdmin===!0,d=f(!1),{data:m,isLoading:h}=Qr({deviceId:e},{refetchInterval:()=>d.current?!1:2500,enabled:Number.isFinite(e)}),{data:g}=dr({deviceId:e},{enabled:Number.isFinite(e)}),_=m?.settings??null,v=m?.live??null,S=p(()=>{if(!_&&!v)return null;let e=_?.sections??[],n=(v?.sections??[]).map(_m),r=[...e,...n],i=t?r.filter(t):r.filter(im);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]),C=p(()=>sm([..._?.sections??[],...v?.sections??[]]),[_,v]),w=p(()=>lm(S),[S]),T=p(()=>ym(w,u),[w,u]),E=p(()=>hm(T),[T]),D=$r(),O=pr(),k=Ln(),A=Nn(),j=cr({onSuccess:()=>{c.invalidateQueries({queryKey:[[`deviceManager`,`getDeviceAggregate`]]})}}),N={isPending:j.isPending,mutate:t=>{j.mutate({deviceId:e,changes:[...t]})}},P=nu({schema:T,serverValues:E,onImmediateSave:y(e=>{let t=Object.entries(e).map(([e,t])=>{let n=gm(T,e);return n?{writerCapName:n.capName,writerAddonId:n.addonId,key:e,value:t}:null}).filter(e=>e!==null);t.length>0&&N.mutate(t)},[T,N]),onDeferredSave:y(async t=>{let n=Object.entries(t).map(([e,t])=>{let n=gm(T,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 j.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`]]})}},[T,j,e,c])}),{values:F,pendingKeys:ee,handleChange:te,handleSave:ne,handleDiscard:re}=P;d.current=P.editingPaused;let ie=Nc(),ae=f(ne),oe=f(re);ae.current=ne,oe.current=re;let se=ie?.register,ce=j.isError?j.error instanceof Error?j.error.message:String(j.error):null,le=ee.join(`\0`);if(x(()=>{if(se===void 0)return;let e=le===``?[]:le.split(`\0`);return se({id:`export`,dirty:e.length>0,saving:j.isPending,error:ce,save:()=>(ae.current(e),Promise.resolve()),discard:()=>oe.current(e)})},[se,le,j.isPending,ce]),h)return o(`div`,{className:`flex items-center justify-center py-12 text-foreground-subtle`,children:[b($e,{className:`h-4 w-4 animate-spin mr-2`}),b(`span`,{className:`text-xs`,children:s(`device.deviceAggregateSection.loadingDeviceAggregate`,`Loading device aggregate…`)})]});if(!T||T.sections.length===0)return b(`div`,{className:`text-xs text-foreground-subtle italic py-4 text-center`,children:s(`device.deviceAggregateSection.noAggregateContributionsForThis`,`No aggregate contributions for this device.`)});async function I(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=Ht(e,r);await D.mutateAsync({brokerId:i}),c.invalidateQueries({queryKey:[[`deviceManager`,`getDeviceAggregate`]]});return}if(t===`test-probe`){if(!g)return{status:`error`,error:s(`device.deviceAggregateSection.metadataNotLoaded`)};try{return await k.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=Ht(e,t),i=await O.mutateAsync({brokerId:r});return c.invalidateQueries({queryKey:[[`deviceManager`,`getDeviceAggregate`]]}),i}if(t===`device-custom-action`){let t=await A.mutateAsync({deviceId:e,action:n,input:r});return c.invalidateQueries({queryKey:[[`deviceManager`,`getDeviceAggregate`]]}),t}throw Error(`[device-aggregate] unknown action "${t}"`)}return b(Jp,{schema:T,values:F,pendingKeys:ee,onChange:te,onAction:I,onSave:ne,onDiscard:re,hideSaveBar:ie!==null,disabled:N.isPending,activeSubTab:n,onSubTabChange:r,flattenTabs:i,visibilityContext:C})}D();function xm({deviceId:e,onClose:t}){let{t:n}=B(),[r,i]=C(`info`),{data:a}=dr({deviceId:e},{enabled:e>0}),s=Br(e),c=$s(s.presence,s.list),l=r===`history`&&!c?`info`:r,u=typeof a?.name==`string`?a.name:``,d=Pn(e,`full`,u.length>0?u:`#${String(e)}`),f=typeof a?.location==`string`?a.location:``,p=[[`info`,n(`deviceQuickDetail.tabInfo`,{defaultValue:`Device info`})],[`export`,n(`deviceQuickDetail.tabExport`,{defaultValue:`Export`})],...c?[[`history`,n(`deviceQuickDetail.tabHistory`,{defaultValue:`History`})]]:[]];return b(_r,{open:!0,onOpenChange:e=>!e&&t(),children:b(Vr,{width:`lg`,scroll:`body`,children:o(Pc,{deviceId:e,seed:a==null?null:{name:u,location:f,role:typeof a.role==`string`?a.role:null,display:a.display},showOpenFull:!0,onClose:t,children:[b(xr,{children:b(fr,{children:d})}),b(`div`,{className:`mt-3 flex items-center gap-1 rounded-md bg-surface-hover p-0.5 w-fit`,children:p.map(([e,t])=>b(`button`,{type:`button`,onClick:()=>i(e),className:`px-2.5 py-1 rounded text-[11px] font-medium transition-colors ${l===e?`bg-surface text-foreground shadow-sm`:`text-foreground-subtle hover:text-foreground`}`,children:t},e))}),b(yr,{className:`mt-3`,children:o(Bn,{deviceId:e,device:a??void 0,children:[b(`div`,{className:l===`info`?void 0:`hidden`,children:b(yc,{})}),b(`div`,{className:l===`export`?void 0:`hidden`,children:b(bm,{deviceId:e,sectionFilter:$p})}),c?b(`div`,{className:l===`history`?void 0:`hidden`,children:b(Qs,{deviceId:e})}):null]})})]})})})}function Sm({children:e}){let[t,n]=C(null),r=y(e=>n(e),[]),i=y(()=>n(null),[]);return o(Fn,{open:r,children:[e,t===null?null:b(xm,{deviceId:t,onClose:i})]})}D();function Cm({tabs:e,active:t,onChange:n}){return b(`div`,{className:`flex rounded-lg border border-border bg-surface p-0.5 gap-0.5`,children:e.map(e=>b(`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 wm(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 Tm(e){return`${e.inputSize.width}x${e.inputSize.height}`}function Em(e){return e.formats?Object.keys(e.formats).filter(t=>e.formats[t]!==void 0):[]}function Dm({entry:e,selected:t,onSelect:n,disabled:r}){let{t:i}=B(),a=wm(e),s=Tm(e),c=Em(e);return o(`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:[b(`div`,{className:`flex items-start justify-between gap-2`,children:o(`div`,{className:`flex-1 min-w-0`,children:[o(`div`,{className:`flex items-center gap-2`,children:[b(`span`,{className:`text-xs font-semibold text-foreground truncate`,children:e.name}),t&&b(ie,{className:`h-3.5 w-3.5 text-primary shrink-0`})]}),b(`p`,{className:`text-[10px] text-foreground-subtle mt-0.5 line-clamp-2`,children:e.description})]})}),o(`div`,{className:`flex items-center gap-3 mt-2 flex-wrap`,children:[o(`span`,{className:`inline-flex items-center gap-1 text-[10px] text-foreground-subtle`,children:[b(we,{className:`h-3 w-3`}),s]}),a&&b(`span`,{className:`text-[10px] text-foreground-subtle`,children:a}),c.length>0&&b(`div`,{className:`flex gap-1`,children:c.map(e=>b(`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&&b(`span`,{className:`text-[10px] text-foreground-subtle`,children:i(`common.labels`,{count:e.labels.length})})]})]})}function Om({field:e,value:t,onChange:n,disabled:r}){let{t:i}=B(),a=e.catalog??[],s=a.length>0,c=Gt(a).length>0,l=e.allowCustomPath!==!1||e.allowCustom===!0,u=[...s?[{id:`catalog`,label:i(`formBuilder.modelSelector.models`,`Models ({{length}})`,{length:a.length})}]:[],...l?[{id:`custom`,label:i(`formBuilder.modelSelector.customPath`,`Custom Path`)}]:[]],[d,f]=C(s?`catalog`:`custom`),p=t==null?``:String(t);return o(`div`,{className:`space-y-3`,children:[u.length>1&&b(Cm,{tabs:u,active:d,onChange:f}),d===`catalog`&&s&&c&&b(Lr,{catalog:a,value:p,onChange:e=>n(e),disabled:r||e.disabled}),d===`catalog`&&s&&!c&&b(`div`,{className:`space-y-1.5 max-h-[320px] overflow-y-auto pr-1`,children:a.filter(e=>e.legacy!==!0).map(t=>b(Dm,{entry:t,selected:p===t.id,onSelect:()=>n(t.id),disabled:r||e.disabled},t.id))}),d===`catalog`&&!s&&o(`div`,{className:`rounded-md border border-info/30 bg-info/5 px-3 py-2 flex items-start gap-2`,children:[b(Fe,{className:`h-3.5 w-3.5 text-info shrink-0 mt-0.5`}),b(`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.`)})]}),d===`custom`&&l&&o(`div`,{className:`space-y-2`,children:[b(`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&&o(`p`,{className:`text-[10px] text-foreground-subtle`,children:[i(`formBuilder.modelSelector.acceptedFormats`,`Accepted formats:`),` `,e.acceptFormats.join(`, `)]})]}),(e.compatibilityNote||e.conversionGuideUrl)&&o(`div`,{className:`flex items-start justify-between gap-3 pt-1`,children:[e.compatibilityNote&&o(`p`,{className:`flex items-start gap-1 text-[10px] text-foreground-subtle`,children:[b(Fe,{className:`h-3 w-3 mt-0.5 shrink-0`}),e.compatibilityNote]}),e.conversionGuideUrl&&o(`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`),b(ve,{className:`h-3 w-3`})]})]})]})}function km({to:e}){let{search:t}=K();return b(J,{to:`${e}${t}`,replace:!0})}D();function Am(){return z.t(`helpers.keychainRevealHost.forbidden`)}function jm(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 Mm(e){let t=jm(e);if(t===`FORBIDDEN`||t===`UNAUTHORIZED`)return Am();let n=e instanceof Error?e.message:String(e);return n.length>0?z.t(`helpers.keychainRevealHost.failedWith`,{message:n}):z.t(`helpers.keychainRevealHost.failed`)}function Nm({children:e}){let t=qn();return b(Wr,{reveal:y(async e=>{try{return(await t.mutateAsync({ref:e})).value}catch(e){throw Error(Mm(e))}},[t]),children:e})}D();function Pm(){let e=qe(),t=M(),[n,r]=C(()=>e.isConnected()?`connected`:`disconnected`),i=f(!1),[a,o]=C(0),[s,c]=C([]);x(()=>e.subscribeConnectionEvents(e=>{r(t=>(t!==`connected`&&e===`connected`&&i.current&&o(e=>e+1),e!==`connected`&&(i.current=!0),e))}),[e]),x(()=>{a!==0&&t.invalidateQueries({queryKey:[[`addons`,`getLastRestart`]]})},[a,t]);let{data:l}=$n(void 0,{enabled:n===`connected`&&a>0,staleTime:0,refetchOnMount:!1,refetchOnWindowFocus:!1}),u=f(null);return x(()=>{if(l==null||l.requestedAt===u.current)return;u.current=l.requestedAt;let e=Im(l);c(t=>[...t,e]);let t=window.setTimeout(()=>{c(t=>t.filter(t=>t.id!==e.id))},6e3);return()=>window.clearTimeout(t)},[l]),b(P,{children:s.length>0&&b(Fm,{toasts:s})})}function Fm({toasts:e}){return b(`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=>o(`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:[b(He,{className:`w-4 h-4 shrink-0 mt-0.5 text-green-400`}),o(`div`,{children:[b(`div`,{className:`text-[11px] font-semibold text-foreground`,children:e.title}),b(`div`,{className:`text-[10px] text-foreground-subtle mt-0.5`,children:e.message})]})]},e.id))})}function Im(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:z.t(`system.reconnectOverlay.frameworkUpdated`,`Framework updated`),message:z.t(`system.reconnectOverlay.isNow`,`{{packageName}} is now {{fromTo}}.`,{packageName:e.packageName,fromTo:n})}}return{id:t,title:z.t(`system.reconnectOverlay.serverRestarted`,`Server restarted`),message:e.requestedBy===void 0?z.t(`system.reconnectOverlay.manualRestartCompleted`,`Manual restart completed.`):z.t(`system.reconnectOverlay.manualRestartByCompleted`,`Manual restart by {{requestedBy}} completed.`,{requestedBy:e.requestedBy})}}var Lm=`/system/settings`,Rm=[{path:`/system/secrets`,tab:`secrets`},{path:`/system/capabilities`,tab:`capabilities`}];function zm(e,t=``){let n=new URLSearchParams(t);return n.delete(`tab`),n.set(`tab`,e),`${Lm}?${n.toString()}`}function Bm({tab:e}){let{search:t,hash:n}=K();return b(J,{to:`${zm(e,t)}${n}`,replace:!0})}D();var Vm={info:{bg:`bg-info/10`,border:`border-info/30`,icon:Fe},warning:{bg:`bg-warning/10`,border:`border-warning/30`,icon:fe},critical:{bg:`bg-danger/10`,border:`border-danger/30`,icon:Pe}};function Hm({toast:e,onDismiss:t}){let n=Vm[e.severity]??Vm.info,r=n.icon;return x(()=>{let n=e.duration??5e3;if(n<=0)return;let r=setTimeout(()=>t(e.id),n);return()=>clearTimeout(r)},[e.id,e.duration,t]),o(`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:[b(r,{className:`h-4 w-4 shrink-0 mt-0.5 text-foreground-subtle`}),o(`div`,{className:`flex-1 min-w-0`,children:[b(`div`,{className:`text-xs font-semibold text-foreground`,children:e.title}),b(`div`,{className:`text-[11px] text-foreground-subtle mt-0.5`,children:e.message})]}),b(`button`,{type:`button`,onClick:()=>t(e.id),className:`shrink-0 p-0.5 rounded hover:bg-surface-hover transition-colors`,children:b(Ae,{className:`h-3.5 w-3.5 text-foreground-subtle`})})]})}function Um(){let[e,t]=C([]),n=y(e=>{t(t=>t.filter(t=>t.id!==e))},[]);return wn(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:b(`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=>b(`div`,{className:`pointer-events-auto`,children:b(Hm,{toast:e,onDismiss:n})},e.id))})}function Wm(e){return(t,n,r)=>e(t,{...typeof n==`string`?{defaultValue:n}:{defaultValue_one:n.one,defaultValue_other:n.other},...r})}var Gm=(e,t,n)=>Wm(z.t.bind(z))(e,t,n);D();function Km({children:e}){let{t}=B();return b(Le,{t:p(()=>Wm(t),[t]),children:e})}D();function qm(e){if(typeof e!=`object`||!e)return;let{data:t}=e;return t?.code}function Jm(e,t){let n=qm(e);return n===`UNAUTHORIZED`||n===`FORBIDDEN`?!0:/UNAUTHORIZED|FORBIDDEN/.test(t)}function Ym(e,t,n,r){let[i,a]=C(!1),[o,s]=C(null);return x(()=>{if(a(!1),s(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 c=e instanceof Error?e.message:String(e);if(Jm(e,c)){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`,c),n();return}s(c),a(!0)})};return o(!0),()=>{i=!0}},[e,t,n,r]),{bootReady:i,bootError:o}}D();var Xm=3e4;function Zm(e){let t=f(e);t.current=e,x(()=>{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>=Xm&&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)}},[])}D();function Qm(){let{t:e}=B();return o(`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:[b(Wn,{className:`h-7 w-48`}),b(Wn,{className:`h-5 w-72 max-w-full`}),b(Wn,{className:`h-40`})]})}function $m({message:e}){let{t}=B();return b(`div`,{className:`p-2 sm:p-4`,"data-testid":`addon-page-error`,children:b(er,{title:t(`layouts.addonPageLoader.failedTitle`,`This page could not be shown`),message:e})})}var eh=class extends c{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:b($m,{message:this.state.error.message})}};function th({pageKey:e,children:t}){return b(eh,{resetKey:e,children:b(v,{fallback:b(Qm,{}),children:t})})}D();function nh(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 rh=new Map,ih=new Map,ah=new Set;function oh(e){return!e||typeof e!=`object`?!1:typeof e.default==`function`}async function sh(e,t){let i=rh.get(e);if(i)return i;let a=ih.get(e);if(a)return a;ah.has(e)||(On(),r([{name:e,entry:L(t),type:`module`}],{force:!1}),ah.add(e));let o=n(`${e}/page`).then(n=>{if(!oh(n))throw Error(`Addon page remote ${e} (${t}) does not expose a default React component on './page'`);return rh.set(e,n.default),ih.delete(e),n.default}).catch(t=>{throw ih.delete(e),t});return ih.set(e,o),o}function ch(){let{t:e}=B(),{pagePath:t}=Ga(),n=q(),r=qe(),{data:i}=jr(void 0),a=p(()=>i?nh(i):void 0,[i]),o=a?.find(e=>e.path===`/addon/${t}`),s=o?.remoteName,c=o?.bundleUrl,[l,u]=C(null),[d,f]=C(null);return x(()=>{if(!s||!c)return;f(null);let e=rh.get(s);if(e){u(()=>e);return}u(null);let t=!1;return sh(s,c).then(e=>{t||u(()=>e)}).catch(e=>{t||f(e instanceof Error?e.message:String(e))}),()=>{t=!0}},[s,c]),a?o?d?b($m,{message:d}):l?b(th,{pageKey:o.remoteName,children:b(l,{trpc:r.trpcClient,theme:{isDark:document.documentElement.classList.contains(`dark`)},navigate:e=>{n(e.startsWith(`/`)?e:`/${e}`)}})}):b(Qm,{}):b(`div`,{className:`flex items-center justify-center h-full text-foreground-subtle`,children:e(`layouts.addonPageLoader.addonPageNotFound`,`Addon page not found`)}):b(Qm,{})}function lh({children:e}){return b(Ar,{value:uh(Jn({})),children:e})}function uh(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 dh(){let e=gr(),{t}=B();return e.status===`unknown`?b(`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}ci();var fh=/\p{Mn}/gu;function ph(e){return e.normalize(`NFD`).replace(fh,``).toLowerCase().trim()}var mh=[`device`,`page`,`integration`],hh=0,gh=1,_h=2,vh=3,yh=4,bh=5,xh=6,Sh=7;function Ch(e,t,n,r){return n.includes(r)?hh:e===r?gh:e.startsWith(r)?_h:e.split(/\s+/).some(e=>e.startsWith(r))?vh:e.includes(r)?yh:t.some(e=>e.includes(r))?bh:null}function wh(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 Th(e){return e<4?0:e<=7?1:e<=12?2:3}function Eh(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 Dh(e,t){if(wh(e,t))return xh;let n=Th(t.length);if(n>0){for(let r of e.split(/\s+/))if(Eh(r,t,n)!==null)return Sh}return null}function Oh(e,t,n=200){let r=ph(t);if(r.length===0)return{groups:[],totalMatched:0,truncated:!1};let i=new Map;for(let t of e){let e=ph(t.label),n=Ch(e,(t.keywords??[]).map(ph),(t.identifiers??[]).map(ph),r)??Dh(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 mh){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 kh(e){return e.flatMap(e=>e.items)}function Ah(e,t){return e.filter(e=>!e.adminOnly||t)}function jh({t:e,isAdmin:t}){let n=Ah([{label:e(`nav.devices`,`Devices`),icon:ue,path:`/devices`},{label:e(`nav.integrations`),icon:Be,path:`/integrations`},{label:e(`nav.build`,`Build-your-self`),icon:_e,path:`/build`,adminOnly:!0},{label:e(`nav.locations`,`Locations`),icon:Ge,path:`/locations`,adminOnly:!0},{label:e(`nav.viewer`,`Viewer`),icon:an,path:`/live`}],t),r=Ah([{label:e(`nav.library`,`Library`),icon:on,path:`/library`,adminOnly:!0,keywords:[`People`,`Vehicles`,`Events`,`Scenes`,`plates`,`faces`,`detection-intelligence`]},{label:e(`nav.recordings`,`Recordings`),icon:se,path:`/recordings`,adminOnly:!0}],t),i=Ah([{label:e(`nav.nodes`,`Nodes`),icon:ne,path:`/system/nodes`,adminOnly:!0},{label:e(`nav.history`,`History`),icon:tt,path:`/system/history`,adminOnly:!0,keywords:[`charts`,`graphs`,`energy`,`temperature`,`metrics`,`trends`]},{label:e(`nav.pipeline`,`Pipeline`),icon:yn,path:`/system/pipeline`},{label:e(`system.addons`),icon:oe,path:`/system/addons`,adminOnly:!0},{label:e(`system.ai`,`AI`),icon:pe,path:`/system/ai`,adminOnly:!0}],t),a=Ah([{label:e(`system.identity`,`Identity & Access`),icon:Re,path:`/system/identity`,adminOnly:!0},{label:e(`system.network`,`Network`),icon:dn,path:`/system/network`,adminOnly:!0},{label:e(`system.integrations`,`Connectivity`),icon:Be,path:`/system/integrations`,adminOnly:!0},{label:e(`system.data`,`Data`),icon:be,path:`/system/data`,adminOnly:!0},{label:e(`system.notifications`,`Notifications`),icon:me,path:`/system/notifications`,adminOnly:!0},{label:e(`system.calendars`,`Calendars`),icon:ln,path:`/system/calendars`,adminOnly:!0},{label:e(`system.systemNav`,`System`),icon:ke,path:Lm,adminOnly:!0},{label:e(`system.logs`,`Logs`),icon:Ue,path:`/system/logs`,adminOnly:!0},{label:e(`system.terminal`,`Terminal`),icon:pn,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 Mh={gauge:Ve,puzzle:oe,bot:I,cpu:we,terminal:pn,box:le,boxes:le,monitor:an,wrench:Ne,activity:We,plug:Be,"graduation-cap":de};function Nh(e){return Mh[e]??oe}function Ph(e,t){for(let n of jh(t))for(let t of n.items)if(t.path===e)return{icon:t.icon,title:t.label,path:t.path};return null}var Fh=` · `;function Ih(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(Fh)}function Lh(e,t=null){let n=rr(e),r=Zn(z.language.startsWith(`it`)?`it`:`en`),i=Cn(e),a=Sn(t);return e.map(e=>{let t=String(e.id),o=Kn(e,`compact`,i,r),s=o.length>0?o:e.stableId||`#${t}`,c=n.get(e.id),l=c!==void 0&&(s===c||s.split(Fh).includes(c)),u=a(e),d=u.kind===`resolved`?u.integration.name:``;return{key:`device:${t}`,domain:`device`,label:s,subtitle:Ih(e,t,s,l?void 0:c),identifiers:[t,`#${t}`],keywords:[...e.name.length>0&&e.name!==s?[e.name]:[],e.stableId,e.addonId,e.location??``,c??``,d].filter(e=>e.length>0),path:`/devices/${t}`,icon:Tn(e.type).icon}})}function Rh(e){return e.map(e=>({key:`integration:${e.id}`,domain:`integration`,label:e.name||e.addonId,subtitle:e.enabled?e.addonId:z.t(`helpers.searchItems.disabled`,{addonId:e.addonId}),keywords:[e.addonId,e.processState],path:`/integrations/${e.id}`}))}function zh(e,t,n){let r=e.section?.trim();return r?t[r]??e.sectionLabel?.trim()??r:n}function Bh(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:zh(e,i,n.ungrouped),keywords:[e.addonId],path:e.path,icon:Nh(e.icon)}));return[...r,...a]}D();var Vh={device:{labelKey:`search.resultsList.devices`,icon:ue},page:{labelKey:`search.resultsList.pages`,icon:cn},integration:{labelKey:`search.resultsList.integrations`,icon:Be}};function Hh({groups:e,activeKey:t,query:n,totalMatched:r,truncated:i,onSelect:a,onHover:s}){let{t:c}=B(),l=f(null);if(x(()=>{t&&(l.current?.querySelector(`[data-key="${CSS.escape(t)}"]`))?.scrollIntoView({block:`nearest`})},[t]),n.trim().length===0)return null;if(e.length===0)return b(`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 o(P,{children:[b(`div`,{ref:l,role:`listbox`,className:`max-h-[60vh] overflow-y-auto py-1`,children:e.map(e=>{let n=Vh[e.domain],r=n.icon;return o(`div`,{className:`px-1 py-1`,children:[o(`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:[b(r,{className:`h-3 w-3`}),c(n.labelKey)]}),e.items.map(e=>{let r=e.icon??n.icon,i=e.key===t;return o(`button`,{type:`button`,role:`option`,"aria-selected":i,"data-key":e.key,onMouseEnter:()=>s(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:[b(r,{className:`h-3.5 w-3.5 shrink-0 ${i?`text-primary`:`text-foreground-subtle`}`}),o(`span`,{className:`flex-1 min-w-0`,children:[b(`span`,{className:`block truncate font-medium`,children:e.label}),e.subtitle&&b(`span`,{className:`block truncate text-[10px] text-foreground-subtle`,children:e.subtitle})]})]},e.key)})]},e.domain)})}),i&&b(`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})})]})}D();function Uh({navSections:e,addonPages:t,compact:n,onNavigated:r}){let{t:i}=B(),a=q(),s=f(null),c=f(null),l=f(null),[u,d]=C(null),[m,h]=C(``),[g,_]=C(0),[v,S]=C(!1),{data:w}=ei({projection:`slim`}),{data:T}=ai(void 0),E=p(()=>{let n={detection:i(`nav.detectionSection`,`Detection`),cluster:i(`nav.clusterSection`,`Cluster`),administration:i(`system.title`,`Administration`),ungrouped:i(`nav.addonPages`,`Addon Pages`)};return[...Lh(w??[],T??null),...Bh(e,t,n),...Rh(T??[])]},[w,T,e,t,i]),{groups:D,totalMatched:O,truncated:k}=p(()=>Oh(E,m),[E,m]),A=p(()=>kh(D),[D]);x(()=>{_(0)},[m,E]),x(()=>{v&&s.current?.focus()},[v]);let j=y(()=>{S(!1),h(``),_(0)},[]),M=y(e=>{a(e.path),j(),s.current?.blur(),r?.()},[a,j,r]);x(()=>{function e(e){(e.metaKey||e.ctrlKey)&&e.key.toLowerCase()===`k`&&(e.preventDefault(),S(!0))}return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[]),x(()=>{if(!v)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&&S(!1)}return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[v]);let N=v&&m.trim().length>0;x(()=>{if(!N){d(null);return}let e=()=>{let e=s.current?.getBoundingClientRect();e&&d({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)}},[N]);let P=A[g]?.key??null,F=i(`search.placeholder`,`Search devices, pages, integrations…`),ee=o(`div`,{className:`relative`,children:[b(Ye,{className:`pointer-events-none absolute left-2 top-1/2 h-3.5 w-3.5 -translate-y-1/2 text-foreground-subtle`}),b(`input`,{ref:s,type:`text`,value:m,placeholder:F,"aria-label":F,role:`combobox`,"aria-expanded":v&&m.trim().length>0,"aria-controls":`global-search-results`,onChange:e=>{h(e.target.value),S(!0)},onFocus:()=>S(!0),onKeyDown:e=>{if(e.key===`ArrowDown`)e.preventDefault(),A.length>0&&_(e=>(e+1)%A.length);else if(e.key===`ArrowUp`)e.preventDefault(),A.length>0&&_(e=>(e-1+A.length)%A.length);else if(e.key===`Enter`){e.preventDefault();let t=A[g];t&&M(t)}else e.key===`Escape`&&(e.preventDefault(),j(),s.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`}),m.length>0&&b(`button`,{type:`button`,"aria-label":i(`search.globalSearch.clearSearch`,`Clear search`),onClick:()=>{h(``),s.current?.focus()},className:`absolute right-1.5 top-1/2 -translate-y-1/2 text-foreground-subtle hover:text-foreground`,children:b(Ae,{className:`h-3 w-3`})}),N&&u!==null&&li(b(`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:b(Hh,{groups:D,activeKey:P,query:m,totalMatched:O,truncated:k,onSelect:M,onHover:e=>{let t=A.findIndex(t=>t.key===e.key);t>=0&&_(t)}})}),document.body)]});return n?b(`div`,{ref:c,className:`px-1.5 pb-1.5`,children:v?b(`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:ee}):b(`button`,{type:`button`,onClick:()=>S(!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:b(Ye,{className:`h-3.5 w-3.5 shrink-0`})})}):b(`div`,{ref:c,className:`px-2 pb-2`,children:ee})}var Wh=/^(\d{1,3}\.){3}\d{1,3}$/;function Gh(e){let t=e.startsWith(`[`)&&e.endsWith(`]`)?e.slice(1,-1):e;return!!(Wh.test(t)||t.includes(`:`))}function Kh(e,t){return!t||Gh(e)?!1:e===t||e.endsWith(`.${t}`)}D();var qh=`auth-webauthn/passkey-enrollment`,Jh=`camstack_passkey_prompt_dismissed:`,Yh=720*60*60*1e3;function Xh(e){try{let t=localStorage.getItem(`${Jh}${e}`);if(!t)return!1;let n=Number(t);return Number.isFinite(n)?Date.now()-n<Yh:!1}catch{return!1}}function Zh(e){try{localStorage.setItem(`${Jh}${e}`,String(Date.now()))}catch{}}function Qh(){let{user:e}=eu(),{t}=B(),n=qe(),r=ar(qh),[i,a]=C(!1),[s,c]=C(!1),l=p(()=>e?Xh(e.id):!0,[e]),u=xn.auth.listLoginMethods.useQuery().data?.find(e=>e.kind===`passkey`),d=u!==void 0&&Kh(window.location.hostname,u.rpId),f=e!==null&&d&&r!=null&&!l,m=T({queryKey:[`auth`,`listOwnPasskeys`],queryFn:()=>n.listOwnPasskeys(),enabled:f,staleTime:6e4}),h=y(()=>{e&&Zh(e.id),a(!0),c(!1)},[e]),g=y(()=>{c(!1),m.refetch()},[m]);return!f||i||m.data===void 0||m.data.length>0?null:o(`div`,{className:`shrink-0 border-b border-primary/20 bg-primary/5`,children:[o(`div`,{className:`flex items-center gap-2.5 px-3 py-2 text-xs text-foreground`,children:[b(sn,{className:`h-4 w-4 text-primary shrink-0`}),b(`span`,{className:`flex-1 min-w-0`,children:t(`passkeyPrompt.message`,`Save a passkey for faster sign-in?`)}),b(`button`,{onClick:()=>c(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`)}),b(`button`,{onClick:h,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`)}),b(`button`,{onClick:h,"aria-label":t(`passkeyPrompt.notNow`,`Not now`),className:`p-1 rounded text-foreground-subtle hover:text-foreground`,children:b(Ae,{className:`h-3.5 w-3.5`})})]}),s&&b(`div`,{className:`px-3 pb-3`,children:o(`div`,{className:`max-w-xl`,children:[b(Xr,{widgetId:qh,host:`dashboard`}),b(`div`,{className:`mt-2 flex justify-end`,children:b(`button`,{onClick:g,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 $h=6e4;function eg(){let e=En(void 0,{staleTime:$h});return{info:e.data?.serverName??null,isLoading:e.isLoading}}D();var tg=`system-config`,ng=`hub`,rg=`camstack_server_name_prompt_dismissed`;function ig(){try{return sessionStorage.getItem(rg)===`1`}catch{return!1}}function ag(){try{sessionStorage.setItem(rg,`1`)}catch{}}function og(e){return e.isAdmin&&e.info!==null&&e.info.isDefault&&!e.dismissed}function sg(){let{user:e}=eu(),{info:t}=eg(),[n,r]=C(ig);return og({isAdmin:e?.isAdmin===!0,info:t,dismissed:n})?b(cg,{suggestion:t?.name??``,onLater:()=>{ag(),r(!0)}}):null}function cg({suggestion:e,onLater:t}){let{t:n}=B(),r=M(),i=ii(),[a,s]=C(e),[c,l]=C(null),u=f(null);x(()=>u.current?.focus(),[]);let d=y(async()=>{let e=Nt.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:tg,nodeId:ng,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 b(_r,{open:!0,onOpenChange:e=>!e&&t(),children:b(Vr,{children:o(`form`,{onSubmit:e=>{e.preventDefault(),i.isPending||d()},children:[o(xr,{children:[b(fr,{children:n(`serverName.title`,`Name this server`)}),b(Nr,{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.`)})]}),b(yr,{children:b(ti,{label:n(`serverName.label`,`Server name`),...c===null?{}:{error:c},children:b(R,{ref:u,value:a,maxLength:48,onChange:e=>s(e.target.value),state:c===null?`default`:`error`,"aria-label":n(`serverName.label`,`Server name`)})})}),o(Tr,{children:[b(bn,{type:`button`,variant:`ghost`,onClick:t,disabled:i.isPending,children:n(`serverName.later`,`Later`)}),o(bn,{type:`submit`,disabled:i.isPending||a.trim().length===0,children:[i.isPending&&b($e,{className:`h-4 w-4 animate-spin`}),n(`common.save`,`Save`)]})]})]})})})}var lg=4,ug=160,dg=320,fg=`env(safe-area-inset-top)`,pg=`env(safe-area-inset-bottom)`;function mg(e){let{rect:t,viewportWidth:n,viewportHeight:r}=e,i=Math.min(dg,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+lg}px, calc(${fg} + 8px))`;return{...a,top:e,maxHeight:`max(${ug}px, calc(100dvh - ${e} - ${pg} - 8px))`}}let o=`max(${r-t.top+lg}px, calc(${pg} + 8px))`;return{...a,bottom:o,maxHeight:`max(${ug}px, calc(100dvh - ${o} - ${fg} - 8px))`}}function hg(e){return e===`totp`||e===`passkey`}function gg(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(hg);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 _g(e,t){switch(e){case`sso-not-linked`:return z.t(`helpers.ssoReturn.notLinked`,{provider:t??z.t(`helpers.ssoReturn.signInFallback`)});case`sso-state`:return z.t(`helpers.ssoReturn.state`)}}var vg={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 yg(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:z.t(vg[r]??`helpers.ssoReturn.link.failed`)}}var bg=`camstack:sso-return`,xg=`camstack:sso-ack`,Sg=`/sso-complete`,Cg=1500,wg=520,Tg=680;function Eg(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 Dg(e){return e.target===`login`?`/login#${e.fragment}`:`/system/my-access?${e.query}`}function Og(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 kg(e=window){let t=Math.max(0,Math.round(e.screenX+(e.outerWidth-wg)/2)),n=Math.max(0,Math.round(e.screenY+(e.outerHeight-Tg)/2));return[`popup=yes`,`width=${wg}`,`height=${Tg}`,`left=${t}`,`top=${n}`,`toolbar=no`,`menubar=no`,`location=no`,`status=no`,`resizable=yes`,`scrollbars=yes`].join(`,`)}function Ag(e){try{return window.open(e??`about:blank`,`camstack-sso`,kg())??null}catch{return null}}function jg(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 Mg(e){if(typeof e!=`object`||!e)return!1;let t=e;return t.type===`camstack:sso-return`&&jg(t.completion)}function Ng(e,t,n){return t===null||e.source!==t||e.origin!==n?null:Mg(e.data)?e.data.completion:null}var Pg=`camstack-sso`,Fg=`camstack:sso-done`;function Ig(e,t){return e.target===`profile`?{target:`profile`,query:e.query}:t?{target:`login`}:null}function Lg(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 Rg(e){return typeof e==`object`&&!!e&&e.type===`camstack:sso-done-ack`}function zg(e){try{let t=e.location.origin;return typeof t==`string`?t:null}catch{return null}}function Bg(){if(typeof BroadcastChannel>`u`)return null;try{let e=new BroadcastChannel(Pg);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 Vg=500;function Hg(e,t,n=window,r={}){let i=n.location.origin,a=r.channel===void 0?Bg():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=Ng(r,e,i);a===null||l||(l=!0,n.removeEventListener(`message`,d),e.postMessage({type:xg},i),t.onReturn(a))};n.addEventListener(`message`,d);let f=o?.subscribe(e=>{let n=Lg(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?.())},Vg);return()=>{n.removeEventListener(`message`,d),f?.(),a?.close(),c(p)}}function Ug(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 Wg(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))},Cg)})}function Gg(e,t,n){let r=Wg(n,e=>{let r=r=>{Ug(r,t,n.origin)&&e()};return n.addEventListener(`message`,r),()=>n.removeEventListener(`message`,r)});try{let r={type:bg,completion:e};t.postMessage(r,n.origin)}catch{}return r}function Kg(e,t,n){let r=Wg(n,e=>t.subscribe(t=>{Rg(t)&&e()}));return t.post({type:Fg,...e}),r}async function qg(e,t){let n=t.opener!==null&&!t.opener.closed?t.opener:null;if(n!==null&&zg(n)===t.origin&&await Gg(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=Ig(e,i);if(a!==null&&t.channel!==null&&(r!==null&&i&&await t.persistSession(r),await Kg(a,t.channel,t))){t.close();return}if(n!==null&&e.target===`profile`){let n=yg(`?${e.query}`);if(n?.kind===`error`){t.showResult({kind:`link-error`,message:n.message});return}t.close();return}t.continueAt(Dg(e))}function Jg(e,t){return(t.length>0&&e.startsWith(t)?e.slice(t.length):e).replace(/\/+$/,``)===Sg}var Yg=`camstack:broker-oauth`;function Xg(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 Qg(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||Xg(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 $g={open:e=>Ag(e),assign:e=>window.location.assign(e),watch:(e,t)=>Qg(e,t)};function e_(e,t,n=$g){let r=L(Og(e)),i=n.open(r);if(i===null){n.assign(r);return}n.watch(i,e=>{t?.(e)})}function t_(e,t,n){e_(Zg(e,t),n)}var n_=!1;function r_(){return n_}function i_(){n_=!0}function a_(e){return!e.read&&e.severity===`critical`}function o_(e){return e.filter(a_)}function s_(e){return e!==void 0&&typeof e.href==`string`&&e.href.length>0}var c_=/^\/addon\/[^/?#]+\/oauth\//;function l_(e){return e.navigation===void 0?c_.test(e.href):e.navigation===`server`}function u_({action:e,className:t,onActivate:n}){let r=M();return l_(e)?b(`a`,{href:L(e.href),className:t,onClick:t=>{t.preventDefault(),n?.(t),e_(e.href,()=>{r.invalidateQueries({queryKey:[[`alerts`]]}),r.invalidateQueries({queryKey:[[`broker`]]}),r.invalidateQueries({queryKey:[[`recordEntries`]]})})},children:e.label}):b(cs,{to:e.href,className:t,onClick:n,children:e.label})}D(),ci();var d_={info:Fe,success:He,warning:fe,error:Pe,critical:un},f_={info:`text-info`,success:`text-success`,warning:`text-warning`,error:`text-danger`,critical:`text-danger`},p_={active:`border-l-info`,"in-progress":`border-l-warning`,completed:`border-l-success`,failed:`border-l-danger`,dismissed:`border-l-foreground-subtle/30`};function m_(e){let t=Math.floor((Date.now()-e)/1e3);if(t<60)return z.t(`helpers.relativeTime.justNow`);let n=Math.floor(t/60);if(n<60)return z.t(`helpers.relativeTime.minutesAgo`,{count:n});let r=Math.floor(n/60);if(r<24)return z.t(`helpers.relativeTime.hoursAgo`,{count:r});let i=Math.floor(r/24);return z.t(`helpers.relativeTime.daysAgo`,{count:i})}function h_(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function g_(e){return typeof e==`string`&&e.length>0?e:void 0}function __(e){if(h_(e.metadata)){let t=g_(e.metadata.nodeId)??g_(e.metadata.agentId);if(t!==void 0)return t}let t=e.source;if(t!==void 0&&!(t.type!==`node`&&t.type!==`agent`))return g_(t.id)}function v_({alert:e,onMarkRead:t,onDismiss:n}){let{t:r}=B(),i=e.severity in d_?e.severity:`info`,a=s_(e.action)?e.action:void 0,s=e.status in p_?e.status:`active`,c=d_[i],l=f_[i],u=p_[s],{nodes:d}=Qn(),f=__(e),p=f===void 0?void 0:d.find(e=>e.id===f),m=f===void 0?void 0:p?.name??f;return o(`div`,{className:`flex items-start gap-2.5 px-3 py-2.5 border-l-2 ${u} ${e.read?`opacity-60`:``} hover:bg-surface-hover transition-colors`,children:[b(c,{className:`h-3.5 w-3.5 shrink-0 mt-0.5 ${l}`}),o(`div`,{className:`flex-1 min-w-0`,children:[o(`div`,{className:`flex items-center gap-1.5`,children:[b(`span`,{className:`text-[11px] font-semibold ${e.read?`text-foreground-subtle`:`text-foreground`}`,children:e.title}),!e.read&&b(`span`,{className:`h-1.5 w-1.5 rounded-full bg-primary shrink-0`})]}),m!==void 0&&b(`div`,{className:`text-foreground-subtle text-[10px] mt-0.5 truncate`,children:m}),b(`div`,{className:`text-[10px] text-foreground-subtle mt-0.5 line-clamp-2`,children:e.message}),a!==void 0&&b(u_,{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&&o(`div`,{className:`mt-1.5 flex items-center gap-2`,children:[b(`div`,{className:`flex-1 h-1 bg-surface-hover rounded-full overflow-hidden`,children:b(`div`,{className:`h-full bg-primary rounded-full transition-all duration-300`,style:{width:`${String(Math.min(100,Math.max(0,e.progress)))}%`}})}),o(`span`,{className:`text-[9px] text-foreground-subtle font-mono shrink-0`,children:[String(Math.round(e.progress)),`%`]})]}),b(`div`,{className:`text-[9px] text-foreground-subtle/60 mt-1`,children:m_(e.updatedAt)})]}),o(`div`,{className:`flex items-center gap-0.5 shrink-0`,children:[!e.read&&b(`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:b(ie,{className:`h-3 w-3 text-foreground-subtle`})}),e.status!==`in-progress`&&b(`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:b(Ae,{className:`h-3 w-3 text-foreground-subtle`})})]})]})}function y_({variant:e=`icon`,compact:t=!1}={}){let{t:n}=B(),[r,i]=C(!1),[a,s]=C(!1),c=f(null),l=f(null),u=M(),{data:d=0}=zn(void 0,{refetchInterval:3e4}),{data:p=[],isLoading:m}=Hr({limit:50},{enabled:r}),h=a?p:p.filter(e=>!e.read),g=p.filter(e=>e.read).length,_=()=>{u.invalidateQueries({queryKey:[[`alerts`]]})},v=sr({onSuccess:_}),S=In({onSuccess:_}),w=Dn({onSuccess:_});Or(`alert.created`,()=>{u.invalidateQueries({queryKey:[[`alerts`]]})}),Or(`alert.updated`,()=>{u.invalidateQueries({queryKey:[[`alerts`]]})}),x(()=>{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 T=y(e=>{v.mutate({alertId:e})},[v]),E=y(e=>{e&&w.mutate({alertId:e})},[w]),D=y(()=>{S.mutate(void 0),i(!1)},[S]),O=h.filter(a_),k=new Set(O.map(e=>e.id)),A=h.filter(e=>e.status===`in-progress`&&!k.has(e.id)),j=h.filter(e=>e.status!==`in-progress`&&!k.has(e.id)),[N,P]=C({}),F=y(()=>{let e=l.current;e&&P(mg({rect:e.getBoundingClientRect(),viewportWidth:window.innerWidth,viewportHeight:window.innerHeight}))},[]);return x(()=>{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]),o(`div`,{children:[e===`sidebar`?o(`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:[o(`span`,{className:`relative inline-flex shrink-0`,children:[b(Ue,{className:`h-3.5 w-3.5`}),t&&d>0&&b(`span`,{className:`absolute -top-1 -right-1 h-2 w-2 rounded-full bg-primary`})]}),!t&&b(`span`,{className:`flex-1 text-left`,children:n(`ui.alertBell.alerts`,`Alerts`)}),!t&&d>0&&b(`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)})]}):o(`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:[b(Ue,{className:`h-4.5 w-4.5`}),d>0&&b(`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&&li(o(`div`,{ref:c,style:N,className:`bg-surface border border-border rounded-lg shadow-xl flex flex-col overflow-hidden`,children:[o(`div`,{className:`flex items-center justify-between px-3 py-2 border-b border-border shrink-0`,children:[b(`span`,{className:`text-[12px] font-semibold text-foreground`,children:n(`ui.alertBell.alerts`,`Alerts`)}),o(`div`,{className:`flex items-center gap-2`,children:[g>0&&o(`label`,{className:`flex items-center gap-1 text-[10px] text-foreground-subtle cursor-pointer select-none`,children:[b(`input`,{type:`checkbox`,checked:a,onChange:e=>s(e.target.checked),className:`h-3 w-3 rounded border-border accent-primary cursor-pointer`}),n(`ui.alertBell.showRead`,`Show read`)]}),d>0&&o(`button`,{type:`button`,onClick:D,className:`flex items-center gap-1 text-[10px] text-primary hover:text-primary/80 transition-colors`,children:[b(hn,{className:`h-3 w-3`}),n(`ui.alertBell.markAllRead`,`Mark all read`)]})]})]}),o(`div`,{className:`flex-1 overflow-y-auto`,children:[m&&b(`div`,{className:`flex items-center justify-center py-8`,children:b($e,{className:`h-4 w-4 animate-spin text-foreground-subtle`})}),!m&&h.length===0&&o(`div`,{className:`flex flex-col items-center justify-center py-8 text-foreground-subtle`,children:[b(Ue,{className:`h-6 w-6 mb-2 opacity-40`}),b(`span`,{className:`text-[11px]`,children:p.length>0?n(`ui.alertBell.noUnreadAlerts`,`No unread alerts`):n(`ui.alertBell.noAlerts`,`No alerts`)}),p.length>0&&!a&&b(`button`,{type:`button`,onClick:()=>s(!0),className:`text-[10px] text-primary mt-1 hover:underline`,children:n(`ui.alertBell.showRead`,{count:g})})]}),O.length>0&&o(`div`,{className:`border-b border-border`,children:[b(`div`,{className:`px-3 py-1.5 bg-danger/5`,children:b(`span`,{className:`text-[9px] font-semibold uppercase tracking-widest text-danger`,children:n(`ui.alertBell.urgent`,`Urgent`)})}),O.map(e=>b(v_,{alert:e,onMarkRead:T,onDismiss:E},e.id))]}),A.length>0&&o(`div`,{className:`border-b border-border`,children:[b(`div`,{className:`px-3 py-1.5 bg-surface-hover/50`,children:b(`span`,{className:`text-[9px] font-semibold uppercase tracking-widest text-foreground-subtle/60`,children:n(`ui.alertBell.inProgress`,`In Progress`)})}),A.map(e=>b(v_,{alert:e,onMarkRead:T,onDismiss:E},e.id))]}),j.map(e=>b(v_,{alert:e,onMarkRead:T,onDismiss:E},e.id))]})]}),document.body)]})}D(),ci();function b_({alert:e,onMarkRead:t}){let{t:n}=B(),r=s_(e.action)?e.action:void 0;return o(`div`,{className:`border-b border-border last:border-b-0 px-3 py-2.5`,children:[b(`div`,{className:`text-[12px] font-semibold text-foreground`,children:e.title}),b(`div`,{className:`text-[11px] text-foreground-muted mt-0.5`,children:e.message}),o(`div`,{className:`mt-2 flex flex-wrap items-center gap-2`,children:[r!==void 0&&b(u_,{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`}),b(bn,{type:`button`,variant:`ghost`,size:`sm`,onClick:()=>t(e.id),children:n(`ui.alertBell.markAsRead`,`Mark as read`)})]})]})}function x_(){let{t:e}=B(),t=M(),[n,r]=C(r_()),{data:i=[],isLoading:a}=Hr({limit:50}),s=p(()=>o_(i),[i]),c=sr({onSuccess:y(()=>{t.invalidateQueries({queryKey:[[`alerts`]]})},[t])}),l=y(e=>{c.mutate({alertId:e})},[c]),u=y(()=>{i_(),r(!0)},[]);return a||n||s.length===0?null:li(b(`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:o(`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:[o(`div`,{className:`flex items-start justify-between gap-2 px-3 py-2.5 border-b border-border shrink-0 bg-danger/5`,children:[o(`div`,{children:[b(`h2`,{id:`critical-alerts-panel-title`,className:`text-[12px] font-semibold text-foreground`,children:e(`ui.criticalAlertsPanel.title`,`Urgent alerts`)}),b(`p`,{className:`text-[10px] text-foreground-muted mt-0.5`,children:e(`ui.criticalAlertsPanel.subtitle`,`These need your attention.`)})]}),b(Yr,{type:`button`,variant:`ghost`,onClick:u,"aria-label":e(`ui.criticalAlertsPanel.close`,`Close`),"data-testid":`critical-alerts-panel-close`,icon:Ae})]}),b(`div`,{className:`flex-1 overflow-y-auto`,children:s.map(e=>b(b_,{alert:e,onMarkRead:l},e.id))})]})}),document.body)}D();function S_(){let e=Yc();return S(e.subscribe,e.getSnapshot,e.getSnapshot)}var C_=[`detection`,`cluster`,`administration`];function w_(e){return C_.includes(e)}function T_(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(w_(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 E_=`camstack:last-path`,D_=512,O_=[`/login`,`/change-password`,`/access-denied`,`/logout`];function k_(e){return!e.startsWith(`/`)||e.startsWith(`//`)||e.length>D_?!1:!O_.some(t=>e===t||e.startsWith(t+`/`))}function A_(e){if(!(typeof window>`u`)&&k_(e))try{window.localStorage.setItem(E_,e)}catch{}}function j_(){if(typeof window>`u`)return null;try{let e=window.localStorage.getItem(E_);return e===null?null:k_(e)?e:null}catch{return null}}var M_=`/devices`;function N_(e){return e!==void 0&&k_(e)?e:j_()??M_}function P_(e){return e.split(`.`)[0]===`0`?`${e} beta`:e}function F_(e){if(e===null)return null;let t=e.trim();return t.length>0?t:null}function I_(e){let t=F_(e.productVersion),n=F_(e.serverVersion),r=F_(e.fallbackVersion);return t!==null&&n!==null?{kind:`both`,productLabel:P_(t),serverVersion:n}:t===null?n===null?r===null?{kind:`none`}:{kind:`fallback`,version:r}:{kind:`server`,serverVersion:n}:{kind:`product`,productLabel:P_(t)}}function L_(e,t){if(!Object.hasOwn(e,t))return null;let n=Reflect.get(e,t);return typeof n==`string`?n:null}function R_(e){return typeof e!=`object`||!e?null:{productVersion:L_(e,`productVersion`),serverVersion:L_(e,`serverVersion`)}}D();function z_(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 B_({placement:e,compact:t=!1}){let{t:n}=B(),[r,i]=C({kind:`fallback`,version:`1.2.489`});x(()=>{let e=new AbortController;return fetch(L(`/api/release-identity`),{signal:e.signal}).then(async e=>e.ok?R_(await e.json()):null).then(t=>{e.signal.aborted||t===null||i(I_({productVersion:t.productVersion,serverVersion:t.serverVersion,fallbackVersion:`1.2.489`}))}).catch(t=>{e.signal.aborted||t instanceof DOMException&&t.name}),()=>e.abort()},[]);let a=z_(r,n);return a===null?null:e===`login`?b(`span`,{"data-testid":`release-identity`,children:a}):b(`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})}D();var V_=A(!0);function H_(e){return e===`/addon`||e.startsWith(`/addon/`)}function U_(e,t,n){let r=[...e.filter(e=>e!==t),t];return r.length<=n?r:r.slice(r.length-n)}function W_({maxCached:e=6}){let t=Wa(),n=K(),r=za(),i=F(G),a=n.pathname,s=H_(a),c=f(new Map),l=f([]);if(s){c.current.set(a,{key:a,outlet:t,location:n,navigationType:r,routeContext:i});let o=U_(l.current,a,e),s=new Set(o);for(let e of c.current.keys())s.has(e)||c.current.delete(e);l.current=o}return o(P,{children:[l.current.map(e=>{let t=c.current.get(e);if(t?.outlet==null)return null;let n=s&&e===a;return b(`div`,{className:n?`h-full min-h-0`:void 0,style:n?void 0:{display:`none`},hidden:!n,"aria-hidden":!n,children:b(V_.Provider,{value:n,children:b(Aa.Provider,{value:{location:t.location,navigationType:t.navigationType},children:b(G.Provider,{value:t.routeContext,children:t.outlet})})})},e)}),!s&&t!=null?b(`div`,{className:`h-full min-h-0`,children:t},a):null]})}D();var G_={dark:Xe,light:Ze,system:an};function K_(){return b(`div`,{className:`flex h-full min-h-[50vh] items-center justify-center`,children:b(`span`,{className:`h-4 w-4 animate-spin rounded-full border-2 border-primary/30 border-t-primary`})})}function q_(){let e=K(),t=q(),{user:n,logout:r}=eu(),i=Kr(),{t:a}=B(),s=br(),c=Cr(),{info:l}=eg();x(()=>{document.title=l===null?`CamStack Admin`:`${l.name} \u00b7 CamStack Admin`},[l]);let u=zc(S_()),[d,m]=C(!1);x(()=>{A_(e.pathname+e.search)},[e.pathname,e.search]);let[h,g]=C(()=>typeof window>`u`?!1:window.localStorage.getItem(`camstack:sidebar-collapsed`)===`1`);x(()=>{typeof window>`u`||window.localStorage.setItem(`camstack:sidebar-collapsed`,h?`1`:`0`)},[h]);let[_]=C(()=>{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}});x(()=>{typeof window>`u`||window.localStorage.setItem(`camstack:sidebar-collapsed-groups`,JSON.stringify([..._]))},[_]),x(()=>{c&&window.localStorage.getItem(`camstack:sidebar-collapsed`)===null&&g(!0)},[c]);let{data:y=[]}=Un({nodeId:`hub`},{refetchInterval:3e4}),S=y.length,w=M(),T=f(Date.now()),{data:E}=jr(void 0,{staleTime:0,refetchOnMount:`always`,refetchInterval:e=>{let t=e.state.data;return t&&t.length>0||Date.now()-T.current>=3e4?!1:2e3}}),D=p(()=>E&&n?.isAdmin?nh(E):[],[E,n?.isAdmin]),O=p(()=>T_(D),[D]),k=O.known.get(`detection`)??[],A=O.known.get(`cluster`)??[],j=O.known.get(`administration`)??[];Or(`addon.page-ready`,()=>{w.invalidateQueries({queryKey:[[`addonPages`,`listPages`]]})});let N=()=>{r(),t(`/login`)},F=t=>!!(e.pathname===t||e.pathname.startsWith(t+`/`)),te=[`/system/pipeline`,`/live`,`/addon/osd-manager`,`/build`].some(t=>e.pathname===t||e.pathname.startsWith(t+`/`)),ne=n?.isAdmin===!0,re=p(()=>jh({t:a,isAdmin:ne}),[a,ne]),ie=re[0]?.items??[],ae=re[1]?.items??[],oe=re[2]?.items??[],se=re[3]?.items??[],ce=i?.mode??`system`,le={dark:a(`theme.dark`),light:a(`theme.light`),system:a(`theme.system`)},I=h&&!s,ue=(e,t=`md`)=>`flex w-full items-center gap-2.5 rounded-md ${I?`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`}`,de=(e,t)=>e===0?null:I?b(`div`,{className:`pt-3 mb-1 mx-2 border-t border-border/60`},`sep-${t}`):b(`div`,{className:`pt-4 pb-1.5 px-2.5`,children:b(`span`,{className:`text-[10px] font-semibold uppercase tracking-widest text-foreground-subtle/60`,children:t})},`hdr-${t}`),fe=e=>{let n=F(e.path),r=Nh(e.icon);return o(`button`,{onClick:()=>{t(e.path),m(!1)},className:ue(n),title:I?e.label:void 0,children:[b(r,{className:`h-3.5 w-3.5 shrink-0 ${n?`text-primary`:``}`}),!I&&e.label]},`${e.addonId}::${e.id}`)},pe=e=>{let n=e.icon,r=F(e.path),i=e.path===`/system/addons`;return o(`button`,{"data-testid":`nav-${e.path.replace(/^\//,``).replace(/\//g,`-`)}`,onClick:()=>{t(e.path),m(!1)},className:ue(r),title:I?e.label:void 0,children:[b(n,{className:`h-3.5 w-3.5 shrink-0 ${r?`text-primary`:``}`}),!I&&o(P,{children:[b(`span`,{className:`flex-1 text-left`,children:e.label}),i&&S>0&&b(`span`,{className:`ml-auto rounded-full bg-primary px-1.5 py-0.5 text-[9px] font-bold text-primary-foreground leading-none`,children:S})]}),I&&i&&S>0&&b(`span`,{className:`absolute mt-[-14px] ml-3 h-2 w-2 rounded-full bg-primary`})]},e.path)},me=o(P,{children:[o(`div`,{className:`flex h-14 items-center border-b border-border ${I?`justify-center px-1`:`pl-3 pr-4 gap-2`}`,children:[!I&&b(`img`,{src:i?.resolvedMode===`light`?L(`/brand/logo-horizontal-light.svg`):L(`/brand/logo-horizontal-dark.svg`),alt:a(`layouts.appLayout.camstackAdmin`,`CamStack Admin`),className:`h-9 flex-1 min-w-0`}),!s&&b(`button`,{onClick:()=>g(e=>!e),className:`p-1.5 rounded-md hover:bg-surface-hover text-foreground-subtle transition-colors flex-shrink-0 ${I?``:`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:b(h?Ee:nt,{className:`h-4 w-4`})})]}),!I&&l!==null&&b(`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}),b(`div`,{className:`border-b border-border pt-2`,children:b(Uh,{navSections:re,addonPages:D,compact:I,onNavigated:()=>m(!1)})}),o(`nav`,{className:`flex-1 overflow-y-auto py-3 ${I?`px-1.5`:`px-2`} space-y-0.5`,children:[ie.map(e=>pe(e)),de(ae.length+k.length,a(`nav.detectionSection`,`Detection`)),ae.map(e=>pe(e)),k.map(e=>fe(e)),de(oe.length+A.length,a(`nav.clusterSection`,`Cluster`)),oe.map(e=>pe(e)),A.map(e=>fe(e)),de(se.length+j.length,a(`system.title`,`Administration`)),se.map(e=>pe(e)),j.map(e=>fe(e)),O.custom.map(e=>o(`div`,{className:`contents`,children:[de(e.pages.length,e.label),e.pages.map(e=>fe(e))]},`custom-${e.id}`)),de(O.ungrouped.length,a(`nav.addonPages`,`Addon Pages`)),O.ungrouped.map(e=>fe(e))]}),o(`div`,{className:`border-t border-border ${I?`p-1.5`:`p-2`} space-y-0.5`,children:[o(`button`,{onClick:()=>i?.toggleMode(),className:ue(!1),title:I?le[ce]:void 0,children:[(()=>{let e=G_[ce];return b(e,{className:`h-3.5 w-3.5 shrink-0`})})(),!I&&b(`span`,{children:le[ce]})]}),b(y_,{variant:`sidebar`,compact:I}),o(`button`,{type:`button`,onClick:()=>t(`/system/my-access`),className:ue(F(`/system/my-access`)),title:I?a(`system.myAccess`,`My access`):void 0,children:[b(Oe,{className:`h-3.5 w-3.5 shrink-0`}),!I&&b(`span`,{className:`truncate`,children:a(`system.myAccess`,`My access`)})]}),o(`button`,{onClick:N,className:ue(!1).replace(`hover:text-foreground`,`hover:text-danger`),title:I?n?.username??a(`layouts.appLayout.logout`,`Logout`):void 0,children:[b(_n,{className:`h-3.5 w-3.5 shrink-0`}),!I&&b(`span`,{className:`truncate`,children:n?.username??a(`layouts.appLayout.user`,`User`)})]}),b(B_,{placement:`sidebar`,compact:I})]})]});return o(`div`,{className:`flex h-dvh overflow-hidden bg-background text-foreground pt-[env(safe-area-inset-top)] pb-[env(safe-area-inset-bottom)]`,children:[!s&&b(`aside`,{className:`flex flex-col border-r border-border bg-surface/80 backdrop-blur-sm shrink-0 transition-[width] duration-150 ease-out ${I?`w-12`:`w-48`}`,children:me}),s&&b(Vn,{open:d,onClose:()=>m(!1),width:`w-64`,children:me}),o(`div`,{className:`flex flex-1 flex-col min-w-0`,children:[u!==null&&o(`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`?b(Te,{className:`h-3.5 w-3.5`}):b(We,{className:`h-3.5 w-3.5`}),b(`span`,{children:a(u.i18nKey,{defaultValue:u.message,...u.i18nParams})}),u.action===`sign-in`&&b(`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&&b($e,{className:`h-3.5 w-3.5 animate-spin`})]}),b(Qh,{}),b(sg,{}),b(x_,{}),s&&o(`header`,{className:`flex items-center h-12 border-b border-border px-3 shrink-0 bg-surface/80 backdrop-blur-sm`,children:[b(`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:b(ee,{className:`h-5 w-5`})}),b(`div`,{className:`flex-1 flex justify-center`,children:b(`img`,{src:i?.resolvedMode===`light`?L(`/brand/logo-horizontal-light.svg`):L(`/brand/logo-horizontal-dark.svg`),alt:a(`layouts.appLayout.camstack`,`CamStack`),className:`h-7`})}),b(y_,{})]}),o(lh,{children:[b(dh,{}),b(`main`,{className:`relative flex-1 min-h-0 overscroll-contain bg-background ${te?`overflow-hidden`:`overflow-auto`}`,children:b(v,{fallback:b(K_,{}),children:b(W_,{})})})]})]})]})}function $({children:e,requireAdmin:t}){let{t:n}=B(),{user:r,loading:i,mustChangePassword:a}=eu(),o=K();return i?b(`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`?b(J,{to:`/change-password`,replace:!0}):t&&!r.isAdmin?b(J,{to:`/access-denied`,replace:!0}):b(P,{children:e}):b(J,{to:`/login`,replace:!0,state:{from:o.pathname+o.search}})}var J_=`customize`,Y_=`/build/compositions/new`,X_=`/build/compositions/:blockId`,Z_=`/build?tab=custom-device`;function Q_(e){return`/devices/${e}`}function $_(e){return`/devices/${e}?tab=${J_}`}var ev=`integration`,tv=`section`,nv=[ev,tv],rv={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`}},iv=`settings`,av=`activity`;function ov(e,t={}){let{path:n,tab:r}=rv[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(ev,t.integration),t.section!==void 0&&i.set(tv,t.section);let a=i.toString();return a.length>0?`${n}?${a}`:n}function sv(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 cv(e,t,n=null,r=null){let i=new URLSearchParams(e);return i.set(ev,t),r===null?i.delete(tv):i.set(tv,r),n!==null&&i.delete(n),i}function lv(e){return e===`/admin`||e===`/admin/`?`/`:e.startsWith(`/admin/`)?e.slice(6):e}function uv(){let{t:e}=B(),t=q();return o(`div`,{className:`flex flex-col items-center justify-center text-foreground py-16 px-4`,children:[b(`div`,{className:`flex h-16 w-16 items-center justify-center rounded-2xl bg-danger/10 mb-4`,children:b(gn,{className:`h-8 w-8 text-danger`})}),b(`h1`,{className:`text-xl font-bold`,children:e(`accessDenied.accessDenied`,`Access Denied`)}),b(`p`,{className:`mt-2 text-sm text-foreground-subtle`,children:e(`accessDenied.youDonTHavePermission`,`You don't have permission to access this page.`)}),b(`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 dv=`auth.password-incorrect`;function fv(e,t){return typeof e==`object`&&e?Reflect.get(e,t):void 0}function pv(e){if(!(e instanceof Error))return{kind:`connection-lost`};let t=fv(e,`data`);return typeof t!=`object`||!t?{kind:`connection-lost`}:fv(fv(t,`i18n`),`code`)===dv?{kind:`wrong-current`}:fv(t,`code`)===`UNAUTHORIZED`?{kind:`session-ended`}:{kind:`rejected`,message:e.message}}D();var mv=8;function hv(e,t){let n=pv(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 gv(){let{t:e}=B(),{user:t,mustChangePassword:n,clearMustChangePassword:r,logout:i}=eu(),a=qe(),s=Kr(),c=q(),[l,u]=C(``),[d,f]=C(``),[p,m]=C(``),[h,g]=C(!1),[_,v]=C(``),[y,x]=C(!1),S=n?Wl:l;return b(`div`,{className:`flex min-h-screen items-center justify-center bg-background p-4`,children:o(`div`,{className:`w-full max-w-sm`,children:[b(`div`,{className:`flex justify-center mb-8`,children:b(`img`,{src:s?.resolvedMode===`light`?L(`/brand/logo-horizontal-light.svg`):L(`/brand/logo-horizontal-dark.svg`),alt:e(`changePassword.camstackAdmin`,`CamStack Admin`),className:`h-12`})}),o(`form`,{onSubmit:async i=>{if(i.preventDefault(),v(``),!t){v(`Not signed in`);return}if(!n&&l.length===0){v(e(`changePassword.enterCurrent`,`Enter your current password`));return}if(d.length<mv){v(`Password must be at least ${mv} characters`);return}if(d!==p){v(`The two passwords do not match`);return}if(d===`changeme`){v(`Choose a password different from the seed default`);return}x(!0);try{await a.changeOwnPassword({currentPassword:S,newPassword:d}),r(),c(`/devices`,{replace:!0})}catch(t){v(hv(t,e))}finally{x(!1)}},className:`space-y-4 rounded-xl border border-border bg-surface p-6 shadow-xl shadow-black/10`,children:[o(`div`,{className:`space-y-1`,children:[b(`h1`,{className:`text-sm font-semibold text-foreground`,children:e(`changePassword.setANewPassword`,`Set a new password`)}),b(`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.`)})]}),_&&b(`div`,{role:`alert`,className:`rounded-md bg-danger/10 border border-danger/20 px-3 py-2 text-xs text-danger`,children:_}),!n&&o(`div`,{className:`space-y-1.5`,children:[b(`label`,{className:`text-xs font-medium text-foreground-subtle`,children:e(`changePassword.currentPassword`,`Current password`)}),b(`input`,{"data-testid":`change-password-current`,type:h?`text`:`password`,value:l,onChange:e=>u(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})]}),o(`div`,{className:`space-y-1.5`,children:[b(`label`,{className:`text-xs font-medium text-foreground-subtle`,children:e(`changePassword.newPassword`,`New password`)}),o(`div`,{className:`relative`,children:[b(`input`,{"data-testid":`change-password-new`,type:h?`text`:`password`,value:d,onChange:e=>f(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}),b(`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:b(h?re:at,{className:`h-4 w-4`})})]})]}),o(`div`,{className:`space-y-1.5`,children:[b(`label`,{className:`text-xs font-medium text-foreground-subtle`,children:e(`changePassword.confirmNewPassword`,`Confirm new password`)}),b(`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`})]}),b(`button`,{"data-testid":`change-password-submit`,type:`submit`,disabled:y||!d||!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:y?e(`changePassword.saving`,`Saving…`):e(`changePassword.saveAndContinue`,`Save and continue`)}),n&&b(`button`,{type:`button`,onClick:()=>{i(),c(`/login`,{replace:!0})},className:`w-full text-xs text-foreground-subtle hover:text-foreground transition-colors`,children:e(`changePassword.signOutInstead`,`Sign out instead`)})]})]})})}function _v(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 vv(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 yv(){return window?.PublicKeyCredential!==void 0&&typeof window.PublicKeyCredential==`function`}function bv(e){let{id:t}=e;return{...e,id:vv(t),transports:e.transports}}function xv(e){return e===`localhost`||/^([a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,}$/i.test(e)}var Sv=class extends Error{constructor({message:e,code:t,cause:n,name:r}){super(e,{cause:n}),this.name=r??n.name,this.code=t}},Cv=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}}},wv=[`cross-platform`,`platform`];function Tv(e){if(e&&!(wv.indexOf(e)<0))return e}function Ev(){if(!yv())return new Promise(e=>e(!1));let e=window.PublicKeyCredential;return e.isConditionalMediationAvailable===void 0?new Promise(e=>e(!1)):e.isConditionalMediationAvailable()}function Dv({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 Sv({message:`Authentication ceremony was sent an abort signal`,code:`ERROR_CEREMONY_ABORTED`,cause:e})}else if(e.name===`NotAllowedError`)return new Sv({message:e.message,code:`ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY`,cause:e});else if(e.name===`SecurityError`){let t=window.location.hostname;if(!xv(t))return new Sv({message:`${window.location.hostname} is an invalid domain`,code:`ERROR_INVALID_DOMAIN`,cause:e});if(n.rpId!==t)return new Sv({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 Sv({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 Ov(e){let{optionsJSON:t,useBrowserAutofill:n=!1,verifyBrowserAutofillInput:r=!0}=e;if(!yv())throw Error(`WebAuthn is not supported in this browser`);let i;t.allowCredentials?.length!==0&&(i=t.allowCredentials?.map(bv));let a={...t,challenge:vv(t.challenge),allowCredentials:i},o={};if(n){if(!await Ev())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=Cv.createNewAbortSignal();let s;try{s=await navigator.credentials.get(o)}catch(e){throw Dv({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=_v(u.userHandle)),{id:c,rawId:_v(l),response:{authenticatorData:_v(u.authenticatorData),clientDataJSON:_v(u.clientDataJSON),signature:_v(u.signature),userHandle:f},type:d,clientExtensionResults:s.getClientExtensionResults(),authenticatorAttachment:Tv(s.authenticatorAttachment)}}function kv(e){return typeof e==`object`&&!!e}function Av(e){return kv(e)&&typeof e.challenge==`string`}D();async function jv(e){if(!Av(e))throw Error(`passkey authentication options missing challenge`);let t=await Ov({optionsJSON:e});return Object.fromEntries(Object.entries(t))}function Mv({method:e,challengeToken:t,onComplete:n,onSecondFactor:r,onError:i}){let[a,s]=C(!1),[c,l]=C(null),u=async()=>{l(null),s(!0);try{let e=X();if(t){let r=await jv((await e.loginBeginPasskey(t)).optionsJSON),i=await e.loginVerifyPasskey(t,r,{refreshable:!0});n(i.token,i);return}let a=await jv((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.`;l(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;l(r),i?.(r)}finally{s(!1)}};return o(`div`,{className:`space-y-2`,children:[o(`button`,{type:`button`,"data-testid":t?`login-passkey`:`login-passkey-direct`,onClick:()=>void u(),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?b($e,{className:`h-4 w-4 animate-spin text-primary`}):b(sn,{className:`h-4 w-4 text-primary`}),e.label]}),c&&b(`div`,{className:`rounded-md bg-danger/10 border border-danger/20 px-3 py-2 text-xs text-danger`,children:c})]})}var Nv=()=>window.location.hostname;function Pv(e,t=Nv){return yv()&&Kh(t(),e.rpId)}function Fv(e,t=Nv){let n=e.filter(e=>e.kind===`passkey`&&e.stage===`second-factor`).filter(e=>Pv(e,t));return{passkeyMethods:n,widgetMethods:n.length>0?[]:e.filter(e=>e.kind===`widget`&&e.stage===`second-factor`)}}function Iv(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 Lv(e){let t=e.onComplete,n=e.onSecondFactor;return typeof t==`function`?{onComplete:t,onSecondFactor:typeof n==`function`?n:void 0}:null}function Rv({methods:e,widgetConfig:t,onRedirect:n}){let{t:r}=B();ri();let i=e.filter(e=>e.kind!==`passkey`||Pv(e));return i.length===0?null:o(`div`,{className:`mt-6 space-y-3`,children:[o(`div`,{className:`flex items-center gap-3`,children:[b(`div`,{className:`h-px flex-1 bg-border`}),b(`span`,{className:`text-[10px] uppercase tracking-wider text-foreground-subtle`,children:r(`login.primaryLoginMethods.orContinueWith`,`Or continue with`)}),b(`div`,{className:`h-px flex-1 bg-border`})]}),b(`div`,{className:`space-y-2`,children:i.map(e=>{if(e.kind===`redirect`){let t=(e.icon===void 0?void 0:Zr(e.icon))??Oe;return o(`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:[b(t,{className:`h-4 w-4 text-primary`}),e.label]},e.id)}if(e.kind===`passkey`){let n=Lv(t);return n?b(Mv,{method:e,onComplete:n.onComplete,onSecondFactor:n.onSecondFactor},e.id):null}return b(zv,{method:e,config:t},e.id)})})]})}function zv({method:e,config:t}){let{t:n}=B(),r=nr(e.remote,e.bundleUrl);return r===null?o(`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:[b($e,{className:`h-3.5 w-3.5 animate-spin`}),n(`common.loading`,`Loading…`)]}):r===void 0?o(`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:[b(Pe,{className:`h-3.5 w-3.5 shrink-0`}),n(`login.primaryMethods.loadFailed`)]}):b(r,{instanceId:e.id,host:`dashboard`,config:t})}var Bv=4e3,Vv=/^[A-Za-z0-9._-]{1,64}$/;function Hv(e){let t=e.addonId!==void 0&&Vv.test(e.addonId)?e.addonId:null,n=e.integration!==void 0&&Vv.test(e.integration)?e.integration:null;if(t!==null&&e.brokerId!==void 0)return ov(`connectivity`,{integration:t,kindSection:`brokers`});let r=n??t;return ov(`connectivity`,r===null?{}:{integration:r})}function Uv(e,t){let n=t.opener;if(n===null||n.closed||zg(n)!==t.origin)return!1;try{return n.postMessage({type:Yg,ok:e.status===`success`,...e.brokerId===void 0?{}:{brokerId:e.brokerId},...e.status===`error`?{error:e.reason??`unknown`}:{}},t.origin),!0}catch{return!1}}D();var Wv=500;function Gv(e){let{t}=B();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 Kv({outcome:e}){let{t}=B(),n=Gv(e.reason??`unknown`);if(e.status===`error`)return o(P,{children:[b(De,{className:`mx-auto h-8 w-8 text-danger`,"aria-hidden":!0}),b(`h1`,{"data-testid":`oauth-landing-title`,className:`text-sm font-semibold text-foreground`,children:t(`oauthLanding.errorTitle`,`Sign-in did not finish`)}),b(`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 o(P,{children:[b(He,{className:`mx-auto h-8 w-8 text-success`,"aria-hidden":!0}),b(`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`)}),b(`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 qv({outcome:e,closable:t,onContinue:n,onClose:r}){let{t:i}=B(),a=Hv(e);return x(()=>{if(e.status!==`success`)return;let t=window.setTimeout(()=>n(a),Bv);return()=>window.clearTimeout(t)},[e.status,n,a]),b(`main`,{className:`flex min-h-screen items-center justify-center bg-background p-4`,children:o(`div`,{className:`w-full max-w-sm space-y-4`,children:[b(`div`,{className:`flex justify-center`,children:o(`picture`,{children:[b(`source`,{media:`(prefers-color-scheme: dark)`,srcSet:L(`/brand/logo-horizontal-dark.svg`)}),b(`img`,{src:L(`/brand/logo-horizontal-light.svg`),alt:i(`oauthLanding.brand`,`CamStack`),className:`h-12`})]})}),o(`div`,{className:`space-y-4 rounded-xl border border-border bg-surface p-6 text-center shadow-xl shadow-black/10`,children:[b(Kv,{outcome:e}),o(`div`,{className:`flex flex-col gap-2`,children:[b(bn,{type:`button`,variant:`primary`,onClick:()=>n(a),children:i(`oauthLanding.back`,`Back to CamStack`)}),t&&b(bn,{type:`button`,variant:`ghost`,onClick:r,children:i(`oauthLanding.close`,`Close this window`)})]})]})]})})}function Jv(e,t){window.history.replaceState(null,``,window.location.pathname);let n=window.opener,r=Uv(t,{opener:n,origin:window.location.origin}),i=()=>e.render(b(qv,{outcome:t,closable:r,onContinue:e=>window.location.replace(L(e)),onClose:()=>window.close()}));if(r&&t.status===`success`){window.close(),window.setTimeout(i,Wv);return}i()}function Yv(e){return Jt(e)}var Xv=`Done — you can close this window.`,Zv=500,Qv=`camstack_admin_token`;async function $v(e,t=``){try{let n=ll(new URLSearchParams(t));n!==null&&n.token===e?sl(n):localStorage.setItem(Qv,e)}catch{}await fetch(L(`/api/auth/session`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({token:e})}).catch(()=>{})}function ey(){try{let e=localStorage.getItem(Qv);return e!==null&&e.length>0?e:null}catch{return null}}function ty(e){let t=Yv(window.location.hash);if(t!==null){Jv(e,t);return}let n=Eg(window.location.hash);window.history.replaceState(null,``,window.location.pathname);let r=t=>e.render(b(ny,{completion:n,result:t}));if(r(null),n===null)return;let i=Bg();qg(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:Xv}),Zv)},continueAt:e=>window.location.replace(L(e)),persistSession:e=>$v(e,n.target===`login`?n.fragment:``),showResult:r,setTimeout:(e,t)=>window.setTimeout(e,t)})}function ny({completion:e,result:t}){let{t:n}=B();return b(`div`,{className:`flex min-h-screen items-center justify-center bg-background p-4`,children:b(`div`,{className:`flex flex-col items-center gap-3 text-sm text-foreground-subtle`,children:e===null?b(`a`,{className:`text-primary underline`,href:L(`/login`),children:n(`ssoComplete.nothingToFinishHereGo`,`Nothing to finish here — go to sign-in`)}):t===null?o(`span`,{className:`flex items-center gap-3`,children:[b(`span`,{className:`h-4 w-4 animate-spin rounded-full border-2 border-primary/30 border-t-primary`}),n(`ssoComplete.finishingSignIn`,`Finishing sign-in…`)]}):o(P,{children:[b(`span`,{"data-testid":`sso-complete-result`,className:t.kind===`link-error`?`text-danger`:`text-foreground`,children:t.message}),b(`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`)})]})})})}D();function ry(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 iy(){let e=new URLSearchParams(window.location.search);return wl({codeChallenge:e.get(`code_challenge`),codeChallengeMethod:e.get(`code_challenge_method`),state:e.get(`state`),purpose:e.get(`purpose`)})}function ay(e){return Math.min(1e3*2**e,15e3)}function oy(){let{t:e}=B(),{login:t,verifyTotp:n,finalizePasskeyLogin:r,user:i}=eu(),{i18n:a}=B(),s=Kr(),c=q(),l=K(),u=new URLSearchParams(window.location.search).get(`next`);x(()=>{Nl(u)},[u]);let d=new URLSearchParams(window.location.search).get(`redirect`);x(()=>{Hl(d)},[d]);let p=iy();x(()=>{Dl(p)},[p?.codeChallenge,p?.state,p?.purpose]);let m=l.state,h=N_(m?.from),[g,_]=C(``),[v,y]=C(``),[S,w]=C(!1),[T,E]=C(``),[D,O]=C(!1),[k,A]=C(`credentials`),[j,M]=C(``),[N,F]=C([]),[ee,te]=C(``),[ne,ie]=C(void 0),[ae,oe]=C(`sso-not-linked`),se=xn.auth.listLoginMethods.useQuery(void 0,{retry:!0,retryDelay:ay}),ce=se.data===void 0,le=(se.data??[]).filter(e=>e.kind!==`device-certificate`),I=xn.auth.getServerName.useQuery().data,ue=le.filter(e=>e.stage===`primary`),de=Fv(le);x(()=>{let e=gg(window.location.hash);if(e!==null){if(window.history.replaceState({},``,window.location.pathname+window.location.search),e.kind===`challenge`){M(e.challengeToken),F(e.factors),te(``),A(`second-factor`);return}oe(e.code),ie(e.provider)}},[]);let fe=ne==null?null:le.find(e=>e.id===ne&&`label`in e)?.label??null,pe=T||(ne===void 0?``:_g(ae,fe)),{passkeyMethods:me,widgetMethods:he}=de,ge=f(!1),_e=async()=>{if(ge.current)return;ge.current=!0;let e=Al(d);if(e?.kind===`app-callback`){await be(e.url);return}else if(e){window.location.assign(L(e.path));return}let t=Fl(u);t?window.location.assign(L(t)):c(h,{replace:!0})},[ve,ye]=C(null),be=async e=>{ye({callbackBase:e,mintedUrl:null,failed:!1});try{let t=iy()??Ol();if(t===null)throw Error(`The app sent no PKCE challenge and state`);let{code:n}=await X().trpcClient.auth.createHandoffCode.mutate({purpose:t.purpose,codeChallenge:t.codeChallenge,state:t.state}),r=kl(e,n,t.state);ye({callbackBase:e,mintedUrl:r,failed:!1}),window.location.assign(r)}catch(t){if(ry(t)){ge.current=!1,ye(null),E(`Sign in again to confirm it is you.`);return}ye({callbackBase:e,mintedUrl:null,failed:!0})}},xe=i!==null,[Ce,we]=C(!1);x(()=>{!xe||!d&&!u||Ce||(we(!0),_e())},[xe,d,u,Ce]);let Te=async e=>{e.preventDefault(),E(``),ie(void 0),O(!0);try{let e=await t(g,v);if(e.kind===`second-factor`){M(e.challengeToken),F(e.factors),A(`second-factor`);return}v===`changeme`?c(`/change-password`,{replace:!0}):await _e()}catch(e){E(e instanceof Error?e.message:`Login failed`)}finally{O(!1)}},Ee=async e=>{e.preventDefault(),E(``),O(!0);try{await n(j,ee.trim()),await _e()}catch(e){E(e instanceof Error?e.message:`TOTP verification failed`),te(``)}finally{O(!1)}},De=async(e,t)=>{try{await r(e,t),await _e()}catch(e){E(e instanceof Error?e.message:`Passkey sign-in failed`)}},Oe=f(null);x(()=>()=>Oe.current?.(),[]);let ke=async e=>{if(e.target!==`login`)return;let t=ll(new URLSearchParams(e.fragment));if(t!==null){try{await r(t.token,t),await _e()}catch(e){E(e instanceof Error?e.message:`Sign-in failed`)}return}let n=gg(`#${e.fragment}`);if(n!==null){if(n.kind===`challenge`){Me({challengeToken:n.challengeToken,factors:n.factors});return}oe(n.code),ie(n.provider)}},Ae=e=>{if(xl(d)?.kind===`app-callback`)return!1;let t=Ag(L(Og(e.startUrl)));return t===null?!1:(E(``),ie(void 0),Oe.current?.(),Oe.current=Hg(t,{onReturn:e=>{Oe.current?.(),Oe.current=null,ke(e)},onDone:e=>{if(Oe.current?.(),Oe.current=null,e.target!==`login`)return;let t=ey()===null?null:ol();t!==null&&ke({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)},Me=e=>{let t=e.factors.filter(e=>e===`totp`||e===`passkey`);M(e.challengeToken),F(t),te(``),E(``),A(`second-factor`)};return ve===null?b(`div`,{className:`flex min-h-screen items-center justify-center bg-background p-4`,children:o(`div`,{className:`w-full max-w-sm`,children:[b(`div`,{className:`flex justify-center mb-8`,children:b(`img`,{src:s?.resolvedMode===`light`?L(`/brand/logo-horizontal-light.svg`):L(`/brand/logo-horizontal-dark.svg`),alt:e(`login.camstackAdmin`,`CamStack Admin`),className:`h-12`})}),I!==void 0&&!I.isDefault&&b(`p`,{"data-testid":`login-server-name`,className:`-mt-4 mb-6 text-center text-sm text-foreground-muted`,children:b(Xs,{i18nKey:`login.signInTo`,values:{name:I.name},components:{b:b(`span`,{className:`font-semibold text-foreground`})}})}),k===`credentials`?o(`form`,{onSubmit:Te,className:`space-y-4 rounded-xl border border-border bg-surface p-6 shadow-xl shadow-black/10`,children:[pe&&b(`div`,{"data-testid":`login-error`,className:`rounded-md bg-danger/10 border border-danger/20 px-3 py-2 text-xs text-danger`,children:pe}),o(`div`,{className:`space-y-1.5`,children:[b(`label`,{className:`text-xs font-medium text-foreground-subtle`,children:e(`login.username`,`Username`)}),b(`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})]}),o(`div`,{className:`space-y-1.5`,children:[b(`label`,{className:`text-xs font-medium text-foreground-subtle`,children:e(`login.password`,`Password`)}),o(`div`,{className:`relative`,children:[b(`input`,{"data-testid":`login-password`,type:S?`text`:`password`,placeholder:e(`login.password`,`Password`),value:v,onChange:e=>y(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`}),b(`button`,{type:`button`,onClick:()=>w(!S),className:`absolute right-2.5 top-1/2 -translate-y-1/2 text-foreground-subtle hover:text-foreground transition-colors`,tabIndex:-1,children:b(S?re:at,{className:`h-4 w-4`})})]})]}),b(`button`,{"data-testid":`login-submit`,type:`submit`,disabled:D||!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:D?o(`span`,{className:`flex items-center justify-center gap-2`,children:[b(`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`)})]}):o(`div`,{className:`space-y-4 rounded-xl border border-border bg-surface p-6 shadow-xl shadow-black/10`,children:[o(`div`,{className:`flex items-center gap-2 pb-1 border-b border-border`,children:[b(je,{className:`h-4 w-4 text-primary`}),b(`div`,{className:`text-sm font-medium text-foreground`,children:e(`login.twoFactorAuthentication`,`Two-factor authentication`)})]}),b(`p`,{className:`text-xs text-foreground-subtle`,children:g?b(P,{children:b(Xs,{i18nKey:`login.finishSigningInAs`,values:{username:g},components:{mono:b(`span`,{className:`font-mono text-foreground`})}})}):e(`login.finishSigningInAs`,`Finish signing in.`)}),T&&b(`div`,{className:`rounded-md bg-danger/10 border border-danger/20 px-3 py-2 text-xs text-danger`,children:T}),N.includes(`passkey`)&&me.map(e=>b(Mv,{method:e,challengeToken:j,onComplete:De},e.id)),N.includes(`passkey`)&&he.map(e=>b(zv,{method:e,config:{challengeToken:j,onComplete:De}},e.id)),Iv(N,de)&&b(`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`)&&o(`div`,{className:`flex items-center gap-3`,children:[b(`div`,{className:`h-px flex-1 bg-border`}),b(`span`,{className:`text-[10px] uppercase tracking-wider text-foreground-subtle`,children:`or`}),b(`div`,{className:`h-px flex-1 bg-border`})]}),N.includes(`totp`)&&o(`form`,{onSubmit:Ee,className:`space-y-4`,children:[o(`div`,{className:`space-y-1.5`,children:[b(`label`,{className:`text-xs font-medium text-foreground-subtle`,children:e(`login.authenticationCode`,`Authentication code`)}),b(`input`,{"data-testid":`login-totp`,type:`text`,inputMode:`numeric`,autoComplete:`one-time-code`,placeholder:`123456`,value:ee,onChange:e=>te(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})]}),b(`button`,{"data-testid":`login-totp-submit`,type:`submit`,disabled:D||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:D?o(`span`,{className:`flex items-center justify-center gap-2`,children:[b(`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`)})]}),o(`button`,{type:`button`,onClick:()=>{A(`credentials`),M(``),F([]),te(``),E(``)},className:`w-full flex items-center justify-center gap-1.5 text-xs text-foreground-subtle hover:text-foreground transition-colors`,children:[b(Se,{className:`h-3 w-3`}),e(`login.backToUsernamePassword`,`Back to username + password`)]})]}),k===`credentials`&&ce&&o(`p`,{"data-testid":`login-methods-pending`,role:`status`,className:`mt-4 flex items-center justify-center gap-2 text-xs text-foreground-subtle`,children:[b(`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...`)]}),k===`credentials`&&b(Rv,{methods:ue,widgetConfig:{onComplete:De,onSecondFactor:Me,locale:a.language},onRedirect:Ae}),b(`p`,{className:`mt-6 text-center text-[10px] text-foreground-subtle/50`,children:b(B_,{placement:`login`})})]})}):b(`div`,{className:`flex min-h-screen items-center justify-center bg-background p-4`,children:o(`div`,{className:`w-full max-w-sm rounded-xl border border-border bg-surface p-6 text-center space-y-4`,children:[b(`h1`,{className:`text-sm font-semibold text-foreground`,children:e(`login.returningToTheApp`,`Returning to the app…`)}),ve.failed?o(P,{children:[b(`p`,{className:`text-xs text-danger`,children:e(`login.couldNotPrepareTheSign`,`Could not prepare the sign-in handoff. You are logged in — retry below.`)}),b(`button`,{onClick:()=>void be(ve.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`)})]}):ve.mintedUrl===null?b(`p`,{className:`text-xs text-foreground-subtle`,children:e(`login.preparingAOneTimeSign`,`Preparing a one-time sign-in code…`)}):o(P,{children:[b(`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).`)}),b(`a`,{href:ve.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`)})]})]})})}D();function sy(){let{pathname:e,search:t,hash:n}=K();return b(J,{to:`${lv(e)}${t}${n}`,replace:!0})}function cy(){return b(J,{to:j_()??`/devices`,replace:!0})}var ly=h(()=>i(()=>import(`./Devices-Bzyikktm.js`).then(e=>({default:e.DevicesPage})),__vite__mapDeps([0,1,2,3,4,5,6,7,8]),import.meta.url)),uy=h(()=>i(()=>import(`./Integrations-CBEyPYvE.js`).then(e=>({default:e.IntegrationsPage})),__vite__mapDeps([9,1,2,3,4,10,5,11,6,12,13,14,15,7,8]),import.meta.url)),dy=h(()=>i(()=>import(`./IntegrationDetail-AVnEA7GO.js`).then(e=>({default:e.IntegrationDetailPage})),__vite__mapDeps([16,1,2,3,4,17,5,12,13,10,14,15,18,7,19]),import.meta.url)),fy=h(()=>i(()=>import(`./Pipeline-4J5lhNWd.js`).then(e=>({default:e.PipelinePage})),__vite__mapDeps([20,1,2,3,4,10,5,21,22,23,24,18,25,26,8]),import.meta.url)),py=h(()=>i(()=>import(`./DeviceDetail-B4rdvagQ.js`).then(e=>({default:e.DeviceDetailPage})),__vite__mapDeps([27,1,2,3,4,10,5,28,29,30,31,21,32,33,24,34,35,36,37,38,39,25,8,40,15]),import.meta.url)),my=h(()=>i(()=>import(`./Showroom-CkHdCDH1.js`).then(e=>({default:e.ShowroomPage})),__vite__mapDeps([41,1,2,3,4]),import.meta.url)),hy=h(()=>i(()=>import(`./EmbedPlayerPage-ClpQaFoO.js`).then(e=>({default:e.EmbedPlayerPage})),__vite__mapDeps([42,1,2,3,4,5]),import.meta.url)),gy=h(()=>i(()=>import(`./Library-BcuUHsq3.js`).then(e=>({default:e.LibraryPage})),__vite__mapDeps([43,1,2,3,4,10,5,44,21,23,45,46,37,47,40,15]),import.meta.url)),_y=h(()=>i(()=>import(`./Recordings-Ce8DTG1O.js`).then(e=>({default:e.RecordingsPage})),__vite__mapDeps([48,1,2,3,4,10,5,49,46,50,28,51,52,53,40,15]),import.meta.url)),vy=h(()=>i(()=>import(`./Viewer-B6suHwLq.js`).then(e=>({default:e.ViewerPage})),__vite__mapDeps([54,2,3,4,55,5,15,1]),import.meta.url)),yy=h(()=>i(()=>import(`./Build-B8CmNZth.js`).then(e=>({default:e.BuildPage})),__vite__mapDeps([56,1,2,3,4,10,5,31,57,21,46,58,34,32,35,36,59]),import.meta.url)),by=h(()=>i(()=>import(`./CompositionEditorPage-B5Cgu9cj.js`).then(e=>({default:e.CompositionEditorPage})),__vite__mapDeps([60,1,2,3,4,31,5,6,58,34,10,32,35,36]),import.meta.url)),xy=h(()=>i(()=>import(`./Locations-BrPK_nfE.js`).then(e=>({default:e.LocationsPage})),__vite__mapDeps([61,1,2,3,4,10,5,31,62,45,46,38,35,36]),import.meta.url)),Sy=h(()=>i(()=>import(`./Addons-DtmmHLxt.js`).then(e=>({default:e.AddonsPage})),__vite__mapDeps([63,1,2,3,4,21,5,6,18,64,15]),import.meta.url)),Cy=h(()=>i(()=>import(`./AiProfiles-Dr62eghf.js`).then(e=>({default:e.AiProfilesPage})),__vite__mapDeps([65,1,2,3,4,10,5,66,67,6,46,15]),import.meta.url)),wy=h(()=>i(()=>import(`./MyAccess-DjL1Z681.js`).then(e=>({default:e.MyAccessPage})),__vite__mapDeps([68,1,2,3,4,10,5,21,69,70,71,6,46,72,15]),import.meta.url)),Ty=h(()=>i(()=>import(`./Logs-D_Jnlf_J.js`).then(e=>({default:e.LogsPage})),__vite__mapDeps([73,1,2,3,4,74,24,5,6,46,75,76,18,77,19,15,78]),import.meta.url)),Ey=h(()=>i(()=>import(`./Identity-CvFSqL46.js`).then(e=>({default:e.IdentityPage})),__vite__mapDeps([79,1,2,3,4,10,5,80,21,69,70,71,6,46,75,76,18,77,19,15,72,78]),import.meta.url)),Dy=h(()=>i(()=>import(`./Network-DjKf4STc.js`).then(e=>({default:e.NetworkPage})),__vite__mapDeps([81,1,2,3,4,10,5,31,21,14,6,46,75,76,18,77,19,15,78]),import.meta.url)),Oy=h(()=>i(()=>import(`./Integrations-BYiw8_da.js`).then(e=>({default:e.IntegrationsPage})),__vite__mapDeps([82,1,2,3,4,10,5,21,14,70,83,46,75,76,6,18,77,19,15,13]),import.meta.url)),ky=h(()=>i(()=>import(`./Data-ChStbBhF.js`).then(e=>({default:e.DataPage})),__vite__mapDeps([84,1,2,3,4,10,5,85,33,52,6,46,50,28,51,53,40,15]),import.meta.url)),Ay=h(()=>i(()=>import(`./System-HvIXTTB1.js`).then(e=>({default:e.SystemPage})),__vite__mapDeps([86,1,2,3,4,10,5,21,69,6,46,18,77,19,15]),import.meta.url)),jy=h(()=>i(()=>import(`./Cluster-C2D1ovUW.js`).then(e=>({default:e.ClusterPage})),__vite__mapDeps([87,1,2,3,4,10,5,52,88,71,6,18,26,64,53]),import.meta.url)),My=h(()=>i(()=>import(`./Terminal-CwE2WbSi.js`).then(e=>({default:e.TerminalPage})),__vite__mapDeps([89,1,2,3,4,21,5,6,18,90]),import.meta.url)),Ny=h(()=>i(()=>import(`./Notifications-Ck0_YzEY.js`).then(e=>({default:e.NotificationsPage})),__vite__mapDeps([91,1,2,3,4,10,5,30,21,66,92,6,46,59,39,47,15,36]),import.meta.url)),Py=h(()=>i(()=>import(`./History-C6N6VRgs.js`).then(e=>({default:e.HistoryPage})),__vite__mapDeps([93,1,2,3,4,5,6]),import.meta.url)),Fy=h(()=>i(()=>import(`./Calendars-BzsJnrEA.js`).then(e=>({default:e.CalendarsPage})),__vite__mapDeps([94,1,2,3,4,10,5,21,6]),import.meta.url)),Iy=new E({defaultOptions:{queries:{gcTime:0,staleTime:0,retry:!1,refetchOnWindowFocus:!1}}});Ir(Iy);function Ly({field:e,value:t,onChange:n,disabled:r}){return b(Om,{field:e,value:t,onChange:n,disabled:r})}var Ry={"model-selector":Ly};function zy({children:e}){let{t}=B(),{user:n,logout:r}=eu(),[i,a]=C(0),s=f(n?.username??null);x(()=>{let e=n?.username??null;e!==s.current&&(s.current=e,Z(),a(e=>e+1))},[n]);let c=p(()=>X(),[i]),l=y(()=>{X().reconnect(),a(e=>e+1),Iy.invalidateQueries()},[]);Zm(y(()=>vl(l),[l])),x(()=>ml(()=>{X().isSocketTokenStale()&&l()}),[l]);let u=y(async()=>{let e=await yl();return e&&l(),e},[l]),{bootReady:d,bootError:m}=Ym(c,n??null,r,u);return b(Km,{children:b(ze,{system:c,children:b(xn.Provider,{client:c.trpcClient,queryClient:Iy,children:o(An,{children:[b(si,{children:b(oi,{children:d?e:b(By,{})})}),d&&b(Pm,{}),m!==null&&d&&o(`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:`),` `,m,`. Retrying in background.`]})]})})})})}function By(){let{t:e}=B();return b(`div`,{className:`flex min-h-screen items-center justify-center bg-background`,children:o(`div`,{className:`flex items-center gap-3 text-sm text-foreground-subtle`,children:[b(`span`,{className:`h-4 w-4 animate-spin rounded-full border-2 border-primary/30 border-t-primary`}),e(`app.connecting`,`Connecting…`)]})})}function Vy(){return b(`div`,{className:`flex min-h-screen items-center justify-center bg-background`,children:b(`span`,{className:`h-4 w-4 animate-spin rounded-full border-2 border-primary/30 border-t-primary`})})}function Hy(){return b(Dr,{defaultMode:`dark`,children:b(N,{client:Iy,children:b($l,{children:b(zy,{children:b(lr,{children:b(Nm,{children:o(vr,{renderers:Ry,children:[b(os,{basename:Qe(),children:b(Sm,{children:b(v,{fallback:b(Vy,{}),children:o(_o,{children:[b(Y,{path:`/login`,element:b(oy,{})}),b(Y,{path:`/admin/*`,element:b(sy,{})}),b(Y,{path:`/admin`,element:b(sy,{})}),b(Y,{path:`/change-password`,element:b($,{children:b(gv,{})})}),b(Y,{path:`/showroom`,element:b(my,{})}),b(Y,{path:`/embed/player`,element:b(hy,{})}),o(Y,{element:b($,{children:b(xi,{children:b(q_,{})})}),children:[b(Y,{index:!0,element:b(cy,{})}),b(Y,{path:`/access-denied`,element:b(uv,{})}),b(Y,{path:`/dashboard`,element:b(J,{to:`/devices`,replace:!0})}),b(Y,{path:`/devices`,element:b(ly,{})}),b(Y,{path:`/cameras`,element:b(J,{to:`/devices`,replace:!0})}),b(Y,{path:`/integrations`,element:b(uy,{})}),b(Y,{path:`/integrations/:integrationId`,element:b(dy,{})}),b(Y,{path:`/system/pipeline`,element:b(fy,{})}),b(Y,{path:`/pipeline`,element:b(J,{to:`/system/pipeline`,replace:!0})}),b(Y,{path:`/live`,element:b(vy,{})}),b(Y,{path:`/devices/:deviceId`,element:b(py,{})}),b(Y,{path:`/system/logs`,element:b($,{requireAdmin:!0,children:b(Ty,{})})}),b(Y,{path:`/system/addons`,element:b($,{requireAdmin:!0,children:b(Sy,{})})}),b(Y,{path:`/system/ai`,element:b($,{requireAdmin:!0,children:b(Cy,{})})}),b(Y,{path:`/system/settings`,element:b($,{requireAdmin:!0,children:b(Ay,{})})}),b(Y,{path:`/system/nodes`,element:b($,{requireAdmin:!0,children:b(jy,{})})}),b(Y,{path:`/system/notifications`,element:b($,{requireAdmin:!0,children:b(Ny,{})})}),b(Y,{path:`/system/history`,element:b($,{requireAdmin:!0,children:b(Py,{})})}),b(Y,{path:`/system/calendars`,element:b($,{requireAdmin:!0,children:b(Fy,{})})}),b(Y,{path:`/system/identity`,element:b($,{requireAdmin:!0,children:b(Ey,{})})}),b(Y,{path:`/system/my-access`,element:b(wy,{})}),b(Y,{path:`/system/network`,element:b($,{requireAdmin:!0,children:b(Dy,{})})}),b(Y,{path:`/system/integrations`,element:b($,{requireAdmin:!0,children:b(Oy,{})})}),b(Y,{path:`/system/data`,element:b($,{requireAdmin:!0,children:b(ky,{})})}),b(Y,{path:`/system`,element:b(J,{to:Lm,replace:!0})}),b(Y,{path:`/system/terminal`,element:b($,{requireAdmin:!0,children:b(My,{})})}),Rm.map(e=>b(Y,{path:e.path,element:b(Bm,{tab:e.tab})},e.path)),b(Y,{path:`/system/users`,element:b(J,{to:`/system/identity?tab=users`,replace:!0})}),b(Y,{path:`/system/api-keys`,element:b(J,{to:`/system/identity?tab=api-keys`,replace:!0})}),b(Y,{path:`/system/authentication`,element:b(J,{to:ov(`authentication`),replace:!0})}),b(Y,{path:`/system/linked-sessions`,element:b(J,{to:`/system/identity?tab=linked-sessions`,replace:!0})}),b(Y,{path:`/system/remote-access`,element:b(J,{to:ov(`remoteAccess`),replace:!0})}),b(Y,{path:`/system/turn`,element:b(J,{to:ov(`turn`),replace:!0})}),b(Y,{path:`/system/storage`,element:b(J,{to:`/system/data?tab=storage`,replace:!0})}),b(Y,{path:`/system/backup`,element:b(J,{to:`/system/data?tab=backup`,replace:!0})}),b(Y,{path:`/library`,element:b($,{requireAdmin:!0,children:b(gy,{})})}),b(Y,{path:`/retrain`,element:b(J,{to:`/addon/training`,replace:!0})}),b(Y,{path:`/recordings`,element:b($,{requireAdmin:!0,children:b(_y,{})})}),b(Y,{path:`/build`,element:b($,{requireAdmin:!0,children:b(yy,{})})}),b(Y,{path:Y_,element:b($,{requireAdmin:!0,children:b(by,{})})}),b(Y,{path:X_,element:b($,{requireAdmin:!0,children:b(by,{})})}),b(Y,{path:`/locations`,element:b($,{requireAdmin:!0,children:b(xy,{})})}),b(Y,{path:`/automation`,element:b(km,{to:`/build`})}),b(Y,{path:`/addon/:pagePath`,element:b($,{requireAdmin:!0,children:b(ch,{})})}),b(Y,{path:`*`,element:b(J,{to:`/devices`,replace:!0})})]})]})})})}),b(Um,{})]})})})})})})})}D(),window.__camstackUiLibrary=Pr,window.__camstackSdk=mr,window.__camstackTypes=Zt;var Uy=ui(document.getElementById(`root`));Jg(window.location.pathname,Qe())?ty(Uy):Uy.render(b(w,{children:b(Hy,{})}));export{ip as $,nu as $n,md as $t,Zp as A,Yu as An,Qd as At,up as B,hu as Bn,zd as Bt,Gm as C,Zu as Cn,vf as Ct,am as D,Uu as Dn,Kd as Dt,bm as E,Gu as En,Gd as Et,kp as F,xu as Fn,Ud as Ft,Zf as G,du as Gn,Pd as Gt,Qf as H,ou as Hn,Rd as Ht,hp as I,yu as In,Hd as It,cp as J,su as Jn,Md as Jt,Xf as K,gu as Kn,jd as Kt,xp as L,pu as Ln,Wd as Lt,qp as M,td as Mn,ef as Mt,Kp as N,Au as Nn,Xd as Nt,rm as O,ku as On,Yd as Ot,Gp as P,Cu as Pn,Fd as Pt,ep as Q,_u as Qn,gd as Qt,Sp as R,cu as Rn,Ld as Rt,Ph as S,Iu as Sn,af as St,Mm as T,Vu as Tn,tf as Tt,fp as U,fu as Un,Ad as Ut,np as V,au as Vn,Bd as Vt,ap as W,lu as Wn,xd as Wt,mp as X,mu as Xn,bd as Xt,dp as Y,iu as Yn,Nd as Yt,$f as Z,vu as Zn,Cd as Zt,Ag as _,Du as _n,cf as _t,rv as a,zu as an,mc as ar,Vf as at,yg as b,Nu as bn,pf as bt,iv as c,Ku as cn,cc as cr,Pf as ct,cv as d,od as dn,cs as dr,Sf as dt,wd as en,eu as er,Kf as et,Z_ as f,Pu as fn,J as fr,Of as ft,t_ as g,Bu as gn,gs as gr,bf as gt,Q_ as h,nd as hn,Ga as hr,lf as ht,nv as i,Wu as in,dc as ir,Uf as it,$p as j,qu as jn,$d as jt,Xp as k,ju as kn,Zd as kt,ov as l,Ju as ln,nc as lr,nf as lt,$_ as m,Qu as mn,q as mr,ff as mt,Ov as n,Xu as nn,Nc as nr,Gf as nt,ev as o,Hu as on,uc as or,Bf as ot,J_ as p,ed as pn,K as pr,mf as pt,tp as q,uu as qn,Dd as qt,av as r,cd as rn,yc as rr,qf as rt,tv as s,Tu as sn,lc as sr,zf as st,Av as t,Td as tn,Pc as tr,Wf as tt,sv as u,$u as un,Xs as ur,rf as ut,Hg as v,Ou as vn,yf as vt,Lm as w,ld as wn,Cf as wt,eg as x,Fu as xn,hf as xt,Og as y,sd as yn,gf as yt,Cp as z,ru as zn,Vd as zt};
4
+ Please change the parent <Route path="${e}"> to <Route path="${e===`/`?`*`:`${e}/*`}">.`)}let d=K(),f;if(t){let e=typeof t==`string`?Mi(t):t;V(l===`/`||e.pathname?.startsWith(l),`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 "${l}" but pathname "${e.pathname}" was given in the \`location\` prop.`),f=e}else f=d;let p=f.pathname||`/`,m=p;if(l!==`/`){let e=l.replace(/^\//,``).split(`/`);m=`/`+p.replace(/^\//,``).split(`/`).slice(e.length).join(`/`)}let h=n&&n.state.matches.length?n.state.matches.map(e=>Object.assign(e,{route:n.manifest[e.route.id]||e.route})):Fi(e,{pathname:m});H(u||h!=null,`No routes matched location "${f.pathname}${f.search}${f.hash}" `),H(h==null||h[h.length-1].route.element!==void 0||h[h.length-1].route.Component!==void 0||h[h.length-1].route.lazy!==void 0,`Matched leaf route at location "${f.pathname}${f.search}${f.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 g=to(h&&h.map(e=>Object.assign({},e,{params:Object.assign({},s,e.params),pathname:U([l,r.encodeLocation?r.encodeLocation(e.pathname.replace(/%/g,`%25`).replace(/\?/g,`%3F`).replace(/#/g,`%23`)).pathname:e.pathname]),pathnameBase:e.pathnameBase===`/`?l:U([l,r.encodeLocation?r.encodeLocation(e.pathnameBase.replace(/%/g,`%25`).replace(/\?/g,`%3F`).replace(/#/g,`%23`)).pathname:e.pathnameBase])})),i,n);return t&&g?a(Aa.Provider,{value:{location:{pathname:`/`,search:``,hash:``,state:null,key:`default`,mask:void 0,...f},navigationType:`POP`}},g):g}function Ya(){let e=uo(),t=ha(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},o={padding:`2px 4px`,backgroundColor:r},s=null;return console.error(`Error handled by React Router default ErrorBoundary:`,e),s=a(u,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:o},`ErrorBoundary`),` or`,` `,a(`code`,{style:o},`errorElement`),` prop on your route.`)),a(u,null,a(`h2`,null,`Unexpected Application Error!`),a(`h3`,{style:{fontStyle:`italic`}},t),n?a(`pre`,{style:i},n):null,s)}var Xa=a(Ya,null),Za=class extends c{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=Ia(e.digest);t&&(e=t)}let t=e===void 0?this.props.children:a(G.Provider,{value:this.props.routeContext},a(ja.Provider,{value:e,children:this.props.component}));return this.context?a($a,{error:e},t):t}};Za.contextType=Ta;var Qa=new WeakMap;function $a({children:e,error:t}){let{basename:n}=F(W);if(typeof t==`object`&&t&&`digest`in t&&typeof t.digest==`string`){let e=Fa(t.digest);if(e){let r=Qa.get(t);if(r)throw r;let i=va(e.location,n),o=i.absoluteURL||i.to;if(Sa(o))throw Error(`Invalid redirect location`);if(_a&&!Qa.get(t))if(i.isExternal||e.reloadDocument)window.location.href=o;else{let n=Promise.resolve().then(()=>window.__reactRouterDataRouter.navigate(i.to,{replace:e.replace}));throw Qa.set(t,n),n}return a(`meta`,{httpEquiv:`refresh`,content:`0;url=${o}`})}}return e}function eo({routeContext:e,match:t,children:n}){let r=F(Ca);return r&&r.static&&r.staticContext&&(t.route.errorElement||t.route.ErrorBoundary)&&(r.staticContext._deepestRenderedBoundaryId=t.route.id),a(G.Provider,{value:e},n)}function to(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,o=r?.errors;if(o!=null){let e=i.findIndex(e=>e.route.id&&o?.[e.route.id]!==void 0);V(e>=0,`Could not find a matching route for errors on route IDs: ${Object.keys(o).join(`,`)}`),i=i.slice(0,Math.min(i.length,e+1))}let s=!1,c=-1;if(n&&r){s=r.renderFallback;for(let e=0;e<i.length;e++){let t=i[e];if((t.route.HydrateFallback||t.route.hydrateFallbackElement)&&(c=e),t.route.id){let{loaderData:e,errors:a}=r,o=t.route.loader&&!e.hasOwnProperty(t.route.id)&&(!a||a[t.route.id]===void 0);if(t.route.lazy||o){n.isStatic&&(s=!0),i=c>=0?i.slice(0,c+1):[i[0]];break}}}}let l=n?.onError,u=r&&l?(e,t)=>{l(e,{location:r.location,params:r.matches?.[0]?.params??{},pattern:ga(r.matches),errorInfo:t})}:void 0;return i.reduceRight((e,n,l)=>{let d,f=!1,p=null,m=null;r&&(d=o&&n.route.id?o[n.route.id]:void 0,p=n.route.errorElement||Xa,s&&(c<0&&l===0?(mo(`route-fallback`,!1,"No `HydrateFallback` element provided to render during initial hydration"),f=!0,m=null):c===l&&(f=!0,m=n.route.hydrateFallbackElement||null)));let h=t.concat(i.slice(0,l+1)),g=()=>{let t;return t=d?p:f?m:n.route.Component?a(n.route.Component,null):n.route.element?n.route.element:e,a(eo,{match:n,routeContext:{outlet:e,matches:h,isDataRoute:r!=null},children:t})};return r&&(n.route.ErrorBoundary||n.route.errorElement||l===0)?a(Za,{location:r.location,revalidation:r.revalidation,component:p,error:d,children:g(),routeContext:{outlet:null,matches:h,isDataRoute:!0},onError:u}):g()},null)}function no(e){return`${e} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function ro(e){let t=F(Ca);return V(t,no(e)),t}function io(e){let t=F(wa);return V(t,no(e)),t}function ao(e){let t=F(G);return V(t,no(e)),t}function oo(e){let t=ao(e),n=t.matches[t.matches.length-1];return V(n.route.id,`${e} can only be used on routes that contain a unique "id"`),n.route.id}function so(){return oo(`useRouteId`)}function co(){let e=io(`useNavigation`);return p(()=>{let{matches:t,historyAction:n,...r}=e.navigation;return r},[e.navigation])}function lo(){let{matches:e,loaderData:t}=io(`useMatches`);return p(()=>e.map(e=>Li(e,t)),[e,t])}function uo(){let e=F(ja),t=io(`useRouteError`),n=oo(`useRouteError`);return e===void 0?t.errors?.[n]:e}function fo(){let{router:e}=ro(`useNavigate`),t=oo(`useNavigate`),n=f(!1);return Va(()=>{n.current=!0}),y(async(r,i={})=>{H(n.current,Ba),n.current&&(typeof r==`number`?await e.navigate(r):await e.navigate(r,{fromRouteId:t,...i}))},[e,t])}var po={};function mo(e,t,n){!t&&!po[e]&&(po[e]=!0,H(!1,n))}_(ho);function ho({routes:e,manifest:t,future:n,state:r,isStatic:i,onError:a}){return Ja(e,void 0,{manifest:t,state:r,isStatic:i,onError:a,future:n})}function J({to:e,replace:t,state:n,relative:r}){V(Ra(),`<Navigate> may be used only in the context of a <Router> component.`);let{static:i}=F(W);H(!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}=F(G),{pathname:o}=K(),s=q(),c=ca(e,sa(a),o,r===`path`),l=JSON.stringify(c);return x(()=>{s(JSON.parse(l),{replace:t,state:n,relative:r})},[s,l,r,t,n]),null}function Y(e){V(!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 go({basename:e=`/`,children:t=null,location:n,navigationType:r=`POP`,navigator:i,static:o=!1,useTransitions:s}){V(!Ra(),`You cannot render a <Router> inside another <Router>. You should never have more than one in your app.`);let c=e.replace(/^\/*/,`/`),l=p(()=>({basename:c,navigator:i,static:o,useTransitions:s,future:{}}),[c,i,o,s]);typeof n==`string`&&(n=Mi(n));let{pathname:u=`/`,search:d=``,hash:f=``,state:m=null,key:h=`default`,mask:g}=n,_=p(()=>{let e=na(u,c);return e==null?null:{location:{pathname:e,search:d,hash:f,state:m,key:h,mask:g},navigationType:r}},[c,u,d,f,m,h,r,g]);return H(_!=null,`<Router basename="${c}"> is not able to match the URL "${u}${d}${f}" because it does not start with the basename, so the <Router> won't render anything.`),_==null?null:a(W.Provider,{value:l},a(Aa.Provider,{children:t,value:_}))}function _o({children:e,location:t}){return qa(vo(e),t)}function vo(e,t=[]){let n=[];return s.forEach(e,(e,r)=>{if(!m(e))return;let i=[...t,r];if(e.type===u){n.push.apply(n,vo(e.props.children,i));return}V(e.type===Y,`[${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>`),V(!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=vo(e.props.children,i)),n.push(a)}),n}var yo=`get`,bo=`application/x-www-form-urlencoded`;function xo(e){return typeof HTMLElement<`u`&&e instanceof HTMLElement}function So(e){return xo(e)&&e.tagName.toLowerCase()===`button`}function Co(e){return xo(e)&&e.tagName.toLowerCase()===`form`}function wo(e){return xo(e)&&e.tagName.toLowerCase()===`input`}function To(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}function Eo(e,t){return e.button===0&&(!t||t===`_self`)&&!To(e)}function Do(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 Oo(e,t){let n=Do(e);return t&&t.forEach((e,r)=>{n.has(r)||t.getAll(r).forEach(e=>{n.append(r,e)})}),n}var ko=null;function Ao(){if(ko===null)try{new FormData(document.createElement(`form`),0),ko=!1}catch{ko=!0}return ko}var jo=new Set([`application/x-www-form-urlencoded`,`multipart/form-data`,`text/plain`]);function Mo(e){return e!=null&&!jo.has(e)?(H(!1,`"${e}" is not a valid \`encType\` for \`<Form>\`/\`<fetcher.Form>\` and will default to "${bo}"`),null):e}function No(e,t){let n,r,i,a,o;if(Co(e)){let o=e.getAttribute(`action`);r=o?na(o,t):null,n=e.getAttribute(`method`)||yo,i=Mo(e.getAttribute(`enctype`))||bo,a=new FormData(e)}else if(So(e)||wo(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?na(s,t):null,n=e.getAttribute(`formmethod`)||o.getAttribute(`method`)||yo,i=Mo(e.getAttribute(`formenctype`))||Mo(o.getAttribute(`enctype`))||bo,a=new FormData(o,e),!Ao()){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(xo(e))throw Error(`Cannot submit element that is not <form>, <button>, or <input type="submit|image">`);else n=yo,r=null,i=bo,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 Po={"&":`\\u0026`,">":`\\u003e`,"<":`\\u003c`,"\u2028":`\\u2028`,"\u2029":`\\u2029`},Fo=/[&><\u2028\u2029]/g;function Io(e){return e.replace(Fo,e=>Po[e])}function Lo(e,t){if(e===!1||e==null)throw Error(t)}function Ro(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&&na(i.pathname,t)===`/`?i.pathname=`${ua(t)}/_root.${r}`:i.pathname=`${ua(i.pathname)}.${r}`,i}async function zo(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 Bo(e){return e!=null&&typeof e.page==`string`}function Vo(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 Ho(e,t,n){return qo((await Promise.all(e.map(async e=>{let r=t.routes[e.route.id];if(r){let e=await zo(r,n);return e.links?e.links():[]}return[]}))).flat(1).filter(Vo).filter(e=>e.rel===`stylesheet`||e.rel===`preload`).map(e=>e.rel===`stylesheet`?{...e,rel:`prefetch`,as:`style`}:{...e,rel:`prefetch`}))}function Uo(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 Wo(e,t,{includeHydrateFallback:n}={}){return Go(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 Go(e){return[...new Set(e)]}function Ko(e){let t={},n=Object.keys(e).sort();for(let r of n)t[r]=e[r];return t}function qo(e,t){let n=new Set,r=new Set(t);return e.reduce((e,i)=>{if(t&&!Bo(i)&&i.as===`script`&&i.href&&r.has(i.href))return e;let a=JSON.stringify(Ko(i));return n.has(a)||(n.add(a),e.push({key:a,link:i})),e},[])}function Jo(){let e=F(Ca);return Lo(e,`You must render this element inside a <DataRouterContext.Provider> element`),e}function Yo(){let e=F(wa);return Lo(e,`You must render this element inside a <DataRouterStateContext.Provider> element`),e}var Xo=A(void 0);Xo.displayName=`FrameworkContext`;function Zo(){let e=F(Xo);return Lo(e,`You must render this element inside a <HydratedRouter> element`),e}function Qo(e,t){let n=F(Xo),[r,i]=C(!1),[a,o]=C(!1),{onFocus:s,onBlur:c,onMouseEnter:l,onMouseLeave:u,onTouchStart:d}=t,p=f(null);x(()=>{if(e===`render`&&o(!0),e===`viewport`){let e=new IntersectionObserver(e=>{e.forEach(e=>{o(e.isIntersecting)})},{threshold:.5});return p.current&&e.observe(p.current),()=>{e.disconnect()}}},[e]),x(()=>{if(r){let e=setTimeout(()=>{o(!0)},100);return()=>{clearTimeout(e)}}},[r]);let m=()=>{i(!0)},h=()=>{i(!1),o(!1)};return n?e===`intent`?[a,p,{onFocus:$o(s,m),onBlur:$o(c,h),onMouseEnter:$o(l,m),onMouseLeave:$o(u,h),onTouchStart:$o(d,m)}]:[a,p,{}]:[!1,p,{}]}function $o(e,t){return n=>{e&&e(n),n.defaultPrevented||t(n)}}function es({page:e,...t}){let n=Ea(),{nonce:r}=Zo(),{router:i}=Jo(),o=p(()=>Fi(i.routes,e,i.basename),[i.routes,e,i.basename]);return o?(t.nonce==null&&r&&(t={...t,nonce:r}),a(n?ns:rs,{page:e,matches:o,...t})):null}function ts(e){let{manifest:t,routeModules:n}=Zo(),[r,i]=C([]);return x(()=>{let r=!1;return Ho(e,t,n).then(e=>{r||i(e)}),()=>{r=!0}},[e,t,n]),r}function ns({page:e,matches:t,...n}){let r=K(),{future:i}=Zo(),{basename:o}=Jo();return a(u,null,p(()=>{if(e===r.pathname+r.search+r.hash)return[];let n=Ro(e,o,i.v8_trailingSlashAwareDataRequests,`rsc`),a=!1,s=[];for(let e of t)typeof e.route.shouldRevalidate==`function`?a=!0:s.push(e.route.id);return a&&s.length>0&&n.searchParams.set(`_routes`,s.join(`,`)),[n.pathname+n.search]},[o,i.v8_trailingSlashAwareDataRequests,e,r,t]).map(e=>a(`link`,{key:e,rel:`prefetch`,as:`fetch`,href:e,...n})))}function rs({page:e,matches:t,...n}){let r=K(),{future:i,manifest:o,routeModules:s}=Zo(),{basename:c}=Jo(),{loaderData:l,matches:d}=Yo(),f=p(()=>Uo(e,t,d,o,r,`data`),[e,t,d,o,r]),m=p(()=>Uo(e,t,d,o,r,`assets`),[e,t,d,o,r]),h=p(()=>{if(e===r.pathname+r.search+r.hash)return[];let n=new Set,a=!1;if(t.forEach(e=>{let t=o.routes[e.route.id];!t||!t.hasLoader||(!f.some(t=>t.route.id===e.route.id)&&e.route.id in l&&s[e.route.id]?.shouldRevalidate||t.hasClientLoader?a=!0:n.add(e.route.id))}),n.size===0)return[];let u=Ro(e,c,i.v8_trailingSlashAwareDataRequests,`data`);return a&&n.size>0&&u.searchParams.set(`_routes`,t.filter(e=>n.has(e.route.id)).map(e=>e.route.id).join(`,`)),[u.pathname+u.search]},[c,i.v8_trailingSlashAwareDataRequests,l,r,o,f,t,e,s]),g=p(()=>Wo(m,o),[m,o]),_=ts(m);return a(u,null,h.map(e=>a(`link`,{key:e,rel:`prefetch`,as:`fetch`,href:e,...n})),g.map(e=>a(`link`,{key:e,rel:`modulepreload`,href:e,...n})),_.map(({key:e,link:t})=>a(`link`,{key:e,nonce:n.nonce,...t,crossOrigin:t.crossOrigin??n.crossOrigin})))}function is(...e){return t=>{e.forEach(e=>{typeof e==`function`?e(t):e!=null&&(e.current=t)})}}var as=typeof window<`u`&&window.document!==void 0&&window.document.createElement!==void 0;try{as&&(window.__reactRouterVersion=`7.18.0`)}catch{}function os({basename:e,children:t,useTransitions:n,window:r}){let i=f();i.current??=Di({window:r,v5Compat:!0});let o=i.current,[s,c]=C({action:o.action,location:o.location}),u=y(e=>{n===!1?c(e):d(()=>c(e))},[n]);return l(()=>o.listen(u),[o,u]),a(go,{basename:e,children:t,location:s.location,navigationType:s.action,navigator:o,useTransitions:n})}function ss({basename:e,children:t,history:n,useTransitions:r}){let[i,o]=C({action:n.action,location:n.location}),s=y(e=>{r===!1?o(e):d(()=>o(e))},[r]);return l(()=>n.listen(s),[n,s]),a(go,{basename:e,children:t,location:i.location,navigationType:i.action,navigator:n,useTransitions:r})}ss.displayName=`unstable_HistoryRouter`;var cs=k(function({onClick:e,discover:t=`render`,prefetch:n=`none`,relative:r,reloadDocument:i,replace:o,mask:s,state:c,target:l,to:d,preventScrollReset:f,viewTransition:p,defaultShouldRevalidate:m,...h},g){let{basename:_,navigator:v,useTransitions:y}=F(W),b=typeof d==`string`&&Si.test(d),x=va(d,_);d=x.to;let S=La(d,{relative:r}),C=K(),w=null;if(s){let e=ca(s,[],C.mask?C.mask.pathname:`/`,!0);_!==`/`&&(e.pathname=e.pathname===`/`?_:U([_,e.pathname])),w=v.createHref(e)}let[T,E,D]=Qo(n,h),O=hs(d,{replace:o,mask:s,state:c,target:l,preventScrollReset:f,relative:r,viewTransition:p,defaultShouldRevalidate:m,useTransitions:y});function k(t){e&&e(t),t.defaultPrevented||O(t)}let A=!(x.isExternal||i),j=a(`a`,{...h,...D,href:(A?w:void 0)||x.absoluteURL||S,onClick:A?k:e,ref:is(g,E),target:l,"data-discover":!b&&t===`render`?`true`:void 0});return T&&!b?a(u,null,j,a(es,{page:S})):j});cs.displayName=`Link`;var ls=k(function({"aria-current":e=`page`,caseSensitive:t=!1,className:n=``,end:r=!1,style:i,to:o,viewTransition:s,children:c,...l},u){let d=Ka(o,{relative:l.relative}),f=K(),p=F(wa),{navigator:m,basename:h}=F(W),g=p!=null&&Es(d)&&s===!0,_=m.encodeLocation?m.encodeLocation(d).pathname:d.pathname,v=f.pathname,y=p&&p.navigation&&p.navigation.location?p.navigation.location.pathname:null;t||(v=v.toLowerCase(),y=y?y.toLowerCase():null,_=_.toLowerCase()),y&&h&&(y=na(y,h)||y);let b=_!==`/`&&_.endsWith(`/`)?_.length-1:_.length,x=v===_||!r&&v.startsWith(_)&&v.charAt(b)===`/`,S=y!=null&&(y===_||!r&&y.startsWith(_)&&y.charAt(_.length)===`/`),C={isActive:x,isPending:S,isTransitioning:g},w=x?e:void 0,T;T=typeof n==`function`?n(C):[n,x?`active`:null,S?`pending`:null,g?`transitioning`:null].filter(Boolean).join(` `);let E=typeof i==`function`?i(C):i;return a(cs,{...l,"aria-current":w,className:T,ref:u,style:E,to:o,viewTransition:s},typeof c==`function`?c(C):c)});ls.displayName=`NavLink`;var us=k(({discover:e=`render`,fetcherKey:t,navigate:n,reloadDocument:r,replace:i,state:o,method:s=yo,action:c,onSubmit:l,relative:u,preventScrollReset:f,viewTransition:p,defaultShouldRevalidate:m,...h},g)=>{let{useTransitions:_}=F(W),v=ys(),y=bs(c,{relative:u}),b=s.toLowerCase()===`get`?`get`:`post`,x=typeof c==`string`&&Si.test(c);return a(`form`,{ref:g,method:b,action:y,onSubmit:r?l:e=>{if(l&&l(e),e.defaultPrevented)return;e.preventDefault();let r=e.nativeEvent.submitter,a=r?.getAttribute(`formmethod`)||s,c=()=>v(r||e.currentTarget,{fetcherKey:t,method:a,navigate:n,replace:i,state:o,relative:u,preventScrollReset:f,viewTransition:p,defaultShouldRevalidate:m});_&&n!==!1?d(()=>c()):c()},...h,"data-discover":!x&&e===`render`?`true`:void 0})});us.displayName=`Form`;function ds({getKey:e,storageKey:t,...n}){let r=F(Xo),{basename:i}=F(W),o=K(),s=lo();ws({getKey:e,storageKey:t});let c=p(()=>{if(!r||!e)return null;let t=Cs(o,s,i,e);return t===o.key?null:t},[]);if(!r||r.isSpaMode)return null;let l=((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:`(${l})(${Io(JSON.stringify(t||xs))}, ${Io(JSON.stringify(c))})`}})}ds.displayName=`ScrollRestoration`;function fs(e){return`${e} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function ps(e){let t=F(Ca);return V(t,fs(e)),t}function ms(e){let t=F(wa);return V(t,fs(e)),t}function hs(e,{target:t,replace:n,mask:r,state:i,preventScrollReset:a,relative:o,viewTransition:s,defaultShouldRevalidate:c,useTransitions:l}={}){let u=q(),f=K(),p=Ka(e,{relative:o});return y(m=>{if(Eo(m,t)){m.preventDefault();let t=n===void 0?ji(f)===ji(p):n,h=()=>u(e,{replace:t,mask:r,state:i,preventScrollReset:a,relative:o,viewTransition:s,defaultShouldRevalidate:c});l?d(()=>h()):h()}},[f,u,p,n,r,i,t,e,a,o,s,c,l])}function gs(e){H(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=f(Do(e)),n=f(!1),r=K(),i=p(()=>Oo(r.search,n.current?null:t.current),[r.search]),a=q();return[i,y((e,t)=>{let r=Do(typeof e==`function`?e(new URLSearchParams(i)):e);n.current=!0,a(`?`+r,t)},[a,i])]}var _s=0,vs=()=>`__${String(++_s)}__`;function ys(){let{router:e}=ps(`useSubmit`),{basename:t}=F(W),n=so(),r=e.fetch,i=e.navigate;return y(async(e,a={})=>{let{action:o,method:s,encType:c,formData:l,body:u}=No(e,t);a.navigate===!1?await r(a.fetcherKey||vs(),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 bs(e,{relative:t}={}){let{basename:n}=F(W),r=F(G);V(r,`useFormAction must be used inside a RouteContext`);let[i]=r.matches.slice(-1),a={...Ka(e||`.`,{relative:t})},o=K();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:U([n,a.pathname])),ji(a)}var xs=`react-router-scroll-positions`,Ss={};function Cs(e,t,n,r){let i=null;return r&&(i=r(n===`/`?e:{...e,pathname:na(e.pathname,n)||e.pathname},t)),i??=e.key,i}function ws({getKey:e,storageKey:t}={}){let{router:n}=ps(`useScrollRestoration`),{restoreScrollPosition:r,preventScrollReset:i}=ms(`useScrollRestoration`),{basename:a}=F(W),o=K(),s=lo(),c=co();x(()=>(window.history.scrollRestoration=`manual`,()=>{window.history.scrollRestoration=`auto`}),[]),Ts(y(()=>{if(c.state===`idle`){let t=Cs(o,s,a,e);Ss[t]=window.scrollY}try{sessionStorage.setItem(t||xs,JSON.stringify(Ss))}catch(e){H(!1,`Failed to save scroll positions in sessionStorage, <ScrollRestoration /> will not work properly (${e}).`)}window.history.scrollRestoration=`auto`},[c.state,e,a,o,s,t])),typeof document<`u`&&(l(()=>{try{let e=sessionStorage.getItem(t||xs);e&&(Ss=JSON.parse(e))}catch{}},[t]),l(()=>{let t=n?.enableScrollRestoration(Ss,()=>window.scrollY,e?(t,n)=>Cs(t,n,a,e):void 0);return()=>t&&t()},[n,a,e]),l(()=>{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{H(!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 Ts(e,t){let{capture:n}=t||{};x(()=>{let t=n==null?void 0:{capture:n};return window.addEventListener(`pagehide`,e,t),()=>{window.removeEventListener(`pagehide`,e,t)}},[e,n])}function Es(e,{relative:t}={}){let n=F(Da);V(n!=null,"`useViewTransitionState` must be used within `react-router-dom`'s `RouterProvider`. Did you accidentally import `RouterProvider` from `react-router`?");let{basename:r}=ps(`useViewTransitionState`),i=Ka(e,{relative:t});if(!n.isTransitioning)return!1;let a=na(n.currentLocation.pathname,r)||n.currentLocation.pathname,o=na(n.nextLocation.pathname,r)||n.nextLocation.pathname;return Qi(i.pathname,o)!=null||Qi(i.pathname,a)!=null}var Ds=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}}))()),Os=/\s([^'"/\s><]+?)[\s/>]|([^\s=]+)=\s?(".*?"|'.*?')/g;function ks(e){var t={type:`tag`,name:``,voidElement:!1,attrs:{},children:[]},n=e.match(/<\/?([^\s]+?)[/\s>]/);if(n&&(t.name=n[1],(Ds.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(Os),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 As=/<[a-zA-Z0-9\-\!\/](?:"[^"]*"|'[^']*'|[^'">])*>/g,js=/^\s*$/,Ms=Object.create(null);function Ns(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(Ns,``)+`</`+t.name+`>`;case`comment`:return e+`<!--`+t.comment+`-->`}}var Ps={parse:function(e,t){t||={},t.components||=Ms;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(As,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=ks(s);return a<0?(r.push(m),r):((l=i[a]).children.push(m),r)}if(u&&(a++,(n=ks(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);js.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+Ns(``,t)},``)}};D();var Fs=(e,t)=>{if(!e)return!1;let n=e.props?.children??e.children;return t?n.length>0:!!n},Is=e=>{if(!e)return[];let t=e.props?.children??e.children;return e.props?.i18nIsDynamicList?Rs(t):t},Ls=e=>Array.isArray(e)&&e.every(m),Rs=e=>Array.isArray(e)?e:[e],zs=(e,t)=>{let n={...t};return n.props={...t.props,...e.props},n},Bs=e=>{let t={};if(!e)return t;let n=e=>{Rs(e).forEach(e=>{pi(e)||(Fs(e)?n(Is(e)):vi(e)&&!m(e)&&Object.assign(t,e))})};return n(e),t},Vs=(e,t,n,r)=>{if(!e)return``;let i=``,a=Rs(e),o=t?.transSupportBasicHtmlNodes?t.transKeepBasicHtmlNodesFor??[]:[];return a.forEach((e,a)=>{if(pi(e)){i+=`${e}`;return}if(m(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=pi(d)?d:Vs(d,t,n,r);i+=`<${c}>${e}</${c}>`;return}let f=Vs(d,t,n,r);i+=`<${a}>${f}</${a}>`;return}if(e===null){hi(n,`TRANS_NULL_VALUE`,`Passed in a null value as child`,{i18nKey:r});return}if(vi(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}hi(n,`TRANS_INVALID_OBJ`,`Invalid child - Object should only have keys {{ value, format }} (format is optional).`,{i18nKey:r,child:e});return}hi(n,`TRANS_INVALID_VAR`,`Passed in a variable like {number} - pass variables for interpolation as full objects like {{number}}.`,{i18nKey:r,child:e})}),i},Hs=(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},Us=(e,t,n,r,i,o,c)=>{if(n===``)return[];let l=i.transKeepBasicHtmlNodesFor||[],d=n&&new RegExp(l.map(e=>`<${e}`).join(`|`)).test(n);if(!e&&!t&&!d&&!c)return[n];let f=t??{},p=e=>{Rs(e).forEach(e=>{pi(e)||(Fs(e)?p(Is(e)):vi(e)&&!m(e)&&Object.assign(f,e))})};p(e);let h=Hs(n,l,f),_=Ps.parse(`<0>${h}</0>`),v={...f,...o},y=(e,t,n)=>{let r=Is(e),i=x(r,t.children,n);return Ls(r)&&i.length===0||e.props?.i18nIsDynamicList?r:i},b=(e,t,n,r,i)=>{e.dummy?(e.children=t,n.push(g(e,{key:r},i?void 0:t))):n.push(...s.map([e],e=>{if(e.type===u||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])}),g(e,n,i?null:t)}))},x=(e,n,o)=>{let s=Rs(e),u=Rs(n),f={};return u.reduce((e,n,u)=>{let p=n.children?.[0]?.content&&r.services.interpolator.interpolate(n.children[0].content,v,r.language);if(n.type===`tag`){let h=s[parseInt(n.name,10)];!h&&t&&(h=t[n.name]),o.length===1&&!h&&(h=o[0][n.name]),h||={};let g={...n.attrs};c&&Object.keys(g).forEach(e=>{let t=g[e];pi(t)&&(g[e]=_i(t))});let _=Object.keys(g).length===0?h:zs({props:g},h),S=m(_),C=S&&Fs(n,!0)&&!n.voidElement,w=d&&vi(_)&&_.dummy&&!S,T=vi(t)&&Object.hasOwnProperty.call(t,n.name);if(pi(_)){let t=r.services.interpolator.interpolate(_,v,r.language);e.push(t)}else if(Fs(_)||C)b(_,y(_,n,o),e,u);else if(w)b(_,x(s,n.children,o),e,u);else if(Number.isNaN(parseFloat(n.name)))if(T)b(_,y(_,n,o),e,u,n.voidElement);else if(i.transSupportBasicHtmlNodes&&l.indexOf(n.name)>-1)if(n.voidElement)e.push(a(n.name,{key:`${n.name}-${u}`}));else{let t=f[n.name]||0;f[n.name]=t+1;let r,i=0;for(let e=0;e<s.length;e+=1){let a=s[e];if(m(a)&&a.type===n.name){if(i===t){r=a;break}i+=1}}let c=x(r?Rs(Is(r)):s,n.children,o);e.push(a(n.name,{key:`${n.name}-${u}`},c))}else if(n.voidElement)e.push(`<${n.name} />`);else{let t=x(s,n.children,o);e.push(`<${n.name}>${t}</${n.name}>`)}else if(vi(_)&&!S){let t=n.children[0]?p:null;t&&e.push(t)}else b(_,p,e,u,n.children.length!==1||!p)}else if(n.type===`text`){let t=i.transWrapTextNodes,o=typeof i.unescape==`function`?i.unescape:fi().unescape,s=c?o(r.services.interpolator.interpolate(n.content,v,r.language)):r.services.interpolator.interpolate(n.content,v,r.language);t?e.push(a(t,{key:`${n.name}-${u}`},s)):e.push(s)}return e},[])};return Is(x([{dummy:!0,children:e||[]}],_,Rs(e||[]))[0])},Ws=(e,t,n)=>{let r=e.key||t,i=g(e,{key:r});if(!i.props||!i.props.children||n.indexOf(`${t}/>`)<0&&n.indexOf(`${t} />`)<0)return i;function o(){return a(u,null,i)}return a(o,{key:r})},Gs=(e,t)=>e.map((e,n)=>Ws(e,n,t)),Ks=(e,t)=>{let n={};return Object.keys(e).forEach(r=>{Object.assign(n,{[r]:Ws(e[r],r,t)})}),n},qs=(e,t,n,r)=>e?Array.isArray(e)?Gs(e,t):vi(e)?Ks(e,t):(yi(n,`TRANS_INVALID_COMPONENTS`,`<Trans /> "components" prop expects an object or array`,{i18nKey:r}),null):null,Js=e=>!vi(e)||Array.isArray(e)?!1:Object.keys(e).reduce((e,t)=>e&&Number.isNaN(Number.parseFloat(t)),!0);function Ys({children:e,count:t,parent:n,i18nKey:r,context:i,tOptions:o={},values:s,defaults:c,components:l,ns:u,i18n:d,t:f,shouldUnescape:p,...m}){let h=d||mi();if(!h)return yi(h,`NO_I18NEXT_INSTANCE`,`Trans: You need to pass in an i18next instance using i18nextReactModule`,{i18nKey:r}),e;let g=f||h.t.bind(h)||(e=>e),_={...fi(),...h.options?.react},v=u||g.ns||h.options?.defaultNS;v=pi(v)?[v]:v||[`translation`];let{transDefaultProps:y}=_,b=y?.tOptions?{...y.tOptions,...o}:o,x=p??y?.shouldUnescape,S=y?.values?{...y.values,...s}:s,C=y?.components?{...y.components,...l}:l,w=Vs(e,_,h,r),T=c||b?.defaultValue||w||_.transEmptyNodeValue||(typeof r==`function`?di(r):r),{hashTransKey:E}=_,D=r||(E?E(w||T):w||T);s=h.options?.interpolation?.defaultVariables?S&&Object.keys(S).length>0?{...S,...h.options.interpolation.defaultVariables}:{...h.options.interpolation.defaultVariables}:S;let O=Bs(e);O&&typeof O.count==`number`&&t===void 0&&(t=O.count);let k=s||t!==void 0&&!h.options?.interpolation?.alwaysFormat||!e?b.interpolation:{interpolation:{...b.interpolation,prefix:`#$?`,suffix:`?$#`}},A={...b,context:i||b.context,count:t,...s,...k,defaultValue:T,ns:v},j=D?g(D,A):T;j===D&&T&&(j=T);let M=qs(C,j,h,r),N=M||e,P=null;Js(M)&&(P=M,N=e);let F=Us(N,P,j,h,_,A,x),ee=n??_.defaultTransParent;return ee?a(ee,m,F):F}D();function Xs({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}=F(gi)||{},g=u||m||mi(),_=d||g?.t.bind(g);return Ys({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 Zs(e,t){return t.map(t=>({subject:{kind:`device`,deviceId:e},key:t.key,scope:t.scope}))}function Qs({deviceId:e}){let{t}=B(),{presence:n,list:r}=Br(e);return n===`absent`?null:n===`unknown`?b(er,{message:t(`deviceQuickDetail.historyUnknown`,`Could not tell whether this device has recorded history.`)}):n===`pending`||r.status===`pending`?b(Wn,{className:`h-24 w-full`,"aria-busy":`true`}):r.status===`error`?b(er,{title:t(`deviceQuickDetail.historyUnknown`,`Could not tell whether this device has recorded history.`),message:r.error}):r.data.length===0?null:o(`section`,{className:`flex flex-col gap-2`,"aria-label":t(`deviceQuickDetail.tabHistory`,`History`),children:[b(`div`,{className:`flex justify-end`,children:b(cs,{to:ni(Zs(e,r.data)),className:`text-xs text-primary hover:underline`,children:t(`deviceQuickDetail.openHistory`,`Open full history`)})}),b(kr,{deviceId:e})]})}function $s(e,t){return e===`present`&&t.status===`ok`&&(t.data?.length??0)>0}var ec={streaming:{icon:vn,labelKey:`capabilityBadges.streaming`},detection:{icon:at,labelKey:`capabilityBadges.detection`},recording:{icon:Je,labelKey:`capabilityBadges.recording`},audio:{icon:Ce,labelKey:`capabilityBadges.audio`},snapshot:{icon:ue,labelKey:`capabilityBadges.snapshot`},motion:{icon:et,labelKey:`capabilityBadges.motion`},ptz:{icon:ke,labelKey:`capabilityBadges.ptz`},webrtc:{icon:he,labelKey:`capabilityBadges.webrtc`},onvif:{icon:Ke,labelKey:`capabilityBadges.onvif`},analytics:{icon:we,labelKey:`capabilityBadges.analytics`},"battery-operated":{icon:ye,labelKey:`capabilityBadges.battery`},"native-snapshot":{icon:ue,labelKey:`capabilityBadges.nativeSnapshot`},"pan-tilt-zoom":{icon:ke,labelKey:`capabilityBadges.ptz`},"two-way-audio":{icon:Ce,labelKey:`capabilityBadges.twoWayAudio`},"doorbell-button":{icon:me,labelKey:`capabilityBadges.doorbell`},rebootable:{icon:rt,labelKey:`capabilityBadges.rebootable`},"vacuum-has-map":{icon:mn,labelKey:`capabilityBadges.map`},"vacuum-has-ai":{icon:pe,labelKey:`capabilityBadges.aiObstacle`},"mower-has-map":{icon:mn,labelKey:`capabilityBadges.map`},"mower-has-targeted-mowing":{icon:ae,labelKey:`capabilityBadges.targetedMowing`}},tc=le;function nc({capabilities:e,showLabels:t=!1}){let{t:n}=B();return b(`div`,{className:`flex items-center gap-1 flex-wrap`,children:e.map(e=>{let r=ec[e],i=r?.icon??tc,a=r?n(r.labelKey):e;return o(`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:[b(i,{className:`h-3 w-3`}),t&&b(`span`,{children:a})]},e)})})}D();var rc={amcrest:{icon:fn,color:`#3b82f6`,label:`Amcrest`},hikvision:{icon:Me,color:`#a855f7`,label:`Hikvision`},reolink:{icon:he,color:`#06b6d4`,label:`Reolink`},homeassistant:{icon:it,color:`#22d3ee`,label:`Home Assistant`},rtsp:{icon:Ie,color:`#78716c`,label:`RTSP`},onvif:{icon:Ie,color:`#78716c`,label:`ONVIF`}},ic={sm:`h-4 w-4`,md:`h-5 w-5`,lg:`h-6 w-6`,xl:`h-16 w-16`},ac={sm:`h-7 w-7`,md:`h-8 w-8`,lg:`h-10 w-10`,xl:`h-16 w-16`};function oc(e){let t=e.toLowerCase();return t.startsWith(`provider-`)?t.slice(9):t}function sc(e){return rc[oc(e)]??{icon:fn,color:`#78716c`,label:e}}function cc({type:e,size:t=`md`,showLabel:n}){let r=sc(e),i=r.icon,[a,s]=C(!1),c=bi(e);return o(`div`,{className:`flex items-center gap-2`,children:[b(`div`,{className:`flex items-center justify-center rounded-lg ${ac[t]}`,style:{backgroundColor:`${r.color}15`},children:a||!c?b(i,{className:ic[t],style:{color:r.color}}):b(`img`,{src:c,alt:r.label,className:ic[t],onError:()=>s(!0)})}),n&&b(`span`,{className:`text-xs font-medium text-foreground-subtle`,children:r.label})]})}function lc({label:e,value:t,layout:n=`inline`}){return n===`stacked`?o(`div`,{className:`min-w-0 flex flex-col gap-0.5 px-0.5`,children:[b(`span`,{className:`text-[11px] text-foreground-subtle`,children:e}),b(`div`,{className:`min-w-0 text-[11px] text-foreground`,children:t})]}):o(`div`,{className:`${ge} flex items-start gap-2 sm:gap-3`,children:[b(`span`,{className:`w-20 sm:w-28 flex-shrink-0 text-[11px] text-foreground-subtle`,children:e}),b(`div`,{className:`flex-1 min-w-0 text-[11px] text-foreground`,children:t})]})}D();function uc(e){return ei({addonId:e,projection:`slim`})}function dc(e){return dr({deviceId:e},{enabled:Number.isFinite(e)})}var fc=3e4,pc=2e3;function mc(e){let t=f(0);return t.current===0&&(t.current=Date.now()),wr({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>=fc?!1:pc}})}D();function hc({deviceId:e}){let{t}=B(),n=M(),{data:r}=dc(e),{data:i}=mc(e),[a,s]=C(null),c=tr({onSuccess:()=>{s(null),n.invalidateQueries({queryKey:[[`deviceManager`]]})},onError:e=>{s(`Could not change primary child: ${e.message}`)}});if(r==null||String(r.type??``)!==qt.Container)return null;let l=(i??[]).map(e=>({id:e.id,stableId:e.stableId,type:e.type,name:e.name,...e.sourceInfo?{sourceInfo:{id:e.sourceInfo.id}}:{}}));if(l.length<=1)return null;let u=or(l,typeof r.linkDeviceId==`number`?r.linkDeviceId:null,typeof r.primaryChildEntityId==`string`?r.primaryChildEntityId:null),d=u===null?l[0].id:u.id;return o(P,{children:[b(lc,{label:t(`shared.primaryChildRow.primaryChild`,`Primary child`),value:b(jn,{childrenList:l,selectedId:d,onSetPrimary:t=>c.mutate({deviceId:e,primaryChildEntityId:t}),disabled:c.isPending})}),a!==null&&b(`p`,{role:`alert`,className:`px-3 sm:px-4 py-1.5 text-[11px] text-danger`,children:a})]})}D();var gc=[`manufacturer`,`model`,`hardware`,`firmware`,`serialNumber`,`uid`,`mac`,`itemNo`];function _c(e){return e.replace(/([a-z])([A-Z])/g,`$1 $2`).replace(/^./,e=>e.toUpperCase())}function vc(e){return e==null?`—`:typeof e==`string`||typeof e==`number`||typeof e==`boolean`?String(e):JSON.stringify(e)}function yc(){let{t:e}=B(),t=Ur(),n=Rn(),{data:r}=dr({deviceId:t??0},{enabled:t!==null}),{data:i}=Mr({deviceId:t??0},{enabled:t!==null}),a=r??n??null,[s,c]=C(`identity`);if(t===null||!a)return null;let l=String(a.stableId??``),u=String(a.addonId??``),d=typeof a.integrationId==`string`&&a.integrationId.length>0?a.integrationId:null,f=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 o(`div`,{className:`rounded-lg border border-border bg-surface overflow-hidden`,children:[o(`div`,{className:`border-b border-border px-3 sm:px-4 py-2 flex items-center justify-between gap-3`,children:[b(`h2`,{className:`text-[11px] font-semibold text-foreground uppercase tracking-wider`,children:e(`overviewAdapters.deviceInfoAdapter.deviceInfo`,`Device Info`)}),v&&o(`div`,{className:`flex items-center gap-1 rounded-md bg-surface-hover p-0.5`,children:[b(bc,{active:s===`identity`,onClick:()=>c(`identity`),label:e(`overviewAdapters.deviceInfoAdapter.identity`,`Identity`)}),b(bc,{active:s===`hardware`,onClick:()=>c(`hardware`),label:e(`overviewAdapters.deviceInfoAdapter.hardware`,`Hardware`)})]})]}),(!v||s===`identity`)&&o(`div`,{className:`divide-y divide-border`,children:[b(lc,{label:`ID`,value:o(`span`,{className:`font-mono text-[11px] text-foreground`,children:[`#${t}`,o(`span`,{className:`ml-1.5 text-foreground-subtle`,children:[`(`,l,`)`]})]})}),b(hc,{deviceId:t}),d!==null&&b(lc,{label:e(`overviewAdapters.deviceInfoAdapter.integration`,`Integration`),value:b(`span`,{className:`font-mono text-[11px]`,children:d})}),f!==null&&b(lc,{label:e(`overviewAdapters.deviceInfoAdapter.parent`,`Parent`),value:b(`span`,{className:`font-mono text-[11px]`,children:`#${String(f)}`})}),b(lc,{label:e(`overviewAdapters.deviceInfoAdapter.provider`,`Provider`),value:b(cc,{type:u,size:`sm`,showLabel:!0})}),b(lc,{label:e(`overviewAdapters.deviceInfoAdapter.capabilities`,`Capabilities`),value:g.length>0?b(nc,{capabilities:g,showLabels:!0}):b(`span`,{className:`text-[11px] text-foreground-subtle`,children:e(`overviewAdapters.deviceInfoAdapter.none`,`None`)})})]}),v&&s===`hardware`&&b(xc,{metadata:_})]})}function bc({active:e,onClick:t,label:n}){return b(`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 xc({metadata:e}){let{t}=B(),n=gc.filter(t=>t in e),r=Object.keys(e).filter(e=>!gc.includes(e)).toSorted(),i=[...n,...r];return o(`div`,{children:[b(`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.`)}),b(`div`,{className:`divide-y divide-border`,children:i.map(t=>b(lc,{label:_c(t),value:b(`span`,{className:`font-mono text-[11px] text-foreground break-all`,children:vc(e[t])})},t))})]})}function Sc(e,t){return e.icon===t.icon&&e.label===t.label&&e.unit===t.unit&&e.precision===t.precision&&e.hidden===t.hidden}function Cc(e){return{icon:e?.icon??``,label:e?.label??``,unit:e?.unit??``,precision:e?.precision===void 0?``:String(e.precision),hidden:e?.hidden===!0}}function wc(e){if(e.trim()===``)return;let t=Number.parseInt(e,10);return Number.isFinite(t)?t:void 0}function Tc(e,t){let n=wc(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 Ec(e){let t=Cc(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 Dc(e,t){if(e===null)return Ec(t);let n=Cc(t.display),r=e.name===t.name&&e.location===t.location&&e.role===t.role&&Sc(e.display,n);return!Oc(e)||r?Ec(t):e}function Oc(e){return e===null?!1:e.name!==e.baseName||e.location!==e.baseLocation||e.role!==e.baseRole||!Sc(e.display,e.baseDisplay)}function kc(e){return e.name.trim().length===0?`name`:null}function Ac(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},...Sc(e.display,e.baseDisplay)?{}:{display:Tc(e.display,e.persistedDisplay)}}}function jc(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(`; `)}}D();var Mc=A(null);function Nc(){return F(Mc)}function Pc({deviceId:e,seed:t,showOpenFull:n=!1,onClose:r,children:i}){let[a,o]=C(null),[s,c]=C([]),l=f(new Map);if(t!==null){let e=Dc(a,t);(a===null||e.name!==a.name||e.location!==a.location||e.role!==a.role||!Sc(e.display,a.display)||e.baseName!==a.baseName||e.baseLocation!==a.baseLocation||e.baseRole!==a.baseRole||!Sc(e.baseDisplay,a.baseDisplay)||e.persistedDisplay!==a.persistedDisplay)&&o(e)}let u=y(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))}),[]),d=p(()=>({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 b(Mc.Provider,{value:d,children:b(Fc,{deviceId:e,identity:a,contributions:s,onIdentitySaved:e=>o(e),showOpenFull:n,onClose:r,children:i})})}function Fc({deviceId:e,identity:t,contributions:n,onIdentitySaved:r,showOpenFull:i,onClose:a,children:s}){return o(P,{children:[s,b(Lc,{deviceId:e,identity:t,contributions:n,onIdentitySaved:r,showOpenFull:i,onClose:a})]})}function Ic(e){return e instanceof Error?e.message:String(e)}function Lc({deviceId:e,identity:t,contributions:n,onIdentitySaved:r,showOpenFull:i,onClose:a}){let{t:s}=B(),c=q(),l=ur(),u=M(),[d,f]=C(null),[p,m]=C(!1),h=kn(),g=Xn(),_=ir(),v=Hn(),y=jc([{dirty:Oc(t),saving:p,error:d},...n]),x=()=>{u.invalidateQueries({queryKey:[[`deviceManager`]]})};return o(`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:[y.error!==null&&b(`p`,{className:`text-xs text-danger`,children:y.error}),o(`div`,{className:`flex flex-wrap items-center justify-between gap-2`,children:[i?b(bn,{type:`button`,variant:`outline`,size:`sm`,onClick:()=>{(async()=>{y.dirty&&!await l({title:s(`deviceQuickDetail.leaveTitle`,`Discard unsaved changes?`),message:s(`deviceQuickDetail.leaveMessage`,`Unsaved edits on this device will be discarded.`),confirmLabel:s(`deviceQuickDetail.discard`,`Discard`),variant:`warning`})||(c(`/devices/${String(e)}?tab=customize`),a?.())})()},children:s(`deviceQuickDetail.openFull`,`Open full detail`)}):b(`span`,{}),o(`div`,{className:`flex items-center gap-2`,children:[b(bn,{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();f(null)},disabled:!y.dirty||y.saving,children:s(`deviceQuickDetail.discard`,`Discard`)}),b(bn,{type:`button`,size:`sm`,onClick:()=>{if(t!==null&&Oc(t)&&kc(t)===`name`){f(s(`deviceQuickDetail.nameRequired`,`Name is required`));return}f(null),m(!0),(async()=>{try{let i=t===null?{}:Ac(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){f(Ic(e))}finally{m(!1)}})()},disabled:!y.dirty||y.saving,children:y.saving?s(`deviceQuickDetail.saving`,`Saving…`):s(`deviceQuickDetail.save`,`Save`)})]})]})]})}function Rc(e){return e.hubReachable?e.authOk===!1?{kind:`auth-expired`}:{kind:`cluster-degraded`,offlineAgents:e.offlineAgents,offlineAgentIds:e.offlineAgentIds}:{kind:`hub-unreachable`}}function zc(e){switch(e.kind){case`connected`:return null;case`reconnecting`:return{severity:`warning`,message:z.t(`connection.reconnecting`),i18nKey:`connection.reconnecting`,showSpinner:!0};case`cluster-degraded`:{let t=e.offlineAgentIds??[];return t.length>0?{severity:`warning`,message:z.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:z.t(`connection.degradedCount`,{count:e.offlineAgents}),i18nKey:`connection.degradedCount`,i18nParams:{count:e.offlineAgents},showSpinner:!0}:{severity:`warning`,message:z.t(`connection.degraded`),i18nKey:`connection.degraded`,showSpinner:!0}}case`hub-unreachable`:return{severity:`danger`,message:z.t(`connection.disconnected`),i18nKey:`connection.disconnected`,showSpinner:!0};case`auth-expired`:return{severity:`danger`,message:z.t(`connection.sessionExpired`),i18nKey:`connection.sessionExpired`,showSpinner:!1,action:`sign-in`}}}var Bc=4e3,Vc=5e3;function Hc(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 Uc(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 Wc(e){let t=e.fetchFn??fetch,n=e.timeoutMs??Bc,r=e.origin.replace(/\/+$/,``),i;try{i=await Uc(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 Uc(t,`${r}/health/details`,n,{Authorization:`Bearer ${o}`});e.ok&&(a=await e.json())}catch{}let s;try{s=Hc(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 Uc(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 Gc={kind:`connected`},Kc={kind:`reconnecting`};function qc(e){let t=e.probeIntervalMs??Vc,n=new Set,r=Gc,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(Rc(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(Gc);return}if(e===`connecting`){c(),s(Kc);return}(r.kind===`connected`||r.kind===`reconnecting`)&&s(Kc),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 Jc=null;function Yc(){return Jc===null&&(Jc=qc({probe:()=>Wc({origin:xe(),getToken:()=>localStorage.getItem(`camstack_admin_token`)})})),Jc}function Xc(e){Yc().onSdkConnectionState(e)}function Zc(e){return e===`connected`}function Qc(e){j.setOnline(Zc(e))}var $c=null,el=0;function X(){if(!$c){let e=el;$c=Rr({serverUrl:xe(),token:localStorage.getItem(`camstack_admin_token`)??void 0,getLanguage:()=>z.language,refreshCredential:async e=>{e===`rejected`?await gl().refreshNow():await gl().ensureFresh()},onConnectionChange:t=>{e===el&&(Xc(t),Qc(t))}})}return $c}function Z(){let e=$c;$c=null,el+=1,e?.close()}var tl=`camstack_admin_token`,nl=`camstack_admin_refresh`,rl=`camstack_admin_token_expires`;function il(e){try{let t=localStorage.getItem(e);return t!==null&&t.length>0?t:null}catch{return null}}function al(e,t){try{t===null?localStorage.removeItem(e):localStorage.setItem(e,t)}catch{}}function ol(){let e=il(tl);if(e===null)return null;let t=il(nl),n=Number(il(rl));return{token:e,...t===null?{}:{refreshToken:t},...Number.isFinite(n)&&n>0?{expiresAt:n}:{}}}function sl(e){al(tl,e.token),al(nl,e.refreshToken??null),al(rl,e.expiresAt===void 0?null:String(e.expiresAt))}function cl(){al(tl,null),al(nl,null),al(rl,null)}function ll(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 ul(e){await fetch(L(`/api/auth/session`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({token:e})}).catch(()=>{})}var dl=new Set;function fl(e){return dl.add(e),()=>dl.delete(e)}var pl=new Set;function ml(e){return pl.add(e),()=>pl.delete(e)}var hl=null;function gl(){return hl===null&&(hl=new qr({refresh:async e=>{let t=ol();if(t?.refreshToken!==void 0&&t.refreshToken!==e&&(t.expiresAt??0)>Date.now()+6e4)return t;let n=await X().refreshSession(e);return{token:n.token,refreshToken:n.refreshToken,expiresAt:n.expiresAt}},onTokens:e=>{sl(e),X().setToken(e.token),ul(e.token);for(let e of pl)e()},onExpired:()=>{cl();for(let e of dl)e()}})),hl}function _l(e){sl(e),gl().adopt(e)}async function vl(e){try{await gl().ensureFresh()}catch(e){console.warn(`[admin-session] pre-reconnect refresh failed; reconnecting anyway`,e)}e()}async function yl(){return await gl().refreshNow()!==null}var bl=512;function xl(e){if(!e||e.length>bl)return null;let t=Xt(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 Sl=/^[A-Za-z0-9_-]{43,128}$/,Cl=/^[A-Za-z0-9._~-]{1,256}$/;function wl(e){let{codeChallenge:t,state:n}=e;return!t||!Sl.test(t)||(e.codeChallengeMethod??`S256`)!==`S256`||!n||!Cl.test(n)?null:{codeChallenge:t,state:n,purpose:e.purpose===`step-up`?`step-up`:`new-session`}}var Tl=`camstack:login-app-handoff`;function El(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 wl({codeChallenge:n(`codeChallenge`),state:n(`state`),purpose:n(`purpose`)})}catch{return null}}function Dl(e,t=Date.now()){e!==null&&zl(Tl,JSON.stringify(e),El,t)}function Ol(e=Date.now()){return Bl(Tl,El,e)}function kl(e,t,n){return`${e}?${`code=${encodeURIComponent(t)}`}${n===void 0?``:`&state=${encodeURIComponent(n)}`}`}function Al(e,t=Date.now()){return Ul(t)??xl(e)}var jl=2048;function Ml(e){return!e||e.length>jl||!e.startsWith(`/`)||e.startsWith(`//`)||e.includes(`\\`)||e.includes(`://`)||e.includes(`..`)||e===`/login`||e.startsWith(`/login?`)||e.startsWith(`/login/`)?null:e}function Nl(e,t=Date.now()){zl(Ll,e,Ml,t)}function Pl(e=Date.now()){return Bl(Ll,Ml,e)}function Fl(e,t=Date.now()){return Pl(t)??Ml(e)}var Il=`camstack:login-redirect`,Ll=`camstack:login-next`,Rl=10*6e4;function zl(e,t,n,r){let i=Vl();if(!i||!n(t))return;let a={raw:t??``,at:r};try{i.setItem(e,JSON.stringify(a))}catch{}}function Bl(e,t,n){let r=Vl();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>Rl?null:t(a)}catch{return null}}function Vl(){if(typeof window>`u`)return null;try{return window.sessionStorage}catch{return null}}function Hl(e,t=Date.now()){zl(Il,e,xl,t)}function Ul(e=Date.now()){return Bl(Il,xl,e)}var Wl=`changeme`;function Gl(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:Kl(n.scopes)}}catch{return null}}function Kl(e){return Bt(Pt(e))}function ql(e){let t=Gl(e);return t?t.exp*1e3<Date.now():!0}D();var Jl=Wl;function Yl(e){return{token:e.token,...e.refreshToken===void 0?{}:{refreshToken:e.refreshToken},...e.expiresAt===void 0?{}:{expiresAt:e.expiresAt}}}async function Xl(e,t){if(await ul(e),t.kind===`path`){window.location.replace(L(t.path));return}try{Z();let e=Ol();if(e===null)throw Error(`The app sent no PKCE challenge and state`);let{code:n}=await X().trpcClient.auth.createHandoffCode.mutate({purpose:e.purpose,codeChallenge:e.codeChallenge,state:e.state});window.location.replace(kl(t.url,n,e.state))}catch{window.location.replace(L(`/`))}}async function Zl(e,t){await ul(e),window.location.replace(L(t))}var Ql=A(null);function $l({children:e}){let[t,n]=C(null),[r,i]=C(!0),[a,o]=C(!1);x(()=>{if(typeof window<`u`&&window.location.hash.startsWith(`#token=`)){let e=new URLSearchParams(window.location.hash.slice(1)),t=ll(e),n=t?.token??null;if(t!==null&&n!==null){_l(t);let r=Ul();if(r){Xl(n,r);return}let i=Pl()??Ml(e.get(`next`));if(i){Zl(n,i);return}window.history.replaceState({},``,L(`/`))}}s()},[]);let s=async()=>{let e=ol();if(e===null){i(!1);return}let t=e.token;if(e.refreshToken!==void 0){let n=gl();n.adopt(e),await n.ensureFresh();let r=ol();if(r===null){console.warn(`[auth] session restore: signed out — the hub refused the refresh token`),Z(),i(!1);return}t=r.token}if(ql(t)){console.warn(`[auth] session restore: signed out — access token expired and no refresh recovered it`),cl(),Z(),i(!1);return}let r=Gl(t);if(!r){console.warn(`[auth] session restore: signed out — the stored access token is unreadable`),cl(),Z(),i(!1);return}ul(t);let a=X();a.trpcClient.system.info.query().then(()=>n(r)).catch(async e=>{let t=e?.data?.code;if(t===`UNAUTHORIZED`||t===`FORBIDDEN`){if(await yl()){a.reconnect();try{await X().trpcClient.system.info.query();let e=ol();n(e&&Gl(e.token)||r);return}catch{}}console.warn(`[auth] session restore: logout, probe UNAUTHORIZED and refresh did not recover it`),gl().stop(),cl(),Z()}else n(r)}).finally(()=>i(!1))};x(()=>fl(()=>{Z(),n(null),o(!1)}),[]);let c=y(async(e,t)=>{let r=await X().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 _l(Yl(r)),await ul(a),Z(),n(Gl(a)),o(t===Jl),{kind:`ok`}},[]),l=y(async(e,t)=>{let r=await X().loginVerifyTotp(e,t,{refreshable:!0}),i=r.token;_l(Yl(r)),await ul(i),Z(),n(Gl(i)),o(!1)},[]),u=y(async(e,t)=>{_l({token:e,...t}),await ul(e),Z(),n(Gl(e)),o(!1)},[]),d=y(()=>{X().logout().catch(()=>{}),gl().stop(),cl(),fetch(L(`/api/auth/session`),{method:`DELETE`}).catch(()=>{}),Z(),n(null),o(!1)},[]),f=y(()=>{o(!1)},[]);return b(Ql.Provider,{value:{user:t,loading:r,mustChangePassword:a,login:c,verifyTotp:l,finalizePasskeyLogin:u,logout:d,clearMustChangePassword:f},children:e})}function eu(){let e=F(Ql);if(!e)throw Error(`useAuth must be used within AuthProvider`);return e}D();function tu(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 nu({schema:e,serverValues:t,onImmediateSave:n,onDeferredSave:r}){let[i,a]=C({}),[o,s]=C({}),[c,l]=C(!1),u=f(null),d=e?.sections??[],m=Object.keys(i).length>0,h=p(()=>({...t,...o,...i}),[t,o,i]);x(()=>{if(m||Object.keys(o).length>0){l(!0);return}u.current&&clearTimeout(u.current),u.current=setTimeout(()=>l(!1),500)},[m,o]),x(()=>()=>{u.current&&clearTimeout(u.current)},[]);let g=y(()=>{l(!0),u.current&&clearTimeout(u.current),u.current=setTimeout(()=>l(!1),2e3)},[]),_=y(e=>{g();let r={},o={},s={...t,...i};for(let[t,n]of Object.entries(e))s[t]!==n&&(tu(d,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})},[g,t,i,d,n]),v=y(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),c=r(t);if(c===void 0||typeof c.then!=`function`)return;s(e=>({...e,...t}));let l=()=>s(e=>{let t={...e};for(let e of o)delete t[e];return t});c.then(l,()=>{l(),a(e=>{let n={...e};for(let e of o)e in n||(n[e]=t[e]);return n})})},[i,r]),b=y(e=>{a(t=>{let n={...t};for(let t of e)delete n[t];return n})},[]),S=y(()=>{a({})},[]);return{values:h,pendingKeys:Object.keys(i),hasPendingEdits:m,editingPaused:c,handleChange:_,handleSave:v,handleDiscard:b,resetAll:S}}function Q(e){return t=>Object.prototype.hasOwnProperty.call(e,t)}var ru=Q({devices:!0}),iu=Q({classes:!0,classesExclude:!0,labelEquals:!0,identities:!0,identitiesExclude:!0,eventTypeTokens:!0,sensorKinds:!0}),au=Q({minConfidence:!0,minImportance:!0,minLabelConfidence:!0}),ou=Q({minDwellSeconds:!0}),su=Q({source:!0}),cu=Q({crossing:!0}),lu=Q({packagePhase:!0}),uu=Q({sensorTransition:!0}),du=Q({plates:!0}),fu=Q({occupancy:!0}),pu=Q({audio:!0}),mu=Q({systemEvent:!0}),hu=Q({deviceState:!0}),gu=Q({scene:!0});function _u(e,t){let n=e[t];return Array.isArray(n)?n:[]}function vu(e,t){let n=e[t];return typeof n==`number`?n:void 0}D();function yu(e,t){let n=qe().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 p(()=>{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 bu(e){let t=qe().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 p(()=>{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 xu(){let e=zr();return p(()=>({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 Su(){let e=Gn({limit:200}),t=Mn();return p(()=>{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 Cu({options:e,value:t,onChange:n,loading:r,emptyHint:i,placeholder:a,noFreeText:s=!1}){let{t:c}=B(),[l,u]=C(``),d=p(()=>new Set(e.map(e=>e.value)),[e]),f=p(()=>new Set(t),[t]),m=t.filter(e=>!d.has(e)),h=e=>{n(f.has(e)?t.filter(t=>t!==e):[...t,e])},g=()=>{let e=l.trim();e.length===0||t.includes(e)||(n([...t,e]),u(``))};return o(`div`,{className:`mt-1 space-y-1.5`,children:[m.length>0&&b(`div`,{className:`flex flex-wrap gap-1`,children:m.map(e=>o(`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:c(`system.notificationRulePickers.customValueClickToRemove`,`Custom value — click to remove`),children:[e,` ×`]},e))}),e.length>0?b(`div`,{className:`max-h-40 overflow-y-auto rounded-md border border-border divide-y divide-border`,children:e.map(e=>o(`label`,{className:`flex items-center gap-2.5 px-3 py-1.5 text-xs text-foreground cursor-pointer hover:bg-surface-hover`,children:[b(`input`,{type:`checkbox`,checked:f.has(e.value),onChange:()=>h(e.value),className:`accent-primary`}),b(`span`,{className:`flex-1 truncate`,children:e.label}),e.hint!==void 0&&b(`span`,{className:`text-[10px] text-foreground-subtle`,children:e.hint})]},e.value))}):b(`p`,{className:`text-[10px] text-foreground-subtle`,children:r===!0?c(`common.loading`,`Loading…`):i}),!s&&b(`input`,{value:l,onChange:e=>u(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 wu=[{value:`immediate`,get label(){return z.t(`helpers.ruleFormParsers.immediate`)},get hint(){return z.t(`helpers.ruleFormParsers.immediateHint`)}},{value:`track-end`,get label(){return z.t(`helpers.ruleFormParsers.trackEnd`)},get hint(){return z.t(`helpers.ruleFormParsers.trackEndHint`)}},{value:`device-event`,get label(){return z.t(`helpers.ruleFormParsers.deviceEvent`)},get hint(){return z.t(`helpers.ruleFormParsers.deviceEventHint`)}},{value:`package-event`,get label(){return z.t(`helpers.ruleFormParsers.packageEvent`)},get hint(){return z.t(`helpers.ruleFormParsers.packageEventHint`)}},{value:`system-event`,get label(){return z.t(`helpers.ruleFormParsers.systemEvent`)},get hint(){return z.t(`helpers.ruleFormParsers.systemEventHint`)}}],Tu=`Immediate, grouped`,Eu=wu.flatMap(e=>e.value===`immediate`?[e,{value:`immediate-grouped`,get label(){return z.t(`notificationRules.grouping.choice`)},get hint(){return z.t(`helpers.ruleFormParsers.groupedHint`)}}]:[e]);function Du(e){return e.groupingSec!==void 0&&en(e)?`immediate-grouped`:e.delivery}function Ou(e){let t=(e.delivery===`immediate`||e.delivery===`track-end`)&&en({delivery:`immediate`,conditions:e.conditions});return Eu.filter(e=>e.value!==`immediate-grouped`||t)}function ku(e){return Eu.find(t=>t.value===e)?.value}function Au(e,t=Tu){return Du(e)===`immediate-grouped`?`${t} · ${String(e.groupingSec)} s`:Mu(e.delivery)}function ju(e){if(e.trim().length===0)return;let t=Number(e);return Number.isFinite(t)&&t>=0?Math.trunc(t):void 0}function Mu(e){return wu.find(t=>t.value===e)?.label??e}function Nu(e){return wu.some(t=>t.value===e)}var Pu=[{key:`all`,get label(){return z.t(`helpers.ruleFormParsers.sec_all_label`)},get blurb(){return z.t(`helpers.ruleFormParsers.sec_all_blurb`)},get newRuleLabel(){return z.t(`helpers.ruleFormParsers.sec_all_new`)},get emptyHint(){return z.t(`helpers.ruleFormParsers.sec_all_empty`)},creatable:!0},{key:`detection`,get label(){return z.t(`helpers.ruleFormParsers.sec_detection_label`)},get blurb(){return z.t(`helpers.ruleFormParsers.sec_detection_blurb`)},get newRuleLabel(){return z.t(`helpers.ruleFormParsers.sec_detection_new`)},get emptyHint(){return z.t(`helpers.ruleFormParsers.sec_detection_empty`)},creatable:!0},{key:`sensor`,get label(){return z.t(`helpers.ruleFormParsers.sec_sensor_label`)},get blurb(){return z.t(`helpers.ruleFormParsers.sec_sensor_blurb`)},get newRuleLabel(){return z.t(`helpers.ruleFormParsers.sec_sensor_new`)},get emptyHint(){return z.t(`helpers.ruleFormParsers.sec_sensor_empty`)},creatable:!0},{key:`audio`,get label(){return z.t(`helpers.ruleFormParsers.sec_audio_label`)},get blurb(){return z.t(`helpers.ruleFormParsers.sec_audio_blurb`)},get newRuleLabel(){return z.t(`helpers.ruleFormParsers.sec_audio_new`)},get emptyHint(){return z.t(`helpers.ruleFormParsers.sec_audio_empty`)},creatable:!0},{key:`occupancy`,get label(){return z.t(`helpers.ruleFormParsers.sec_occupancy_label`)},get blurb(){return z.t(`helpers.ruleFormParsers.sec_occupancy_blurb`)},get newRuleLabel(){return z.t(`helpers.ruleFormParsers.sec_occupancy_new`)},get emptyHint(){return z.t(`helpers.ruleFormParsers.sec_occupancy_empty`)},creatable:!0},{key:`device-events`,get label(){return z.t(`helpers.ruleFormParsers.sec_deviceEvents_label`)},get blurb(){return z.t(`helpers.ruleFormParsers.sec_deviceEvents_blurb`)},get newRuleLabel(){return z.t(`helpers.ruleFormParsers.sec_deviceEvents_new`)},get emptyHint(){return z.t(`helpers.ruleFormParsers.sec_deviceEvents_empty`)},creatable:!0},{key:`system`,get label(){return z.t(`helpers.ruleFormParsers.sec_system_label`)},get blurb(){return z.t(`helpers.ruleFormParsers.sec_system_blurb`)},get newRuleLabel(){return z.t(`helpers.ruleFormParsers.sec_system_new`)},get emptyHint(){return z.t(`helpers.ruleFormParsers.sec_system_empty`)},creatable:!0},{key:`alarm`,get label(){return z.t(`helpers.ruleFormParsers.sec_alarm_label`)},get blurb(){return z.t(`helpers.ruleFormParsers.sec_alarm_blurb`)},get newRuleLabel(){return z.t(`helpers.ruleFormParsers.sec_alarm_new`)},get emptyHint(){return z.t(`helpers.ruleFormParsers.sec_alarm_empty`)},creatable:!0},{key:`mixed`,get label(){return z.t(`helpers.ruleFormParsers.sec_mixed_label`)},get blurb(){return z.t(`helpers.ruleFormParsers.sec_mixed_blurb`)},get newRuleLabel(){return z.t(`helpers.ruleFormParsers.sec_mixed_new`)},get emptyHint(){return z.t(`helpers.ruleFormParsers.sec_mixed_empty`)},creatable:!1}];function Fu(e){return Ft(nn(e)).editable}function Iu(e){return zt(Lu(e))}function Lu(e){switch(e){case`device-events`:case`system`:case`alarm`:case`mixed`:return e;default:return}}var Ru=new Map([[0,`helpers.ruleFormParsers.cdNone`],[60,`helpers.ruleFormParsers.cd1m`],[3600,`helpers.ruleFormParsers.cd1h`]]),zu=86400;function Bu(e){let t=Ru.get(e);return t===void 0?e%3600==0?z.t(`helpers.ruleFormParsers.cdHours`,{count:e/3600}):e%60==0?z.t(`helpers.ruleFormParsers.cdMinutes`,{count:e/60}):z.t(`helpers.ruleFormParsers.cdSeconds`,{count:e}):z.t(t)}function Vu(e){if(e.trim().length===0)return;let t=Number(e);return Number.isFinite(t)&&t>=0?Math.trunc(t):void 0}var Hu=[{value:`rule-device`,get label(){return z.t(`helpers.ruleFormParsers.scopeDevice`)}},{value:`rule`,get label(){return z.t(`helpers.ruleFormParsers.scopeRule`)}}];function Uu(e){return Hu.find(t=>t.value===e)?.value}var Wu=[{value:`per-class`,get label(){return z.t(`helpers.ruleFormParsers.granPerClass`)}},{value:`shared`,get label(){return z.t(`helpers.ruleFormParsers.granShared`)}}];function Gu(e){return Wu.find(t=>t.value===e)?.value}var Ku=[{value:`scene-boxes`,get label(){return z.t(`helpers.ruleFormParsers.imageSceneBoxes`)},get description(){return z.t(`helpers.ruleFormParsers.imageSceneBoxesDesc`)}},{value:`crop`,get label(){return z.t(`helpers.ruleFormParsers.imageCrop`)},get description(){return z.t(`helpers.ruleFormParsers.imageCropDesc`)}},{value:`clean`,get label(){return z.t(`helpers.ruleFormParsers.imageClean`)},get description(){return z.t(`helpers.ruleFormParsers.imageCleanDesc`)}},{value:`none`,get label(){return z.t(`helpers.ruleFormParsers.imageNone`)},get description(){return z.t(`helpers.ruleFormParsers.imageNoneDesc`)}}];function qu(e){return Ku.find(t=>t.value===e)?.value}var Ju=[{value:``,get label(){return z.t(`helpers.ruleFormParsers.linkedDefault`)}},{value:`mosaic`,get label(){return z.t(`helpers.ruleFormParsers.linkedMosaic`)}},{value:`each`,get label(){return z.t(`helpers.ruleFormParsers.linkedEach`)}}];function Yu(e){let t=Ju.find(t=>t.value===e)?.value;return t===``?void 0:t}var Xu=[{value:``,get label(){return z.t(`helpers.ruleFormParsers.profileLowest`)}},{value:`low`,get label(){return z.t(`helpers.ruleFormParsers.profileLow`)}},{value:`mid`,get label(){return z.t(`helpers.ruleFormParsers.profileMid`)}},{value:`high`,get label(){return z.t(`helpers.ruleFormParsers.profileHigh`)}}];function Zu(e){let t=Xu.find(t=>t.value===e)?.value;return t===``?void 0:t}var Qu=[{value:`any`,get label(){return z.t(`helpers.ruleFormParsers.srcAny`)}},{value:`pipeline`,get label(){return z.t(`helpers.ruleFormParsers.srcPipeline`)}},{value:`onboard`,get label(){return z.t(`helpers.ruleFormParsers.srcOnboard`)}},{value:`sensor`,get label(){return z.t(`helpers.ruleFormParsers.srcSensor`)}}],$u=[{value:`delivered`,get label(){return z.t(`helpers.ruleFormParsers.phaseDelivered`)}},{value:`picked-up`,get label(){return z.t(`helpers.ruleFormParsers.phasePickedUp`)}},{value:`both`,get label(){return z.t(`helpers.ruleFormParsers.phaseBoth`)}}],ed=[{value:``,get label(){return z.t(`helpers.ruleFormParsers.stBoth`)}},{value:`raised`,get label(){return z.t(`helpers.ruleFormParsers.stRaised`)}},{value:`cleared`,get label(){return z.t(`helpers.ruleFormParsers.stCleared`)}}];function td(e){return e===`raised`||e===`cleared`?e:void 0}function nd(e,t){return e===`sensorTransition`?_t(t.sensorKinds):!0}var rd=[{value:`enter`,get label(){return z.t(`helpers.ruleFormParsers.crossEnter`)}},{value:`exit`,get label(){return z.t(`helpers.ruleFormParsers.crossExit`)}},{value:`any`,get label(){return z.t(`helpers.ruleFormParsers.crossAny`)}}],id=`enter`;function ad(e){return e===`exit`||e===`any`?e:void 0}var od=[{value:1,get label(){return z.t(`helpers.ruleFormParsers.prioMin`)}},{value:2,get label(){return z.t(`helpers.ruleFormParsers.prioLow`)}},{value:3,get label(){return z.t(`helpers.ruleFormParsers.prioDefault`)}},{value:4,get label(){return z.t(`helpers.ruleFormParsers.prioHigh`)}},{value:5,get label(){return z.t(`helpers.ruleFormParsers.prioMax`)}}];function sd(e,t){return e.options&&e.options.length>0?e.options:t}var cd=[{value:``,get label(){return z.t(`helpers.ruleFormParsers.speedDefault`)}},{value:`1`,get label(){return z.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 ld(e){if(e===``)return;let t=Number(e);return Number.isFinite(t)&&t>=1&&t<=8?t:void 0}var ud=`notificationRules.systemEventKinds.`,dd=`notificationRules.systemEventGroups.`,fd=`notificationRules.systemEventHints.`;function pd(e){return!Dt.some(t=>t===e)}function md(e){let t=`${ud}${e}`;return z.exists(t)?z.t(t):e}function hd(){return dt.map(e=>({id:e.id,family:e.family,label:z.t(`${dd}${e.id}`,e.label),hint:z.t(`${fd}${e.id}`),kinds:e.kinds.filter(pd).map(e=>({value:e,label:md(e)}))}))}function gd(e){return hd().filter(t=>t.family===e)}function _d(e){let t=At(e).conditions.systemEvent;return t===void 0?{kinds:(gd(e)[0]?.kinds??[]).map(e=>e.value)}:{...t,kinds:[...t.kinds]}}function vd(){return hd().flatMap(e=>e.kinds)}function yd(e){return{devices:Ut(e,`deviceIds`),deviceTypes:Ut(e,`deviceTypes`),nodes:Ut(e,`nodeIds`),packages:Ut(e,`packageNames`),consumableThreshold:Ut(e,`consumableLowPercent`)}}function bd(e,t){let n=pt[e],r=yd(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 xd=Object.values(qt).map(e=>({value:e,label:Sd(e)})).toSorted((e,t)=>e.label.localeCompare(t.label));function Sd(e){let t=e.replaceAll(`-`,` `);return t.charAt(0).toUpperCase()+t.slice(1)}function Cd(e,t){let n=[],r=new Set;for(let i of e.kinds){let e=St(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]:yt(e),clears:yt(e),classId:e.id,...t&&e.snapshotSection===null?{noSnapshot:!0}:{}}))}return n}function wd(e,t){return t.clears.some(t=>e.includes(t))}function Td(e,t,n){if(!gd(n).some(e=>e.kinds.some(e=>t.kinds.includes(e.value))))return e;let r=e?.kinds??[];if(wd(r,t)){let i=r.filter(e=>!t.clears.includes(e));return i.length===0?e:kd(e,i,n)}return kd(e,vd().filter(e=>t.kinds.includes(e.value)||r.includes(e.value)).map(e=>e.value),n)}function Ed(e,t){return t===void 0?void 0:kd(t,t.kinds,e)}function Dd(e,t){let n=e?.kinds??[];if(n.length===0)return;let r=Od(t,`deviceIds`,e?.deviceIds),i=Od(t,`excludeDeviceIds`,e?.excludeDeviceIds),a=Od(t,`deviceTypes`,e?.deviceTypes),o=Od(t,`nodeIds`,e?.nodeIds),s=Od(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 Od(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 kd(e,t,n){let r=bd(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 Ad=95;function jd(e){let t=e.trim();if(t===``)return{kind:`clear`};let n=Number(t);return Number.isInteger(n)&&n>=1&&n<=Ad?{kind:`set`,value:n}:{kind:`invalid`}}function Md(e,t=2){if(e===void 0||e.length===0)return z.t(`helpers.notificationSystemEvents.noneSelected`);let n=e.slice(0,t).map(md).join(`, `),r=e.length-Math.min(t,e.length);return r>0?`${n} +${r}`:n}function Nd(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(Sd).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 Pd(e){return e===void 0||(e.deviceTypes?.length??0)===0?!1:e.kinds.some(e=>ft.includes(e))}var Fd=[`all`,`only`,`except`];function Id(e,t){return(e??[]).length>0?`only`:(t??[]).length>0?`except`:`all`}function Ld(e,t){let n=[...e??[]],r=[...t??[]];return{mode:Id(n,r),include:n,exclude:r,legacyBoth:n.length>0&&r.length>0}}function Rd(e,t){return{...e,mode:t}}function zd(e){switch(e.mode){case`only`:return e.include;case`except`:return e.exclude;case`all`:return[]}}function Bd(e,t){switch(e.mode){case`only`:return{...e,include:[...t]};case`except`:return{...e,exclude:[...t]};case`all`:return e}}function Vd(e){return e.mode===`only`&&e.legacyBoth?e.exclude:[]}function Hd(e){return{...e,exclude:[],legacyBoth:!1}}function Ud(e){switch(e.mode){case`all`:return{};case`except`:return e.exclude.length>0?{exclude:[...e.exclude]}:{};case`only`:{let t=Vd(e);return{...e.include.length>0?{include:[...e.include]}:{},...t.length>0?{exclude:[...t]}:{}}}}}function Wd(e){let t=Ud(e),n=t.include??[],r=t.exclude??[];return[...e.include.filter(e=>!n.includes(e)),...e.exclude.filter(e=>!r.includes(e))]}var Gd=[`onActivation`,`onDeactivation`,`onTrigger`,`onTriggerOff`],Kd={onActivation:{get title(){return z.t(`helpers.notificationRuleActions.onActivationTitle`)},get hint(){return z.t(`helpers.notificationRuleActions.onActivationHint`)}},onDeactivation:{get title(){return z.t(`helpers.notificationRuleActions.onDeactivationTitle`)},get hint(){return z.t(`helpers.notificationRuleActions.onDeactivationHint`)}},onTrigger:{get title(){return z.t(`helpers.notificationRuleActions.onTriggerTitle`)},get hint(){return z.t(`helpers.notificationRuleActions.onTriggerHint`)}},onTriggerOff:{get title(){return z.t(`helpers.notificationRuleActions.onTriggerOffTitle`)},get hint(){return z.t(`helpers.notificationRuleActions.onTriggerOffHint`)}}},qd={onActivation:[],onDeactivation:[],onTrigger:[],onTriggerOff:[],buttons:[]};function Jd(e){return e===void 0?qd:{onActivation:[...e.onActivation??[]],onDeactivation:[...e.onDeactivation??[]],onTrigger:[...e.onTrigger??[]],onTriggerOff:[...e.onTriggerOff??[]],buttons:[...e.buttons??[]]}}function Yd(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(!(!Gd.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 Xd(e,t){let n=[];for(let r of Gd){let i=e[r];i.length>4&&n.push({kind:`too-many`,message:z.t(`helpers.notificationRuleActions.tooMany`,{title:Kd[r].title})});for(let e of i)e.kind===`sequence`&&!t.has(e.sequenceId)&&n.push({kind:`unknown-sequence`,message:z.t(`helpers.notificationRuleActions.hookUnknownSeq`,{title:Kd[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:z.t(`helpers.notificationRuleActions.dupButton`,{id:e})}),r.add(e),t.has(i.sequenceId.trim())||n.push({kind:`unknown-sequence`,message:z.t(`helpers.notificationRuleActions.buttonUnknownSeq`,{label:i.label||e})}))}return n}function Zd(e,t){return{id:`action-${String(e+1)}`,label:z.t(`helpers.notificationRuleActions.newButtonLabel`),sequenceId:t}}function Qd(){return{kind:`do`,action:{kind:`cap`,deviceId:0,cap:``,method:``}}}function $d(e){return{kind:`sequence`,sequenceId:e}}function ef(){return{kind:`wait`,seconds:5}}var tf=[{value:`acknowledge`,get label(){return z.t(`helpers.notificationRuleActions.icon_acknowledge`)}},{value:`dismiss`,get label(){return z.t(`helpers.notificationRuleActions.icon_dismiss`)}},{value:`silence`,get label(){return z.t(`helpers.notificationRuleActions.icon_silence`)}},{value:`snooze`,get label(){return z.t(`helpers.notificationRuleActions.icon_snooze`)}},{value:`view`,get label(){return z.t(`helpers.notificationRuleActions.icon_view`)}},{value:`play`,get label(){return z.t(`helpers.notificationRuleActions.icon_play`)}},{value:`camera`,get label(){return z.t(`helpers.notificationRuleActions.icon_camera`)}},{value:`open`,get label(){return z.t(`helpers.notificationRuleActions.icon_open`)}},{value:`close`,get label(){return z.t(`helpers.notificationRuleActions.icon_close`)}},{value:`unlock`,get label(){return z.t(`helpers.notificationRuleActions.icon_unlock`)}},{value:`lock`,get label(){return z.t(`helpers.notificationRuleActions.icon_lock`)}},{value:`disarm`,get label(){return z.t(`helpers.notificationRuleActions.icon_disarm`)}},{value:`arm`,get label(){return z.t(`helpers.notificationRuleActions.icon_arm`)}},{value:`arm-home`,get label(){return z.t(`helpers.notificationRuleActions.icon_arm_home`)}},{value:`arm-away`,get label(){return z.t(`helpers.notificationRuleActions.icon_arm_away`)}},{value:`arm-night`,get label(){return z.t(`helpers.notificationRuleActions.icon_arm_night`)}},{value:`light`,get label(){return z.t(`helpers.notificationRuleActions.icon_light`)}},{value:`alert`,get label(){return z.t(`helpers.notificationRuleActions.icon_alert`)}}],nf=[10,30,60],rf=[5,10,15,30,60,120,240,480];function af(e){return e>=60&&e%60==0?z.t(`helpers.ruleFormState.snoozeHours`,{count:e/60}):z.t(`helpers.ruleFormState.snoozeMin`,{count:e})}var of=new Set([`alarm-arm-refused`,`alarm-check-failed`,`alarm-arming`,`alarm-armed`,`alarm-pending`,`alarm-triggered`,`alarm-rearmed`,`alarm-sensor-bypass`,`alarm-disarmed`]),sf=`alarm-panel`;function cf(e,t){for(let t of e.systemEvent?.kinds??[])if(of.has(t))return!0;for(let e of t)if(e.kind===`cap`&&e.cap===sf)return!0;return!1}function lf(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 uf(e){let{devices:t,devicesExclude:n,classes:r,classesExclude:i,...a}=e;return{conditions:a,deviceScope:Ld(t,n),classScope:Ld(r,i)}}function df(e){let t=Ud(e.deviceScope),n=Ud(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 ff(e){return e.deviceScope.mode===`only`?e.deviceScope.include:[]}function pf(e,t,n){let r=nn(n);return e.some(e=>e.id===t&&Rt(e,n.delivery,r))}function mf(e=`immediate`,t={}){return{name:``,enabled:!0,delivery:e,targetIds:[],targetUsers:[],targetParams:{},priority:3,mediaImage:It({},nn({delivery:e,conditions:t})),mediaShowTriggerZone:!1,mediaShowSubjectPath:!1,mediaGif:!1,mediaClip:!1,mediaProfile:void 0,mediaClipSpeed:void 0,mediaLinkedCameras:void 0,templateTitle:``,templateBody:``,...uf(t),schedule:void 0,systemEventDelivery:void 0,snoozeAllowGlobal:!1,groupingSec:void 0,snoozeOptions:void 0,askVerdict:void 0,actions:qd,cooldownSec:30,cooldownScope:`rule-device`,cooldownGranularity:void 0}}function hf(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:It(e.media,nn(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??``,...uf(e.conditions),schedule:e.schedule,systemEventDelivery:e.systemEventDelivery,snoozeAllowGlobal:e.snoozeAllowGlobal===!0,groupingSec:e.groupingSec,snoozeOptions:e.snoozeOptions,askVerdict:e.askVerdict,actions:Jd(e.actions),cooldownSec:e.throttle.cooldownSec,cooldownScope:e.throttle.scope,cooldownGranularity:e.throttle.granularity}}function gf(e,t){let n=[];if(wf(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&&!Tf(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(bt(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(zu)} (24 hours). 0 means every match is delivered.`),yf(e))for(let t of Tt({delivery:e.delivery,conditions:e.conditions,...e.systemEventDelivery===void 0?{}:{systemEventDelivery:e.systemEventDelivery},...Yd(e.actions)===void 0?{}:{actions:Yd(e.actions)}}))n.push(Ht(t));return n}function _f(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`&&wt(t.schedule)===null){let e=Vt(t.schedule);if(e!==null&&e.times.length>0)return{systemEventDelivery:{...t,schedule:ot(e.times,t.schedule.timezone)}}}return{systemEventDelivery:t}}function vf(e){if(!yf(e))return null;if(!mt(e.templateBody))return z.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)?z.t(`helpers.ruleFormState.summaryWarnSplit`,{token:`{{summaryText}}`}):null}function yf(e){return Gt(e.delivery)&&e.systemEventDelivery?.mode===`summary`}function bf(e,t,n=new Set){return gf(e,t).length===0&&Nu(e.delivery)&&(!Gt(e.delivery)||kf(e)>0)&&nn(e)!==`mixed`&&e.name.trim().length>0&&(e.targetIds.length>0||e.targetUsers.length>0)&&Xd(e.actions,n).length===0}function xf(e,t){let n=Df(e.conditions,t);return Gt(t)&&(n.systemEvent?.kinds.length??0)===0?{...e,delivery:t,conditions:{...n,systemEvent:_d(`device-events`)}}:{...e,delivery:t,conditions:n}}function Sf(e,t){return t===`immediate-grouped`?{...xf(e,`immediate`),groupingSec:e.groupingSec??20}:{...xf(e,t),groupingSec:void 0}}function Cf(e){return e.delivery===`immediate`||e.delivery===`track-end`}function wf(e){return e.groupingSec!==void 0&&en(e)}function Tf(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 Ef=new Set([`immediate`,`track-end`,`package-event`]);function Df(e,t){if(e.source!==`pipeline`||Ef.has(t))return e;let{source:n,...r}=e;return r}function Of(e,t){return tn(e.conditions.systemEvent)===t?e:{...e,conditions:{...e.conditions,systemEvent:_d(t)}}}function kf(e){return e.conditions.systemEvent?.kinds.length??0}function Af(e,t){return e.appliesTo.includes(t)}var jf={source:`any`};function Mf(e,t){if(t==null)return!0;if(Array.isArray(t))return t.length===0;if(typeof t==`string`)return t.length===0||jf[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 Nf=ut.filter(e=>e.id===`audio`);function Pf(e){if(e.length===0)return e;let t=new Set(e.map(e=>e.id)),n=Nf.filter(e=>!t.has(e.id));return n.length===0?e:[...e,...n]}function Ff(e,t,n,r=nn({delivery:t,conditions:e})){let i=n.length===0?null:new Set(n.filter(e=>e.id!==`schedule`&&Rt(e,t,r)).map(e=>e.id)),a={};for(let[t,n]of Object.entries(e))i!==null&&!i.has(t)||nd(t,e)&&(Mf(t,n)||(a[t]=n));return a}function If(e,t){if(e===void 0)return{};let n=Ed(e,t.systemEvent);return n===void 0?{}:{systemEvent:n}}function Lf(e){return e!==void 0&&e.windows.length>0}function Rf(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 zf(e){let t=Rf(e.media);return{...e.confirm===void 0?{}:{confirm:e.confirm},...t===void 0?{}:{media:t}}}function Bf(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=Yd(e.actions),s=nn(e),c=Ft(s),l=lt(s),u=n.length===0?!0:n.some(t=>t.id===`schedule`&&Af(t,e.delivery)),d=!yf(e)&&u&&Lf(e.schedule)?e.schedule:void 0,f=n.length===0?!0:n.some(t=>t.id===`devices`&&Af(t,e.delivery)),p=n.length===0?!0:n.some(t=>t.id===`devicesExclude`&&Af(t,e.delivery)),{devices:m,devicesExclude:h,...g}=df(e),_=Ff(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}:{},...If(l,e.conditions)},...d?{schedule:d}:{},..._f(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`&&$t(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}:{},...wf(e)?{groupingSec:e.groupingSec}:{},...e.snoozeOptions===void 0?{}:{snoozeOptions:[...e.snoozeOptions]},...e.askVerdict!==void 0&&Cf(e)?{askVerdict:e.askVerdict}:{},...t?.confirm===void 0?{}:{confirm:t.confirm},...o===void 0?{}:{actions:o}}}function Vf(e,t){let n=Bf(e,void 0,t);return[`template`,`schedule`,`targetUsers`,`snoozeOptions`,`snoozeAllowGlobal`,`groupingSec`,`actions`].filter(e=>n[e]===void 0)}var Hf=[{key:`rule`,get label(){return z.t(`helpers.ruleFormTabs.tab_rule`)},fields:[`name`,`enabled`,`delivery`,`groupingSec`,`targetIds`,`targetUsers`,`targetParams`]},{key:`devices`,get label(){return z.t(`helpers.ruleFormTabs.tab_devices`)},fields:[`deviceScope`]},{key:`conditions`,get label(){return z.t(`helpers.ruleFormTabs.tab_conditions`)},fields:[`conditions`,`classScope`,`schedule`,`systemEventDelivery`]},{key:`notification`,get label(){return z.t(`helpers.ruleFormTabs.tab_notification`)},fields:[`priority`,`mediaImage`,`mediaShowTriggerZone`,`mediaShowSubjectPath`,`mediaGif`,`mediaClip`,`mediaProfile`,`mediaClipSpeed`,`mediaLinkedCameras`,`templateTitle`,`templateBody`]},{key:`actions`,get label(){return z.t(`helpers.ruleFormTabs.tab_actions`)},fields:[`actions`]},{key:`advanced`,get label(){return z.t(`helpers.ruleFormTabs.tab_advanced`)},fields:[`snoozeAllowGlobal`,`snoozeOptions`,`askVerdict`,`cooldownSec`,`cooldownScope`,`cooldownGranularity`]}];function Uf(e,t={}){let n=nn({delivery:e,conditions:t}),r=Ft(n),i=Hf.map(e=>e.key===`conditions`?{...e,label:r.label}:e);return zt(n)?i.filter(e=>e.key!==`devices`):i}function Wf(e){if(e.audio!==void 0)return z.t(`helpers.ruleFormTabs.condSound`);if(e.occupancy!==void 0)return z.t(`helpers.ruleFormTabs.condOccupancy`)}function Gf(e){let t=nn(e),n=Yt(df(e),t);return t===`sensor`&&e.conditions.sensorTransition!==void 0&&!nd(`sensorTransition`,e.conditions)?[...n,{conditionId:`sensorTransition`,reason:Nt}]:n}var Kf=`rule`;function qf(e){return Hf.find(t=>t.key===e)?.key}function Jf(e){return e?.toLowerCase().startsWith(`it`)===!0?`it`:`en`}function Yf(){let{i18n:e}=B(),t=Jf(e.language);return e=>jt(e,t)}D();var Xf=`block text-[11px] font-medium text-foreground`,Zf=`text-[10px] text-foreground-subtle mt-0.5`;function Qf({cameras:e,fleet:t,value:n,onChange:r,emptyMeansAll:i=!1,savedHadDevices:a=!1}){return b(Yn,{devices:e,listState:t.state,fleet:t,value:n,onChange:r,emptyMeansAll:i,savedHadDevices:a})}function $f({value:e,placeholder:t,onChange:n}){let{t:r}=B(),[i,a]=C(``),s=()=>{let t=i.trim();if(t.length===0||e.includes(t)){a(``);return}n([...e,t]),a(``)},c=t=>n(e.filter(e=>e!==t));return o(`div`,{className:`mt-1 space-y-1.5`,children:[e.length>0&&b(`div`,{className:`flex flex-wrap gap-1`,children:e.map(e=>o(`span`,{className:`inline-flex items-center gap-1 rounded bg-surface-hover px-1.5 py-0.5 text-[11px] text-foreground`,children:[e,b(`button`,{type:`button`,onClick:()=>c(e),"aria-label":r(`system.notificationConditionWidgets.remove`,`remove {{v}}`,{v:e}),className:`text-foreground-subtle hover:text-danger`,children:b(Ae,{className:`h-3 w-3`})})]},e))}),b(R,{value:i,placeholder:t,onChange:e=>a(e.target.value),onKeyDown:e=>{e.key===`Enter`&&(e.preventDefault(),s())},onBlur:s})]})}function ep({picker:e,value:t,onChange:n}){let{t:r}=B(),i=p(()=>st(e),[e]),a=p(()=>new Set(t),[t]),s=t.filter(e=>!i.has(e)),c=e=>{n(a.has(e)?t.filter(t=>t!==e):[...t,e])};return o(`div`,{className:`space-y-2`,children:[s.length>0&&b(`div`,{className:`flex flex-wrap gap-1`,children:s.map(e=>o(`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=>o(`div`,{children:[b(`div`,{className:`text-[10px] uppercase tracking-wide text-foreground-muted mb-1`,children:e.fallbackLabel}),b(`div`,{className:`flex flex-wrap gap-1`,children:e.options.map(e=>{let t=a.has(e.value);return b(`button`,{type:`button`,"aria-pressed":t,onClick:()=>c(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 tp({value:e,min:t,max:n,step:r,onChange:i}){let{t:a}=B();return o(`div`,{className:`mt-1 flex items-center gap-2`,children:[b(R,{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&&b(`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 np({value:e,onChange:t,options:n}){let{t:r}=B(),i=rp(n??[]),a=i.length>0?i:rd;return o(`div`,{className:`mt-1 space-y-1`,children:[b(Er,{value:e??`enter`,options:a.map(e=>({value:e.value,label:r(`notificationRules.crossing.${e.value}`,e.label)})),onChange:e=>t(ad(e.target.value))}),b(`p`,{className:Zf,children:r(`notificationRules.crossing.hint`,`Which way the subject crosses the zone.`)})]})}function rp(e){let t=[];for(let n of e){let e=n.value===``||n.value===`enter`?id:ad(n.value);e===void 0||t.some(t=>t.value===e)||t.push({value:e,label:n.label})}return t}function ip({deviceIds:e,cameras:t,value:n,onChange:r}){let{options:i,loading:a}=yu(e,t);return b(Cu,{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 ap({deviceIds:e,value:t,onChange:n}){let{t:r}=B(),{options:i,loading:a}=bu(e);return b(Cu,{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 op=[{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 sp(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:z.t(`system.notificationConditionWidgets.subTypeNeverCountsAlways`,`{{stored}} — sub-type, never counts (always 0)`,{stored:t})}]}function cp({deviceIds:e,cameras:t,classOptions:n,value:r,onChange:i}){let{t:a}=B(),{options:s,loading:c}=yu(e,t),l=r??Lt,u=e=>i({...l,...e}),d=l.op===`became-occupied`||l.op===`became-free`,f=sp(n,l.className);return o(`div`,{className:`mt-1 space-y-1.5`,children:[o(`div`,{className:`flex flex-wrap items-center gap-1.5`,children:[b(`div`,{className:`min-w-[10rem]`,children:b(Er,{value:l.zoneId??``,options:[{value:``,label:c?a(`system.notificationConditionWidgets.loadingZones`,`Loading zones…`):a(`system.notificationConditionWidgets.wholeFrame`,`— whole frame —`)},...s.map(e=>({value:e.value,label:e.label}))],onChange:e=>u({zoneId:e.target.value===``?void 0:e.target.value})})}),b(`div`,{className:`min-w-[9rem]`,children:b(Er,{value:l.className??``,options:[{value:``,label:a(`system.notificationConditionWidgets.anyClass`,`— any class —`)},...f],onChange:e=>u({className:e.target.value===``?void 0:e.target.value})})}),b(`div`,{className:`min-w-[9rem]`,children:b(Er,{value:l.op,options:op.map(e=>({value:e.value,label:a(e.labelKey)})),onChange:e=>{let t=op.find(t=>t.value===e.target.value);t&&u({op:t.value})}})})]}),o(`div`,{className:`flex flex-wrap items-center gap-3 text-xs text-foreground-subtle`,children:[o(`label`,{className:`flex items-center gap-1`,children:[d?a(`system.notificationConditionWidgets.threshold`,`Threshold`):a(`system.notificationConditionWidgets.count`,`Count`),b(R,{type:`number`,min:0,className:`w-16`,value:String(l.count),onChange:e=>u({count:Math.max(0,Number(e.target.value)||0)})})]}),o(`label`,{className:`flex items-center gap-1`,children:[a(`system.notificationConditionWidgets.holdFor`,`Hold for`),b(R,{type:`number`,min:0,max:3600,className:`w-16`,value:String(l.sustainSeconds),onChange:e=>u({sustainSeconds:Math.min(3600,Math.max(0,Number(e.target.value)||0))})}),`s`]}),r===void 0?null:b(`button`,{type:`button`,onClick:()=>i(void 0),className:`underline hover:text-foreground`,children:a(`system.notificationConditionWidgets.clear`,`Clear`)})]}),e.length===0&&b(`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.`)}),b(`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 lp=[{value:`label`,labelKey:`system.notificationConditionWidgets.audioModeLabel`,Icon:Ye},{value:`level`,labelKey:`system.notificationConditionWidgets.audioModeLevel`,Icon:We}];function up({taxonomy:e,value:t,onChange:n}){let{t:r}=B(),i=rn(t),a=e=>n(Mt(t,e)),{choices:s,unknownLabels:c}=Ct(e,i.labels),l=kt(t)??`label`;return o(`div`,{className:`mt-1 space-y-2`,children:[o(`div`,{className:`flex flex-wrap items-center gap-1`,children:[lp.map(e=>b(`button`,{type:`button`,"aria-pressed":l===e.value,onClick:()=>a({mode:e.value}),className:`rounded border px-2 py-0.5 text-[11px] ${l===e.value?`border-primary bg-primary/15 text-foreground`:`border-border text-foreground-subtle hover:bg-surface-hover`}`,children:o(`span`,{className:`inline-flex items-center gap-1`,children:[b(e.Icon,{className:`h-3 w-3`}),r(e.labelKey)]})},e.value)),t===void 0?null:b(`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`)})]}),l===`label`?o(P,{children:[b(`div`,{className:`flex flex-wrap gap-1`,children:s.map(e=>{let t=ct(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 b(`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:vt(i.labels,e.value)}),className:`rounded border px-1.5 py-0.5 text-[10px] ${n}`,children:o(`span`,{className:`inline-flex items-center gap-1`,children:[b(Gr,{iconId:e.iconId,size:12}),e.label]})},e.value)})}),c.length>0&&o(`p`,{className:`text-[10px] text-warning`,children:[r(`system.notificationConditionWidgets.keptFromTheRuleUnknown`,`Kept from the rule, unknown to this hub:`),` `,c.join(`, `)]}),o(`div`,{className:`flex flex-wrap items-center gap-3 text-xs text-foreground-subtle`,children:[o(`label`,{className:`flex items-center gap-1`,children:[r(`system.notificationConditionWidgets.confirmAfter`,`Confirm after`),b(R,{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`)]}),o(`label`,{className:`flex items-center gap-1`,children:[r(`system.notificationConditionWidgets.within`),b(R,{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`]})]}),b(`p`,{className:`text-[11px] text-foreground-subtle`,children:r(`system.notificationConditionWidgets.audioConfirmHint`,{hits:2,window:5})})]}):o(P,{children:[b(`div`,{className:`flex flex-wrap items-center gap-3 text-xs text-foreground-subtle`,children:o(`label`,{className:`flex items-center gap-1`,children:[r(`system.notificationConditionWidgets.louderThan`,`Louder than`),b(R,{type:`number`,min:Et,max:0,step:3,className:`w-20`,value:String(i.dbThreshold??Ot),onChange:e=>a({dbThreshold:Number(e.target.value)})}),`dBFS`]})}),o(`div`,{className:`flex flex-wrap items-center gap-3 text-xs text-foreground-subtle`,children:[o(`label`,{className:`flex items-center gap-1`,children:[r(`system.notificationConditionWidgets.hits`,`Hits`),b(R,{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:gt.hitPercent})]}),o(`label`,{className:`flex items-center gap-1`,children:[r(`system.notificationConditionWidgets.over`),b(R,{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:gt.samplingSeconds})]})]}),b(`p`,{className:`text-[11px] text-foreground-subtle`,children:r(`system.notificationConditionWidgets.dbfsHint`,{min:Et})})]}),bt(t)?b(`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 dp({value:e,onChange:t}){let{t:n}=B(),r=e?.values??[],i=e?.maxDistance??1,a=e=>t(e.length>0?{values:e,maxDistance:i}:void 0),s=e=>t(r.length>0?{values:r,maxDistance:e}:void 0),c=Su().filter(e=>!r.includes(e));return o(`div`,{className:`mt-1 space-y-1.5`,children:[b($f,{value:r,placeholder:n(`system.notificationConditionWidgets.plateText`,`Plate text…`),onChange:a}),c.length>0&&o(`div`,{className:`flex flex-wrap items-center gap-1`,children:[b(`span`,{className:`text-[10px] text-foreground-subtle`,children:n(`system.notificationConditionWidgets.seen`,`Seen:`)}),c.slice(0,12).map(e=>b(`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))]}),o(`label`,{className:`flex items-center gap-2 text-[11px] text-foreground-subtle`,children:[n(`system.notificationConditionWidgets.maxDistance`,`Max distance`),b(R,{type:`number`,min:0,max:3,step:1,value:i,className:`max-w-[5rem]`,onChange:e=>{let t=Number(e.target.value);s(Number.isFinite(t)?Math.max(0,Math.min(3,t)):1)}})]})]})}function fp({gateable:e,value:t,onChange:n}){let{t:r}=B(),i=Yf(),a=e.find(e=>e.id===t?.deviceId),s=new Set(t?.states??[]),c=e=>{let t=Number(e);if(!Number.isFinite(t)||t===0)return n(void 0);n({deviceId:t,states:[]})},l=e=>{if(t===void 0)return;let r=new Set(s);r.has(e)?r.delete(e):r.add(e),n(r.size===0?void 0:{deviceId:t.deviceId,states:[...r]})};return o(`div`,{className:`mt-1 space-y-2`,children:[b(Er,{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=>c(e.target.value)}),a!==void 0&&b(`div`,{className:`flex flex-wrap gap-1.5`,children:a.states.map(e=>b(`button`,{type:`button`,onClick:()=>l(e),className:s.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&&b(`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&&b(`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 pp(e,t){let n=t(e.verdict);return e.latched?`${n} · ${t(`latched`)}`:n}function mp({scenes:e,value:t,onChange:n}){let{t:r}=B(),i=Yf(),a=e.find(e=>e.sceneId===t?.sceneId),s=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}})},c=e=>{t!==void 0&&n({...t,requiredState:e===`matched`?`matched`:`diverged`})},l=e=>{if(t!==void 0){if(e===``){let{latched:e,...r}=t;return n(r)}n({...t,latched:e===`latched`})}};return e.length===0?b(`p`,{className:Zf,children:r(`notificationRules.scene.none`,`No scenes yet — create one on the Scenes page.`)}):o(`div`,{className:`mt-1 space-y-2`,children:[b(Er,{value:t?.sceneId??``,options:[{value:``,label:r(`notificationRules.scene.noGate`,`— no scene gate —`)},...e.map(e=>({value:e.sceneId,label:`${e.cameraName} · ${e.label} — ${pp(e,i)}`}))],onChange:e=>s(e.target.value)}),t!==void 0&&o(`div`,{className:`flex flex-wrap items-center gap-2`,children:[o(`label`,{className:`flex items-center gap-2 text-[11px] text-foreground-subtle`,children:[r(`notificationRules.scene.onlyWhile`,`Only while it is`),b(Er,{value:t.requiredState,options:[{value:`diverged`,label:i(`diverged`)},{value:`matched`,label:i(`matched`)}],onChange:e=>c(e.target.value)})]}),o(`label`,{className:`flex items-center gap-2 text-[11px] text-foreground-subtle`,children:[r(`notificationRules.scene.read`,`Read`),b(Er,{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=>l(e.target.value)})]})]}),a!==void 0&&o(`p`,{className:`text-[10px] text-foreground-subtle mt-0.5`,children:[r(`notificationRules.scene.rightNow`,`Right now:`),` `,pp(a,i)]}),t!==void 0&&a===void 0&&b(`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 hp={days:[0,1,2,3,4,5,6],minute:480},gp=[{value:1,get label(){return z.t(`helpers.notificationSystemEventDelivery.wd_mon`)}},{value:2,get label(){return z.t(`helpers.notificationSystemEventDelivery.wd_tue`)}},{value:3,get label(){return z.t(`helpers.notificationSystemEventDelivery.wd_wed`)}},{value:4,get label(){return z.t(`helpers.notificationSystemEventDelivery.wd_thu`)}},{value:5,get label(){return z.t(`helpers.notificationSystemEventDelivery.wd_fri`)}},{value:6,get label(){return z.t(`helpers.notificationSystemEventDelivery.wd_sat`)}},{value:0,get label(){return z.t(`helpers.notificationSystemEventDelivery.wd_sun`)}}];function _p(e){let t=Math.floor(e/60),n=e%60;return`${String(t).padStart(2,`0`)}:${String(n).padStart(2,`0`)}`}function vp(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 yp(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 bp(e){let t=Object.entries(e).map(([e,t])=>`${e} ${String(t)}`);return t.length>0?z.t(`helpers.notificationSystemEventDelivery.dropped`,{parts:t.join(`, `)}):null}function xp(e,t,n,r=`rule`){if(e===`error`)return yp(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=bp(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 Sp(e,t){return{...e,schedule:t}}function Cp(e,t){let{split:n,...r}=e;return t===`section`?{...r,split:t}:r}function wp(e){return _p(e)}function Tp(e){return vp(e)}function Ep(){return{days:[1,2,3,4,5],startMinute:540,endMinute:1080}}function Dp(e){return{days:[...hp.days],minute:e}}var Op=`Always active — add a window to restrict when the rule fires.`;function kp({value:e,onChange:t,mode:n=`windows`,defaultMinute:r=hp.minute,emptyHint:i}){return n===`times`?b(jp,{value:e,onChange:t,defaultMinute:r}):b(Ap,{value:e,onChange:t,emptyHint:i??Op})}function Ap({value:e,onChange:t,emptyHint:n}){let{t:r}=B(),i=e?.windows??[],a=e?.invert??!1,s=(n,r)=>{if(n.length===0){t(void 0);return}t({windows:n,...r?{invert:!0}:{},...e?.timezone?{timezone:e.timezone}:{}})},c=()=>s([...i,Ep()],a),l=e=>s(i.filter((t,n)=>n!==e),a),u=(e,t)=>s(i.map((n,r)=>r===e?t:n),a);return o(`div`,{className:`mt-1 space-y-2`,"data-testid":`schedule-field-windows`,children:[i.length===0?b(`p`,{className:Zf,children:n}):i.map((e,t)=>b(Mp,{window:e,onChange:e=>u(t,e),onRemove:()=>l(t)},t)),o(`div`,{className:`flex items-center gap-3`,children:[o(`button`,{type:`button`,onClick:c,className:`flex items-center gap-1 rounded-md bg-surface-hover px-2 py-1 text-[11px] text-foreground-subtle hover:text-foreground`,children:[b(te,{className:`h-3 w-3`}),` `,r(`system.notificationScheduleField.addWindow`)]}),i.length>0&&o(`label`,{className:`flex items-center gap-1.5 text-[11px] text-foreground-subtle`,children:[b(`input`,{type:`checkbox`,checked:a,onChange:e=>s([...i],e.target.checked),className:`accent-primary`}),r(`system.notificationScheduleField.activeOutsideTheWindows`,`Active outside the windows`)]})]})]})}function jp({value:e,onChange:t,defaultMinute:n}){let{t:r}=B(),i=e?.timezone,a=e===void 0?{times:[],approximated:!1}:Vt(e);if(a===null)return o(`div`,{className:`mt-1 space-y-2`,"data-testid":`schedule-field-times-fallback`,children:[b(`p`,{className:Zf,children:r(`system.notificationScheduleField.invertedScheduleShownAsBands`,`Inverted schedule — shown as bands. Clear the invert flag (or the windows) to author punctual times.`)}),b(Ap,{value:e,onChange:t,emptyHint:Op})]});let s=a.times,c=e=>{if(e.length===0){t(void 0);return}t(ot(e,i))};return o(`div`,{className:`mt-1 space-y-2`,"data-testid":`schedule-field-times`,children:[a.approximated&&b(`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.`)}),s.length===0?b(`p`,{className:Zf,children:r(`system.notificationScheduleField.noTimesYetAddOne`,`No times yet — add one to send on those days at that clock time.`)}):s.map((e,t)=>b(Np,{time:e,index:t,onChange:e=>c(s.map((n,r)=>r===t?e:n)),onRemove:s.length>1?()=>c(s.filter((e,n)=>n!==t)):void 0},t)),o(`button`,{type:`button`,onClick:()=>c([...s,Dp(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:[b(te,{className:`h-3 w-3`}),` `,r(`system.notificationScheduleField.addTime`)]})]})}function Mp({window:e,onChange:t,onRemove:n}){let{t:r}=B();return o(`div`,{className:`space-y-1.5 rounded-md border border-border p-2`,children:[o(`div`,{className:`flex items-center gap-2 text-xs`,children:[b(`input`,{type:`time`,value:wp(e.startMinute),onChange:n=>t({...e,startMinute:Tp(n.target.value)}),className:`rounded-md border border-border bg-background px-1 py-0.5`}),b(`span`,{className:`text-foreground-subtle`,children:`→`}),b(`input`,{type:`time`,value:wp(e.endMinute),onChange:n=>t({...e,endMinute:Tp(n.target.value)}),className:`rounded-md border border-border bg-background px-1 py-0.5`}),b(`span`,{className:`flex-1`}),b(`button`,{type:`button`,onClick:n,"aria-label":r(`system.notificationScheduleField.removeWindow`,`Remove window`),className:`text-foreground-subtle hover:text-danger`,children:b(ce,{className:`h-3.5 w-3.5`})})]}),b(Pp,{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 Np({time:e,index:t,onChange:n,onRemove:r}){let{t:i}=B();return o(`div`,{className:`space-y-1.5 rounded-md border border-border p-2`,children:[o(`div`,{className:`flex items-center gap-2 text-xs`,children:[b(`span`,{className:`text-foreground-subtle`,children:i(`system.notificationScheduleField.at`,`At`)}),b(`input`,{type:`time`,value:_p(e.minute),onChange:t=>n({...e,minute:vp(t.target.value)}),className:`rounded-md border border-border bg-background px-1 py-0.5`,"data-testid":`schedule-field-time-${String(t)}`}),b(`span`,{className:`flex-1`}),r!==void 0&&b(`button`,{type:`button`,onClick:r,"aria-label":i(`system.notificationScheduleField.removeTime`,`Remove time`),className:`text-foreground-subtle hover:text-danger`,children:b(ce,{className:`h-3.5 w-3.5`})})]}),b(Pp,{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 Pp({days:e,onToggle:t}){return b(`div`,{className:`flex flex-wrap gap-1`,children:gp.map(n=>b(`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 Fp(e){return e>=8}D();function Ip(e){if(typeof e!=`object`||!e)return;let t=Reflect.get(e,`windows`);if(!(!Array.isArray(t)||t.length===0))return e}function Lp(e){return e.type===`multiselect`}function Rp(e){let t=e.suggestions;return t===void 0||t.length===0?[]:t.map(e=>({value:e,label:e}))}function zp(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 Bp(e){return Array.isArray(e)?e.filter(e=>typeof e==`string`):[]}function Vp({field:e,values:t,onChange:n,onChangeMany:r,disabled:i,translationFn:a,onTestField:s,externalProbe:c,allFields:l,onAction:u}){let{t:d}=B();if(e.type===`tags`){if(!hr(e,t,l))return null;let r=e.creatable!==!1;return b(Fr,{mode:`multi`,options:Rp(e),value:Bp(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:Up(e.label,a),description:e.description===void 0?void 0:Up(e.description,a),placeholder:e.placeholder??d(`formBuilder.formBuilder.searchOrAdd`,`Search or add…`),testId:`config-tags-${e.key}`})}if(e.type===`schedule`){if(!hr(e,t,l))return null;let r=Up(e.label,a),i=e.description===void 0?void 0:Up(e.description,a),s=e.mode===`times`?`times`:`windows`;return o(`div`,{className:`space-y-1`,"data-testid":`config-schedule-${e.key}`,children:[r!==void 0&&b(`label`,{className:`block text-[11px] font-medium text-foreground-subtle`,children:r}),i!==void 0&&b(`p`,{className:`text-[10px] text-foreground-subtle`,children:i}),b(kp,{mode:s,value:Ip(t[e.key]),onChange:t=>n(e.key,t)})]})}return Lp(e)&&(Fp(e.options.length)||e.creatable===!0)?hr(e,t,l)?b(Fr,{mode:`multi`,options:zp(e.options),value:Bp(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:Up(e.label,a),description:e.description===void 0?void 0:Up(e.description,a),placeholder:e.placeholder??d(`formBuilder.formBuilder.searchToAdd`,`Search to add…`),testId:`config-multiselect-${e.key}`,listboxId:`msel-${e.key}`}):null:b(Jr,{field:e,values:t,onChange:n,onChangeMany:r,disabled:i,translationFn:a,onTestField:s,externalProbe:c,allFields:l,onAction:u})}function Hp(e){return/^[a-zA-Z0-9_]+(\.[a-zA-Z0-9_]+)+$/.test(e)}function Up(e,t){if(e!==void 0)return t&&Hp(e)?t(e):e}function Wp({section:e,values:t,onChange:n,onChangeMany:r,disabled:i,translationFn:a,onTestField:s,probeResults:c,onAction:l}){let[u,d]=C(e.defaultCollapsed??!1),f=e.style===`accordion`;if(e.fields.reduce((n,r)=>n+ +!!hr(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 o(`div`,{className:`@container rounded-lg border border-border bg-surface p-3`,style:{containerType:`inline-size`},"data-settings-section":e.id,children:[!_&&o(`div`,{className:[`flex items-center justify-between mb-2`,f?`cursor-pointer`:``].join(` `),onClick:f?()=>d(e=>!e):void 0,children:[o(`div`,{children:[e.title&&b(`h3`,{className:`text-[11px] font-semibold text-foreground-subtle uppercase tracking-wider`,children:Up(e.title,a)}),e.description&&b(`p`,{className:`text-[10px] text-foreground-subtle mt-0.5`,children:Up(e.description,a)})]}),f&&b(`span`,{className:`text-foreground-subtle text-xs ml-2`,children:u?`▸`:`▾`})]}),!(u&&!_)&&(g===void 0?b(P,{children:b(`div`,{className:`grid ${h} gap-x-3 gap-y-2.5`,children:p.map(o=>b(Vp,{field:o,values:t,onChange:n,onChangeMany:r,disabled:i,translationFn:a,onTestField:s,externalProbe:c?.[o.key],allFields:e.fields,onAction:l},o.key))})}):b(Jr,{field:g,values:t,onChange:n,onChangeMany:r,disabled:i,translationFn:a,onTestField:s,externalProbe:c?.[g.key],allFields:e.fields,onAction:l},g.key))]})}function Gp({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 b(`div`,{className:`space-y-4`,children:e.sections.map((e,t)=>b(Wp,{section:e,values:u,onChange:d,onChangeMany:f,disabled:r,translationFn:i,onTestField:a,probeResults:o,onAction:c},`${e.id}-${t}`))})}function Kp({pendingCount:e,onSave:t,onDiscard:n,saving:r=!1,saveLabel:i=`Save`,discardLabel:a=`Discard`}){let{t:s}=B();return e<=0?null:o(`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:[b(`span`,{className:`text-xs text-foreground`,children:s(`formBuilder.saveBar.unsavedChanges`,{count:e})}),o(`div`,{className:`flex items-center gap-2`,children:[b(`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}),b(`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?s(`formBuilder.formSaveBar.saving`,`Saving…`):i})]})]})}function qp({tabs:e,activeId:t,onChange:n,countByTab:r,pendingByTab:i}){return e.length===0?null:b(`div`,{className:`flex flex-wrap items-center gap-1 border-b border-border shrink-0`,children:e.map(e=>{let a=e.id===t,s=r?.get(e.id)??0,c=i?.get(e.id)??0;return o(`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,s>0&&o(`span`,{className:`ml-1.5 text-[10px] opacity-60`,children:[`(`,s,`)`]}),c>0&&b(`span`,{className:`ml-1.5 inline-flex h-1.5 w-1.5 rounded-full bg-primary`})]},e.id)})})}D();function Jp({schema:e,values:t,pendingKeys:n,onChange:r,onAction:i,onSave:a,onDiscard:s,disabled:c,activeSubTab:l,onSubTabChange:u,flattenTabs:d=!1,visibilityContext:m,hideSaveBar:h=!1}){let g=e.tabs??[],_=p(()=>{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]),v=new Set(g.map(e=>e.id)),y=[...g,...[..._.keys()].filter(e=>!v.has(e)).map(e=>({id:e,label:e,icon:`wrench`,order:100}))],x=y[0]?.id??`general`,[S,w]=C(x),T=u!==void 0,E=new Set(y.map(e=>e.id)),D=f(new Set);for(let e of E)D.current.add(e);let O=D.current,k=(e=>e&&(E.has(e)||O.has(e))?e:x)(T?l:S),A=e=>{T?u(e):w(e)},j=_.get(k)??[],M={sections:j.length<=1?j.length===1?[{...j[0],title:``}]:j:j.every(e=>!e.title)?[{...j[0],title:``,fields:j.flatMap(e=>e.fields)}]:j},N=h?null:b(Kp,{pendingCount:n.length,onSave:()=>a(n),onDiscard:()=>s(n),saving:c});if(d||y.length<=1)return o(`div`,{className:`flex flex-col gap-3`,children:[b(Gp,{schema:e,values:t,onChange:r,onAction:i,disabled:c,visibilityContext:m}),N]});let P=new Map,F=new Map;for(let[e,t]of _){P.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 o(`div`,{className:`flex flex-col gap-3`,children:[b(qp,{tabs:y.map(e=>({id:e.id,label:e.label})),activeId:k,onChange:A,countByTab:P,pendingByTab:F}),b(Sr,{tabKey:k,children:b(Gp,{schema:M,values:t,onChange:r,onAction:i,disabled:c,visibilityContext:m})}),N]})}var Yp=`device-export`,Xp=`export`,Zp=`Export`;function Qp(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(Qp):e.type===`sub-tabs`?e.tabs.some(e=>e.fields.some(Qp)):e.writerCapName===Yp}function $p(e){return e.tab===`export`?!0:e.fields.some(Qp)}var em=`host/extensions-panel`;function tm(e){return e.type===`widget`?e.widgetId===em:e.type===`group`?e.fields.some(tm):e.type===`sub-tabs`?e.tabs.some(e=>e.fields.some(tm)):!1}function nm(e){return e.fields.some(tm)}function rm(e,t){return!t&&e!==void 0&&xt.includes(e)}function im(e){return e.location!==`top-tab`&&e.location!==`hero`&&!$p(e)&&!nm(e)}function am(e,t,n,r){return!r||rm(t,n)?!0:(e??[]).some(im)}function om(e,t){for(let n of e){if(n.type===`group`){om(n.fields,t);continue}if(n.type===`sub-tabs`){for(let e of n.tabs)om(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 sm(e){let t={};for(let n of e)om(n.fields,t);return t}D();function cm(e,t){return t&&t===`admin`?e:!0}function lm(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?$p(e)&&$p(t)?e.id.localeCompare(t.id):(e.order??0)-(t.order??0):n.localeCompare(r)})};return e.tabs?{...t,tabs:e.tabs}:t}function um(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 dm(e){return e.key}function fm(e){if(!um(e))return e.value}function pm(e){return um(e)?null:e}function mm(e,t){for(let n of e)if(t(n),n.type===`group`)mm(n.fields,t);else if(n.type===`sub-tabs`)for(let e of n.tabs)mm(e.fields,t)}function hm(e){if(!e)return{};let t={};for(let n of e.sections)mm(n.fields,e=>{let n=dm(e);n!==null&&(t[n]=fm(e))});return t}function gm(e,t){if(!e)return null;let n=null;for(let r of e.sections)if(mm(r.fields,e=>{if(n!==null||dm(e)!==t)return;let r=pm(e);r&&r.writerCapName&&r.writerAddonId&&(n={capName:r.writerCapName,addonId:r.writerAddonId})}),n!==null)break;return n}function _m(e){return{...e,fields:e.fields.map(vm)}}function vm(e){return e.type===`separator`||e.type===`info`||e.type===`button`||e.type===`object-array`?e:{...e,readonlyField:!0}}function ym(e,t){return e&&{...e,sections:e.sections.map(e=>({...e,fields:e.fields.map(e=>{let n=pm(e);return n?cm(t,n.minRole)?e:vm(e):e})}))}}function bm({deviceId:e,sectionFilter:t,activeSubTab:n,onSubTabChange:r,flattenSubTabs:i,subTabGrouping:a}){let{t:s}=B(),c=M(),{user:l}=eu(),u=l?.isAdmin===!0,d=f(!1),{data:m,isLoading:h}=Qr({deviceId:e},{refetchInterval:()=>d.current?!1:2500,enabled:Number.isFinite(e)}),{data:g}=dr({deviceId:e},{enabled:Number.isFinite(e)}),_=m?.settings??null,v=m?.live??null,S=p(()=>{if(!_&&!v)return null;let e=_?.sections??[],n=(v?.sections??[]).map(_m),r=[...e,...n],i=t?r.filter(t):r.filter(im);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]),C=p(()=>sm([..._?.sections??[],...v?.sections??[]]),[_,v]),w=p(()=>lm(S),[S]),T=p(()=>ym(w,u),[w,u]),E=p(()=>hm(T),[T]),D=$r(),O=pr(),k=Ln(),A=Nn(),j=cr({onSuccess:()=>{c.invalidateQueries({queryKey:[[`deviceManager`,`getDeviceAggregate`]]})}}),N={isPending:j.isPending,mutate:t=>{j.mutate({deviceId:e,changes:[...t]})}},P=nu({schema:T,serverValues:E,onImmediateSave:y(e=>{let t=Object.entries(e).map(([e,t])=>{let n=gm(T,e);return n?{writerCapName:n.capName,writerAddonId:n.addonId,key:e,value:t}:null}).filter(e=>e!==null);t.length>0&&N.mutate(t)},[T,N]),onDeferredSave:y(async t=>{let n=Object.entries(t).map(([e,t])=>{let n=gm(T,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 j.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`]]})}},[T,j,e,c])}),{values:F,pendingKeys:ee,handleChange:te,handleSave:ne,handleDiscard:re}=P;d.current=P.editingPaused;let ie=Nc(),ae=f(ne),oe=f(re);ae.current=ne,oe.current=re;let se=ie?.register,ce=j.isError?j.error instanceof Error?j.error.message:String(j.error):null,le=ee.join(`\0`);if(x(()=>{if(se===void 0)return;let e=le===``?[]:le.split(`\0`);return se({id:`export`,dirty:e.length>0,saving:j.isPending,error:ce,save:()=>(ae.current(e),Promise.resolve()),discard:()=>oe.current(e)})},[se,le,j.isPending,ce]),h)return o(`div`,{className:`flex items-center justify-center py-12 text-foreground-subtle`,children:[b($e,{className:`h-4 w-4 animate-spin mr-2`}),b(`span`,{className:`text-xs`,children:s(`device.deviceAggregateSection.loadingDeviceAggregate`,`Loading device aggregate…`)})]});if(!T||T.sections.length===0)return b(`div`,{className:`text-xs text-foreground-subtle italic py-4 text-center`,children:s(`device.deviceAggregateSection.noAggregateContributionsForThis`,`No aggregate contributions for this device.`)});async function I(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=ht(e,r);await D.mutateAsync({brokerId:i}),c.invalidateQueries({queryKey:[[`deviceManager`,`getDeviceAggregate`]]});return}if(t===`test-probe`){if(!g)return{status:`error`,error:s(`device.deviceAggregateSection.metadataNotLoaded`)};try{return await k.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=ht(e,t),i=await O.mutateAsync({brokerId:r});return c.invalidateQueries({queryKey:[[`deviceManager`,`getDeviceAggregate`]]}),i}if(t===`device-custom-action`){let t=await A.mutateAsync({deviceId:e,action:n,input:r});return c.invalidateQueries({queryKey:[[`deviceManager`,`getDeviceAggregate`]]}),t}throw Error(`[device-aggregate] unknown action "${t}"`)}return b(Jp,{schema:T,values:F,pendingKeys:ee,onChange:te,onAction:I,onSave:ne,onDiscard:re,hideSaveBar:ie!==null,disabled:N.isPending,activeSubTab:n,onSubTabChange:r,flattenTabs:i,visibilityContext:C})}D();function xm({deviceId:e,onClose:t}){let{t:n}=B(),[r,i]=C(`info`),{data:a}=dr({deviceId:e},{enabled:e>0}),s=Br(e),c=$s(s.presence,s.list),l=r===`history`&&!c?`info`:r,u=typeof a?.name==`string`?a.name:``,d=Pn(e,`full`,u.length>0?u:`#${String(e)}`),f=typeof a?.location==`string`?a.location:``,p=[[`info`,n(`deviceQuickDetail.tabInfo`,{defaultValue:`Device info`})],[`export`,n(`deviceQuickDetail.tabExport`,{defaultValue:`Export`})],...c?[[`history`,n(`deviceQuickDetail.tabHistory`,{defaultValue:`History`})]]:[]];return b(_r,{open:!0,onOpenChange:e=>!e&&t(),children:b(Vr,{width:`lg`,scroll:`body`,children:o(Pc,{deviceId:e,seed:a==null?null:{name:u,location:f,role:typeof a.role==`string`?a.role:null,display:a.display},showOpenFull:!0,onClose:t,children:[b(xr,{children:b(fr,{children:d})}),b(`div`,{className:`mt-3 flex items-center gap-1 rounded-md bg-surface-hover p-0.5 w-fit`,children:p.map(([e,t])=>b(`button`,{type:`button`,onClick:()=>i(e),className:`px-2.5 py-1 rounded text-[11px] font-medium transition-colors ${l===e?`bg-surface text-foreground shadow-sm`:`text-foreground-subtle hover:text-foreground`}`,children:t},e))}),b(yr,{className:`mt-3`,children:o(Bn,{deviceId:e,device:a??void 0,children:[b(`div`,{className:l===`info`?void 0:`hidden`,children:b(yc,{})}),b(`div`,{className:l===`export`?void 0:`hidden`,children:b(bm,{deviceId:e,sectionFilter:$p})}),c?b(`div`,{className:l===`history`?void 0:`hidden`,children:b(Qs,{deviceId:e})}):null]})})]})})})}function Sm({children:e}){let[t,n]=C(null),r=y(e=>n(e),[]),i=y(()=>n(null),[]);return o(Fn,{open:r,children:[e,t===null?null:b(xm,{deviceId:t,onClose:i})]})}D();function Cm({tabs:e,active:t,onChange:n}){return b(`div`,{className:`flex rounded-lg border border-border bg-surface p-0.5 gap-0.5`,children:e.map(e=>b(`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 wm(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 Tm(e){return`${e.inputSize.width}x${e.inputSize.height}`}function Em(e){return e.formats?Object.keys(e.formats).filter(t=>e.formats[t]!==void 0):[]}function Dm({entry:e,selected:t,onSelect:n,disabled:r}){let{t:i}=B(),a=wm(e),s=Tm(e),c=Em(e);return o(`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:[b(`div`,{className:`flex items-start justify-between gap-2`,children:o(`div`,{className:`flex-1 min-w-0`,children:[o(`div`,{className:`flex items-center gap-2`,children:[b(`span`,{className:`text-xs font-semibold text-foreground truncate`,children:e.name}),t&&b(ie,{className:`h-3.5 w-3.5 text-primary shrink-0`})]}),b(`p`,{className:`text-[10px] text-foreground-subtle mt-0.5 line-clamp-2`,children:e.description})]})}),o(`div`,{className:`flex items-center gap-3 mt-2 flex-wrap`,children:[o(`span`,{className:`inline-flex items-center gap-1 text-[10px] text-foreground-subtle`,children:[b(we,{className:`h-3 w-3`}),s]}),a&&b(`span`,{className:`text-[10px] text-foreground-subtle`,children:a}),c.length>0&&b(`div`,{className:`flex gap-1`,children:c.map(e=>b(`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&&b(`span`,{className:`text-[10px] text-foreground-subtle`,children:i(`common.labels`,{count:e.labels.length})})]})]})}function Om({field:e,value:t,onChange:n,disabled:r}){let{t:i}=B(),a=e.catalog??[],s=a.length>0,c=Jt(a).length>0,l=e.allowCustomPath!==!1||e.allowCustom===!0,u=[...s?[{id:`catalog`,label:i(`formBuilder.modelSelector.models`,`Models ({{length}})`,{length:a.length})}]:[],...l?[{id:`custom`,label:i(`formBuilder.modelSelector.customPath`,`Custom Path`)}]:[]],[d,f]=C(s?`catalog`:`custom`),p=t==null?``:String(t);return o(`div`,{className:`space-y-3`,children:[u.length>1&&b(Cm,{tabs:u,active:d,onChange:f}),d===`catalog`&&s&&c&&b(Lr,{catalog:a,value:p,onChange:e=>n(e),disabled:r||e.disabled}),d===`catalog`&&s&&!c&&b(`div`,{className:`space-y-1.5 max-h-[320px] overflow-y-auto pr-1`,children:a.filter(e=>e.legacy!==!0).map(t=>b(Dm,{entry:t,selected:p===t.id,onSelect:()=>n(t.id),disabled:r||e.disabled},t.id))}),d===`catalog`&&!s&&o(`div`,{className:`rounded-md border border-info/30 bg-info/5 px-3 py-2 flex items-start gap-2`,children:[b(Fe,{className:`h-3.5 w-3.5 text-info shrink-0 mt-0.5`}),b(`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.`)})]}),d===`custom`&&l&&o(`div`,{className:`space-y-2`,children:[b(`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&&o(`p`,{className:`text-[10px] text-foreground-subtle`,children:[i(`formBuilder.modelSelector.acceptedFormats`,`Accepted formats:`),` `,e.acceptFormats.join(`, `)]})]}),(e.compatibilityNote||e.conversionGuideUrl)&&o(`div`,{className:`flex items-start justify-between gap-3 pt-1`,children:[e.compatibilityNote&&o(`p`,{className:`flex items-start gap-1 text-[10px] text-foreground-subtle`,children:[b(Fe,{className:`h-3 w-3 mt-0.5 shrink-0`}),e.compatibilityNote]}),e.conversionGuideUrl&&o(`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`),b(ve,{className:`h-3 w-3`})]})]})]})}function km({to:e}){let{search:t}=K();return b(J,{to:`${e}${t}`,replace:!0})}D();function Am(){return z.t(`helpers.keychainRevealHost.forbidden`)}function jm(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 Mm(e){let t=jm(e);if(t===`FORBIDDEN`||t===`UNAUTHORIZED`)return Am();let n=e instanceof Error?e.message:String(e);return n.length>0?z.t(`helpers.keychainRevealHost.failedWith`,{message:n}):z.t(`helpers.keychainRevealHost.failed`)}function Nm({children:e}){let t=qn();return b(Wr,{reveal:y(async e=>{try{return(await t.mutateAsync({ref:e})).value}catch(e){throw Error(Mm(e))}},[t]),children:e})}D();function Pm(){let e=qe(),t=M(),[n,r]=C(()=>e.isConnected()?`connected`:`disconnected`),i=f(!1),[a,o]=C(0),[s,c]=C([]);x(()=>e.subscribeConnectionEvents(e=>{r(t=>(t!==`connected`&&e===`connected`&&i.current&&o(e=>e+1),e!==`connected`&&(i.current=!0),e))}),[e]),x(()=>{a!==0&&t.invalidateQueries({queryKey:[[`addons`,`getLastRestart`]]})},[a,t]);let{data:l}=$n(void 0,{enabled:n===`connected`&&a>0,staleTime:0,refetchOnMount:!1,refetchOnWindowFocus:!1}),u=f(null);return x(()=>{if(l==null||l.requestedAt===u.current)return;u.current=l.requestedAt;let e=Im(l);c(t=>[...t,e]);let t=window.setTimeout(()=>{c(t=>t.filter(t=>t.id!==e.id))},6e3);return()=>window.clearTimeout(t)},[l]),b(P,{children:s.length>0&&b(Fm,{toasts:s})})}function Fm({toasts:e}){return b(`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=>o(`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:[b(He,{className:`w-4 h-4 shrink-0 mt-0.5 text-green-400`}),o(`div`,{children:[b(`div`,{className:`text-[11px] font-semibold text-foreground`,children:e.title}),b(`div`,{className:`text-[10px] text-foreground-subtle mt-0.5`,children:e.message})]})]},e.id))})}function Im(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:z.t(`system.reconnectOverlay.frameworkUpdated`,`Framework updated`),message:z.t(`system.reconnectOverlay.isNow`,`{{packageName}} is now {{fromTo}}.`,{packageName:e.packageName,fromTo:n})}}return{id:t,title:z.t(`system.reconnectOverlay.serverRestarted`,`Server restarted`),message:e.requestedBy===void 0?z.t(`system.reconnectOverlay.manualRestartCompleted`,`Manual restart completed.`):z.t(`system.reconnectOverlay.manualRestartByCompleted`,`Manual restart by {{requestedBy}} completed.`,{requestedBy:e.requestedBy})}}var Lm=`/system/settings`,Rm=[{path:`/system/secrets`,tab:`secrets`},{path:`/system/capabilities`,tab:`capabilities`}];function zm(e,t=``){let n=new URLSearchParams(t);return n.delete(`tab`),n.set(`tab`,e),`${Lm}?${n.toString()}`}function Bm({tab:e}){let{search:t,hash:n}=K();return b(J,{to:`${zm(e,t)}${n}`,replace:!0})}D();var Vm={info:{bg:`bg-info/10`,border:`border-info/30`,icon:Fe},warning:{bg:`bg-warning/10`,border:`border-warning/30`,icon:fe},critical:{bg:`bg-danger/10`,border:`border-danger/30`,icon:Pe}};function Hm({toast:e,onDismiss:t}){let n=Vm[e.severity]??Vm.info,r=n.icon;return x(()=>{let n=e.duration??5e3;if(n<=0)return;let r=setTimeout(()=>t(e.id),n);return()=>clearTimeout(r)},[e.id,e.duration,t]),o(`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:[b(r,{className:`h-4 w-4 shrink-0 mt-0.5 text-foreground-subtle`}),o(`div`,{className:`flex-1 min-w-0`,children:[b(`div`,{className:`text-xs font-semibold text-foreground`,children:e.title}),b(`div`,{className:`text-[11px] text-foreground-subtle mt-0.5`,children:e.message})]}),b(`button`,{type:`button`,onClick:()=>t(e.id),className:`shrink-0 p-0.5 rounded hover:bg-surface-hover transition-colors`,children:b(Ae,{className:`h-3.5 w-3.5 text-foreground-subtle`})})]})}function Um(){let[e,t]=C([]),n=y(e=>{t(t=>t.filter(t=>t.id!==e))},[]);return wn(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:b(`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=>b(`div`,{className:`pointer-events-auto`,children:b(Hm,{toast:e,onDismiss:n})},e.id))})}function Wm(e){return(t,n,r)=>e(t,{...typeof n==`string`?{defaultValue:n}:{defaultValue_one:n.one,defaultValue_other:n.other},...r})}var Gm=(e,t,n)=>Wm(z.t.bind(z))(e,t,n);D();function Km({children:e}){let{t}=B();return b(Le,{t:p(()=>Wm(t),[t]),children:e})}D();function qm(e){if(typeof e!=`object`||!e)return;let{data:t}=e;return t?.code}function Jm(e,t){let n=qm(e);return n===`UNAUTHORIZED`||n===`FORBIDDEN`?!0:/UNAUTHORIZED|FORBIDDEN/.test(t)}function Ym(e,t,n,r){let[i,a]=C(!1),[o,s]=C(null);return x(()=>{if(a(!1),s(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 c=e instanceof Error?e.message:String(e);if(Jm(e,c)){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`,c),n();return}s(c),a(!0)})};return o(!0),()=>{i=!0}},[e,t,n,r]),{bootReady:i,bootError:o}}D();var Xm=3e4;function Zm(e){let t=f(e);t.current=e,x(()=>{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>=Xm&&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)}},[])}D();function Qm(){let{t:e}=B();return o(`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:[b(Wn,{className:`h-7 w-48`}),b(Wn,{className:`h-5 w-72 max-w-full`}),b(Wn,{className:`h-40`})]})}function $m({message:e}){let{t}=B();return b(`div`,{className:`p-2 sm:p-4`,"data-testid":`addon-page-error`,children:b(er,{title:t(`layouts.addonPageLoader.failedTitle`,`This page could not be shown`),message:e})})}var eh=class extends c{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:b($m,{message:this.state.error.message})}};function th({pageKey:e,children:t}){return b(eh,{resetKey:e,children:b(v,{fallback:b(Qm,{}),children:t})})}D();function nh(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 rh=new Map,ih=new Map,ah=new Set;function oh(e){return!e||typeof e!=`object`?!1:typeof e.default==`function`}async function sh(e,t){let i=rh.get(e);if(i)return i;let a=ih.get(e);if(a)return a;ah.has(e)||(On(),r([{name:e,entry:L(t),type:`module`}],{force:!1}),ah.add(e));let o=n(`${e}/page`).then(n=>{if(!oh(n))throw Error(`Addon page remote ${e} (${t}) does not expose a default React component on './page'`);return rh.set(e,n.default),ih.delete(e),n.default}).catch(t=>{throw ih.delete(e),t});return ih.set(e,o),o}function ch(){let{t:e}=B(),{pagePath:t}=Ga(),n=q(),r=qe(),{data:i}=jr(void 0),a=p(()=>i?nh(i):void 0,[i]),o=a?.find(e=>e.path===`/addon/${t}`),s=o?.remoteName,c=o?.bundleUrl,[l,u]=C(null),[d,f]=C(null);return x(()=>{if(!s||!c)return;f(null);let e=rh.get(s);if(e){u(()=>e);return}u(null);let t=!1;return sh(s,c).then(e=>{t||u(()=>e)}).catch(e=>{t||f(e instanceof Error?e.message:String(e))}),()=>{t=!0}},[s,c]),a?o?d?b($m,{message:d}):l?b(th,{pageKey:o.remoteName,children:b(l,{trpc:r.trpcClient,theme:{isDark:document.documentElement.classList.contains(`dark`)},navigate:e=>{n(e.startsWith(`/`)?e:`/${e}`)}})}):b(Qm,{}):b(`div`,{className:`flex items-center justify-center h-full text-foreground-subtle`,children:e(`layouts.addonPageLoader.addonPageNotFound`,`Addon page not found`)}):b(Qm,{})}function lh({children:e}){return b(Ar,{value:uh(Jn({})),children:e})}function uh(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 dh(){let e=gr(),{t}=B();return e.status===`unknown`?b(`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}ci();var fh=/\p{Mn}/gu;function ph(e){return e.normalize(`NFD`).replace(fh,``).toLowerCase().trim()}var mh=[`device`,`page`,`integration`],hh=0,gh=1,_h=2,vh=3,yh=4,bh=5,xh=6,Sh=7;function Ch(e,t,n,r){return n.includes(r)?hh:e===r?gh:e.startsWith(r)?_h:e.split(/\s+/).some(e=>e.startsWith(r))?vh:e.includes(r)?yh:t.some(e=>e.includes(r))?bh:null}function wh(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 Th(e){return e<4?0:e<=7?1:e<=12?2:3}function Eh(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 Dh(e,t){if(wh(e,t))return xh;let n=Th(t.length);if(n>0){for(let r of e.split(/\s+/))if(Eh(r,t,n)!==null)return Sh}return null}function Oh(e,t,n=200){let r=ph(t);if(r.length===0)return{groups:[],totalMatched:0,truncated:!1};let i=new Map;for(let t of e){let e=ph(t.label),n=Ch(e,(t.keywords??[]).map(ph),(t.identifiers??[]).map(ph),r)??Dh(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 mh){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 kh(e){return e.flatMap(e=>e.items)}function Ah(e,t){return e.filter(e=>!e.adminOnly||t)}function jh({t:e,isAdmin:t}){let n=Ah([{label:e(`nav.devices`,`Devices`),icon:ue,path:`/devices`},{label:e(`nav.integrations`),icon:Be,path:`/integrations`},{label:e(`nav.build`,`Build-your-self`),icon:_e,path:`/build`,adminOnly:!0},{label:e(`nav.locations`,`Locations`),icon:Ge,path:`/locations`,adminOnly:!0},{label:e(`nav.viewer`,`Viewer`),icon:an,path:`/live`}],t),r=Ah([{label:e(`nav.library`,`Library`),icon:on,path:`/library`,adminOnly:!0,keywords:[`People`,`Vehicles`,`Events`,`Scenes`,`plates`,`faces`,`detection-intelligence`]},{label:e(`nav.recordings`,`Recordings`),icon:se,path:`/recordings`,adminOnly:!0}],t),i=Ah([{label:e(`nav.nodes`,`Nodes`),icon:ne,path:`/system/nodes`,adminOnly:!0},{label:e(`nav.history`,`History`),icon:tt,path:`/system/history`,adminOnly:!0,keywords:[`charts`,`graphs`,`energy`,`temperature`,`metrics`,`trends`]},{label:e(`nav.pipeline`,`Pipeline`),icon:yn,path:`/system/pipeline`},{label:e(`system.addons`),icon:oe,path:`/system/addons`,adminOnly:!0},{label:e(`system.ai`,`AI`),icon:pe,path:`/system/ai`,adminOnly:!0}],t),a=Ah([{label:e(`system.identity`,`Identity & Access`),icon:Re,path:`/system/identity`,adminOnly:!0},{label:e(`system.network`,`Network`),icon:dn,path:`/system/network`,adminOnly:!0},{label:e(`system.integrations`,`Connectivity`),icon:Be,path:`/system/integrations`,adminOnly:!0},{label:e(`system.data`,`Data`),icon:be,path:`/system/data`,adminOnly:!0},{label:e(`system.notifications`,`Notifications`),icon:me,path:`/system/notifications`,adminOnly:!0},{label:e(`system.calendars`,`Calendars`),icon:ln,path:`/system/calendars`,adminOnly:!0},{label:e(`system.systemNav`,`System`),icon:ke,path:Lm,adminOnly:!0},{label:e(`system.logs`,`Logs`),icon:Ue,path:`/system/logs`,adminOnly:!0},{label:e(`system.terminal`,`Terminal`),icon:pn,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 Mh={gauge:Ve,puzzle:oe,bot:I,cpu:we,terminal:pn,box:le,boxes:le,monitor:an,wrench:Ne,activity:We,plug:Be,"graduation-cap":de};function Nh(e){return Mh[e]??oe}function Ph(e,t){for(let n of jh(t))for(let t of n.items)if(t.path===e)return{icon:t.icon,title:t.label,path:t.path};return null}var Fh=` · `;function Ih(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(Fh)}function Lh(e,t=null){let n=rr(e),r=Zn(z.language.startsWith(`it`)?`it`:`en`),i=Cn(e),a=Sn(t);return e.map(e=>{let t=String(e.id),o=Kn(e,`compact`,i,r),s=o.length>0?o:e.stableId||`#${t}`,c=n.get(e.id),l=c!==void 0&&(s===c||s.split(Fh).includes(c)),u=a(e),d=u.kind===`resolved`?u.integration.name:``;return{key:`device:${t}`,domain:`device`,label:s,subtitle:Ih(e,t,s,l?void 0:c),identifiers:[t,`#${t}`],keywords:[...e.name.length>0&&e.name!==s?[e.name]:[],e.stableId,e.addonId,e.location??``,c??``,d].filter(e=>e.length>0),path:`/devices/${t}`,icon:Tn(e.type).icon}})}function Rh(e){return e.map(e=>({key:`integration:${e.id}`,domain:`integration`,label:e.name||e.addonId,subtitle:e.enabled?e.addonId:z.t(`helpers.searchItems.disabled`,{addonId:e.addonId}),keywords:[e.addonId,e.processState],path:`/integrations/${e.id}`}))}function zh(e,t,n){let r=e.section?.trim();return r?t[r]??e.sectionLabel?.trim()??r:n}function Bh(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:zh(e,i,n.ungrouped),keywords:[e.addonId],path:e.path,icon:Nh(e.icon)}));return[...r,...a]}D();var Vh={device:{labelKey:`search.resultsList.devices`,icon:ue},page:{labelKey:`search.resultsList.pages`,icon:cn},integration:{labelKey:`search.resultsList.integrations`,icon:Be}};function Hh({groups:e,activeKey:t,query:n,totalMatched:r,truncated:i,onSelect:a,onHover:s}){let{t:c}=B(),l=f(null);if(x(()=>{t&&(l.current?.querySelector(`[data-key="${CSS.escape(t)}"]`))?.scrollIntoView({block:`nearest`})},[t]),n.trim().length===0)return null;if(e.length===0)return b(`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 o(P,{children:[b(`div`,{ref:l,role:`listbox`,className:`max-h-[60vh] overflow-y-auto py-1`,children:e.map(e=>{let n=Vh[e.domain],r=n.icon;return o(`div`,{className:`px-1 py-1`,children:[o(`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:[b(r,{className:`h-3 w-3`}),c(n.labelKey)]}),e.items.map(e=>{let r=e.icon??n.icon,i=e.key===t;return o(`button`,{type:`button`,role:`option`,"aria-selected":i,"data-key":e.key,onMouseEnter:()=>s(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:[b(r,{className:`h-3.5 w-3.5 shrink-0 ${i?`text-primary`:`text-foreground-subtle`}`}),o(`span`,{className:`flex-1 min-w-0`,children:[b(`span`,{className:`block truncate font-medium`,children:e.label}),e.subtitle&&b(`span`,{className:`block truncate text-[10px] text-foreground-subtle`,children:e.subtitle})]})]},e.key)})]},e.domain)})}),i&&b(`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})})]})}D();function Uh({navSections:e,addonPages:t,compact:n,onNavigated:r}){let{t:i}=B(),a=q(),s=f(null),c=f(null),l=f(null),[u,d]=C(null),[m,h]=C(``),[g,_]=C(0),[v,S]=C(!1),{data:w}=ei({projection:`slim`}),{data:T}=ai(void 0),E=p(()=>{let n={detection:i(`nav.detectionSection`,`Detection`),cluster:i(`nav.clusterSection`,`Cluster`),administration:i(`system.title`,`Administration`),ungrouped:i(`nav.addonPages`,`Addon Pages`)};return[...Lh(w??[],T??null),...Bh(e,t,n),...Rh(T??[])]},[w,T,e,t,i]),{groups:D,totalMatched:O,truncated:k}=p(()=>Oh(E,m),[E,m]),A=p(()=>kh(D),[D]);x(()=>{_(0)},[m,E]),x(()=>{v&&s.current?.focus()},[v]);let j=y(()=>{S(!1),h(``),_(0)},[]),M=y(e=>{a(e.path),j(),s.current?.blur(),r?.()},[a,j,r]);x(()=>{function e(e){(e.metaKey||e.ctrlKey)&&e.key.toLowerCase()===`k`&&(e.preventDefault(),S(!0))}return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[]),x(()=>{if(!v)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&&S(!1)}return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[v]);let N=v&&m.trim().length>0;x(()=>{if(!N){d(null);return}let e=()=>{let e=s.current?.getBoundingClientRect();e&&d({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)}},[N]);let P=A[g]?.key??null,F=i(`search.placeholder`,`Search devices, pages, integrations…`),ee=o(`div`,{className:`relative`,children:[b(Ye,{className:`pointer-events-none absolute left-2 top-1/2 h-3.5 w-3.5 -translate-y-1/2 text-foreground-subtle`}),b(`input`,{ref:s,type:`text`,value:m,placeholder:F,"aria-label":F,role:`combobox`,"aria-expanded":v&&m.trim().length>0,"aria-controls":`global-search-results`,onChange:e=>{h(e.target.value),S(!0)},onFocus:()=>S(!0),onKeyDown:e=>{if(e.key===`ArrowDown`)e.preventDefault(),A.length>0&&_(e=>(e+1)%A.length);else if(e.key===`ArrowUp`)e.preventDefault(),A.length>0&&_(e=>(e-1+A.length)%A.length);else if(e.key===`Enter`){e.preventDefault();let t=A[g];t&&M(t)}else e.key===`Escape`&&(e.preventDefault(),j(),s.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`}),m.length>0&&b(`button`,{type:`button`,"aria-label":i(`search.globalSearch.clearSearch`,`Clear search`),onClick:()=>{h(``),s.current?.focus()},className:`absolute right-1.5 top-1/2 -translate-y-1/2 text-foreground-subtle hover:text-foreground`,children:b(Ae,{className:`h-3 w-3`})}),N&&u!==null&&li(b(`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:b(Hh,{groups:D,activeKey:P,query:m,totalMatched:O,truncated:k,onSelect:M,onHover:e=>{let t=A.findIndex(t=>t.key===e.key);t>=0&&_(t)}})}),document.body)]});return n?b(`div`,{ref:c,className:`px-1.5 pb-1.5`,children:v?b(`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:ee}):b(`button`,{type:`button`,onClick:()=>S(!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:b(Ye,{className:`h-3.5 w-3.5 shrink-0`})})}):b(`div`,{ref:c,className:`px-2 pb-2`,children:ee})}var Wh=/^(\d{1,3}\.){3}\d{1,3}$/;function Gh(e){let t=e.startsWith(`[`)&&e.endsWith(`]`)?e.slice(1,-1):e;return!!(Wh.test(t)||t.includes(`:`))}function Kh(e,t){return!t||Gh(e)?!1:e===t||e.endsWith(`.${t}`)}D();var qh=`auth-webauthn/passkey-enrollment`,Jh=`camstack_passkey_prompt_dismissed:`,Yh=720*60*60*1e3;function Xh(e){try{let t=localStorage.getItem(`${Jh}${e}`);if(!t)return!1;let n=Number(t);return Number.isFinite(n)?Date.now()-n<Yh:!1}catch{return!1}}function Zh(e){try{localStorage.setItem(`${Jh}${e}`,String(Date.now()))}catch{}}function Qh(){let{user:e}=eu(),{t}=B(),n=qe(),r=ar(qh),[i,a]=C(!1),[s,c]=C(!1),l=p(()=>e?Xh(e.id):!0,[e]),u=xn.auth.listLoginMethods.useQuery().data?.find(e=>e.kind===`passkey`),d=u!==void 0&&Kh(window.location.hostname,u.rpId),f=e!==null&&d&&r!=null&&!l,m=T({queryKey:[`auth`,`listOwnPasskeys`],queryFn:()=>n.listOwnPasskeys(),enabled:f,staleTime:6e4}),h=y(()=>{e&&Zh(e.id),a(!0),c(!1)},[e]),g=y(()=>{c(!1),m.refetch()},[m]);return!f||i||m.data===void 0||m.data.length>0?null:o(`div`,{className:`shrink-0 border-b border-primary/20 bg-primary/5`,children:[o(`div`,{className:`flex items-center gap-2.5 px-3 py-2 text-xs text-foreground`,children:[b(sn,{className:`h-4 w-4 text-primary shrink-0`}),b(`span`,{className:`flex-1 min-w-0`,children:t(`passkeyPrompt.message`,`Save a passkey for faster sign-in?`)}),b(`button`,{onClick:()=>c(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`)}),b(`button`,{onClick:h,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`)}),b(`button`,{onClick:h,"aria-label":t(`passkeyPrompt.notNow`,`Not now`),className:`p-1 rounded text-foreground-subtle hover:text-foreground`,children:b(Ae,{className:`h-3.5 w-3.5`})})]}),s&&b(`div`,{className:`px-3 pb-3`,children:o(`div`,{className:`max-w-xl`,children:[b(Xr,{widgetId:qh,host:`dashboard`}),b(`div`,{className:`mt-2 flex justify-end`,children:b(`button`,{onClick:g,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 $h=6e4;function eg(){let e=En(void 0,{staleTime:$h});return{info:e.data?.serverName??null,isLoading:e.isLoading}}D();var tg=`system-config`,ng=`hub`,rg=`camstack_server_name_prompt_dismissed`;function ig(){try{return sessionStorage.getItem(rg)===`1`}catch{return!1}}function ag(){try{sessionStorage.setItem(rg,`1`)}catch{}}function og(e){return e.isAdmin&&e.info!==null&&e.info.isDefault&&!e.dismissed}function sg(){let{user:e}=eu(),{info:t}=eg(),[n,r]=C(ig);return og({isAdmin:e?.isAdmin===!0,info:t,dismissed:n})?b(cg,{suggestion:t?.name??``,onLater:()=>{ag(),r(!0)}}):null}function cg({suggestion:e,onLater:t}){let{t:n}=B(),r=M(),i=ii(),[a,s]=C(e),[c,l]=C(null),u=f(null);x(()=>u.current?.focus(),[]);let d=y(async()=>{let e=Qt.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:tg,nodeId:ng,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 b(_r,{open:!0,onOpenChange:e=>!e&&t(),children:b(Vr,{children:o(`form`,{onSubmit:e=>{e.preventDefault(),i.isPending||d()},children:[o(xr,{children:[b(fr,{children:n(`serverName.title`,`Name this server`)}),b(Nr,{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.`)})]}),b(yr,{children:b(ti,{label:n(`serverName.label`,`Server name`),...c===null?{}:{error:c},children:b(R,{ref:u,value:a,maxLength:48,onChange:e=>s(e.target.value),state:c===null?`default`:`error`,"aria-label":n(`serverName.label`,`Server name`)})})}),o(Tr,{children:[b(bn,{type:`button`,variant:`ghost`,onClick:t,disabled:i.isPending,children:n(`serverName.later`,`Later`)}),o(bn,{type:`submit`,disabled:i.isPending||a.trim().length===0,children:[i.isPending&&b($e,{className:`h-4 w-4 animate-spin`}),n(`common.save`,`Save`)]})]})]})})})}var lg=4,ug=160,dg=320,fg=`env(safe-area-inset-top)`,pg=`env(safe-area-inset-bottom)`;function mg(e){let{rect:t,viewportWidth:n,viewportHeight:r}=e,i=Math.min(dg,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+lg}px, calc(${fg} + 8px))`;return{...a,top:e,maxHeight:`max(${ug}px, calc(100dvh - ${e} - ${pg} - 8px))`}}let o=`max(${r-t.top+lg}px, calc(${pg} + 8px))`;return{...a,bottom:o,maxHeight:`max(${ug}px, calc(100dvh - ${o} - ${fg} - 8px))`}}function hg(e){return e===`totp`||e===`passkey`}function gg(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(hg);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 _g(e,t){switch(e){case`sso-not-linked`:return z.t(`helpers.ssoReturn.notLinked`,{provider:t??z.t(`helpers.ssoReturn.signInFallback`)});case`sso-state`:return z.t(`helpers.ssoReturn.state`)}}var vg={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 yg(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:z.t(vg[r]??`helpers.ssoReturn.link.failed`)}}var bg=`camstack:sso-return`,xg=`camstack:sso-ack`,Sg=`/sso-complete`,Cg=1500,wg=520,Tg=680;function Eg(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 Dg(e){return e.target===`login`?`/login#${e.fragment}`:`/system/my-access?${e.query}`}function Og(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 kg(e=window){let t=Math.max(0,Math.round(e.screenX+(e.outerWidth-wg)/2)),n=Math.max(0,Math.round(e.screenY+(e.outerHeight-Tg)/2));return[`popup=yes`,`width=${wg}`,`height=${Tg}`,`left=${t}`,`top=${n}`,`toolbar=no`,`menubar=no`,`location=no`,`status=no`,`resizable=yes`,`scrollbars=yes`].join(`,`)}function Ag(e){try{return window.open(e??`about:blank`,`camstack-sso`,kg())??null}catch{return null}}function jg(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 Mg(e){if(typeof e!=`object`||!e)return!1;let t=e;return t.type===`camstack:sso-return`&&jg(t.completion)}function Ng(e,t,n){return t===null||e.source!==t||e.origin!==n?null:Mg(e.data)?e.data.completion:null}var Pg=`camstack-sso`,Fg=`camstack:sso-done`;function Ig(e,t){return e.target===`profile`?{target:`profile`,query:e.query}:t?{target:`login`}:null}function Lg(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 Rg(e){return typeof e==`object`&&!!e&&e.type===`camstack:sso-done-ack`}function zg(e){try{let t=e.location.origin;return typeof t==`string`?t:null}catch{return null}}function Bg(){if(typeof BroadcastChannel>`u`)return null;try{let e=new BroadcastChannel(Pg);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 Vg=500;function Hg(e,t,n=window,r={}){let i=n.location.origin,a=r.channel===void 0?Bg():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=Ng(r,e,i);a===null||l||(l=!0,n.removeEventListener(`message`,d),e.postMessage({type:xg},i),t.onReturn(a))};n.addEventListener(`message`,d);let f=o?.subscribe(e=>{let n=Lg(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?.())},Vg);return()=>{n.removeEventListener(`message`,d),f?.(),a?.close(),c(p)}}function Ug(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 Wg(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))},Cg)})}function Gg(e,t,n){let r=Wg(n,e=>{let r=r=>{Ug(r,t,n.origin)&&e()};return n.addEventListener(`message`,r),()=>n.removeEventListener(`message`,r)});try{let r={type:bg,completion:e};t.postMessage(r,n.origin)}catch{}return r}function Kg(e,t,n){let r=Wg(n,e=>t.subscribe(t=>{Rg(t)&&e()}));return t.post({type:Fg,...e}),r}async function qg(e,t){let n=t.opener!==null&&!t.opener.closed?t.opener:null;if(n!==null&&zg(n)===t.origin&&await Gg(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=Ig(e,i);if(a!==null&&t.channel!==null&&(r!==null&&i&&await t.persistSession(r),await Kg(a,t.channel,t))){t.close();return}if(n!==null&&e.target===`profile`){let n=yg(`?${e.query}`);if(n?.kind===`error`){t.showResult({kind:`link-error`,message:n.message});return}t.close();return}t.continueAt(Dg(e))}function Jg(e,t){return(t.length>0&&e.startsWith(t)?e.slice(t.length):e).replace(/\/+$/,``)===Sg}var Yg=`camstack:broker-oauth`;function Xg(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 Qg(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||Xg(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 $g={open:e=>Ag(e),assign:e=>window.location.assign(e),watch:(e,t)=>Qg(e,t)};function e_(e,t,n=$g){let r=L(Og(e)),i=n.open(r);if(i===null){n.assign(r);return}n.watch(i,e=>{t?.(e)})}function t_(e,t,n){e_(Zg(e,t),n)}var n_=!1;function r_(){return n_}function i_(){n_=!0}function a_(e){return!e.read&&e.severity===`critical`}function o_(e){return e.filter(a_)}function s_(e){return e!==void 0&&typeof e.href==`string`&&e.href.length>0}var c_=/^\/addon\/[^/?#]+\/oauth\//;function l_(e){return e.navigation===void 0?c_.test(e.href):e.navigation===`server`}function u_({action:e,className:t,onActivate:n}){let r=M();return l_(e)?b(`a`,{href:L(e.href),className:t,onClick:t=>{t.preventDefault(),n?.(t),e_(e.href,()=>{r.invalidateQueries({queryKey:[[`alerts`]]}),r.invalidateQueries({queryKey:[[`broker`]]}),r.invalidateQueries({queryKey:[[`recordEntries`]]})})},children:e.label}):b(cs,{to:e.href,className:t,onClick:n,children:e.label})}D(),ci();var d_={info:Fe,success:He,warning:fe,error:Pe,critical:un},f_={info:`text-info`,success:`text-success`,warning:`text-warning`,error:`text-danger`,critical:`text-danger`},p_={active:`border-l-info`,"in-progress":`border-l-warning`,completed:`border-l-success`,failed:`border-l-danger`,dismissed:`border-l-foreground-subtle/30`};function m_(e){let t=Math.floor((Date.now()-e)/1e3);if(t<60)return z.t(`helpers.relativeTime.justNow`);let n=Math.floor(t/60);if(n<60)return z.t(`helpers.relativeTime.minutesAgo`,{count:n});let r=Math.floor(n/60);if(r<24)return z.t(`helpers.relativeTime.hoursAgo`,{count:r});let i=Math.floor(r/24);return z.t(`helpers.relativeTime.daysAgo`,{count:i})}function h_(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function g_(e){return typeof e==`string`&&e.length>0?e:void 0}function __(e){if(h_(e.metadata)){let t=g_(e.metadata.nodeId)??g_(e.metadata.agentId);if(t!==void 0)return t}let t=e.source;if(t!==void 0&&!(t.type!==`node`&&t.type!==`agent`))return g_(t.id)}function v_({alert:e,onMarkRead:t,onDismiss:n}){let{t:r}=B(),i=e.severity in d_?e.severity:`info`,a=s_(e.action)?e.action:void 0,s=e.status in p_?e.status:`active`,c=d_[i],l=f_[i],u=p_[s],{nodes:d}=Qn(),f=__(e),p=f===void 0?void 0:d.find(e=>e.id===f),m=f===void 0?void 0:p?.name??f;return o(`div`,{className:`flex items-start gap-2.5 px-3 py-2.5 border-l-2 ${u} ${e.read?`opacity-60`:``} hover:bg-surface-hover transition-colors`,children:[b(c,{className:`h-3.5 w-3.5 shrink-0 mt-0.5 ${l}`}),o(`div`,{className:`flex-1 min-w-0`,children:[o(`div`,{className:`flex items-center gap-1.5`,children:[b(`span`,{className:`text-[11px] font-semibold ${e.read?`text-foreground-subtle`:`text-foreground`}`,children:e.title}),!e.read&&b(`span`,{className:`h-1.5 w-1.5 rounded-full bg-primary shrink-0`})]}),m!==void 0&&b(`div`,{className:`text-foreground-subtle text-[10px] mt-0.5 truncate`,children:m}),b(`div`,{className:`text-[10px] text-foreground-subtle mt-0.5 line-clamp-2`,children:e.message}),a!==void 0&&b(u_,{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&&o(`div`,{className:`mt-1.5 flex items-center gap-2`,children:[b(`div`,{className:`flex-1 h-1 bg-surface-hover rounded-full overflow-hidden`,children:b(`div`,{className:`h-full bg-primary rounded-full transition-all duration-300`,style:{width:`${String(Math.min(100,Math.max(0,e.progress)))}%`}})}),o(`span`,{className:`text-[9px] text-foreground-subtle font-mono shrink-0`,children:[String(Math.round(e.progress)),`%`]})]}),b(`div`,{className:`text-[9px] text-foreground-subtle/60 mt-1`,children:m_(e.updatedAt)})]}),o(`div`,{className:`flex items-center gap-0.5 shrink-0`,children:[!e.read&&b(`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:b(ie,{className:`h-3 w-3 text-foreground-subtle`})}),e.status!==`in-progress`&&b(`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:b(Ae,{className:`h-3 w-3 text-foreground-subtle`})})]})]})}function y_({variant:e=`icon`,compact:t=!1}={}){let{t:n}=B(),[r,i]=C(!1),[a,s]=C(!1),c=f(null),l=f(null),u=M(),{data:d=0}=zn(void 0,{refetchInterval:3e4}),{data:p=[],isLoading:m}=Hr({limit:50},{enabled:r}),h=a?p:p.filter(e=>!e.read),g=p.filter(e=>e.read).length,_=()=>{u.invalidateQueries({queryKey:[[`alerts`]]})},v=sr({onSuccess:_}),S=In({onSuccess:_}),w=Dn({onSuccess:_});Or(`alert.created`,()=>{u.invalidateQueries({queryKey:[[`alerts`]]})}),Or(`alert.updated`,()=>{u.invalidateQueries({queryKey:[[`alerts`]]})}),x(()=>{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 T=y(e=>{v.mutate({alertId:e})},[v]),E=y(e=>{e&&w.mutate({alertId:e})},[w]),D=y(()=>{S.mutate(void 0),i(!1)},[S]),O=h.filter(a_),k=new Set(O.map(e=>e.id)),A=h.filter(e=>e.status===`in-progress`&&!k.has(e.id)),j=h.filter(e=>e.status!==`in-progress`&&!k.has(e.id)),[N,P]=C({}),F=y(()=>{let e=l.current;e&&P(mg({rect:e.getBoundingClientRect(),viewportWidth:window.innerWidth,viewportHeight:window.innerHeight}))},[]);return x(()=>{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]),o(`div`,{children:[e===`sidebar`?o(`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:[o(`span`,{className:`relative inline-flex shrink-0`,children:[b(Ue,{className:`h-3.5 w-3.5`}),t&&d>0&&b(`span`,{className:`absolute -top-1 -right-1 h-2 w-2 rounded-full bg-primary`})]}),!t&&b(`span`,{className:`flex-1 text-left`,children:n(`ui.alertBell.alerts`,`Alerts`)}),!t&&d>0&&b(`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)})]}):o(`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:[b(Ue,{className:`h-4.5 w-4.5`}),d>0&&b(`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&&li(o(`div`,{ref:c,style:N,className:`bg-surface border border-border rounded-lg shadow-xl flex flex-col overflow-hidden`,children:[o(`div`,{className:`flex items-center justify-between px-3 py-2 border-b border-border shrink-0`,children:[b(`span`,{className:`text-[12px] font-semibold text-foreground`,children:n(`ui.alertBell.alerts`,`Alerts`)}),o(`div`,{className:`flex items-center gap-2`,children:[g>0&&o(`label`,{className:`flex items-center gap-1 text-[10px] text-foreground-subtle cursor-pointer select-none`,children:[b(`input`,{type:`checkbox`,checked:a,onChange:e=>s(e.target.checked),className:`h-3 w-3 rounded border-border accent-primary cursor-pointer`}),n(`ui.alertBell.showRead`,`Show read`)]}),d>0&&o(`button`,{type:`button`,onClick:D,className:`flex items-center gap-1 text-[10px] text-primary hover:text-primary/80 transition-colors`,children:[b(hn,{className:`h-3 w-3`}),n(`ui.alertBell.markAllRead`,`Mark all read`)]})]})]}),o(`div`,{className:`flex-1 overflow-y-auto`,children:[m&&b(`div`,{className:`flex items-center justify-center py-8`,children:b($e,{className:`h-4 w-4 animate-spin text-foreground-subtle`})}),!m&&h.length===0&&o(`div`,{className:`flex flex-col items-center justify-center py-8 text-foreground-subtle`,children:[b(Ue,{className:`h-6 w-6 mb-2 opacity-40`}),b(`span`,{className:`text-[11px]`,children:p.length>0?n(`ui.alertBell.noUnreadAlerts`,`No unread alerts`):n(`ui.alertBell.noAlerts`,`No alerts`)}),p.length>0&&!a&&b(`button`,{type:`button`,onClick:()=>s(!0),className:`text-[10px] text-primary mt-1 hover:underline`,children:n(`ui.alertBell.showRead`,{count:g})})]}),O.length>0&&o(`div`,{className:`border-b border-border`,children:[b(`div`,{className:`px-3 py-1.5 bg-danger/5`,children:b(`span`,{className:`text-[9px] font-semibold uppercase tracking-widest text-danger`,children:n(`ui.alertBell.urgent`,`Urgent`)})}),O.map(e=>b(v_,{alert:e,onMarkRead:T,onDismiss:E},e.id))]}),A.length>0&&o(`div`,{className:`border-b border-border`,children:[b(`div`,{className:`px-3 py-1.5 bg-surface-hover/50`,children:b(`span`,{className:`text-[9px] font-semibold uppercase tracking-widest text-foreground-subtle/60`,children:n(`ui.alertBell.inProgress`,`In Progress`)})}),A.map(e=>b(v_,{alert:e,onMarkRead:T,onDismiss:E},e.id))]}),j.map(e=>b(v_,{alert:e,onMarkRead:T,onDismiss:E},e.id))]})]}),document.body)]})}D(),ci();function b_({alert:e,onMarkRead:t}){let{t:n}=B(),r=s_(e.action)?e.action:void 0;return o(`div`,{className:`border-b border-border last:border-b-0 px-3 py-2.5`,children:[b(`div`,{className:`text-[12px] font-semibold text-foreground`,children:e.title}),b(`div`,{className:`text-[11px] text-foreground-muted mt-0.5`,children:e.message}),o(`div`,{className:`mt-2 flex flex-wrap items-center gap-2`,children:[r!==void 0&&b(u_,{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`}),b(bn,{type:`button`,variant:`ghost`,size:`sm`,onClick:()=>t(e.id),children:n(`ui.alertBell.markAsRead`,`Mark as read`)})]})]})}function x_(){let{t:e}=B(),t=M(),[n,r]=C(r_()),{data:i=[],isLoading:a}=Hr({limit:50}),s=p(()=>o_(i),[i]),c=sr({onSuccess:y(()=>{t.invalidateQueries({queryKey:[[`alerts`]]})},[t])}),l=y(e=>{c.mutate({alertId:e})},[c]),u=y(()=>{i_(),r(!0)},[]);return a||n||s.length===0?null:li(b(`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:o(`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:[o(`div`,{className:`flex items-start justify-between gap-2 px-3 py-2.5 border-b border-border shrink-0 bg-danger/5`,children:[o(`div`,{children:[b(`h2`,{id:`critical-alerts-panel-title`,className:`text-[12px] font-semibold text-foreground`,children:e(`ui.criticalAlertsPanel.title`,`Urgent alerts`)}),b(`p`,{className:`text-[10px] text-foreground-muted mt-0.5`,children:e(`ui.criticalAlertsPanel.subtitle`,`These need your attention.`)})]}),b(Yr,{type:`button`,variant:`ghost`,onClick:u,"aria-label":e(`ui.criticalAlertsPanel.close`,`Close`),"data-testid":`critical-alerts-panel-close`,icon:Ae})]}),b(`div`,{className:`flex-1 overflow-y-auto`,children:s.map(e=>b(b_,{alert:e,onMarkRead:l},e.id))})]})}),document.body)}D();function S_(){let e=Yc();return S(e.subscribe,e.getSnapshot,e.getSnapshot)}var C_=[`detection`,`cluster`,`administration`];function w_(e){return C_.includes(e)}function T_(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(w_(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 E_=`camstack:last-path`,D_=512,O_=[`/login`,`/change-password`,`/access-denied`,`/logout`];function k_(e){return!e.startsWith(`/`)||e.startsWith(`//`)||e.length>D_?!1:!O_.some(t=>e===t||e.startsWith(t+`/`))}function A_(e){if(!(typeof window>`u`)&&k_(e))try{window.localStorage.setItem(E_,e)}catch{}}function j_(){if(typeof window>`u`)return null;try{let e=window.localStorage.getItem(E_);return e===null?null:k_(e)?e:null}catch{return null}}var M_=`/devices`;function N_(e){return e!==void 0&&k_(e)?e:j_()??M_}function P_(e){return e.split(`.`)[0]===`0`?`${e} beta`:e}function F_(e){if(e===null)return null;let t=e.trim();return t.length>0?t:null}function I_(e){let t=F_(e.productVersion),n=F_(e.serverVersion),r=F_(e.fallbackVersion);return t!==null&&n!==null?{kind:`both`,productLabel:P_(t),serverVersion:n}:t===null?n===null?r===null?{kind:`none`}:{kind:`fallback`,version:r}:{kind:`server`,serverVersion:n}:{kind:`product`,productLabel:P_(t)}}function L_(e,t){if(!Object.hasOwn(e,t))return null;let n=Reflect.get(e,t);return typeof n==`string`?n:null}function R_(e){return typeof e!=`object`||!e?null:{productVersion:L_(e,`productVersion`),serverVersion:L_(e,`serverVersion`)}}D();function z_(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 B_({placement:e,compact:t=!1}){let{t:n}=B(),[r,i]=C({kind:`fallback`,version:`1.2.491`});x(()=>{let e=new AbortController;return fetch(L(`/api/release-identity`),{signal:e.signal}).then(async e=>e.ok?R_(await e.json()):null).then(t=>{e.signal.aborted||t===null||i(I_({productVersion:t.productVersion,serverVersion:t.serverVersion,fallbackVersion:`1.2.491`}))}).catch(t=>{e.signal.aborted||t instanceof DOMException&&t.name}),()=>e.abort()},[]);let a=z_(r,n);return a===null?null:e===`login`?b(`span`,{"data-testid":`release-identity`,children:a}):b(`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})}D();var V_=A(!0);function H_(e){return e===`/addon`||e.startsWith(`/addon/`)}function U_(e,t,n){let r=[...e.filter(e=>e!==t),t];return r.length<=n?r:r.slice(r.length-n)}function W_({maxCached:e=6}){let t=Wa(),n=K(),r=za(),i=F(G),a=n.pathname,s=H_(a),c=f(new Map),l=f([]);if(s){c.current.set(a,{key:a,outlet:t,location:n,navigationType:r,routeContext:i});let o=U_(l.current,a,e),s=new Set(o);for(let e of c.current.keys())s.has(e)||c.current.delete(e);l.current=o}return o(P,{children:[l.current.map(e=>{let t=c.current.get(e);if(t?.outlet==null)return null;let n=s&&e===a;return b(`div`,{className:n?`h-full min-h-0`:void 0,style:n?void 0:{display:`none`},hidden:!n,"aria-hidden":!n,children:b(V_.Provider,{value:n,children:b(Aa.Provider,{value:{location:t.location,navigationType:t.navigationType},children:b(G.Provider,{value:t.routeContext,children:t.outlet})})})},e)}),!s&&t!=null?b(`div`,{className:`h-full min-h-0`,children:t},a):null]})}D();var G_={dark:Xe,light:Ze,system:an};function K_(){return b(`div`,{className:`flex h-full min-h-[50vh] items-center justify-center`,children:b(`span`,{className:`h-4 w-4 animate-spin rounded-full border-2 border-primary/30 border-t-primary`})})}function q_(){let e=K(),t=q(),{user:n,logout:r}=eu(),i=Kr(),{t:a}=B(),s=br(),c=Cr(),{info:l}=eg();x(()=>{document.title=l===null?`CamStack Admin`:`${l.name} \u00b7 CamStack Admin`},[l]);let u=zc(S_()),[d,m]=C(!1);x(()=>{A_(e.pathname+e.search)},[e.pathname,e.search]);let[h,g]=C(()=>typeof window>`u`?!1:window.localStorage.getItem(`camstack:sidebar-collapsed`)===`1`);x(()=>{typeof window>`u`||window.localStorage.setItem(`camstack:sidebar-collapsed`,h?`1`:`0`)},[h]);let[_]=C(()=>{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}});x(()=>{typeof window>`u`||window.localStorage.setItem(`camstack:sidebar-collapsed-groups`,JSON.stringify([..._]))},[_]),x(()=>{c&&window.localStorage.getItem(`camstack:sidebar-collapsed`)===null&&g(!0)},[c]);let{data:y=[]}=Un({nodeId:`hub`},{refetchInterval:3e4}),S=y.length,w=M(),T=f(Date.now()),{data:E}=jr(void 0,{staleTime:0,refetchOnMount:`always`,refetchInterval:e=>{let t=e.state.data;return t&&t.length>0||Date.now()-T.current>=3e4?!1:2e3}}),D=p(()=>E&&n?.isAdmin?nh(E):[],[E,n?.isAdmin]),O=p(()=>T_(D),[D]),k=O.known.get(`detection`)??[],A=O.known.get(`cluster`)??[],j=O.known.get(`administration`)??[];Or(`addon.page-ready`,()=>{w.invalidateQueries({queryKey:[[`addonPages`,`listPages`]]})});let N=()=>{r(),t(`/login`)},F=t=>!!(e.pathname===t||e.pathname.startsWith(t+`/`)),te=[`/system/pipeline`,`/live`,`/addon/osd-manager`,`/build`].some(t=>e.pathname===t||e.pathname.startsWith(t+`/`)),ne=n?.isAdmin===!0,re=p(()=>jh({t:a,isAdmin:ne}),[a,ne]),ie=re[0]?.items??[],ae=re[1]?.items??[],oe=re[2]?.items??[],se=re[3]?.items??[],ce=i?.mode??`system`,le={dark:a(`theme.dark`),light:a(`theme.light`),system:a(`theme.system`)},I=h&&!s,ue=(e,t=`md`)=>`flex w-full items-center gap-2.5 rounded-md ${I?`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`}`,de=(e,t)=>e===0?null:I?b(`div`,{className:`pt-3 mb-1 mx-2 border-t border-border/60`},`sep-${t}`):b(`div`,{className:`pt-4 pb-1.5 px-2.5`,children:b(`span`,{className:`text-[10px] font-semibold uppercase tracking-widest text-foreground-subtle/60`,children:t})},`hdr-${t}`),fe=e=>{let n=F(e.path),r=Nh(e.icon);return o(`button`,{onClick:()=>{t(e.path),m(!1)},className:ue(n),title:I?e.label:void 0,children:[b(r,{className:`h-3.5 w-3.5 shrink-0 ${n?`text-primary`:``}`}),!I&&e.label]},`${e.addonId}::${e.id}`)},pe=e=>{let n=e.icon,r=F(e.path),i=e.path===`/system/addons`;return o(`button`,{"data-testid":`nav-${e.path.replace(/^\//,``).replace(/\//g,`-`)}`,onClick:()=>{t(e.path),m(!1)},className:ue(r),title:I?e.label:void 0,children:[b(n,{className:`h-3.5 w-3.5 shrink-0 ${r?`text-primary`:``}`}),!I&&o(P,{children:[b(`span`,{className:`flex-1 text-left`,children:e.label}),i&&S>0&&b(`span`,{className:`ml-auto rounded-full bg-primary px-1.5 py-0.5 text-[9px] font-bold text-primary-foreground leading-none`,children:S})]}),I&&i&&S>0&&b(`span`,{className:`absolute mt-[-14px] ml-3 h-2 w-2 rounded-full bg-primary`})]},e.path)},me=o(P,{children:[o(`div`,{className:`flex h-14 items-center border-b border-border ${I?`justify-center px-1`:`pl-3 pr-4 gap-2`}`,children:[!I&&b(`img`,{src:i?.resolvedMode===`light`?L(`/brand/logo-horizontal-light.svg`):L(`/brand/logo-horizontal-dark.svg`),alt:a(`layouts.appLayout.camstackAdmin`,`CamStack Admin`),className:`h-9 flex-1 min-w-0`}),!s&&b(`button`,{onClick:()=>g(e=>!e),className:`p-1.5 rounded-md hover:bg-surface-hover text-foreground-subtle transition-colors flex-shrink-0 ${I?``:`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:b(h?Ee:nt,{className:`h-4 w-4`})})]}),!I&&l!==null&&b(`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}),b(`div`,{className:`border-b border-border pt-2`,children:b(Uh,{navSections:re,addonPages:D,compact:I,onNavigated:()=>m(!1)})}),o(`nav`,{className:`flex-1 overflow-y-auto py-3 ${I?`px-1.5`:`px-2`} space-y-0.5`,children:[ie.map(e=>pe(e)),de(ae.length+k.length,a(`nav.detectionSection`,`Detection`)),ae.map(e=>pe(e)),k.map(e=>fe(e)),de(oe.length+A.length,a(`nav.clusterSection`,`Cluster`)),oe.map(e=>pe(e)),A.map(e=>fe(e)),de(se.length+j.length,a(`system.title`,`Administration`)),se.map(e=>pe(e)),j.map(e=>fe(e)),O.custom.map(e=>o(`div`,{className:`contents`,children:[de(e.pages.length,e.label),e.pages.map(e=>fe(e))]},`custom-${e.id}`)),de(O.ungrouped.length,a(`nav.addonPages`,`Addon Pages`)),O.ungrouped.map(e=>fe(e))]}),o(`div`,{className:`border-t border-border ${I?`p-1.5`:`p-2`} space-y-0.5`,children:[o(`button`,{onClick:()=>i?.toggleMode(),className:ue(!1),title:I?le[ce]:void 0,children:[(()=>{let e=G_[ce];return b(e,{className:`h-3.5 w-3.5 shrink-0`})})(),!I&&b(`span`,{children:le[ce]})]}),b(y_,{variant:`sidebar`,compact:I}),o(`button`,{type:`button`,onClick:()=>t(`/system/my-access`),className:ue(F(`/system/my-access`)),title:I?a(`system.myAccess`,`My access`):void 0,children:[b(Oe,{className:`h-3.5 w-3.5 shrink-0`}),!I&&b(`span`,{className:`truncate`,children:a(`system.myAccess`,`My access`)})]}),o(`button`,{onClick:N,className:ue(!1).replace(`hover:text-foreground`,`hover:text-danger`),title:I?n?.username??a(`layouts.appLayout.logout`,`Logout`):void 0,children:[b(_n,{className:`h-3.5 w-3.5 shrink-0`}),!I&&b(`span`,{className:`truncate`,children:n?.username??a(`layouts.appLayout.user`,`User`)})]}),b(B_,{placement:`sidebar`,compact:I})]})]});return o(`div`,{className:`flex h-dvh overflow-hidden bg-background text-foreground pt-[env(safe-area-inset-top)] pb-[env(safe-area-inset-bottom)]`,children:[!s&&b(`aside`,{className:`flex flex-col border-r border-border bg-surface/80 backdrop-blur-sm shrink-0 transition-[width] duration-150 ease-out ${I?`w-12`:`w-48`}`,children:me}),s&&b(Vn,{open:d,onClose:()=>m(!1),width:`w-64`,children:me}),o(`div`,{className:`flex flex-1 flex-col min-w-0`,children:[u!==null&&o(`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`?b(Te,{className:`h-3.5 w-3.5`}):b(We,{className:`h-3.5 w-3.5`}),b(`span`,{children:a(u.i18nKey,{defaultValue:u.message,...u.i18nParams})}),u.action===`sign-in`&&b(`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&&b($e,{className:`h-3.5 w-3.5 animate-spin`})]}),b(Qh,{}),b(sg,{}),b(x_,{}),s&&o(`header`,{className:`flex items-center h-12 border-b border-border px-3 shrink-0 bg-surface/80 backdrop-blur-sm`,children:[b(`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:b(ee,{className:`h-5 w-5`})}),b(`div`,{className:`flex-1 flex justify-center`,children:b(`img`,{src:i?.resolvedMode===`light`?L(`/brand/logo-horizontal-light.svg`):L(`/brand/logo-horizontal-dark.svg`),alt:a(`layouts.appLayout.camstack`,`CamStack`),className:`h-7`})}),b(y_,{})]}),o(lh,{children:[b(dh,{}),b(`main`,{className:`relative flex-1 min-h-0 overscroll-contain bg-background ${te?`overflow-hidden`:`overflow-auto`}`,children:b(v,{fallback:b(K_,{}),children:b(W_,{})})})]})]})]})}function $({children:e,requireAdmin:t}){let{t:n}=B(),{user:r,loading:i,mustChangePassword:a}=eu(),o=K();return i?b(`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`?b(J,{to:`/change-password`,replace:!0}):t&&!r.isAdmin?b(J,{to:`/access-denied`,replace:!0}):b(P,{children:e}):b(J,{to:`/login`,replace:!0,state:{from:o.pathname+o.search}})}var J_=`customize`,Y_=`/build/compositions/new`,X_=`/build/compositions/:blockId`,Z_=`/build?tab=custom-device`;function Q_(e){return`/devices/${e}`}function $_(e){return`/devices/${e}?tab=${J_}`}var ev=`integration`,tv=`section`,nv=[ev,tv],rv={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`}},iv=`settings`,av=`activity`;function ov(e,t={}){let{path:n,tab:r}=rv[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(ev,t.integration),t.section!==void 0&&i.set(tv,t.section);let a=i.toString();return a.length>0?`${n}?${a}`:n}function sv(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 cv(e,t,n=null,r=null){let i=new URLSearchParams(e);return i.set(ev,t),r===null?i.delete(tv):i.set(tv,r),n!==null&&i.delete(n),i}function lv(e){return e===`/admin`||e===`/admin/`?`/`:e.startsWith(`/admin/`)?e.slice(6):e}function uv(){let{t:e}=B(),t=q();return o(`div`,{className:`flex flex-col items-center justify-center text-foreground py-16 px-4`,children:[b(`div`,{className:`flex h-16 w-16 items-center justify-center rounded-2xl bg-danger/10 mb-4`,children:b(gn,{className:`h-8 w-8 text-danger`})}),b(`h1`,{className:`text-xl font-bold`,children:e(`accessDenied.accessDenied`,`Access Denied`)}),b(`p`,{className:`mt-2 text-sm text-foreground-subtle`,children:e(`accessDenied.youDonTHavePermission`,`You don't have permission to access this page.`)}),b(`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 dv=`auth.password-incorrect`;function fv(e,t){return typeof e==`object`&&e?Reflect.get(e,t):void 0}function pv(e){if(!(e instanceof Error))return{kind:`connection-lost`};let t=fv(e,`data`);return typeof t!=`object`||!t?{kind:`connection-lost`}:fv(fv(t,`i18n`),`code`)===dv?{kind:`wrong-current`}:fv(t,`code`)===`UNAUTHORIZED`?{kind:`session-ended`}:{kind:`rejected`,message:e.message}}D();var mv=8;function hv(e,t){let n=pv(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 gv(){let{t:e}=B(),{user:t,mustChangePassword:n,clearMustChangePassword:r,logout:i}=eu(),a=qe(),s=Kr(),c=q(),[l,u]=C(``),[d,f]=C(``),[p,m]=C(``),[h,g]=C(!1),[_,v]=C(``),[y,x]=C(!1),S=n?Wl:l;return b(`div`,{className:`flex min-h-screen items-center justify-center bg-background p-4`,children:o(`div`,{className:`w-full max-w-sm`,children:[b(`div`,{className:`flex justify-center mb-8`,children:b(`img`,{src:s?.resolvedMode===`light`?L(`/brand/logo-horizontal-light.svg`):L(`/brand/logo-horizontal-dark.svg`),alt:e(`changePassword.camstackAdmin`,`CamStack Admin`),className:`h-12`})}),o(`form`,{onSubmit:async i=>{if(i.preventDefault(),v(``),!t){v(`Not signed in`);return}if(!n&&l.length===0){v(e(`changePassword.enterCurrent`,`Enter your current password`));return}if(d.length<mv){v(`Password must be at least ${mv} characters`);return}if(d!==p){v(`The two passwords do not match`);return}if(d===`changeme`){v(`Choose a password different from the seed default`);return}x(!0);try{await a.changeOwnPassword({currentPassword:S,newPassword:d}),r(),c(`/devices`,{replace:!0})}catch(t){v(hv(t,e))}finally{x(!1)}},className:`space-y-4 rounded-xl border border-border bg-surface p-6 shadow-xl shadow-black/10`,children:[o(`div`,{className:`space-y-1`,children:[b(`h1`,{className:`text-sm font-semibold text-foreground`,children:e(`changePassword.setANewPassword`,`Set a new password`)}),b(`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.`)})]}),_&&b(`div`,{role:`alert`,className:`rounded-md bg-danger/10 border border-danger/20 px-3 py-2 text-xs text-danger`,children:_}),!n&&o(`div`,{className:`space-y-1.5`,children:[b(`label`,{className:`text-xs font-medium text-foreground-subtle`,children:e(`changePassword.currentPassword`,`Current password`)}),b(`input`,{"data-testid":`change-password-current`,type:h?`text`:`password`,value:l,onChange:e=>u(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})]}),o(`div`,{className:`space-y-1.5`,children:[b(`label`,{className:`text-xs font-medium text-foreground-subtle`,children:e(`changePassword.newPassword`,`New password`)}),o(`div`,{className:`relative`,children:[b(`input`,{"data-testid":`change-password-new`,type:h?`text`:`password`,value:d,onChange:e=>f(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}),b(`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:b(h?re:at,{className:`h-4 w-4`})})]})]}),o(`div`,{className:`space-y-1.5`,children:[b(`label`,{className:`text-xs font-medium text-foreground-subtle`,children:e(`changePassword.confirmNewPassword`,`Confirm new password`)}),b(`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`})]}),b(`button`,{"data-testid":`change-password-submit`,type:`submit`,disabled:y||!d||!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:y?e(`changePassword.saving`,`Saving…`):e(`changePassword.saveAndContinue`,`Save and continue`)}),n&&b(`button`,{type:`button`,onClick:()=>{i(),c(`/login`,{replace:!0})},className:`w-full text-xs text-foreground-subtle hover:text-foreground transition-colors`,children:e(`changePassword.signOutInstead`,`Sign out instead`)})]})]})})}function _v(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 vv(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 yv(){return window?.PublicKeyCredential!==void 0&&typeof window.PublicKeyCredential==`function`}function bv(e){let{id:t}=e;return{...e,id:vv(t),transports:e.transports}}function xv(e){return e===`localhost`||/^([a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,}$/i.test(e)}var Sv=class extends Error{constructor({message:e,code:t,cause:n,name:r}){super(e,{cause:n}),this.name=r??n.name,this.code=t}},Cv=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}}},wv=[`cross-platform`,`platform`];function Tv(e){if(e&&!(wv.indexOf(e)<0))return e}function Ev(){if(!yv())return new Promise(e=>e(!1));let e=window.PublicKeyCredential;return e.isConditionalMediationAvailable===void 0?new Promise(e=>e(!1)):e.isConditionalMediationAvailable()}function Dv({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 Sv({message:`Authentication ceremony was sent an abort signal`,code:`ERROR_CEREMONY_ABORTED`,cause:e})}else if(e.name===`NotAllowedError`)return new Sv({message:e.message,code:`ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY`,cause:e});else if(e.name===`SecurityError`){let t=window.location.hostname;if(!xv(t))return new Sv({message:`${window.location.hostname} is an invalid domain`,code:`ERROR_INVALID_DOMAIN`,cause:e});if(n.rpId!==t)return new Sv({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 Sv({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 Ov(e){let{optionsJSON:t,useBrowserAutofill:n=!1,verifyBrowserAutofillInput:r=!0}=e;if(!yv())throw Error(`WebAuthn is not supported in this browser`);let i;t.allowCredentials?.length!==0&&(i=t.allowCredentials?.map(bv));let a={...t,challenge:vv(t.challenge),allowCredentials:i},o={};if(n){if(!await Ev())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=Cv.createNewAbortSignal();let s;try{s=await navigator.credentials.get(o)}catch(e){throw Dv({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=_v(u.userHandle)),{id:c,rawId:_v(l),response:{authenticatorData:_v(u.authenticatorData),clientDataJSON:_v(u.clientDataJSON),signature:_v(u.signature),userHandle:f},type:d,clientExtensionResults:s.getClientExtensionResults(),authenticatorAttachment:Tv(s.authenticatorAttachment)}}function kv(e){return typeof e==`object`&&!!e}function Av(e){return kv(e)&&typeof e.challenge==`string`}D();async function jv(e){if(!Av(e))throw Error(`passkey authentication options missing challenge`);let t=await Ov({optionsJSON:e});return Object.fromEntries(Object.entries(t))}function Mv({method:e,challengeToken:t,onComplete:n,onSecondFactor:r,onError:i}){let[a,s]=C(!1),[c,l]=C(null),u=async()=>{l(null),s(!0);try{let e=X();if(t){let r=await jv((await e.loginBeginPasskey(t)).optionsJSON),i=await e.loginVerifyPasskey(t,r,{refreshable:!0});n(i.token,i);return}let a=await jv((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.`;l(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;l(r),i?.(r)}finally{s(!1)}};return o(`div`,{className:`space-y-2`,children:[o(`button`,{type:`button`,"data-testid":t?`login-passkey`:`login-passkey-direct`,onClick:()=>void u(),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?b($e,{className:`h-4 w-4 animate-spin text-primary`}):b(sn,{className:`h-4 w-4 text-primary`}),e.label]}),c&&b(`div`,{className:`rounded-md bg-danger/10 border border-danger/20 px-3 py-2 text-xs text-danger`,children:c})]})}var Nv=()=>window.location.hostname;function Pv(e,t=Nv){return yv()&&Kh(t(),e.rpId)}function Fv(e,t=Nv){let n=e.filter(e=>e.kind===`passkey`&&e.stage===`second-factor`).filter(e=>Pv(e,t));return{passkeyMethods:n,widgetMethods:n.length>0?[]:e.filter(e=>e.kind===`widget`&&e.stage===`second-factor`)}}function Iv(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 Lv(e){let t=e.onComplete,n=e.onSecondFactor;return typeof t==`function`?{onComplete:t,onSecondFactor:typeof n==`function`?n:void 0}:null}function Rv({methods:e,widgetConfig:t,onRedirect:n}){let{t:r}=B();ri();let i=e.filter(e=>e.kind!==`passkey`||Pv(e));return i.length===0?null:o(`div`,{className:`mt-6 space-y-3`,children:[o(`div`,{className:`flex items-center gap-3`,children:[b(`div`,{className:`h-px flex-1 bg-border`}),b(`span`,{className:`text-[10px] uppercase tracking-wider text-foreground-subtle`,children:r(`login.primaryLoginMethods.orContinueWith`,`Or continue with`)}),b(`div`,{className:`h-px flex-1 bg-border`})]}),b(`div`,{className:`space-y-2`,children:i.map(e=>{if(e.kind===`redirect`){let t=(e.icon===void 0?void 0:Zr(e.icon))??Oe;return o(`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:[b(t,{className:`h-4 w-4 text-primary`}),e.label]},e.id)}if(e.kind===`passkey`){let n=Lv(t);return n?b(Mv,{method:e,onComplete:n.onComplete,onSecondFactor:n.onSecondFactor},e.id):null}return b(zv,{method:e,config:t},e.id)})})]})}function zv({method:e,config:t}){let{t:n}=B(),r=nr(e.remote,e.bundleUrl);return r===null?o(`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:[b($e,{className:`h-3.5 w-3.5 animate-spin`}),n(`common.loading`,`Loading…`)]}):r===void 0?o(`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:[b(Pe,{className:`h-3.5 w-3.5 shrink-0`}),n(`login.primaryMethods.loadFailed`)]}):b(r,{instanceId:e.id,host:`dashboard`,config:t})}var Bv=4e3,Vv=/^[A-Za-z0-9._-]{1,64}$/;function Hv(e){let t=e.addonId!==void 0&&Vv.test(e.addonId)?e.addonId:null,n=e.integration!==void 0&&Vv.test(e.integration)?e.integration:null;if(t!==null&&e.brokerId!==void 0)return ov(`connectivity`,{integration:t,kindSection:`brokers`});let r=n??t;return ov(`connectivity`,r===null?{}:{integration:r})}function Uv(e,t){let n=t.opener;if(n===null||n.closed||zg(n)!==t.origin)return!1;try{return n.postMessage({type:Yg,ok:e.status===`success`,...e.brokerId===void 0?{}:{brokerId:e.brokerId},...e.status===`error`?{error:e.reason??`unknown`}:{}},t.origin),!0}catch{return!1}}D();var Wv=500;function Gv(e){let{t}=B();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 Kv({outcome:e}){let{t}=B(),n=Gv(e.reason??`unknown`);if(e.status===`error`)return o(P,{children:[b(De,{className:`mx-auto h-8 w-8 text-danger`,"aria-hidden":!0}),b(`h1`,{"data-testid":`oauth-landing-title`,className:`text-sm font-semibold text-foreground`,children:t(`oauthLanding.errorTitle`,`Sign-in did not finish`)}),b(`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 o(P,{children:[b(He,{className:`mx-auto h-8 w-8 text-success`,"aria-hidden":!0}),b(`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`)}),b(`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 qv({outcome:e,closable:t,onContinue:n,onClose:r}){let{t:i}=B(),a=Hv(e);return x(()=>{if(e.status!==`success`)return;let t=window.setTimeout(()=>n(a),Bv);return()=>window.clearTimeout(t)},[e.status,n,a]),b(`main`,{className:`flex min-h-screen items-center justify-center bg-background p-4`,children:o(`div`,{className:`w-full max-w-sm space-y-4`,children:[b(`div`,{className:`flex justify-center`,children:o(`picture`,{children:[b(`source`,{media:`(prefers-color-scheme: dark)`,srcSet:L(`/brand/logo-horizontal-dark.svg`)}),b(`img`,{src:L(`/brand/logo-horizontal-light.svg`),alt:i(`oauthLanding.brand`,`CamStack`),className:`h-12`})]})}),o(`div`,{className:`space-y-4 rounded-xl border border-border bg-surface p-6 text-center shadow-xl shadow-black/10`,children:[b(Kv,{outcome:e}),o(`div`,{className:`flex flex-col gap-2`,children:[b(bn,{type:`button`,variant:`primary`,onClick:()=>n(a),children:i(`oauthLanding.back`,`Back to CamStack`)}),t&&b(bn,{type:`button`,variant:`ghost`,onClick:r,children:i(`oauthLanding.close`,`Close this window`)})]})]})]})})}function Jv(e,t){window.history.replaceState(null,``,window.location.pathname);let n=window.opener,r=Uv(t,{opener:n,origin:window.location.origin}),i=()=>e.render(b(qv,{outcome:t,closable:r,onContinue:e=>window.location.replace(L(e)),onClose:()=>window.close()}));if(r&&t.status===`success`){window.close(),window.setTimeout(i,Wv);return}i()}function Yv(e){return Kt(e)}var Xv=`Done — you can close this window.`,Zv=500,Qv=`camstack_admin_token`;async function $v(e,t=``){try{let n=ll(new URLSearchParams(t));n!==null&&n.token===e?sl(n):localStorage.setItem(Qv,e)}catch{}await fetch(L(`/api/auth/session`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({token:e})}).catch(()=>{})}function ey(){try{let e=localStorage.getItem(Qv);return e!==null&&e.length>0?e:null}catch{return null}}function ty(e){let t=Yv(window.location.hash);if(t!==null){Jv(e,t);return}let n=Eg(window.location.hash);window.history.replaceState(null,``,window.location.pathname);let r=t=>e.render(b(ny,{completion:n,result:t}));if(r(null),n===null)return;let i=Bg();qg(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:Xv}),Zv)},continueAt:e=>window.location.replace(L(e)),persistSession:e=>$v(e,n.target===`login`?n.fragment:``),showResult:r,setTimeout:(e,t)=>window.setTimeout(e,t)})}function ny({completion:e,result:t}){let{t:n}=B();return b(`div`,{className:`flex min-h-screen items-center justify-center bg-background p-4`,children:b(`div`,{className:`flex flex-col items-center gap-3 text-sm text-foreground-subtle`,children:e===null?b(`a`,{className:`text-primary underline`,href:L(`/login`),children:n(`ssoComplete.nothingToFinishHereGo`,`Nothing to finish here — go to sign-in`)}):t===null?o(`span`,{className:`flex items-center gap-3`,children:[b(`span`,{className:`h-4 w-4 animate-spin rounded-full border-2 border-primary/30 border-t-primary`}),n(`ssoComplete.finishingSignIn`,`Finishing sign-in…`)]}):o(P,{children:[b(`span`,{"data-testid":`sso-complete-result`,className:t.kind===`link-error`?`text-danger`:`text-foreground`,children:t.message}),b(`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`)})]})})})}D();function ry(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 iy(){let e=new URLSearchParams(window.location.search);return wl({codeChallenge:e.get(`code_challenge`),codeChallengeMethod:e.get(`code_challenge_method`),state:e.get(`state`),purpose:e.get(`purpose`)})}function ay(e){return Math.min(1e3*2**e,15e3)}function oy(){let{t:e}=B(),{login:t,verifyTotp:n,finalizePasskeyLogin:r,user:i}=eu(),{i18n:a}=B(),s=Kr(),c=q(),l=K(),u=new URLSearchParams(window.location.search).get(`next`);x(()=>{Nl(u)},[u]);let d=new URLSearchParams(window.location.search).get(`redirect`);x(()=>{Hl(d)},[d]);let p=iy();x(()=>{Dl(p)},[p?.codeChallenge,p?.state,p?.purpose]);let m=l.state,h=N_(m?.from),[g,_]=C(``),[v,y]=C(``),[S,w]=C(!1),[T,E]=C(``),[D,O]=C(!1),[k,A]=C(`credentials`),[j,M]=C(``),[N,F]=C([]),[ee,te]=C(``),[ne,ie]=C(void 0),[ae,oe]=C(`sso-not-linked`),se=xn.auth.listLoginMethods.useQuery(void 0,{retry:!0,retryDelay:ay}),ce=se.data===void 0,le=(se.data??[]).filter(e=>e.kind!==`device-certificate`),I=xn.auth.getServerName.useQuery().data,ue=le.filter(e=>e.stage===`primary`),de=Fv(le);x(()=>{let e=gg(window.location.hash);if(e!==null){if(window.history.replaceState({},``,window.location.pathname+window.location.search),e.kind===`challenge`){M(e.challengeToken),F(e.factors),te(``),A(`second-factor`);return}oe(e.code),ie(e.provider)}},[]);let fe=ne==null?null:le.find(e=>e.id===ne&&`label`in e)?.label??null,pe=T||(ne===void 0?``:_g(ae,fe)),{passkeyMethods:me,widgetMethods:he}=de,ge=f(!1),_e=async()=>{if(ge.current)return;ge.current=!0;let e=Al(d);if(e?.kind===`app-callback`){await be(e.url);return}else if(e){window.location.assign(L(e.path));return}let t=Fl(u);t?window.location.assign(L(t)):c(h,{replace:!0})},[ve,ye]=C(null),be=async e=>{ye({callbackBase:e,mintedUrl:null,failed:!1});try{let t=iy()??Ol();if(t===null)throw Error(`The app sent no PKCE challenge and state`);let{code:n}=await X().trpcClient.auth.createHandoffCode.mutate({purpose:t.purpose,codeChallenge:t.codeChallenge,state:t.state}),r=kl(e,n,t.state);ye({callbackBase:e,mintedUrl:r,failed:!1}),window.location.assign(r)}catch(t){if(ry(t)){ge.current=!1,ye(null),E(`Sign in again to confirm it is you.`);return}ye({callbackBase:e,mintedUrl:null,failed:!0})}},xe=i!==null,[Ce,we]=C(!1);x(()=>{!xe||!d&&!u||Ce||(we(!0),_e())},[xe,d,u,Ce]);let Te=async e=>{e.preventDefault(),E(``),ie(void 0),O(!0);try{let e=await t(g,v);if(e.kind===`second-factor`){M(e.challengeToken),F(e.factors),A(`second-factor`);return}v===`changeme`?c(`/change-password`,{replace:!0}):await _e()}catch(e){E(e instanceof Error?e.message:`Login failed`)}finally{O(!1)}},Ee=async e=>{e.preventDefault(),E(``),O(!0);try{await n(j,ee.trim()),await _e()}catch(e){E(e instanceof Error?e.message:`TOTP verification failed`),te(``)}finally{O(!1)}},De=async(e,t)=>{try{await r(e,t),await _e()}catch(e){E(e instanceof Error?e.message:`Passkey sign-in failed`)}},Oe=f(null);x(()=>()=>Oe.current?.(),[]);let ke=async e=>{if(e.target!==`login`)return;let t=ll(new URLSearchParams(e.fragment));if(t!==null){try{await r(t.token,t),await _e()}catch(e){E(e instanceof Error?e.message:`Sign-in failed`)}return}let n=gg(`#${e.fragment}`);if(n!==null){if(n.kind===`challenge`){Me({challengeToken:n.challengeToken,factors:n.factors});return}oe(n.code),ie(n.provider)}},Ae=e=>{if(xl(d)?.kind===`app-callback`)return!1;let t=Ag(L(Og(e.startUrl)));return t===null?!1:(E(``),ie(void 0),Oe.current?.(),Oe.current=Hg(t,{onReturn:e=>{Oe.current?.(),Oe.current=null,ke(e)},onDone:e=>{if(Oe.current?.(),Oe.current=null,e.target!==`login`)return;let t=ey()===null?null:ol();t!==null&&ke({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)},Me=e=>{let t=e.factors.filter(e=>e===`totp`||e===`passkey`);M(e.challengeToken),F(t),te(``),E(``),A(`second-factor`)};return ve===null?b(`div`,{className:`flex min-h-screen items-center justify-center bg-background p-4`,children:o(`div`,{className:`w-full max-w-sm`,children:[b(`div`,{className:`flex justify-center mb-8`,children:b(`img`,{src:s?.resolvedMode===`light`?L(`/brand/logo-horizontal-light.svg`):L(`/brand/logo-horizontal-dark.svg`),alt:e(`login.camstackAdmin`,`CamStack Admin`),className:`h-12`})}),I!==void 0&&!I.isDefault&&b(`p`,{"data-testid":`login-server-name`,className:`-mt-4 mb-6 text-center text-sm text-foreground-muted`,children:b(Xs,{i18nKey:`login.signInTo`,values:{name:I.name},components:{b:b(`span`,{className:`font-semibold text-foreground`})}})}),k===`credentials`?o(`form`,{onSubmit:Te,className:`space-y-4 rounded-xl border border-border bg-surface p-6 shadow-xl shadow-black/10`,children:[pe&&b(`div`,{"data-testid":`login-error`,className:`rounded-md bg-danger/10 border border-danger/20 px-3 py-2 text-xs text-danger`,children:pe}),o(`div`,{className:`space-y-1.5`,children:[b(`label`,{className:`text-xs font-medium text-foreground-subtle`,children:e(`login.username`,`Username`)}),b(`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})]}),o(`div`,{className:`space-y-1.5`,children:[b(`label`,{className:`text-xs font-medium text-foreground-subtle`,children:e(`login.password`,`Password`)}),o(`div`,{className:`relative`,children:[b(`input`,{"data-testid":`login-password`,type:S?`text`:`password`,placeholder:e(`login.password`,`Password`),value:v,onChange:e=>y(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`}),b(`button`,{type:`button`,onClick:()=>w(!S),className:`absolute right-2.5 top-1/2 -translate-y-1/2 text-foreground-subtle hover:text-foreground transition-colors`,tabIndex:-1,children:b(S?re:at,{className:`h-4 w-4`})})]})]}),b(`button`,{"data-testid":`login-submit`,type:`submit`,disabled:D||!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:D?o(`span`,{className:`flex items-center justify-center gap-2`,children:[b(`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`)})]}):o(`div`,{className:`space-y-4 rounded-xl border border-border bg-surface p-6 shadow-xl shadow-black/10`,children:[o(`div`,{className:`flex items-center gap-2 pb-1 border-b border-border`,children:[b(je,{className:`h-4 w-4 text-primary`}),b(`div`,{className:`text-sm font-medium text-foreground`,children:e(`login.twoFactorAuthentication`,`Two-factor authentication`)})]}),b(`p`,{className:`text-xs text-foreground-subtle`,children:g?b(P,{children:b(Xs,{i18nKey:`login.finishSigningInAs`,values:{username:g},components:{mono:b(`span`,{className:`font-mono text-foreground`})}})}):e(`login.finishSigningInAs`,`Finish signing in.`)}),T&&b(`div`,{className:`rounded-md bg-danger/10 border border-danger/20 px-3 py-2 text-xs text-danger`,children:T}),N.includes(`passkey`)&&me.map(e=>b(Mv,{method:e,challengeToken:j,onComplete:De},e.id)),N.includes(`passkey`)&&he.map(e=>b(zv,{method:e,config:{challengeToken:j,onComplete:De}},e.id)),Iv(N,de)&&b(`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`)&&o(`div`,{className:`flex items-center gap-3`,children:[b(`div`,{className:`h-px flex-1 bg-border`}),b(`span`,{className:`text-[10px] uppercase tracking-wider text-foreground-subtle`,children:`or`}),b(`div`,{className:`h-px flex-1 bg-border`})]}),N.includes(`totp`)&&o(`form`,{onSubmit:Ee,className:`space-y-4`,children:[o(`div`,{className:`space-y-1.5`,children:[b(`label`,{className:`text-xs font-medium text-foreground-subtle`,children:e(`login.authenticationCode`,`Authentication code`)}),b(`input`,{"data-testid":`login-totp`,type:`text`,inputMode:`numeric`,autoComplete:`one-time-code`,placeholder:`123456`,value:ee,onChange:e=>te(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})]}),b(`button`,{"data-testid":`login-totp-submit`,type:`submit`,disabled:D||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:D?o(`span`,{className:`flex items-center justify-center gap-2`,children:[b(`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`)})]}),o(`button`,{type:`button`,onClick:()=>{A(`credentials`),M(``),F([]),te(``),E(``)},className:`w-full flex items-center justify-center gap-1.5 text-xs text-foreground-subtle hover:text-foreground transition-colors`,children:[b(Se,{className:`h-3 w-3`}),e(`login.backToUsernamePassword`,`Back to username + password`)]})]}),k===`credentials`&&ce&&o(`p`,{"data-testid":`login-methods-pending`,role:`status`,className:`mt-4 flex items-center justify-center gap-2 text-xs text-foreground-subtle`,children:[b(`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...`)]}),k===`credentials`&&b(Rv,{methods:ue,widgetConfig:{onComplete:De,onSecondFactor:Me,locale:a.language},onRedirect:Ae}),b(`p`,{className:`mt-6 text-center text-[10px] text-foreground-subtle/50`,children:b(B_,{placement:`login`})})]})}):b(`div`,{className:`flex min-h-screen items-center justify-center bg-background p-4`,children:o(`div`,{className:`w-full max-w-sm rounded-xl border border-border bg-surface p-6 text-center space-y-4`,children:[b(`h1`,{className:`text-sm font-semibold text-foreground`,children:e(`login.returningToTheApp`,`Returning to the app…`)}),ve.failed?o(P,{children:[b(`p`,{className:`text-xs text-danger`,children:e(`login.couldNotPrepareTheSign`,`Could not prepare the sign-in handoff. You are logged in — retry below.`)}),b(`button`,{onClick:()=>void be(ve.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`)})]}):ve.mintedUrl===null?b(`p`,{className:`text-xs text-foreground-subtle`,children:e(`login.preparingAOneTimeSign`,`Preparing a one-time sign-in code…`)}):o(P,{children:[b(`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).`)}),b(`a`,{href:ve.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`)})]})]})})}D();function sy(){let{pathname:e,search:t,hash:n}=K();return b(J,{to:`${lv(e)}${t}${n}`,replace:!0})}function cy(){return b(J,{to:j_()??`/devices`,replace:!0})}var ly=h(()=>i(()=>import(`./Devices-BF4EQ5d8.js`).then(e=>({default:e.DevicesPage})),__vite__mapDeps([0,1,2,3,4,5,6,7,8]),import.meta.url)),uy=h(()=>i(()=>import(`./Integrations-B_RGvZtR.js`).then(e=>({default:e.IntegrationsPage})),__vite__mapDeps([9,1,2,3,4,10,5,11,6,12,13,14,15,7,8]),import.meta.url)),dy=h(()=>i(()=>import(`./IntegrationDetail-DWTyAAj6.js`).then(e=>({default:e.IntegrationDetailPage})),__vite__mapDeps([16,1,2,3,4,17,5,12,13,10,14,15,18,7,19]),import.meta.url)),fy=h(()=>i(()=>import(`./Pipeline-yNzjqrit.js`).then(e=>({default:e.PipelinePage})),__vite__mapDeps([20,1,2,3,4,10,5,21,22,23,24,18,25,26,8]),import.meta.url)),py=h(()=>i(()=>import(`./DeviceDetail-CB185X1z.js`).then(e=>({default:e.DeviceDetailPage})),__vite__mapDeps([27,1,2,3,4,10,5,28,29,30,31,21,32,33,24,34,35,36,37,38,39,25,8,40,15]),import.meta.url)),my=h(()=>i(()=>import(`./Showroom-Hd3Y1pZa.js`).then(e=>({default:e.ShowroomPage})),__vite__mapDeps([41,1,2,3,4]),import.meta.url)),hy=h(()=>i(()=>import(`./EmbedPlayerPage-evY5cBae.js`).then(e=>({default:e.EmbedPlayerPage})),__vite__mapDeps([42,1,2,3,4,5]),import.meta.url)),gy=h(()=>i(()=>import(`./Library-jWD_BsMv.js`).then(e=>({default:e.LibraryPage})),__vite__mapDeps([43,1,2,3,4,10,5,44,21,23,45,46,37,47,40,15]),import.meta.url)),_y=h(()=>i(()=>import(`./Recordings-Ci4LULiQ.js`).then(e=>({default:e.RecordingsPage})),__vite__mapDeps([48,1,2,3,4,10,5,49,46,50,28,51,52,53,40,15]),import.meta.url)),vy=h(()=>i(()=>import(`./Viewer-Dupx7vL4.js`).then(e=>({default:e.ViewerPage})),__vite__mapDeps([54,2,3,4,55,5,15,1]),import.meta.url)),yy=h(()=>i(()=>import(`./Build-CkP-FHmg.js`).then(e=>({default:e.BuildPage})),__vite__mapDeps([56,1,2,3,4,10,5,31,57,21,46,58,34,32,35,36,59]),import.meta.url)),by=h(()=>i(()=>import(`./CompositionEditorPage-CJx0RCW8.js`).then(e=>({default:e.CompositionEditorPage})),__vite__mapDeps([60,1,2,3,4,31,5,6,58,34,10,32,35,36]),import.meta.url)),xy=h(()=>i(()=>import(`./Locations-Da36xo8K.js`).then(e=>({default:e.LocationsPage})),__vite__mapDeps([61,1,2,3,4,10,5,31,62,45,46,38,35,36]),import.meta.url)),Sy=h(()=>i(()=>import(`./Addons-DzzCgAq-.js`).then(e=>({default:e.AddonsPage})),__vite__mapDeps([63,1,2,3,4,21,5,6,18,64,15]),import.meta.url)),Cy=h(()=>i(()=>import(`./AiProfiles-CgwzlUVs.js`).then(e=>({default:e.AiProfilesPage})),__vite__mapDeps([65,1,2,3,4,10,5,66,67,6,46,15]),import.meta.url)),wy=h(()=>i(()=>import(`./MyAccess-DyOUww3e.js`).then(e=>({default:e.MyAccessPage})),__vite__mapDeps([68,1,2,3,4,10,5,21,69,70,71,6,46,72,15]),import.meta.url)),Ty=h(()=>i(()=>import(`./Logs-DWUljlNw.js`).then(e=>({default:e.LogsPage})),__vite__mapDeps([73,1,2,3,4,74,24,5,6,46,75,76,18,77,19,15,78]),import.meta.url)),Ey=h(()=>i(()=>import(`./Identity-BrjQOQ40.js`).then(e=>({default:e.IdentityPage})),__vite__mapDeps([79,1,2,3,4,10,5,80,21,69,70,71,6,46,75,76,18,77,19,15,72,78]),import.meta.url)),Dy=h(()=>i(()=>import(`./Network-f3eno7Nz.js`).then(e=>({default:e.NetworkPage})),__vite__mapDeps([81,1,2,3,4,10,5,31,21,14,6,46,75,76,18,77,19,15,78]),import.meta.url)),Oy=h(()=>i(()=>import(`./Integrations-kKJWlcWD.js`).then(e=>({default:e.IntegrationsPage})),__vite__mapDeps([82,1,2,3,4,10,5,21,14,70,83,46,75,76,6,18,77,19,15,13]),import.meta.url)),ky=h(()=>i(()=>import(`./Data-B9ZuZX-A.js`).then(e=>({default:e.DataPage})),__vite__mapDeps([84,1,2,3,4,10,5,85,33,52,6,46,50,28,51,53,40,15]),import.meta.url)),Ay=h(()=>i(()=>import(`./System-C4I1BL8G.js`).then(e=>({default:e.SystemPage})),__vite__mapDeps([86,1,2,3,4,10,5,21,69,6,46,18,77,19,15]),import.meta.url)),jy=h(()=>i(()=>import(`./Cluster-BY0AJ7Y8.js`).then(e=>({default:e.ClusterPage})),__vite__mapDeps([87,1,2,3,4,10,5,52,88,71,6,18,26,64,53]),import.meta.url)),My=h(()=>i(()=>import(`./Terminal-DZwz7oSc.js`).then(e=>({default:e.TerminalPage})),__vite__mapDeps([89,1,2,3,4,21,5,6,18,90]),import.meta.url)),Ny=h(()=>i(()=>import(`./Notifications-Bx6F55kk.js`).then(e=>({default:e.NotificationsPage})),__vite__mapDeps([91,1,2,3,4,10,5,30,21,66,92,6,46,59,39,47,15,36]),import.meta.url)),Py=h(()=>i(()=>import(`./History-afx6dKjt.js`).then(e=>({default:e.HistoryPage})),__vite__mapDeps([93,1,2,3,4,5,6]),import.meta.url)),Fy=h(()=>i(()=>import(`./Calendars-CJ9P43Kk.js`).then(e=>({default:e.CalendarsPage})),__vite__mapDeps([94,1,2,3,4,10,5,21,6]),import.meta.url)),Iy=new E({defaultOptions:{queries:{gcTime:0,staleTime:0,retry:!1,refetchOnWindowFocus:!1}}});Ir(Iy);function Ly({field:e,value:t,onChange:n,disabled:r}){return b(Om,{field:e,value:t,onChange:n,disabled:r})}var Ry={"model-selector":Ly};function zy({children:e}){let{t}=B(),{user:n,logout:r}=eu(),[i,a]=C(0),s=f(n?.username??null);x(()=>{let e=n?.username??null;e!==s.current&&(s.current=e,Z(),a(e=>e+1))},[n]);let c=p(()=>X(),[i]),l=y(()=>{X().reconnect(),a(e=>e+1),Iy.invalidateQueries()},[]);Zm(y(()=>vl(l),[l])),x(()=>ml(()=>{X().isSocketTokenStale()&&l()}),[l]);let u=y(async()=>{let e=await yl();return e&&l(),e},[l]),{bootReady:d,bootError:m}=Ym(c,n??null,r,u);return b(Km,{children:b(ze,{system:c,children:b(xn.Provider,{client:c.trpcClient,queryClient:Iy,children:o(An,{children:[b(si,{children:b(oi,{children:d?e:b(By,{})})}),d&&b(Pm,{}),m!==null&&d&&o(`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:`),` `,m,`. Retrying in background.`]})]})})})})}function By(){let{t:e}=B();return b(`div`,{className:`flex min-h-screen items-center justify-center bg-background`,children:o(`div`,{className:`flex items-center gap-3 text-sm text-foreground-subtle`,children:[b(`span`,{className:`h-4 w-4 animate-spin rounded-full border-2 border-primary/30 border-t-primary`}),e(`app.connecting`,`Connecting…`)]})})}function Vy(){return b(`div`,{className:`flex min-h-screen items-center justify-center bg-background`,children:b(`span`,{className:`h-4 w-4 animate-spin rounded-full border-2 border-primary/30 border-t-primary`})})}function Hy(){return b(Dr,{defaultMode:`dark`,children:b(N,{client:Iy,children:b($l,{children:b(zy,{children:b(lr,{children:b(Nm,{children:o(vr,{renderers:Ry,children:[b(os,{basename:Qe(),children:b(Sm,{children:b(v,{fallback:b(Vy,{}),children:o(_o,{children:[b(Y,{path:`/login`,element:b(oy,{})}),b(Y,{path:`/admin/*`,element:b(sy,{})}),b(Y,{path:`/admin`,element:b(sy,{})}),b(Y,{path:`/change-password`,element:b($,{children:b(gv,{})})}),b(Y,{path:`/showroom`,element:b(my,{})}),b(Y,{path:`/embed/player`,element:b(hy,{})}),o(Y,{element:b($,{children:b(xi,{children:b(q_,{})})}),children:[b(Y,{index:!0,element:b(cy,{})}),b(Y,{path:`/access-denied`,element:b(uv,{})}),b(Y,{path:`/dashboard`,element:b(J,{to:`/devices`,replace:!0})}),b(Y,{path:`/devices`,element:b(ly,{})}),b(Y,{path:`/cameras`,element:b(J,{to:`/devices`,replace:!0})}),b(Y,{path:`/integrations`,element:b(uy,{})}),b(Y,{path:`/integrations/:integrationId`,element:b(dy,{})}),b(Y,{path:`/system/pipeline`,element:b(fy,{})}),b(Y,{path:`/pipeline`,element:b(J,{to:`/system/pipeline`,replace:!0})}),b(Y,{path:`/live`,element:b(vy,{})}),b(Y,{path:`/devices/:deviceId`,element:b(py,{})}),b(Y,{path:`/system/logs`,element:b($,{requireAdmin:!0,children:b(Ty,{})})}),b(Y,{path:`/system/addons`,element:b($,{requireAdmin:!0,children:b(Sy,{})})}),b(Y,{path:`/system/ai`,element:b($,{requireAdmin:!0,children:b(Cy,{})})}),b(Y,{path:`/system/settings`,element:b($,{requireAdmin:!0,children:b(Ay,{})})}),b(Y,{path:`/system/nodes`,element:b($,{requireAdmin:!0,children:b(jy,{})})}),b(Y,{path:`/system/notifications`,element:b($,{requireAdmin:!0,children:b(Ny,{})})}),b(Y,{path:`/system/history`,element:b($,{requireAdmin:!0,children:b(Py,{})})}),b(Y,{path:`/system/calendars`,element:b($,{requireAdmin:!0,children:b(Fy,{})})}),b(Y,{path:`/system/identity`,element:b($,{requireAdmin:!0,children:b(Ey,{})})}),b(Y,{path:`/system/my-access`,element:b(wy,{})}),b(Y,{path:`/system/network`,element:b($,{requireAdmin:!0,children:b(Dy,{})})}),b(Y,{path:`/system/integrations`,element:b($,{requireAdmin:!0,children:b(Oy,{})})}),b(Y,{path:`/system/data`,element:b($,{requireAdmin:!0,children:b(ky,{})})}),b(Y,{path:`/system`,element:b(J,{to:Lm,replace:!0})}),b(Y,{path:`/system/terminal`,element:b($,{requireAdmin:!0,children:b(My,{})})}),Rm.map(e=>b(Y,{path:e.path,element:b(Bm,{tab:e.tab})},e.path)),b(Y,{path:`/system/users`,element:b(J,{to:`/system/identity?tab=users`,replace:!0})}),b(Y,{path:`/system/api-keys`,element:b(J,{to:`/system/identity?tab=api-keys`,replace:!0})}),b(Y,{path:`/system/authentication`,element:b(J,{to:ov(`authentication`),replace:!0})}),b(Y,{path:`/system/linked-sessions`,element:b(J,{to:`/system/identity?tab=linked-sessions`,replace:!0})}),b(Y,{path:`/system/remote-access`,element:b(J,{to:ov(`remoteAccess`),replace:!0})}),b(Y,{path:`/system/turn`,element:b(J,{to:ov(`turn`),replace:!0})}),b(Y,{path:`/system/storage`,element:b(J,{to:`/system/data?tab=storage`,replace:!0})}),b(Y,{path:`/system/backup`,element:b(J,{to:`/system/data?tab=backup`,replace:!0})}),b(Y,{path:`/library`,element:b($,{requireAdmin:!0,children:b(gy,{})})}),b(Y,{path:`/retrain`,element:b(J,{to:`/addon/training`,replace:!0})}),b(Y,{path:`/recordings`,element:b($,{requireAdmin:!0,children:b(_y,{})})}),b(Y,{path:`/build`,element:b($,{requireAdmin:!0,children:b(yy,{})})}),b(Y,{path:Y_,element:b($,{requireAdmin:!0,children:b(by,{})})}),b(Y,{path:X_,element:b($,{requireAdmin:!0,children:b(by,{})})}),b(Y,{path:`/locations`,element:b($,{requireAdmin:!0,children:b(xy,{})})}),b(Y,{path:`/automation`,element:b(km,{to:`/build`})}),b(Y,{path:`/addon/:pagePath`,element:b($,{requireAdmin:!0,children:b(ch,{})})}),b(Y,{path:`*`,element:b(J,{to:`/devices`,replace:!0})})]})]})})})}),b(Um,{})]})})})})})})})}D(),window.__camstackUiLibrary=Pr,window.__camstackSdk=mr,window.__camstackTypes=Zt;var Uy=ui(document.getElementById(`root`));Jg(window.location.pathname,Qe())?ty(Uy):Uy.render(b(w,{children:b(Hy,{})}));export{ip as $,nu as $n,md as $t,Zp as A,Yu as An,Qd as At,up as B,hu as Bn,zd as Bt,Gm as C,Zu as Cn,vf as Ct,am as D,Uu as Dn,Kd as Dt,bm as E,Gu as En,Gd as Et,kp as F,xu as Fn,Ud as Ft,Zf as G,du as Gn,Pd as Gt,Qf as H,ou as Hn,Rd as Ht,hp as I,yu as In,Hd as It,cp as J,su as Jn,Md as Jt,Xf as K,gu as Kn,jd as Kt,xp as L,pu as Ln,Wd as Lt,qp as M,td as Mn,ef as Mt,Kp as N,Au as Nn,Xd as Nt,rm as O,ku as On,Yd as Ot,Gp as P,Cu as Pn,Fd as Pt,ep as Q,_u as Qn,gd as Qt,Sp as R,cu as Rn,Ld as Rt,Ph as S,Iu as Sn,af as St,Mm as T,Vu as Tn,tf as Tt,fp as U,fu as Un,Ad as Ut,np as V,au as Vn,Bd as Vt,ap as W,lu as Wn,xd as Wt,mp as X,mu as Xn,bd as Xt,dp as Y,iu as Yn,Nd as Yt,$f as Z,vu as Zn,Cd as Zt,Ag as _,Du as _n,cf as _t,rv as a,zu as an,mc as ar,Vf as at,yg as b,Nu as bn,pf as bt,iv as c,Ku as cn,cc as cr,Pf as ct,cv as d,od as dn,cs as dr,Sf as dt,wd as en,eu as er,Kf as et,Z_ as f,Pu as fn,J as fr,Of as ft,t_ as g,Bu as gn,gs as gr,bf as gt,Q_ as h,nd as hn,Ga as hr,lf as ht,nv as i,Wu as in,dc as ir,Uf as it,$p as j,qu as jn,$d as jt,Xp as k,ju as kn,Zd as kt,ov as l,Ju as ln,nc as lr,nf as lt,$_ as m,Qu as mn,q as mr,ff as mt,Ov as n,Xu as nn,Nc as nr,Gf as nt,ev as o,Hu as on,uc as or,Bf as ot,J_ as p,ed as pn,K as pr,mf as pt,tp as q,uu as qn,Dd as qt,av as r,cd as rn,yc as rr,qf as rt,tv as s,Tu as sn,lc as sr,zf as st,Av as t,Td as tn,Pc as tr,Wf as tt,sv as u,$u as un,Xs as ur,rf as ut,Hg as v,Ou as vn,yf as vt,Lm as w,ld as wn,Cf as wt,eg as x,Fu as xn,hf as xt,Og as y,sd as yn,gf as yt,Cp as z,ru as zn,Vd as zt};