@camstack/addon-admin-ui 1.2.459 → 1.2.460

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 (148) hide show
  1. package/dist/assets/{AddonAssetIcon-BJEJ1k08.js → AddonAssetIcon-D34ETuUY.js} +1 -1
  2. package/dist/assets/Addons-CgBqBge8.js +4 -0
  3. package/dist/assets/{AdminPage-COkr2pSl.js → AdminPage-DR77_HbX.js} +1 -1
  4. package/dist/assets/{AdminSectionedPage-DacqZ038.js → AdminSectionedPage-CjqX3s11.js} +1 -1
  5. package/dist/assets/AiProfiles-BCwpORLm.js +3 -0
  6. package/dist/assets/BrokerForm-BRqn1YkQ.js +1 -0
  7. package/dist/assets/{Build-C-5lgbq3.js → Build-ClOzVQfs.js} +5 -5
  8. package/dist/assets/Calendars-CBoSQYDb.js +1 -0
  9. package/dist/assets/{Cluster-9x8btsN4.js → Cluster-DRNVLj1k.js} +1 -1
  10. package/dist/assets/CompositionEditor-DMf4BAe3.js +1 -0
  11. package/dist/assets/CompositionEditorPage-CzNZMblE.js +1 -0
  12. package/dist/assets/Data-H0iqkofK.js +2 -0
  13. package/dist/assets/DeviceDetail-DxOdxrh3.js +2 -0
  14. package/dist/assets/DeviceDoActionFields-DzCHBj65.js +1 -0
  15. package/dist/assets/Devices-DKbjdxcr.js +1 -0
  16. package/dist/assets/{EmbedPlayerPage-yV8Ghwca.js → EmbedPlayerPage-Cy-nFopg.js} +1 -1
  17. package/dist/assets/History-C87WOkmh.js +1 -0
  18. package/dist/assets/Identity-Cvu5d-Dp.js +1 -0
  19. package/dist/assets/IntegrationDetail-BP5Tp1Xv.js +1 -0
  20. package/dist/assets/IntegrationHub-fFIljDH3.js +1 -0
  21. package/dist/assets/Integrations-Bxk1Pm6v.js +1 -0
  22. package/dist/assets/Integrations-a8KDlcvK.js +1 -0
  23. package/dist/assets/Library-Bn3TiJ8y.js +1 -0
  24. package/dist/assets/Locations-kMreeWCo.js +3 -0
  25. package/dist/assets/{Logs--6yOXDdG.js → Logs-BINANLCk.js} +1 -1
  26. package/dist/assets/{MaskShapeCanvas-BFRANocL.js → MaskShapeCanvas-BIzAwkst.js} +1 -1
  27. package/dist/assets/{MotionZonesSettings-DAR1lGRc.js → MotionZonesSettings-DnZRB_4R.js} +1 -1
  28. package/dist/assets/MyAccess-C4nalat5.js +2 -0
  29. package/dist/assets/Network-oFeEwPiX.js +1 -0
  30. package/dist/assets/NodeAddonsSettingsPanel-BGv4byJ3.js +1 -0
  31. package/dist/assets/Notifications-DL5HsEPP.js +1 -0
  32. package/dist/assets/Pipeline-CCYyFQs2.js +1 -0
  33. package/dist/assets/{PrivacyMaskSettings-CFjaiNPa.js → PrivacyMaskSettings-B1S3oQXv.js} +1 -1
  34. package/dist/assets/Recordings-CVFFAgP5.js +1 -0
  35. package/dist/assets/ScanNetworkModal-DiohLY4p.js +1 -0
  36. package/dist/assets/{SceneMonitorEditor-CtObZ92A.js → SceneMonitorEditor-BOBxjly7.js} +1 -1
  37. package/dist/assets/SessionsList-BHz78Zw6.js +2 -0
  38. package/dist/assets/Showroom-ndNDu6AF.js +1 -0
  39. package/dist/assets/System-BxeSBDfd.js +1 -0
  40. package/dist/assets/{Terminal-CfhgVSfX.js → Terminal-JlLeryPw.js} +3 -3
  41. package/dist/assets/{Viewer-DOy7SpD5.js → Viewer-CUYAjAr2.js} +1 -1
  42. package/dist/assets/{_virtual_mf-localSharedImportMap___mfe_internal__admin_ui_host-FGBBI8DM.js → _virtual_mf-localSharedImportMap___mfe_internal__admin_ui_host-DO_2_4ZT.js} +1 -1
  43. package/dist/assets/{addon-icons-context-zSgVMYOT.js → addon-icons-context-BR7L-Tl4.js} +1 -1
  44. package/dist/assets/{archive-CCdQLR92.js → archive-C91oVgt5.js} +1 -1
  45. package/dist/assets/{authed-media-BnRlGkoA.js → authed-media-BLAkkFbc.js} +1 -1
  46. package/dist/assets/{bell-off-CqtliYfE.js → bell-off-CwDLJ3dr.js} +1 -1
  47. package/dist/assets/{board-model-DcXa88Au.js → board-model-D0uZ4Hi-.js} +1 -1
  48. package/dist/assets/{boxes-DQn7OALq.js → boxes-BqbPUbNG.js} +1 -1
  49. package/dist/assets/circle-slash-mKgId_-0.js +1 -0
  50. package/dist/assets/client-Bk3bp5F2.js +358 -0
  51. package/dist/assets/{cloud-upload-Ds0DBFF4.js → cloud-upload-mL-8gqPE.js} +1 -1
  52. package/dist/assets/crop-o9eS9Vg7.js +1 -0
  53. package/dist/assets/device-integration-icon-6CS7KQYP.js +1 -0
  54. package/dist/assets/device-picker-model--DJ7vWrZ.js +1 -0
  55. package/dist/assets/dist-DEi6Qrdg.js +358 -0
  56. package/dist/assets/{dist-DGtsAF0e.js → dist-q6ZbxCLt.js} +1 -1
  57. package/dist/assets/{eraser-CBhjXP5B.js → eraser-TGxNpy2a.js} +1 -1
  58. package/dist/assets/{hard-drive-download-Bbqt0BU7.js → hard-drive-download-D9Rkcg5b.js} +1 -1
  59. package/dist/assets/{hostInit-DYH0aGPp.js → hostInit-DpIklA1C.js} +1 -1
  60. package/dist/assets/i18n-CWIrO_Qb.js +1 -0
  61. package/dist/assets/{icons-CIAj8beD.js → icons-Dr-Mg6Rp.js} +1 -1
  62. package/dist/assets/index-CfyMTyLK.css +2 -0
  63. package/dist/assets/index-D3LY1t1A.js +4 -0
  64. package/dist/assets/{key-BrmsyfQ2.js → key-YOvsTqKG.js} +1 -1
  65. package/dist/assets/{key-round-DupHhW0i.js → key-round-BZ4X-rUb.js} +1 -1
  66. package/dist/assets/{layers-jV4_DPMS.js → layers-Dof6dMwp.js} +1 -1
  67. package/dist/assets/{linked-devices-model-Wflvd004.js → linked-devices-model-CMebF7aU.js} +1 -1
  68. package/dist/assets/{list-ordered-DOEvj-y0.js → list-ordered-Co9pKx8m.js} +1 -1
  69. package/dist/assets/location-owned-usage-CsAzpjY3.js +1 -0
  70. package/dist/assets/{log-in-CcPfrqgr.js → log-in-CHySLCGD.js} +1 -1
  71. package/dist/assets/{memory-stick-q_w6rp-t.js → memory-stick-0Z6zphbD.js} +1 -1
  72. package/dist/assets/{message-square-plus-9n6eNHhb.js → message-square-plus-DlQEXnei.js} +1 -1
  73. package/dist/assets/{mf-entry-bootstrap-0-44ebd2c3.js → mf-entry-bootstrap-0-4cca1fc4.js} +2 -2
  74. package/dist/assets/{mic-off-D8Z3zvJC.js → mic-off-B-AwHbuE.js} +1 -1
  75. package/dist/assets/{monitor-off-ChiwdYm2.js → monitor-off-BXvpLLls.js} +1 -1
  76. package/dist/assets/{monitor-smartphone-5A2YPeJg.js → monitor-smartphone-B0_0dH0j.js} +1 -1
  77. package/dist/assets/mount--DJ7vWrZ.js +1 -0
  78. package/dist/assets/{player-overlays-B2uKzPiF.js → player-overlays-Dx9MsPRB.js} +1 -1
  79. package/dist/assets/{recycle-lkNup4GK.js → recycle-hQF3Eedf.js} +1 -1
  80. package/dist/assets/remoteEntry-fmZ04jeg.js +1 -0
  81. package/dist/assets/{scan-eye-CJpdZenM.js → scan-eye-CaBHblK8.js} +1 -1
  82. package/dist/assets/{scissors-v8FUfmH0.js → scissors-Cn0y5BDd.js} +1 -1
  83. package/dist/assets/{search-x-CJx173bU.js → search-x-BFUKepJY.js} +1 -1
  84. package/dist/assets/{send-XYAWcADm.js → send-DnFrAxG7.js} +1 -1
  85. package/dist/assets/{settings-2-Bgu4fxha.js → settings-2-TvLz8e2t.js} +1 -1
  86. package/dist/assets/{speaker-ofUzLdUT.js → speaker-5LjbBCEM.js} +1 -1
  87. package/dist/assets/src-D293nH2g.js +67 -0
  88. package/dist/assets/{step-inspector-model-C7JCmVfz.js → step-inspector-model-PJaQfiIl.js} +1 -1
  89. package/dist/assets/{timer-reset-D-5iU9l-.js → timer-reset-DHDxq-YS.js} +1 -1
  90. package/dist/assets/{ungroup-DD3pb37b.js → ungroup-B3qoTqBs.js} +1 -1
  91. package/dist/assets/{unlink-xgj0DHXA.js → unlink-pSJVFfzP.js} +1 -1
  92. package/dist/assets/{usb-COQJ7FVk.js → usb-8iIkiKi4.js} +1 -1
  93. package/dist/assets/{use-scenes-feed-Cr8WJGCC.js → use-scenes-feed-xDDedfcQ.js} +1 -1
  94. package/dist/assets/{use-stationary-objects-kiH5Q2gT.js → use-stationary-objects-D0sT-_dl.js} +1 -1
  95. package/dist/assets/useEventInvalidation--DJ7vWrZ.js +1 -0
  96. package/dist/assets/useNodeUrlSelection-Ci3kxs0x.js +1 -0
  97. package/dist/assets/user-round-lV0LR5iu.js +1 -0
  98. package/dist/assets/{user-x-CBuwxTd8.js → user-x-Be8HX8C7.js} +1 -1
  99. package/dist/assets/{video-CCbgIO_h.js → video-BiU6h1kt.js} +1 -1
  100. package/dist/assets/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__admin_ui_host__remoteEntry-_hash_-CxTajz7L.js → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__admin_ui_host__remoteEntry-_hash_-CgcmxUPa.js} +2 -2
  101. package/dist/index.html +10 -11
  102. package/dist/server/addon.js +92 -89
  103. package/package.json +1 -1
  104. package/dist/assets/Addons-DHanUVT2.js +0 -4
  105. package/dist/assets/AiProfiles-00eup-gf.js +0 -3
  106. package/dist/assets/BrokerForm-BZXEvLK0.js +0 -1
  107. package/dist/assets/Calendars-BkpP1D2U.js +0 -1
  108. package/dist/assets/CompositionEditor-r0DF2l8O.js +0 -1
  109. package/dist/assets/CompositionEditorPage-ZgZUzIco.js +0 -1
  110. package/dist/assets/Data-CRUK3PE2.js +0 -2
  111. package/dist/assets/DeviceDetail-B-WDYuF4.js +0 -2
  112. package/dist/assets/DeviceDoActionFields-B6h8uYuA.js +0 -1
  113. package/dist/assets/Devices--JO66DyO.js +0 -1
  114. package/dist/assets/History-BwlSzH55.js +0 -1
  115. package/dist/assets/Identity-BWhaEMdv.js +0 -1
  116. package/dist/assets/IntegrationDetail-CQTl55bJ.js +0 -1
  117. package/dist/assets/IntegrationHub-1t9XtENg.js +0 -1
  118. package/dist/assets/Integrations-BsHioywX.js +0 -1
  119. package/dist/assets/Integrations-DAZG8yCP.js +0 -1
  120. package/dist/assets/Library-I8I-H4B0.js +0 -1
  121. package/dist/assets/Locations-DpID1z6R.js +0 -3
  122. package/dist/assets/MyAccess-BlPaAQNJ.js +0 -2
  123. package/dist/assets/Network-68PrEWb3.js +0 -1
  124. package/dist/assets/NodeAddonsSettingsPanel-BU9D0unj.js +0 -1
  125. package/dist/assets/Notifications-BHMdjbhb.js +0 -1
  126. package/dist/assets/Pipeline-BntRM_Gg.js +0 -1
  127. package/dist/assets/Recordings-B0PFCiE6.js +0 -1
  128. package/dist/assets/ScanNetworkModal-KVlo34E_.js +0 -1
  129. package/dist/assets/SessionsList-BqQzJQzH.js +0 -2
  130. package/dist/assets/Showroom-BpbWCBms.js +0 -1
  131. package/dist/assets/System-Bi2UJjp7.js +0 -1
  132. package/dist/assets/circle-slash-BqXxDfpK.js +0 -1
  133. package/dist/assets/client-DUabg_ow.js +0 -358
  134. package/dist/assets/crop-Cfvx74Ee.js +0 -1
  135. package/dist/assets/device-integration-icon-Bb8AOXEF.js +0 -1
  136. package/dist/assets/device-picker-model-BtgtDdnV.js +0 -1
  137. package/dist/assets/dist-BgJn1_Ws.js +0 -358
  138. package/dist/assets/i18n-aZ2iCAl5.js +0 -1
  139. package/dist/assets/index-DKfAHLRf.js +0 -4
  140. package/dist/assets/index-I9On1g0c.css +0 -2
  141. package/dist/assets/location-owned-usage-D3Zl9d5o.js +0 -1
  142. package/dist/assets/mount-BtgtDdnV.js +0 -1
  143. package/dist/assets/notification-schedule-field-BGziM8ff.js +0 -1
  144. package/dist/assets/remoteEntry-DwoMnkvg.js +0 -1
  145. package/dist/assets/src-N0x0aMoc.js +0 -67
  146. package/dist/assets/useEventInvalidation-BtgtDdnV.js +0 -1
  147. package/dist/assets/useNodeUrlSelection-DpqDFKVD.js +0 -1
  148. package/dist/assets/user-round-Dy1LJO0f.js +0 -1
@@ -0,0 +1,4 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./Devices-DKbjdxcr.js","./src-D293nH2g.js","./player-overlays-Dx9MsPRB.js","./client-Bk3bp5F2.js","./__vite-browser-external-BlMfPwfH.js","./useTranslation-D3Is_4B6.js","./AdminPage-DR77_HbX.js","./device-integration-icon-6CS7KQYP.js","./useEventInvalidation--DJ7vWrZ.js","./Integrations-a8KDlcvK.js","./i18n-CWIrO_Qb.js","./ScanNetworkModal-DiohLY4p.js","./BrokerForm-BRqn1YkQ.js","./mount--DJ7vWrZ.js","./IntegrationDetail-BP5Tp1Xv.js","./search-x-BFUKepJY.js","./NodeAddonsSettingsPanel-BGv4byJ3.js","./addon-icons-context-BR7L-Tl4.js","./Pipeline-CCYyFQs2.js","./video-BiU6h1kt.js","./usb-8iIkiKi4.js","./crop-o9eS9Vg7.js","./layers-Dof6dMwp.js","./board-model-D0uZ4Hi-.js","./step-inspector-model-PJaQfiIl.js","./DeviceDetail-DxOdxrh3.js","./archive-C91oVgt5.js","./scan-eye-CaBHblK8.js","./bell-off-CwDLJ3dr.js","./boxes-BqbPUbNG.js","./circle-slash-mKgId_-0.js","./CompositionEditor-DMf4BAe3.js","./use-stationary-objects-D0sT-_dl.js","./linked-devices-model-CMebF7aU.js","./device-picker-model--DJ7vWrZ.js","./authed-media-BLAkkFbc.js","./Showroom-ndNDu6AF.js","./EmbedPlayerPage-Cy-nFopg.js","./Library-Bn3TiJ8y.js","./user-x-Be8HX8C7.js","./user-round-lV0LR5iu.js","./AdminSectionedPage-CjqX3s11.js","./use-scenes-feed-xDDedfcQ.js","./Recordings-CVFFAgP5.js","./scissors-Cn0y5BDd.js","./location-owned-usage-CsAzpjY3.js","./eraser-TGxNpy2a.js","./hard-drive-download-D9Rkcg5b.js","./format-size-DIxKXxtj.js","./Viewer-CUYAjAr2.js","./monitor-off-BXvpLLls.js","./Build-ClOzVQfs.js","./ungroup-B3qoTqBs.js","./DeviceDoActionFields-DzCHBj65.js","./CompositionEditorPage-CzNZMblE.js","./Locations-kMreeWCo.js","./speaker-5LjbBCEM.js","./Addons-CgBqBge8.js","./useNodeUrlSelection-Ci3kxs0x.js","./AiProfiles-BCwpORLm.js","./send-DnFrAxG7.js","./message-square-plus-DlQEXnei.js","./MyAccess-C4nalat5.js","./key-round-BZ4X-rUb.js","./monitor-smartphone-B0_0dH0j.js","./unlink-pSJVFfzP.js","./SessionsList-BHz78Zw6.js","./Logs-BINANLCk.js","./timer-reset-DHDxq-YS.js","./IntegrationHub-fFIljDH3.js","./settings-2-TvLz8e2t.js","./AddonAssetIcon-D34ETuUY.js","./addon-display-names-BkwMrExv.js","./Identity-Cvu5d-Dp.js","./key-YOvsTqKG.js","./Network-oFeEwPiX.js","./log-in-CHySLCGD.js","./Integrations-Bxk1Pm6v.js","./recycle-hQF3Eedf.js","./Data-H0iqkofK.js","./cloud-upload-mL-8gqPE.js","./System-BxeSBDfd.js","./Cluster-DRNVLj1k.js","./memory-stick-0Z6zphbD.js","./Terminal-JlLeryPw.js","./Terminal-kHJ-D0s7.css","./Notifications-DL5HsEPP.js","./list-ordered-Co9pKx8m.js","./History-C87WOkmh.js","./Calendars-CBoSQYDb.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_-CgcmxUPa.js";import{t as i}from"./vite-preload-helper-kNaey6uv.js";import{$ as a,A as o,B as s,D as c,E as l,F as u,G as d,J as f,L as p,M as m,N as h,O as g,P as _,R as v,S as y,V as b,W as x,X as S,Y as C,Z as w,a as T,b as E,d as D,i as O,j as k,k as A,o as j,q as M,u as N,x as P}from"./_virtual_mf___mfe_internal__admin_ui_host__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-CEHpkaJP.js";import{$t as F,Br as I,Ci as ee,Di as L,Dr as te,Er as ne,Fn as re,Fr as ie,It as R,Jr as ae,Kn as z,Kt as oe,Li as se,Mi as ce,Nt as le,On as ue,Or as de,Q as B,Qn as fe,Rr as pe,Si as me,T as he,Tn as ge,Ui as _e,Xi as ve,Xn as ye,Xr as be,Z as xe,Zt as Se,_t as Ce,an as we,bi as Te,bn as Ee,dn as De,dt as Oe,fi as ke,fn as Ae,ft as je,hi as Me,ht as Ne,it as Pe,ji as Fe,kn as Ie,mr as Le,or as Re,ot as ze,pi as Be,pn as Ve,ra as He,rr as Ue,rt as We,sa as Ge,si as Ke,sn as qe,ta as Je,tr as Ye,un as Xe,ut as Ze,vr as Qe,wr as $e,xn as et,yi as tt,zn as nt,zr as rt}from"./player-overlays-Dx9MsPRB.js";import{A as it,Ar as at,Bt as ot,Cn as st,Ct as ct,Et as lt,F as ut,Ft as dt,I as ft,It as pt,Lt as mt,M as ht,Mt as gt,Nt as _t,O as vt,Ot as yt,P as bt,Pt as xt,Rt as St,St as Ct,Tt as wt,U as Tt,Vt as Et,W as Dt,_i as Ot,_r as kt,_t as At,ct as jt,dt as Mt,ft as Nt,i as Pt,ir as Ft,j as It,k as Lt,kn as Rt,kt as zt,lt as Bt,mt as Vt,n as Ht,pt as Ut,r as Wt,rr as Gt,si as Kt,st as qt,t as Jt,ui as Yt,ut as Xt,vt as Zt,w as Qt,wr as $t,xt as en,yt as tn,zi as nn,zt as rn}from"./client-Bk3bp5F2.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-BiU6h1kt.js";import{$a as bn,$n as xn,$t as Sn,Ai as Cn,Ar as wn,Bt as Tn,Di as En,Do as Dn,Dr as On,Ei as kn,Er as An,F as jn,Fr as Mn,Gl as Nn,Ht as Pn,Io as Fn,Ir as In,Ja as Ln,Jt as Rn,Kl as zn,Ku as Bn,L as Vn,Lt as Hn,Lu as Un,Mu as Wn,Nr as Gn,Oi as Kn,On as qn,Oo as Jn,Or as Yn,Ot as Xn,Pt as Zn,Qa as Qn,Qn as $n,Qu as er,Rr as tr,Ru as nr,So as rr,Tr as ir,Uu as ar,Wu as or,Xr as sr,Xu as cr,Ya as lr,Yo as ur,Yu as dr,Za as fr,Zl as pr,Zu as mr,_o as hr,ao as gr,ar as _r,cr as vr,en as yr,go as br,gr as xr,ho as Sr,in as Cr,ir as wr,jr as Tr,ju as Er,ki as Dr,kr as Or,l as kr,ll as Ar,mi as jr,mt as Mr,mu as Nr,n as Pr,nd as Fr,nn as Ir,nr as Lr,or as Rr,p as zr,qn as Br,qu as Vr,rd as Hr,rn as Ur,rr as Wr,s as Gr,si as Kr,sl as qr,sr as Jr,ti as Yr,tn as Xr,to as Zr,tr as Qr,us as $r,wo as ei,wr as ti,xo as ni,y as ri,yr as ii,yt as ai,zr as oi,zu as si}from"./src-D293nH2g.js";import{r as ci,t as li}from"./_virtual_mf___mfe_internal__admin_ui_host__loadShare__react_mf_2_dom__loadShare__.js-DPkvGqVU.js";import{t as ui}from"./_virtual_mf___mfe_internal__admin_ui_host__loadShare__react_mf_2_dom_mf_1_client__loadShare__.js-Cb2QlpvS.js";import{n as di,t as V}from"./i18n-CWIrO_Qb.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 H,u as yi}from"./useTranslation-D3Is_4B6.js";import"./mount--DJ7vWrZ.js";import{n as bi,t as xi}from"./addon-icons-context-BR7L-Tl4.js";(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})(),a();var 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 U(e,t){if(e===!1||e==null)throw Error(t)}function W(e,t){if(!e){typeof console<`u`&&console.warn(t);try{throw Error(t)}catch{}}}function 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),U(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;U(c.relativePath.startsWith(r),`Absolute route path "${c.relativePath}" nested under path "${r}" is not valid. An absolute child route path must start with the combined path of all its parent routes.`),c.relativePath=c.relativePath.slice(r.length)}let l=ua([r,c.relativePath]),u=n.concat(c);e.children&&e.children.length>0&&(U(e.index!==!0,`Index routes must not have child routes. Please remove all child routes from route path "${l}".`),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:ua([a,d.pathname]),pathnameBase:fa(ua([a,d.pathnameBase])),route:f}),d.pathnameBase!==`/`&&(a=ua([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){W(e===`*`||!e.endsWith(`*`)||e.endsWith(`/*`),`Route path "${e}" will be treated as if it were "${e.replace(/\*$/,`/*`)}" because the \`*\` character must always follow a \`/\` in the pattern. To get rid of this warning, please change the route path to "${e.replace(/\*$/,`/*`)}".`);let r=[],i=`^`+e.replace(/\/*\*?$/,``).replace(/^\/*/,`/`).replace(/[\\.*+^${}|()[\]]/g,`\\$&`).replace(/\/:([\w-]+)(\?)?/g,(e,t,n,i,a)=>{if(r.push({paramName:t,isOptional:n!=null}),n){let t=a.charAt(i+e.length);return t&&t!==`/`?`/([^\\/]*)`:`(?:/([^\\/]*))?`}return`/([^\\/]+)`}).replace(/\/([\w-]+)\?(\/|$)/g,`(/$1)?$2`);return e.endsWith(`*`)?(r.push({paramName:`*`}),i+=e===`*`||e===`/*`?`(.*)$`:`(?:\\/(.+)|\\/*)$`):n?i+=`\\/*$`:e!==``&&e!==`/`&&(i+=`(?:(?=\\/|$))`),[new RegExp(i,t?void 0:`i`),r]}function ta(e){try{return e.split(`/`).map(e=>decodeURIComponent(e).replace(/\//g,`%2F`)).join(`/`)}catch(t){return W(!1,`The URL path "${e}" could not be decoded because it is a malformed URL segment. This is probably due to a bad percent encoding (${t}).`),e}}function 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:pa(r),hash:ma(i)}}function ia(e,t){let n=da(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},U(!i.pathname||!i.pathname.includes(`?`),aa(`?`,`pathname`,`search`,i)),U(!i.pathname||!i.pathname.includes(`#`),aa(`#`,`pathname`,`hash`,i)),U(!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,`/`),ua=e=>la(e.join(`/`)),da=e=>e.replace(/\/+$/,``),fa=e=>da(e).replace(/^\/*/,`/`),pa=e=>!e||e===`?`?``:e.startsWith(`?`)?e:`?`+e,ma=e=>!e||e===`#`?``:e.startsWith(`#`)?e:`#`+e,ha=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 ga(e){return e!=null&&typeof e.status==`number`&&typeof e.statusText==`string`&&typeof e.internal==`boolean`&&`data`in e}function _a(e){return ua(e.map(e=>e.route.path).filter(Boolean))||`/`}var va=typeof window<`u`&&window.document!==void 0&&window.document.createElement!==void 0;function ya(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(va)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{W(!1,`<Link to="${n}"> contains an invalid URL which will probably break when clicked - please update to a valid URL path.`)}return{absoluteURL:r,isExternal:i,to:n}}Object.getOwnPropertyNames(Object.prototype).sort().join(`\0`);var ba=[`POST`,`PUT`,`PATCH`,`DELETE`];new Set(ba);var xa=[`GET`,...ba];new Set(xa);var Sa=[`about:`,`blob:`,`chrome:`,`chrome-untrusted:`,`content:`,`data:`,`devtools:`,`file:`,`filesystem:`,`javascript:`];function Ca(e){try{return Sa.includes(new URL(e).protocol)}catch{return!1}}var wa=g(null);wa.displayName=`DataRouter`;var Ta=g(null);Ta.displayName=`DataRouterState`;var Ea=g(!1);function Da(){return v(Ea)}var Oa=g({isTransitioning:!1});Oa.displayName=`ViewTransition`;var ka=g(new Map);ka.displayName=`Fetchers`;var Aa=g(null);Aa.displayName=`Await`;var G=g(null);G.displayName=`Navigation`;var ja=g(null);ja.displayName=`Location`;var K=g({outlet:null,matches:[],isDataRoute:!1});K.displayName=`Route`;var Ma=g(null);Ma.displayName=`RouteError`;var Na=`REACT_ROUTER_ERROR`,Pa=`REDIRECT`,Fa=`ROUTE_ERROR_RESPONSE`;function Ia(e){if(e.startsWith(`${Na}:${Pa}:{`))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 La(e){if(e.startsWith(`${Na}:${Fa}:{`))try{let t=JSON.parse(e.slice(40));if(typeof t==`object`&&t&&typeof t.status==`number`&&typeof t.statusText==`string`)return new ha(t.status,t.statusText,t.data)}catch{}}function Ra(e,{relative:t}={}){U(za(),`useHref() may be used only in the context of a <Router> component.`);let{basename:n,navigator:r}=v(G),{hash:i,pathname:a,search:o}=Ja(e,{relative:t}),s=a;return n!==`/`&&(s=a===`/`?n:ua([n,a])),r.createHref({pathname:s,search:o,hash:i})}function za(){return v(ja)!=null}function q(){return U(za(),`useLocation() may be used only in the context of a <Router> component.`),v(ja).location}function Ba(){return v(ja).navigationType}var Va=`You should call navigate() in a React.useEffect(), not when your component is first rendered.`;function Ha(e){v(G).static||x(e)}function Ua(){let{isDataRoute:e}=v(K);return e?mo():Wa()}function Wa(){U(za(),`useNavigate() may be used only in the context of a <Router> component.`);let e=v(wa),{basename:t,navigator:n}=v(G),{matches:r}=v(K),{pathname:i}=q(),a=JSON.stringify(sa(r)),o=M(!1);return Ha(()=>{o.current=!0}),p((r,s={})=>{if(W(o.current,Va),!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:ua([t,c.pathname])),(s.replace?n.replace:n.push)(c,s.state,s)},[t,n,a,i,e])}var Ga=g(null);function Ka(e){let t=v(K).outlet;return d(()=>t&&A(Ga.Provider,{value:e},t),[t,e])}function qa(){let{matches:e}=v(K);return e[e.length-1]?.params??{}}function Ja(e,{relative:t}={}){let{matches:n}=v(K),{pathname:r}=q(),i=JSON.stringify(sa(n));return d(()=>ca(e,JSON.parse(i),r,t===`path`),[e,i,r,t])}function Ya(e,t){return Xa(e,t)}function Xa(e,t,n){U(za(),`useRoutes() may be used only in the context of a <Router> component.`);let{navigator:r}=v(G),{matches:i}=v(K),a=i[i.length-1],o=a?a.params:{},s=a?a.pathname:`/`,c=a?a.pathnameBase:`/`,l=a&&a.route;{let e=l&&l.path||``;go(s,!l||e.endsWith(`*`)||e.endsWith(`*?`),`You rendered descendant <Routes> (or called \`useRoutes()\`) at "${s}" (under <Route path="${e}">) but the parent route path has no trailing "*". This means if you navigate deeper, the parent won't match anymore and therefore the child routes will never render.
3
+
4
+ Please change the parent <Route path="${e}"> to <Route path="${e===`/`?`*`:`${e}/*`}">.`)}let u=q(),d;if(t){let e=typeof t==`string`?Mi(t):t;U(c===`/`||e.pathname?.startsWith(c),`When overriding the location using \`<Routes location>\` or \`useRoutes(routes, location)\`, the location pathname must begin with the portion of the URL pathname that was matched by all parent routes. The current pathname base is "${c}" but pathname "${e.pathname}" was given in the \`location\` prop.`),d=e}else d=u;let f=d.pathname||`/`,p=f;if(c!==`/`){let e=c.replace(/^\//,``).split(`/`);p=`/`+f.replace(/^\//,``).split(`/`).slice(e.length).join(`/`)}let m=n&&n.state.matches.length?n.state.matches.map(e=>Object.assign(e,{route:n.manifest[e.route.id]||e.route})):Fi(e,{pathname:p});W(l||m!=null,`No routes matched location "${d.pathname}${d.search}${d.hash}" `),W(m==null||m[m.length-1].route.element!==void 0||m[m.length-1].route.Component!==void 0||m[m.length-1].route.lazy!==void 0,`Matched leaf route at location "${d.pathname}${d.search}${d.hash}" does not have an element or Component. This means it will render an <Outlet /> with a null value by default resulting in an "empty" page.`);let h=ro(m&&m.map(e=>Object.assign({},e,{params:Object.assign({},o,e.params),pathname:ua([c,r.encodeLocation?r.encodeLocation(e.pathname.replace(/%/g,`%25`).replace(/\?/g,`%3F`).replace(/#/g,`%23`)).pathname:e.pathname]),pathnameBase:e.pathnameBase===`/`?c:ua([c,r.encodeLocation?r.encodeLocation(e.pathnameBase.replace(/%/g,`%25`).replace(/\?/g,`%3F`).replace(/#/g,`%23`)).pathname:e.pathnameBase])})),i,n);return t&&h?A(ja.Provider,{value:{location:{pathname:`/`,search:``,hash:``,state:null,key:`default`,mask:void 0,...d},navigationType:`POP`}},h):h}function Za(){let e=po(),t=ga(e)?`${e.status} ${e.statusText}`:e instanceof Error?e.message:JSON.stringify(e),n=e instanceof Error?e.stack:null,r=`rgba(200,200,200, 0.5)`,i={padding:`0.5rem`,backgroundColor:r},a={padding:`2px 4px`,backgroundColor:r},o=null;return console.error(`Error handled by React Router default ErrorBoundary:`,e),o=A(b,null,A(`p`,null,`💿 Hey developer 👋`),A(`p`,null,`You can provide a way better UX than this when your app throws errors by providing your own `,A(`code`,{style:a},`ErrorBoundary`),` or`,` `,A(`code`,{style:a},`errorElement`),` prop on your route.`)),A(b,null,A(`h2`,null,`Unexpected Application Error!`),A(`h3`,{style:{fontStyle:`italic`}},t),n?A(`pre`,{style:i},n):null,o)}var Qa=A(Za,null),$a=class extends _{constructor(e){super(e),this.state={location:e.location,revalidation:e.revalidation,error:e.error}}static getDerivedStateFromError(e){return{error:e}}static getDerivedStateFromProps(e,t){return t.location!==e.location||t.revalidation!==`idle`&&e.revalidation===`idle`?{error:e.error,location:e.location,revalidation:e.revalidation}:{error:e.error===void 0?t.error:e.error,location:t.location,revalidation:e.revalidation||t.revalidation}}componentDidCatch(e,t){this.props.onError?this.props.onError(e,t):console.error(`React Router caught the following error during render`,e)}render(){let e=this.state.error;if(this.context&&typeof e==`object`&&e&&`digest`in e&&typeof e.digest==`string`){let t=La(e.digest);t&&(e=t)}let t=e===void 0?this.props.children:A(K.Provider,{value:this.props.routeContext},A(Ma.Provider,{value:e,children:this.props.component}));return this.context?A(to,{error:e},t):t}};$a.contextType=Ea;var eo=new WeakMap;function to({children:e,error:t}){let{basename:n}=v(G);if(typeof t==`object`&&t&&`digest`in t&&typeof t.digest==`string`){let e=Ia(t.digest);if(e){let r=eo.get(t);if(r)throw r;let i=ya(e.location,n),a=i.absoluteURL||i.to;if(Ca(a))throw Error(`Invalid redirect location`);if(va&&!eo.get(t))if(i.isExternal||e.reloadDocument)window.location.href=a;else{let n=Promise.resolve().then(()=>window.__reactRouterDataRouter.navigate(i.to,{replace:e.replace}));throw eo.set(t,n),n}return A(`meta`,{httpEquiv:`refresh`,content:`0;url=${a}`})}}return e}function no({routeContext:e,match:t,children:n}){let r=v(wa);return r&&r.static&&r.staticContext&&(t.route.errorElement||t.route.ErrorBoundary)&&(r.staticContext._deepestRenderedBoundaryId=t.route.id),A(K.Provider,{value:e},n)}function ro(e,t=[],n){let r=n?.state;if(e==null){if(!r)return null;if(r.errors)e=r.matches;else if(t.length===0&&!r.initialized&&r.matches.length>0)e=r.matches;else return null}let i=e,a=r?.errors;if(a!=null){let e=i.findIndex(e=>e.route.id&&a?.[e.route.id]!==void 0);U(e>=0,`Could not find a matching route for errors on route IDs: ${Object.keys(a).join(`,`)}`),i=i.slice(0,Math.min(i.length,e+1))}let o=!1,s=-1;if(n&&r){o=r.renderFallback;for(let e=0;e<i.length;e++){let t=i[e];if((t.route.HydrateFallback||t.route.hydrateFallbackElement)&&(s=e),t.route.id){let{loaderData:e,errors:a}=r,c=t.route.loader&&!e.hasOwnProperty(t.route.id)&&(!a||a[t.route.id]===void 0);if(t.route.lazy||c){n.isStatic&&(o=!0),i=s>=0?i.slice(0,s+1):[i[0]];break}}}}let c=n?.onError,l=r&&c?(e,t)=>{c(e,{location:r.location,params:r.matches?.[0]?.params??{},pattern:_a(r.matches),errorInfo:t})}:void 0;return i.reduceRight((e,n,c)=>{let u,d=!1,f=null,p=null;r&&(u=a&&n.route.id?a[n.route.id]:void 0,f=n.route.errorElement||Qa,o&&(s<0&&c===0?(go(`route-fallback`,!1,"No `HydrateFallback` element provided to render during initial hydration"),d=!0,p=null):s===c&&(d=!0,p=n.route.hydrateFallbackElement||null)));let m=t.concat(i.slice(0,c+1)),h=()=>{let t;return t=u?f:d?p:n.route.Component?A(n.route.Component,null):n.route.element?n.route.element:e,A(no,{match:n,routeContext:{outlet:e,matches:m,isDataRoute:r!=null},children:t})};return r&&(n.route.ErrorBoundary||n.route.errorElement||c===0)?A($a,{location:r.location,revalidation:r.revalidation,component:f,error:u,children:h(),routeContext:{outlet:null,matches:m,isDataRoute:!0},onError:l}):h()},null)}function io(e){return`${e} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function ao(e){let t=v(wa);return U(t,io(e)),t}function oo(e){let t=v(Ta);return U(t,io(e)),t}function so(e){let t=v(K);return U(t,io(e)),t}function co(e){let t=so(e),n=t.matches[t.matches.length-1];return U(n.route.id,`${e} can only be used on routes that contain a unique "id"`),n.route.id}function lo(){return co(`useRouteId`)}function uo(){let e=oo(`useNavigation`);return d(()=>{let{matches:t,historyAction:n,...r}=e.navigation;return r},[e.navigation])}function fo(){let{matches:e,loaderData:t}=oo(`useMatches`);return d(()=>e.map(e=>Li(e,t)),[e,t])}function po(){let e=v(Ma),t=oo(`useRouteError`),n=co(`useRouteError`);return e===void 0?t.errors?.[n]:e}function mo(){let{router:e}=ao(`useNavigate`),t=co(`useNavigate`),n=M(!1);return Ha(()=>{n.current=!0}),p(async(r,i={})=>{W(n.current,Va),n.current&&(typeof r==`number`?await e.navigate(r):await e.navigate(r,{fromRouteId:t,...i}))},[e,t])}var ho={};function go(e,t,n){!t&&!ho[e]&&(ho[e]=!0,W(!1,n))}h(_o);function _o({routes:e,manifest:t,future:n,state:r,isStatic:i,onError:a}){return Xa(e,void 0,{manifest:t,state:r,isStatic:i,onError:a,future:n})}function J({to:e,replace:t,state:n,relative:r}){U(za(),`<Navigate> may be used only in the context of a <Router> component.`);let{static:i}=v(G);W(!i,`<Navigate> must not be used on the initial render in a <StaticRouter>. This is a no-op, but you should modify your code so the <Navigate> is only ever rendered in response to some user interaction or state change.`);let{matches:a}=v(K),{pathname:o}=q(),c=Ua(),l=ca(e,sa(a),o,r===`path`),u=JSON.stringify(l);return s(()=>{c(JSON.parse(u),{replace:t,state:n,relative:r})},[c,u,r,t,n]),null}function Y(e){U(!1,`A <Route> is only ever to be used as the child of <Routes> element, never rendered directly. Please wrap your <Route> in a <Routes>.`)}function vo({basename:e=`/`,children:t=null,location:n,navigationType:r=`POP`,navigator:i,static:a=!1,useTransitions:o}){U(!za(),`You cannot render a <Router> inside another <Router>. You should never have more than one in your app.`);let s=e.replace(/^\/*/,`/`),c=d(()=>({basename:s,navigator:i,static:a,useTransitions:o,future:{}}),[s,i,a,o]);typeof n==`string`&&(n=Mi(n));let{pathname:l=`/`,search:u=``,hash:f=``,state:p=null,key:m=`default`,mask:h}=n,g=d(()=>{let e=na(l,s);return e==null?null:{location:{pathname:e,search:u,hash:f,state:p,key:m,mask:h},navigationType:r}},[s,l,u,f,p,m,r,h]);return W(g!=null,`<Router basename="${s}"> is not able to match the URL "${l}${u}${f}" because it does not start with the basename, so the <Router> won't render anything.`),g==null?null:A(G.Provider,{value:c},A(ja.Provider,{children:t,value:g}))}function yo({children:e,location:t}){return Ya(bo(e),t)}function bo(e,t=[]){let n=[];return l.forEach(e,(e,r)=>{if(!k(e))return;let i=[...t,r];if(e.type===b){n.push.apply(n,bo(e.props.children,i));return}U(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>`),U(!e.props.index||!e.props.children,`An index route cannot have child routes.`);let a={id:e.props.id||i.join(`-`),caseSensitive:e.props.caseSensitive,element:e.props.element,Component:e.props.Component,index:e.props.index,path:e.props.path,middleware:e.props.middleware,loader:e.props.loader,action:e.props.action,hydrateFallbackElement:e.props.hydrateFallbackElement,HydrateFallback:e.props.HydrateFallback,errorElement:e.props.errorElement,ErrorBoundary:e.props.ErrorBoundary,hasErrorBoundary:e.props.hasErrorBoundary===!0||e.props.ErrorBoundary!=null||e.props.errorElement!=null,shouldRevalidate:e.props.shouldRevalidate,handle:e.props.handle,lazy:e.props.lazy};e.props.children&&(a.children=bo(e.props.children,i)),n.push(a)}),n}var xo=`get`,So=`application/x-www-form-urlencoded`;function Co(e){return typeof HTMLElement<`u`&&e instanceof HTMLElement}function wo(e){return Co(e)&&e.tagName.toLowerCase()===`button`}function To(e){return Co(e)&&e.tagName.toLowerCase()===`form`}function Eo(e){return Co(e)&&e.tagName.toLowerCase()===`input`}function Do(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}function Oo(e,t){return e.button===0&&(!t||t===`_self`)&&!Do(e)}function ko(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 Ao(e,t){let n=ko(e);return t&&t.forEach((e,r)=>{n.has(r)||t.getAll(r).forEach(e=>{n.append(r,e)})}),n}var jo=null;function Mo(){if(jo===null)try{new FormData(document.createElement(`form`),0),jo=!1}catch{jo=!0}return jo}var No=new Set([`application/x-www-form-urlencoded`,`multipart/form-data`,`text/plain`]);function Po(e){return e!=null&&!No.has(e)?(W(!1,`"${e}" is not a valid \`encType\` for \`<Form>\`/\`<fetcher.Form>\` and will default to "${So}"`),null):e}function Fo(e,t){let n,r,i,a,o;if(To(e)){let o=e.getAttribute(`action`);r=o?na(o,t):null,n=e.getAttribute(`method`)||xo,i=Po(e.getAttribute(`enctype`))||So,a=new FormData(e)}else if(wo(e)||Eo(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`)||xo,i=Po(e.getAttribute(`formenctype`))||Po(o.getAttribute(`enctype`))||So,a=new FormData(o,e),!Mo()){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(Co(e))throw Error(`Cannot submit element that is not <form>, <button>, or <input type="submit|image">`);else n=xo,r=null,i=So,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 Io={"&":`\\u0026`,">":`\\u003e`,"<":`\\u003c`,"\u2028":`\\u2028`,"\u2029":`\\u2029`},Lo=/[&><\u2028\u2029]/g;function Ro(e){return e.replace(Lo,e=>Io[e])}function zo(e,t){if(e===!1||e==null)throw Error(t)}function Bo(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=`${da(t)}/_root.${r}`:i.pathname=`${da(i.pathname)}.${r}`,i}async function Vo(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 Ho(e){return e!=null&&typeof e.page==`string`}function Uo(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 Wo(e,t,n){return Yo((await Promise.all(e.map(async e=>{let r=t.routes[e.route.id];if(r){let e=await Vo(r,n);return e.links?e.links():[]}return[]}))).flat(1).filter(Uo).filter(e=>e.rel===`stylesheet`||e.rel===`preload`).map(e=>e.rel===`stylesheet`?{...e,rel:`prefetch`,as:`style`}:{...e,rel:`prefetch`}))}function Go(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 Ko(e,t,{includeHydrateFallback:n}={}){return qo(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 qo(e){return[...new Set(e)]}function Jo(e){let t={},n=Object.keys(e).sort();for(let r of n)t[r]=e[r];return t}function Yo(e,t){let n=new Set,r=new Set(t);return e.reduce((e,i)=>{if(t&&!Ho(i)&&i.as===`script`&&i.href&&r.has(i.href))return e;let a=JSON.stringify(Jo(i));return n.has(a)||(n.add(a),e.push({key:a,link:i})),e},[])}function Xo(){let e=v(wa);return zo(e,`You must render this element inside a <DataRouterContext.Provider> element`),e}function Zo(){let e=v(Ta);return zo(e,`You must render this element inside a <DataRouterStateContext.Provider> element`),e}var Qo=g(void 0);Qo.displayName=`FrameworkContext`;function $o(){let e=v(Qo);return zo(e,`You must render this element inside a <HydratedRouter> element`),e}function es(e,t){let n=v(Qo),[r,i]=f(!1),[a,o]=f(!1),{onFocus:c,onBlur:l,onMouseEnter:u,onMouseLeave:d,onTouchStart:p}=t,m=M(null);s(()=>{if(e===`render`&&o(!0),e===`viewport`){let e=new IntersectionObserver(e=>{e.forEach(e=>{o(e.isIntersecting)})},{threshold:.5});return m.current&&e.observe(m.current),()=>{e.disconnect()}}},[e]),s(()=>{if(r){let e=setTimeout(()=>{o(!0)},100);return()=>{clearTimeout(e)}}},[r]);let h=()=>{i(!0)},g=()=>{i(!1),o(!1)};return n?e===`intent`?[a,m,{onFocus:ts(c,h),onBlur:ts(l,g),onMouseEnter:ts(u,h),onMouseLeave:ts(d,g),onTouchStart:ts(p,h)}]:[a,m,{}]:[!1,m,{}]}function ts(e,t){return n=>{e&&e(n),n.defaultPrevented||t(n)}}function ns({page:e,...t}){let n=Da(),{nonce:r}=$o(),{router:i}=Xo(),a=d(()=>Fi(i.routes,e,i.basename),[i.routes,e,i.basename]);return a?(t.nonce==null&&r&&(t={...t,nonce:r}),A(n?is:as,{page:e,matches:a,...t})):null}function rs(e){let{manifest:t,routeModules:n}=$o(),[r,i]=f([]);return s(()=>{let r=!1;return Wo(e,t,n).then(e=>{r||i(e)}),()=>{r=!0}},[e,t,n]),r}function is({page:e,matches:t,...n}){let r=q(),{future:i}=$o(),{basename:a}=Xo();return A(b,null,d(()=>{if(e===r.pathname+r.search+r.hash)return[];let n=Bo(e,a,i.v8_trailingSlashAwareDataRequests,`rsc`),o=!1,s=[];for(let e of t)typeof e.route.shouldRevalidate==`function`?o=!0:s.push(e.route.id);return o&&s.length>0&&n.searchParams.set(`_routes`,s.join(`,`)),[n.pathname+n.search]},[a,i.v8_trailingSlashAwareDataRequests,e,r,t]).map(e=>A(`link`,{key:e,rel:`prefetch`,as:`fetch`,href:e,...n})))}function as({page:e,matches:t,...n}){let r=q(),{future:i,manifest:a,routeModules:o}=$o(),{basename:s}=Xo(),{loaderData:c,matches:l}=Zo(),u=d(()=>Go(e,t,l,a,r,`data`),[e,t,l,a,r]),f=d(()=>Go(e,t,l,a,r,`assets`),[e,t,l,a,r]),p=d(()=>{if(e===r.pathname+r.search+r.hash)return[];let n=new Set,l=!1;if(t.forEach(e=>{let t=a.routes[e.route.id];!t||!t.hasLoader||(!u.some(t=>t.route.id===e.route.id)&&e.route.id in c&&o[e.route.id]?.shouldRevalidate||t.hasClientLoader?l=!0:n.add(e.route.id))}),n.size===0)return[];let d=Bo(e,s,i.v8_trailingSlashAwareDataRequests,`data`);return l&&n.size>0&&d.searchParams.set(`_routes`,t.filter(e=>n.has(e.route.id)).map(e=>e.route.id).join(`,`)),[d.pathname+d.search]},[s,i.v8_trailingSlashAwareDataRequests,c,r,a,u,t,e,o]),m=d(()=>Ko(f,a),[f,a]),h=rs(f);return A(b,null,p.map(e=>A(`link`,{key:e,rel:`prefetch`,as:`fetch`,href:e,...n})),m.map(e=>A(`link`,{key:e,rel:`modulepreload`,href:e,...n})),h.map(({key:e,link:t})=>A(`link`,{key:e,nonce:n.nonce,...t,crossOrigin:t.crossOrigin??n.crossOrigin})))}function os(...e){return t=>{e.forEach(e=>{typeof e==`function`?e(t):e!=null&&(e.current=t)})}}var ss=typeof window<`u`&&window.document!==void 0&&window.document.createElement!==void 0;try{ss&&(window.__reactRouterVersion=`7.18.0`)}catch{}function cs({basename:e,children:t,useTransitions:n,window:r}){let i=M();i.current??=Di({window:r,v5Compat:!0});let a=i.current,[o,s]=f({action:a.action,location:a.location}),c=p(e=>{n===!1?s(e):u(()=>s(e))},[n]);return x(()=>a.listen(c),[a,c]),A(vo,{basename:e,children:t,location:o.location,navigationType:o.action,navigator:a,useTransitions:n})}function ls({basename:e,children:t,history:n,useTransitions:r}){let[i,a]=f({action:n.action,location:n.location}),o=p(e=>{r===!1?a(e):u(()=>a(e))},[r]);return x(()=>n.listen(o),[n,o]),A(vo,{basename:e,children:t,location:i.location,navigationType:i.action,navigator:n,useTransitions:r})}ls.displayName=`unstable_HistoryRouter`;var us=o(function({onClick:e,discover:t=`render`,prefetch:n=`none`,relative:r,reloadDocument:i,replace:a,mask:o,state:s,target:c,to:l,preventScrollReset:u,viewTransition:d,defaultShouldRevalidate:f,...p},m){let{basename:h,navigator:g,useTransitions:_}=v(G),y=typeof l==`string`&&Si.test(l),x=ya(l,h);l=x.to;let S=Ra(l,{relative:r}),C=q(),w=null;if(o){let e=ca(o,[],C.mask?C.mask.pathname:`/`,!0);h!==`/`&&(e.pathname=e.pathname===`/`?h:ua([h,e.pathname])),w=g.createHref(e)}let[T,E,D]=es(n,p),O=_s(l,{replace:a,mask:o,state:s,target:c,preventScrollReset:u,relative:r,viewTransition:d,defaultShouldRevalidate:f,useTransitions:_});function k(t){e&&e(t),t.defaultPrevented||O(t)}let j=!(x.isExternal||i),M=A(`a`,{...p,...D,href:(j?w:void 0)||x.absoluteURL||S,onClick:j?k:e,ref:os(m,E),target:c,"data-discover":!y&&t===`render`?`true`:void 0});return T&&!y?A(b,null,M,A(ns,{page:S})):M});us.displayName=`Link`;var ds=o(function({"aria-current":e=`page`,caseSensitive:t=!1,className:n=``,end:r=!1,style:i,to:a,viewTransition:o,children:s,...c},l){let u=Ja(a,{relative:c.relative}),d=q(),f=v(Ta),{navigator:p,basename:m}=v(G),h=f!=null&&Os(u)&&o===!0,g=p.encodeLocation?p.encodeLocation(u).pathname:u.pathname,_=d.pathname,y=f&&f.navigation&&f.navigation.location?f.navigation.location.pathname:null;t||(_=_.toLowerCase(),y=y?y.toLowerCase():null,g=g.toLowerCase()),y&&m&&(y=na(y,m)||y);let b=g!==`/`&&g.endsWith(`/`)?g.length-1:g.length,x=_===g||!r&&_.startsWith(g)&&_.charAt(b)===`/`,S=y!=null&&(y===g||!r&&y.startsWith(g)&&y.charAt(g.length)===`/`),C={isActive:x,isPending:S,isTransitioning:h},w=x?e:void 0,T;T=typeof n==`function`?n(C):[n,x?`active`:null,S?`pending`:null,h?`transitioning`:null].filter(Boolean).join(` `);let E=typeof i==`function`?i(C):i;return A(us,{...c,"aria-current":w,className:T,ref:l,style:E,to:a,viewTransition:o},typeof s==`function`?s(C):s)});ds.displayName=`NavLink`;var fs=o(({discover:e=`render`,fetcherKey:t,navigate:n,reloadDocument:r,replace:i,state:a,method:o=xo,action:s,onSubmit:c,relative:l,preventScrollReset:d,viewTransition:f,defaultShouldRevalidate:p,...m},h)=>{let{useTransitions:g}=v(G),_=xs(),y=Ss(s,{relative:l}),b=o.toLowerCase()===`get`?`get`:`post`,x=typeof s==`string`&&Si.test(s);return A(`form`,{ref:h,method:b,action:y,onSubmit:r?c:e=>{if(c&&c(e),e.defaultPrevented)return;e.preventDefault();let r=e.nativeEvent.submitter,s=r?.getAttribute(`formmethod`)||o,m=()=>_(r||e.currentTarget,{fetcherKey:t,method:s,navigate:n,replace:i,state:a,relative:l,preventScrollReset:d,viewTransition:f,defaultShouldRevalidate:p});g&&n!==!1?u(()=>m()):m()},...m,"data-discover":!x&&e===`render`?`true`:void 0})});fs.displayName=`Form`;function ps({getKey:e,storageKey:t,...n}){let r=v(Qo),{basename:i}=v(G),a=q(),o=fo();Es({getKey:e,storageKey:t});let s=d(()=>{if(!r||!e)return null;let t=Ts(a,o,i,e);return t===a.key?null:t},[]);if(!r||r.isSpaMode)return null;let c=((e,t)=>{if(!window.history.state||!window.history.state.key){let e=Math.random().toString(32).slice(2);window.history.replaceState({key:e},``)}try{let n=JSON.parse(sessionStorage.getItem(e)||`{}`)[t||window.history.state.key];typeof n==`number`&&window.scrollTo(0,n)}catch(t){console.error(t),sessionStorage.removeItem(e)}}).toString();return n.nonce==null&&r?.nonce&&(n.nonce=r.nonce),A(`script`,{...n,suppressHydrationWarning:!0,dangerouslySetInnerHTML:{__html:`(${c})(${Ro(JSON.stringify(t||Cs))}, ${Ro(JSON.stringify(s))})`}})}ps.displayName=`ScrollRestoration`;function ms(e){return`${e} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function hs(e){let t=v(wa);return U(t,ms(e)),t}function gs(e){let t=v(Ta);return U(t,ms(e)),t}function _s(e,{target:t,replace:n,mask:r,state:i,preventScrollReset:a,relative:o,viewTransition:s,defaultShouldRevalidate:c,useTransitions:l}={}){let d=Ua(),f=q(),m=Ja(e,{relative:o});return p(p=>{if(Oo(p,t)){p.preventDefault();let t=n===void 0?ji(f)===ji(m):n,h=()=>d(e,{replace:t,mask:r,state:i,preventScrollReset:a,relative:o,viewTransition:s,defaultShouldRevalidate:c});l?u(()=>h()):h()}},[f,d,m,n,r,i,t,e,a,o,s,c,l])}function vs(e){W(typeof URLSearchParams<`u`,"You cannot use the `useSearchParams` hook in a browser that does not support the URLSearchParams API. If you need to support Internet Explorer 11, we recommend you load a polyfill such as https://github.com/ungap/url-search-params.");let t=M(ko(e)),n=M(!1),r=q(),i=d(()=>Ao(r.search,n.current?null:t.current),[r.search]),a=Ua();return[i,p((e,t)=>{let r=ko(typeof e==`function`?e(new URLSearchParams(i)):e);n.current=!0,a(`?`+r,t)},[a,i])]}var ys=0,bs=()=>`__${String(++ys)}__`;function xs(){let{router:e}=hs(`useSubmit`),{basename:t}=v(G),n=lo(),r=e.fetch,i=e.navigate;return p(async(e,a={})=>{let{action:o,method:s,encType:c,formData:l,body:u}=Fo(e,t);a.navigate===!1?await r(a.fetcherKey||bs(),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 Ss(e,{relative:t}={}){let{basename:n}=v(G),r=v(K);U(r,`useFormAction must be used inside a RouteContext`);let[i]=r.matches.slice(-1),a={...Ja(e||`.`,{relative:t})},o=q();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:ua([n,a.pathname])),ji(a)}var Cs=`react-router-scroll-positions`,ws={};function Ts(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 Es({getKey:e,storageKey:t}={}){let{router:n}=hs(`useScrollRestoration`),{restoreScrollPosition:r,preventScrollReset:i}=gs(`useScrollRestoration`),{basename:a}=v(G),o=q(),c=fo(),l=uo();s(()=>(window.history.scrollRestoration=`manual`,()=>{window.history.scrollRestoration=`auto`}),[]),Ds(p(()=>{if(l.state===`idle`){let t=Ts(o,c,a,e);ws[t]=window.scrollY}try{sessionStorage.setItem(t||Cs,JSON.stringify(ws))}catch(e){W(!1,`Failed to save scroll positions in sessionStorage, <ScrollRestoration /> will not work properly (${e}).`)}window.history.scrollRestoration=`auto`},[l.state,e,a,o,c,t])),typeof document<`u`&&(x(()=>{try{let e=sessionStorage.getItem(t||Cs);e&&(ws=JSON.parse(e))}catch{}},[t]),x(()=>{let t=n?.enableScrollRestoration(ws,()=>window.scrollY,e?(t,n)=>Ts(t,n,a,e):void 0);return()=>t&&t()},[n,a,e]),x(()=>{if(r!==!1){if(typeof r==`number`){window.scrollTo(0,r);return}try{if(o.hash){let e=document.getElementById(decodeURIComponent(o.hash.slice(1)));if(e){e.scrollIntoView();return}}}catch{W(!1,`"${o.hash.slice(1)}" is not a decodable element ID. The view will not scroll to it.`)}i!==!0&&window.scrollTo(0,0)}},[o,r,i]))}function Ds(e,t){let{capture:n}=t||{};s(()=>{let t=n==null?void 0:{capture:n};return window.addEventListener(`pagehide`,e,t),()=>{window.removeEventListener(`pagehide`,e,t)}},[e,n])}function Os(e,{relative:t}={}){let n=v(Oa);U(n!=null,"`useViewTransitionState` must be used within `react-router-dom`'s `RouterProvider`. Did you accidentally import `RouterProvider` from `react-router`?");let{basename:r}=hs(`useViewTransitionState`),i=Ja(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 ks=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}}))()),As=/\s([^'"/\s><]+?)[\s/>]|([^\s=]+)=\s?(".*?"|'.*?')/g;function js(e){var t={type:`tag`,name:``,voidElement:!1,attrs:{},children:[]},n=e.match(/<\/?([^\s]+?)[/\s>]/);if(n&&(t.name=n[1],(ks.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(As),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 Ms=/<[a-zA-Z0-9\-\!\/](?:"[^"]*"|'[^']*'|[^'">])*>/g,Ns=/^\s*$/,Ps=Object.create(null);function Fs(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(Fs,``)+`</`+t.name+`>`;case`comment`:return e+`<!--`+t.comment+`-->`}}var Is={parse:function(e,t){t||={},t.components||=Ps;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(Ms,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=js(s);return a<0?(r.push(m),r):((l=i[a]).children.push(m),r)}if(u&&(a++,(n=js(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);Ns.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+Fs(``,t)},``)}};a();var Ls=(e,t)=>{if(!e)return!1;let n=e.props?.children??e.children;return t?n.length>0:!!n},Rs=e=>{if(!e)return[];let t=e.props?.children??e.children;return e.props?.i18nIsDynamicList?Bs(t):t},zs=e=>Array.isArray(e)&&e.every(k),Bs=e=>Array.isArray(e)?e:[e],Vs=(e,t)=>{let n={...t};return n.props={...t.props,...e.props},n},Hs=e=>{let t={};if(!e)return t;let n=e=>{Bs(e).forEach(e=>{pi(e)||(Ls(e)?n(Rs(e)):vi(e)&&!k(e)&&Object.assign(t,e))})};return n(e),t},Us=(e,t,n,r)=>{if(!e)return``;let i=``,a=Bs(e),o=t?.transSupportBasicHtmlNodes?t.transKeepBasicHtmlNodesFor??[]:[];return a.forEach((e,a)=>{if(pi(e)){i+=`${e}`;return}if(k(e)){let{props:s,type:c}=e,l=Object.keys(s).length,u=o.indexOf(c)>-1,d=s.children;if(!d&&u&&!l){i+=`<${c}/>`;return}if(!d&&(!u||l)||s.i18nIsDynamicList){i+=`<${a}></${a}>`;return}if(u&&l<=1){let e=pi(d)?d:Us(d,t,n,r);i+=`<${c}>${e}</${c}>`;return}let f=Us(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},Ws=(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},Gs=(e,t,n,r,i,a,o)=>{if(n===``)return[];let s=i.transKeepBasicHtmlNodesFor||[],u=n&&new RegExp(s.map(e=>`<${e}`).join(`|`)).test(n);if(!e&&!t&&!u&&!o)return[n];let d=t??{},f=e=>{Bs(e).forEach(e=>{pi(e)||(Ls(e)?f(Rs(e)):vi(e)&&!k(e)&&Object.assign(d,e))})};f(e);let p=Ws(n,s,d),m=Is.parse(`<0>${p}</0>`),h={...d,...a},g=(e,t,n)=>{let r=Rs(e),i=v(r,t.children,n);return zs(r)&&i.length===0||e.props?.i18nIsDynamicList?r:i},_=(e,t,n,r,i)=>{e.dummy?(e.children=t,n.push(c(e,{key:r},i?void 0:t))):n.push(...l.map([e],e=>{if(e.type===b||e.props?.i18nIsDynamicList!==void 0){let n={key:r};return e&&e.props&&Object.keys(e.props).forEach(t=>{t===`children`||t===`i18nIsDynamicList`||(n[t]=e.props[t])}),A(e.type,n,i?null:t)}let n={key:r};return e&&e.props&&Object.keys(e.props).forEach(t=>{t===`ref`||t===`children`||(n[t]=e.props[t])}),c(e,n,i?null:t)}))},v=(e,n,a)=>{let c=Bs(e),l=Bs(n),d={};return l.reduce((e,n,l)=>{let f=n.children?.[0]?.content&&r.services.interpolator.interpolate(n.children[0].content,h,r.language);if(n.type===`tag`){let p=c[parseInt(n.name,10)];!p&&t&&(p=t[n.name]),a.length===1&&!p&&(p=a[0][n.name]),p||={};let m={...n.attrs};o&&Object.keys(m).forEach(e=>{let t=m[e];pi(t)&&(m[e]=_i(t))});let y=Object.keys(m).length===0?p:Vs({props:m},p),b=k(y),x=b&&Ls(n,!0)&&!n.voidElement,S=u&&vi(y)&&y.dummy&&!b,C=vi(t)&&Object.hasOwnProperty.call(t,n.name);if(pi(y)){let t=r.services.interpolator.interpolate(y,h,r.language);e.push(t)}else if(Ls(y)||x)_(y,g(y,n,a),e,l);else if(S)_(y,v(c,n.children,a),e,l);else if(Number.isNaN(parseFloat(n.name)))if(C)_(y,g(y,n,a),e,l,n.voidElement);else if(i.transSupportBasicHtmlNodes&&s.indexOf(n.name)>-1)if(n.voidElement)e.push(A(n.name,{key:`${n.name}-${l}`}));else{let t=d[n.name]||0;d[n.name]=t+1;let r,i=0;for(let e=0;e<c.length;e+=1){let a=c[e];if(k(a)&&a.type===n.name){if(i===t){r=a;break}i+=1}}let o=v(r?Bs(Rs(r)):c,n.children,a);e.push(A(n.name,{key:`${n.name}-${l}`},o))}else if(n.voidElement)e.push(`<${n.name} />`);else{let t=v(c,n.children,a);e.push(`<${n.name}>${t}</${n.name}>`)}else if(vi(y)&&!b){let t=n.children[0]?f:null;t&&e.push(t)}else _(y,f,e,l,n.children.length!==1||!f)}else if(n.type===`text`){let t=i.transWrapTextNodes,a=typeof i.unescape==`function`?i.unescape:fi().unescape,s=o?a(r.services.interpolator.interpolate(n.content,h,r.language)):r.services.interpolator.interpolate(n.content,h,r.language);t?e.push(A(t,{key:`${n.name}-${l}`},s)):e.push(s)}return e},[])};return Rs(v([{dummy:!0,children:e||[]}],m,Bs(e||[]))[0])},Ks=(e,t,n)=>{let r=e.key||t,i=c(e,{key:r});if(!i.props||!i.props.children||n.indexOf(`${t}/>`)<0&&n.indexOf(`${t} />`)<0)return i;function a(){return A(b,null,i)}return A(a,{key:r})},qs=(e,t)=>e.map((e,n)=>Ks(e,n,t)),Js=(e,t)=>{let n={};return Object.keys(e).forEach(r=>{Object.assign(n,{[r]:Ks(e[r],r,t)})}),n},Ys=(e,t,n,r)=>e?Array.isArray(e)?qs(e,t):vi(e)?Js(e,t):(yi(n,`TRANS_INVALID_COMPONENTS`,`<Trans /> "components" prop expects an object or array`,{i18nKey:r}),null):null,Xs=e=>!vi(e)||Array.isArray(e)?!1:Object.keys(e).reduce((e,t)=>e&&Number.isNaN(Number.parseFloat(t)),!0);function Zs({children:e,count:t,parent:n,i18nKey:r,context:i,tOptions:a={},values:o,defaults:s,components:c,ns:l,i18n:u,t:d,shouldUnescape:f,...p}){let m=u||mi();if(!m)return yi(m,`NO_I18NEXT_INSTANCE`,`Trans: You need to pass in an i18next instance using i18nextReactModule`,{i18nKey:r}),e;let h=d||m.t.bind(m)||(e=>e),g={...fi(),...m.options?.react},_=l||h.ns||m.options?.defaultNS;_=pi(_)?[_]:_||[`translation`];let{transDefaultProps:v}=g,y=v?.tOptions?{...v.tOptions,...a}:a,b=f??v?.shouldUnescape,x=v?.values?{...v.values,...o}:o,S=v?.components?{...v.components,...c}:c,C=Us(e,g,m,r),w=s||y?.defaultValue||C||g.transEmptyNodeValue||(typeof r==`function`?di(r):r),{hashTransKey:T}=g,E=r||(T?T(C||w):C||w);o=m.options?.interpolation?.defaultVariables?x&&Object.keys(x).length>0?{...x,...m.options.interpolation.defaultVariables}:{...m.options.interpolation.defaultVariables}:x;let D=Hs(e);D&&typeof D.count==`number`&&t===void 0&&(t=D.count);let O=o||t!==void 0&&!m.options?.interpolation?.alwaysFormat||!e?y.interpolation:{interpolation:{...y.interpolation,prefix:`#$?`,suffix:`?$#`}},k={...y,context:i||y.context,count:t,...o,...O,defaultValue:w,ns:_},j=E?h(E,k):w;j===E&&w&&(j=w);let M=Ys(S,j,m,r),N=M||e,P=null;Xs(M)&&(P=M,N=e);let F=Gs(N,P,j,m,g,k,b),I=n??g.defaultTransParent;return I?A(I,p,F):F}a();function Qs({children:e,count:t,parent:n,i18nKey:r,context:i,tOptions:a={},values:o,defaults:s,components:c,ns:l,i18n:u,t:d,shouldUnescape:f,...p}){let{i18n:m,defaultNS:h}=v(gi)||{},g=u||m||mi(),_=d||g?.t.bind(g);return Zs({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 $s(e,t){return t.map(t=>({subject:{kind:`device`,deviceId:e},key:t.key,scope:t.scope}))}function ec({deviceId:e}){let{t}=H(),{presence:n,list:r}=zr(e);return n===`absent`?null:n===`unknown`?P(xr,{message:t(`deviceQuickDetail.historyUnknown`,`Could not tell whether this device has recorded history.`)}):n===`pending`||r.status===`pending`?P(ii,{className:`h-24 w-full`,"aria-busy":`true`}):r.status===`error`?P(xr,{title:t(`deviceQuickDetail.historyUnknown`,`Could not tell whether this device has recorded history.`),message:r.error}):r.data.length===0?null:y(`section`,{className:`flex flex-col gap-2`,"aria-label":t(`deviceQuickDetail.tabHistory`,`History`),children:[P(`div`,{className:`flex justify-end`,children:P(us,{to:ri($s(e,r.data)),className:`text-xs text-primary hover:underline`,children:t(`deviceQuickDetail.openHistory`,`Open full history`)})}),P(kr,{deviceId:e})]})}function tc(e,t){return e===`present`&&t.status===`ok`&&(t.data?.length??0)>0}var nc={streaming:{icon:vn,labelKey:`capabilityBadges.streaming`},detection:{icon:pe,labelKey:`capabilityBadges.detection`},recording:{icon:ke,labelKey:`capabilityBadges.recording`},audio:{icon:ye,labelKey:`capabilityBadges.audio`},snapshot:{icon:L,labelKey:`capabilityBadges.snapshot`},motion:{icon:Ze,labelKey:`capabilityBadges.motion`},ptz:{icon:Xe,labelKey:`capabilityBadges.ptz`},webrtc:{icon:et,labelKey:`capabilityBadges.webrtc`},onvif:{icon:we,labelKey:`capabilityBadges.onvif`},analytics:{icon:be,labelKey:`capabilityBadges.analytics`},"battery-operated":{icon:_e,labelKey:`capabilityBadges.battery`},"native-snapshot":{icon:L,labelKey:`capabilityBadges.nativeSnapshot`},"pan-tilt-zoom":{icon:Xe,labelKey:`capabilityBadges.ptz`},"two-way-audio":{icon:ye,labelKey:`capabilityBadges.twoWayAudio`},"doorbell-button":{icon:se,labelKey:`capabilityBadges.doorbell`},rebootable:{icon:Ee,labelKey:`capabilityBadges.rebootable`},"vacuum-has-map":{icon:mn,labelKey:`capabilityBadges.map`},"vacuum-has-ai":{icon:Se,labelKey:`capabilityBadges.aiObstacle`},"mower-has-map":{icon:mn,labelKey:`capabilityBadges.map`},"mower-has-targeted-mowing":{icon:ne,labelKey:`capabilityBadges.targetedMowing`}},rc=Fe;function ic({capabilities:e,showLabels:t=!1}){let{t:n}=H();return P(`div`,{className:`flex items-center gap-1 flex-wrap`,children:e.map(e=>{let r=nc[e],i=r?.icon??rc,a=r?n(r.labelKey):e;return y(`span`,{className:`inline-flex items-center gap-1 rounded-md bg-surface-hover px-1.5 py-0.5 text-[10px] text-foreground-subtle`,title:a,children:[P(i,{className:`h-3 w-3`}),t&&P(`span`,{children:a})]},e)})})}a();var ac={amcrest:{icon:fn,color:`#3b82f6`,label:`Amcrest`},hikvision:{icon:De,color:`#a855f7`,label:`Hikvision`},reolink:{icon:et,color:`#06b6d4`,label:`Reolink`},homeassistant:{icon:Qe,color:`#22d3ee`,label:`Home Assistant`},rtsp:{icon:Ne,color:`#78716c`,label:`RTSP`},onvif:{icon:Ne,color:`#78716c`,label:`ONVIF`}},oc={sm:`h-4 w-4`,md:`h-5 w-5`,lg:`h-6 w-6`},sc={sm:`h-7 w-7`,md:`h-8 w-8`,lg:`h-10 w-10`};function cc(e){let t=e.toLowerCase();return t.startsWith(`provider-`)?t.slice(9):t}function lc(e){return ac[cc(e)]??{icon:fn,color:`#78716c`,label:e}}function uc({type:e,size:t=`md`,showLabel:n}){let r=lc(e),i=r.icon,[a,o]=f(!1),s=bi(e);return y(`div`,{className:`flex items-center gap-2`,children:[P(`div`,{className:`flex items-center justify-center rounded-lg ${sc[t]}`,style:{backgroundColor:`${r.color}15`},children:a||!s?P(i,{className:oc[t],style:{color:r.color}}):P(`img`,{src:s,alt:r.label,className:oc[t],onError:()=>o(!0)})}),n&&P(`span`,{className:`text-xs font-medium text-foreground-subtle`,children:r.label})]})}function X({label:e,value:t,layout:n=`inline`}){return n===`stacked`?y(`div`,{className:`min-w-0 flex flex-col gap-0.5 px-0.5`,children:[P(`span`,{className:`text-[11px] text-foreground-subtle`,children:e}),P(`div`,{className:`min-w-0 text-[11px] text-foreground`,children:t})]}):y(`div`,{className:`${he} flex items-start gap-2 sm:gap-3`,children:[P(`span`,{className:`w-20 sm:w-28 flex-shrink-0 text-[11px] text-foreground-subtle`,children:e}),P(`div`,{className:`flex-1 min-w-0 text-[11px] text-foreground`,children:t})]})}function dc(e,t,n){return e===null||e.name===e.baseName&&e.location===e.baseLocation||e.name===t&&e.location===n?{name:t,location:n,baseName:t,baseLocation:n}:e}function fc(e){return e===null?!1:e.name!==e.baseName||e.location!==e.baseLocation}function pc(e){return e.name.trim().length===0?`name`:null}function mc(e){let t=e.map(e=>e.error).filter(e=>e!==null&&e.length>0);return{dirty:e.some(e=>e.dirty),saving:e.some(e=>e.saving),error:t.length===0?null:t.join(`; `)}}a();var hc=g(null);function gc(){return v(hc)}function _c({deviceId:e,deviceName:t,deviceLocation:n,deviceReady:r,onClose:i,children:a}){let[o,s]=f(null),[c,l]=f([]),u=M(new Map);if(r){let e=dc(o,t,n);(o===null||e.name!==o.name||e.location!==o.location||e.baseName!==o.baseName||e.baseLocation!==o.baseLocation)&&s(e)}let m=p(e=>(u.current.set(e.id,{save:e.save,discard:e.discard}),l(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:()=>u.current.get(e.id)?.save()??Promise.resolve(),discard:()=>{u.current.get(e.id)?.discard()}}]}),()=>{u.current.delete(e.id),l(t=>t.filter(t=>t.id!==e.id))}),[]),h=d(()=>({identity:o,setIdentityName:e=>{s(t=>t===null?t:{...t,name:e})},setIdentityLocation:e=>{s(t=>t===null?t:{...t,location:e})},register:m}),[o,m]);return P(hc.Provider,{value:h,children:P(vc,{deviceId:e,identity:o,contributions:c,onIdentitySaved:e=>s(e),onClose:i,children:a})})}function vc({deviceId:e,identity:t,contributions:n,onIdentitySaved:r,onClose:i,children:a}){return y(E,{children:[a,P(bc,{deviceId:e,identity:t,contributions:n,onIdentitySaved:r,onClose:i})]})}function yc(e){return e instanceof Error?e.message:String(e)}function bc({deviceId:e,identity:t,contributions:n,onIdentitySaved:r,onClose:i}){let{t:a}=H(),o=Ua(),s=Gn(),c=j(),[l,u]=f(null),[d,p]=f(!1),m=ni(),h=hr(),g=mc([{dirty:fc(t),saving:d,error:l},...n]),_=()=>{c.invalidateQueries({queryKey:[[`deviceManager`]]})};return y(`div`,{className:`sticky bottom-0 z-10 mt-3 flex flex-col gap-2 border-t border-border bg-background px-1 pt-3`,children:[g.error!==null&&P(`p`,{className:`text-xs text-danger`,children:g.error}),y(`div`,{className:`flex flex-wrap items-center justify-between gap-2`,children:[P(Mn,{type:`button`,variant:`outline`,size:`sm`,onClick:()=>{(async()=>{g.dirty&&!await s({title:a(`deviceQuickDetail.leaveTitle`,`Discard unsaved changes?`),message:a(`deviceQuickDetail.leaveMessage`,`Unsaved edits on this device will be discarded.`),confirmLabel:a(`deviceQuickDetail.discard`,`Discard`),variant:`warning`})||(o(`/devices/${String(e)}`),i())})()},children:a(`deviceQuickDetail.openFull`,`Open full detail`)}),y(`div`,{className:`flex items-center gap-2`,children:[P(Mn,{type:`button`,variant:`outline`,size:`sm`,onClick:()=>{t!==null&&r({...t,name:t.baseName,location:t.baseLocation});for(let e of n)e.discard();u(null)},disabled:!g.dirty||g.saving,children:a(`deviceQuickDetail.discard`,`Discard`)}),P(Mn,{type:`button`,size:`sm`,onClick:()=>{if(t!==null&&fc(t)&&pc(t)===`name`){u(a(`deviceQuickDetail.nameRequired`,`Name is required`));return}u(null),p(!0),(async()=>{try{if(t!==null&&t.name!==t.baseName&&await m.mutateAsync({deviceId:e,name:t.name.trim()}),t!==null&&t.location!==t.baseLocation){let n=t.location.trim();await h.mutateAsync({deviceId:e,location:n===``?null:n})}if(t!==null){let e=t.name.trim(),n=t.location.trim();r({name:e,location:n,baseName:e,baseLocation:n})}for(let e of n)e.dirty&&await e.save();_()}catch(e){u(yc(e))}finally{p(!1)}})()},disabled:!g.dirty||g.saving,children:g.saving?a(`deviceQuickDetail.saving`,`Saving…`):a(`deviceQuickDetail.save`,`Save`)})]})]})]})}a();function xc({deviceId:e,initialName:t,label:n=`Name`,layout:r=`inline`,onError:i,onSaved:a,onCancel:o,bound:c}){let{t:l}=H(),u=j(),[d,p]=f(!1),[m,h]=f(t),[g,_]=f(!1),v=M(null);s(()=>{d||h(t)},[t,d]),s(()=>{d&&v.current?.focus()},[d]);let b=ni({onSuccess:()=>{u.invalidateQueries({queryKey:[[`deviceManager`,`getDevice`]]}),u.invalidateQueries({queryKey:[[`deviceManager`,`listAll`]]}),u.invalidateQueries({queryKey:[[`deviceManager`,`getDeviceAggregate`]]})}}),x=async()=>{let n=m.trim();if(n.length===0||n===t){p(!1),h(t),a?.();return}_(!0);try{await b.mutateAsync({deviceId:e,name:n}),p(!1),a?.()}catch(e){i?.(e instanceof Error?e.message:String(e))}finally{_(!1)}},S=()=>{h(t),p(!1),o?.()};return c===void 0?d?P(X,{label:n,layout:r,value:y(`div`,{className:`flex items-center gap-1`,children:[P(`input`,{ref:v,type:`text`,value:m,onChange:e=>h(e.target.value),onKeyDown:e=>{e.key===`Enter`?x():e.key===`Escape`&&S()},disabled:g,className:`flex-1 min-w-0 px-1.5 py-0.5 text-[11px] bg-background border border-border rounded focus:outline-none focus:border-primary`}),P(`button`,{type:`button`,onClick:()=>void x(),disabled:g,className:`p-0.5 rounded hover:bg-success/10 text-success disabled:opacity-50`,"aria-label":l(`inlineEdit.save`),children:P(me,{className:`h-3 w-3`})}),P(`button`,{type:`button`,onClick:S,disabled:g,className:`p-0.5 rounded hover:bg-danger/10 text-danger disabled:opacity-50`,"aria-label":l(`inlineEdit.cancel`),children:P(Oe,{className:`h-3 w-3`})})]})}):P(X,{label:n,layout:r,value:y(`div`,{className:`flex items-center gap-2 group`,children:[P(`span`,{className:`truncate`,children:t}),P(`button`,{type:`button`,onClick:()=>p(!0),className:`p-0.5 rounded text-foreground-subtle hover:text-foreground hover:bg-surface-hover transition-colors`,"aria-label":l(`inlineEdit.editName`),children:P(re,{className:`h-3.5 w-3.5`})})]})}):P(X,{label:n,layout:r,value:P(`input`,{type:`text`,value:c.value,"aria-label":n,onChange:e=>c.onChange(e.target.value),className:`flex-1 min-w-0 w-full px-1.5 py-0.5 text-[11px] bg-background border border-border rounded focus:outline-none focus:border-primary`})})}a();function Sc({deviceId:e,initialLocation:t,label:n=`Location`,layout:r=`inline`,onError:i,onSaved:a,onCancel:o,bound:c}){let{t:l}=H(),u=j(),[p,m]=f(!1),[h,g]=f(t??``),[_,v]=f(!1),b=M(null),{data:x}=gr(void 0,{enabled:p||c!==void 0}),S=x??[];s(()=>{p||g(t??``)},[t,p]),s(()=>{p&&b.current?.focus()},[p]);let C=hr({onSuccess:()=>{u.invalidateQueries({queryKey:[[`deviceManager`,`getDevice`]]}),u.invalidateQueries({queryKey:[[`deviceManager`,`listAll`]]}),u.invalidateQueries({queryKey:[[`deviceManager`,`getDeviceAggregate`]]}),u.invalidateQueries({queryKey:[[`deviceManager`,`listLocations`]]})}}),w=d(()=>{let e=h.trim().toLowerCase();return e.length===0?S:S.filter(t=>t.toLowerCase()!==e&&t.toLowerCase().includes(e))},[S,h]),T=h.trim().length>0&&!S.some(e=>e.toLowerCase()===h.trim().toLowerCase()),E=async n=>{let r=(n??h).trim(),o=r.length===0?null:r;if(o===(t??null)){m(!1),a?.();return}v(!0);try{await C.mutateAsync({deviceId:e,location:o}),m(!1),a?.()}catch(e){i?.(e instanceof Error?e.message:String(e))}finally{v(!1)}},D=()=>{g(t??``),m(!1),o?.()};if(c!==void 0){let e=c.value.trim().toLowerCase(),t=e.length===0?[]:S.filter(t=>t.toLowerCase()!==e&&t.toLowerCase().includes(e));return P(X,{label:n,layout:r,value:y(`div`,{className:`relative`,children:[P(`input`,{type:`text`,value:c.value,"aria-label":n,onChange:e=>c.onChange(e.target.value),placeholder:l(`shared.locationRow.roomAreaOrLeaveEmpty`,`Room / area (or leave empty to clear)`),className:`flex-1 min-w-0 w-full px-1.5 py-0.5 text-[11px] bg-background border border-border rounded focus:outline-none focus:border-primary`}),t.length>0&&P(`div`,{className:`absolute z-10 left-0 right-0 mt-0.5 max-h-40 overflow-y-auto rounded-md border border-border bg-surface shadow-md`,children:t.map(e=>y(`button`,{type:`button`,onClick:()=>c.onChange(e),className:`w-full flex items-center gap-2 px-2 py-1 text-left text-[11px] hover:bg-surface-hover`,children:[P(Ye,{className:`h-3 w-3 text-foreground-subtle flex-shrink-0`}),P(`span`,{className:`truncate`,children:e})]},e))})]})})}return p?P(X,{label:n,layout:r,value:y(`div`,{className:`relative`,children:[y(`div`,{className:`flex items-center gap-1`,children:[P(`input`,{ref:b,type:`text`,value:h,onChange:e=>g(e.target.value),onKeyDown:e=>{e.key===`Enter`?E():e.key===`Escape`&&D()},disabled:_,placeholder:l(`shared.locationRow.roomAreaOrLeaveEmpty`,`Room / area (or leave empty to clear)`),className:`flex-1 min-w-0 px-1.5 py-0.5 text-[11px] bg-background border border-border rounded focus:outline-none focus:border-primary`}),P(`button`,{type:`button`,onClick:()=>void E(),disabled:_,className:`p-0.5 rounded hover:bg-success/10 text-success disabled:opacity-50`,"aria-label":l(`inlineEdit.save`),children:P(me,{className:`h-3 w-3`})}),P(`button`,{type:`button`,onClick:D,disabled:_,className:`p-0.5 rounded hover:bg-danger/10 text-danger disabled:opacity-50`,"aria-label":l(`inlineEdit.cancel`),children:P(Oe,{className:`h-3 w-3`})})]}),(w.length>0||T)&&y(`div`,{className:`absolute z-10 left-0 right-0 mt-0.5 max-h-40 overflow-y-auto rounded-md border border-border bg-surface shadow-md`,children:[w.map(e=>y(`button`,{type:`button`,onClick:()=>{g(e),E(e)},className:`w-full flex items-center gap-2 px-2 py-1 text-left text-[11px] hover:bg-surface-hover`,children:[P(Ye,{className:`h-3 w-3 text-foreground-subtle flex-shrink-0`}),P(`span`,{className:`truncate`,children:e})]},e)),T&&y(`button`,{type:`button`,onClick:()=>void E(),className:`w-full flex items-center gap-2 px-2 py-1 text-left text-[11px] hover:bg-surface-hover border-t border-border`,children:[P(`span`,{className:`text-foreground-subtle`,children:l(`shared.locationRow.create`,`Create`)}),y(`span`,{className:`font-medium truncate`,children:[`"`,h.trim(),`"`]})]})]})]})}):P(X,{label:n,layout:r,value:y(`div`,{className:`flex items-center gap-2 group`,children:[t?P(`span`,{className:`truncate`,children:t}):P(`span`,{className:`italic text-foreground-subtle`,children:l(`common.unset`)}),P(`button`,{type:`button`,onClick:()=>m(!0),className:`p-0.5 rounded text-foreground-subtle hover:text-foreground hover:bg-surface-hover transition-colors`,"aria-label":l(`inlineEdit.editLocation`),children:P(re,{className:`h-3.5 w-3.5`})})]})})}a();function Cc(e){return Zr({addonId:e,projection:`slim`})}function wc(e){return fr({deviceId:e},{enabled:Number.isFinite(e)})}var Tc=3e4,Ec=2e3;function Dc(e){let t=M(0);return t.current===0&&(t.current=Date.now()),lr({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>=Tc?!1:Ec}})}a();function Oc({deviceId:e}){let{t}=H(),n=j(),{data:r}=wc(e),{data:i}=Dc(e),[a,o]=f(null),s=rr({onSuccess:()=>{o(null),n.invalidateQueries({queryKey:[[`deviceManager`]]})},onError:e=>{o(`Could not change primary child: ${e.message}`)}});if(r==null||String(r.type??``)!==Yt.Container)return null;let c=(i??[]).map(e=>({id:e.id,stableId:e.stableId,type:e.type,name:e.name,...e.sourceInfo?{sourceInfo:{id:e.sourceInfo.id}}:{}}));if(c.length<=1)return null;let l=Pn(c,typeof r.linkDeviceId==`number`?r.linkDeviceId:null,typeof r.primaryChildEntityId==`string`?r.primaryChildEntityId:null),u=l===null?c[0].id:l.id;return y(E,{children:[P(X,{label:t(`shared.primaryChildRow.primaryChild`,`Primary child`),value:P(Tn,{childrenList:c,selectedId:u,onSetPrimary:t=>s.mutate({deviceId:e,primaryChildEntityId:t}),disabled:s.isPending})}),a!==null&&P(`p`,{role:`alert`,className:`px-3 sm:px-4 py-1.5 text-[11px] text-danger`,children:a})]})}a();var kc=[`manufacturer`,`model`,`hardware`,`firmware`,`serialNumber`,`uid`,`mac`,`itemNo`];function Ac(e){return e.replace(/([a-z])([A-Z])/g,`$1 $2`).replace(/^./,e=>e.toUpperCase())}function jc(e){return e==null?`—`:typeof e==`string`||typeof e==`number`||typeof e==`boolean`?String(e):JSON.stringify(e)}function Mc(){let{t:e}=H(),t=Or(),n=wn(),{data:r}=fr({deviceId:t??0},{enabled:t!==null}),{data:i}=Ln({deviceId:t??0},{enabled:t!==null}),a=r??n??null,[o,s]=f(`identity`),c=gc(),l=c?.identity??null;if(t===null||!a)return null;let u=String(a.stableId??``),d=String(a.name??``),p=String(a.type??``),m=String(a.addonId??``),h=a.features??[],g=new Set([`device-status`,`feature-probe`,`device-ops`]),_=(i?.entries??[]).filter(e=>e.kind===`native`&&!g.has(e.capName)).map(e=>e.capName),v=h.length>0?h:_,b=a.location??null,x=a.metadata??null,S=x!==null&&Object.keys(x).length>0;return y(`div`,{className:`rounded-lg border border-border bg-surface overflow-hidden`,children:[y(`div`,{className:`border-b border-border px-3 sm:px-4 py-2 flex items-center justify-between gap-3`,children:[P(`h2`,{className:`text-[11px] font-semibold text-foreground uppercase tracking-wider`,children:e(`overviewAdapters.deviceInfoAdapter.deviceInfo`,`Device Info`)}),S&&y(`div`,{className:`flex items-center gap-1 rounded-md bg-surface-hover p-0.5`,children:[P(Nc,{active:o===`identity`,onClick:()=>s(`identity`),label:e(`overviewAdapters.deviceInfoAdapter.identity`,`Identity`)}),P(Nc,{active:o===`hardware`,onClick:()=>s(`hardware`),label:e(`overviewAdapters.deviceInfoAdapter.hardware`,`Hardware`)})]})]}),(!S||o===`identity`)&&y(`div`,{className:`divide-y divide-border`,children:[P(X,{label:`ID`,value:y(`span`,{className:`font-mono text-[11px] text-foreground`,children:[`#${t}`,y(`span`,{className:`ml-1.5 text-foreground-subtle`,children:[`(`,u,`)`]})]})}),P(xc,{deviceId:t,initialName:d,...l!==null&&c!==null?{bound:{value:l.name,onChange:c.setIdentityName}}:{}}),P(Sc,{deviceId:t,initialLocation:b,...l!==null&&c!==null?{bound:{value:l.location,onChange:c.setIdentityLocation}}:{}}),P(Oc,{deviceId:t}),P(X,{label:e(`overviewAdapters.deviceInfoAdapter.type`,`Type`),value:p}),P(X,{label:e(`overviewAdapters.deviceInfoAdapter.provider`,`Provider`),value:P(uc,{type:m,size:`sm`,showLabel:!0})}),P(X,{label:e(`overviewAdapters.deviceInfoAdapter.capabilities`,`Capabilities`),value:v.length>0?P(ic,{capabilities:v,showLabels:!0}):P(`span`,{className:`text-[11px] text-foreground-subtle`,children:e(`overviewAdapters.deviceInfoAdapter.none`,`None`)})})]}),S&&o===`hardware`&&P(Pc,{metadata:x})]})}function Nc({active:e,onClick:t,label:n}){return P(`button`,{type:`button`,onClick:t,className:`px-2 py-0.5 rounded text-[10px] font-medium transition-colors ${e?`bg-surface text-foreground shadow-sm`:`text-foreground-subtle hover:text-foreground`}`,children:n})}function Pc({metadata:e}){let{t}=H(),n=kc.filter(t=>t in e),r=Object.keys(e).filter(e=>!kc.includes(e)).toSorted(),i=[...n,...r];return y(`div`,{children:[P(`div`,{className:`px-3 sm:px-4 py-1.5 text-[10px] text-foreground-subtle border-b border-border bg-surface-subtle/40`,children:t(`overviewAdapters.deviceInfoAdapter.autoPopulatedByTheDriver`,`Auto-populated by the driver on every connect. Read-only.`)}),P(`div`,{className:`divide-y divide-border`,children:i.map(t=>P(X,{label:Ac(t),value:P(`span`,{className:`font-mono text-[11px] text-foreground break-all`,children:jc(e[t])})},t))})]})}function Fc(e){return e.hubReachable?e.authOk===!1?{kind:`auth-expired`}:{kind:`cluster-degraded`,offlineAgents:e.offlineAgents,offlineAgentIds:e.offlineAgentIds}:{kind:`hub-unreachable`}}function Ic(e){switch(e.kind){case`connected`:return null;case`reconnecting`:return{severity:`warning`,message:V.t(`connection.reconnecting`),i18nKey:`connection.reconnecting`,showSpinner:!0};case`cluster-degraded`:{let t=e.offlineAgentIds??[];return t.length>0?{severity:`warning`,message:V.t(`connection.degradedNodes`,{nodes:t.join(`, `),count:t.length}),i18nKey:`connection.degradedNodes`,i18nParams:{nodes:t.join(`, `),count:t.length},showSpinner:!0}:e.offlineAgents!==null&&e.offlineAgents>0?{severity:`warning`,message:V.t(`connection.degradedCount`,{count:e.offlineAgents}),i18nKey:`connection.degradedCount`,i18nParams:{count:e.offlineAgents},showSpinner:!0}:{severity:`warning`,message:V.t(`connection.degraded`),i18nKey:`connection.degraded`,showSpinner:!0}}case`hub-unreachable`:return{severity:`danger`,message:V.t(`connection.disconnected`),i18nKey:`connection.disconnected`,showSpinner:!0};case`auth-expired`:return{severity:`danger`,message:V.t(`connection.sessionExpired`),i18nKey:`connection.sessionExpired`,showSpinner:!1,action:`sign-in`}}}var Lc=4e3,Rc=5e3;function zc(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 Bc(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 Vc(e){let t=e.fetchFn??fetch,n=e.timeoutMs??Lc,r=e.origin.replace(/\/+$/,``),i;try{i=await Bc(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 Bc(t,`${r}/health/details`,n,{Authorization:`Bearer ${o}`});e.ok&&(a=await e.json())}catch{}let s;try{s=zc(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 Bc(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 Hc={kind:`connected`},Uc={kind:`reconnecting`};function Wc(e){let t=e.probeIntervalMs??Rc,n=new Set,r=Hc,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(Fc(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(Hc);return}if(e===`connecting`){c(),s(Uc);return}(r.kind===`connected`||r.kind===`reconnecting`)&&s(Uc),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 Gc=null;function Kc(){return Gc===null&&(Gc=Wc({probe:()=>Vc({origin:xe(),getToken:()=>localStorage.getItem(`camstack_admin_token`)})})),Gc}function qc(e){Kc().onSdkConnectionState(e)}var Jc=null,Yc=0;function Z(){if(!Jc){let e=Yc;Jc=Ur({serverUrl:xe(),token:localStorage.getItem(`camstack_admin_token`)??void 0,getLanguage:()=>V.language,refreshCredential:async e=>{e===`rejected`?await fl().refreshNow():await fl().ensureFresh()},onConnectionChange:t=>{e===Yc&&qc(t)}})}return Jc}function Xc(){let e=Jc;Jc=null,Yc+=1,e?.close()}var Zc=`camstack_admin_token`,Qc=`camstack_admin_refresh`,$c=`camstack_admin_token_expires`;function el(e){try{let t=localStorage.getItem(e);return t!==null&&t.length>0?t:null}catch{return null}}function tl(e,t){try{t===null?localStorage.removeItem(e):localStorage.setItem(e,t)}catch{}}function nl(){let e=el(Zc);if(e===null)return null;let t=el(Qc),n=Number(el($c));return{token:e,...t===null?{}:{refreshToken:t},...Number.isFinite(n)&&n>0?{expiresAt:n}:{}}}function rl(e){tl(Zc,e.token),tl(Qc,e.refreshToken??null),tl($c,e.expiresAt===void 0?null:String(e.expiresAt))}function il(){tl(Zc,null),tl(Qc,null),tl($c,null)}function al(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 ol(e){await fetch(B(`/api/auth/session`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({token:e})}).catch(()=>{})}var sl=new Set;function cl(e){return sl.add(e),()=>sl.delete(e)}var ll=new Set;function ul(e){return ll.add(e),()=>ll.delete(e)}var dl=null;function fl(){return dl===null&&(dl=new Cr({refresh:async e=>{let t=nl();if(t?.refreshToken!==void 0&&t.refreshToken!==e&&(t.expiresAt??0)>Date.now()+6e4)return t;let n=await Z().refreshSession(e);return{token:n.token,refreshToken:n.refreshToken,expiresAt:n.expiresAt}},onTokens:e=>{rl(e),Z().setToken(e.token),ol(e.token);for(let e of ll)e()},onExpired:()=>{il();for(let e of sl)e()}})),dl}function pl(e){rl(e),fl().adopt(e)}async function ml(e){try{await fl().ensureFresh()}catch(e){console.warn(`[admin-session] pre-reconnect refresh failed; reconnecting anyway`,e)}e()}async function hl(){return await fl().refreshNow()!==null}var gl=512;function _l(e){if(!e||e.length>gl)return null;let t=Kt(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 vl=/^[A-Za-z0-9_-]{43,128}$/,yl=/^[A-Za-z0-9._~-]{1,256}$/;function bl(e){let{codeChallenge:t,state:n}=e;return!t||!vl.test(t)||(e.codeChallengeMethod??`S256`)!==`S256`||!n||!yl.test(n)?null:{codeChallenge:t,state:n,purpose:e.purpose===`step-up`?`step-up`:`new-session`}}var xl=`camstack:login-app-handoff`;function Sl(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 bl({codeChallenge:n(`codeChallenge`),state:n(`state`),purpose:n(`purpose`)})}catch{return null}}function Cl(e,t=Date.now()){e!==null&&Fl(xl,JSON.stringify(e),Sl,t)}function wl(e=Date.now()){return Il(xl,Sl,e)}function Tl(e,t,n){return`${e}?${`code=${encodeURIComponent(t)}`}${n===void 0?``:`&state=${encodeURIComponent(n)}`}`}function El(e,t=Date.now()){return zl(t)??_l(e)}var Dl=2048;function Ol(e){return!e||e.length>Dl||!e.startsWith(`/`)||e.startsWith(`//`)||e.includes(`\\`)||e.includes(`://`)||e.includes(`..`)||e===`/login`||e.startsWith(`/login?`)||e.startsWith(`/login/`)?null:e}function kl(e,t=Date.now()){Fl(Nl,e,Ol,t)}function Al(e=Date.now()){return Il(Nl,Ol,e)}function jl(e,t=Date.now()){return Al(t)??Ol(e)}var Ml=`camstack:login-redirect`,Nl=`camstack:login-next`,Pl=10*6e4;function Fl(e,t,n,r){let i=Ll();if(!i||!n(t))return;let a={raw:t??``,at:r};try{i.setItem(e,JSON.stringify(a))}catch{}}function Il(e,t,n){let r=Ll();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>Pl?null:t(a)}catch{return null}}function Ll(){if(typeof window>`u`)return null;try{return window.sessionStorage}catch{return null}}function Rl(e,t=Date.now()){Fl(Ml,e,_l,t)}function zl(e=Date.now()){return Il(Ml,_l,e)}var Bl=`changeme`;function Vl(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:Hl(n.scopes)}}catch{return null}}function Hl(e){return Wt(Pt(e))}function Ul(e){let t=Vl(e);return t?t.exp*1e3<Date.now():!0}a();var Wl=Bl;function Gl(e){return{token:e.token,...e.refreshToken===void 0?{}:{refreshToken:e.refreshToken},...e.expiresAt===void 0?{}:{expiresAt:e.expiresAt}}}async function Kl(e,t){if(await ol(e),t.kind===`path`){window.location.replace(B(t.path));return}try{Xc();let e=wl();if(e===null)throw Error(`The app sent no PKCE challenge and state`);let{code:n}=await Z().trpcClient.auth.createHandoffCode.mutate({purpose:e.purpose,codeChallenge:e.codeChallenge,state:e.state});window.location.replace(Tl(t.url,n,e.state))}catch{window.location.replace(B(`/`))}}async function ql(e,t){await ol(e),window.location.replace(B(t))}var Jl=g(null);function Yl({children:e}){let[t,n]=f(null),[r,i]=f(!0),[a,o]=f(!1);s(()=>{if(typeof window<`u`&&window.location.hash.startsWith(`#token=`)){let e=new URLSearchParams(window.location.hash.slice(1)),t=al(e),n=t?.token??null;if(t!==null&&n!==null){pl(t);let r=zl();if(r){Kl(n,r);return}let i=Al()??Ol(e.get(`next`));if(i){ql(n,i);return}window.history.replaceState({},``,B(`/`))}}c()},[]);let c=async()=>{let e=nl();if(e===null){i(!1);return}let t=e.token;if(e.refreshToken!==void 0){let n=fl();n.adopt(e),await n.ensureFresh();let r=nl();if(r===null){console.warn(`[auth] session restore: signed out — the hub refused the refresh token`),Xc(),i(!1);return}t=r.token}if(Ul(t)){console.warn(`[auth] session restore: signed out — access token expired and no refresh recovered it`),il(),Xc(),i(!1);return}let r=Vl(t);if(!r){console.warn(`[auth] session restore: signed out — the stored access token is unreadable`),il(),Xc(),i(!1);return}ol(t);let a=Z();a.trpcClient.system.info.query().then(()=>n(r)).catch(async e=>{let t=e?.data?.code;if(t===`UNAUTHORIZED`||t===`FORBIDDEN`){if(await hl()){a.reconnect();try{await Z().trpcClient.system.info.query();let e=nl();n(e&&Vl(e.token)||r);return}catch{}}console.warn(`[auth] session restore: logout, probe UNAUTHORIZED and refresh did not recover it`),fl().stop(),il(),Xc()}else n(r)}).finally(()=>i(!1))};s(()=>cl(()=>{Xc(),n(null),o(!1)}),[]);let l=p(async(e,t)=>{let r=await Z().login(e,t,{refreshable:!0}),i=r.secondFactors??(r.requiresTotp===!0?[`totp`]:[]);if(i.length>0)return{kind:`second-factor`,challengeToken:r.token,factors:i};let a=r.token;return pl(Gl(r)),await ol(a),Xc(),n(Vl(a)),o(t===Wl),{kind:`ok`}},[]),u=p(async(e,t)=>{let r=await Z().loginVerifyTotp(e,t,{refreshable:!0}),i=r.token;pl(Gl(r)),await ol(i),Xc(),n(Vl(i)),o(!1)},[]),d=p(async(e,t)=>{pl({token:e,...t}),await ol(e),Xc(),n(Vl(e)),o(!1)},[]),m=p(()=>{Z().logout().catch(()=>{}),fl().stop(),il(),fetch(B(`/api/auth/session`),{method:`DELETE`}).catch(()=>{}),Xc(),n(null),o(!1)},[]),h=p(()=>{o(!1)},[]);return P(Jl.Provider,{value:{user:t,loading:r,mustChangePassword:a,login:l,verifyTotp:u,finalizePasskeyLogin:d,logout:m,clearMustChangePassword:h},children:e})}function Xl(){let e=v(Jl);if(!e)throw Error(`useAuth must be used within AuthProvider`);return e}a();function Zl(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 Ql({schema:e,serverValues:t,onImmediateSave:n,onDeferredSave:r}){let[i,a]=f({}),[o,c]=f({}),[l,u]=f(!1),m=M(null),h=e?.sections??[],g=Object.keys(i).length>0,_=d(()=>({...t,...o,...i}),[t,o,i]);s(()=>{if(g||Object.keys(o).length>0){u(!0);return}m.current&&clearTimeout(m.current),m.current=setTimeout(()=>u(!1),500)},[g,o]),s(()=>()=>{m.current&&clearTimeout(m.current)},[]);let v=p(()=>{u(!0),m.current&&clearTimeout(m.current),m.current=setTimeout(()=>u(!1),2e3)},[]),y=p(e=>{v();let r={},o={},s={...t,...i};for(let[t,n]of Object.entries(e))s[t]!==n&&(Zl(h,t)?r[t]=n:o[t]=n);Object.keys(r).length>0&&n(r),a(e=>{let t={...e};for(let e of Object.keys(r))delete t[e];for(let[e,n]of Object.entries(o))t[e]=n;return t})},[v,t,i,h,n]),b=p(e=>{let t={},n={};for(let[r,a]of Object.entries(i))e.includes(r)?t[r]=a:n[r]=a;if(a(n),Object.keys(t).length===0)return;let o=Object.keys(t),s=r(t);if(s===void 0||typeof s.then!=`function`)return;c(e=>({...e,...t}));let l=()=>c(e=>{let t={...e};for(let e of o)delete t[e];return t});s.then(l,()=>{l(),a(e=>{let n={...e};for(let e of o)e in n||(n[e]=t[e]);return n})})},[i,r]),x=p(e=>{a(t=>{let n={...t};for(let t of e)delete n[t];return n})},[]),S=p(()=>{a({})},[]);return{values:_,pendingKeys:Object.keys(i),hasPendingEdits:g,editingPaused:l,handleChange:y,handleSave:b,handleDiscard:x,resetAll:S}}function Q(e){return t=>Object.prototype.hasOwnProperty.call(e,t)}var $l=Q({devices:!0}),eu=Q({classes:!0,classesExclude:!0,labelEquals:!0,identities:!0,identitiesExclude:!0,eventTypeTokens:!0,sensorKinds:!0}),tu=Q({minConfidence:!0,minImportance:!0,minLabelConfidence:!0}),nu=Q({minDwellSeconds:!0}),ru=Q({source:!0}),iu=Q({crossing:!0}),au=Q({packagePhase:!0}),ou=Q({sensorTransition:!0}),su=Q({plates:!0}),cu=Q({occupancy:!0}),lu=Q({audio:!0}),uu=Q({systemEvent:!0}),du=Q({deviceState:!0}),fu=Q({scene:!0});function pu(e,t){let n=e[t];return Array.isArray(n)?n:[]}function mu(e,t){let n=e[t];return typeof n==`number`?n:void 0}a();function hu(e,t){let n=ze().trpcClient,r=O({queries:e.map(e=>({queryKey:[[`nc-pickers`,`zones`],{deviceId:e}],staleTime:3e4,queryFn:async()=>({deviceId:e,zones:(await n.zones.listZones.query({deviceId:e})).map(e=>({id:e.id,name:e.name}))})}))});return d(()=>{let e=[],n=new Set;for(let i of r){if(!i.data)continue;let r=t.find(e=>e.id===i.data.deviceId)?.name;for(let t of i.data.zones)n.has(t.id)||(n.add(t.id),e.push({value:t.id,label:t.name,...r===void 0?{}:{hint:r}}))}return{options:e,loading:r.some(e=>e.isLoading),failed:r.some(e=>e.isError)}},[r,t])}function gu(e){let t=ze().trpcClient,n=O({queries:e.map(e=>({queryKey:[[`nc-pickers`,`event-kinds`],{deviceId:e}],staleTime:6e4,queryFn:async()=>(await t.pipelineAnalytics.listEventKinds.query({deviceId:e})).map(e=>({kind:e.kind,label:e.label}))}))});return d(()=>{let e=new Map;for(let t of n)for(let n of t.data??[])e.has(n.kind)||e.set(n.kind,n.label);let t=[...e.entries()].map(([e,t])=>({value:e,label:t}));return t.sort((e,t)=>e.label.localeCompare(t.label)),{options:t,loading:n.some(e=>e.isLoading)}},[n])}function _u(){let e=Fn();return d(()=>({options:(e.data??[]).map(e=>({value:e.id,label:e.name})),loading:e.isLoading,failed:e.isError===!0}),[e.data,e.isLoading,e.isError])}function vu(){let e=qr({limit:200}),t=Ar();return d(()=>{let n=new Set;for(let e of t.data??[])e.name.trim().length>0&&n.add(e.name);let r=new Set;for(let t of e.data??[])t.text.trim().length>0&&r.add(t.text);return[...[...n].sort(),...[...r].sort()]},[e.data,t.data])}function yu({options:e,value:t,onChange:n,loading:r,emptyHint:i,placeholder:a,noFreeText:o=!1}){let{t:s}=H(),[c,l]=f(``),u=d(()=>new Set(e.map(e=>e.value)),[e]),p=d(()=>new Set(t),[t]),m=t.filter(e=>!u.has(e)),h=e=>{n(p.has(e)?t.filter(t=>t!==e):[...t,e])},g=()=>{let e=c.trim();e.length===0||t.includes(e)||(n([...t,e]),l(``))};return y(`div`,{className:`mt-1 space-y-1.5`,children:[m.length>0&&P(`div`,{className:`flex flex-wrap gap-1`,children:m.map(e=>y(`button`,{type:`button`,onClick:()=>n(t.filter(t=>t!==e)),className:`inline-flex items-center gap-1 rounded border border-border px-1.5 py-0.5 text-[10px] text-foreground hover:bg-surface-hover`,title:s(`system.notificationRulePickers.customValueClickToRemove`,`Custom value — click to remove`),children:[e,` ×`]},e))}),e.length>0?P(`div`,{className:`max-h-40 overflow-y-auto rounded-md border border-border divide-y divide-border`,children:e.map(e=>y(`label`,{className:`flex items-center gap-2.5 px-3 py-1.5 text-xs text-foreground cursor-pointer hover:bg-surface-hover`,children:[P(`input`,{type:`checkbox`,checked:p.has(e.value),onChange:()=>h(e.value),className:`accent-primary`}),P(`span`,{className:`flex-1 truncate`,children:e.label}),e.hint!==void 0&&P(`span`,{className:`text-[10px] text-foreground-subtle`,children:e.hint})]},e.value))}):P(`p`,{className:`text-[10px] text-foreground-subtle`,children:r===!0?s(`common.loading`,`Loading…`):i}),!o&&P(`input`,{value:c,onChange:e=>l(e.target.value),onKeyDown:e=>{e.key===`Enter`&&(e.preventDefault(),g())},placeholder:a,className:`w-full rounded-md border border-border bg-background px-2 py-1 text-xs text-foreground placeholder:text-foreground-subtle`})]})}var bu=[{value:`immediate`,get label(){return V.t(`helpers.ruleFormParsers.immediate`)},get hint(){return V.t(`helpers.ruleFormParsers.immediateHint`)}},{value:`track-end`,get label(){return V.t(`helpers.ruleFormParsers.trackEnd`)},get hint(){return V.t(`helpers.ruleFormParsers.trackEndHint`)}},{value:`device-event`,get label(){return V.t(`helpers.ruleFormParsers.deviceEvent`)},get hint(){return V.t(`helpers.ruleFormParsers.deviceEventHint`)}},{value:`package-event`,get label(){return V.t(`helpers.ruleFormParsers.packageEvent`)},get hint(){return V.t(`helpers.ruleFormParsers.packageEventHint`)}},{value:`system-event`,get label(){return V.t(`helpers.ruleFormParsers.systemEvent`)},get hint(){return V.t(`helpers.ruleFormParsers.systemEventHint`)}}],xu=`Immediate, grouped`,Su=bu.flatMap(e=>e.value===`immediate`?[e,{value:`immediate-grouped`,get label(){return V.t(`notificationRules.grouping.choice`)},get hint(){return V.t(`helpers.ruleFormParsers.groupedHint`)}}]:[e]);function Cu(e){return e.groupingSec!==void 0&&At(e)?`immediate-grouped`:e.delivery}function wu(e){let t=(e.delivery===`immediate`||e.delivery===`track-end`)&&At({delivery:`immediate`,conditions:e.conditions});return Su.filter(e=>e.value!==`immediate-grouped`||t)}function Tu(e){return Su.find(t=>t.value===e)?.value}function Eu(e,t=xu){return Cu(e)===`immediate-grouped`?`${t} · ${String(e.groupingSec)} s`:Ou(e.delivery)}function Du(e){if(e.trim().length===0)return;let t=Number(e);return Number.isFinite(t)&&t>=0?Math.trunc(t):void 0}function Ou(e){return bu.find(t=>t.value===e)?.label??e}function ku(e){return bu.some(t=>t.value===e)}var Au=[{key:`all`,get label(){return V.t(`helpers.ruleFormParsers.sec_all_label`)},get blurb(){return V.t(`helpers.ruleFormParsers.sec_all_blurb`)},get newRuleLabel(){return V.t(`helpers.ruleFormParsers.sec_all_new`)},get emptyHint(){return V.t(`helpers.ruleFormParsers.sec_all_empty`)},creatable:!0},{key:`detection`,get label(){return V.t(`helpers.ruleFormParsers.sec_detection_label`)},get blurb(){return V.t(`helpers.ruleFormParsers.sec_detection_blurb`)},get newRuleLabel(){return V.t(`helpers.ruleFormParsers.sec_detection_new`)},get emptyHint(){return V.t(`helpers.ruleFormParsers.sec_detection_empty`)},creatable:!0},{key:`sensor`,get label(){return V.t(`helpers.ruleFormParsers.sec_sensor_label`)},get blurb(){return V.t(`helpers.ruleFormParsers.sec_sensor_blurb`)},get newRuleLabel(){return V.t(`helpers.ruleFormParsers.sec_sensor_new`)},get emptyHint(){return V.t(`helpers.ruleFormParsers.sec_sensor_empty`)},creatable:!0},{key:`audio`,get label(){return V.t(`helpers.ruleFormParsers.sec_audio_label`)},get blurb(){return V.t(`helpers.ruleFormParsers.sec_audio_blurb`)},get newRuleLabel(){return V.t(`helpers.ruleFormParsers.sec_audio_new`)},get emptyHint(){return V.t(`helpers.ruleFormParsers.sec_audio_empty`)},creatable:!0},{key:`occupancy`,get label(){return V.t(`helpers.ruleFormParsers.sec_occupancy_label`)},get blurb(){return V.t(`helpers.ruleFormParsers.sec_occupancy_blurb`)},get newRuleLabel(){return V.t(`helpers.ruleFormParsers.sec_occupancy_new`)},get emptyHint(){return V.t(`helpers.ruleFormParsers.sec_occupancy_empty`)},creatable:!0},{key:`device-events`,get label(){return V.t(`helpers.ruleFormParsers.sec_deviceEvents_label`)},get blurb(){return V.t(`helpers.ruleFormParsers.sec_deviceEvents_blurb`)},get newRuleLabel(){return V.t(`helpers.ruleFormParsers.sec_deviceEvents_new`)},get emptyHint(){return V.t(`helpers.ruleFormParsers.sec_deviceEvents_empty`)},creatable:!0},{key:`system`,get label(){return V.t(`helpers.ruleFormParsers.sec_system_label`)},get blurb(){return V.t(`helpers.ruleFormParsers.sec_system_blurb`)},get newRuleLabel(){return V.t(`helpers.ruleFormParsers.sec_system_new`)},get emptyHint(){return V.t(`helpers.ruleFormParsers.sec_system_empty`)},creatable:!0},{key:`alarm`,get label(){return V.t(`helpers.ruleFormParsers.sec_alarm_label`)},get blurb(){return V.t(`helpers.ruleFormParsers.sec_alarm_blurb`)},get newRuleLabel(){return V.t(`helpers.ruleFormParsers.sec_alarm_new`)},get emptyHint(){return V.t(`helpers.ruleFormParsers.sec_alarm_empty`)},creatable:!0},{key:`mixed`,get label(){return V.t(`helpers.ruleFormParsers.sec_mixed_label`)},get blurb(){return V.t(`helpers.ruleFormParsers.sec_mixed_blurb`)},get newRuleLabel(){return V.t(`helpers.ruleFormParsers.sec_mixed_new`)},get emptyHint(){return V.t(`helpers.ruleFormParsers.sec_mixed_empty`)},creatable:!1}];function ju(e){return tn(Zt(e)).editable}function Mu(e){return Vt(Nu(e))}function Nu(e){switch(e){case`device-events`:case`system`:case`alarm`:case`mixed`:return e;default:return}}var Pu=new Map([[0,`helpers.ruleFormParsers.cdNone`],[60,`helpers.ruleFormParsers.cd1m`],[3600,`helpers.ruleFormParsers.cd1h`]]),Fu=86400;function Iu(e){let t=Pu.get(e);return t===void 0?e%3600==0?V.t(`helpers.ruleFormParsers.cdHours`,{count:e/3600}):e%60==0?V.t(`helpers.ruleFormParsers.cdMinutes`,{count:e/60}):V.t(`helpers.ruleFormParsers.cdSeconds`,{count:e}):V.t(t)}function Lu(e){if(e.trim().length===0)return;let t=Number(e);return Number.isFinite(t)&&t>=0?Math.trunc(t):void 0}var Ru=[{value:`rule-device`,get label(){return V.t(`helpers.ruleFormParsers.scopeDevice`)}},{value:`rule`,get label(){return V.t(`helpers.ruleFormParsers.scopeRule`)}}];function zu(e){return Ru.find(t=>t.value===e)?.value}var Bu=[{value:`per-class`,get label(){return V.t(`helpers.ruleFormParsers.granPerClass`)}},{value:`shared`,get label(){return V.t(`helpers.ruleFormParsers.granShared`)}}];function Vu(e){return Bu.find(t=>t.value===e)?.value}var Hu=[{value:`scene-boxes`,get label(){return V.t(`helpers.ruleFormParsers.imageSceneBoxes`)},get description(){return V.t(`helpers.ruleFormParsers.imageSceneBoxesDesc`)}},{value:`crop`,get label(){return V.t(`helpers.ruleFormParsers.imageCrop`)},get description(){return V.t(`helpers.ruleFormParsers.imageCropDesc`)}},{value:`clean`,get label(){return V.t(`helpers.ruleFormParsers.imageClean`)},get description(){return V.t(`helpers.ruleFormParsers.imageCleanDesc`)}},{value:`none`,get label(){return V.t(`helpers.ruleFormParsers.imageNone`)},get description(){return V.t(`helpers.ruleFormParsers.imageNoneDesc`)}}];function Uu(e){return Hu.find(t=>t.value===e)?.value}var Wu=[{value:``,get label(){return V.t(`helpers.ruleFormParsers.linkedDefault`)}},{value:`mosaic`,get label(){return V.t(`helpers.ruleFormParsers.linkedMosaic`)}},{value:`each`,get label(){return V.t(`helpers.ruleFormParsers.linkedEach`)}}];function Gu(e){let t=Wu.find(t=>t.value===e)?.value;return t===``?void 0:t}var Ku=[{value:``,get label(){return V.t(`helpers.ruleFormParsers.profileLowest`)}},{value:`low`,get label(){return V.t(`helpers.ruleFormParsers.profileLow`)}},{value:`mid`,get label(){return V.t(`helpers.ruleFormParsers.profileMid`)}},{value:`high`,get label(){return V.t(`helpers.ruleFormParsers.profileHigh`)}}];function qu(e){let t=Ku.find(t=>t.value===e)?.value;return t===``?void 0:t}var Ju=[{value:`any`,get label(){return V.t(`helpers.ruleFormParsers.srcAny`)}},{value:`pipeline`,get label(){return V.t(`helpers.ruleFormParsers.srcPipeline`)}},{value:`onboard`,get label(){return V.t(`helpers.ruleFormParsers.srcOnboard`)}},{value:`sensor`,get label(){return V.t(`helpers.ruleFormParsers.srcSensor`)}}],Yu=[{value:`delivered`,get label(){return V.t(`helpers.ruleFormParsers.phaseDelivered`)}},{value:`picked-up`,get label(){return V.t(`helpers.ruleFormParsers.phasePickedUp`)}},{value:`both`,get label(){return V.t(`helpers.ruleFormParsers.phaseBoth`)}}],Xu=[{value:``,get label(){return V.t(`helpers.ruleFormParsers.stBoth`)}},{value:`raised`,get label(){return V.t(`helpers.ruleFormParsers.stRaised`)}},{value:`cleared`,get label(){return V.t(`helpers.ruleFormParsers.stCleared`)}}];function Zu(e){return e===`raised`||e===`cleared`?e:void 0}function Qu(e,t){return e===`sensorTransition`?Dt(t.sensorKinds):!0}var $u=[{value:`enter`,get label(){return V.t(`helpers.ruleFormParsers.crossEnter`)}},{value:`exit`,get label(){return V.t(`helpers.ruleFormParsers.crossExit`)}},{value:`any`,get label(){return V.t(`helpers.ruleFormParsers.crossAny`)}}],ed=`enter`;function td(e){return e===`exit`||e===`any`?e:void 0}var nd=[{value:1,get label(){return V.t(`helpers.ruleFormParsers.prioMin`)}},{value:2,get label(){return V.t(`helpers.ruleFormParsers.prioLow`)}},{value:3,get label(){return V.t(`helpers.ruleFormParsers.prioDefault`)}},{value:4,get label(){return V.t(`helpers.ruleFormParsers.prioHigh`)}},{value:5,get label(){return V.t(`helpers.ruleFormParsers.prioMax`)}}];function rd(e,t){return e.options&&e.options.length>0?e.options:t}var id=[{value:``,get label(){return V.t(`helpers.ruleFormParsers.speedDefault`)}},{value:`1`,get label(){return V.t(`helpers.ruleFormParsers.speedReal`)}},{value:`2`,label:`2×`},{value:`3`,label:`3×`},{value:`4`,label:`4×`},{value:`6`,label:`6×`},{value:`8`,label:`8×`}];function ad(e){if(e===``)return;let t=Number(e);return Number.isFinite(t)&&t>=1&&t<=8?t:void 0}var od=new Map(Object.entries({"device-offline":`Device offline`,"device-online":`Device online`,"device-disabled":`Device switched off`,"device-enabled":`Device switched on`,"stream-offline":`Stream offline`,"stream-online":`Stream online`,"device-battery-low":`Battery low`,"device-battery-normal":`Battery back to normal`,"device-consumable-low":`Consumable low`,"device-consumable-normal":`Consumable back to normal`,"detection-blind":`Camera detecting nothing`,"motion-noisy":`Camera motion constant, no subject`,"motion-calm":`Camera motion calm again`,"recording-stalled":`Recording stalled`,"recording-healthy":`Recording healthy again`,"recording-degraded":`Recording degraded (restart storm)`,"device-attention-required":`Device needs attention`,"device-attention-resolved":`Device attention resolved`,"storage-location-low":`Storage location low`,"storage-location-critical":`Storage location critical`,"storage-location-ok":`Storage location ok again`,"node-offline":`Node offline`,"node-online":`Node online`,"node-restarting":`Node restarting`,"node-updating":`Node updating (restart imminent)`,"node-inference-unavailable":`Node has no usable inference device`,"addon-crash-loop":`Addon stopped after repeated crashes`,"addon-update-available":`Addon update available`,"addon-updated":`Addons updated`,"server-update-available":`Server update available`,"server-updated":`Server updated`,"wrapper-update-available":`Container / app update available`,"export-completed":`Export completed`,"backup-completed":`Backup completed`,"alert-critical":`Critical alert raised`,"alert-error":`Error alert raised`,"alert-critical-resolved":`Critical alert resolved`,"rule-broken":`Notification rule broken`,"rule-repaired":`Notification rule repaired`,"alarm-arm-refused":`Alarm arm refused (something is open)`,"alarm-check-failed":`Alarm check failed (armed anyway)`,"alarm-arming":`Alarm arming (exit delay)`,"alarm-armed":`Alarm armed`,"alarm-pending":`Alarm entry delay started`,"alarm-triggered":`Alarm triggered`,"alarm-rearmed":`Alarm re-armed after siren`,"alarm-sensor-bypass":`Alarm sensor bypass`,"alarm-disarmed":`Alarm disarmed`}));function sd(e){return od.get(e)}var cd={"device-state":`A device the hub can no longer reach, or that came back. Switched off / on is a device an operator turned off or back on — not a fault, a choice.`,streams:`A stream that stopped or came back.`,battery:`A battery below the cluster threshold, and (optionally) its return to normal. Devices with a binary low-battery indicator are judged by the indicator, not by the percentage.`,consumables:`A consumable — filter, brush, bag, supply or waste tank — at or below this rule’s threshold, or that the device reports as due for replacement, and (optionally) its return to normal after a change. A device that only says "replace" is judged by that, not by a percentage.`,"detection-blind":`A camera that MOVED — at least 10 minutes of motion over 3 sessions — was analysed, and whose detector produced nothing at all, not even a candidate under the confidence floor.`,"motion-noise":`A camera whose motion fires constantly with no subject for an hour — a quarter of the time in motion, or 40 sessions — and (optionally) its return to calm. The detector is fine; tune the motion zones or sensitivity.`,recording:`A camera whose recording is on but no footage is landing (stall), a writer that burned its restart budget (degraded), and (optionally) the return to healthy writing.`,"device-attention":`A device whose own addon raised a critical alert because it needs the operator (a missing or rejected PIN), and the return to normal.`,nodes:`An agent or worker node joining or leaving the cluster, or an online node whose inference devices all went away.`,addons:`An addon the hub has stopped restarting after repeated crashes.`,"addon-updates":`A newer version of an addon, or an addon update that just finished.`,updates:`A newer version of the server itself, or of the container / app the node runs inside, is available — or a server update just finished.`,"backups-exports":`A scheduled or manual backup of the hub finished, or a footage export finished rendering.`,alerts:`A critical or error alert opening — a runner that failed or was refused, a recording location out of space, an expired sign-in — and (optionally) a critical alert resolving. One notification per alert episode.`,storage:`A storage location running low or critical on free space — or whose capacity probe failed — and (optionally) its return to ok.`,"rule-health":`A notification rule that cannot work — it no longer loads, or still names a device or destination that was deleted — and (optionally) its repair.`,alarm:`The alarm panel refusing to arm, arming, armed, counting down to a siren, going off, re-arming, excluding an open sensor, or being disarmed.`},ld=lt.map(e=>({id:e.id,family:e.family,label:e.label,hint:cd[e.id]??``,kinds:e.kinds.flatMap(e=>{let t=sd(e);return t===void 0?[]:[{value:e,label:t}]})}));function ud(e){return ld.filter(t=>t.family===e)}function dd(e){let t=en(e).conditions.systemEvent;return t===void 0?{kinds:(ud(e)[0]?.kinds??[]).map(e=>e.value)}:{...t,kinds:[...t.kinds]}}var fd=ld.flatMap(e=>e.kinds);function pd(e){return fd.find(t=>t.value===e)?.label??e}function md(e){return{devices:yt(e,`deviceIds`),deviceTypes:yt(e,`deviceTypes`),nodes:yt(e,`nodeIds`),packages:yt(e,`packageNames`),consumableThreshold:yt(e,`consumableLowPercent`)}}function hd(e,t){let n=wt[e],r=md(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 gd=Object.values(Yt).map(e=>({value:e,label:_d(e)})).toSorted((e,t)=>e.label.localeCompare(t.label));function _d(e){let t=e.replaceAll(`-`,` `);return t.charAt(0).toUpperCase()+t.slice(1)}function vd(e,t){let n=[],r=new Set;for(let i of e.kinds){let e=ft(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]:ut(e),clears:ut(e),classId:e.id,...t&&e.snapshotSection===null?{noSnapshot:!0}:{}}))}return n}function yd(e,t){return t.clears.some(t=>e.includes(t))}function bd(e,t,n){if(!ud(n).some(e=>e.kinds.some(e=>t.kinds.includes(e.value))))return e;let r=e?.kinds??[];if(yd(r,t)){let i=r.filter(e=>!t.clears.includes(e));return i.length===0?e:wd(e,i,n)}return wd(e,fd.filter(e=>t.kinds.includes(e.value)||r.includes(e.value)).map(e=>e.value),n)}function xd(e,t){return t===void 0?void 0:wd(t,t.kinds,e)}function Sd(e,t){let n=e?.kinds??[];if(n.length===0)return;let r=Cd(t,`deviceIds`,e?.deviceIds),i=Cd(t,`excludeDeviceIds`,e?.excludeDeviceIds),a=Cd(t,`deviceTypes`,e?.deviceTypes),o=Cd(t,`nodeIds`,e?.nodeIds),s=Cd(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 Cd(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 wd(e,t,n){let r=hd(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 Td=95;function Ed(e){let t=e.trim();if(t===``)return{kind:`clear`};let n=Number(t);return Number.isInteger(n)&&n>=1&&n<=Td?{kind:`set`,value:n}:{kind:`invalid`}}function Dd(e,t=2){if(e===void 0||e.length===0)return V.t(`helpers.notificationSystemEvents.noneSelected`);let n=e.slice(0,t).map(pd).join(`, `),r=e.length-Math.min(t,e.length);return r>0?`${n} +${r}`:n}function Od(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(_d).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 kd(e){return e===void 0||(e.deviceTypes?.length??0)===0?!1:e.kinds.some(e=>Gt.includes(e))}var Ad=[`all`,`only`,`except`];function jd(e,t){return(e??[]).length>0?`only`:(t??[]).length>0?`except`:`all`}function Md(e,t){let n=[...e??[]],r=[...t??[]];return{mode:jd(n,r),include:n,exclude:r,legacyBoth:n.length>0&&r.length>0}}function Nd(e,t){return{...e,mode:t}}function Pd(e){switch(e.mode){case`only`:return e.include;case`except`:return e.exclude;case`all`:return[]}}function Fd(e,t){switch(e.mode){case`only`:return{...e,include:[...t]};case`except`:return{...e,exclude:[...t]};case`all`:return e}}function Id(e){return e.mode===`only`&&e.legacyBoth?e.exclude:[]}function Ld(e){return{...e,exclude:[],legacyBoth:!1}}function Rd(e){switch(e.mode){case`all`:return{};case`except`:return e.exclude.length>0?{exclude:[...e.exclude]}:{};case`only`:{let t=Id(e);return{...e.include.length>0?{include:[...e.include]}:{},...t.length>0?{exclude:[...t]}:{}}}}}function zd(e){let t=Rd(e),n=t.include??[],r=t.exclude??[];return[...e.include.filter(e=>!n.includes(e)),...e.exclude.filter(e=>!r.includes(e))]}var Bd=[`onActivation`,`onDeactivation`,`onTrigger`,`onTriggerOff`],Vd={onActivation:{get title(){return V.t(`helpers.notificationRuleActions.onActivationTitle`)},get hint(){return V.t(`helpers.notificationRuleActions.onActivationHint`)}},onDeactivation:{get title(){return V.t(`helpers.notificationRuleActions.onDeactivationTitle`)},get hint(){return V.t(`helpers.notificationRuleActions.onDeactivationHint`)}},onTrigger:{get title(){return V.t(`helpers.notificationRuleActions.onTriggerTitle`)},get hint(){return V.t(`helpers.notificationRuleActions.onTriggerHint`)}},onTriggerOff:{get title(){return V.t(`helpers.notificationRuleActions.onTriggerOffTitle`)},get hint(){return V.t(`helpers.notificationRuleActions.onTriggerOffHint`)}}},Hd={onActivation:[],onDeactivation:[],onTrigger:[],onTriggerOff:[],buttons:[]};function Ud(e){return e===void 0?Hd:{onActivation:[...e.onActivation??[]],onDeactivation:[...e.onDeactivation??[]],onTrigger:[...e.onTrigger??[]],onTriggerOff:[...e.onTriggerOff??[]],buttons:[...e.buttons??[]]}}function Wd(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(!(!Bd.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 Gd(e,t){let n=[];for(let r of Bd){let i=e[r];i.length>4&&n.push({kind:`too-many`,message:V.t(`helpers.notificationRuleActions.tooMany`,{title:Vd[r].title})});for(let e of i)e.kind===`sequence`&&!t.has(e.sequenceId)&&n.push({kind:`unknown-sequence`,message:V.t(`helpers.notificationRuleActions.hookUnknownSeq`,{title:Vd[r].title})})}let r=new Set;for(let i of e.buttons){let e=i.id.trim();e!==``&&(r.has(e)&&n.push({kind:`duplicate-button`,message:V.t(`helpers.notificationRuleActions.dupButton`,{id:e})}),r.add(e),t.has(i.sequenceId.trim())||n.push({kind:`unknown-sequence`,message:V.t(`helpers.notificationRuleActions.buttonUnknownSeq`,{label:i.label||e})}))}return n}function Kd(e,t){return{id:`action-${String(e+1)}`,label:V.t(`helpers.notificationRuleActions.newButtonLabel`),sequenceId:t}}function qd(){return{kind:`do`,action:{kind:`cap`,deviceId:0,cap:``,method:``}}}function Jd(e){return{kind:`sequence`,sequenceId:e}}function Yd(){return{kind:`wait`,seconds:5}}var Xd=[{value:`acknowledge`,get label(){return V.t(`helpers.notificationRuleActions.icon_acknowledge`)}},{value:`dismiss`,get label(){return V.t(`helpers.notificationRuleActions.icon_dismiss`)}},{value:`silence`,get label(){return V.t(`helpers.notificationRuleActions.icon_silence`)}},{value:`snooze`,get label(){return V.t(`helpers.notificationRuleActions.icon_snooze`)}},{value:`view`,get label(){return V.t(`helpers.notificationRuleActions.icon_view`)}},{value:`play`,get label(){return V.t(`helpers.notificationRuleActions.icon_play`)}},{value:`camera`,get label(){return V.t(`helpers.notificationRuleActions.icon_camera`)}},{value:`open`,get label(){return V.t(`helpers.notificationRuleActions.icon_open`)}},{value:`close`,get label(){return V.t(`helpers.notificationRuleActions.icon_close`)}},{value:`unlock`,get label(){return V.t(`helpers.notificationRuleActions.icon_unlock`)}},{value:`lock`,get label(){return V.t(`helpers.notificationRuleActions.icon_lock`)}},{value:`disarm`,get label(){return V.t(`helpers.notificationRuleActions.icon_disarm`)}},{value:`arm`,get label(){return V.t(`helpers.notificationRuleActions.icon_arm`)}},{value:`arm-home`,get label(){return V.t(`helpers.notificationRuleActions.icon_arm_home`)}},{value:`arm-away`,get label(){return V.t(`helpers.notificationRuleActions.icon_arm_away`)}},{value:`arm-night`,get label(){return V.t(`helpers.notificationRuleActions.icon_arm_night`)}},{value:`light`,get label(){return V.t(`helpers.notificationRuleActions.icon_light`)}},{value:`alert`,get label(){return V.t(`helpers.notificationRuleActions.icon_alert`)}}],Zd=[10,30,60],Qd=[5,10,15,30,60,120,240,480];function $d(e){return e>=60&&e%60==0?V.t(`helpers.ruleFormState.snoozeHours`,{count:e/60}):V.t(`helpers.ruleFormState.snoozeMin`,{count:e})}var ef=new Set([`alarm-arm-refused`,`alarm-check-failed`,`alarm-arming`,`alarm-armed`,`alarm-pending`,`alarm-triggered`,`alarm-rearmed`,`alarm-sensor-bypass`,`alarm-disarmed`]),tf=`alarm-panel`;function nf(e,t){for(let t of e.systemEvent?.kinds??[])if(ef.has(t))return!0;for(let e of t)if(e.kind===`cap`&&e.cap===tf)return!0;return!1}function rf(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 af(e){let{devices:t,devicesExclude:n,classes:r,classesExclude:i,...a}=e;return{conditions:a,deviceScope:Md(t,n),classScope:Md(r,i)}}function of(e){let t=Rd(e.deviceScope),n=Rd(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 sf(e){return e.deviceScope.mode===`only`?e.deviceScope.include:[]}function cf(e,t,n){let r=Zt(n);return e.some(e=>e.id===t&&Mt(e,n.delivery,r))}function lf(e=`immediate`,t={}){return{name:``,enabled:!0,delivery:e,targetIds:[],targetUsers:[],targetParams:{},priority:3,mediaImage:qt({},Zt({delivery:e,conditions:t})),mediaShowTriggerZone:!1,mediaShowSubjectPath:!1,mediaGif:!1,mediaClip:!1,mediaProfile:void 0,mediaClipSpeed:void 0,mediaLinkedCameras:void 0,templateTitle:``,templateBody:``,...af(t),schedule:void 0,systemEventDelivery:void 0,snoozeAllowGlobal:!1,groupingSec:void 0,snoozeOptions:void 0,actions:Hd,cooldownSec:30,cooldownScope:`rule-device`,cooldownGranularity:void 0}}function uf(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:qt(e.media,Zt(e)),mediaShowTriggerZone:e.media.showTriggerZone===!0,mediaShowSubjectPath:e.media.showSubjectPath===!0,mediaGif:e.media.gif===!0,mediaClip:e.media.clip===!0,mediaProfile:e.media.profile,mediaClipSpeed:e.media.clipSpeed,mediaLinkedCameras:e.media.linkedCameras,templateTitle:e.template?.title??``,templateBody:e.template?.body??``,...af(e.conditions),schedule:e.schedule,systemEventDelivery:e.systemEventDelivery,snoozeAllowGlobal:e.snoozeAllowGlobal===!0,groupingSec:e.groupingSec,snoozeOptions:e.snoozeOptions,actions:Ud(e.actions),cooldownSec:e.throttle.cooldownSec,cooldownScope:e.throttle.scope,cooldownGranularity:e.throttle.granularity}}function df(e,t){let n=[];if(vf(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&&!yf(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(dt(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(Fu)} (24 hours). 0 means every match is delivered.`),mf(e))for(let t of ht({delivery:e.delivery,conditions:e.conditions,...e.systemEventDelivery===void 0?{}:{systemEventDelivery:e.systemEventDelivery},...Wd(e.actions)===void 0?{}:{actions:Wd(e.actions)}}))n.push(vt(t));return n}function ff(e){let t=e.systemEventDelivery;if(t===void 0)return{};if(!Ut(e.delivery))return t.mode===`summary`?{systemEventDelivery:{mode:`instant`}}:{};if(t.mode===`summary`&&It(t.schedule)===null){let e=it(t.schedule);if(e!==null&&e.times.length>0)return{systemEventDelivery:{...t,schedule:Lt(e.times,t.schedule.timezone)}}}return{systemEventDelivery:t}}function pf(e){if(!mf(e))return null;if(!bt(e.templateBody))return V.t(`helpers.ruleFormState.summaryWarnNone`,{token:`{{summaryText}}`});let t=e.templateBody;return(e.systemEventDelivery?.mode===`summary`?e.systemEventDelivery.split:void 0)===`section`&&t.trim().length>0&&!/\{\{\s*summaryText\s*\}\}/.test(t)?V.t(`helpers.ruleFormState.summaryWarnSplit`,{token:`{{summaryText}}`}):null}function mf(e){return Ut(e.delivery)&&e.systemEventDelivery?.mode===`summary`}function hf(e,t,n=new Set){return df(e,t).length===0&&ku(e.delivery)&&(!Ut(e.delivery)||Cf(e)>0)&&Zt(e)!==`mixed`&&e.name.trim().length>0&&(e.targetIds.length>0||e.targetUsers.length>0)&&Gd(e.actions,n).length===0}function gf(e,t){let n=xf(e.conditions,t);return Ut(t)&&(n.systemEvent?.kinds.length??0)===0?{...e,delivery:t,conditions:{...n,systemEvent:dd(`device-events`)}}:{...e,delivery:t,conditions:n}}function _f(e,t){return t===`immediate-grouped`?{...gf(e,`immediate`),groupingSec:e.groupingSec??20}:{...gf(e,t),groupingSec:void 0}}function vf(e){return e.groupingSec!==void 0&&At(e)}function yf(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 bf=new Set([`immediate`,`track-end`,`package-event`]);function xf(e,t){if(e.source!==`pipeline`||bf.has(t))return e;let{source:n,...r}=e;return r}function Sf(e,t){return ct(e.conditions.systemEvent)===t?e:{...e,conditions:{...e.conditions,systemEvent:dd(t)}}}function Cf(e){return e.conditions.systemEvent?.kinds.length??0}function wf(e,t){return e.appliesTo.includes(t)}var Tf={source:`any`};function Ef(e,t){if(t==null)return!0;if(Array.isArray(t))return t.length===0;if(typeof t==`string`)return t.length===0||Tf[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 Df=Ft.filter(e=>e.id===`audio`);function Of(e){if(e.length===0)return e;let t=new Set(e.map(e=>e.id)),n=Df.filter(e=>!t.has(e.id));return n.length===0?e:[...e,...n]}function kf(e,t,n,r=Zt({delivery:t,conditions:e})){let i=n.length===0?null:new Set(n.filter(e=>e.id!==`schedule`&&Mt(e,t,r)).map(e=>e.id)),a={};for(let[t,n]of Object.entries(e))i!==null&&!i.has(t)||Qu(t,e)&&(Ef(t,n)||(a[t]=n));return a}function Af(e,t){if(e===void 0)return{};let n=xd(e,t.systemEvent);return n===void 0?{}:{systemEvent:n}}function jf(e){return e!==void 0&&e.windows.length>0}function Mf(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 Nf(e){let t=Mf(e.media);return{...e.confirm===void 0?{}:{confirm:e.confirm},...t===void 0?{}:{media:t}}}function Pf(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=Wd(e.actions),s=Zt(e),c=tn(s),l=Ct(s),u=n.length===0?!0:n.some(t=>t.id===`schedule`&&wf(t,e.delivery)),d=!mf(e)&&u&&jf(e.schedule)?e.schedule:void 0,f=n.length===0?!0:n.some(t=>t.id===`devices`&&wf(t,e.delivery)),p=n.length===0?!0:n.some(t=>t.id===`devicesExclude`&&wf(t,e.delivery)),{devices:m,devicesExclude:h,...g}=of(e),_=kf(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}:{},...Af(l,e.conditions)},...d?{schedule:d}:{},...ff(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`&&jt(_).length>0?{showTriggerZone:!0}:{},...e.mediaShowSubjectPath&&e.mediaImage!==`none`&&Bt(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}:{},...vf(e)?{groupingSec:e.groupingSec}:{},...e.snoozeOptions===void 0?{}:{snoozeOptions:[...e.snoozeOptions]},...t?.confirm===void 0?{}:{confirm:t.confirm},...o===void 0?{}:{actions:o}}}function Ff(e,t){let n=Pf(e,void 0,t);return[`template`,`schedule`,`targetUsers`,`snoozeOptions`,`snoozeAllowGlobal`,`groupingSec`,`actions`].filter(e=>n[e]===void 0)}var If=[{key:`rule`,get label(){return V.t(`helpers.ruleFormTabs.tab_rule`)},fields:[`name`,`enabled`,`delivery`,`groupingSec`,`targetIds`,`targetUsers`,`targetParams`]},{key:`devices`,get label(){return V.t(`helpers.ruleFormTabs.tab_devices`)},fields:[`deviceScope`]},{key:`conditions`,get label(){return V.t(`helpers.ruleFormTabs.tab_conditions`)},fields:[`conditions`,`classScope`,`schedule`,`systemEventDelivery`]},{key:`notification`,get label(){return V.t(`helpers.ruleFormTabs.tab_notification`)},fields:[`priority`,`mediaImage`,`mediaShowTriggerZone`,`mediaShowSubjectPath`,`mediaGif`,`mediaClip`,`mediaProfile`,`mediaClipSpeed`,`mediaLinkedCameras`,`templateTitle`,`templateBody`]},{key:`actions`,get label(){return V.t(`helpers.ruleFormTabs.tab_actions`)},fields:[`actions`]},{key:`advanced`,get label(){return V.t(`helpers.ruleFormTabs.tab_advanced`)},fields:[`snoozeAllowGlobal`,`snoozeOptions`,`cooldownSec`,`cooldownScope`,`cooldownGranularity`]}];function Lf(e,t={}){let n=Zt({delivery:e,conditions:t}),r=tn(n),i=If.map(e=>e.key===`conditions`?{...e,label:r.label}:e);return Vt(n)?i.filter(e=>e.key!==`devices`):i}function Rf(e){if(e.audio!==void 0)return V.t(`helpers.ruleFormTabs.condSound`);if(e.occupancy!==void 0)return V.t(`helpers.ruleFormTabs.condOccupancy`)}function zf(e){let t=Zt(e),n=Nt(of(e),t);return t===`sensor`&&e.conditions.sensorTransition!==void 0&&!Qu(`sensorTransition`,e.conditions)?[...n,{conditionId:`sensorTransition`,reason:Tt}]:n}var Bf=`rule`;function Vf(e){return If.find(t=>t.key===e)?.key}function Hf(e){return e?.toLowerCase().startsWith(`it`)===!0?`it`:`en`}function Uf(){let{i18n:e}=H(),t=Hf(e.language);return e=>Qt(e,t)}a();var Wf=`block text-[11px] font-medium text-foreground`,Gf=`text-[10px] text-foreground-subtle mt-0.5`;function Kf({cameras:e,fleet:t,value:n,onChange:r,emptyMeansAll:i=!1,savedHadDevices:a=!1}){return P(Vn,{devices:e,listState:t.state,fleet:t,value:n,onChange:r,emptyMeansAll:i,savedHadDevices:a})}function qf({value:e,placeholder:t,onChange:n}){let{t:r}=H(),[i,a]=f(``),o=()=>{let t=i.trim();if(t.length===0||e.includes(t)){a(``);return}n([...e,t]),a(``)},s=t=>n(e.filter(e=>e!==t));return y(`div`,{className:`mt-1 space-y-1.5`,children:[e.length>0&&P(`div`,{className:`flex flex-wrap gap-1`,children:e.map(e=>y(`span`,{className:`inline-flex items-center gap-1 rounded bg-surface-hover px-1.5 py-0.5 text-[11px] text-foreground`,children:[e,P(`button`,{type:`button`,onClick:()=>s(e),"aria-label":r(`system.notificationConditionWidgets.remove`,`remove {{v}}`,{v:e}),className:`text-foreground-subtle hover:text-danger`,children:P(Oe,{className:`h-3 w-3`})})]},e))}),P(Un,{value:i,placeholder:t,onChange:e=>a(e.target.value),onKeyDown:e=>{e.key===`Enter`&&(e.preventDefault(),o())},onBlur:o})]})}function Jf({picker:e,value:t,onChange:n}){let{t:r}=H(),i=d(()=>zt(e),[e]),a=d(()=>new Set(t),[t]),o=t.filter(e=>!i.has(e)),s=e=>{n(a.has(e)?t.filter(t=>t!==e):[...t,e])};return y(`div`,{className:`space-y-2`,children:[o.length>0&&P(`div`,{className:`flex flex-wrap gap-1`,children:o.map(e=>y(`button`,{type:`button`,onClick:()=>n(t.filter(t=>t!==e)),className:`inline-flex items-center gap-1 rounded border border-border px-1.5 py-0.5 text-[10px] text-foreground hover:bg-surface-hover`,title:r(`system.notificationConditionWidgets.customValueClickToRemove`,`Custom value — click to remove`),children:[e,` ×`]},e))}),e.groups.map(e=>y(`div`,{children:[P(`div`,{className:`text-[10px] uppercase tracking-wide text-foreground-muted mb-1`,children:e.fallbackLabel}),P(`div`,{className:`flex flex-wrap gap-1`,children:e.options.map(e=>{let t=a.has(e.value);return P(`button`,{type:`button`,"aria-pressed":t,onClick:()=>s(e.value),className:t?`rounded border border-primary bg-primary/15 px-1.5 py-0.5 text-[10px] text-foreground`:`rounded border border-border px-1.5 py-0.5 text-[10px] text-foreground hover:bg-surface-hover`,children:e.label},e.value)})})]},e.key))]})}function Yf({value:e,min:t,max:n,step:r,onChange:i}){let{t:a}=H();return y(`div`,{className:`mt-1 flex items-center gap-2`,children:[P(Un,{type:`number`,value:e??``,min:t,max:n,step:r,className:`max-w-[8rem]`,onChange:e=>{let t=e.target.value;if(t===``){i(void 0);return}let n=Number(t);i(Number.isFinite(n)?n:void 0)}}),e!==void 0&&n!==void 0&&P(`input`,{type:`range`,min:t,max:n,step:r,value:e,onChange:e=>i(Number(e.target.value)),className:`flex-1 accent-primary`,"aria-label":a(`common.valueWord`)})]})}function Xf({value:e,onChange:t,options:n}){let{t:r}=H(),i=Zf(n??[]),a=i.length>0?i:$u;return y(`div`,{className:`mt-1 space-y-1`,children:[P(Wn,{value:e??`enter`,options:a.map(e=>({value:e.value,label:r(`notificationRules.crossing.${e.value}`,e.label)})),onChange:e=>t(td(e.target.value))}),P(`p`,{className:Gf,children:r(`notificationRules.crossing.hint`,`Which way the subject crosses the zone.`)})]})}function Zf(e){let t=[];for(let n of e){let e=n.value===``||n.value===`enter`?ed:td(n.value);e===void 0||t.some(t=>t.value===e)||t.push({value:e,label:n.label})}return t}function Qf({deviceIds:e,cameras:t,value:n,onChange:r}){let{options:i,loading:a}=hu(e,t);return P(yu,{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 $f({deviceIds:e,value:t,onChange:n}){let{t:r}=H(),{options:i,loading:a}=gu(e);return P(yu,{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 ep=[{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 tp(e,t){let n=e.map(e=>({value:e.value,label:e.label}));return t===void 0||t===``||n.some(e=>e.value===t)?n:[...n,{value:t,label:V.t(`system.notificationConditionWidgets.subTypeNeverCountsAlways`,`{{stored}} — sub-type, never counts (always 0)`,{stored:t})}]}function np({deviceIds:e,cameras:t,classOptions:n,value:r,onChange:i}){let{t:a}=H(),{options:o,loading:s}=hu(e,t),c=r??Xt,l=e=>i({...c,...e}),u=c.op===`became-occupied`||c.op===`became-free`,d=tp(n,c.className);return y(`div`,{className:`mt-1 space-y-1.5`,children:[y(`div`,{className:`flex flex-wrap items-center gap-1.5`,children:[P(`div`,{className:`min-w-[10rem]`,children:P(Wn,{value:c.zoneId??``,options:[{value:``,label:s?a(`system.notificationConditionWidgets.loadingZones`,`Loading zones…`):a(`system.notificationConditionWidgets.wholeFrame`,`— whole frame —`)},...o.map(e=>({value:e.value,label:e.label}))],onChange:e=>l({zoneId:e.target.value===``?void 0:e.target.value})})}),P(`div`,{className:`min-w-[9rem]`,children:P(Wn,{value:c.className??``,options:[{value:``,label:a(`system.notificationConditionWidgets.anyClass`,`— any class —`)},...d],onChange:e=>l({className:e.target.value===``?void 0:e.target.value})})}),P(`div`,{className:`min-w-[9rem]`,children:P(Wn,{value:c.op,options:ep.map(e=>({value:e.value,label:a(e.labelKey)})),onChange:e=>{let t=ep.find(t=>t.value===e.target.value);t&&l({op:t.value})}})})]}),y(`div`,{className:`flex flex-wrap items-center gap-3 text-xs text-foreground-subtle`,children:[y(`label`,{className:`flex items-center gap-1`,children:[u?a(`system.notificationConditionWidgets.threshold`,`Threshold`):a(`system.notificationConditionWidgets.count`,`Count`),P(Un,{type:`number`,min:0,className:`w-16`,value:String(c.count),onChange:e=>l({count:Math.max(0,Number(e.target.value)||0)})})]}),y(`label`,{className:`flex items-center gap-1`,children:[a(`system.notificationConditionWidgets.holdFor`,`Hold for`),P(Un,{type:`number`,min:0,max:3600,className:`w-16`,value:String(c.sustainSeconds),onChange:e=>l({sustainSeconds:Math.min(3600,Math.max(0,Number(e.target.value)||0))})}),`s`]}),r===void 0?null:P(`button`,{type:`button`,onClick:()=>i(void 0),className:`underline hover:text-foreground`,children:a(`system.notificationConditionWidgets.clear`,`Clear`)})]}),e.length===0&&P(`p`,{className:`text-[11px] text-warning`,children:a(`system.notificationConditionWidgets.noCameraPickedOnThe`,`No camera picked on the Devices tab: this watches EVERY camera's occupancy, and no zone can be offered until you choose one — a zone id belongs to a camera.`)}),P(`p`,{className:`text-[11px] text-foreground-subtle`,children:a(`system.notificationConditionWidgets.countsConfirmedTrackedObjectsFrom`,`Counts confirmed tracked objects from zone analytics. The change must hold for the sustain window before it fires; with no snapshot for the camera or zone the rule never fires.`)})]})}var rp=[{value:`label`,labelKey:`system.notificationConditionWidgets.audioModeLabel`,Icon:Ae},{value:`level`,labelKey:`system.notificationConditionWidgets.audioModeLevel`,Icon:Je}];function ip({taxonomy:e,value:t,onChange:n}){let{t:r}=H(),i=St(t),a=e=>n(ot(t,e)),{choices:o,unknownLabels:s}=pt(e,i.labels),c=mt(t)??`label`;return y(`div`,{className:`mt-1 space-y-2`,children:[y(`div`,{className:`flex flex-wrap items-center gap-1`,children:[rp.map(e=>P(`button`,{type:`button`,"aria-pressed":c===e.value,onClick:()=>a({mode:e.value}),className:`rounded border px-2 py-0.5 text-[11px] ${c===e.value?`border-primary bg-primary/15 text-foreground`:`border-border text-foreground-subtle hover:bg-surface-hover`}`,children:y(`span`,{className:`inline-flex items-center gap-1`,children:[P(e.Icon,{className:`h-3 w-3`}),r(e.labelKey)]})},e.value)),t===void 0?null:P(`button`,{type:`button`,onClick:()=>n(void 0),className:`ml-1 text-xs text-foreground-subtle underline hover:text-foreground`,children:r(`system.notificationConditionWidgets.clear`,`Clear`)})]}),c===`label`?y(E,{children:[P(`div`,{className:`flex flex-wrap gap-1`,children:o.map(e=>{let t=rn(i.labels,e.value),n=e.unknown?`border-dashed border-warning text-warning`:t?`border-primary bg-primary/15 text-foreground`:`border-border text-foreground hover:bg-surface-hover`;return P(`button`,{type:`button`,"aria-pressed":t,title:e.unknown?r(`system.notificationConditionWidgets.storedByTheRuleNot`,`Stored by the rule — not offered by this hub`):void 0,onClick:()=>a({labels:Et(i.labels,e.value)}),className:`rounded border px-1.5 py-0.5 text-[10px] ${n}`,children:y(`span`,{className:`inline-flex items-center gap-1`,children:[P(oi,{iconId:e.iconId,size:12}),e.label]})},e.value)})}),s.length>0&&y(`p`,{className:`text-[10px] text-warning`,children:[r(`system.notificationConditionWidgets.keptFromTheRuleUnknown`,`Kept from the rule, unknown to this hub:`),` `,s.join(`, `)]}),y(`div`,{className:`flex flex-wrap items-center gap-3 text-xs text-foreground-subtle`,children:[y(`label`,{className:`flex items-center gap-1`,children:[r(`system.notificationConditionWidgets.confirmAfter`,`Confirm after`),P(Un,{type:`number`,min:1,max:20,step:1,className:`w-16`,value:String(i.confirmHits??2),onChange:e=>a({confirmHits:Number(e.target.value)})}),r(`system.notificationConditionWidgets.frames`)]}),y(`label`,{className:`flex items-center gap-1`,children:[r(`system.notificationConditionWidgets.within`),P(Un,{type:`number`,min:1,max:60,step:1,className:`w-16`,value:String(i.confirmWindowSec??5),onChange:e=>a({confirmWindowSec:Number(e.target.value)})}),`s`]})]}),P(`p`,{className:`text-[11px] text-foreground-subtle`,children:r(`system.notificationConditionWidgets.audioConfirmHint`,{hits:2,window:5})})]}):y(E,{children:[P(`div`,{className:`flex flex-wrap items-center gap-3 text-xs text-foreground-subtle`,children:y(`label`,{className:`flex items-center gap-1`,children:[r(`system.notificationConditionWidgets.louderThan`,`Louder than`),P(Un,{type:`number`,min:gt,max:0,step:3,className:`w-20`,value:String(i.dbThreshold??_t),onChange:e=>a({dbThreshold:Number(e.target.value)})}),`dBFS`]})}),y(`div`,{className:`flex flex-wrap items-center gap-3 text-xs text-foreground-subtle`,children:[y(`label`,{className:`flex items-center gap-1`,children:[r(`system.notificationConditionWidgets.hits`,`Hits`),P(Un,{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:xt.hitPercent})]}),y(`label`,{className:`flex items-center gap-1`,children:[r(`system.notificationConditionWidgets.over`),P(Un,{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:xt.samplingSeconds})]})]}),P(`p`,{className:`text-[11px] text-foreground-subtle`,children:r(`system.notificationConditionWidgets.dbfsHint`,{min:gt})})]}),dt(t)?P(`p`,{className:`text-[11px] text-warning`,children:r(`system.notificationConditionWidgets.withNeitherASoundNor`,`With neither a sound nor a level threshold this can never match — every sample would be a hit, so the engine refuses it rather than notifying on silence.`)}):null]})}function ap({value:e,onChange:t}){let{t:n}=H(),r=e?.values??[],i=e?.maxDistance??1,a=e=>t(e.length>0?{values:e,maxDistance:i}:void 0),o=e=>t(r.length>0?{values:r,maxDistance:e}:void 0),s=vu().filter(e=>!r.includes(e));return y(`div`,{className:`mt-1 space-y-1.5`,children:[P(qf,{value:r,placeholder:n(`system.notificationConditionWidgets.plateText`,`Plate text…`),onChange:a}),s.length>0&&y(`div`,{className:`flex flex-wrap items-center gap-1`,children:[P(`span`,{className:`text-[10px] text-foreground-subtle`,children:n(`system.notificationConditionWidgets.seen`,`Seen:`)}),s.slice(0,12).map(e=>P(`button`,{type:`button`,onClick:()=>a([...r,e]),className:`rounded border border-border px-1.5 py-0.5 text-[10px] text-foreground-subtle hover:bg-surface-hover hover:text-foreground`,children:e},e))]}),y(`label`,{className:`flex items-center gap-2 text-[11px] text-foreground-subtle`,children:[n(`system.notificationConditionWidgets.maxDistance`,`Max distance`),P(Un,{type:`number`,min:0,max:3,step:1,value:i,className:`max-w-[5rem]`,onChange:e=>{let t=Number(e.target.value);o(Number.isFinite(t)?Math.max(0,Math.min(3,t)):1)}})]})]})}function op({gateable:e,value:t,onChange:n}){let{t:r}=H(),i=Uf(),a=e.find(e=>e.id===t?.deviceId),o=new Set(t?.states??[]),s=e=>{let t=Number(e);if(!Number.isFinite(t)||t===0)return n(void 0);n({deviceId:t,states:[]})},c=e=>{if(t===void 0)return;let r=new Set(o);r.has(e)?r.delete(e):r.add(e),n(r.size===0?void 0:{deviceId:t.deviceId,states:[...r]})};return y(`div`,{className:`mt-1 space-y-2`,children:[P(Wn,{value:t===void 0?``:String(t.deviceId),options:[{value:``,label:r(`system.notificationConditionWidgets.noDeviceGate`,`— no device gate —`)},...e.map(e=>({value:String(e.id),label:e.name}))],onChange:e=>s(e.target.value)}),a!==void 0&&P(`div`,{className:`flex flex-wrap gap-1.5`,children:a.states.map(e=>P(`button`,{type:`button`,onClick:()=>c(e),className:o.has(e)?`rounded-md border border-primary bg-primary/10 px-2 py-0.5 text-[11px] text-primary`:`rounded-md border border-border px-2 py-0.5 text-[11px] text-foreground-subtle`,children:i(e)},e))}),a!==void 0&&a.states.length===0&&P(`p`,{className:`text-[10px] text-foreground-subtle mt-0.5`,children:r(`system.notificationConditionWidgets.thisDeviceReportsNoState`,`This device reports no state the gate can read, so it cannot arm a rule.`)}),t!==void 0&&P(`p`,{className:`text-[10px] text-foreground-subtle mt-0.5`,children:r(`system.notificationConditionWidgets.theRuleIsSilentWhile`,`The rule is silent while the device is in any other state — including when its state cannot be read at all.`)})]})}function sp(e,t){let n=t(e.verdict);return e.latched?`${n} · ${t(`latched`)}`:n}function cp({scenes:e,value:t,onChange:n}){let{t:r}=H(),i=Uf(),a=e.find(e=>e.sceneId===t?.sceneId),o=r=>{if(r===``)return n(void 0);let i=e.find(e=>e.sceneId===r);if(i===void 0)return n(void 0);n({sceneId:r,deviceId:i.deviceId,requiredState:t?.requiredState??`diverged`,...t?.latched===void 0?{}:{latched:t.latched}})},s=e=>{t!==void 0&&n({...t,requiredState:e===`matched`?`matched`:`diverged`})},c=e=>{if(t!==void 0){if(e===``){let{latched:e,...r}=t;return n(r)}n({...t,latched:e===`latched`})}};return e.length===0?P(`p`,{className:Gf,children:r(`notificationRules.scene.none`,`No scenes yet — create one on the Scenes page.`)}):y(`div`,{className:`mt-1 space-y-2`,children:[P(Wn,{value:t?.sceneId??``,options:[{value:``,label:r(`notificationRules.scene.noGate`,`— no scene gate —`)},...e.map(e=>({value:e.sceneId,label:`${e.cameraName} · ${e.label} — ${sp(e,i)}`}))],onChange:e=>o(e.target.value)}),t!==void 0&&y(`div`,{className:`flex flex-wrap items-center gap-2`,children:[y(`label`,{className:`flex items-center gap-2 text-[11px] text-foreground-subtle`,children:[r(`notificationRules.scene.onlyWhile`,`Only while it is`),P(Wn,{value:t.requiredState,options:[{value:`diverged`,label:i(`diverged`)},{value:`matched`,label:i(`matched`)}],onChange:e=>s(e.target.value)})]}),y(`label`,{className:`flex items-center gap-2 text-[11px] text-foreground-subtle`,children:[r(`notificationRules.scene.read`,`Read`),P(Wn,{value:t.latched===void 0?``:t.latched?`latched`:`live`,options:[{value:``,label:a===void 0?r(`notificationRules.scene.readOwn`,`The scene's own setting`):`${r(`notificationRules.scene.readOwn`,`The scene's own setting`)} (${i(a.emit)})`},{value:`latched`,label:i(`latched`)},{value:`live`,label:i(`live`)}],onChange:e=>c(e.target.value)})]})]}),a!==void 0&&y(`p`,{className:`text-[10px] text-foreground-subtle mt-0.5`,children:[r(`notificationRules.scene.rightNow`,`Right now:`),` `,sp(a,i)]}),t!==void 0&&a===void 0&&P(`p`,{className:`text-[10px] text-foreground-subtle mt-0.5`,children:r(`notificationRules.scene.missing`,`This scene no longer exists — pick another or remove the gate.`)})]})}var lp={days:[0,1,2,3,4,5,6],minute:480},up=[{value:1,get label(){return V.t(`helpers.notificationSystemEventDelivery.wd_mon`)}},{value:2,get label(){return V.t(`helpers.notificationSystemEventDelivery.wd_tue`)}},{value:3,get label(){return V.t(`helpers.notificationSystemEventDelivery.wd_wed`)}},{value:4,get label(){return V.t(`helpers.notificationSystemEventDelivery.wd_thu`)}},{value:5,get label(){return V.t(`helpers.notificationSystemEventDelivery.wd_fri`)}},{value:6,get label(){return V.t(`helpers.notificationSystemEventDelivery.wd_sat`)}},{value:0,get label(){return V.t(`helpers.notificationSystemEventDelivery.wd_sun`)}}];function dp(e){let t=Math.floor(e/60),n=e%60;return`${String(t).padStart(2,`0`)}:${String(n).padStart(2,`0`)}`}function fp(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 pp(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 mp(e){let t=Object.entries(e).map(([e,t])=>`${e} ${String(t)}`);return t.length>0?V.t(`helpers.notificationSystemEventDelivery.dropped`,{parts:t.join(`, `)}):null}function hp(e,t,n,r=`rule`){if(e===`error`)return pp(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=mp(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 gp(e,t){return{...e,schedule:t}}function _p(e,t){let{split:n,...r}=e;return t===`section`?{...r,split:t}:r}function vp(e){return dp(e)}function yp(e){return fp(e)}function bp(){return{days:[1,2,3,4,5],startMinute:540,endMinute:1080}}function xp(e){return{days:[...lp.days],minute:e}}var Sp=`Always active — add a window to restrict when the rule fires.`;function Cp({value:e,onChange:t,mode:n=`windows`,defaultMinute:r=lp.minute,emptyHint:i}){return n===`times`?P(Tp,{value:e,onChange:t,defaultMinute:r}):P(wp,{value:e,onChange:t,emptyHint:i??Sp})}function wp({value:e,onChange:t,emptyHint:n}){let{t:r}=H(),i=e?.windows??[],a=e?.invert??!1,o=(n,r)=>{if(n.length===0){t(void 0);return}t({windows:n,...r?{invert:!0}:{},...e?.timezone?{timezone:e.timezone}:{}})},s=()=>o([...i,bp()],a),c=e=>o(i.filter((t,n)=>n!==e),a),l=(e,t)=>o(i.map((n,r)=>r===e?t:n),a);return y(`div`,{className:`mt-1 space-y-2`,"data-testid":`schedule-field-windows`,children:[i.length===0?P(`p`,{className:Gf,children:n}):i.map((e,t)=>P(Ep,{window:e,onChange:e=>l(t,e),onRemove:()=>c(t)},t)),y(`div`,{className:`flex items-center gap-3`,children:[y(`button`,{type:`button`,onClick:s,className:`flex items-center gap-1 rounded-md bg-surface-hover px-2 py-1 text-[11px] text-foreground-subtle hover:text-foreground`,children:[P(Ie,{className:`h-3 w-3`}),` `,r(`system.notificationScheduleField.addWindow`)]}),i.length>0&&y(`label`,{className:`flex items-center gap-1.5 text-[11px] text-foreground-subtle`,children:[P(`input`,{type:`checkbox`,checked:a,onChange:e=>o([...i],e.target.checked),className:`accent-primary`}),r(`system.notificationScheduleField.activeOutsideTheWindows`,`Active outside the windows`)]})]})]})}function Tp({value:e,onChange:t,defaultMinute:n}){let{t:r}=H(),i=e?.timezone,a=e===void 0?{times:[],approximated:!1}:it(e);if(a===null)return y(`div`,{className:`mt-1 space-y-2`,"data-testid":`schedule-field-times-fallback`,children:[P(`p`,{className:Gf,children:r(`system.notificationScheduleField.invertedScheduleShownAsBands`,`Inverted schedule — shown as bands. Clear the invert flag (or the windows) to author punctual times.`)}),P(wp,{value:e,onChange:t,emptyHint:Sp})]});let o=a.times,s=e=>{if(e.length===0){t(void 0);return}t(Lt(e,i))};return y(`div`,{className:`mt-1 space-y-2`,"data-testid":`schedule-field-times`,children:[a.approximated&&P(`p`,{className:`text-[10px] text-foreground-subtle mt-0.5`,"data-testid":`schedule-field-times-approximated`,children:r(`system.notificationScheduleField.shownAsSendAtTimes`,`Shown as send-at times from each window's end (when the summary fires). Edit or save to store them as punctual one-minute windows.`)}),o.length===0?P(`p`,{className:Gf,children:r(`system.notificationScheduleField.noTimesYetAddOne`,`No times yet — add one to send on those days at that clock time.`)}):o.map((e,t)=>P(Dp,{time:e,index:t,onChange:e=>s(o.map((n,r)=>r===t?e:n)),onRemove:o.length>1?()=>s(o.filter((e,n)=>n!==t)):void 0},t)),y(`button`,{type:`button`,onClick:()=>s([...o,xp(n)]),className:`flex items-center gap-1 rounded-md bg-surface-hover px-2 py-1 text-[11px] text-foreground-subtle hover:text-foreground`,"data-testid":`schedule-field-add-time`,children:[P(Ie,{className:`h-3 w-3`}),` `,r(`system.notificationScheduleField.addTime`)]})]})}function Ep({window:e,onChange:t,onRemove:n}){let{t:r}=H();return y(`div`,{className:`space-y-1.5 rounded-md border border-border p-2`,children:[y(`div`,{className:`flex items-center gap-2 text-xs`,children:[P(`input`,{type:`time`,value:vp(e.startMinute),onChange:n=>t({...e,startMinute:yp(n.target.value)}),className:`rounded-md border border-border bg-background px-1 py-0.5`}),P(`span`,{className:`text-foreground-subtle`,children:`→`}),P(`input`,{type:`time`,value:vp(e.endMinute),onChange:n=>t({...e,endMinute:yp(n.target.value)}),className:`rounded-md border border-border bg-background px-1 py-0.5`}),P(`span`,{className:`flex-1`}),P(`button`,{type:`button`,onClick:n,"aria-label":r(`system.notificationScheduleField.removeWindow`,`Remove window`),className:`text-foreground-subtle hover:text-danger`,children:P(R,{className:`h-3.5 w-3.5`})})]}),P(Op,{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 Dp({time:e,index:t,onChange:n,onRemove:r}){let{t:i}=H();return y(`div`,{className:`space-y-1.5 rounded-md border border-border p-2`,children:[y(`div`,{className:`flex items-center gap-2 text-xs`,children:[P(`span`,{className:`text-foreground-subtle`,children:i(`system.notificationScheduleField.at`,`At`)}),P(`input`,{type:`time`,value:dp(e.minute),onChange:t=>n({...e,minute:fp(t.target.value)}),className:`rounded-md border border-border bg-background px-1 py-0.5`,"data-testid":`schedule-field-time-${String(t)}`}),P(`span`,{className:`flex-1`}),r!==void 0&&P(`button`,{type:`button`,onClick:r,"aria-label":i(`system.notificationScheduleField.removeTime`,`Remove time`),className:`text-foreground-subtle hover:text-danger`,children:P(R,{className:`h-3.5 w-3.5`})})]}),P(Op,{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 Op({days:e,onToggle:t}){return P(`div`,{className:`flex flex-wrap gap-1`,children:up.map(n=>P(`button`,{type:`button`,onClick:()=>t(n.value),className:`rounded px-1.5 py-0.5 text-[10px] ${e.includes(n.value)?`bg-primary text-primary-foreground`:`bg-surface-hover text-foreground-subtle`}`,children:n.label},n.value))})}function kp(e){return e>=8}a();function Ap(e){if(typeof e!=`object`||!e)return;let t=Reflect.get(e,`windows`);if(!(!Array.isArray(t)||t.length===0))return e}function jp(e){return e.type===`multiselect`}function Mp(e){let t=e.suggestions;return t===void 0||t.length===0?[]:t.map(e=>({value:e,label:e}))}function Np(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 Pp(e){return Array.isArray(e)?e.filter(e=>typeof e==`string`):[]}function Fp({field:e,values:t,onChange:n,onChangeMany:r,disabled:i,translationFn:a,onTestField:o,externalProbe:s,allFields:c,onAction:l}){let{t:u}=H();if(e.type===`tags`){if(!xn(e,t,c))return null;let r=e.creatable!==!1;return P(tr,{mode:`multi`,options:Mp(e),value:Pp(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:Lp(e.label,a),description:e.description===void 0?void 0:Lp(e.description,a),placeholder:e.placeholder??u(`formBuilder.formBuilder.searchOrAdd`,`Search or add…`),testId:`config-tags-${e.key}`})}if(e.type===`schedule`){if(!xn(e,t,c))return null;let r=Lp(e.label,a),i=e.description===void 0?void 0:Lp(e.description,a),o=e.mode===`times`?`times`:`windows`;return y(`div`,{className:`space-y-1`,"data-testid":`config-schedule-${e.key}`,children:[r!==void 0&&P(`label`,{className:`block text-[11px] font-medium text-foreground-subtle`,children:r}),i!==void 0&&P(`p`,{className:`text-[10px] text-foreground-subtle`,children:i}),P(Cp,{mode:o,value:Ap(t[e.key]),onChange:t=>n(e.key,t)})]})}return jp(e)&&(kp(e.options.length)||e.creatable===!0)?xn(e,t,c)?P(tr,{mode:`multi`,options:Np(e.options),value:Pp(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:Lp(e.label,a),description:e.description===void 0?void 0:Lp(e.description,a),placeholder:e.placeholder??u(`formBuilder.formBuilder.searchToAdd`,`Search to add…`),testId:`config-multiselect-${e.key}`,listboxId:`msel-${e.key}`}):null:P($n,{field:e,values:t,onChange:n,onChangeMany:r,disabled:i,translationFn:a,onTestField:o,externalProbe:s,allFields:c,onAction:l})}function Ip(e){return/^[a-zA-Z0-9_]+(\.[a-zA-Z0-9_]+)+$/.test(e)}function Lp(e,t){if(e!==void 0)return t&&Ip(e)?t(e):e}function Rp({section:e,values:t,onChange:n,onChangeMany:r,disabled:i,translationFn:a,onTestField:o,probeResults:s,onAction:c}){let[l,u]=f(e.defaultCollapsed??!1),d=e.style===`accordion`;if(e.fields.reduce((n,r)=>n+ +!!xn(r,t,e.fields),0)===0)return null;let p=e.fields,m=e.columns??2,h=m===1?`grid-cols-1`:m===3?`grid-cols-1 @[480px]:grid-cols-2 @[880px]:grid-cols-3`:m===4?`grid-cols-1 @[480px]:grid-cols-2 @[1140px]:grid-cols-4`:`grid-cols-1 @[480px]:grid-cols-2`,g=e.fields.length===1&&e.fields[0]?.type===`widget`?e.fields[0]:void 0,_=g!==void 0||!e.title&&!e.description;return y(`div`,{className:`@container rounded-lg border border-border bg-surface p-3`,style:{containerType:`inline-size`},"data-settings-section":e.id,children:[!_&&y(`div`,{className:[`flex items-center justify-between mb-2`,d?`cursor-pointer`:``].join(` `),onClick:d?()=>u(e=>!e):void 0,children:[y(`div`,{children:[e.title&&P(`h3`,{className:`text-[11px] font-semibold text-foreground-subtle uppercase tracking-wider`,children:Lp(e.title,a)}),e.description&&P(`p`,{className:`text-[10px] text-foreground-subtle mt-0.5`,children:Lp(e.description,a)})]}),d&&P(`span`,{className:`text-foreground-subtle text-xs ml-2`,children:l?`▸`:`▾`})]}),!(l&&!_)&&(g===void 0?P(E,{children:P(`div`,{className:`grid ${h} gap-x-3 gap-y-2.5`,children:p.map(l=>P(Fp,{field:l,values:t,onChange:n,onChangeMany:r,disabled:i,translationFn:a,onTestField:o,externalProbe:s?.[l.key],allFields:e.fields,onAction:c},l.key))})}):P($n,{field:g,values:t,onChange:n,onChangeMany:r,disabled:i,translationFn:a,onTestField:o,externalProbe:s?.[g.key],allFields:e.fields,onAction:c},g.key))]})}function zp({schema:e,values:t,onChange:n,disabled:r,translationFn:i,onTestField:a,probeResults:o,onClearProbe:s,onAction:c,visibilityContext:l}){let u=l?{...l,...t}:t,d=(e,r)=>{n({...t,[e]:r}),s?.(e)},f=e=>{n({...t,...e});for(let t of Object.keys(e))s?.(t)};return P(`div`,{className:`space-y-4`,children:e.sections.map((e,t)=>P(Rp,{section:e,values:u,onChange:d,onChangeMany:f,disabled:r,translationFn:i,onTestField:a,probeResults:o,onAction:c},`${e.id}-${t}`))})}function Bp({pendingCount:e,onSave:t,onDiscard:n,saving:r=!1,saveLabel:i=`Save`,discardLabel:a=`Discard`}){let{t:o}=H();return e<=0?null:y(`div`,{className:`sticky bottom-0 -mb-3 flex items-center justify-between gap-3 rounded-lg border border-primary/40 bg-primary/5 px-3 py-2 shadow-sm z-10`,children:[P(`span`,{className:`text-xs text-foreground`,children:o(`formBuilder.saveBar.unsavedChanges`,{count:e})}),y(`div`,{className:`flex items-center gap-2`,children:[P(`button`,{type:`button`,onClick:n,disabled:r,className:`inline-flex items-center rounded-md border border-border px-2.5 py-1 text-xs text-foreground-subtle hover:bg-surface-hover disabled:opacity-50`,children:a}),P(`button`,{type:`button`,onClick:t,disabled:r,className:`inline-flex items-center rounded-md bg-primary px-3 py-1 text-xs font-medium text-primary-foreground hover:bg-primary/90 disabled:opacity-50`,children:r?o(`formBuilder.formSaveBar.saving`,`Saving…`):i})]})]})}function Vp({tabs:e,activeId:t,onChange:n,countByTab:r,pendingByTab:i}){return e.length===0?null:P(`div`,{className:`flex flex-wrap items-center gap-1 border-b border-border shrink-0`,children:e.map(e=>{let a=e.id===t,o=r?.get(e.id)??0,s=i?.get(e.id)??0;return y(`button`,{type:`button`,onClick:()=>n(e.id),className:`relative shrink-0 px-3 py-1.5 text-xs font-medium rounded-t-md transition-colors -mb-px border-b-2 whitespace-nowrap ${a?`text-primary border-primary bg-primary/5`:`text-foreground-subtle border-transparent hover:text-foreground hover:bg-surface-hover`}`,children:[e.label,o>0&&y(`span`,{className:`ml-1.5 text-[10px] opacity-60`,children:[`(`,o,`)`]}),s>0&&P(`span`,{className:`ml-1.5 inline-flex h-1.5 w-1.5 rounded-full bg-primary`})]},e.id)})})}a();function Hp({schema:e,values:t,pendingKeys:n,onChange:r,onAction:i,onSave:a,onDiscard:o,disabled:s,activeSubTab:c,onSubTabChange:l,flattenTabs:u=!1,visibilityContext:p,hideSaveBar:m=!1}){let h=e.tabs??[],g=d(()=>{let t=new Map;for(let n of e.sections){let e=n.tab??`general`,r=t.get(e)??[];r.push(n),t.set(e,r)}return t},[e.sections]),_=new Set(h.map(e=>e.id)),v=[...h,...[...g.keys()].filter(e=>!_.has(e)).map(e=>({id:e,label:e,icon:`wrench`,order:100}))],b=v[0]?.id??`general`,[x,S]=f(b),C=l!==void 0,w=new Set(v.map(e=>e.id)),T=M(new Set);for(let e of w)T.current.add(e);let E=T.current,D=(e=>e&&(w.has(e)||E.has(e))?e:b)(C?c:x),O=e=>{C?l(e):S(e)},k=g.get(D)??[],A={sections:k.length<=1?k.length===1?[{...k[0],title:``}]:k:k.every(e=>!e.title)?[{...k[0],title:``,fields:k.flatMap(e=>e.fields)}]:k},j=m?null:P(Bp,{pendingCount:n.length,onSave:()=>a(n),onDiscard:()=>o(n),saving:s});if(u||v.length<=1)return y(`div`,{className:`flex flex-col gap-3`,children:[P(zp,{schema:e,values:t,onChange:r,onAction:i,disabled:s,visibilityContext:p}),j]});let N=new Map,F=new Map;for(let[e,t]of g){N.set(e,t.length);let r=new Set,i=e=>{for(let t of e)if(`key`in t&&typeof t.key==`string`&&r.add(t.key),t.type===`group`)i(t.fields);else if(t.type===`sub-tabs`)for(let e of t.tabs)i(e.fields)};for(let e of t)i(e.fields);let a=n.filter(e=>r.has(e)).length;a>0&&F.set(e,a)}return y(`div`,{className:`flex flex-col gap-3`,children:[P(Vp,{tabs:v.map(e=>({id:e.id,label:e.label})),activeId:D,onChange:O,countByTab:N,pendingByTab:F}),P(Mr,{tabKey:D,children:P(zp,{schema:A,values:t,onChange:r,onAction:i,disabled:s,visibilityContext:p})}),j]})}var Up=`device-export`,Wp=`export`,Gp=`Export`;function Kp(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(Kp):e.type===`sub-tabs`?e.tabs.some(e=>e.fields.some(Kp)):e.writerCapName===Up}function qp(e){return e.tab===`export`?!0:e.fields.some(Kp)}var Jp=`host/extensions-panel`;function Yp(e){return e.type===`widget`?e.widgetId===Jp:e.type===`group`?e.fields.some(Yp):e.type===`sub-tabs`?e.tabs.some(e=>e.fields.some(Yp)):!1}function Xp(e){return e.fields.some(Yp)}function Zp(e,t){return!t&&e!==void 0&&kt.includes(e)}function Qp(e){return e.location!==`top-tab`&&e.location!==`hero`&&!qp(e)&&!Xp(e)}function $p(e,t,n,r){return!r||Zp(t,n)?!0:(e??[]).some(Qp)}function em(e,t){for(let n of e){if(n.type===`group`){em(n.fields,t);continue}if(n.type===`sub-tabs`){for(let e of n.tabs)em(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 tm(e){let t={};for(let n of e)em(n.fields,t);return t}a();function nm(e,t){return t&&t===`admin`?e:!0}function rm(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?qp(e)&&qp(t)?e.id.localeCompare(t.id):(e.order??0)-(t.order??0):n.localeCompare(r)})};return e.tabs?{...t,tabs:e.tabs}:t}function im(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 am(e){return e.key}function om(e){if(!im(e))return e.value}function sm(e){return im(e)?null:e}function cm(e,t){for(let n of e)if(t(n),n.type===`group`)cm(n.fields,t);else if(n.type===`sub-tabs`)for(let e of n.tabs)cm(e.fields,t)}function lm(e){if(!e)return{};let t={};for(let n of e.sections)cm(n.fields,e=>{let n=am(e);n!==null&&(t[n]=om(e))});return t}function um(e,t){if(!e)return null;let n=null;for(let r of e.sections)if(cm(r.fields,e=>{if(n!==null||am(e)!==t)return;let r=sm(e);r&&r.writerCapName&&r.writerAddonId&&(n={capName:r.writerCapName,addonId:r.writerAddonId})}),n!==null)break;return n}function dm(e){return{...e,fields:e.fields.map(fm)}}function fm(e){return e.type===`separator`||e.type===`info`||e.type===`button`||e.type===`object-array`?e:{...e,readonlyField:!0}}function pm(e,t){return e&&{...e,sections:e.sections.map(e=>({...e,fields:e.fields.map(e=>{let n=sm(e);return n?nm(t,n.minRole)?e:fm(e):e})}))}}function mm({deviceId:e,sectionFilter:t,activeSubTab:n,onSubTabChange:r,flattenSubTabs:i,subTabGrouping:a}){let{t:o}=H(),c=j(),{user:l}=Xl(),u=l?.isAdmin===!0,f=M(!1),{data:m,isLoading:h}=Qn({deviceId:e},{refetchInterval:()=>f.current?!1:2500,enabled:Number.isFinite(e)}),{data:g}=fr({deviceId:e},{enabled:Number.isFinite(e)}),_=m?.settings??null,v=m?.live??null,b=d(()=>{if(!_&&!v)return null;let e=_?.sections??[],n=(v?.sections??[]).map(dm),r=[...e,...n],i=t?r.filter(t):r.filter(Qp);if(i.length===0)return null;if(a){let e=i.map(e=>({...e,tab:a.groupOf(e)})),t=new Set(e.map(e=>e.tab)),n=a.tabs.filter(e=>t.has(e.id));return n.length>0?{tabs:n,sections:e}:{sections:e}}let o=new Set;for(let e of i)o.add(e.tab??`general`);let s=[..._?.tabs??[],...(v?.tabs??[]).filter(e=>!(_?.tabs??[]).some(t=>t.id===e.id))].filter(e=>o.has(e.id));return s.length>0?{tabs:s,sections:i}:{sections:i}},[_,v,t,a]),x=d(()=>tm([..._?.sections??[],...v?.sections??[]]),[_,v]),S=d(()=>rm(b),[b]),C=d(()=>pm(S,u),[S,u]),w=d(()=>lm(C),[C]),T=zn(),E=Nn(),D=Dn(),O=Sr(),k=Jn({onSuccess:()=>{c.invalidateQueries({queryKey:[[`deviceManager`,`getDeviceAggregate`]]})}}),A={isPending:k.isPending,mutate:t=>{k.mutate({deviceId:e,changes:[...t]})}},N=Ql({schema:C,serverValues:w,onImmediateSave:p(e=>{let t=Object.entries(e).map(([e,t])=>{let n=um(C,e);return n?{writerCapName:n.capName,writerAddonId:n.addonId,key:e,value:t}:null}).filter(e=>e!==null);t.length>0&&A.mutate(t)},[C,A]),onDeferredSave:p(async t=>{let n=Object.entries(t).map(([e,t])=>{let n=um(C,e);return n?{writerCapName:n.capName,writerAddonId:n.addonId,key:e,value:t}:null}).filter(e=>e!==null);if(n.length!==0)try{let t=await k.mutateAsync({deviceId:e,changes:n});if(t.failures.length>0)throw Error(t.failures.map(e=>e.error).join(`; `))}finally{await c.invalidateQueries({queryKey:[[`deviceManager`,`getDeviceAggregate`]]})}},[C,k,e,c])}),{values:F,pendingKeys:I,handleChange:ee,handleSave:L,handleDiscard:te}=N;f.current=N.editingPaused;let ne=gc(),re=M(L),ie=M(te);re.current=L,ie.current=te;let R=ne?.register,ae=k.isError?k.error instanceof Error?k.error.message:String(k.error):null,z=I.join(`\0`);if(s(()=>{if(R===void 0)return;let e=z===``?[]:z.split(`\0`);return R({id:`export`,dirty:e.length>0,saving:k.isPending,error:ae,save:()=>(re.current(e),Promise.resolve()),discard:()=>ie.current(e)})},[R,z,k.isPending,ae]),h)return y(`div`,{className:`flex items-center justify-center py-12 text-foreground-subtle`,children:[P(Re,{className:`h-4 w-4 animate-spin mr-2`}),P(`span`,{className:`text-xs`,children:o(`device.deviceAggregateSection.loadingDeviceAggregate`,`Loading device aggregate…`)})]});if(!C||C.sections.length===0)return P(`div`,{className:`text-xs text-foreground-subtle italic py-4 text-center`,children:o(`device.deviceAggregateSection.noAggregateContributionsForThis`,`No aggregate contributions for this device.`)});async function oe(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=nn(e,r);await T.mutateAsync({brokerId:i}),c.invalidateQueries({queryKey:[[`deviceManager`,`getDeviceAggregate`]]});return}if(t===`test-probe`){if(!g)return{status:`error`,error:o(`device.deviceAggregateSection.metadataNotLoaded`)};try{return await D.mutateAsync({addonId:g.addonId,type:g.type,key:n,value:r})}catch(e){return{status:`error`,error:e instanceof Error?e.message:String(e)}}}if(t===`refresh-probe`){if(!n.startsWith(`probedInfo:`))throw Error(`refresh-probe: unrecognised key "${n}" (expected "probedInfo:<streamId>")`);let t=n.slice(11);if(!t)throw Error(`refresh-probe: key "${n}" has no streamId after prefix`);let r=nn(e,t),i=await E.mutateAsync({brokerId:r});return c.invalidateQueries({queryKey:[[`deviceManager`,`getDeviceAggregate`]]}),i}if(t===`device-custom-action`){let t=await O.mutateAsync({deviceId:e,action:n,input:r});return c.invalidateQueries({queryKey:[[`deviceManager`,`getDeviceAggregate`]]}),t}throw Error(`[device-aggregate] unknown action "${t}"`)}return P(Hp,{schema:C,values:F,pendingKeys:I,onChange:ee,onAction:oe,onSave:L,onDiscard:te,hideSaveBar:ne!==null,disabled:A.isPending,activeSubTab:n,onSubTabChange:r,flattenTabs:i,visibilityContext:x})}var hm=`w-full min-w-0 px-1.5 py-0.5 text-[11px] bg-background border border-border rounded focus:outline-none focus:border-primary disabled:opacity-50 disabled:cursor-not-allowed`,gm=0,_m=10;function vm(e){if(e.trim()===``)return``;let t=Number.parseInt(e,10);return Number.isFinite(t)?String(t<gm?gm:t>_m?_m:t):``}function ym({value:e,onChange:t,disabled:n=!1,placeholder:r,className:i,id:a,"aria-label":o}){return P(`input`,{type:`number`,min:gm,max:_m,step:1,id:a,className:i??hm,"aria-label":o,placeholder:r,value:e,onChange:e=>{t(vm(e.target.value))},disabled:n})}function bm({deviceName:e,value:t,inheritedIcon:n,inheritedLabel:r,disabled:i,onChange:a}){let{t:o}=H(),s={trigger:o(`deviceDisplay.pickIcon`,{name:e}),panel:o(`deviceDisplay.iconFor`,{name:e}),searchPlaceholder:o(`deviceDisplay.iconSearchPlaceholder`),clear:r,noMatches:o(`deviceDisplay.iconNoMatches`)};return y(`div`,{className:`flex items-center gap-2`,children:[P(si,{value:t===``?null:t,onPick:e=>a(e??``),categoryLabel:e=>o(`deviceDisplay.iconCategory.${e}`,{defaultValue:$t(e)}),fallbackGlyph:n,labels:s,disabled:i}),P(`span`,{className:`text-[11px] text-foreground-subtle`,children:t===``?r:t})]})}a();var xm=`w-full min-w-0 px-1.5 py-0.5 text-[11px] bg-background border border-border rounded focus:outline-none focus:border-primary disabled:opacity-50`,Sm={icon:``,label:``,unit:``,precision:``,hidden:!1};function Cm(e,t){return e.icon===t.icon&&e.label===t.label&&e.unit===t.unit&&e.precision===t.precision&&e.hidden===t.hidden}function wm(e){return{icon:e?.icon??``,label:e?.label??``,unit:e?.unit??``,precision:e?.precision===void 0?``:String(e.precision),hidden:e?.hidden===!0}}function Tm(e){if(typeof e!=`object`||!e)return;let t=e.unit;return typeof t==`string`?t:void 0}function Em(e){if(e.trim()===``)return;let t=Number.parseInt(e,10);return Number.isFinite(t)?t:void 0}function Dm(e,t){let n=Em(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 Om({deviceId:e}){let t=Ge();Vr();let{t:n}=H(),r=ze(),i=j(),{data:a}=fr({deviceId:e},{enabled:e>0}),o=typeof a?.role==`string`&&a.role.length>0?a.role:null,c=o===null?void 0:Rn[o],l=c?.kind===`numeric`,u=String(a?.type??``),d=o!==null||a?.parentDeviceId!==null&&a?.parentDeviceId!==void 0,p=Gr(r.trpcClient,e,o??``),m=c?.kind===`numeric`?c.canonicalUnit:void 0,h=Tm(p)??m,g=h===void 0?void 0:at(h)??h,_=g===void 0?void 0:st(g),[v,b]=f(null),x=v??wm(a?.display),S=br({onSuccess:()=>{i.invalidateQueries({queryKey:[[`deviceManager`]]})}}),{data:C}=bn({},{staleTime:6e4,enabled:o!==null}),w=ei({onSuccess:()=>{i.invalidateQueries({queryKey:[[`deviceManager`]]})}}),T=gc(),D=wm(a?.display),O=a!=null&&!Cm(x,D),k=S.isError?S.error instanceof Error?S.error.message:String(S.error):null,A=M(async()=>{}),N=M(()=>{});A.current=async()=>{a!=null&&await S.mutateAsync({deviceId:e,display:Dm(x,a.display)})},N.current=()=>b(D);let F=T?.register;if(s(()=>{if(!(F===void 0||a==null))return F({id:`display`,dirty:O,saving:S.isPending,error:k,save:()=>A.current(),discard:()=>N.current()})},[F,a,O,S.isPending,k]),a==null)return null;let I=e=>{b({...x,...e})},ee=()=>{S.mutate({deviceId:e,display:Dm(x,a.display)})},L=()=>{b(Sm),S.mutate({deviceId:e,display:null})},te=()=>{if(o===null)return;let e=Em(x.precision),t={...x.icon===``?{}:{icon:x.icon},...x.unit===``?{}:{unit:x.unit},...e===void 0?{}:{precision:e}},n={...C?.defaults,[o]:t};w.mutate({defaults:n})},ne=o===null?void 0:C?.defaults[o]?.icon,re=ne===void 0?void 0:Bn(ne),ie=o===null?mr(u,t):dr(o,t),R={icon:re??ie.icon,label:re===void 0?ie.label:String(ne)},ae=o===null&&u===Yt.Container?n(`deviceDisplay.inheritedContainer`):re===void 0?n(`deviceDisplay.inherited`,{name:R.label}):n(`deviceDisplay.inheritedRoleDefault`,{icon:R.label,role:ie.label}),z=typeof a.name==`string`?a.name:`#${String(e)}`,oe=o===null?``:dr(o,t).label;return y(`div`,{className:`rounded-lg border border-border bg-surface overflow-hidden`,children:[P(`div`,{className:`border-b border-border px-3 sm:px-4 py-2`,children:P(`h2`,{className:`text-[11px] font-semibold text-foreground uppercase tracking-wider`,children:n(`deviceDisplay.title`)})}),y(`div`,{className:`divide-y divide-border`,children:[P(X,{label:n(`deviceDisplay.icon`),value:P(bm,{deviceName:z,value:x.icon,inheritedIcon:R.icon,inheritedLabel:ae,disabled:S.isPending,onChange:e=>I({icon:e})})}),d&&P(X,{label:n(`deviceDisplay.label`),value:P(`input`,{type:`text`,className:xm,"aria-label":n(`deviceDisplay.label`),placeholder:o===null?z:oe,value:x.label,onChange:e=>I({label:e.target.value})})}),l&&y(E,{children:[P(X,{label:n(`deviceDisplay.unit`),value:P(jn,{dimension:_,value:x.unit,onChange:e=>I({unit:e}),disabled:S.isPending,"aria-label":n(`deviceDisplay.unit`),inheritLabel:n(`deviceDisplay.unitSource`,{unit:g===void 0?``:` (${g})`}),emptyReason:n(`deviceDisplay.unitSource`,{unit:``})})}),P(X,{label:n(`deviceDisplay.precision`),value:P(ym,{"aria-label":n(`deviceDisplay.precision`),placeholder:n(`deviceDisplay.precisionInherit`),value:x.precision,onChange:e=>I({precision:e}),disabled:S.isPending})})]}),P(X,{label:n(`deviceDisplay.hidden`),value:y(`label`,{className:`flex items-center gap-2`,children:[P(`input`,{type:`checkbox`,checked:x.hidden,onChange:e=>I({hidden:e.target.checked})}),P(`span`,{className:`text-[11px] text-foreground`,children:n(`deviceDisplay.hideFromLists`)})]})})]}),(T===null||o!==null)&&y(`div`,{className:`border-t border-border px-3 sm:px-4 py-2 flex flex-wrap items-center gap-2`,children:[T===null&&P(`button`,{type:`button`,className:`rounded bg-primary px-3 py-1 text-[11px] font-medium text-primary-foreground disabled:opacity-50`,onClick:ee,disabled:S.isPending,children:n(`common.save`)}),T===null&&P(`button`,{type:`button`,className:`rounded border border-border px-3 py-1 text-[11px] text-foreground-subtle`,onClick:L,disabled:S.isPending,children:n(`common.reset`)}),o!==null&&P(`button`,{type:`button`,className:`rounded border border-border px-3 py-1 text-[11px] text-foreground-subtle`,onClick:te,disabled:w.isPending,title:n(`deviceDisplay.setRoleDefaultTitle`,{role:oe}),children:n(`deviceDisplay.setRoleDefault`,{role:oe})})]})]})}a();function km({deviceId:e,onClose:t}){let{t:n}=H(),[r,i]=f(`info`),{data:a}=fr({deviceId:e},{enabled:e>0}),o=zr(e),s=tc(o.presence,o.list),c=r===`history`&&!s?`info`:r,l=typeof a?.name==`string`&&a.name.length>0?a.name:`#${String(e)}`,u=typeof a?.name==`string`?a.name:``,d=typeof a?.location==`string`?a.location:``,p=[[`info`,n(`deviceQuickDetail.tabInfo`,{defaultValue:`Device info`})],[`display`,n(`deviceQuickDetail.tabDisplay`,{defaultValue:`Display`})],[`export`,n(`deviceQuickDetail.tabExport`,{defaultValue:`Export`})],...s?[[`history`,n(`deviceQuickDetail.tabHistory`,{defaultValue:`History`})]]:[]];return P(Lr,{open:!0,onOpenChange:e=>!e&&t(),children:P(wr,{width:`lg`,scroll:`body`,children:y(_c,{deviceId:e,deviceName:u,deviceLocation:d,deviceReady:a!=null,onClose:t,children:[P(Jr,{children:P(vr,{children:l})}),P(`div`,{className:`mt-3 flex items-center gap-1 rounded-md bg-surface-hover p-0.5 w-fit`,children:p.map(([e,t])=>P(`button`,{type:`button`,onClick:()=>i(e),className:`px-2.5 py-1 rounded text-[11px] font-medium transition-colors ${c===e?`bg-surface text-foreground shadow-sm`:`text-foreground-subtle hover:text-foreground`}`,children:t},e))}),P(Wr,{className:`mt-3`,children:y(Yn,{deviceId:e,device:a??void 0,children:[P(`div`,{className:c===`info`?void 0:`hidden`,children:P(Mc,{})}),P(`div`,{className:c===`display`?void 0:`hidden`,children:P(Om,{deviceId:e})}),P(`div`,{className:c===`export`?void 0:`hidden`,children:P(mm,{deviceId:e,sectionFilter:qp})}),s?P(`div`,{className:c===`history`?void 0:`hidden`,children:P(ec,{deviceId:e})}):null]})})]})})})}function Am({children:e}){let[t,n]=f(null),r=p(e=>n(e),[]),i=p(()=>n(null),[]);return y(Zn,{open:r,children:[e,t===null?null:P(km,{deviceId:t,onClose:i})]})}a();function jm({tabs:e,active:t,onChange:n}){return P(`div`,{className:`flex rounded-lg border border-border bg-surface p-0.5 gap-0.5`,children:e.map(e=>P(`button`,{type:`button`,onClick:()=>n(e.id),className:[`flex-1 rounded-md px-3 py-1.5 text-xs font-medium transition-colors`,t===e.id?`bg-primary/12 text-primary`:`text-foreground-subtle hover:text-foreground hover:bg-surface-hover`].join(` `),children:e.label},e.id))})}function Mm(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 Nm(e){return`${e.inputSize.width}x${e.inputSize.height}`}function Pm(e){return e.formats?Object.keys(e.formats).filter(t=>e.formats[t]!==void 0):[]}function Fm({entry:e,selected:t,onSelect:n,disabled:r}){let{t:i}=H(),a=Mm(e),o=Nm(e),s=Pm(e);return y(`button`,{type:`button`,onClick:n,disabled:r,className:[`w-full text-left rounded-lg border p-3 transition-all`,t?`border-primary bg-primary/5 ring-1 ring-primary/30`:`border-border bg-background hover:border-foreground-subtle/40 hover:bg-surface-hover/50`,r?`opacity-50 cursor-not-allowed`:`cursor-pointer`].join(` `),children:[P(`div`,{className:`flex items-start justify-between gap-2`,children:y(`div`,{className:`flex-1 min-w-0`,children:[y(`div`,{className:`flex items-center gap-2`,children:[P(`span`,{className:`text-xs font-semibold text-foreground truncate`,children:e.name}),t&&P(me,{className:`h-3.5 w-3.5 text-primary shrink-0`})]}),P(`p`,{className:`text-[10px] text-foreground-subtle mt-0.5 line-clamp-2`,children:e.description})]})}),y(`div`,{className:`flex items-center gap-3 mt-2 flex-wrap`,children:[y(`span`,{className:`inline-flex items-center gap-1 text-[10px] text-foreground-subtle`,children:[P(be,{className:`h-3 w-3`}),o]}),a&&P(`span`,{className:`text-[10px] text-foreground-subtle`,children:a}),s.length>0&&P(`div`,{className:`flex gap-1`,children:s.map(e=>P(`span`,{className:`text-[9px] uppercase rounded bg-surface border border-border px-1 py-0.5 text-foreground-subtle font-mono`,children:e},e))}),e.labels.length>0&&P(`span`,{className:`text-[10px] text-foreground-subtle`,children:i(`common.labels`,{count:e.labels.length})})]})]})}function Im({field:e,value:t,onChange:n,disabled:r}){let{t:i}=H(),a=e.catalog??[],o=a.length>0,s=Ot(a).length>0,c=e.allowCustomPath!==!1||e.allowCustom===!0,l=[...o?[{id:`catalog`,label:i(`formBuilder.modelSelector.models`,`Models ({{length}})`,{length:a.length})}]:[],...c?[{id:`custom`,label:i(`formBuilder.modelSelector.customPath`,`Custom Path`)}]:[]],[u,d]=f(o?`catalog`:`custom`),p=t==null?``:String(t);return y(`div`,{className:`space-y-3`,children:[l.length>1&&P(jm,{tabs:l,active:u,onChange:d}),u===`catalog`&&o&&s&&P(Br,{catalog:a,value:p,onChange:e=>n(e),disabled:r||e.disabled}),u===`catalog`&&o&&!s&&P(`div`,{className:`space-y-1.5 max-h-[320px] overflow-y-auto pr-1`,children:a.filter(e=>e.legacy!==!0).map(t=>P(Fm,{entry:t,selected:p===t.id,onSelect:()=>n(t.id),disabled:r||e.disabled},t.id))}),u===`catalog`&&!o&&y(`div`,{className:`rounded-md border border-info/30 bg-info/5 px-3 py-2 flex items-start gap-2`,children:[P(Le,{className:`h-3.5 w-3.5 text-info shrink-0 mt-0.5`}),P(`p`,{className:`text-[11px] text-foreground-subtle leading-relaxed`,children:i(`formBuilder.modelSelector.noPredefinedModelsAvailableUse`,`No predefined models available. Use the Custom Path tab to specify a model file path or URL.`)})]}),u===`custom`&&c&&y(`div`,{className:`space-y-2`,children:[P(`input`,{type:`text`,className:`w-full rounded-md border border-border bg-background px-3 py-2 text-sm text-foreground focus:border-primary focus:ring-1 focus:ring-primary/30 outline-none disabled:opacity-50`,placeholder:i(`formBuilder.modelSelector.enterPathLikeDataModels`,`Enter path like /data/models/custom.onnx or https://...`),value:p,disabled:r||e.disabled,onChange:e=>n(e.target.value)}),e.acceptFormats&&e.acceptFormats.length>0&&y(`p`,{className:`text-[10px] text-foreground-subtle`,children:[i(`formBuilder.modelSelector.acceptedFormats`,`Accepted formats:`),` `,e.acceptFormats.join(`, `)]})]}),(e.compatibilityNote||e.conversionGuideUrl)&&y(`div`,{className:`flex items-start justify-between gap-3 pt-1`,children:[e.compatibilityNote&&y(`p`,{className:`flex items-start gap-1 text-[10px] text-foreground-subtle`,children:[P(Le,{className:`h-3 w-3 mt-0.5 shrink-0`}),e.compatibilityNote]}),e.conversionGuideUrl&&y(`a`,{href:e.conversionGuideUrl,target:`_blank`,rel:`noopener noreferrer`,className:`flex items-center gap-1 text-[11px] text-primary hover:underline shrink-0`,children:[i(`formBuilder.modelSelector.howToConvertYourModel`,`How to convert your model`),P(I,{className:`h-3 w-3`})]})]})]})}function Lm({to:e}){let{search:t}=q();return P(J,{to:`${e}${t}`,replace:!0})}a();function Rm(){return V.t(`helpers.keychainRevealHost.forbidden`)}function zm(e){if(typeof e!=`object`||!e)return null;let t=Reflect.get(e,`data`);if(typeof t!=`object`||!t)return null;let n=Reflect.get(t,`code`);return typeof n==`string`?n:null}function Bm(e){let t=zm(e);if(t===`FORBIDDEN`||t===`UNAUTHORIZED`)return Rm();let n=e instanceof Error?e.message:String(e);return n.length>0?V.t(`helpers.keychainRevealHost.failedWith`,{message:n}):V.t(`helpers.keychainRevealHost.failed`)}function Vm({children:e}){let t=$r();return P(Er,{reveal:p(async e=>{try{return(await t.mutateAsync({ref:e})).value}catch(e){throw Error(Bm(e))}},[t]),children:e})}a();function Hm(){let e=ze(),t=j(),[n,r]=f(()=>e.isConnected()?`connected`:`disconnected`),i=M(!1),[a,o]=f(0),[c,l]=f([]);s(()=>e.subscribeConnectionEvents(e=>{r(t=>(t!==`connected`&&e===`connected`&&i.current&&o(e=>e+1),e!==`connected`&&(i.current=!0),e))}),[e]),s(()=>{a!==0&&t.invalidateQueries({queryKey:[[`addons`,`getLastRestart`]]})},[a,t]);let{data:u}=Kr(void 0,{enabled:n===`connected`&&a>0,staleTime:0,refetchOnMount:!1,refetchOnWindowFocus:!1}),d=M(null);return s(()=>{if(u==null||u.requestedAt===d.current)return;d.current=u.requestedAt;let e=Wm(u);l(t=>[...t,e]);let t=window.setTimeout(()=>{l(t=>t.filter(t=>t.id!==e.id))},6e3);return()=>window.clearTimeout(t)},[u]),P(E,{children:c.length>0&&P(Um,{toasts:c})})}function Um({toasts:e}){return P(`div`,{className:`fixed top-[calc(env(safe-area-inset-top)+1rem)] right-[calc(env(safe-area-inset-right)+1rem)] z-50 flex flex-col gap-2 max-w-sm w-full pointer-events-none`,children:e.map(e=>y(`div`,{className:`pointer-events-auto flex items-start gap-2 px-3 py-2.5 rounded-md border border-green-500/30 bg-green-500/10 shadow-lg backdrop-blur-sm`,children:[P(Be,{className:`w-4 h-4 shrink-0 mt-0.5 text-green-400`}),y(`div`,{children:[P(`div`,{className:`text-[11px] font-semibold text-foreground`,children:e.title}),P(`div`,{className:`text-[10px] text-foreground-subtle mt-0.5`,children:e.message})]})]},e.id))})}function Wm(e){let t=`restart-${e.requestedAt}`;if(e.kind===`framework-update`&&e.packageName!==void 0&&e.toVersion!==void 0){let n=e.fromVersion===void 0?`v${e.toVersion}`:`v${e.fromVersion} → v${e.toVersion}`;return{id:t,title:V.t(`system.reconnectOverlay.frameworkUpdated`,`Framework updated`),message:V.t(`system.reconnectOverlay.isNow`,`{{packageName}} is now {{fromTo}}.`,{packageName:e.packageName,fromTo:n})}}return{id:t,title:V.t(`system.reconnectOverlay.serverRestarted`,`Server restarted`),message:e.requestedBy===void 0?V.t(`system.reconnectOverlay.manualRestartCompleted`,`Manual restart completed.`):V.t(`system.reconnectOverlay.manualRestartByCompleted`,`Manual restart by {{requestedBy}} completed.`,{requestedBy:e.requestedBy})}}var Gm=`/system/settings`,Km=[{path:`/system/secrets`,tab:`secrets`},{path:`/system/capabilities`,tab:`capabilities`}];function qm(e,t=``){let n=new URLSearchParams(t);return n.delete(`tab`),n.set(`tab`,e),`${Gm}?${n.toString()}`}function Jm({tab:e}){let{search:t,hash:n}=q();return P(J,{to:`${qm(e,t)}${n}`,replace:!0})}a();var Ym={info:{bg:`bg-info/10`,border:`border-info/30`,icon:Le},warning:{bg:`bg-warning/10`,border:`border-warning/30`,icon:le},critical:{bg:`bg-danger/10`,border:`border-danger/30`,icon:Me}};function Xm({toast:e,onDismiss:t}){let n=Ym[e.severity]??Ym.info,r=n.icon;return s(()=>{let n=e.duration??5e3;if(n<=0)return;let r=setTimeout(()=>t(e.id),n);return()=>clearTimeout(r)},[e.id,e.duration,t]),y(`div`,{className:`flex items-start gap-3 px-4 py-3 rounded-lg border ${n.border} ${n.bg} shadow-lg backdrop-blur-sm animate-in slide-in-from-right-5 fade-in duration-200`,children:[P(r,{className:`h-4 w-4 shrink-0 mt-0.5 text-foreground-subtle`}),y(`div`,{className:`flex-1 min-w-0`,children:[P(`div`,{className:`text-xs font-semibold text-foreground`,children:e.title}),P(`div`,{className:`text-[11px] text-foreground-subtle mt-0.5`,children:e.message})]}),P(`button`,{type:`button`,onClick:()=>t(e.id),className:`shrink-0 p-0.5 rounded hover:bg-surface-hover transition-colors`,children:P(Oe,{className:`h-3.5 w-3.5 text-foreground-subtle`})})]})}function Zm(){let[e,t]=f([]),n=p(e=>{t(t=>t.filter(t=>t.id!==e))},[]);return Nr(void 0,{onData:e=>{let n=e,r=`toast-${Date.now()}-${Math.random().toString(36).slice(2,8)}`;t(e=>[...e,{...n,id:r,timestamp:Date.now()}])}}),e.length===0?null:P(`div`,{className:`fixed bottom-[calc(env(safe-area-inset-bottom)+1rem)] right-[calc(env(safe-area-inset-right)+1rem)] z-50 flex flex-col gap-2 max-w-sm w-full pointer-events-none`,children:e.map(e=>P(`div`,{className:`pointer-events-auto`,children:P(Xm,{toast:e,onDismiss:n})},e.id))})}function Qm(e){return(t,n,r)=>e(t,{...typeof n==`string`?{defaultValue:n}:{defaultValue_one:n.one,defaultValue_other:n.other},...r})}var $m=(e,t,n)=>Qm(V.t.bind(V))(e,t,n);a();function eh({children:e}){let{t}=H();return P(He,{t:d(()=>Qm(t),[t]),children:e})}a();function th(e){if(typeof e!=`object`||!e)return;let{data:t}=e;return t?.code}function nh(e,t){let n=th(e);return n===`UNAUTHORIZED`||n===`FORBIDDEN`?!0:/UNAUTHORIZED|FORBIDDEN/.test(t)}function rh(e,t,n,r){let[i,a]=f(!1),[o,c]=f(null);return s(()=>{if(a(!1),c(null),!t){a(!0);return}let i=!1;e.init().catch(()=>void 0);let o=t=>{e.awaitConnected().then(()=>{i||a(!0)},e=>{if(i)return;let s=e instanceof Error?e.message:String(e);if(nh(e,s)){if(t&&r!==void 0){r().then(e=>{if(!i){if(e){o(!1);return}console.warn(`[boot-gate] logout: probe UNAUTHORIZED and the refresh was refused`),n()}},()=>{i||(console.warn(`[boot-gate] logout: probe UNAUTHORIZED and recovery failed`),n())});return}console.warn(`[boot-gate] logout: probe UNAUTHORIZED after a successful refresh`,s),n();return}c(s),a(!0)})};return o(!0),()=>{i=!0}},[e,t,n,r]),{bootReady:i,bootError:o}}a();var ih=3e4;function ah(e){let t=M(e);t.current=e,s(()=>{let e=null,n=()=>{if(document.visibilityState===`hidden`){e=Date.now();return}if(document.visibilityState===`visible`&&e!==null){let n=Date.now()-e;e=null,n>=ih&&t.current()}},r=()=>{t.current()},i=e=>{e.persisted&&t.current()};return document.addEventListener(`visibilitychange`,n),window.addEventListener(`online`,r),window.addEventListener(`pageshow`,i),()=>{document.removeEventListener(`visibilitychange`,n),window.removeEventListener(`online`,r),window.removeEventListener(`pageshow`,i)}},[])}a();function oh(){let{t:e}=H();return y(`div`,{role:`status`,"aria-busy":`true`,"aria-label":e(`layouts.addonPageLoader.loading`,`Loading page`),"data-testid":`addon-page-loading`,className:`flex flex-col gap-4 p-2 sm:p-4`,children:[P(ii,{className:`h-7 w-48`}),P(ii,{className:`h-5 w-72 max-w-full`}),P(ii,{className:`h-40`})]})}function sh({message:e}){let{t}=H();return P(`div`,{className:`p-2 sm:p-4`,"data-testid":`addon-page-error`,children:P(xr,{title:t(`layouts.addonPageLoader.failedTitle`,`This page could not be shown`),message:e})})}var ch=class extends _{state={error:null,resetKey:this.props.resetKey};static getDerivedStateFromError(e){return{error:e instanceof Error?e:Error(String(e))}}static getDerivedStateFromProps(e,t){return e.resetKey===t.resetKey?null:{error:null,resetKey:e.resetKey}}componentDidCatch(e,t){console.error(`[addon-page] ${this.props.resetKey} crashed`,e,t.componentStack)}render(){return this.state.error===null?this.props.children:P(sh,{message:this.state.error.message})}};function lh({pageKey:e,children:t}){return P(ch,{resetKey:e,children:P(w,{fallback:P(oh,{}),children:t})})}a();function uh(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 dh=new Map,fh=new Map,ph=new Set;function mh(e){return!e||typeof e!=`object`?!1:typeof e.default==`function`}async function hh(e,t){let i=dh.get(e);if(i)return i;let a=fh.get(e);if(a)return a;ph.has(e)||(On(),r([{name:e,entry:B(t),type:`module`}],{force:!1}),ph.add(e));let o=n(`${e}/page`).then(n=>{if(!mh(n))throw Error(`Addon page remote ${e} (${t}) does not expose a default React component on './page'`);return dh.set(e,n.default),fh.delete(e),n.default}).catch(t=>{throw fh.delete(e),t});return fh.set(e,o),o}function gh(){let{t:e}=H(),{pagePath:t}=qa(),n=Ua(),r=ze(),{data:i}=sr(void 0),a=d(()=>i?uh(i):void 0,[i]),o=a?.find(e=>e.path===`/addon/${t}`),c=o?.remoteName,l=o?.bundleUrl,[u,p]=f(null),[m,h]=f(null);return s(()=>{if(!c||!l)return;h(null);let e=dh.get(c);if(e){p(()=>e);return}p(null);let t=!1;return hh(c,l).then(e=>{t||p(()=>e)}).catch(e=>{t||h(e instanceof Error?e.message:String(e))}),()=>{t=!0}},[c,l]),a?o?m?P(sh,{message:m}):u?P(lh,{pageKey:o.remoteName,children:P(u,{trpc:r.trpcClient,theme:{isDark:document.documentElement.classList.contains(`dark`)},navigate:e=>{n(e.startsWith(`/`)?e:`/${e}`)}})}):P(oh,{}):P(`div`,{className:`flex items-center justify-center h-full text-foreground-subtle`,children:e(`layouts.addonPageLoader.addonPageNotFound`,`Addon page not found`)}):P(oh,{})}ci();var _h=/\p{Mn}/gu;function vh(e){return e.normalize(`NFD`).replace(_h,``).toLowerCase().trim()}var yh=[`device`,`page`,`integration`],bh=0,xh=1,Sh=2,Ch=3,wh=4,Th=5,Eh=6,Dh=7;function Oh(e,t,n,r){return n.includes(r)?bh:e===r?xh:e.startsWith(r)?Sh:e.split(/\s+/).some(e=>e.startsWith(r))?Ch:e.includes(r)?wh:t.some(e=>e.includes(r))?Th:null}function kh(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 Ah(e){return e<4?0:e<=7?1:e<=12?2:3}function jh(e,t,n){if(e===t)return 0;if(n<=0||Math.abs(e.length-t.length)>n)return null;let r=t.length,i=Array(r+1).fill(0),a=Array.from({length:r+1},(e,t)=>t),o=Array(r+1).fill(0);for(let s=1;s<=e.length;s++){o[0]=s;let c=s,l=e[s-1];for(let n=1;n<=r;n++){let r=t[n-1],u=l===r?0:1,d=Math.min((a[n]??1/0)+1,o[n-1]+1,(a[n-1]??1/0)+u);s>1&&n>1&&l===t[n-2]&&e[s-2]===r&&(d=Math.min(d,(i[n-2]??1/0)+1)),o[n]=d,d<c&&(c=d)}if(c>n)return null;let u=i;i=a,a=o,o=u}let s=a[r]??1/0;return s<=n?s:null}function Mh(e,t){if(kh(e,t))return Eh;let n=Ah(t.length);if(n>0){for(let r of e.split(/\s+/))if(jh(r,t,n)!==null)return Dh}return null}function Nh(e,t,n=200){let r=vh(t);if(r.length===0)return{groups:[],totalMatched:0,truncated:!1};let i=new Map;for(let t of e){let e=vh(t.label),n=Oh(e,(t.keywords??[]).map(vh),(t.identifiers??[]).map(vh),r)??Mh(e,r);if(n===null)continue;let a=i.get(t.domain)??[];a.push({item:t,rank:n}),i.set(t.domain,a)}let a=0;for(let e of i.values())a+=e.length;let o=n,s=[];for(let e of yh){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 Ph(e){return e.flatMap(e=>e.items)}function Fh(e){let t=new Map;for(let n of e)t.set(n.id,n.name);let n=new Map;for(let r of e){let e=r.parentDeviceId;e!==null&&e!==r.id&&n.set(r.id,t.get(e)??`#${String(e)}`)}return n}function Ih(e,t){return e.filter(e=>!e.adminOnly||t)}function Lh({t:e,isAdmin:t}){let n=Ih([{label:e(`nav.devices`,`Devices`),icon:L,path:`/devices`},{label:e(`nav.integrations`),icon:ue,path:`/integrations`},{label:e(`nav.build`,`Build-your-self`),icon:$e,path:`/build`,adminOnly:!0},{label:e(`nav.locations`,`Locations`),icon:Ye,path:`/locations`,adminOnly:!0},{label:e(`nav.viewer`,`Viewer`),icon:an,path:`/live`}],t),r=Ih([{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:ie,path:`/recordings`,adminOnly:!0}],t),i=Ih([{label:e(`nav.nodes`,`Nodes`),icon:nt,path:`/system/nodes`,adminOnly:!0},{label:e(`nav.history`,`History`),icon:ee,path:`/system/history`,adminOnly:!0,keywords:[`charts`,`graphs`,`energy`,`temperature`,`metrics`,`trends`]},{label:e(`nav.pipeline`,`Pipeline`),icon:yn,path:`/system/pipeline`},{label:e(`system.addons`),icon:ge,path:`/system/addons`,adminOnly:!0},{label:e(`system.ai`,`AI`),icon:Se,path:`/system/ai`,adminOnly:!0}],t),a=Ih([{label:e(`system.identity`,`Identity & Access`),icon:Ue,path:`/system/identity`,adminOnly:!0},{label:e(`system.network`,`Network`),icon:dn,path:`/system/network`,adminOnly:!0},{label:e(`system.integrations`,`Connectivity`),icon:ue,path:`/system/integrations`,adminOnly:!0},{label:e(`system.data`,`Data`),icon:ae,path:`/system/data`,adminOnly:!0},{label:e(`system.notifications`,`Notifications`),icon:se,path:`/system/notifications`,adminOnly:!0},{label:e(`system.calendars`,`Calendars`),icon:ln,path:`/system/calendars`,adminOnly:!0},{label:e(`system.systemNav`,`System`),icon:Xe,path:Gm,adminOnly:!0},{label:e(`system.logs`,`Logs`),icon:Ve,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 Rh={gauge:de,puzzle:ge,bot:ce,cpu:be,terminal:pn,box:Fe,boxes:Fe,monitor:an,wrench:je,activity:Je,plug:ue,"graduation-cap":te};function zh(e){return Rh[e]??ge}function Bh(e,t){for(let n of Lh(t))for(let t of n.items)if(t.path===e)return{icon:t.icon,title:t.label,path:t.path};return null}var Vh=` · `;function Hh(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(Vh)}function Uh(e,t=null){let n=Fh(e),r=Xn(t);return e.map(e=>{let t=String(e.id),i=e.name||e.stableId||`#${t}`,a=n.get(e.id),o=r(e),s=o.kind===`resolved`?o.integration.name:``;return{key:`device:${t}`,domain:`device`,label:i,subtitle:Hh(e,t,i,a),identifiers:[t,`#${t}`],keywords:[e.stableId,e.addonId,e.location??``,a??``,s].filter(e=>e.length>0),path:`/devices/${t}`,icon:cr(e.type).icon}})}function Wh(e){return e.map(e=>({key:`integration:${e.id}`,domain:`integration`,label:e.name||e.addonId,subtitle:e.enabled?e.addonId:V.t(`helpers.searchItems.disabled`,{addonId:e.addonId}),keywords:[e.addonId,e.processState],path:`/integrations/${e.id}`}))}function Gh(e,t,n){let r=e.section?.trim();return r?t[r]??e.sectionLabel?.trim()??r:n}function Kh(e,t,n){let r=e.flatMap(e=>e.items.map(t=>({key:`page:${t.path}`,domain:`page`,label:t.label,subtitle:e.label??void 0,path:t.path,icon:t.icon,...t.keywords!==void 0&&t.keywords.length>0?{keywords:t.keywords}:{}}))),i={detection:n.detection,cluster:n.cluster,administration:n.administration},a=t.map(e=>({key:`page:addon:${e.addonId}:${e.id}`,domain:`page`,label:e.label,subtitle:Gh(e,i,n.ungrouped),keywords:[e.addonId],path:e.path,icon:zh(e.icon)}));return[...r,...a]}a();var qh={device:{labelKey:`search.resultsList.devices`,icon:L},page:{labelKey:`search.resultsList.pages`,icon:cn},integration:{labelKey:`search.resultsList.integrations`,icon:ue}};function Jh({groups:e,activeKey:t,query:n,totalMatched:r,truncated:i,onSelect:a,onHover:o}){let{t:c}=H(),l=M(null);if(s(()=>{t&&(l.current?.querySelector(`[data-key="${CSS.escape(t)}"]`))?.scrollIntoView({block:`nearest`})},[t]),n.trim().length===0)return null;if(e.length===0)return P(`div`,{className:`px-3 py-4 text-center text-[12px] text-foreground-subtle`,children:c(`search.resultsList.noResults`,{query:n})});let u=e.reduce((e,t)=>e+t.items.length,0);return y(E,{children:[P(`div`,{ref:l,role:`listbox`,className:`max-h-[60vh] overflow-y-auto py-1`,children:e.map(e=>{let n=qh[e.domain],r=n.icon;return y(`div`,{className:`px-1 py-1`,children:[y(`div`,{className:`sticky top-0 z-10 flex items-center gap-1.5 bg-surface px-2 py-1 text-[10px] font-semibold uppercase tracking-widest text-foreground-subtle/60`,children:[P(r,{className:`h-3 w-3`}),c(n.labelKey)]}),e.items.map(e=>{let r=e.icon??n.icon,i=e.key===t;return y(`button`,{type:`button`,role:`option`,"aria-selected":i,"data-key":e.key,onMouseEnter:()=>o(e),onClick:()=>a(e),className:`flex w-full items-center gap-2.5 rounded-md px-2 py-1.5 text-left text-[12px] transition-colors ${i?`bg-primary/12 text-primary`:`text-foreground hover:bg-surface-hover`}`,children:[P(r,{className:`h-3.5 w-3.5 shrink-0 ${i?`text-primary`:`text-foreground-subtle`}`}),y(`span`,{className:`flex-1 min-w-0`,children:[P(`span`,{className:`block truncate font-medium`,children:e.label}),e.subtitle&&P(`span`,{className:`block truncate text-[10px] text-foreground-subtle`,children:e.subtitle})]})]},e.key)})]},e.domain)})}),i&&P(`div`,{className:`border-t border-border px-3 py-1.5 text-center text-[10px] text-foreground-subtle`,children:c(`search.truncatedResults`,`Showing first {{shown}} of {{total}} — refine your search.`,{shown:u,total:r})})]})}a();function Yh({navSections:e,addonPages:t,compact:n,onNavigated:r}){let{t:i}=H(),a=Ua(),o=M(null),c=M(null),l=M(null),[u,m]=f(null),[h,g]=f(``),[_,v]=f(0),[b,x]=f(!1),{data:S}=Zr({projection:`slim`}),{data:C}=ur(void 0),w=d(()=>{let n={detection:i(`nav.detectionSection`,`Detection`),cluster:i(`nav.clusterSection`,`Cluster`),administration:i(`system.title`,`Administration`),ungrouped:i(`nav.addonPages`,`Addon Pages`)};return[...Uh(S??[],C??null),...Kh(e,t,n),...Wh(C??[])]},[S,C,e,t,i]),{groups:T,totalMatched:E,truncated:D}=d(()=>Nh(w,h),[w,h]),O=d(()=>Ph(T),[T]);s(()=>{v(0)},[h,w]),s(()=>{b&&o.current?.focus()},[b]);let k=p(()=>{x(!1),g(``),v(0)},[]),A=p(e=>{a(e.path),k(),o.current?.blur(),r?.()},[a,k,r]);s(()=>{function e(e){(e.metaKey||e.ctrlKey)&&e.key.toLowerCase()===`k`&&(e.preventDefault(),x(!0))}return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[]),s(()=>{if(!b)return;function e(e){if(!(e.target instanceof Node))return;let t=c.current?.contains(e.target)===!0,n=l.current?.contains(e.target)===!0;!t&&!n&&x(!1)}return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[b]);let j=b&&h.trim().length>0;s(()=>{if(!j){m(null);return}let e=()=>{let e=o.current?.getBoundingClientRect();e&&m({left:e.left,top:e.bottom+4,width:e.width})};return e(),window.addEventListener(`resize`,e),window.addEventListener(`scroll`,e,!0),()=>{window.removeEventListener(`resize`,e),window.removeEventListener(`scroll`,e,!0)}},[j]);let N=O[_]?.key??null,F=i(`search.placeholder`,`Search devices, pages, integrations…`),I=y(`div`,{className:`relative`,children:[P(Ae,{className:`pointer-events-none absolute left-2 top-1/2 h-3.5 w-3.5 -translate-y-1/2 text-foreground-subtle`}),P(`input`,{ref:o,type:`text`,value:h,placeholder:F,"aria-label":F,role:`combobox`,"aria-expanded":b&&h.trim().length>0,"aria-controls":`global-search-results`,onChange:e=>{g(e.target.value),x(!0)},onFocus:()=>x(!0),onKeyDown:e=>{if(e.key===`ArrowDown`)e.preventDefault(),O.length>0&&v(e=>(e+1)%O.length);else if(e.key===`ArrowUp`)e.preventDefault(),O.length>0&&v(e=>(e-1+O.length)%O.length);else if(e.key===`Enter`){e.preventDefault();let t=O[_];t&&A(t)}else e.key===`Escape`&&(e.preventDefault(),k(),o.current?.blur())},className:`w-full rounded-md border border-border bg-surface py-1.5 pl-7 pr-6 text-[12px] text-foreground placeholder:text-foreground-subtle/70 focus:outline-none focus:ring-1 focus:ring-primary/50`}),h.length>0&&P(`button`,{type:`button`,"aria-label":i(`search.globalSearch.clearSearch`,`Clear search`),onClick:()=>{g(``),o.current?.focus()},className:`absolute right-1.5 top-1/2 -translate-y-1/2 text-foreground-subtle hover:text-foreground`,children:P(Oe,{className:`h-3 w-3`})}),j&&u!==null&&li(P(`div`,{ref:l,id:`global-search-results`,className:`fixed z-50 w-max max-w-[26rem] rounded-lg border border-border bg-surface shadow-xl`,style:{left:u.left,top:u.top,minWidth:u.width},children:P(Jh,{groups:T,activeKey:N,query:h,totalMatched:E,truncated:D,onSelect:A,onHover:e=>{let t=O.findIndex(t=>t.key===e.key);t>=0&&v(t)}})}),document.body)]});return n?P(`div`,{ref:c,className:`px-1.5 pb-1.5`,children:b?P(`div`,{className:`fixed z-50 w-max min-w-72 max-w-[26rem]`,style:{left:`calc(env(safe-area-inset-left) + 3.5rem)`,top:`calc(env(safe-area-inset-top) + 3.5rem)`},children:I}):P(`button`,{type:`button`,onClick:()=>x(!0),"aria-label":F,title:F,className:`flex w-full items-center justify-center rounded-md px-0 py-2 text-foreground-subtle hover:bg-surface-hover hover:text-foreground transition-colors`,children:P(Ae,{className:`h-3.5 w-3.5 shrink-0`})})}):P(`div`,{ref:c,className:`px-2 pb-2`,children:I})}var Xh=/^(\d{1,3}\.){3}\d{1,3}$/;function Zh(e){let t=e.startsWith(`[`)&&e.endsWith(`]`)?e.slice(1,-1):e;return!!(Xh.test(t)||t.includes(`:`))}function Qh(e,t){return!t||Zh(e)?!1:e===t||e.endsWith(`.${t}`)}a();var $h=`auth-webauthn/passkey-enrollment`,eg=`camstack_passkey_prompt_dismissed:`,tg=720*60*60*1e3;function ng(e){try{let t=localStorage.getItem(`${eg}${e}`);if(!t)return!1;let n=Number(t);return Number.isFinite(n)?Date.now()-n<tg:!1}catch{return!1}}function rg(e){try{localStorage.setItem(`${eg}${e}`,String(Date.now()))}catch{}}function ig(){let{user:e}=Xl(),{t}=H(),n=ze(),r=An($h),[i,a]=f(!1),[o,s]=f(!1),c=d(()=>e?ng(e.id):!0,[e]),l=Hr.auth.listLoginMethods.useQuery().data?.find(e=>e.kind===`passkey`),u=l!==void 0&&Qh(window.location.hostname,l.rpId),m=e!==null&&u&&r!=null&&!c,h=T({queryKey:[`auth`,`listOwnPasskeys`],queryFn:()=>n.listOwnPasskeys(),enabled:m,staleTime:6e4}),g=p(()=>{e&&rg(e.id),a(!0),s(!1)},[e]),_=p(()=>{s(!1),h.refetch()},[h]);return!m||i||h.data===void 0||h.data.length>0?null:y(`div`,{className:`shrink-0 border-b border-primary/20 bg-primary/5`,children:[y(`div`,{className:`flex items-center gap-2.5 px-3 py-2 text-xs text-foreground`,children:[P(sn,{className:`h-4 w-4 text-primary shrink-0`}),P(`span`,{className:`flex-1 min-w-0`,children:t(`passkeyPrompt.message`,`Save a passkey for faster sign-in?`)}),P(`button`,{onClick:()=>s(e=>!e),className:`rounded bg-primary px-2.5 py-1 text-[11px] font-semibold text-primary-foreground hover:bg-primary/90`,children:t(`passkeyPrompt.enrollNow`,`Enroll now`)}),P(`button`,{onClick:g,className:`inline-flex items-center gap-1 rounded border border-border px-2 py-1 text-[11px] text-foreground-subtle hover:text-foreground hover:bg-surface-hover`,children:t(`passkeyPrompt.notNow`,`Not now`)}),P(`button`,{onClick:g,"aria-label":t(`passkeyPrompt.notNow`,`Not now`),className:`p-1 rounded text-foreground-subtle hover:text-foreground`,children:P(Oe,{className:`h-3.5 w-3.5`})})]}),o&&P(`div`,{className:`px-3 pb-3`,children:y(`div`,{className:`max-w-xl`,children:[P(Qr,{widgetId:$h,host:`dashboard`}),P(`div`,{className:`mt-2 flex justify-end`,children:P(`button`,{onClick:_,className:`rounded border border-border px-2.5 py-1 text-[11px] text-foreground-subtle hover:text-foreground hover:bg-surface-hover`,children:t(`common.close`,`Close`)})})]})})]})}var ag=6e4;function og(){let e=pr(void 0,{staleTime:ag});return{info:e.data?.serverName??null,isLoading:e.isLoading}}a();var sg=`system-config`,cg=`hub`,lg=`camstack_server_name_prompt_dismissed`;function ug(){try{return sessionStorage.getItem(lg)===`1`}catch{return!1}}function dg(){try{sessionStorage.setItem(lg,`1`)}catch{}}function fg(e){return e.isAdmin&&e.info!==null&&e.info.isDefault&&!e.dismissed}function pg(){let{user:e}=Xl(),{info:t}=og(),[n,r]=f(ug);return fg({isAdmin:e?.isAdmin===!0,info:t,dismissed:n})?P(mg,{suggestion:t?.name??``,onLater:()=>{dg(),r(!0)}}):null}function mg({suggestion:e,onLater:t}){let{t:n}=H(),r=j(),i=Yr(),[a,o]=f(e),[c,l]=f(null),u=M(null);s(()=>u.current?.focus(),[]);let d=p(async()=>{let e=Rt.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:sg,nodeId:cg,patch:{name:e.data}}),await r.invalidateQueries({queryKey:[[`system`,`info`]]}),await r.invalidateQueries({queryKey:[[`addonSettings`]]})}catch(e){l(e instanceof Error&&e.message.length>0?e.message:`Could not save`)}},[r,i,n,a]);return P(Lr,{open:!0,onOpenChange:e=>!e&&t(),children:P(wr,{children:y(`form`,{onSubmit:e=>{e.preventDefault(),i.isPending||d()},children:[y(Jr,{children:[P(vr,{children:n(`serverName.title`,`Name this server`)}),P(_r,{children:n(`serverName.description`,`Pick a name for this hub. It shows in the admin UI and on the apps’ sign-in screen. You can change it later in System settings.`)})]}),P(Wr,{children:P(ai,{label:n(`serverName.label`,`Server name`),...c===null?{}:{error:c},children:P(Un,{ref:u,value:a,maxLength:48,onChange:e=>o(e.target.value),state:c===null?`default`:`error`,"aria-label":n(`serverName.label`,`Server name`)})})}),y(Rr,{children:[P(Mn,{type:`button`,variant:`ghost`,onClick:t,disabled:i.isPending,children:n(`serverName.later`,`Later`)}),y(Mn,{type:`submit`,disabled:i.isPending||a.trim().length===0,children:[i.isPending&&P(Re,{className:`h-4 w-4 animate-spin`}),n(`common.save`,`Save`)]})]})]})})})}var hg=4,gg=160,_g=320,vg=`env(safe-area-inset-top)`,yg=`env(safe-area-inset-bottom)`;function bg(e){let{rect:t,viewportWidth:n,viewportHeight:r}=e,i=Math.min(_g,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+hg}px, calc(${vg} + 8px))`;return{...a,top:e,maxHeight:`max(${gg}px, calc(100dvh - ${e} - ${yg} - 8px))`}}let o=`max(${r-t.top+hg}px, calc(${yg} + 8px))`;return{...a,bottom:o,maxHeight:`max(${gg}px, calc(100dvh - ${o} - ${vg} - 8px))`}}function xg(e){return e===`totp`||e===`passkey`}function Sg(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(xg);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 Cg(e,t){switch(e){case`sso-not-linked`:return V.t(`helpers.ssoReturn.notLinked`,{provider:t??V.t(`helpers.ssoReturn.signInFallback`)});case`sso-state`:return V.t(`helpers.ssoReturn.state`)}}var wg={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 Tg(e){let t=new URLSearchParams(e),n=t.get(`linked`);if(n!==null&&n.length>0)return{kind:`linked`,provider:n};let r=t.get(`linkError`);return r===null?null:{kind:`error`,message:V.t(wg[r]??`helpers.ssoReturn.link.failed`)}}var Eg=`camstack:sso-return`,Dg=`camstack:sso-ack`,Og=`/sso-complete`,kg=1500,Ag=520,jg=680;function Mg(e){if(!e.startsWith(`#`))return null;let t=new URLSearchParams(e.slice(1)),n=t.get(`return`);t.delete(`return`);let r=t.toString();return n===`login`?r.length>0?{target:n,fragment:r}:null:n===`profile`&&r.length>0?{target:n,query:r}:null}function Ng(e){return e.target===`login`?`/login#${e.fragment}`:`/system/my-access?${e.query}`}function Pg(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 Fg(e=window){let t=Math.max(0,Math.round(e.screenX+(e.outerWidth-Ag)/2)),n=Math.max(0,Math.round(e.screenY+(e.outerHeight-jg)/2));return[`popup=yes`,`width=${Ag}`,`height=${jg}`,`left=${t}`,`top=${n}`,`toolbar=no`,`menubar=no`,`location=no`,`status=no`,`resizable=yes`,`scrollbars=yes`].join(`,`)}function Ig(e){try{return window.open(e??`about:blank`,`camstack-sso`,Fg())??null}catch{return null}}function Lg(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 Rg(e){if(typeof e!=`object`||!e)return!1;let t=e;return t.type===`camstack:sso-return`&&Lg(t.completion)}function zg(e,t,n){return t===null||e.source!==t||e.origin!==n?null:Rg(e.data)?e.data.completion:null}var Bg=`camstack-sso`,Vg=`camstack:sso-done`;function Hg(e,t){return e.target===`profile`?{target:`profile`,query:e.query}:t?{target:`login`}:null}function Ug(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 Wg(e){return typeof e==`object`&&!!e&&e.type===`camstack:sso-done-ack`}function Gg(e){try{let t=e.location.origin;return typeof t==`string`?t:null}catch{return null}}function Kg(){if(typeof BroadcastChannel>`u`)return null;try{let e=new BroadcastChannel(Bg);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 qg=500;function Jg(e,t,n=window,r={}){let i=n.location.origin,a=r.channel===void 0?Kg():null,o=r.channel===void 0?a:r.channel,s=r.setInterval??((e,t)=>window.setInterval(e,t)),c=r.clearInterval??(e=>window.clearInterval(e)),l=!1,u=!1,d=r=>{let a=zg(r,e,i);a===null||l||(l=!0,n.removeEventListener(`message`,d),e.postMessage({type:Dg},i),t.onReturn(a))};n.addEventListener(`message`,d);let f=o?.subscribe(e=>{let n=Ug(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?.())},qg);return()=>{n.removeEventListener(`message`,d),f?.(),a?.close(),c(p)}}function Yg(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 Xg(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))},kg)})}function Zg(e,t,n){let r=Xg(n,e=>{let r=r=>{Yg(r,t,n.origin)&&e()};return n.addEventListener(`message`,r),()=>n.removeEventListener(`message`,r)});try{let r={type:Eg,completion:e};t.postMessage(r,n.origin)}catch{}return r}function Qg(e,t,n){let r=Xg(n,e=>t.subscribe(t=>{Wg(t)&&e()}));return t.post({type:Vg,...e}),r}async function $g(e,t){let n=t.opener!==null&&!t.opener.closed?t.opener:null;if(n!==null&&Gg(n)===t.origin&&await Zg(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=Hg(e,i);if(a!==null&&t.channel!==null&&(r!==null&&i&&await t.persistSession(r),await Qg(a,t.channel,t))){t.close();return}if(n!==null&&e.target===`profile`){let n=Tg(`?${e.query}`);if(n?.kind===`error`){t.showResult({kind:`link-error`,message:n.message});return}t.close();return}t.continueAt(Ng(e))}function e_(e,t){return(t.length>0&&e.startsWith(t)?e.slice(t.length):e).replace(/\/+$/,``)===Og}var t_=`camstack:broker-oauth`;function n_(e){if(typeof e!=`object`||!e)return!1;let t=e;return t.type===`camstack:broker-oauth`&&typeof t.ok==`boolean`}function r_(e,t){return e.split(`{{brokerId}}`).join(encodeURIComponent(t))}function i_(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||n_(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 a_={open:e=>Ig(e),assign:e=>window.location.assign(e),watch:(e,t)=>i_(e,t)};function o_(e,t,n=a_){let r=B(Pg(e)),i=n.open(r);if(i===null){n.assign(r);return}n.watch(i,e=>{t?.(e)})}function s_(e,t,n){o_(r_(e,t),n)}var c_=!1;function l_(){return c_}function u_(){c_=!0}function d_(e){return!e.read&&e.severity===`critical`}function f_(e){return e.filter(d_)}function p_(e){return e!==void 0&&typeof e.href==`string`&&e.href.length>0}var m_=/^\/addon\/[^/?#]+\/oauth\//;function h_(e){return e.navigation===void 0?m_.test(e.href):e.navigation===`server`}function g_({action:e,className:t,onActivate:n}){let r=j();return h_(e)?P(`a`,{href:B(e.href),className:t,onClick:t=>{t.preventDefault(),n?.(t),o_(e.href,()=>{r.invalidateQueries({queryKey:[[`alerts`]]}),r.invalidateQueries({queryKey:[[`broker`]]}),r.invalidateQueries({queryKey:[[`recordEntries`]]})})},children:e.label}):P(us,{to:e.href,className:t,onClick:n,children:e.label})}a(),ci();var __={info:Le,success:Be,warning:le,error:Me,critical:un},v_={info:`text-info`,success:`text-success`,warning:`text-warning`,error:`text-danger`,critical:`text-danger`},y_={active:`border-l-info`,"in-progress":`border-l-warning`,completed:`border-l-success`,failed:`border-l-danger`,dismissed:`border-l-foreground-subtle/30`};function b_(e){let t=Math.floor((Date.now()-e)/1e3);if(t<60)return V.t(`helpers.relativeTime.justNow`);let n=Math.floor(t/60);if(n<60)return V.t(`helpers.relativeTime.minutesAgo`,{count:n});let r=Math.floor(n/60);if(r<24)return V.t(`helpers.relativeTime.hoursAgo`,{count:r});let i=Math.floor(r/24);return V.t(`helpers.relativeTime.daysAgo`,{count:i})}function x_(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function S_(e){return typeof e==`string`&&e.length>0?e:void 0}function C_(e){if(x_(e.metadata)){let t=S_(e.metadata.nodeId)??S_(e.metadata.agentId);if(t!==void 0)return t}let t=e.source;if(t!==void 0&&!(t.type!==`node`&&t.type!==`agent`))return S_(t.id)}function w_({alert:e,onMarkRead:t,onDismiss:n}){let{t:r}=H(),i=e.severity in __?e.severity:`info`,a=p_(e.action)?e.action:void 0,o=e.status in y_?e.status:`active`,s=__[i],c=v_[i],l=y_[o],{nodes:u}=er(),d=C_(e),f=d===void 0?void 0:u.find(e=>e.id===d),p=d===void 0?void 0:f?.name??d;return y(`div`,{className:`flex items-start gap-2.5 px-3 py-2.5 border-l-2 ${l} ${e.read?`opacity-60`:``} hover:bg-surface-hover transition-colors`,children:[P(s,{className:`h-3.5 w-3.5 shrink-0 mt-0.5 ${c}`}),y(`div`,{className:`flex-1 min-w-0`,children:[y(`div`,{className:`flex items-center gap-1.5`,children:[P(`span`,{className:`text-[11px] font-semibold ${e.read?`text-foreground-subtle`:`text-foreground`}`,children:e.title}),!e.read&&P(`span`,{className:`h-1.5 w-1.5 rounded-full bg-primary shrink-0`})]}),p!==void 0&&P(`div`,{className:`text-foreground-subtle text-[10px] mt-0.5 truncate`,children:p}),P(`div`,{className:`text-[10px] text-foreground-subtle mt-0.5 line-clamp-2`,children:e.message}),a!==void 0&&P(g_,{action:a,className:`inline-flex mt-1.5 items-center rounded-md bg-primary px-2 py-0.5 text-[10px] font-medium text-primary-foreground hover:bg-primary/90 transition-colors`,onActivate:e=>e.stopPropagation()}),e.status===`in-progress`&&e.progress!==void 0&&y(`div`,{className:`mt-1.5 flex items-center gap-2`,children:[P(`div`,{className:`flex-1 h-1 bg-surface-hover rounded-full overflow-hidden`,children:P(`div`,{className:`h-full bg-primary rounded-full transition-all duration-300`,style:{width:`${String(Math.min(100,Math.max(0,e.progress)))}%`}})}),y(`span`,{className:`text-[9px] text-foreground-subtle font-mono shrink-0`,children:[String(Math.round(e.progress)),`%`]})]}),P(`div`,{className:`text-[9px] text-foreground-subtle/60 mt-1`,children:b_(e.updatedAt)})]}),y(`div`,{className:`flex items-center gap-0.5 shrink-0`,children:[!e.read&&P(`button`,{type:`button`,onClick:n=>{n.stopPropagation(),t(e.id)},className:`p-1 rounded hover:bg-surface-hover transition-colors`,title:r(`ui.alertBell.markAsRead`,`Mark as read`),children:P(me,{className:`h-3 w-3 text-foreground-subtle`})}),e.status!==`in-progress`&&P(`button`,{type:`button`,onClick:t=>{t.stopPropagation(),n(e.id)},className:`p-1 rounded hover:bg-surface-hover transition-colors`,title:r(`ui.alertBell.dismiss`,`Dismiss`),children:P(Oe,{className:`h-3 w-3 text-foreground-subtle`})})]})]})}function T_({variant:e=`icon`,compact:t=!1}={}){let{t:n}=H(),[r,i]=f(!1),[a,o]=f(!1),c=M(null),l=M(null),u=j(),{data:d=0}=En(void 0,{refetchInterval:3e4}),{data:m=[],isLoading:h}=Kn({limit:50},{enabled:r}),g=a?m:m.filter(e=>!e.read),_=m.filter(e=>e.read).length,v=()=>{u.invalidateQueries({queryKey:[[`alerts`]]})},b=Cn({onSuccess:v}),x=Dr({onSuccess:v}),S=kn({onSuccess:v});Fr(`alert.created`,()=>{u.invalidateQueries({queryKey:[[`alerts`]]})}),Fr(`alert.updated`,()=>{u.invalidateQueries({queryKey:[[`alerts`]]})}),s(()=>{if(!r)return;let e=e=>{let t=e.target;c.current&&!c.current.contains(t)&&l.current&&!l.current.contains(t)&&i(!1)};return document.addEventListener(`mousedown`,e),document.addEventListener(`touchstart`,e),()=>{document.removeEventListener(`mousedown`,e),document.removeEventListener(`touchstart`,e)}},[r]);let C=p(e=>{b.mutate({alertId:e})},[b]),w=p(e=>{e&&S.mutate({alertId:e})},[S]),T=p(()=>{x.mutate(void 0),i(!1)},[x]),E=g.filter(d_),D=new Set(E.map(e=>e.id)),O=g.filter(e=>e.status===`in-progress`&&!D.has(e.id)),k=g.filter(e=>e.status!==`in-progress`&&!D.has(e.id)),[A,N]=f({}),F=p(()=>{let e=l.current;e&&N(bg({rect:e.getBoundingClientRect(),viewportWidth:window.innerWidth,viewportHeight:window.innerHeight}))},[]);return s(()=>{if(!r)return;F();let e=()=>F();return window.addEventListener(`resize`,e),window.addEventListener(`scroll`,e,!0),()=>{window.removeEventListener(`resize`,e),window.removeEventListener(`scroll`,e,!0)}},[r,F]),y(`div`,{children:[e===`sidebar`?y(`button`,{ref:l,type:`button`,onClick:()=>i(!r),className:`flex w-full items-center gap-2.5 rounded-md ${t?`justify-center px-0 py-2`:`px-2.5 py-1.5`} text-[12px] text-foreground-subtle hover:bg-surface-hover hover:text-foreground transition-colors`,title:t?d>0?n(`ui.alertBell.alertsUnread`,{count:d}):n(`ui.alertBell.alerts`):void 0,children:[y(`span`,{className:`relative inline-flex shrink-0`,children:[P(Ve,{className:`h-3.5 w-3.5`}),t&&d>0&&P(`span`,{className:`absolute -top-1 -right-1 h-2 w-2 rounded-full bg-primary`})]}),!t&&P(`span`,{className:`flex-1 text-left`,children:n(`ui.alertBell.alerts`,`Alerts`)}),!t&&d>0&&P(`span`,{className:`flex items-center justify-center h-4 min-w-4 px-1 rounded-full bg-primary text-primary-foreground text-[9px] font-bold leading-none`,children:d>99?`99+`:String(d)})]}):y(`button`,{ref:l,type:`button`,onClick:()=>i(!r),className:`relative p-1.5 rounded-md hover:bg-surface-hover text-foreground-subtle hover:text-foreground transition-colors`,"aria-label":n(`ui.alertBell.alerts`,`Alerts`),children:[P(Ve,{className:`h-4.5 w-4.5`}),d>0&&P(`span`,{className:`absolute -top-0.5 -right-0.5 flex items-center justify-center h-4 min-w-4 px-0.5 rounded-full bg-primary text-primary-foreground text-[9px] font-bold leading-none`,children:d>99?`99+`:String(d)})]}),r&&li(y(`div`,{ref:c,style:A,className:`bg-surface border border-border rounded-lg shadow-xl flex flex-col overflow-hidden`,children:[y(`div`,{className:`flex items-center justify-between px-3 py-2 border-b border-border shrink-0`,children:[P(`span`,{className:`text-[12px] font-semibold text-foreground`,children:n(`ui.alertBell.alerts`,`Alerts`)}),y(`div`,{className:`flex items-center gap-2`,children:[_>0&&y(`label`,{className:`flex items-center gap-1 text-[10px] text-foreground-subtle cursor-pointer select-none`,children:[P(`input`,{type:`checkbox`,checked:a,onChange:e=>o(e.target.checked),className:`h-3 w-3 rounded border-border accent-primary cursor-pointer`}),n(`ui.alertBell.showRead`,`Show read`)]}),d>0&&y(`button`,{type:`button`,onClick:T,className:`flex items-center gap-1 text-[10px] text-primary hover:text-primary/80 transition-colors`,children:[P(hn,{className:`h-3 w-3`}),n(`ui.alertBell.markAllRead`,`Mark all read`)]})]})]}),y(`div`,{className:`flex-1 overflow-y-auto`,children:[h&&P(`div`,{className:`flex items-center justify-center py-8`,children:P(Re,{className:`h-4 w-4 animate-spin text-foreground-subtle`})}),!h&&g.length===0&&y(`div`,{className:`flex flex-col items-center justify-center py-8 text-foreground-subtle`,children:[P(Ve,{className:`h-6 w-6 mb-2 opacity-40`}),P(`span`,{className:`text-[11px]`,children:m.length>0?n(`ui.alertBell.noUnreadAlerts`,`No unread alerts`):n(`ui.alertBell.noAlerts`,`No alerts`)}),m.length>0&&!a&&P(`button`,{type:`button`,onClick:()=>o(!0),className:`text-[10px] text-primary mt-1 hover:underline`,children:n(`ui.alertBell.showRead`,{count:_})})]}),E.length>0&&y(`div`,{className:`border-b border-border`,children:[P(`div`,{className:`px-3 py-1.5 bg-danger/5`,children:P(`span`,{className:`text-[9px] font-semibold uppercase tracking-widest text-danger`,children:n(`ui.alertBell.urgent`,`Urgent`)})}),E.map(e=>P(w_,{alert:e,onMarkRead:C,onDismiss:w},e.id))]}),O.length>0&&y(`div`,{className:`border-b border-border`,children:[P(`div`,{className:`px-3 py-1.5 bg-surface-hover/50`,children:P(`span`,{className:`text-[9px] font-semibold uppercase tracking-widest text-foreground-subtle/60`,children:n(`ui.alertBell.inProgress`,`In Progress`)})}),O.map(e=>P(w_,{alert:e,onMarkRead:C,onDismiss:w},e.id))]}),k.map(e=>P(w_,{alert:e,onMarkRead:C,onDismiss:w},e.id))]})]}),document.body)]})}a(),ci();function E_({alert:e,onMarkRead:t}){let{t:n}=H(),r=p_(e.action)?e.action:void 0;return y(`div`,{className:`border-b border-border last:border-b-0 px-3 py-2.5`,children:[P(`div`,{className:`text-[12px] font-semibold text-foreground`,children:e.title}),P(`div`,{className:`text-[11px] text-foreground-muted mt-0.5`,children:e.message}),y(`div`,{className:`mt-2 flex flex-wrap items-center gap-2`,children:[r!==void 0&&P(g_,{action:r,className:`inline-flex items-center justify-center rounded-md bg-primary px-2.5 py-1 text-[11px] font-medium text-primary-foreground hover:bg-primary/90 transition-colors`}),P(Mn,{type:`button`,variant:`ghost`,size:`sm`,onClick:()=>t(e.id),children:n(`ui.alertBell.markAsRead`,`Mark as read`)})]})]})}function D_(){let{t:e}=H(),t=j(),[n,r]=f(l_()),{data:i=[],isLoading:a}=Kn({limit:50}),o=d(()=>f_(i),[i]),s=Cn({onSuccess:p(()=>{t.invalidateQueries({queryKey:[[`alerts`]]})},[t])}),c=p(e=>{s.mutate({alertId:e})},[s]),l=p(()=>{u_(),r(!0)},[]);return a||n||o.length===0?null:li(P(`div`,{className:`fixed inset-x-0 bottom-0 z-[10000] flex justify-center p-2 sm:p-4 pb-[max(0.5rem,env(safe-area-inset-bottom))] pointer-events-none`,"data-testid":`critical-alerts-on-load-panel`,children:y(`div`,{className:`pointer-events-auto w-full max-w-lg bg-surface border border-danger/30 rounded-lg shadow-xl flex flex-col max-h-[min(70dvh,32rem)] overflow-hidden`,role:`region`,"aria-labelledby":`critical-alerts-panel-title`,children:[y(`div`,{className:`flex items-start justify-between gap-2 px-3 py-2.5 border-b border-border shrink-0 bg-danger/5`,children:[y(`div`,{children:[P(`h2`,{id:`critical-alerts-panel-title`,className:`text-[12px] font-semibold text-foreground`,children:e(`ui.criticalAlertsPanel.title`,`Urgent alerts`)}),P(`p`,{className:`text-[10px] text-foreground-muted mt-0.5`,children:e(`ui.criticalAlertsPanel.subtitle`,`These need your attention.`)})]}),P(nr,{type:`button`,variant:`ghost`,onClick:l,"aria-label":e(`ui.criticalAlertsPanel.close`,`Close`),"data-testid":`critical-alerts-panel-close`,icon:Oe})]}),P(`div`,{className:`flex-1 overflow-y-auto`,children:o.map(e=>P(E_,{alert:e,onMarkRead:c},e.id))})]})}),document.body)}a();function O_(){let e=Kc();return C(e.subscribe,e.getSnapshot,e.getSnapshot)}var k_=[`detection`,`cluster`,`administration`];function A_(e){return k_.includes(e)}function j_(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(A_(e)){let n=t.get(e)??[];n.push(i),t.set(e,n);continue}let a=n.get(e);a?a.pages.push(i):n.set(e,{label:i.sectionLabel?.trim()||e,pages:[i]})}return{known:t,custom:[...n.entries()].map(([e,t])=>({id:e,label:t.label,pages:t.pages})),ungrouped:r}}var M_=`camstack:last-path`,N_=512,P_=[`/login`,`/change-password`,`/access-denied`,`/logout`];function F_(e){return!e.startsWith(`/`)||e.startsWith(`//`)||e.length>N_?!1:!P_.some(t=>e===t||e.startsWith(t+`/`))}function I_(e){if(!(typeof window>`u`)&&F_(e))try{window.localStorage.setItem(M_,e)}catch{}}function L_(){if(typeof window>`u`)return null;try{let e=window.localStorage.getItem(M_);return e===null?null:F_(e)?e:null}catch{return null}}var R_=`/devices`;function z_(e){return e!==void 0&&F_(e)?e:L_()??R_}a();var B_=g(!0);function V_(e){return e===`/addon`||e.startsWith(`/addon/`)}function H_(e,t,n){let r=[...e.filter(e=>e!==t),t];return r.length<=n?r:r.slice(r.length-n)}function U_({maxCached:e=6}){let t=Ka(),n=q(),r=Ba(),i=v(K),a=n.pathname,o=V_(a),s=M(new Map),c=M([]);if(o){s.current.set(a,{key:a,outlet:t,location:n,navigationType:r,routeContext:i});let o=H_(c.current,a,e),l=new Set(o);for(let e of s.current.keys())l.has(e)||s.current.delete(e);c.current=o}return y(E,{children:[c.current.map(e=>{let t=s.current.get(e);if(t?.outlet==null)return null;let n=o&&e===a;return P(`div`,{className:n?`h-full min-h-0`:void 0,style:n?void 0:{display:`none`},hidden:!n,"aria-hidden":!n,children:P(B_.Provider,{value:n,children:P(ja.Provider,{value:{location:t.location,navigationType:t.navigationType},children:P(K.Provider,{value:t.routeContext,children:t.outlet})})})},e)}),!o&&t!=null?P(`div`,{className:`h-full min-h-0`,children:t},a):null]})}a();var W_={dark:z,light:oe,system:an};function G_(){return P(`div`,{className:`flex h-full min-h-[50vh] items-center justify-center`,children:P(`span`,{className:`h-4 w-4 animate-spin rounded-full border-2 border-primary/30 border-t-primary`})})}function K_(){let e=q(),t=Ua(),{user:n,logout:r}=Xl(),i=yr(),{t:a}=H(),o=or(),c=ar(),{info:l}=og();s(()=>{document.title=l===null?`CamStack Admin`:`${l.name} \u00b7 CamStack Admin`},[l]);let u=Ic(O_()),[p,m]=f(!1);s(()=>{I_(e.pathname+e.search)},[e.pathname,e.search]);let[h,g]=f(()=>typeof window>`u`?!1:window.localStorage.getItem(`camstack:sidebar-collapsed`)===`1`);s(()=>{typeof window>`u`||window.localStorage.setItem(`camstack:sidebar-collapsed`,h?`1`:`0`)},[h]);let[_]=f(()=>{if(typeof window>`u`)return new Set;try{let e=window.localStorage.getItem(`camstack:sidebar-collapsed-groups`);if(!e)return new Set;let t=JSON.parse(e);return Array.isArray(t)?new Set(t.filter(e=>typeof e==`string`)):new Set}catch{return new Set}});s(()=>{typeof window>`u`||window.localStorage.setItem(`camstack:sidebar-collapsed-groups`,JSON.stringify([..._]))},[_]),s(()=>{c&&window.localStorage.getItem(`camstack:sidebar-collapsed`)===null&&g(!0)},[c]);let{data:v=[]}=jr({nodeId:`hub`},{refetchInterval:3e4}),b=v.length,x=j(),S=M(Date.now()),{data:C}=sr(void 0,{staleTime:0,refetchOnMount:`always`,refetchInterval:e=>{let t=e.state.data;return t&&t.length>0||Date.now()-S.current>=3e4?!1:2e3}}),T=d(()=>C&&n?.isAdmin?uh(C):[],[C,n?.isAdmin]),D=d(()=>j_(T),[T]),O=D.known.get(`detection`)??[],k=D.known.get(`cluster`)??[],A=D.known.get(`administration`)??[];Fr(`addon.page-ready`,()=>{x.invalidateQueries({queryKey:[[`addonPages`,`listPages`]]})});let N=()=>{r(),t(`/login`)},F=t=>!!(e.pathname===t||e.pathname.startsWith(t+`/`)),I=[`/system/pipeline`,`/live`,`/addon/osd-manager`,`/build`].some(t=>e.pathname===t||e.pathname.startsWith(t+`/`)),ee=n?.isAdmin===!0,L=d(()=>Lh({t:a,isAdmin:ee}),[a,ee]),te=L[0]?.items??[],ne=L[1]?.items??[],re=L[2]?.items??[],ie=L[3]?.items??[],R=i?.mode??`system`,ae={dark:a(`theme.dark`),light:a(`theme.light`),system:a(`theme.system`)},z=h&&!o,oe=(e,t=`md`)=>`flex w-full items-center gap-2.5 rounded-md ${z?`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`}`,se=(e,t)=>e===0?null:z?P(`div`,{className:`pt-3 mb-1 mx-2 border-t border-border/60`},`sep-${t}`):P(`div`,{className:`pt-4 pb-1.5 px-2.5`,children:P(`span`,{className:`text-[10px] font-semibold uppercase tracking-widest text-foreground-subtle/60`,children:t})},`hdr-${t}`),ce=e=>{let n=F(e.path),r=zh(e.icon);return y(`button`,{onClick:()=>{t(e.path),m(!1)},className:oe(n),title:z?e.label:void 0,children:[P(r,{className:`h-3.5 w-3.5 shrink-0 ${n?`text-primary`:``}`}),!z&&e.label]},`${e.addonId}::${e.id}`)},le=e=>{let n=e.icon,r=F(e.path),i=e.path===`/system/addons`;return y(`button`,{"data-testid":`nav-${e.path.replace(/^\//,``).replace(/\//g,`-`)}`,onClick:()=>{t(e.path),m(!1)},className:oe(r),title:z?e.label:void 0,children:[P(n,{className:`h-3.5 w-3.5 shrink-0 ${r?`text-primary`:``}`}),!z&&y(E,{children:[P(`span`,{className:`flex-1 text-left`,children:e.label}),i&&b>0&&P(`span`,{className:`ml-auto rounded-full bg-primary px-1.5 py-0.5 text-[9px] font-bold text-primary-foreground leading-none`,children:b})]}),z&&i&&b>0&&P(`span`,{className:`absolute mt-[-14px] ml-3 h-2 w-2 rounded-full bg-primary`})]},e.path)},ue=y(E,{children:[y(`div`,{className:`flex h-14 items-center border-b border-border ${z?`justify-center px-1`:`pl-3 pr-4 gap-2`}`,children:[!z&&P(`img`,{src:i?.resolvedMode===`light`?B(`/brand/logo-horizontal-light.svg`):B(`/brand/logo-horizontal-dark.svg`),alt:a(`layouts.appLayout.camstackAdmin`,`CamStack Admin`),className:`h-9 flex-1 min-w-0`}),!o&&P(`button`,{onClick:()=>g(e=>!e),className:`p-1.5 rounded-md hover:bg-surface-hover text-foreground-subtle transition-colors flex-shrink-0 ${z?``:`mr-2`}`,"aria-label":h?a(`layouts.appLayout.expandSidebar`,`Expand sidebar`):a(`layouts.appLayout.collapseSidebar`,`Collapse sidebar`),title:h?a(`layouts.appLayout.expandSidebar`,`Expand sidebar`):a(`layouts.appLayout.collapseSidebar`,`Collapse sidebar`),children:P(h?tt:Te,{className:`h-4 w-4`})})]}),!z&&l!==null&&P(`div`,{"data-testid":`sidebar-server-name`,title:l.name,className:`truncate border-b border-border px-3 py-1.5 text-xs font-medium text-foreground-muted`,children:l.name}),P(`div`,{className:`border-b border-border pt-2`,children:P(Yh,{navSections:L,addonPages:T,compact:z,onNavigated:()=>m(!1)})}),y(`nav`,{className:`flex-1 overflow-y-auto py-3 ${z?`px-1.5`:`px-2`} space-y-0.5`,children:[te.map(e=>le(e)),se(ne.length+O.length,a(`nav.detectionSection`,`Detection`)),ne.map(e=>le(e)),O.map(e=>ce(e)),se(re.length+k.length,a(`nav.clusterSection`,`Cluster`)),re.map(e=>le(e)),k.map(e=>ce(e)),se(ie.length+A.length,a(`system.title`,`Administration`)),ie.map(e=>le(e)),A.map(e=>ce(e)),D.custom.map(e=>y(`div`,{className:`contents`,children:[se(e.pages.length,e.label),e.pages.map(e=>ce(e))]},`custom-${e.id}`)),se(D.ungrouped.length,a(`nav.addonPages`,`Addon Pages`)),D.ungrouped.map(e=>ce(e))]}),y(`div`,{className:`border-t border-border ${z?`p-1.5`:`p-2`} space-y-0.5`,children:[y(`button`,{onClick:()=>i?.toggleMode(),className:oe(!1),title:z?ae[R]:void 0,children:[(()=>{let e=W_[R];return P(e,{className:`h-3.5 w-3.5 shrink-0`})})(),!z&&P(`span`,{children:ae[R]})]}),P(T_,{variant:`sidebar`,compact:z}),y(`button`,{type:`button`,onClick:()=>t(`/system/my-access`),className:oe(F(`/system/my-access`)),title:z?a(`system.myAccess`,`My access`):void 0,children:[P(qe,{className:`h-3.5 w-3.5 shrink-0`}),!z&&P(`span`,{className:`truncate`,children:a(`system.myAccess`,`My access`)})]}),y(`button`,{onClick:N,className:oe(!1).replace(`hover:text-foreground`,`hover:text-danger`),title:z?n?.username??a(`layouts.appLayout.logout`,`Logout`):void 0,children:[P(_n,{className:`h-3.5 w-3.5 shrink-0`}),!z&&P(`span`,{className:`truncate`,children:n?.username??a(`layouts.appLayout.user`,`User`)})]}),P(`div`,{className:`pt-1 text-[10px] text-foreground-disabled select-none ${z?`text-center`:`px-2`}`,title:a(`layouts.appLayout.adminUiV`,`admin-ui v{{__APP_VERSION__}}`,{__APP_VERSION__:`1.2.460`}),children:z?`1.2.460`:`v1.2.460`})]})]});return y(`div`,{className:`flex h-dvh overflow-hidden bg-background text-foreground pt-[env(safe-area-inset-top)] pb-[env(safe-area-inset-bottom)]`,children:[!o&&P(`aside`,{className:`flex flex-col border-r border-border bg-surface/80 backdrop-blur-sm shrink-0 transition-[width] duration-150 ease-out ${z?`w-12`:`w-48`}`,children:ue}),o&&P(qn,{open:p,onClose:()=>m(!1),width:`w-64`,children:ue}),y(`div`,{className:`flex flex-1 flex-col min-w-0`,children:[u!==null&&y(`div`,{className:`flex items-center justify-center gap-2 px-3 py-2 text-[12px] font-medium shrink-0 ${u.severity===`danger`?`bg-danger/90 text-white`:`bg-warning/15 text-warning border-b border-warning/30`}`,children:[u.severity===`danger`?P(Ce,{className:`h-3.5 w-3.5`}):P(Je,{className:`h-3.5 w-3.5`}),P(`span`,{children:a(u.i18nKey,{defaultValue:u.message,...u.i18nParams})}),u.action===`sign-in`&&P(`button`,{onClick:()=>r(),className:`ml-2 rounded border border-white/40 px-2 py-0.5 text-[11px] font-semibold hover:bg-white/10`,children:a(`connection.signIn`,`Sign in`)}),u.showSpinner&&P(Re,{className:`h-3.5 w-3.5 animate-spin`})]}),P(ig,{}),P(pg,{}),P(D_,{}),o&&y(`header`,{className:`flex items-center h-12 border-b border-border px-3 shrink-0 bg-surface/80 backdrop-blur-sm`,children:[P(`button`,{onClick:()=>m(!0),className:`p-1.5 -ml-1.5 rounded-md hover:bg-surface-hover text-foreground-muted transition-colors`,"aria-label":a(`layouts.appLayout.openMenu`,`Open menu`),children:P(fe,{className:`h-5 w-5`})}),P(`div`,{className:`flex-1 flex justify-center`,children:P(`img`,{src:i?.resolvedMode===`light`?B(`/brand/logo-horizontal-light.svg`):B(`/brand/logo-horizontal-dark.svg`),alt:a(`layouts.appLayout.camstack`,`CamStack`),className:`h-7`})}),P(T_,{})]}),P(`main`,{className:`relative flex-1 min-h-0 overscroll-contain bg-background ${I?`overflow-hidden`:`overflow-auto`}`,children:P(w,{fallback:P(G_,{}),children:P(U_,{})})})]})]})}function $({children:e,requireAdmin:t}){let{t:n}=H(),{user:r,loading:i,mustChangePassword:a}=Xl(),o=q();return i?P(`div`,{className:`flex h-screen items-center justify-center bg-background text-foreground-subtle`,children:n(`layouts.protectedRoute.loading`,`Loading...`)}):r?a&&o.pathname!==`/change-password`?P(J,{to:`/change-password`,replace:!0}):t&&!r.isAdmin?P(J,{to:`/access-denied`,replace:!0}):P(E,{children:e}):P(J,{to:`/login`,replace:!0,state:{from:o.pathname+o.search}})}var q_=`customize`,J_=`main`,Y_=`advanced`,X_=`/build/compositions/new`,Z_=`/build/compositions/:blockId`,Q_=`/build?tab=custom-device`;function $_(e){return`/devices/${e}?tab=${q_}`}function ev(e){return`${$_(e)}&sub=${Y_}`}function tv(e){return`/build/compositions/${encodeURIComponent(e)}`}var nv=`integration`,rv=`section`,iv=[nv,rv],av={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`}},ov=`settings`,sv=`activity`;function cv(e,t={}){let{path:n,tab:r}=av[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(nv,t.integration),t.section!==void 0&&i.set(rv,t.section);let a=i.toString();return a.length>0?`${n}?${a}`:n}function lv(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 uv(e,t,n=null,r=null){let i=new URLSearchParams(e);return i.set(nv,t),r===null?i.delete(rv):i.set(rv,r),n!==null&&i.delete(n),i}function dv(e){return e===`/admin`||e===`/admin/`?`/`:e.startsWith(`/admin/`)?e.slice(6):e}function fv(){let{t:e}=H(),t=Ua();return y(`div`,{className:`flex flex-col items-center justify-center text-foreground py-16 px-4`,children:[P(`div`,{className:`flex h-16 w-16 items-center justify-center rounded-2xl bg-danger/10 mb-4`,children:P(gn,{className:`h-8 w-8 text-danger`})}),P(`h1`,{className:`text-xl font-bold`,children:e(`accessDenied.accessDenied`,`Access Denied`)}),P(`p`,{className:`mt-2 text-sm text-foreground-subtle`,children:e(`accessDenied.youDonTHavePermission`,`You don't have permission to access this page.`)}),P(`button`,{onClick:()=>t(`/devices`),className:`mt-6 rounded-lg bg-primary px-5 py-2.5 text-sm font-medium text-primary-foreground shadow-md shadow-primary/20 hover:shadow-lg transition-all`,children:e(`accessDenied.goToDevices`,`Go to Devices`)})]})}var pv=`auth.password-incorrect`;function mv(e,t){return typeof e==`object`&&e?Reflect.get(e,t):void 0}function hv(e){if(!(e instanceof Error))return{kind:`connection-lost`};let t=mv(e,`data`);return typeof t!=`object`||!t?{kind:`connection-lost`}:mv(mv(t,`i18n`),`code`)===pv?{kind:`wrong-current`}:mv(t,`code`)===`UNAUTHORIZED`?{kind:`session-ended`}:{kind:`rejected`,message:e.message}}a();var gv=8;function _v(e,t){let n=hv(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 vv(){let{t:e}=H(),{user:t,mustChangePassword:n,clearMustChangePassword:r,logout:i}=Xl(),a=ze(),o=yr(),s=Ua(),[c,l]=f(``),[u,d]=f(``),[p,m]=f(``),[h,g]=f(!1),[_,v]=f(``),[b,x]=f(!1),S=n?Bl:c;return P(`div`,{className:`flex min-h-screen items-center justify-center bg-background p-4`,children:y(`div`,{className:`w-full max-w-sm`,children:[P(`div`,{className:`flex justify-center mb-8`,children:P(`img`,{src:o?.resolvedMode===`light`?B(`/brand/logo-horizontal-light.svg`):B(`/brand/logo-horizontal-dark.svg`),alt:e(`changePassword.camstackAdmin`,`CamStack Admin`),className:`h-12`})}),y(`form`,{onSubmit:async i=>{if(i.preventDefault(),v(``),!t){v(`Not signed in`);return}if(!n&&c.length===0){v(e(`changePassword.enterCurrent`,`Enter your current password`));return}if(u.length<gv){v(`Password must be at least ${gv} characters`);return}if(u!==p){v(`The two passwords do not match`);return}if(u===`changeme`){v(`Choose a password different from the seed default`);return}x(!0);try{await a.changeOwnPassword({currentPassword:S,newPassword:u}),r(),s(`/devices`,{replace:!0})}catch(t){v(_v(t,e))}finally{x(!1)}},className:`space-y-4 rounded-xl border border-border bg-surface p-6 shadow-xl shadow-black/10`,children:[y(`div`,{className:`space-y-1`,children:[P(`h1`,{className:`text-sm font-semibold text-foreground`,children:e(`changePassword.setANewPassword`,`Set a new password`)}),P(`p`,{className:`text-xs text-foreground-subtle`,children:n?e(`changePassword.youMustRotateTheSeed`,`You must rotate the seed password before continuing.`):e(`changePassword.chooseANewPasswordFor`,`Choose a new password for your account.`)})]}),_&&P(`div`,{role:`alert`,className:`rounded-md bg-danger/10 border border-danger/20 px-3 py-2 text-xs text-danger`,children:_}),!n&&y(`div`,{className:`space-y-1.5`,children:[P(`label`,{className:`text-xs font-medium text-foreground-subtle`,children:e(`changePassword.currentPassword`,`Current password`)}),P(`input`,{"data-testid":`change-password-current`,type:h?`text`:`password`,value:c,onChange:e=>l(e.target.value),autoComplete:`current-password`,className:`w-full rounded-lg border border-border bg-background px-3 py-2.5 text-sm text-foreground placeholder:text-foreground-disabled focus:border-primary focus:ring-1 focus:ring-primary/30 outline-none transition-all`,autoFocus:!0})]}),y(`div`,{className:`space-y-1.5`,children:[P(`label`,{className:`text-xs font-medium text-foreground-subtle`,children:e(`changePassword.newPassword`,`New password`)}),y(`div`,{className:`relative`,children:[P(`input`,{"data-testid":`change-password-new`,type:h?`text`:`password`,value:u,onChange:e=>d(e.target.value),autoComplete:`new-password`,className:`w-full rounded-lg border border-border bg-background px-3 py-2.5 pr-10 text-sm text-foreground placeholder:text-foreground-disabled focus:border-primary focus:ring-1 focus:ring-primary/30 outline-none transition-all`,autoFocus:n}),P(`button`,{type:`button`,onClick:()=>g(!h),className:`absolute right-2.5 top-1/2 -translate-y-1/2 text-foreground-subtle hover:text-foreground transition-colors`,tabIndex:-1,children:P(h?rt:pe,{className:`h-4 w-4`})})]})]}),y(`div`,{className:`space-y-1.5`,children:[P(`label`,{className:`text-xs font-medium text-foreground-subtle`,children:e(`changePassword.confirmNewPassword`,`Confirm new password`)}),P(`input`,{"data-testid":`change-password-confirm`,type:h?`text`:`password`,value:p,onChange:e=>m(e.target.value),autoComplete:`new-password`,className:`w-full rounded-lg border border-border bg-background px-3 py-2.5 text-sm text-foreground placeholder:text-foreground-disabled focus:border-primary focus:ring-1 focus:ring-primary/30 outline-none transition-all`})]}),P(`button`,{"data-testid":`change-password-submit`,type:`submit`,disabled:b||!u||!p,className:`w-full rounded-lg bg-primary px-4 py-2.5 text-sm font-semibold text-primary-foreground shadow-md shadow-primary/20 hover:shadow-lg hover:shadow-primary/30 disabled:opacity-50 disabled:shadow-none transition-all`,children:b?e(`changePassword.saving`,`Saving…`):e(`changePassword.saveAndContinue`,`Save and continue`)}),n&&P(`button`,{type:`button`,onClick:()=>{i(),s(`/login`,{replace:!0})},className:`w-full text-xs text-foreground-subtle hover:text-foreground transition-colors`,children:e(`changePassword.signOutInstead`,`Sign out instead`)})]})]})})}function yv(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 bv(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 xv(){return window?.PublicKeyCredential!==void 0&&typeof window.PublicKeyCredential==`function`}function Sv(e){let{id:t}=e;return{...e,id:bv(t),transports:e.transports}}function Cv(e){return e===`localhost`||/^([a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,}$/i.test(e)}var wv=class extends Error{constructor({message:e,code:t,cause:n,name:r}){super(e,{cause:n}),this.name=r??n.name,this.code=t}},Tv=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}}},Ev=[`cross-platform`,`platform`];function Dv(e){if(e&&!(Ev.indexOf(e)<0))return e}function Ov(){if(!xv())return new Promise(e=>e(!1));let e=window.PublicKeyCredential;return e.isConditionalMediationAvailable===void 0?new Promise(e=>e(!1)):e.isConditionalMediationAvailable()}function kv({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 wv({message:`Authentication ceremony was sent an abort signal`,code:`ERROR_CEREMONY_ABORTED`,cause:e})}else if(e.name===`NotAllowedError`)return new wv({message:e.message,code:`ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY`,cause:e});else if(e.name===`SecurityError`){let t=window.location.hostname;if(!Cv(t))return new wv({message:`${window.location.hostname} is an invalid domain`,code:`ERROR_INVALID_DOMAIN`,cause:e});if(n.rpId!==t)return new wv({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 wv({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 Av(e){let{optionsJSON:t,useBrowserAutofill:n=!1,verifyBrowserAutofillInput:r=!0}=e;if(!xv())throw Error(`WebAuthn is not supported in this browser`);let i;t.allowCredentials?.length!==0&&(i=t.allowCredentials?.map(Sv));let a={...t,challenge:bv(t.challenge),allowCredentials:i},o={};if(n){if(!await Ov())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=Tv.createNewAbortSignal();let s;try{s=await navigator.credentials.get(o)}catch(e){throw kv({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=yv(u.userHandle)),{id:c,rawId:yv(l),response:{authenticatorData:yv(u.authenticatorData),clientDataJSON:yv(u.clientDataJSON),signature:yv(u.signature),userHandle:f},type:d,clientExtensionResults:s.getClientExtensionResults(),authenticatorAttachment:Dv(s.authenticatorAttachment)}}function jv(e){return typeof e==`object`&&!!e}function Mv(e){return jv(e)&&typeof e.challenge==`string`}a();async function Nv(e){if(!Mv(e))throw Error(`passkey authentication options missing challenge`);let t=await Av({optionsJSON:e});return Object.fromEntries(Object.entries(t))}function Pv({method:e,challengeToken:t,onComplete:n,onSecondFactor:r,onError:i}){let[a,o]=f(!1),[s,c]=f(null),l=async()=>{c(null),o(!0);try{let e=Z();if(t){let r=await Nv((await e.loginBeginPasskey(t)).optionsJSON),i=await e.loginVerifyPasskey(t,r,{refreshable:!0});n(i.token,i);return}let a=await Nv((await e.passkeyLoginBegin()).optionsJSON),o=await e.passkeyLoginFinish(a,{refreshable:!0}),s=o.secondFactors??(o.requiresTotp===!0?[`totp`]:[]);if(s.length>0){if(r)r({challengeToken:o.token,factors:s});else{let e=`Additional verification is required — sign in with your password to continue.`;c(e),i?.(e)}return}n(o.token,o)}catch(e){let n=t?`Passkey verification failed`:`Passkey sign-in failed`,r=e instanceof Error?e.message:n;c(r),i?.(r)}finally{o(!1)}};return y(`div`,{className:`space-y-2`,children:[y(`button`,{type:`button`,"data-testid":t?`login-passkey`:`login-passkey-direct`,onClick:()=>void l(),disabled:a,className:`w-full flex items-center justify-center gap-2 rounded-lg border border-border bg-surface px-4 py-2.5 text-sm font-medium text-foreground hover:bg-surface-hover disabled:opacity-50 transition-colors`,children:[a?P(Re,{className:`h-4 w-4 animate-spin text-primary`}):P(sn,{className:`h-4 w-4 text-primary`}),e.label]}),s&&P(`div`,{className:`rounded-md bg-danger/10 border border-danger/20 px-3 py-2 text-xs text-danger`,children:s})]})}var Fv=()=>window.location.hostname;function Iv(e,t=Fv){return xv()&&Qh(t(),e.rpId)}function Lv(e,t=Fv){let n=e.filter(e=>e.kind===`passkey`&&e.stage===`second-factor`).filter(e=>Iv(e,t));return{passkeyMethods:n,widgetMethods:n.length>0?[]:e.filter(e=>e.kind===`widget`&&e.stage===`second-factor`)}}function Rv(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 zv(e){let t=e.onComplete,n=e.onSecondFactor;return typeof t==`function`?{onComplete:t,onSecondFactor:typeof n==`function`?n:void 0}:null}function Bv({methods:e,widgetConfig:t,onRedirect:n}){let{t:r}=H();Vr();let i=e.filter(e=>e.kind!==`passkey`||Iv(e));return i.length===0?null:y(`div`,{className:`mt-6 space-y-3`,children:[y(`div`,{className:`flex items-center gap-3`,children:[P(`div`,{className:`h-px flex-1 bg-border`}),P(`span`,{className:`text-[10px] uppercase tracking-wider text-foreground-subtle`,children:r(`login.primaryLoginMethods.orContinueWith`,`Or continue with`)}),P(`div`,{className:`h-px flex-1 bg-border`})]}),P(`div`,{className:`space-y-2`,children:i.map(e=>{if(e.kind===`redirect`){let t=(e.icon===void 0?void 0:Bn(e.icon))??qe;return y(`a`,{href:e.startUrl,onClick:t=>{n?.(e)===!0&&t.preventDefault()},className:`flex items-center justify-center gap-2 w-full rounded-lg border border-border bg-surface px-4 py-2.5 text-sm font-medium text-foreground hover:bg-surface-hover transition-colors`,children:[P(t,{className:`h-4 w-4 text-primary`}),e.label]},e.id)}if(e.kind===`passkey`){let n=zv(t);return n?P(Pv,{method:e,onComplete:n.onComplete,onSecondFactor:n.onSecondFactor},e.id):null}return P(Vv,{method:e,config:t},e.id)})})]})}function Vv({method:e,config:t}){let{t:n}=H(),r=ir(e.remote,e.bundleUrl);return r===null?y(`div`,{className:`flex items-center justify-center gap-2 rounded-lg border border-border bg-background px-4 py-2.5 text-xs text-foreground-subtle`,children:[P(Re,{className:`h-3.5 w-3.5 animate-spin`}),n(`common.loading`,`Loading…`)]}):r===void 0?y(`div`,{"data-testid":`login-method-load-error`,className:`flex items-center justify-center gap-2 rounded-lg border border-danger/20 bg-danger/10 px-4 py-2.5 text-xs text-danger`,children:[P(Me,{className:`h-3.5 w-3.5 shrink-0`}),n(`login.primaryMethods.loadFailed`)]}):P(r,{instanceId:e.id,host:`dashboard`,config:t})}var Hv=4e3,Uv=/^[A-Za-z0-9._-]{1,64}$/;function Wv(e){let t=e.addonId!==void 0&&Uv.test(e.addonId)?e.addonId:null,n=e.integration!==void 0&&Uv.test(e.integration)?e.integration:null;if(t!==null&&e.brokerId!==void 0)return cv(`connectivity`,{integration:t,kindSection:`brokers`});let r=n??t;return cv(`connectivity`,r===null?{}:{integration:r})}function Gv(e,t){let n=t.opener;if(n===null||n.closed||Gg(n)!==t.origin)return!1;try{return n.postMessage({type:t_,ok:e.status===`success`,...e.brokerId===void 0?{}:{brokerId:e.brokerId},...e.status===`error`?{error:e.reason??`unknown`}:{}},t.origin),!0}catch{return!1}}a();var Kv=500;function qv(e){let{t}=H();switch(e){case`access_denied`:return t(`oauthLanding.reason.access_denied`,`Access was denied, so nothing was connected.`);case`invalid_state`:return t(`oauthLanding.reason.invalid_state`,`This sign-in link expired or was already used. Start the sign-in again.`);case`invalid_request`:return t(`oauthLanding.reason.invalid_request`,`The request was not valid for this hub. Start the link again from the beginning.`);case`unknown_broker`:return t(`oauthLanding.reason.unknown_broker`,`That connection no longer exists. Add it again, then sign in.`);case`not_configured`:return t(`oauthLanding.reason.not_configured`,`The connection is missing its client ID or secret. Fill them in, save, then sign in.`);case`exchange_failed`:return t(`oauthLanding.reason.exchange_failed`,`The provider did not accept the sign-in. Check the client ID and secret, then try again.`);case`no_refresh_token`:return t(`oauthLanding.reason.no_refresh_token`,`The provider returned no long-lived access. Remove CamStack from the account’s connected apps, then sign in again.`);case`unavailable`:return t(`oauthLanding.reason.unavailable`,`The hub is still starting this integration. Wait a moment and try again.`);case`unknown`:return t(`oauthLanding.reason.unknown`,`Something went wrong. Try again in a moment.`)}}function Jv({outcome:e}){let{t}=H(),n=qv(e.reason??`unknown`);if(e.status===`error`)return y(E,{children:[P(Ke,{className:`mx-auto h-8 w-8 text-danger`,"aria-hidden":!0}),P(`h1`,{"data-testid":`oauth-landing-title`,className:`text-sm font-semibold text-foreground`,children:t(`oauthLanding.errorTitle`,`Sign-in did not finish`)}),P(`p`,{"data-testid":`oauth-landing-reason`,className:`rounded-md border border-danger/20 bg-danger/10 px-3 py-2 text-xs text-danger`,children:n})]});let r=e.action===`disconnect`;return y(E,{children:[P(Be,{className:`mx-auto h-8 w-8 text-success`,"aria-hidden":!0}),P(`h1`,{"data-testid":`oauth-landing-title`,className:`text-sm font-semibold text-foreground`,children:r?t(`oauthLanding.signedOutTitle`,`Signed out`):t(`oauthLanding.successTitle`,`Signed in`)}),P(`p`,{className:`text-xs text-foreground-muted`,children:r?t(`oauthLanding.signedOutBody`,`The account was disconnected from this hub.`):t(`oauthLanding.successBody`,`The account is connected. Returning to CamStack…`)})]})}function Yv({outcome:e,closable:t,onContinue:n,onClose:r}){let{t:i}=H(),a=Wv(e);return s(()=>{if(e.status!==`success`)return;let t=window.setTimeout(()=>n(a),Hv);return()=>window.clearTimeout(t)},[e.status,n,a]),P(`main`,{className:`flex min-h-screen items-center justify-center bg-background p-4`,children:y(`div`,{className:`w-full max-w-sm space-y-4`,children:[P(`div`,{className:`flex justify-center`,children:y(`picture`,{children:[P(`source`,{media:`(prefers-color-scheme: dark)`,srcSet:B(`/brand/logo-horizontal-dark.svg`)}),P(`img`,{src:B(`/brand/logo-horizontal-light.svg`),alt:i(`oauthLanding.brand`,`CamStack`),className:`h-12`})]})}),y(`div`,{className:`space-y-4 rounded-xl border border-border bg-surface p-6 text-center shadow-xl shadow-black/10`,children:[P(Jv,{outcome:e}),y(`div`,{className:`flex flex-col gap-2`,children:[P(Mn,{type:`button`,variant:`primary`,onClick:()=>n(a),children:i(`oauthLanding.back`,`Back to CamStack`)}),t&&P(Mn,{type:`button`,variant:`ghost`,onClick:r,children:i(`oauthLanding.close`,`Close this window`)})]})]})]})})}function Xv(e,t){window.history.replaceState(null,``,window.location.pathname);let n=window.opener,r=Gv(t,{opener:n,origin:window.location.origin}),i=()=>e.render(P(Yv,{outcome:t,closable:r,onContinue:e=>window.location.replace(B(e)),onClose:()=>window.close()}));if(r&&t.status===`success`){window.close(),window.setTimeout(i,Kv);return}i()}function Zv(e){return Ht(e)}var Qv=`Done — you can close this window.`,$v=500,ey=`camstack_admin_token`;async function ty(e,t=``){try{let n=al(new URLSearchParams(t));n!==null&&n.token===e?rl(n):localStorage.setItem(ey,e)}catch{}await fetch(B(`/api/auth/session`),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({token:e})}).catch(()=>{})}function ny(){try{let e=localStorage.getItem(ey);return e!==null&&e.length>0?e:null}catch{return null}}function ry(e){let t=Zv(window.location.hash);if(t!==null){Xv(e,t);return}let n=Mg(window.location.hash);window.history.replaceState(null,``,window.location.pathname);let r=t=>e.render(P(iy,{completion:n,result:t}));if(r(null),n===null)return;let i=Kg();$g(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:Qv}),$v)},continueAt:e=>window.location.replace(B(e)),persistSession:e=>ty(e,n.target===`login`?n.fragment:``),showResult:r,setTimeout:(e,t)=>window.setTimeout(e,t)})}function iy({completion:e,result:t}){let{t:n}=H();return P(`div`,{className:`flex min-h-screen items-center justify-center bg-background p-4`,children:P(`div`,{className:`flex flex-col items-center gap-3 text-sm text-foreground-subtle`,children:e===null?P(`a`,{className:`text-primary underline`,href:B(`/login`),children:n(`ssoComplete.nothingToFinishHereGo`,`Nothing to finish here — go to sign-in`)}):t===null?y(`span`,{className:`flex items-center gap-3`,children:[P(`span`,{className:`h-4 w-4 animate-spin rounded-full border-2 border-primary/30 border-t-primary`}),n(`ssoComplete.finishingSignIn`,`Finishing sign-in…`)]}):y(E,{children:[P(`span`,{"data-testid":`sso-complete-result`,className:t.kind===`link-error`?`text-danger`:`text-foreground`,children:t.message}),P(`button`,{type:`button`,className:`rounded-md border border-border px-3 py-1.5 text-foreground hover:bg-surface-hover`,onClick:()=>window.close(),children:n(`ssoComplete.closeThisWindow`,`Close this window`)})]})})})}a();function ay(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 oy(){let e=new URLSearchParams(window.location.search);return bl({codeChallenge:e.get(`code_challenge`),codeChallengeMethod:e.get(`code_challenge_method`),state:e.get(`state`),purpose:e.get(`purpose`)})}function sy(e){return Math.min(1e3*2**e,15e3)}function cy(){let{t:e}=H(),{login:t,verifyTotp:n,finalizePasskeyLogin:r,user:i}=Xl(),{i18n:a}=H(),o=yr(),c=Ua(),l=q(),u=new URLSearchParams(window.location.search).get(`next`);s(()=>{kl(u)},[u]);let d=new URLSearchParams(window.location.search).get(`redirect`);s(()=>{Rl(d)},[d]);let p=oy();s(()=>{Cl(p)},[p?.codeChallenge,p?.state,p?.purpose]);let m=l.state,h=z_(m?.from),[g,_]=f(``),[v,b]=f(``),[x,S]=f(!1),[C,w]=f(``),[T,D]=f(!1),[O,k]=f(`credentials`),[A,j]=f(``),[N,I]=f([]),[ee,L]=f(``),[te,ne]=f(void 0),[re,ie]=f(`sso-not-linked`),R=Hr.auth.listLoginMethods.useQuery(void 0,{retry:!0,retryDelay:sy}),ae=R.data===void 0,z=(R.data??[]).filter(e=>e.kind!==`device-certificate`),oe=Hr.auth.getServerName.useQuery().data,se=z.filter(e=>e.stage===`primary`),ce=Lv(z);s(()=>{let e=Sg(window.location.hash);if(e!==null){if(window.history.replaceState({},``,window.location.pathname+window.location.search),e.kind===`challenge`){j(e.challengeToken),I(e.factors),L(``),k(`second-factor`);return}ie(e.code),ne(e.provider)}},[]);let le=te==null?null:z.find(e=>e.id===te&&`label`in e)?.label??null,ue=C||(te===void 0?``:Cg(re,le)),{passkeyMethods:de,widgetMethods:fe}=ce,me=M(!1),he=async()=>{if(me.current)return;me.current=!0;let e=El(d);if(e?.kind===`app-callback`){await ye(e.url);return}else if(e){window.location.assign(B(e.path));return}let t=jl(u);t?window.location.assign(B(t)):c(h,{replace:!0})},[ge,_e]=f(null),ye=async e=>{_e({callbackBase:e,mintedUrl:null,failed:!1});try{let t=oy()??wl();if(t===null)throw Error(`The app sent no PKCE challenge and state`);let{code:n}=await Z().trpcClient.auth.createHandoffCode.mutate({purpose:t.purpose,codeChallenge:t.codeChallenge,state:t.state}),r=Tl(e,n,t.state);_e({callbackBase:e,mintedUrl:r,failed:!1}),window.location.assign(r)}catch(t){if(ay(t)){me.current=!1,_e(null),w(`Sign in again to confirm it is you.`);return}_e({callbackBase:e,mintedUrl:null,failed:!0})}},be=i!==null,[xe,Se]=f(!1);s(()=>{!be||!d&&!u||xe||(Se(!0),he())},[be,d,u,xe]);let Ce=async e=>{e.preventDefault(),w(``),ne(void 0),D(!0);try{let e=await t(g,v);if(e.kind===`second-factor`){j(e.challengeToken),I(e.factors),k(`second-factor`);return}v===`changeme`?c(`/change-password`,{replace:!0}):await he()}catch(e){w(e instanceof Error?e.message:`Login failed`)}finally{D(!1)}},we=async e=>{e.preventDefault(),w(``),D(!0);try{await n(A,ee.trim()),await he()}catch(e){w(e instanceof Error?e.message:`TOTP verification failed`),L(``)}finally{D(!1)}},Te=async(e,t)=>{try{await r(e,t),await he()}catch(e){w(e instanceof Error?e.message:`Passkey sign-in failed`)}},Ee=M(null);s(()=>()=>Ee.current?.(),[]);let De=async e=>{if(e.target!==`login`)return;let t=al(new URLSearchParams(e.fragment));if(t!==null){try{await r(t.token,t),await he()}catch(e){w(e instanceof Error?e.message:`Sign-in failed`)}return}let n=Sg(`#${e.fragment}`);if(n!==null){if(n.kind===`challenge`){ke({challengeToken:n.challengeToken,factors:n.factors});return}ie(n.code),ne(n.provider)}},Oe=e=>{if(_l(d)?.kind===`app-callback`)return!1;let t=Ig(B(Pg(e.startUrl)));return t===null?!1:(w(``),ne(void 0),Ee.current?.(),Ee.current=Jg(t,{onReturn:e=>{Ee.current?.(),Ee.current=null,De(e)},onDone:e=>{if(Ee.current?.(),Ee.current=null,e.target!==`login`)return;let t=ny()===null?null:nl();t!==null&&De({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)},ke=e=>{let t=e.factors.filter(e=>e===`totp`||e===`passkey`);j(e.challengeToken),I(t),L(``),w(``),k(`second-factor`)};return ge===null?P(`div`,{className:`flex min-h-screen items-center justify-center bg-background p-4`,children:y(`div`,{className:`w-full max-w-sm`,children:[P(`div`,{className:`flex justify-center mb-8`,children:P(`img`,{src:o?.resolvedMode===`light`?B(`/brand/logo-horizontal-light.svg`):B(`/brand/logo-horizontal-dark.svg`),alt:e(`login.camstackAdmin`,`CamStack Admin`),className:`h-12`})}),oe!==void 0&&!oe.isDefault&&P(`p`,{"data-testid":`login-server-name`,className:`-mt-4 mb-6 text-center text-sm text-foreground-muted`,children:P(Qs,{i18nKey:`login.signInTo`,values:{name:oe.name},components:{b:P(`span`,{className:`font-semibold text-foreground`})}})}),O===`credentials`?y(`form`,{onSubmit:Ce,className:`space-y-4 rounded-xl border border-border bg-surface p-6 shadow-xl shadow-black/10`,children:[ue&&P(`div`,{"data-testid":`login-error`,className:`rounded-md bg-danger/10 border border-danger/20 px-3 py-2 text-xs text-danger`,children:ue}),y(`div`,{className:`space-y-1.5`,children:[P(`label`,{className:`text-xs font-medium text-foreground-subtle`,children:e(`login.username`,`Username`)}),P(`input`,{"data-testid":`login-username`,type:`text`,placeholder:e(`login.username`,`Username`),value:g,onChange:e=>_(e.target.value),className:`w-full rounded-lg border border-border bg-background px-3 py-2.5 text-sm text-foreground placeholder:text-foreground-disabled focus:border-primary focus:ring-1 focus:ring-primary/30 outline-none transition-all`,autoFocus:!0})]}),y(`div`,{className:`space-y-1.5`,children:[P(`label`,{className:`text-xs font-medium text-foreground-subtle`,children:e(`login.password`,`Password`)}),y(`div`,{className:`relative`,children:[P(`input`,{"data-testid":`login-password`,type:x?`text`:`password`,placeholder:e(`login.password`,`Password`),value:v,onChange:e=>b(e.target.value),className:`w-full rounded-lg border border-border bg-background px-3 py-2.5 pr-10 text-sm text-foreground placeholder:text-foreground-disabled focus:border-primary focus:ring-1 focus:ring-primary/30 outline-none transition-all`}),P(`button`,{type:`button`,onClick:()=>S(!x),className:`absolute right-2.5 top-1/2 -translate-y-1/2 text-foreground-subtle hover:text-foreground transition-colors`,tabIndex:-1,children:P(x?rt:pe,{className:`h-4 w-4`})})]})]}),P(`button`,{"data-testid":`login-submit`,type:`submit`,disabled:T||!g||!v,className:`w-full rounded-lg bg-primary px-4 py-2.5 text-sm font-semibold text-primary-foreground shadow-md shadow-primary/20 hover:shadow-lg hover:shadow-primary/30 disabled:opacity-50 disabled:shadow-none transition-all`,children:T?y(`span`,{className:`flex items-center justify-center gap-2`,children:[P(`span`,{className:`h-4 w-4 animate-spin rounded-full border-2 border-primary-foreground/30 border-t-primary-foreground`}),e(`login.loggingIn`,`Logging in...`)]}):e(`login.logIn`,`Log in`)})]}):y(`div`,{className:`space-y-4 rounded-xl border border-border bg-surface p-6 shadow-xl shadow-black/10`,children:[y(`div`,{className:`flex items-center gap-2 pb-1 border-b border-border`,children:[P(F,{className:`h-4 w-4 text-primary`}),P(`div`,{className:`text-sm font-medium text-foreground`,children:e(`login.twoFactorAuthentication`,`Two-factor authentication`)})]}),P(`p`,{className:`text-xs text-foreground-subtle`,children:g?P(E,{children:P(Qs,{i18nKey:`login.finishSigningInAs`,values:{username:g},components:{mono:P(`span`,{className:`font-mono text-foreground`})}})}):e(`login.finishSigningInAs`,`Finish signing in.`)}),C&&P(`div`,{className:`rounded-md bg-danger/10 border border-danger/20 px-3 py-2 text-xs text-danger`,children:C}),N.includes(`passkey`)&&de.map(e=>P(Pv,{method:e,challengeToken:A,onComplete:Te},e.id)),N.includes(`passkey`)&&fe.map(e=>P(Vv,{method:e,config:{challengeToken:A,onComplete:Te}},e.id)),Rv(N,ce)&&P(`div`,{className:`rounded-md border border-border bg-background px-3 py-2 text-xs text-foreground-subtle`,children:e(`login.passkeyVerificationIsnTAvailable`,`Passkey verification isn't available on this address. Open the hub via its domain URL to complete sign-in.`)}),N.includes(`passkey`)&&N.includes(`totp`)&&y(`div`,{className:`flex items-center gap-3`,children:[P(`div`,{className:`h-px flex-1 bg-border`}),P(`span`,{className:`text-[10px] uppercase tracking-wider text-foreground-subtle`,children:`or`}),P(`div`,{className:`h-px flex-1 bg-border`})]}),N.includes(`totp`)&&y(`form`,{onSubmit:we,className:`space-y-4`,children:[y(`div`,{className:`space-y-1.5`,children:[P(`label`,{className:`text-xs font-medium text-foreground-subtle`,children:e(`login.authenticationCode`,`Authentication code`)}),P(`input`,{"data-testid":`login-totp`,type:`text`,inputMode:`numeric`,autoComplete:`one-time-code`,placeholder:`123456`,value:ee,onChange:e=>L(e.target.value.replace(/\D/g,``).slice(0,6)),className:`w-full rounded-lg border border-border bg-background px-3 py-3 text-center text-2xl font-mono tracking-widest text-foreground placeholder:text-foreground-disabled focus:border-primary focus:ring-1 focus:ring-primary/30 outline-none transition-all`,autoFocus:!0})]}),P(`button`,{"data-testid":`login-totp-submit`,type:`submit`,disabled:T||ee.length!==6,className:`w-full rounded-lg bg-primary px-4 py-2.5 text-sm font-semibold text-primary-foreground shadow-md shadow-primary/20 hover:shadow-lg hover:shadow-primary/30 disabled:opacity-50 disabled:shadow-none transition-all`,children:T?y(`span`,{className:`flex items-center justify-center gap-2`,children:[P(`span`,{className:`h-4 w-4 animate-spin rounded-full border-2 border-primary-foreground/30 border-t-primary-foreground`}),e(`login.verifying`,`Verifying...`)]}):e(`login.verifyAndSignIn`,`Verify and sign in`)})]}),y(`button`,{type:`button`,onClick:()=>{k(`credentials`),j(``),I([]),L(``),w(``)},className:`w-full flex items-center justify-center gap-1.5 text-xs text-foreground-subtle hover:text-foreground transition-colors`,children:[P(ve,{className:`h-3 w-3`}),e(`login.backToUsernamePassword`,`Back to username + password`)]})]}),O===`credentials`&&ae&&y(`p`,{"data-testid":`login-methods-pending`,role:`status`,className:`mt-4 flex items-center justify-center gap-2 text-xs text-foreground-subtle`,children:[P(`span`,{className:`h-3 w-3 animate-spin rounded-full border-2 border-foreground-subtle/30 border-t-foreground-subtle`}),e(`login.methodsPending`,`Loading other sign-in options...`)]}),O===`credentials`&&P(Bv,{methods:se,widgetConfig:{onComplete:Te,onSecondFactor:ke,locale:a.language},onRedirect:Oe}),P(`p`,{className:`mt-6 text-center text-[10px] text-foreground-subtle/50`,children:e(`login.version`,{version:`1.2.460`})})]})}):P(`div`,{className:`flex min-h-screen items-center justify-center bg-background p-4`,children:y(`div`,{className:`w-full max-w-sm rounded-xl border border-border bg-surface p-6 text-center space-y-4`,children:[P(`h1`,{className:`text-sm font-semibold text-foreground`,children:e(`login.returningToTheApp`,`Returning to the app…`)}),ge.failed?y(E,{children:[P(`p`,{className:`text-xs text-danger`,children:e(`login.couldNotPrepareTheSign`,`Could not prepare the sign-in handoff. You are logged in — retry below.`)}),P(`button`,{onClick:()=>void ye(ge.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`)})]}):ge.mintedUrl===null?P(`p`,{className:`text-xs text-foreground-subtle`,children:e(`login.preparingAOneTimeSign`,`Preparing a one-time sign-in code…`)}):y(E,{children:[P(`p`,{className:`text-xs text-foreground-subtle`,children:e(`login.ifTheAppDoesNot`,`If the app does not open automatically, tap below (the code expires in 60s).`)}),P(`a`,{href:ge.mintedUrl,className:`inline-flex rounded-lg bg-primary px-4 py-2 text-sm font-medium text-primary-foreground hover:bg-primary/90`,children:e(`login.openCamstack`,`Open CamStack`)})]})]})})}a();function ly(){let{pathname:e,search:t,hash:n}=q();return P(J,{to:`${dv(e)}${t}${n}`,replace:!0})}function uy(){return P(J,{to:L_()??`/devices`,replace:!0})}var dy=m(()=>i(()=>import(`./Devices-DKbjdxcr.js`).then(e=>({default:e.DevicesPage})),__vite__mapDeps([0,1,2,3,4,5,6,7,8]),import.meta.url)),fy=m(()=>i(()=>import(`./Integrations-a8KDlcvK.js`).then(e=>({default:e.IntegrationsPage})),__vite__mapDeps([9,1,2,3,4,10,5,6,11,12,13,7,8]),import.meta.url)),py=m(()=>i(()=>import(`./IntegrationDetail-BP5Tp1Xv.js`).then(e=>({default:e.IntegrationDetailPage})),__vite__mapDeps([14,1,2,3,4,15,5,16,11,12,13,7,17]),import.meta.url)),my=m(()=>i(()=>import(`./Pipeline-CCYyFQs2.js`).then(e=>({default:e.PipelinePage})),__vite__mapDeps([18,1,2,3,4,10,5,19,20,21,22,16,23,24,8]),import.meta.url)),hy=m(()=>i(()=>import(`./DeviceDetail-DxOdxrh3.js`).then(e=>({default:e.DeviceDetailPage})),__vite__mapDeps([25,1,2,3,4,10,5,26,27,28,29,19,30,22,31,32,33,34,24,8,35,13]),import.meta.url)),gy=m(()=>i(()=>import(`./Showroom-ndNDu6AF.js`).then(e=>({default:e.ShowroomPage})),__vite__mapDeps([36,1,2,3,4]),import.meta.url)),_y=m(()=>i(()=>import(`./EmbedPlayerPage-Cy-nFopg.js`).then(e=>({default:e.EmbedPlayerPage})),__vite__mapDeps([37,1,2,3,4,5]),import.meta.url)),vy=m(()=>i(()=>import(`./Library-Bn3TiJ8y.js`).then(e=>({default:e.LibraryPage})),__vite__mapDeps([38,1,2,3,4,10,5,39,19,21,40,41,32,42,35,13]),import.meta.url)),yy=m(()=>i(()=>import(`./Recordings-CVFFAgP5.js`).then(e=>({default:e.RecordingsPage})),__vite__mapDeps([43,1,2,3,4,10,5,44,41,45,26,46,47,48,35,13]),import.meta.url)),by=m(()=>i(()=>import(`./Viewer-CUYAjAr2.js`).then(e=>({default:e.ViewerPage})),__vite__mapDeps([49,2,3,4,50,5,13,1]),import.meta.url)),xy=m(()=>i(()=>import(`./Build-ClOzVQfs.js`).then(e=>({default:e.BuildPage})),__vite__mapDeps([51,1,2,3,4,10,5,29,52,19,41,31,53]),import.meta.url)),Sy=m(()=>i(()=>import(`./CompositionEditorPage-CzNZMblE.js`).then(e=>({default:e.CompositionEditorPage})),__vite__mapDeps([54,1,2,3,4,29,5,6,31,10]),import.meta.url)),Cy=m(()=>i(()=>import(`./Locations-kMreeWCo.js`).then(e=>({default:e.LocationsPage})),__vite__mapDeps([55,1,2,3,4,10,5,29,56,40,41,33,34]),import.meta.url)),wy=m(()=>i(()=>import(`./Addons-CgBqBge8.js`).then(e=>({default:e.AddonsPage})),__vite__mapDeps([57,1,2,3,4,19,5,6,16,58,13]),import.meta.url)),Ty=m(()=>i(()=>import(`./AiProfiles-BCwpORLm.js`).then(e=>({default:e.AiProfilesPage})),__vite__mapDeps([59,1,2,3,4,10,5,60,61,6,41,13]),import.meta.url)),Ey=m(()=>i(()=>import(`./MyAccess-C4nalat5.js`).then(e=>({default:e.MyAccessPage})),__vite__mapDeps([62,1,2,3,4,10,5,19,63,64,65,6,41,66,13]),import.meta.url)),Dy=m(()=>i(()=>import(`./Logs-BINANLCk.js`).then(e=>({default:e.LogsPage})),__vite__mapDeps([67,1,2,3,4,68,22,5,6,41,69,70,16,71,17,13,72]),import.meta.url)),Oy=m(()=>i(()=>import(`./Identity-Cvu5d-Dp.js`).then(e=>({default:e.IdentityPage})),__vite__mapDeps([73,1,2,3,4,10,5,74,19,63,64,65,6,41,69,70,16,71,17,13,66,72]),import.meta.url)),ky=m(()=>i(()=>import(`./Network-oFeEwPiX.js`).then(e=>({default:e.NetworkPage})),__vite__mapDeps([75,1,2,3,4,10,5,29,19,76,6,41,69,70,16,71,17,13,72]),import.meta.url)),Ay=m(()=>i(()=>import(`./Integrations-Bxk1Pm6v.js`).then(e=>({default:e.IntegrationsPage})),__vite__mapDeps([77,1,2,3,4,10,5,19,76,64,78,41,69,70,6,16,71,17,13,12]),import.meta.url)),jy=m(()=>i(()=>import(`./Data-H0iqkofK.js`).then(e=>({default:e.DataPage})),__vite__mapDeps([79,1,2,3,4,10,5,80,30,47,6,41,45,26,46,48,35,13]),import.meta.url)),My=m(()=>i(()=>import(`./System-BxeSBDfd.js`).then(e=>({default:e.SystemPage})),__vite__mapDeps([81,1,2,3,4,10,5,19,63,6,41,16,71,17,13]),import.meta.url)),Ny=m(()=>i(()=>import(`./Cluster-DRNVLj1k.js`).then(e=>({default:e.ClusterPage})),__vite__mapDeps([82,1,2,3,4,10,5,47,83,65,6,16,23,58,48]),import.meta.url)),Py=m(()=>i(()=>import(`./Terminal-JlLeryPw.js`).then(e=>({default:e.TerminalPage})),__vite__mapDeps([84,1,2,3,4,19,5,6,16,85]),import.meta.url)),Fy=m(()=>i(()=>import(`./Notifications-DL5HsEPP.js`).then(e=>({default:e.NotificationsPage})),__vite__mapDeps([86,1,2,3,4,10,5,28,19,60,87,6,41,53,42,13,34]),import.meta.url)),Iy=m(()=>i(()=>import(`./History-C87WOkmh.js`).then(e=>({default:e.HistoryPage})),__vite__mapDeps([88,1,2,3,4,5,6]),import.meta.url)),Ly=m(()=>i(()=>import(`./Calendars-CBoSQYDb.js`).then(e=>({default:e.CalendarsPage})),__vite__mapDeps([89,1,2,3,4,10,5,19,6]),import.meta.url)),Ry=new D({defaultOptions:{queries:{gcTime:0,staleTime:0,retry:!1,refetchOnWindowFocus:!1}}});Sn(Ry);function zy({field:e,value:t,onChange:n,disabled:r}){return P(Im,{field:e,value:t,onChange:n,disabled:r})}var By={"model-selector":zy};function Vy({children:e}){let{t}=H(),{user:n,logout:r}=Xl(),[i,a]=f(0),o=M(n?.username??null);s(()=>{let e=n?.username??null;e!==o.current&&(o.current=e,Xc(),a(e=>e+1))},[n]);let c=d(()=>Z(),[i]),l=p(()=>{Z().reconnect(),a(e=>e+1),Ry.invalidateQueries()},[]);ah(p(()=>ml(l),[l])),s(()=>ul(()=>{Z().isSocketTokenStale()&&l()}),[l]);let u=p(async()=>{let e=await hl();return e&&l(),e},[l]),{bootReady:m,bootError:h}=rh(c,n??null,r,u);return P(eh,{children:P(Pe,{system:c,children:P(Hr.Provider,{client:c.trpcClient,queryClient:Ry,children:y(ti,{children:[P(Hn,{children:m?e:P(Hy,{})}),m&&P(Hm,{}),h!==null&&m&&y(`div`,{className:`fixed bottom-[calc(env(safe-area-inset-bottom)+1rem)] right-[calc(env(safe-area-inset-right)+1rem)] z-50 max-w-sm rounded-lg border border-warning/30 bg-warning/10 px-3 py-2 text-xs text-warning shadow-lg`,children:[t(`app.bootProbeFailed`,`Boot probe failed:`),` `,h,`. Retrying in background.`]})]})})})})}function Hy(){let{t:e}=H();return P(`div`,{className:`flex min-h-screen items-center justify-center bg-background`,children:y(`div`,{className:`flex items-center gap-3 text-sm text-foreground-subtle`,children:[P(`span`,{className:`h-4 w-4 animate-spin rounded-full border-2 border-primary/30 border-t-primary`}),e(`app.connecting`,`Connecting…`)]})})}function Uy(){return P(`div`,{className:`flex min-h-screen items-center justify-center bg-background`,children:P(`span`,{className:`h-4 w-4 animate-spin rounded-full border-2 border-primary/30 border-t-primary`})})}function Wy(){return P(Xr,{defaultMode:`dark`,children:P(N,{client:Ry,children:P(Yl,{children:P(Vy,{children:P(Tr,{children:P(Vm,{children:y(In,{renderers:By,children:[P(cs,{basename:We(),children:P(Am,{children:P(w,{fallback:P(Uy,{}),children:y(yo,{children:[P(Y,{path:`/login`,element:P(cy,{})}),P(Y,{path:`/admin/*`,element:P(ly,{})}),P(Y,{path:`/admin`,element:P(ly,{})}),P(Y,{path:`/change-password`,element:P($,{children:P(vv,{})})}),P(Y,{path:`/showroom`,element:P(gy,{})}),P(Y,{path:`/embed/player`,element:P(_y,{})}),y(Y,{element:P($,{children:P(xi,{children:P(K_,{})})}),children:[P(Y,{index:!0,element:P(uy,{})}),P(Y,{path:`/access-denied`,element:P(fv,{})}),P(Y,{path:`/dashboard`,element:P(J,{to:`/devices`,replace:!0})}),P(Y,{path:`/devices`,element:P(dy,{})}),P(Y,{path:`/cameras`,element:P(J,{to:`/devices`,replace:!0})}),P(Y,{path:`/integrations`,element:P(fy,{})}),P(Y,{path:`/integrations/:integrationId`,element:P(py,{})}),P(Y,{path:`/system/pipeline`,element:P(my,{})}),P(Y,{path:`/pipeline`,element:P(J,{to:`/system/pipeline`,replace:!0})}),P(Y,{path:`/live`,element:P(by,{})}),P(Y,{path:`/devices/:deviceId`,element:P(hy,{})}),P(Y,{path:`/system/logs`,element:P($,{requireAdmin:!0,children:P(Dy,{})})}),P(Y,{path:`/system/addons`,element:P($,{requireAdmin:!0,children:P(wy,{})})}),P(Y,{path:`/system/ai`,element:P($,{requireAdmin:!0,children:P(Ty,{})})}),P(Y,{path:`/system/settings`,element:P($,{requireAdmin:!0,children:P(My,{})})}),P(Y,{path:`/system/nodes`,element:P($,{requireAdmin:!0,children:P(Ny,{})})}),P(Y,{path:`/system/notifications`,element:P($,{requireAdmin:!0,children:P(Fy,{})})}),P(Y,{path:`/system/history`,element:P($,{requireAdmin:!0,children:P(Iy,{})})}),P(Y,{path:`/system/calendars`,element:P($,{requireAdmin:!0,children:P(Ly,{})})}),P(Y,{path:`/system/identity`,element:P($,{requireAdmin:!0,children:P(Oy,{})})}),P(Y,{path:`/system/my-access`,element:P(Ey,{})}),P(Y,{path:`/system/network`,element:P($,{requireAdmin:!0,children:P(ky,{})})}),P(Y,{path:`/system/integrations`,element:P($,{requireAdmin:!0,children:P(Ay,{})})}),P(Y,{path:`/system/data`,element:P($,{requireAdmin:!0,children:P(jy,{})})}),P(Y,{path:`/system`,element:P(J,{to:Gm,replace:!0})}),P(Y,{path:`/system/terminal`,element:P($,{requireAdmin:!0,children:P(Py,{})})}),Km.map(e=>P(Y,{path:e.path,element:P(Jm,{tab:e.tab})},e.path)),P(Y,{path:`/system/users`,element:P(J,{to:`/system/identity?tab=users`,replace:!0})}),P(Y,{path:`/system/api-keys`,element:P(J,{to:`/system/identity?tab=api-keys`,replace:!0})}),P(Y,{path:`/system/authentication`,element:P(J,{to:cv(`authentication`),replace:!0})}),P(Y,{path:`/system/linked-sessions`,element:P(J,{to:`/system/identity?tab=linked-sessions`,replace:!0})}),P(Y,{path:`/system/remote-access`,element:P(J,{to:cv(`remoteAccess`),replace:!0})}),P(Y,{path:`/system/turn`,element:P(J,{to:cv(`turn`),replace:!0})}),P(Y,{path:`/system/storage`,element:P(J,{to:`/system/data?tab=storage`,replace:!0})}),P(Y,{path:`/system/backup`,element:P(J,{to:`/system/data?tab=backup`,replace:!0})}),P(Y,{path:`/library`,element:P($,{requireAdmin:!0,children:P(vy,{})})}),P(Y,{path:`/retrain`,element:P(J,{to:`/addon/training`,replace:!0})}),P(Y,{path:`/recordings`,element:P($,{requireAdmin:!0,children:P(yy,{})})}),P(Y,{path:`/build`,element:P($,{requireAdmin:!0,children:P(xy,{})})}),P(Y,{path:X_,element:P($,{requireAdmin:!0,children:P(Sy,{})})}),P(Y,{path:Z_,element:P($,{requireAdmin:!0,children:P(Sy,{})})}),P(Y,{path:`/locations`,element:P($,{requireAdmin:!0,children:P(Cy,{})})}),P(Y,{path:`/automation`,element:P(Lm,{to:`/build`})}),P(Y,{path:`/addon/:pagePath`,element:P($,{requireAdmin:!0,children:P(gh,{})})}),P(Y,{path:`*`,element:P(J,{to:`/devices`,replace:!0})})]})]})})})}),P(Zm,{})]})})})})})})})}a(),window.__camstackUiLibrary=Pr,window.__camstackSdk=Ir,window.__camstackTypes=Jt;var Gy=ui(document.getElementById(`root`));e_(window.location.pathname,We())?ry(Gy):Gy.render(P(S,{children:P(Wy,{})}));export{np as $,eu as $n,Od as $t,Om as A,Vu as An,Bd as At,Cp as B,hu as Bn,Ld as Bt,Tg as C,rd as Cn,mf as Ct,$m as D,qu as Dn,$d as Dt,Fh as E,Mu as En,uf as Et,Gp as F,Uu as Fn,Jd as Ft,ip as G,tu as Gn,Fd as Gt,hp as H,iu as Hn,Md as Ht,qp as I,Zu as In,Yd as It,op as J,au as Jn,gd as Jt,Xf as K,nu as Kn,Nd as Kt,Vp as L,Eu as Ln,Gd as Lt,$p as M,Tu as Mn,Wd as Mt,Zp as N,Du as Nn,Kd as Nt,Gm as O,ad as On,pf as Ot,Wp as P,Gu as Pn,qd as Pt,Yf as Q,ru as Qn,Dd as Qt,Bp as R,yu as Rn,Ad as Rt,Pg as S,wu as Sn,nf as St,Bh as T,ju as Tn,cf as Tt,gp as U,$l as Un,Id as Ut,lp as V,lu as Vn,zd as Vt,_p as W,du as Wn,Pd as Wt,Gf as X,fu as Xn,Ed as Xt,$f as Y,su as Yn,kd as Yt,Wf as Z,ou as Zn,Sd as Zt,ev as _,Xu as _n,Ua as _r,Sf as _t,av as a,bd as an,Mc as ar,Bf as at,Ig as b,Iu as bn,rf as bt,ov as c,Bu as cn,Cc as cr,Vf as ct,uv as d,xu as dn,X as dr,Pf as dt,hd as en,uu as er,ap as et,Q_ as f,Hu as fn,uc as fr,Nf as ft,tv as g,Au as gn,J as gr,_f as gt,q_ as h,nd as hn,us as hr,Qd as ht,iv as i,yd as in,Xl as ir,Qf as it,mm as j,zu as jn,Vd as jt,Bm as k,Lu as kn,Xd as kt,cv as l,Fu as ln,Sc as lr,Lf as lt,J_ as m,Yu as mn,Qs as mr,Zd as mt,Av as n,ud as nn,pu as nr,qf as nt,nv as o,Ku as on,wc as or,Rf as ot,Y_ as p,Wu as pn,ic as pr,Of as pt,Kf as q,cu as qn,Td as qt,sv as r,pd as rn,Ql as rr,Jf as rt,rv as s,id as sn,Dc as sr,zf as st,Mv as t,vd as tn,mu as tr,cp as tt,lv as u,Ru as un,xc as ur,Ff as ut,$_ as v,Ju as vn,qa as vr,lf as vt,og as w,ku as wn,df as wt,Jg as x,Cu as xn,hf as xt,s_ as y,Qu as yn,vs as yr,sf as yt,zp as z,_u as zn,Rd as zt};