@camera.ui/server 2.1.2 → 2.1.4

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 (552) hide show
  1. package/dist/interface/assets/{404-pb2fRn1r.js → 404-6v3-U7nj.js} +1 -1
  2. package/dist/interface/assets/{About-eljMnDub.js → About-IMZSnCy7.js} +1 -1
  3. package/dist/interface/assets/{Adminpanel-BtQdiyre.js → Adminpanel-jq9sK1Ey.js} +1 -1
  4. package/dist/interface/assets/{Automation-DOiLJcU_.js → Automation-xs_GEpGx.js} +3 -3
  5. package/dist/interface/assets/{AutomationImport-DflZNRBB.js → AutomationImport-CR4fWWkU.js} +2 -2
  6. package/dist/interface/assets/{AutomationStore-qF_NTNUf.js → AutomationStore-rB-eVXdY.js} +2 -2
  7. package/dist/interface/assets/{AutomationStoreDetail-CUw-jBBR.js → AutomationStoreDetail-DzMg8IOO.js} +2 -2
  8. package/dist/interface/assets/Automations-DWI8Q2TS.js +2 -0
  9. package/dist/interface/assets/Camera-BIppnvyN.js +2 -0
  10. package/dist/interface/assets/Camera-BfMZmurS.css +1 -0
  11. package/dist/interface/assets/{CameraConsole-CEARcJYc.js → CameraConsole-CQLrlDvb.js} +2 -2
  12. package/dist/interface/assets/{Cameras-C0oHuoTR.js → Cameras-kIN6bWi1.js} +2 -2
  13. package/dist/interface/assets/Camview-4jdGGny8.js +1 -0
  14. package/dist/interface/assets/Camview-UCj_OW0s.css +1 -0
  15. package/dist/interface/assets/Config-DxYeS7cY.js +2 -0
  16. package/dist/interface/assets/{ConfigActionCameraControl-De0qb88r.js → ConfigActionCameraControl-Biu5BwNu.js} +1 -1
  17. package/dist/interface/assets/{ConfigActionDelay-nDK4i-AL.js → ConfigActionDelay-CK5j4XLw.js} +1 -1
  18. package/dist/interface/assets/{ConfigActionHttp-DX-vapgv.js → ConfigActionHttp-Dtvi3jZB.js} +1 -1
  19. package/dist/interface/assets/{ConfigActionImageInput-CS7U7BsI.js → ConfigActionImageInput-Dh0A20j9.js} +1 -1
  20. package/dist/interface/assets/{ConfigActionMqtt-82swCx_F.js → ConfigActionMqtt-DwZdnDlb.js} +1 -1
  21. package/dist/interface/assets/{ConfigActionNotification-t-1zN_1y.js → ConfigActionNotification-BVqYxGu8.js} +1 -1
  22. package/dist/interface/assets/{ConfigActionNotificationControl-jz3ez2Uq.js → ConfigActionNotificationControl-BTdnQqox.js} +1 -1
  23. package/dist/interface/assets/{ConfigActionOutput-B6uJheX1.js → ConfigActionOutput-Dv745ppL.js} +1 -1
  24. package/dist/interface/assets/{ConfigActionPlugin-LyOIrZnv.js → ConfigActionPlugin-C9QdPDXC.js} +1 -1
  25. package/dist/interface/assets/{ConfigActionSensor-BTqc1inw.js → ConfigActionSensor-D17wASao.js} +1 -1
  26. package/dist/interface/assets/{ConfigActionSnapshot-DdPy_Ubu.js → ConfigActionSnapshot-CrbMLwuh.js} +1 -1
  27. package/dist/interface/assets/{ConfigActionVariable-Csf7jPOm.js → ConfigActionVariable-C0HobSMN.js} +1 -1
  28. package/dist/interface/assets/{ConfigConditionIfElse-BvzwZ70p.js → ConfigConditionIfElse-DsedkGhY.js} +1 -1
  29. package/dist/interface/assets/ConfigConditionSensorState-rRLbA2_b.js +1 -0
  30. package/dist/interface/assets/{ConfigConditionSwitch-DJU2JC-3.js → ConfigConditionSwitch-5nEVS-Oj.js} +1 -1
  31. package/dist/interface/assets/{ConfigConditionTime-BxE2CJMA.js → ConfigConditionTime-CieLn-sp.js} +1 -1
  32. package/dist/interface/assets/ConfigSensorValueInput-CRRM_aBz.js +1 -0
  33. package/dist/interface/assets/{ConfigTriggerDetection-DpC8V8K8.js → ConfigTriggerDetection-CMVgejZ3.js} +1 -1
  34. package/dist/interface/assets/{ConfigTriggerGeofence-DTzax7bc.js → ConfigTriggerGeofence-cMhyndiz.js} +1 -1
  35. package/dist/interface/assets/{ConfigTriggerManual-CtjnnQb1.js → ConfigTriggerManual-Bd9H0AfP.js} +1 -1
  36. package/dist/interface/assets/{ConfigTriggerMqtt-C7J22EMe.js → ConfigTriggerMqtt-BIv5Ca91.js} +1 -1
  37. package/dist/interface/assets/{ConfigTriggerSchedule-DnYDDz3F.js → ConfigTriggerSchedule-CzWWcnFW.js} +1 -1
  38. package/dist/interface/assets/ConfigTriggerSensor-C5lsyxsh.js +1 -0
  39. package/dist/interface/assets/{ConfigTriggerSystem-D1JulYVd.js → ConfigTriggerSystem-WipCRwTJ.js} +1 -1
  40. package/dist/interface/assets/{ConfigTriggerWebhook-BrKFtq7o.js → ConfigTriggerWebhook-Bl0O4RBX.js} +1 -1
  41. package/dist/interface/assets/Console-GtK0GVLX.js +1 -0
  42. package/dist/interface/assets/CuiAutomationRunsDialog-CUPBuq_J.js +1 -0
  43. package/dist/interface/assets/CuiBottomSheet-DQNpk0mh.js +1 -0
  44. package/dist/interface/assets/{CuiBottomSheet-C_1_moNo.js → CuiBottomSheet-K19nZQiG.js} +1 -1
  45. package/dist/interface/assets/CuiCameraPipCard-e3_uYELi.js +1 -0
  46. package/dist/interface/assets/CuiCameraRecordings-CPAMltfx.js +1 -0
  47. package/dist/interface/assets/CuiCameraRecordings-fB3X6kad.css +1 -0
  48. package/dist/interface/assets/{CuiCameraShares-XwN5kuC7.js → CuiCameraShares-BTn5ys6X.js} +1 -1
  49. package/dist/interface/assets/{CuiCameraTable-BeeHLaiQ.js → CuiCameraTable-DYvQ-GCz.js} +2 -2
  50. package/dist/interface/assets/{CuiConsole-B7R7U9UZ.js → CuiConsole-C4PawCou.js} +2 -2
  51. package/dist/interface/assets/{CuiDataTable-CQhCu0px.js → CuiDataTable-CORQOWsf.js} +1 -1
  52. package/dist/interface/assets/CuiLightControl-BYkQ8Ue3.js +1 -0
  53. package/dist/interface/assets/CuiList-BgZBIhXP.js +1 -0
  54. package/dist/interface/assets/CuiMarkdownContent-CCdOW_TM.js +1 -0
  55. package/dist/interface/assets/CuiMarkdownContent-ChezqgI1.js +1 -0
  56. package/dist/interface/assets/{CuiPluginCard-rkhmuumi.css → CuiPluginCard-C3ANAXSI.css} +1 -1
  57. package/dist/interface/assets/CuiPluginCard-C91rKOge.js +2 -0
  58. package/dist/interface/assets/{CuiPluginCategoryChip-JkdbQU4X.js → CuiPluginCategoryChip-B_Zy4B42.js} +1 -1
  59. package/dist/interface/assets/{CuiPluginOAuthButton-LYMFfb3v.js → CuiPluginOAuthButton-IXGedGWs.js} +2 -2
  60. package/dist/interface/assets/{CuiPluginTrustBadge-sZF0UKMD.js → CuiPluginTrustBadge-DTfM8Jjo.js} +1 -1
  61. package/dist/interface/assets/{CuiQRCode-B4ysluWR.js → CuiQRCode-D5vwhyuQ.js} +1 -1
  62. package/dist/interface/assets/CuiRecordingsGrid-Sv3uyj9a.css +1 -0
  63. package/dist/interface/assets/CuiRecordingsGrid-yXEzhnc4.js +1 -0
  64. package/dist/interface/assets/CuiSchema-hK_tgUP9.js +1 -0
  65. package/dist/interface/assets/{CuiTopNavbarItem-rMsWME9B.js → CuiTopNavbarItem-DWLnn7Kh.js} +1 -1
  66. package/dist/interface/assets/Faces-DzwTi8P1.js +1 -0
  67. package/dist/interface/assets/FirstSteps-0ojmFGSr.js +1 -0
  68. package/dist/interface/assets/Instances-DvoFBGMx.js +1 -0
  69. package/dist/interface/assets/{Logs-8onUmCYX.js → Logs-Cii4oP8R.js} +2 -2
  70. package/dist/interface/assets/Menu-pvtuFKFM.js +1 -0
  71. package/dist/interface/assets/OAuthDeviceFlow-BZgtsIjF.js +1 -0
  72. package/dist/interface/assets/Plugin-BDqNeTCT.css +1 -0
  73. package/dist/interface/assets/Plugin-BKqpBWJy.js +1 -0
  74. package/dist/interface/assets/{PluginConsole-JFcH_ZW0.js → PluginConsole-BFsCogtB.js} +1 -1
  75. package/dist/interface/assets/PluginDetail-Dl0OM6me.js +2 -0
  76. package/dist/interface/assets/{PluginSchema-Gfn_csMP.js → PluginSchema-D45zblVz.js} +1 -1
  77. package/dist/interface/assets/PluginSearch-DdIcv9xA.js +1 -0
  78. package/dist/interface/assets/{PluginSearch-CLjLT9JT.css → PluginSearch-Dlzc-aJ3.css} +1 -1
  79. package/dist/interface/assets/PluginSearch-DxoQUW8M.js +2 -0
  80. package/dist/interface/assets/{PluginUpdateProgress-DaI9bwSV.js → PluginUpdateProgress-CsRGGH8J.js} +1 -1
  81. package/dist/interface/assets/Plugins-CGj8DSLJ.js +1 -0
  82. package/dist/interface/assets/Recordings-PojBH8L3.js +1 -0
  83. package/dist/interface/assets/SensorEdit-D2ChsNDL.js +1 -0
  84. package/dist/interface/assets/{SensorHistory-2TmYLaL4.js → SensorHistory-B6ZKgot4.js} +1 -1
  85. package/dist/interface/assets/Sensors-B-Qhfr5i.css +1 -0
  86. package/dist/interface/assets/Sensors-DyqWcB-G.js +2 -0
  87. package/dist/interface/assets/{Settings-8yG5ny5r.js → Settings-BFJO08mq.js} +1 -1
  88. package/dist/interface/assets/SettingsAccount-DREZwvce.js +1 -0
  89. package/dist/interface/assets/SettingsAccount-QxmP0dzI.js +1 -0
  90. package/dist/interface/assets/SettingsAppearance-BejKI3_C.js +1 -0
  91. package/dist/interface/assets/{SettingsAppearance-WQtOksbk.js → SettingsAppearance-_zvMUQvn.js} +1 -1
  92. package/dist/interface/assets/SettingsBackup-8HCwVmDA.js +1 -0
  93. package/dist/interface/assets/SettingsList-B4H786Cc.js +1 -0
  94. package/dist/interface/assets/SettingsMqtt-D7ajm1JA.js +1 -0
  95. package/dist/interface/assets/{SettingsNotifications-BVGmt0eF.js → SettingsNotifications-fDDuqryh.js} +2 -2
  96. package/dist/interface/assets/{SettingsPermissions-BPqDIjVt.js → SettingsPermissions-DYirYf1Z.js} +1 -1
  97. package/dist/interface/assets/SettingsRecordings-4NxpAbu5.js +1 -0
  98. package/dist/interface/assets/SettingsRemote-DOQkaNzp.js +1 -0
  99. package/dist/interface/assets/SettingsSystem-CVWkw449.js +2 -0
  100. package/dist/interface/assets/{SettingsUsers-BtT17FNe.js → SettingsUsers-Dc6L7Lt2.js} +1 -1
  101. package/dist/interface/assets/Terminal-BgVnN-2g.js +4 -0
  102. package/dist/interface/assets/{VariableInput-CkXZ00Gc.js → VariableInput-ZYn-Phl4.js} +1 -1
  103. package/dist/interface/assets/{VariableSuggestions-BD1kOG5f.js → VariableSuggestions-BnzdQP6R.js} +1 -1
  104. package/dist/interface/assets/VersionsHandler-BvKvGOlF.js +7 -0
  105. package/dist/interface/assets/{VirtualSensorCreate-DcwJ_w-l.js → VirtualSensorCreate-Dk_YYzxR.js} +1 -1
  106. package/dist/interface/assets/Workers-CjEzGjy8.js +2 -0
  107. package/dist/interface/assets/{account-CY80SLLf.js → account-DuSFtIHf.js} +1 -1
  108. package/dist/interface/assets/{alert-circle-pDGfnZ4K.js → alert-circle-C2AU59aR.js} +1 -1
  109. package/dist/interface/assets/{alert-outline-CeoXcnQc.js → alert-outline-GrD7-zHq.js} +1 -1
  110. package/dist/interface/assets/{api-Mny5Elfn.js → api-36pS71R2.js} +1 -1
  111. package/dist/interface/assets/api-CDvtqu1L.css +2 -0
  112. package/dist/interface/assets/api-DTFsk1zB.js +2 -0
  113. package/dist/interface/assets/{arrow-left-D9jDhvK5.js → arrow-left-C1N6U6kZ.js} +1 -1
  114. package/dist/interface/assets/{arrow-right-outline-DF7tkKYk.js → arrow-right-outline-C24f5mwe.js} +1 -1
  115. package/dist/interface/assets/{auth-9_Jjlsh0.js → auth-DYoO8jpd.js} +1 -1
  116. package/dist/interface/assets/automations-BOvDlvvx.js +1 -0
  117. package/dist/interface/assets/{back-filled-DUUGErMw.js → back-filled-DcBDBvvP.js} +1 -1
  118. package/dist/interface/assets/{bell-ring-DV73JIre.js → bell-ring-DSX81yd4.js} +1 -1
  119. package/dist/interface/assets/cameras.schema-BvnUX82v.js +1 -0
  120. package/dist/interface/assets/{cctv-jy5ROx0o.js → cctv-BA5DvNlE.js} +1 -1
  121. package/dist/interface/assets/{check-circle-FwoylV5-.js → check-circle-Do_mBN_A.js} +1 -1
  122. package/dist/interface/assets/{chevron-down-umZ7i0mG.js → chevron-down-D111daTn.js} +1 -1
  123. package/dist/interface/assets/{clock-outline-CbvOAMhO.js → clock-outline-DF1wLNzs.js} +1 -1
  124. package/dist/interface/assets/{close-CtaDF28n.js → close-BNAWPz0y.js} +1 -1
  125. package/dist/interface/assets/{close-circle-FZ8IxGd4.js → close-circle-zhDWvz98.js} +1 -1
  126. package/dist/interface/assets/{cloud-check-CFSukfAF.js → cloud-check-pUK1Fpt9.js} +1 -1
  127. package/dist/interface/assets/cloudHandoff-DNKMEHOI.js +1 -0
  128. package/dist/interface/assets/{config-BZphegxi.js → config-DTGhJmsj.js} +1 -1
  129. package/dist/interface/assets/{copy-CFA_pDRv.js → copy-BPT84cDt.js} +1 -1
  130. package/dist/interface/assets/{cube-scan-DEuMi23T.js → cube-scan-DOe6W9mW.js} +1 -1
  131. package/dist/interface/assets/{delete-921w_nKy.js → delete-BF6keuqy.js} +1 -1
  132. package/dist/interface/assets/{deployed-code-update-CYS6eKfa.js → deployed-code-update-xHE-blDN.js} +1 -1
  133. package/dist/interface/assets/{dist-BwEXwXSw.js → dist-Yc5s0_JB.js} +1 -1
  134. package/dist/interface/assets/{download-C-LzNRmM.js → download-BCPfm6aN.js} +1 -1
  135. package/dist/interface/assets/esm-B3yVlCMw.js +1 -0
  136. package/dist/interface/assets/esm-BKQ7CQK7.js +1 -0
  137. package/dist/interface/assets/esm-BiSE05P9.js +1 -0
  138. package/dist/interface/assets/esm-BoPthGAl.js +1 -0
  139. package/dist/interface/assets/esm-C2ALrdyx.js +1 -0
  140. package/dist/interface/assets/esm-CKEGzys4.js +1 -0
  141. package/dist/interface/assets/esm-CctiCHtK.js +1 -0
  142. package/dist/interface/assets/esm-Cqq81lnk.js +1 -0
  143. package/dist/interface/assets/esm-CyrLQTu0.js +1 -0
  144. package/dist/interface/assets/esm-D6O-eZYo.js +1 -0
  145. package/dist/interface/assets/esm-DG1f0qwo.js +1 -0
  146. package/dist/interface/assets/esm-DGegIZMF.js +1 -0
  147. package/dist/interface/assets/esm-JGwpHVqo.js +1 -0
  148. package/dist/interface/assets/esm-TRigYTsA.js +1 -0
  149. package/dist/interface/assets/{eye-off-DESV3QdF.js → eye-off-CaRq7Ks2.js} +1 -1
  150. package/dist/interface/assets/{flowSchema-_RiPAgMv.js → flowSchema-zo1H4tnP.js} +1 -1
  151. package/dist/interface/assets/{history-60iCpGvQ.js → history-SuH8IHAj.js} +1 -1
  152. package/dist/interface/assets/{home-w5iY2RUg.js → home-CUykMSBW.js} +1 -1
  153. package/dist/interface/assets/{information-outline-CvBsGtDu.js → information-outline-BQDq8w2t.js} +1 -1
  154. package/dist/interface/assets/{lightbulb-outline-DLrnCPG5.js → lightbulb-outline-ClK17CO6.js} +1 -1
  155. package/dist/interface/assets/main-CcvCf5qj.js +3 -0
  156. package/dist/interface/assets/{main-DJb49Tjp.css → main-XQ5Vahbs.css} +1 -1
  157. package/dist/interface/assets/{microphone-DUVI-s2_.js → microphone-C0weJY9W.js} +1 -1
  158. package/dist/interface/assets/minus-RI3VlDe8.js +1 -0
  159. package/dist/interface/assets/mqtt-CYc8_9pb.js +1 -0
  160. package/dist/interface/assets/native-B01iGjCh.js +1 -0
  161. package/dist/interface/assets/native-D381pxlG.js +1 -0
  162. package/dist/interface/assets/{nodeDefinitions-BecZ8I2Q.js → nodeDefinitions-DQQlFmPN.js} +1 -1
  163. package/dist/interface/assets/{notifications-CK6XQBF-.js → notifications-cHS8-1HN.js} +1 -1
  164. package/dist/interface/assets/{pencil-outline-BrOrbuzc.js → pencil-outline-D7aD4cCo.js} +1 -1
  165. package/dist/interface/assets/plugin-W20ihuog.js +1 -0
  166. package/dist/interface/assets/plugins-CaKErv4E.js +1 -0
  167. package/dist/interface/assets/{plus-Dd-XLT76.js → plus-CA5o30dE.js} +1 -1
  168. package/dist/interface/assets/{plus-CL6KSxf8.js → plus-DHwFyXkb.js} +1 -1
  169. package/dist/interface/assets/{power-lCbm_7y7.js → power-C9UIp2oO.js} +1 -1
  170. package/dist/interface/assets/{ring-resize-CEqUkpxT.js → ring-resize-DkY5EgVl.js} +1 -1
  171. package/dist/interface/assets/{round-alt-arrow-left-bold-CwaLYdW5.js → round-alt-arrow-left-bold-BxX4ufd0.js} +1 -1
  172. package/dist/interface/assets/{round-restart-alt-BFgY3k77.js → round-restart-alt-DPYbDt-x.js} +1 -1
  173. package/dist/interface/assets/{search-CT2BLw7G.js → search-BZkSqZO5.js} +1 -1
  174. package/dist/interface/assets/sensorIcons-DepqfSoA.js +1 -0
  175. package/dist/interface/assets/sensors-CMpbwMO4.js +1 -0
  176. package/dist/interface/assets/{server-BSYs0zoo.js → server-C-WV93FX.js} +1 -1
  177. package/dist/interface/assets/{settings-CzS4dvIO.js → settings-BUEZ5iRE.js} +1 -1
  178. package/dist/interface/assets/{source-branch-C6p1G3a9.js → source-branch-ztDB0e13.js} +1 -1
  179. package/dist/interface/assets/{table-2-line-_VC4NuFA.js → table-2-line-B-z0xvbG.js} +1 -1
  180. package/dist/interface/assets/{theme-Dr_YO8-0.js → theme-BkwBz73p.js} +1 -1
  181. package/dist/interface/assets/{trash-2-DcOYT3oH.js → trash-2-DMMlSPXn.js} +1 -1
  182. package/dist/interface/assets/{trash-can-outline-cphfB8Jh.js → trash-can-outline-DLKniIWM.js} +1 -1
  183. package/dist/interface/assets/{trash-fill-CRBaUdPn.js → trash-fill-DevIK050.js} +1 -1
  184. package/dist/interface/assets/{trash2-CvhB8xOW.js → trash2-BLScx4HX.js} +1 -1
  185. package/dist/interface/assets/{types-3mdj4rRK.js → types-Cko7VOxd.js} +1 -1
  186. package/dist/interface/assets/types-ClTvDPjn.js +1 -0
  187. package/dist/interface/assets/{types-YwmhC3Ej.js → types-vaT6wuY0.js} +1 -1
  188. package/dist/interface/assets/{upload-DeN3O-ua.js → upload-ClkX9wUX.js} +1 -1
  189. package/dist/interface/assets/{useAppVersion-UIA6seZv.js → useAppVersion-V1S18l98.js} +1 -1
  190. package/dist/interface/assets/useBackupRestore-BZ73vHrV.js +1 -0
  191. package/dist/interface/assets/{useCameraOptions-Dx-zyqdH.js → useCameraOptions-o1hYGLbC.js} +1 -1
  192. package/dist/interface/assets/{useElectron-BXVcamD0.js → useElectron-3ZJLtRk3.js} +1 -1
  193. package/dist/interface/assets/{useLogsSocket-DSxzAvQF.js → useLogsSocket-DDgnQ_Dk.js} +1 -1
  194. package/dist/interface/assets/{usePermissions-B_C-zX5H.js → usePermissions-BWlj5SzG.js} +1 -1
  195. package/dist/interface/assets/{usePluginUpdates-QU3U82S_.js → usePluginUpdates-DI1p2NMc.js} +1 -1
  196. package/dist/interface/assets/{useServerRestart-BxDBO7k-.js → useServerRestart-D_ASBw_0.js} +1 -1
  197. package/dist/interface/assets/{useStreamStatus-DY4NM_Ua.js → useStreamStatus-BQJIFFLv.js} +1 -1
  198. package/dist/interface/assets/useUpdateChannel-CyLSUSAY.js +1 -0
  199. package/dist/interface/assets/useUserOptions-Ds1Ybn7N.js +1 -0
  200. package/dist/interface/assets/{variable-oLSsiEtj.js → variable-CCMnQpL2.js} +1 -1
  201. package/dist/interface/assets/{vendor-JQXDMBA-.js → vendor-BaiDFVEr.js} +17 -16
  202. package/dist/interface/assets/vendor-cameraui-CQTIVF_m.js +2326 -0
  203. package/dist/interface/assets/{vendor-capacitor-CDwgXF4b.js → vendor-capacitor-4nn-eF9U.js} +2 -2
  204. package/dist/interface/assets/{vendor-chart-KrNcA52y.js → vendor-chart-DtwjR6yw.js} +1 -1
  205. package/dist/interface/assets/vendor-core-DDtZhtY9.js +1 -0
  206. package/dist/interface/assets/{vendor-dnd-Jch9IvL6.js → vendor-dnd-ChrDrMuz.js} +1 -1
  207. package/dist/interface/assets/{vendor-draggabilly-Cn-knCpG.js → vendor-draggabilly-DSeIE_bQ.js} +1 -1
  208. package/dist/interface/assets/{vendor-markdown-BhFLJolW.js → vendor-markdown--U0EK8HV.js} +1 -1
  209. package/dist/interface/assets/{vendor-primevue-C0acGg0Y.js → vendor-primevue-DE-f4Z5f.js} +76 -76
  210. package/dist/interface/assets/{vendor-vueflow-DQrTmoNS.js → vendor-vueflow-CLJNLJXc.js} +1 -1
  211. package/dist/interface/assets/web-BNRwhIOt.js +1 -0
  212. package/dist/interface/assets/web-BPkOXv4d.js +1 -0
  213. package/dist/interface/assets/web-BZIx_2d3.js +1 -0
  214. package/dist/interface/assets/web-BjKL51lK-BwChM7zd.js +1 -0
  215. package/dist/interface/assets/web-BkmtZjSt.js +1 -0
  216. package/dist/interface/assets/web-C6RgriWz.js +1 -0
  217. package/dist/interface/assets/web-CQFMLa0a.js +1 -0
  218. package/dist/interface/assets/web-CZGnd6VE.js +1 -0
  219. package/dist/interface/assets/web-Cfzay11X.js +1 -0
  220. package/dist/interface/assets/web-DAgBwKL-.js +1 -0
  221. package/dist/interface/assets/web-DgVHh5ek.js +1 -0
  222. package/dist/interface/assets/web-DlSXwZBR.js +1 -0
  223. package/dist/interface/assets/web-eDYxVGH7.js +1 -0
  224. package/dist/interface/assets/web-h4k3EoRQ.js +1 -0
  225. package/dist/interface/assets/{webhook-CMAB4nTl.js → webhook-DQiZUPv8.js} +1 -1
  226. package/dist/interface/assets/workbox-window.prod.es5-CcJiPjAS.js +1 -0
  227. package/dist/interface/assets/{zoom-in-STm8SNt2.js → zoom-in-Du1IB9oA.js} +1 -1
  228. package/dist/interface/index.html +42 -41
  229. package/dist/interface/sw.js +1 -1
  230. package/dist/server/package.json +14 -14
  231. package/dist/server/requirements.txt +2 -2
  232. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/__init__.py +6 -0
  233. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/camera/__init__.py +0 -2
  234. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/camera/events.py +11 -47
  235. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/camera/frames.py +2 -4
  236. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/internal/sensor_rpc.py +6 -0
  237. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/plugin/contract.py +1 -1
  238. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/plugin/notifier.py +7 -0
  239. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/base.py +18 -1
  240. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/classifier.py +14 -8
  241. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/face.py +23 -7
  242. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/license_plate.py +23 -7
  243. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/storage/__init__.py +60 -2
  244. package/dist/server/src/api/controllers/automations.controller.d.ts +3 -1
  245. package/dist/server/src/api/controllers/automations.controller.js +27 -0
  246. package/dist/server/src/api/controllers/automations.controller.js.map +1 -1
  247. package/dist/server/src/api/controllers/cameras.controller.d.ts +3 -2
  248. package/dist/server/src/api/controllers/cameras.controller.js +26 -1
  249. package/dist/server/src/api/controllers/cameras.controller.js.map +1 -1
  250. package/dist/server/src/api/controllers/instances.controller.d.ts +2 -1
  251. package/dist/server/src/api/controllers/instances.controller.js +9 -0
  252. package/dist/server/src/api/controllers/instances.controller.js.map +1 -1
  253. package/dist/server/src/api/controllers/nvr.controller.d.ts +0 -3
  254. package/dist/server/src/api/controllers/nvr.controller.js +8 -38
  255. package/dist/server/src/api/controllers/nvr.controller.js.map +1 -1
  256. package/dist/server/src/api/controllers/plugins.controller.d.ts +9 -2
  257. package/dist/server/src/api/controllers/plugins.controller.js +156 -99
  258. package/dist/server/src/api/controllers/plugins.controller.js.map +1 -1
  259. package/dist/server/src/api/controllers/sensors.controller.d.ts +3 -1
  260. package/dist/server/src/api/controllers/sensors.controller.js +31 -0
  261. package/dist/server/src/api/controllers/sensors.controller.js.map +1 -1
  262. package/dist/server/src/api/database/index.d.ts +3 -2
  263. package/dist/server/src/api/database/index.js +12 -2
  264. package/dist/server/src/api/database/index.js.map +1 -1
  265. package/dist/server/src/api/database/migrations/v2-0-50.js +2 -1
  266. package/dist/server/src/api/database/migrations/v2-0-50.js.map +1 -1
  267. package/dist/server/src/api/database/migrations/v2-1-1.d.ts +3 -0
  268. package/dist/server/src/api/database/migrations/v2-1-1.js +35 -0
  269. package/dist/server/src/api/database/migrations/v2-1-1.js.map +1 -0
  270. package/dist/server/src/api/database/migrations/v2-1-4.d.ts +3 -0
  271. package/dist/server/src/api/database/migrations/v2-1-4.js +32 -0
  272. package/dist/server/src/api/database/migrations/v2-1-4.js.map +1 -0
  273. package/dist/server/src/api/database/record-schemas.d.ts +3 -0
  274. package/dist/server/src/api/database/record-schemas.js +1 -0
  275. package/dist/server/src/api/database/record-schemas.js.map +1 -1
  276. package/dist/server/src/api/database/types.d.ts +5 -0
  277. package/dist/server/src/api/routes/automations.routes.js +23 -1
  278. package/dist/server/src/api/routes/automations.routes.js.map +1 -1
  279. package/dist/server/src/api/routes/cameras.routes.js +15 -3
  280. package/dist/server/src/api/routes/cameras.routes.js.map +1 -1
  281. package/dist/server/src/api/routes/instances.routes.js +12 -1
  282. package/dist/server/src/api/routes/instances.routes.js.map +1 -1
  283. package/dist/server/src/api/routes/plugins.routes.js +36 -2
  284. package/dist/server/src/api/routes/plugins.routes.js.map +1 -1
  285. package/dist/server/src/api/routes/sensors.routes.js +23 -1
  286. package/dist/server/src/api/routes/sensors.routes.js.map +1 -1
  287. package/dist/server/src/api/schemas/automations.schema.d.ts +11 -0
  288. package/dist/server/src/api/schemas/automations.schema.js +7 -0
  289. package/dist/server/src/api/schemas/automations.schema.js.map +1 -1
  290. package/dist/server/src/api/schemas/cameras.schema.d.ts +33 -24
  291. package/dist/server/src/api/schemas/cameras.schema.js +18 -5
  292. package/dist/server/src/api/schemas/cameras.schema.js.map +1 -1
  293. package/dist/server/src/api/schemas/config.schema.d.ts +1 -0
  294. package/dist/server/src/api/schemas/config.schema.js +1 -0
  295. package/dist/server/src/api/schemas/config.schema.js.map +1 -1
  296. package/dist/server/src/api/schemas/instances.schema.d.ts +4 -0
  297. package/dist/server/src/api/schemas/instances.schema.js +3 -0
  298. package/dist/server/src/api/schemas/instances.schema.js.map +1 -1
  299. package/dist/server/src/api/schemas/plugins.schema.d.ts +11 -0
  300. package/dist/server/src/api/schemas/plugins.schema.js +6 -0
  301. package/dist/server/src/api/schemas/plugins.schema.js.map +1 -1
  302. package/dist/server/src/api/schemas/sensors.schema.d.ts +11 -0
  303. package/dist/server/src/api/schemas/sensors.schema.js +7 -0
  304. package/dist/server/src/api/schemas/sensors.schema.js.map +1 -1
  305. package/dist/server/src/api/schemas/users.schema.d.ts +12 -0
  306. package/dist/server/src/api/schemas/users.schema.js +4 -0
  307. package/dist/server/src/api/schemas/users.schema.js.map +1 -1
  308. package/dist/server/src/api/services/auth.service.js +28 -23
  309. package/dist/server/src/api/services/auth.service.js.map +1 -1
  310. package/dist/server/src/api/services/automations.service.js +36 -36
  311. package/dist/server/src/api/services/automations.service.js.map +1 -1
  312. package/dist/server/src/api/services/backup.service.js +29 -26
  313. package/dist/server/src/api/services/backup.service.js.map +1 -1
  314. package/dist/server/src/api/services/backupScheduler.service.js +1 -2
  315. package/dist/server/src/api/services/backupScheduler.service.js.map +1 -1
  316. package/dist/server/src/api/services/cameras.service.js +222 -173
  317. package/dist/server/src/api/services/cameras.service.js.map +1 -1
  318. package/dist/server/src/api/services/instances.service.d.ts +7 -0
  319. package/dist/server/src/api/services/instances.service.js +17 -0
  320. package/dist/server/src/api/services/instances.service.js.map +1 -1
  321. package/dist/server/src/api/services/mqtt.service.js +1 -2
  322. package/dist/server/src/api/services/mqtt.service.js.map +1 -1
  323. package/dist/server/src/api/services/notifications.service.d.ts +1 -0
  324. package/dist/server/src/api/services/notifications.service.js +3 -0
  325. package/dist/server/src/api/services/notifications.service.js.map +1 -1
  326. package/dist/server/src/api/services/plugins.service.js +1 -1
  327. package/dist/server/src/api/services/plugins.service.js.map +1 -1
  328. package/dist/server/src/api/services/remote.service.js +26 -25
  329. package/dist/server/src/api/services/remote.service.js.map +1 -1
  330. package/dist/server/src/api/services/sensors.service.d.ts +1 -0
  331. package/dist/server/src/api/services/sensors.service.js +1 -0
  332. package/dist/server/src/api/services/sensors.service.js.map +1 -1
  333. package/dist/server/src/api/services/server.service.js +9 -7
  334. package/dist/server/src/api/services/server.service.js.map +1 -1
  335. package/dist/server/src/api/services/shares.service.js +19 -14
  336. package/dist/server/src/api/services/shares.service.js.map +1 -1
  337. package/dist/server/src/api/services/users.service.js +159 -105
  338. package/dist/server/src/api/services/users.service.js.map +1 -1
  339. package/dist/server/src/api/services/workers.service.d.ts +1 -0
  340. package/dist/server/src/api/services/workers.service.js +55 -45
  341. package/dist/server/src/api/services/workers.service.js.map +1 -1
  342. package/dist/server/src/api/types/index.d.ts +38 -5
  343. package/dist/server/src/api/types/index.js.map +1 -1
  344. package/dist/server/src/api/utils/bulk.d.ts +9 -0
  345. package/dist/server/src/api/utils/bulk.js +27 -0
  346. package/dist/server/src/api/utils/bulk.js.map +1 -0
  347. package/dist/server/src/api/utils/cert.js +8 -0
  348. package/dist/server/src/api/utils/cert.js.map +1 -1
  349. package/dist/server/src/api/websocket/nsp/server.js +1 -1
  350. package/dist/server/src/api/websocket/nsp/server.js.map +1 -1
  351. package/dist/server/src/automations/conditions/sensorState.js +9 -0
  352. package/dist/server/src/automations/conditions/sensorState.js.map +1 -1
  353. package/dist/server/src/camera/controller.d.ts +1 -1
  354. package/dist/server/src/camera/controller.js +12 -11
  355. package/dist/server/src/camera/controller.js.map +1 -1
  356. package/dist/server/src/camera/decoder/child.d.ts +1 -0
  357. package/dist/server/src/camera/decoder/child.js +14 -1
  358. package/dist/server/src/camera/decoder/child.js.map +1 -1
  359. package/dist/server/src/camera/decoder/debug/detection-record.d.ts +42 -0
  360. package/dist/server/src/camera/decoder/debug/detection-record.js +103 -0
  361. package/dist/server/src/camera/decoder/debug/detection-record.js.map +1 -0
  362. package/dist/server/src/camera/decoder/debug/perf-tracker.d.ts +20 -0
  363. package/dist/server/src/camera/decoder/debug/perf-tracker.js +82 -0
  364. package/dist/server/src/camera/decoder/debug/perf-tracker.js.map +1 -0
  365. package/dist/server/src/camera/decoder/detection-coordinator.d.ts +28 -6
  366. package/dist/server/src/camera/decoder/detection-coordinator.js +452 -76
  367. package/dist/server/src/camera/decoder/detection-coordinator.js.map +1 -1
  368. package/dist/server/src/camera/decoder/detection-pipeline.d.ts +7 -20
  369. package/dist/server/src/camera/decoder/detection-pipeline.js +67 -127
  370. package/dist/server/src/camera/decoder/detection-pipeline.js.map +1 -1
  371. package/dist/server/src/camera/decoder/event-manager.d.ts +42 -14
  372. package/dist/server/src/camera/decoder/event-manager.js +304 -217
  373. package/dist/server/src/camera/decoder/event-manager.js.map +1 -1
  374. package/dist/server/src/camera/decoder/event-thumbnailer.d.ts +5 -8
  375. package/dist/server/src/camera/decoder/event-thumbnailer.js +11 -21
  376. package/dist/server/src/camera/decoder/event-thumbnailer.js.map +1 -1
  377. package/dist/server/src/camera/decoder/frame-scaler.d.ts +2 -1
  378. package/dist/server/src/camera/decoder/frame-scaler.js +9 -0
  379. package/dist/server/src/camera/decoder/frame-scaler.js.map +1 -1
  380. package/dist/server/src/camera/decoder/moment-crop.d.ts +30 -0
  381. package/dist/server/src/camera/decoder/moment-crop.js +86 -0
  382. package/dist/server/src/camera/decoder/moment-crop.js.map +1 -0
  383. package/dist/server/src/camera/decoder/nvr-sink.d.ts +38 -0
  384. package/dist/server/src/camera/decoder/nvr-sink.js +36 -0
  385. package/dist/server/src/camera/decoder/nvr-sink.js.map +1 -0
  386. package/dist/server/src/camera/decoder/secondary-stage.d.ts +4 -2
  387. package/dist/server/src/camera/decoder/secondary-stage.js +58 -96
  388. package/dist/server/src/camera/decoder/secondary-stage.js.map +1 -1
  389. package/dist/server/src/camera/decoder/sources/analysis-source.d.ts +10 -0
  390. package/dist/server/src/camera/decoder/sources/analysis-source.js +2 -0
  391. package/dist/server/src/camera/decoder/sources/analysis-source.js.map +1 -0
  392. package/dist/server/src/camera/decoder/sources/{snapshot-source.d.ts → buffered-source.d.ts} +17 -5
  393. package/dist/server/src/camera/decoder/sources/{snapshot-source.js → buffered-source.js} +81 -24
  394. package/dist/server/src/camera/decoder/sources/buffered-source.js.map +1 -0
  395. package/dist/server/src/camera/decoder/sources/frame-source.d.ts +4 -7
  396. package/dist/server/src/camera/decoder/sources/frame-source.js +4 -7
  397. package/dist/server/src/camera/decoder/sources/frame-source.js.map +1 -1
  398. package/dist/server/src/camera/decoder/types.d.ts +1 -0
  399. package/dist/server/src/camera/decoder/types.js.map +1 -1
  400. package/dist/server/src/camera/decoder/worker.js +15 -3
  401. package/dist/server/src/camera/decoder/worker.js.map +1 -1
  402. package/dist/server/src/internal-bus.d.ts +1 -1
  403. package/dist/server/src/internal-bus.js.map +1 -1
  404. package/dist/server/src/main.js +1 -1
  405. package/dist/server/src/main.js.map +1 -1
  406. package/dist/server/src/manager/discoveryManager.js +0 -11
  407. package/dist/server/src/manager/discoveryManager.js.map +1 -1
  408. package/dist/server/src/manager/notificationManager.d.ts +1 -1
  409. package/dist/server/src/manager/notificationManager.js +60 -41
  410. package/dist/server/src/manager/notificationManager.js.map +1 -1
  411. package/dist/server/src/mqtt/bridge.d.ts +2 -0
  412. package/dist/server/src/mqtt/bridge.js +39 -35
  413. package/dist/server/src/mqtt/bridge.js.map +1 -1
  414. package/dist/server/src/plugins/nvr.d.ts +2 -0
  415. package/dist/server/src/plugins/nvr.js +17 -0
  416. package/dist/server/src/plugins/nvr.js.map +1 -0
  417. package/dist/server/src/plugins/runtime/node/proxy/sensorManager.js +1 -1
  418. package/dist/server/src/plugins/runtime/node/proxy/sensorManager.js.map +1 -1
  419. package/dist/server/src/plugins/runtime/python/storage.py +18 -1
  420. package/dist/server/src/plugins/runtime/python/store.py +7 -1
  421. package/dist/server/src/plugins/schema.d.ts +2 -1
  422. package/dist/server/src/plugins/schema.js +66 -6
  423. package/dist/server/src/plugins/schema.js.map +1 -1
  424. package/dist/server/src/plugins/store/storeFile.js +10 -2
  425. package/dist/server/src/plugins/store/storeFile.js.map +1 -1
  426. package/dist/server/src/remote/services/index.js +1 -1
  427. package/dist/server/src/remote/services/index.js.map +1 -1
  428. package/dist/server/src/rpc/interfaces/frameworker.d.ts +1 -0
  429. package/dist/server/src/rpc/interfaces/sensor.d.ts +2 -0
  430. package/dist/server/src/rpc/server.js +2 -0
  431. package/dist/server/src/rpc/server.js.map +1 -1
  432. package/dist/server/src/sensors/registry.js +7 -2
  433. package/dist/server/src/sensors/registry.js.map +1 -1
  434. package/dist/server/src/sensors/sensor.js +13 -1
  435. package/dist/server/src/sensors/sensor.js.map +1 -1
  436. package/dist/server/src/services/config/constants.js +1 -0
  437. package/dist/server/src/services/config/constants.js.map +1 -1
  438. package/dist/server/src/services/config/index.d.ts +5 -2
  439. package/dist/server/src/services/config/index.js +38 -5
  440. package/dist/server/src/services/config/index.js.map +1 -1
  441. package/dist/server/src/services/config/types.d.ts +4 -0
  442. package/dist/server/src/utils/path.d.ts +1 -0
  443. package/dist/server/src/utils/path.js +33 -0
  444. package/dist/server/src/utils/path.js.map +1 -1
  445. package/dist/server/src/workers/capabilities/frame-decoding.js +1 -1
  446. package/dist/server/src/workers/capabilities/frame-decoding.js.map +1 -1
  447. package/package.json +14 -14
  448. package/dist/interface/assets/Automations-DBjwNb3F.js +0 -2
  449. package/dist/interface/assets/Camera-BfvpjkW3.js +0 -2
  450. package/dist/interface/assets/Camera-yUrhUGmO.css +0 -1
  451. package/dist/interface/assets/Camview-DArvg940.js +0 -1
  452. package/dist/interface/assets/Camview-mLCaY0ld.css +0 -1
  453. package/dist/interface/assets/Config-Ccp5Acpv.js +0 -2
  454. package/dist/interface/assets/ConfigConditionSensorState-lI9dzHiT.js +0 -1
  455. package/dist/interface/assets/ConfigSensorValueInput-DW4er753.js +0 -1
  456. package/dist/interface/assets/ConfigTriggerSensor-vhwPNmPj.js +0 -1
  457. package/dist/interface/assets/Console-C6yUdEaM.js +0 -1
  458. package/dist/interface/assets/CuiAutomationRunsDialog-C4i7y1Re.js +0 -1
  459. package/dist/interface/assets/CuiBottomSheet-C2zU_iyj.js +0 -1
  460. package/dist/interface/assets/CuiCameraPipCard-CZ-oDxzy.js +0 -1
  461. package/dist/interface/assets/CuiCameraRecordings-BHj7CUE7.css +0 -1
  462. package/dist/interface/assets/CuiCameraRecordings-mY_giLEi.js +0 -1
  463. package/dist/interface/assets/CuiLightControl-CEpcKss7.js +0 -1
  464. package/dist/interface/assets/CuiMarkdownContent-C2uBepC1.js +0 -1
  465. package/dist/interface/assets/CuiMarkdownContent-QxLR7_qs.js +0 -1
  466. package/dist/interface/assets/CuiPluginCard-1dSDwOCf.js +0 -2
  467. package/dist/interface/assets/CuiRecordingsGrid-COHg3ZCT.css +0 -1
  468. package/dist/interface/assets/CuiRecordingsGrid-CkwE3jcR.js +0 -1
  469. package/dist/interface/assets/CuiSchema-DKATswRc.js +0 -1
  470. package/dist/interface/assets/Faces-BeeZrFV-.js +0 -1
  471. package/dist/interface/assets/FirstSteps-DWT6Tt_T.js +0 -1
  472. package/dist/interface/assets/Instances-CJlFo8ni.js +0 -1
  473. package/dist/interface/assets/Menu-DP0aMICW.js +0 -1
  474. package/dist/interface/assets/OAuthDeviceFlow-CcSkntGk.js +0 -1
  475. package/dist/interface/assets/Plugin-8dbt_8iG.js +0 -1
  476. package/dist/interface/assets/Plugin-BLqyZrJP.css +0 -1
  477. package/dist/interface/assets/PluginDetail-C9dR9jrw.js +0 -2
  478. package/dist/interface/assets/PluginSearch-BVAtgBZs.js +0 -1
  479. package/dist/interface/assets/PluginSearch-HEf_6CrR.js +0 -2
  480. package/dist/interface/assets/Plugins-CQJhji6o.js +0 -1
  481. package/dist/interface/assets/Recordings-AD78njIA.js +0 -1
  482. package/dist/interface/assets/SensorEdit-rC02usEO.js +0 -1
  483. package/dist/interface/assets/Sensors-CFfII3-e.css +0 -1
  484. package/dist/interface/assets/Sensors-Vwr7MYz6.js +0 -2
  485. package/dist/interface/assets/SettingsAccount-BBsivYFf.js +0 -1
  486. package/dist/interface/assets/SettingsAccount-CN9Xcgt-.js +0 -1
  487. package/dist/interface/assets/SettingsAppearance-Qh1cw9iX.js +0 -1
  488. package/dist/interface/assets/SettingsBackup-DNDDU6a1.js +0 -1
  489. package/dist/interface/assets/SettingsList-tFKUMnsB.js +0 -1
  490. package/dist/interface/assets/SettingsMqtt-BYVV1Mew.js +0 -1
  491. package/dist/interface/assets/SettingsRecordings-B4DDJSKe.js +0 -1
  492. package/dist/interface/assets/SettingsRemote-Bib7kXto.js +0 -1
  493. package/dist/interface/assets/SettingsSystem-DIe7CSgH.js +0 -2
  494. package/dist/interface/assets/Terminal-DuJHIlLe.js +0 -4
  495. package/dist/interface/assets/VersionsHandler-D9sDkGXx.js +0 -7
  496. package/dist/interface/assets/Workers-fV_NEZ7U.js +0 -2
  497. package/dist/interface/assets/api-Draww2tC.js +0 -2
  498. package/dist/interface/assets/api-eELh8KCM.css +0 -2
  499. package/dist/interface/assets/automations-BfsdbSPC.js +0 -1
  500. package/dist/interface/assets/cameras.schema-DMY4SYte.js +0 -1
  501. package/dist/interface/assets/chevron-right-AhqYJOFy.js +0 -1
  502. package/dist/interface/assets/cloudHandoff-BQsDy9yp.js +0 -1
  503. package/dist/interface/assets/esm-B1LZs0VG.js +0 -1
  504. package/dist/interface/assets/esm-BB4SBaek.js +0 -1
  505. package/dist/interface/assets/esm-BGA8Ydne.js +0 -1
  506. package/dist/interface/assets/esm-BHI_KH7L.js +0 -1
  507. package/dist/interface/assets/esm-BQ0EuuZe.js +0 -1
  508. package/dist/interface/assets/esm-Bfb-tuKt.js +0 -1
  509. package/dist/interface/assets/esm-BzR_6ma5.js +0 -1
  510. package/dist/interface/assets/esm-CCIqNfsh.js +0 -1
  511. package/dist/interface/assets/esm-CSMN-8o1.js +0 -1
  512. package/dist/interface/assets/esm-CxWbrBxP.js +0 -1
  513. package/dist/interface/assets/esm-DBTrmJK6.js +0 -1
  514. package/dist/interface/assets/esm-DRswZUWf.js +0 -1
  515. package/dist/interface/assets/esm-Dk7gxPHs.js +0 -1
  516. package/dist/interface/assets/esm-P0RCkAtk.js +0 -1
  517. package/dist/interface/assets/main-CV7qCZ5i.js +0 -3
  518. package/dist/interface/assets/mqtt-BPfLOT7L.js +0 -1
  519. package/dist/interface/assets/native-Cr4dkfqy.js +0 -1
  520. package/dist/interface/assets/native-D1Vvlhds.js +0 -1
  521. package/dist/interface/assets/plugin-937qnq7E.js +0 -1
  522. package/dist/interface/assets/plugins-BU7TQh_f.js +0 -1
  523. package/dist/interface/assets/sensorIcons-DtJEfoU4.js +0 -1
  524. package/dist/interface/assets/sensors-DjgfMS8S.js +0 -1
  525. package/dist/interface/assets/types-BGMvANrz.js +0 -1
  526. package/dist/interface/assets/useBackupRestore-E3pVEOvA.js +0 -1
  527. package/dist/interface/assets/useCardSelection-DGPLn1ZH.js +0 -1
  528. package/dist/interface/assets/useUserOptions-BL53bECb.js +0 -1
  529. package/dist/interface/assets/vendor-cameraui-DojVuZ2L.js +0 -2326
  530. package/dist/interface/assets/vendor-core-ZDcIKAw9.js +0 -1
  531. package/dist/interface/assets/web-BQtDHNew.js +0 -1
  532. package/dist/interface/assets/web-BY9kjyTj.js +0 -1
  533. package/dist/interface/assets/web-BcQtDSat.js +0 -1
  534. package/dist/interface/assets/web-BgrRQzLO.js +0 -1
  535. package/dist/interface/assets/web-BjKL51lK-CJYmHsnY.js +0 -1
  536. package/dist/interface/assets/web-BxvsJylk.js +0 -1
  537. package/dist/interface/assets/web-C-3iwDhG.js +0 -1
  538. package/dist/interface/assets/web-C9XOwu07.js +0 -1
  539. package/dist/interface/assets/web-CPCxRDtw.js +0 -1
  540. package/dist/interface/assets/web-D0U5B2i2.js +0 -1
  541. package/dist/interface/assets/web-DtxjXJdS.js +0 -1
  542. package/dist/interface/assets/web-Duf-oV4e.js +0 -1
  543. package/dist/interface/assets/web-jy45nBi_.js +0 -1
  544. package/dist/interface/assets/web-vWx_-Iq5.js +0 -1
  545. package/dist/interface/assets/workbox-window.prod.es5-Dlqax_Po.js +0 -1
  546. package/dist/server/src/api/utils/moveFiles.d.ts +0 -4
  547. package/dist/server/src/api/utils/moveFiles.js +0 -37
  548. package/dist/server/src/api/utils/moveFiles.js.map +0 -1
  549. package/dist/server/src/camera/decoder/sources/snapshot-source.js.map +0 -1
  550. package/dist/server/src/camera/decoder/stationary-suppressor.d.ts +0 -38
  551. package/dist/server/src/camera/decoder/stationary-suppressor.js +0 -308
  552. package/dist/server/src/camera/decoder/stationary-suppressor.js.map +0 -1
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./dist-BwEXwXSw.js","./vendor-JQXDMBA-.js","./rolldown-runtime-C0FnF6B9.js","./CuiMarkdownContent-QxLR7_qs.js","./CuiMarkdownContent-C2uBepC1.js","./vendor-markdown-BhFLJolW.js","./vendor-markdown-DtOhvyRx.css","./CameraConsole-CEARcJYc.js","./CuiConsole-B7R7U9UZ.js","./vendor-cameraui-DojVuZ2L.js","./vendor-xterm-BafMBqaV.js","./vendor-xterm-BrP-ENHg.css","./CuiConsole-CoA-Nq-_.css","./useLogsSocket-DSxzAvQF.js","./workbox-window.prod.es5-Dlqax_Po.js","./404-pb2fRn1r.js","./home-w5iY2RUg.js","./FirstSteps-DWT6Tt_T.js","./useElectron-BXVcamD0.js","./vendor-core-ZDcIKAw9.js","./vendor-primevue-C0acGg0Y.js","./useBackupRestore-E3pVEOvA.js","./server-BSYs0zoo.js","./useServerRestart-BxDBO7k-.js","./SettingsAccount-CN9Xcgt-.js","./vendor-zod-Dbq0fBXY.js","./CuiDataTable-CQhCu0px.js","./arrow-right-outline-DF7tkKYk.js","./CuiDataTable-DbkFXZeg.css","./CuiQRCode-B4ysluWR.js","./theme-Dr_YO8-0.js","./CuiQRCode-BtErH65J.css","./auth-9_Jjlsh0.js","./SettingsAccount-si-6gWl5.css","./SettingsAppearance-WQtOksbk.js","./Cameras-C0oHuoTR.js","./types-BGMvANrz.js","./close-CtaDF28n.js","./CuiSchema-DKATswRc.js","./CuiSchema--yMBD996.css","./plus-CL6KSxf8.js","./cameras.schema-DMY4SYte.js","./ring-resize-CEqUkpxT.js","./plus-Dd-XLT76.js","./eye-off-DESV3QdF.js","./Cameras-DIY20Wlh.css","./Sensors-Vwr7MYz6.js","./sensors-DjgfMS8S.js","./trash-can-outline-cphfB8Jh.js","./history-60iCpGvQ.js","./search-CT2BLw7G.js","./sensorIcons-DtJEfoU4.js","./lightbulb-outline-DLrnCPG5.js","./cube-scan-DEuMi23T.js","./back-filled-DUUGErMw.js","./settings-CzS4dvIO.js","./useCardSelection-DGPLn1ZH.js","./table-2-line-_VC4NuFA.js","./Sensors-CFfII3-e.css","./Camera-BfvpjkW3.js","./zoom-in-STm8SNt2.js","./CuiCameraPipCard-CZ-oDxzy.js","./CuiCameraPipCard-D3o29_wc.css","./Camera-yUrhUGmO.css","./Camview-DArvg940.js","./vendor-dnd-Jch9IvL6.js","./microphone-DUVI-s2_.js","./delete-921w_nKy.js","./CuiTopNavbarItem-rMsWME9B.js","./chevron-down-umZ7i0mG.js","./CuiTopNavbarItem-CJqOqVMt.css","./vendor-gridstack-qw2ro2uB.js","./vendor-gridstack-DsRWLz0m.css","./Camview-mLCaY0ld.css","./Recordings-AD78njIA.js","./CuiRecordingsGrid-CkwE3jcR.js","./CuiRecordingsGrid-COHg3ZCT.css","./round-alt-arrow-left-bold-CwaLYdW5.js","./Recordings-80Xd1V3L.css","./Faces-BeeZrFV-.js","./plugins-BU7TQh_f.js","./Plugins-CQJhji6o.js","./PluginSearch-HEf_6CrR.js","./clock-outline-CbvOAMhO.js","./CuiPluginTrustBadge-sZF0UKMD.js","./CuiPluginTrustBadge-QHTLaN1n.css","./CuiPluginCategoryChip-JkdbQU4X.js","./cctv-jy5ROx0o.js","./bell-ring-DV73JIre.js","./CuiPluginCategoryChip-CdGrTCxH.css","./download-C-LzNRmM.js","./PluginSearch-CLjLT9JT.css","./usePluginUpdates-QU3U82S_.js","./config-BZphegxi.js","./CuiPluginCard-1dSDwOCf.js","./CuiPluginOAuthButton-LYMFfb3v.js","./cloud-check-CFSukfAF.js","./trash-fill-CRBaUdPn.js","./deployed-code-update-CYS6eKfa.js","./CuiPluginCard-rkhmuumi.css","./Plugin-8dbt_8iG.js","./PluginSchema-Gfn_csMP.js","./information-outline-CvBsGtDu.js","./close-circle-FZ8IxGd4.js","./Plugin-BLqyZrJP.css","./Adminpanel-BtQdiyre.js","./round-restart-alt-BFgY3k77.js","./vendor-chart-KrNcA52y.js","./round-restart-alt-SpAgbSYJ.css","./Config-Ccp5Acpv.js","./Config-JgftUZFe.css","./Logs-8onUmCYX.js","./arrow-left-D9jDhvK5.js","./trash-2-DcOYT3oH.js","./Terminal-DuJHIlLe.js","./Terminal-CrOfQJ-O.css","./Automations-DBjwNb3F.js","./automations-BfsdbSPC.js","./nodeDefinitions-BecZ8I2Q.js","./webhook-CMAB4nTl.js","./source-branch-C6p1G3a9.js","./variable-oLSsiEtj.js","./types-YwmhC3Ej.js","./alert-circle-pDGfnZ4K.js","./Automation-DOiLJcU_.js","./useCameraOptions-Dx-zyqdH.js","./flowSchema-_RiPAgMv.js","./CuiBottomSheet-C_1_moNo.js","./CuiBottomSheet-DsjZEdig.css","./automationBlueprint-D0F9AHk9.js","./vendor-vueflow-DQrTmoNS.js","./Automation-BSicfOGF.css","./Instances-CJlFo8ni.js","./pencil-outline-BrOrbuzc.js","./Workers-fV_NEZ7U.js","./api-Mny5Elfn.js","./Workers-7hKMBU4w.css","./Settings-8yG5ny5r.js","./Settings-DmZjKfDi.css","./Menu-DP0aMICW.js","./power-lCbm_7y7.js","./chevron-right-AhqYJOFy.js","./About-eljMnDub.js","./useAppVersion-UIA6seZv.js","./Console-C6yUdEaM.js","./trash2-CvhB8xOW.js","./SettingsAccount-BBsivYFf.js","./SettingsAppearance-Qh1cw9iX.js","./SettingsBackup-DNDDU6a1.js","./SettingsBackup-CX0rT0QJ.css","./SettingsRecordings-B4DDJSKe.js","./alert-outline-CeoXcnQc.js","./SettingsRemote-Bib7kXto.js","./SettingsRemote-DYld6-1F.css","./SettingsMqtt-BYVV1Mew.js","./mqtt-BPfLOT7L.js","./SettingsList-tFKUMnsB.js","./SettingsSystem-DIe7CSgH.js","./SettingsUsers-BtT17FNe.js","./SettingsNotifications-BVGmt0eF.js","./notifications-CK6XQBF-.js","./usePermissions-B_C-zX5H.js","./SettingsPermissions-BPqDIjVt.js"])))=>i.map(i=>d[i]);
2
- import{o as e,r as t}from"./rolldown-runtime-C0FnF6B9.js";import{$n as n,$r as r,Ai as i,At as a,B as o,Bi as s,Di as c,Dr as l,Dt as u,E as d,Ei as f,Fi as p,G as m,Gi as h,Gr as g,Hi as _,Ii as v,J as y,Ji as b,Jn as x,Jr as S,Ki as C,Kr as w,Li as T,Mi as ee,Mr as E,Mt as te,Ni as ne,Oi as D,Or as O,Ot as re,P as k,Pi as ie,Q as ae,Qi as oe,Qn as se,Qr as ce,Ri as le,Rr as ue,Rt as de,Tt as fe,U as pe,Ui as me,Ur as he,Vi as ge,Vr as _e,W as ve,Wi as ye,Wr as be,Xr as xe,Y as Se,Yn as Ce,Yr as we,Z as Te,Zn as Ee,Zr as De,_ as Oe,_r as ke,_t as Ae,a as je,b as Me,bi as Ne,bt as Pe,c as Fe,cr as Ie,dt as Le,ei as Re,er as ze,f as Be,fi as Ve,fr as He,ft as Ue,gt as We,ht as Ge,ii as Ke,ir as qe,it as Je,ji as Ye,jr as Xe,k as Ze,ki as Qe,li as $e,lt as et,mi as tt,mr as nt,n as rt,ni as it,nr as at,nt as ot,o as st,oi as ct,ot as lt,pt as ut,q as dt,qi as ft,qn as pt,r as mt,ri as ht,rr as gt,rt as _t,s as vt,si as yt,sr as bt,st as xt,tr as St,tt as A,u as Ct,ur as j,v as wt,vr as Tt,wi as Et,wt as Dt,x as Ot,xt as kt,y as At,yr as jt,yt as Mt,z as Nt,zi as Pt}from"./vendor-cameraui-DojVuZ2L.js";import{$n as Ft,$t as It,Bn as Lt,Cn as Rt,Dn as zt,F as Bt,Fn as Vt,G as Ht,Gn as Ut,Gt as Wt,In as Gt,Jn as Kt,Jt as qt,Ln as Jt,Mn as Yt,Nn as M,On as Xt,Pn as Zt,Qt,Rt as N,Sn as $t,Tn as en,U as P,Un as tn,V as nn,W as rn,Xn as F,Xt as an,Zn as on,Zt as sn,_ as cn,_n as ln,_r as I,an as L,b as un,bn as dn,br as R,cn as z,cr as B,dn as fn,dr as pn,en as V,fn as mn,fr as hn,g as gn,gr as H,hn as _n,hr as vn,in as U,ir as W,jn as yn,kn as bn,mn as xn,mr as Sn,nn as Cn,on as G,or as wn,pn as K,q as Tn,qn as q,qt as En,rr as Dn,sn as J,sr as On,un as Y,v as kn,vn as An,vr as jn,wn as Mn,x as Nn,y as Pn,yr as X,zn as Fn}from"./vendor-JQXDMBA-.js";import{a as In,i as Ln,r as Rn,t as zn}from"./useElectron-BXVcamD0.js";import{n as Bn,r as Vn,t as Hn}from"./vendor-zod-Dbq0fBXY.js";import{C as Un,E as Wn,F as Gn,S as Kn,b as qn,w as Z,x as Jn}from"./types-BGMvANrz.js";import{i as Yn,n as Xn,r as Zn,t as Qn}from"./lightbulb-outline-DLrnCPG5.js";import{f as $n,i as er,l as tr,o as nr,p as rr,r as ir,t as ar,u as or}from"./vendor-core-ZDcIKAw9.js";import{A as sr,B as cr,G as lr,H as ur,K as dr,L as fr,R as pr,U as mr,V as hr,W as gr,j as _r,q as vr,s as yr,u as br,x as xr,z as Sr}from"./vendor-primevue-C0acGg0Y.js";import{a as Cr,i as wr,n as Tr,r as Er,t as Dr}from"./vendor-dnd-Jch9IvL6.js";import{t as Or}from"./close-CtaDF28n.js";import{t as kr}from"./vendor-draggabilly-Cn-knCpG.js";var Ar=t({}),jr=t({}),Mr=t({}),Nr=t({}),Pr=t({}),Fr=t({}),Ir=t({}),Lr=t({}),Rr=t({});function zr(e){f(e,{enabled:!1,extraHeaders:{"Accept-Encoding":`identity`},request:async e=>{let{CapacitorHttp:t}=await N(async()=>{let{CapacitorHttp:e}=await import(`./dist-BwEXwXSw.js`);return{CapacitorHttp:e}},__vite__mapDeps([0,1,2]),import.meta.url);return t.request(e)}})}var Br={id:`http`,kind:`request`,phaseGating:!1},Vr={id:`socketio`,kind:`persistent`,phaseGating:!0},Hr={id:`nats`,kind:`persistent`,phaseGating:!0},Ur={id:`ws`,kind:`per-resource`,phaseGating:!1};Br.id,Vr.id,Hr.id,Ur.id;function Wr(e){let t=i({apiPrefix:e,spec:Br,logger:new oe(`HttpT`)});return zr(t.client),{http:t,socketio:D({spec:Vr,logger:new oe(`SioT`)}),nats:Qe({spec:Hr,logger:new oe(`NatsT`)}),ws:c({spec:Ur,logger:new oe(`WsT`)})}}var Gr=`/api`,Kr=`camera.ui:connection:target`,qr=`camera.ui:refresh`;function Jr(e){let t=e.apiPrefix??Gr,n=e.logger,r=e.storageNamespace?`${Kr}:${e.storageNamespace}`:Kr,i=e.storageNamespace?`${qr}:${e.storageNamespace}`:qr,a=_();function o(e,t,r,i=`debug`){a.record(e,t,r),r===void 0?n?.[i](e,t):n?.[i](e,t,r)}let s=ye({context:{now:()=>Date.now()},onAction:(e,t,n)=>{n===t&&a.record(`kernel`,`${e.type} dropped`,`phase=${t.kind}`)}}),{http:c,socketio:l,nats:u,ws:d}=Wr(t),f=pn(s.phase),m=pn(null),h=me({kernel:s,transports:[l,u]}),g=pn(h.current),y=B(null),b=[],x=B(null),S=B(Date.now()),C,w=U(()=>x.value===null?0:S.value-x.value),E=B(!1),te=null,D=0,O=null;function re(e){let t=Wt.isAxiosError(e)?e:e instanceof Error&&Wt.isAxiosError(e.cause)?e.cause:null;if(!t||t.response?.status!==503)return;let n=t.response.headers?.[`retry-after`],r=Number.parseInt(String(n??``),10);Number.isFinite(r)&&r>0&&(O=r*1e3)}let k=new Set;for(let e of[c,l,u,d]){let t=e.spec.id;b.push(e.on(`up`,()=>a.record(t,`up`))),b.push(e.on(`down`,({reason:e})=>a.record(t,`down`,e))),b.push(e.on(`auth-error`,e=>a.record(t,`auth-error`,e?.message??e?.status)))}b.push(h.subscribe(e=>{g.value=e,a.record(`signal`,e.kind,e.kind===`degraded`?e.channels.join(`,`):void 0)})),b.push(()=>h.dispose());let ae=typeof navigator<`u`&&`locks`in navigator?e=>navigator.locks.request(i,e):void 0,oe=p({kernel:s,storage:e.adapters.storage,key:r,onRestore:e=>{te=e,o(`persistence`,e?`restored — ${e.endpoint.url}`:`no stored target`)},onPersist:e=>o(`persistence`,`persisted — ${e.endpoint.url}`),onClear:()=>o(`persistence`,`cleared`),onError:(e,t)=>o(`persistence`,`${e} error`,t,`warn`)});b.push(oe.detach),e.callbacks.bindRefresh?.({acquireLock:ae??(async e=>e()),getLatestTokens:()=>oe.peek()?.tokens??null}),b.push(ee({kernel:s,key:r,absorb:e=>oe.absorb(e),onTokensReceived:()=>{o(`cross-tab`,`tokens received from another tab`);let e=s.phase.kind;e===`needs-auth`||e===`offline`?s.dispatch({type:`USER_RETRY`}):e===`idle`&&s.dispatch({type:`BOOT`,instanceId:`default`})},onResetReceived:()=>o(`cross-tab`,`logout received from another tab`),onError:(e,t)=>o(`cross-tab`,`${e} error`,t,`warn`)})),b.push(s.subscribe((t,n,r)=>{if(f.value=t,o(`kernel`,`${n.kind} → ${t.kind}`,r.type),t.kind===`idle`&&n.kind!==`idle`&&e.callbacks.onConnectionReset?.(),t.kind===`online`?E.value=!0:t.kind===`idle`&&(E.value=!1),t.kind===`offline`&&O!==null){let e=O;O=null,o(`backoff`,`server hint: retry after ${Math.round(e/1e3)}s`),queueMicrotask(()=>s.dispatch({type:`BACKOFF_HINT`,retryAfterMs:e,source:`retry-after`}))}else t.kind===`online`&&(O=null);t.kind===`online`||t.kind===`idle`||t.kind===`needs-auth`?(x.value=null,C!==void 0&&(clearInterval(C),C=void 0)):x.value===null&&(x.value=Date.now(),S.value=x.value,C=setInterval(()=>{S.value=Date.now()},1e3))})),b.push(()=>{C!==void 0&&(clearInterval(C),C=void 0)}),b.push(Pt({kernel:s,transports:[c,l,u,d],onApplied:e=>{m.value=e,(e||s.phase.kind===`idle`||s.phase.kind===`needs-auth`)&&(te=null)},onError:(e,t,n)=>o(e.spec.id,`apply failed`,n,`error`)})),b.push(Ye({kernel:s,schedule:[5e3],firstAttemptDelayMs:()=>Date.now()-D<15e3?1500:null,onScheduled:(e,t)=>o(`backoff`,`attempt #${e} in ${Math.round(t/1e3)}s`),onFire:e=>o(`backoff`,`firing #${e}`),onCancelled:e=>o(`backoff`,`cancelled (${e})`)}));function se(){D=Date.now(),fe?.wake(),e.callbacks.onWake?.(),ce();for(let e of k)try{e()}catch{}}function ce(){for(let e of[u,l]){let t=e.health();e.ensureAlive().then(n=>{(t.up!==n.up||!n.up)&&a.record(e.spec.id,`ensureAlive → ${n.up?`up`:`down`}`,n.lastError??t.lastError)}).catch(()=>{})}}function ue(){return s.phase.kind===`offline`}let de=ge({kernel:s,discover:e.callbacks.discover,probe:e.callbacks.probe,lastTarget:()=>m.value??te??oe.peek(),prefer:e=>e.mode===`direct-lan`,onResult:(e,t)=>o(`probe`,`background ${e}`,t)});b.push(()=>de.dispose()),b.push(ne({kernel:s,signal:h,ensureAll:ce,probe:()=>de.run(),isReachable:()=>[l,u].some(e=>e.health().up),onEscalate:e=>o(`degraded-recovery`,`round #${e}`),onOffline:e=>o(`degraded-recovery`,e,void 0,`warn`),onHold:e=>o(`degraded-recovery`,e)})),b.push(v({kernel:s,visibilitySource:e.adapters.visibilitySource,networkSource:e.adapters.networkSource,onOnline:e=>{o(`presence`,`network online`),se(),ue()?e.dispatch({type:`USER_RETRY`}):e.phase.kind===`online`&&de.run()},onOffline:()=>o(`presence`,`network offline`),onVisibilityVisible:e=>{o(`presence`,`tab visible`),se(),ue()&&e.dispatch({type:`USER_RETRY`})},onVisibilityHidden:()=>o(`presence`,`tab hidden`)})),e.adapters.networkChangeSource&&b.push(ie({kernel:s,source:e.adapters.networkChangeSource,debounceMs:2e3,onChange:e=>{o(`network-change`,`connection type changed`),se(),e.phase.kind===`online`?de.run():e.phase.kind===`offline`&&(o(`network-change`,`re-discovering`),e.dispatch({type:`USER_RETRY`}))}}));let fe=le({kernel:s,transports:[c,u,l,d],graceMs:5e3,maxTransientRetries:5,transientRetryDelayMs:2e3,isTransientError:e=>!!(Wt.isAxiosError(e)&&(!e.response||e.response.status>=500)),isServerError:e=>Wt.isAxiosError(e)&&(e.response?.status??0)>=500,maxServerErrorRetries:1,refresh:e.callbacks.refresh,acquireRefreshLock:ae,getLatestTokens:()=>oe.peek()?.tokens??null,onRefreshStart:e=>o(`token-lifecycle`,`refresh START (${e})`),onRefreshSuccess:(e,t)=>{let n=t.accessExpiresAt;o(`token-lifecycle`,`refresh OK (${e}) — new exp in ${typeof n==`number`?Math.round((n-Date.now())/1e3):`?`}s`)},onRefreshSkipped:e=>o(`token-lifecycle`,`refresh SKIPPED (${e}) — another tab won`),onRefreshError:(e,t,n)=>{let r=t instanceof Error?t.message:String(t),i=n.serverError?`server-error`:`transient`;n.willRetry?o(`token-lifecycle`,`refresh ${i} (${e}) — ${r}`,void 0,`warn`):n.transient?o(`token-lifecycle`,`refresh ${i} give-up → rediscover (${e}) — ${r}`,void 0,`error`):o(`token-lifecycle`,`refresh permanent (${e}) — ${r}`,void 0,`error`)},onScheduled:(e,t)=>{o(`token-lifecycle`,`scheduled refresh in ${Math.round(e/1e3)}s (exp in ${Math.round((t-Date.now())/1e3)}s)`)},onWakeChecked:e=>{let t=typeof e.remainingMs==`number`?`${Math.round(e.remainingMs/1e3)}s`:`n/a`;o(`token-lifecycle`,`wake() → ${e.decision} (phase=${e.phase}, remaining=${t})`)},onTriggerSkipped:(e,t,n)=>{o(`token-lifecycle`,`trigger SKIP (${e}) — ${t} (phase=${n})`)}});b.push(()=>fe.detach()),b.push(T({kernel:s,discover:e.callbacks.discover,probe:e.callbacks.probe,prefer:e=>e.mode===`direct-lan`,lastTarget:()=>m.value??te??oe.peek(),onDiscoverStart:()=>o(`probe`,`discover start`),onDiscoverSuccess:e=>o(`probe`,`discover OK — pool=${e.length}`),onDiscoverError:e=>{re(e),o(`probe`,`discover FAILED`,e,`error`)},onProbeStart:e=>o(`probe`,`probe ${e.url}`),onProbeSuccess:e=>{y.value=e.url,o(`probe`,`probe OK — ${e.url}`)},onProbeError:(e,t)=>{re(t);let n=t instanceof Error?t.message:String(t),r=t instanceof Error&&`kind`in t?t.kind:`unknown`;(r===`needs-auth`||r===`fatal`)&&(y.value=e.url),o(`probe`,`probe FAIL ${e.url} — [${r}] ${n}`,void 0,`warn`)},onAllFailed:e=>o(`probe`,`all probes failed — ${e}`,void 0,`error`)}));function pe(e){s.dispatch({type:`BOOT`,instanceId:e})}function he(){s.dispatch({type:`USER_RETRY`})}function _e(){s.dispatch({type:`RESET`})}async function ve(e,t=`default`){await oe.seed(e),te=null;let n=s.phase.kind;n===`idle`||n===`offline`||n===`needs-auth`?n===`idle`?s.dispatch({type:`BOOT`,instanceId:t}):s.dispatch({type:`USER_RETRY`}):n===`online`&&s.dispatch({type:`TOKENS_REFRESHED`,tokens:e.tokens})}async function be(){for(let e of b.splice(0))try{e()}catch(e){n?.warn(`connection`,`cleanup error`,e)}await Promise.allSettled([c.dispose(),l.dispose(),u.dispose(),d.dispose()]),s.dispose()}function xe(e){return s.phase.kind===`online`?Promise.resolve(!0):e?.signal?.aborted?Promise.resolve(!1):new Promise(t=>{let n=!1,r=()=>{},i=e=>{n||(n=!0,r(),t(e))};r=s.subscribe(e=>{e.kind===`online`&&i(!0)}),e?.timeoutMs!==void 0&&setTimeout(()=>i(!1),e.timeoutMs),e?.signal?.addEventListener(`abort`,()=>i(!1),{once:!0})})}function Se(e){return k.add(e),()=>k.delete(e)}return{kernel:s,journal:a,phase:f,signal:g,target:m,http:c,socketio:l,nats:u,ws:d,lastReachableEndpoint:y,troubleElapsedMs:w,hasBeenOnline:E,boot:pe,retry:he,reset:_e,detach:be,seedAndRetry:ve,onWake:Se,whenOnline:xe}}var Yr=new Set,Xr=pn(null),Zr=null,Qr=null;function $r(e){if(Zr)throw Error(`bootConnectionInstance(): already booted — call detachConnectionInstance() first`);Zr=Jr(e);let t=s({kernel:Zr.kernel,hosts:()=>Array.from(Yr),listenForResyncRequests:!0});return Qr=t,Zr.onWake(()=>{Zr?.journal.record(`worker-bridge`,`revalidate (${Yr.size} workers)`),t.revalidateWorkers()}),globalThis.__cameraui_journal=Zr.journal,Zr}function ei(){if(!Zr)throw Error(`getConnection(): connection not booted — call bootConnectionInstance() first`);return Zr}function ti(){if(!Qr)throw Error(`getWorkerBridge(): connection not booted — call bootConnectionInstance() first`);return Qr}function ni(){return Zr!==null}var ri=null;function ii(){return ri||(ri=ei().http.client,ri)}var Q=new Proxy({},{get(e,t){return Reflect.get(ii(),t,ii())},set(e,t,n){return Reflect.set(ii(),t,n,ii())}}),ai=[`Tunnel unavailable`];function oi(e){return typeof e==`object`&&!!e&&`isAxiosError`in e}function si(e){return e?.response?.data}function ci(e){let t=si(e);if(typeof t?.message==`string`)return t.message}function li(e){if(!oi(e)||e.response?.status!==503)return!1;let t=ci(e);return t?ai.some(e=>t.includes(e)):!1}function ui(e){return oi(e)?e.response?.status===404&&ci(e)===`Server not found`:!1}function di(e){return oi(e)?e.response?.status===503&&ci(e)===`Server remote access is disabled`:!1}var fi=`FirstPageLink PrevPageLink PageLinks NextPageLink LastPageLink`,pi=`https://cloud.cameraui.com`,mi=`https://proxy.cameraui.com`,hi=`https://share.cameraui.com`,gi=(()=>{try{return new URL(mi).host}catch{return``}})();function _i(){return{networkSource:window}}function vi(){return C()}function yi(){return globalThis.document}var bi=In(`AuthApi`),xi={id:`camera.ui-web`,name:`camera.ui-web`};function Si(){let e=Wt.create({timeout:1e4});zr(e);async function t(t,n,r){let i=await e.post(`${t}/api/auth/login`,{username:n.username,password:n.password,kind:n.kind??`web`,persistent:n.persistent??!0,device:n.device??xi},{signal:r});return Ci(i.data)?{twoFactorPending:!0,tempToken:i.data.tempToken,raw:i.data}:{tokens:wi(i.data),user:Ti(i.data),raw:i.data}}async function n(t,n,r,i){let a=await e.post(`${t}/api/auth/verify-2fa`,{tempToken:n,code:r},{signal:i});return{tokens:wi(a.data),user:Ti(a.data),raw:a.data}}async function r(t,n,r){let i=await e.post(`${t}/api/auth/refresh`,{refresh_token:n},{signal:r});return{tokens:wi(i.data),raw:i.data}}async function i(t,n,r){await e.get(`${t}/api/auth/check`,{headers:{Authorization:`Bearer ${n}`},signal:r})}async function a(t,n){await e.post(`${t}/api/auth/logout`,null,{headers:{Authorization:`Bearer ${n}`}})}async function o(t,n,r){if(!t||!n)throw Error(`tunnelCheck: incomplete proxy session (proxyUrl=${t?`set`:`missing`}, proxyToken=${n?`set`:`missing`})`);let i=await e.get(`${t}/tunnel/check`,{headers:{"X-Proxy-Session":n},timeout:3e4,signal:r}),a=Array.isArray(i.data.internalAddresses)?i.data.internalAddresses:[],o=Array.isArray(i.data.externalAddresses)?i.data.externalAddresses:[];if(a.length===0&&o.length===0){let e=i.headers?.[`content-type`]??`unknown`,n=typeof i.data==`string`?i.data.slice(0,300):JSON.stringify(i.data)?.slice(0,300);bi.warn(`[connection] tunnel/check returned no addresses — status=${i.status}, content-type=${e}, url=${t}/tunnel/check, body(300):`,n)}return{internalAddresses:a,externalAddresses:o,ca:typeof i.data.ca==`string`&&i.data.ca.includes(`BEGIN CERTIFICATE`)?i.data.ca:void 0}}async function s(t,n,r){return Ei((await e.post(`${t}/api/proxy/refresh`,{refresh_token:n},{signal:r,withCredentials:!0})).data)}async function c(t,n,r,i){return Ei((await e.post(`${t}/api/servers/${encodeURIComponent(n)}/select`,null,{headers:{Authorization:`Bearer ${r}`},signal:i})).data)}return{loginDirect:t,verify2FA:n,refreshDirect:r,authCheck:i,logoutDirect:a,tunnelCheck:o,refreshProxy:s,remintProxyFromL1:c}}function Ci(e){return typeof e==`object`&&!!e&&`requires2fa`in e&&e.requires2fa===!0}function wi(e){return{access:e.access_token,accessExpiresAt:e.access_token_expires_at,refresh:e.refresh_token,refreshExpiresAt:e.refresh_token_expires_at}}function Ti(e){return{_id:e._id,username:e.username,email:e.email,role:e.role,firstLogin:e.firstLogin,avatar:e.avatar,language:e.language}}function Ei(e){if(!e||typeof e!=`object`||!e.proxy_token||!e.proxy_url){let t=typeof e==`string`?`string:"${e.slice(0,120)}"`:JSON.stringify(e)?.slice(0,200);throw Error(`proxy mint response invalid — missing proxy_token/proxy_url (got ${t})`)}return{proxyUrl:e.proxy_url,proxyToken:e.proxy_token,proxyRefreshToken:e.proxy_refresh_token,proxyTokenExpiresAt:e.proxy_token_expires_at,proxyRefreshTokenExpiresAt:e.proxy_refresh_token_expires_at}}var Di=null;function Oi(e){Di=e}async function ki(e,t){if(!Di||!e)return;let n=[...new Set(t.filter(e=>e.mode===`direct-lan`).map(Ai).filter(e=>!!e))];if(n.length!==0)try{await Di(e,n)}catch{}}function Ai(e){try{let t=new URL(e.url).hostname;return t?t.startsWith(`[`)&&t.endsWith(`]`)?t.slice(1,-1):t:null}catch{return null}}var ji=864e5,Mi=`camera.ui:connection:discoverPool`;function Ni(e){let t=[];for(let n of e.internalAddresses)t.push({url:n,mode:`direct-lan`,priority:0});for(let n of e.externalAddresses)t.push({url:n,mode:`direct-wan`,priority:1});return t}function Pi(){let e=Xr.value;return e?[{url:e,mode:`direct-lan`,priority:0}]:null}function Fi(e){if(Wt.isAxiosError(e)){if(e.code===`ECONNABORTED`)return`timeout`;if(e.code)return e.code;if(e.message)return e.message}return e instanceof Error?e.message:`unknown`}function Ii(e){let t=[{url:e,mode:`direct-lan`,priority:0}];return async()=>Pi()??t}function Li(e){let{api:t,cloudSession:n,cloudSessionLifecycle:r,storage:i,serverId:a,logger:o}=e,s=a?`${Mi}:${a}`:Mi,c=null,l=0,u,d=!1,f=!1;async function p(e,t){return await ki(t,e),e}async function m(){if(!d&&(d=!0,i))try{let e=await i.get(s);if(!e)return;let t=JSON.parse(e);t?.pool?.length&&Date.now()-t.at<ji&&(c=t.pool,l=t.at,u=t.ca)}catch{}}return async e=>{let a=Pi();if(a)return a;if(await m(),await r.ensureFresh(e),e.aborted)return[];let d=n.state.value;if(!d)throw Error(`cloud session not initialised after ensureFresh`);try{let a=await t.tunnelCheck(d.proxyUrl,d.proxyToken,e),m=Ni(a);if(m.length===0&&!f){f=!0;let i=`internal=${a.internalAddresses.length}, external=${a.externalAddresses.length}`;if(o?.debug(`discover`,`tunnel/check empty pool (proxyUrl=${d.proxyUrl}, ${i}) — forcing session re-mint`),n.patch({proxyTokenExpiresAt:Date.now()-1}),await r.ensureFresh(e),e.aborted)return[];let s=n.state.value;s&&s.proxyToken!==d.proxyToken&&(o?.debug(`discover`,`re-minted session, retrying tunnel/check (proxyUrl=${s.proxyUrl})`),a=await t.tunnelCheck(s.proxyUrl,s.proxyToken,e),m=Ni(a))}if(m.length===0){if(c&&Date.now()-l<ji){let e=c;return c=null,l=0,o?.debug(`discover`,`empty pool — using cached pool fallback (${e.length} endpoints, single-use)`),p(e,u)}return m}return f=!1,c=m,l=Date.now(),u=a.ca,i?.set(s,JSON.stringify({pool:m,at:l,ca:u})),p(m,a.ca)}catch(e){let t=Wt.isAxiosError(e)?e.response?.status:void 0;if(t===401||t===403)throw n.patch({proxyTokenExpiresAt:Date.now()-1}),c=null,l=0,i?.del(s),e;if(c&&Date.now()-l<ji){let t=c;return c=null,l=0,o?.debug(`discover`,`tunnel/check failed (${Fi(e)}) — using cached pool fallback (${t.length} endpoints, single-use)`),p(t,u)}throw e}}}var Ri=t({default:()=>zi}),zi=``+new URL(`camera-preview-C7GT5VHo.png`,import.meta.url).href,Bi=t({default:()=>Vi}),Vi=``+new URL(`logo-512-DLKVOU2S.png`,import.meta.url).href,Hi=t({default:()=>Ui}),Ui=``+new URL(`logo-256-BCQk9H1-.png`,import.meta.url).href,Wi=t({default:()=>Gi}),Gi=``+new URL(`logo-512-DLKVOU2S.png`,import.meta.url).href,Ki=t({default:()=>qi}),qi=``+new URL(`logo-DmEiRk0z.png`,import.meta.url).href,Ji=t({default:()=>Yi}),Yi=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20viewBox='0%200%20233.63%20233.63'%3e%3cdefs%3e%3cstyle%3e.cls-1{fill:url(%23dark_wine);}.cls-2{fill:url(%23light_wine);}.cls-3{fill:none;stroke:%23000;stroke-miterlimit:10;opacity:0;}.cls-4{fill:%23c5c6c8;}.cls-5{fill:%231a1e21;stroke:%233a3a3a;stroke-width:2px;}.cls-6{fill:%23fff;}%3c/style%3e%3clinearGradient%20id='dark_wine'%20x1='87.36'%20y1='158.67'%20x2='87.36'%20y2='59.85'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20offset='0'%20stop-color='%23730000'/%3e%3cstop%20offset='0.49'%20stop-color='%23a51733'/%3e%3c/linearGradient%3e%3clinearGradient%20id='light_wine'%20x1='113.06'%20y1='197.59'%20x2='113.06'%20y2='80.87'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20offset='0'%20stop-color='%23f44a6b'/%3e%3cstop%20offset='0.28'%20stop-color='%23df294c'/%3e%3c/linearGradient%3e%3c/defs%3e%3cg%20id='CameraUI_U'%3e%3cpath%20id='U_Left'%20class='cls-1'%20d='M47.05,119.47s7.58,16,14.12,23.42a45.28,45.28,0,0,0,16.37,11.86A49.46,49.46,0,0,0,99,158.62c9.43-.46,20.55-3.87,29.24-11.86-3.9,2.5-9.87,5.1-15.9,4.77a25.63,25.63,0,0,1-18.38-9.09c-9.39-10.31-7.62-28.35-7.75-32.68-.35-11.42.77-21.92-1.76-36.19-.46-2.64-1.79-5.19-4.55-8-1.83-1.86-8.4-5.75-13.42-5.74-7.31,0-12.95,3.71-15.38,7.84-2,3.41-3.06,4.22-4.23,25.08a217.23,217.23,0,0,0,.22,26.76Z'%20transform='translate(0.5%200.5)'/%3e%3cpath%20id='U_Right'%20class='cls-2'%20d='M144.12,89.6a16.24,16.24,0,0,1,4.06-4.9c4.16-3.4,9-3.67,10.92-3.82a19.7,19.7,0,0,1,12.53,4.58c1.19,1,6.11,5.58,7.13,17.29.73,8.51,3.31,65.93-37,87.14-4.22,2.22-18,9.25-35.66,7.38a62.43,62.43,0,0,1-20.8-6.11,65.8,65.8,0,0,1-18.89-14.23c-20.21-21.67-19.36-57.46-19.36-57.46s7.58,16,14.12,23.42a45.28,45.28,0,0,0,16.37,11.86A49.46,49.46,0,0,0,99,158.62c11.66-.57,25.93-5.64,35-18.32C143.52,126.8,138.46,100.51,144.12,89.6Z'%20transform='translate(0.5%200.5)'/%3e%3c/g%3e%3cg%20id='CameraUI_Lens'%3e%3ccircle%20id='ellipse'%20class='cls-3'%20cx='116.81'%20cy='116.81'%20r='116.31'/%3e%3cg%20id='lens'%3e%3ccircle%20id='lens_bg'%20class='cls-4'%20cx='159.13'%20cy='58.39'%20r='18.66'/%3e%3cpath%20id='lens_inner'%20class='cls-5'%20d='M169.64,58.31a11,11,0,1,1-22,0c0-6.08,4.93-11.86,11-11.86S169.64,52.23,169.64,58.31Z'%20transform='translate(0.5%200.5)'/%3e%3cg%20id='reflections'%3e%3cellipse%20id='dot_1'%20class='cls-6'%20cx='174.36'%20cy='53.69'%20rx='1.84'%20ry='1.42'/%3e%3cellipse%20id='dot_2'%20class='cls-6'%20cx='174.36'%20cy='57.08'%20rx='1.84'%20ry='1.42'/%3e%3cellipse%20id='dot_3'%20class='cls-6'%20cx='174.36'%20cy='60.46'%20rx='1.84'%20ry='1.42'/%3e%3ccircle%20id='dot_4'%20class='cls-6'%20cx='164.09'%20cy='63.77'%20r='1.66'/%3e%3cpath%20id='wide_1'%20class='cls-6'%20d='M156.63,48.9c-1.07-.88-5.52,3.09-6.31,5.43a1.53,1.53,0,0,0,0,1.26c.43.69,1.73.61,2.19.54,2.68-.44,4.71-4.09,4.8-4.37A3.21,3.21,0,0,0,156.63,48.9Z'%20transform='translate(0.5%200.5)'/%3e%3c/g%3e%3c/g%3e%3c/g%3e%3c/svg%3e`,Xi=t({default:()=>Zi}),Zi=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20viewBox='0%200%20132.55%20158.35'%20width='132.5500030517578'%20height='158.35000610351562'%3e%3cdefs%3e%3cstyle%3e.cls-2-1{fill:url(%23dark_wine);}.cls-2-2{fill:url(%23light_wine);}.cls-2-3{fill:%23c5c6c8;}.cls-2-4{fill:%231a1e21;stroke:%233a3a3a;stroke-width:2px;}.cls-2-5{fill:%23fff;}%3c/style%3e%3clinearGradient%20id='dark_wine'%20x1='45.89'%20y1='124.26'%20x2='45.89'%20y2='25.44'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20offset='0'%20stop-color='%23730000'%3e%3c/stop%3e%3cstop%20offset='0.49'%20stop-color='%23a51733'%3e%3c/stop%3e%3c/linearGradient%3e%3clinearGradient%20id='light_wine'%20x1='71.59'%20y1='163.18'%20x2='71.59'%20y2='46.47'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20offset='0'%20stop-color='%23f44a6b'%3e%3c/stop%3e%3cstop%20offset='0.28'%20stop-color='%23df294c'%3e%3c/stop%3e%3c/linearGradient%3e%3c/defs%3e%3cg%20id='CameraUI_U'%3e%3cpath%20id='U_Left'%20class='cls-2-1%20svg-elem-1'%20d='M5.58,85.06s7.58,16,14.12,23.42a45.28,45.28,0,0,0,16.37,11.86,49.46,49.46,0,0,0,21.42,3.87c9.43-.46,20.55-3.87,29.24-11.86-3.9,2.5-9.87,5.1-15.9,4.77A25.68,25.68,0,0,1,52.44,108c-9.38-10.31-7.61-28.35-7.74-32.68-.35-11.42.77-21.92-1.76-36.19-.46-2.64-1.79-5.19-4.55-8C36.55,29.33,30,25.43,25,25.44c-7.31,0-12.95,3.72-15.38,7.84-2,3.41-3.07,4.22-4.23,25.08a217.23,217.23,0,0,0,.22,26.76Z'%20transform='translate(-5.05%20-4.82)'%3e%3c/path%3e%3cpath%20id='U_Right'%20class='cls-2-2%20svg-elem-2'%20d='M102.65,55.19a16.24,16.24,0,0,1,4.06-4.9c4.16-3.4,9-3.67,10.92-3.82a19.7,19.7,0,0,1,12.53,4.58c1.19,1,6.11,5.58,7.12,17.29.74,8.51,3.32,65.93-37,87.14-4.22,2.22-18,9.26-35.66,7.38a62.43,62.43,0,0,1-20.8-6.11,65.8,65.8,0,0,1-18.89-14.23C4.73,120.85,5.58,85.06,5.58,85.06s7.58,16,14.12,23.42a45.28,45.28,0,0,0,16.37,11.86,49.46,49.46,0,0,0,21.42,3.87c11.66-.57,25.93-5.64,35-18.32C102.05,92.39,97,66.1,102.65,55.19Z'%20transform='translate(-5.05%20-4.82)'%3e%3c/path%3e%3c/g%3e%3cg%20id='CameraUI_Lens'%3e%3ccircle%20id='lens_bg'%20class='cls-2-3%20svg-elem-3'%20cx='112.11'%20cy='18.66'%20r='18.66'%3e%3c/circle%3e%3cpath%20id='lens_inner'%20class='cls-2-4%20svg-elem-4'%20d='M128.17,23.9a11,11,0,1,1-22,0c0-6.08,4.93-11.86,11-11.86S128.17,17.82,128.17,23.9Z'%20transform='translate(-5.05%20-4.82)'%3e%3c/path%3e%3cg%20id='reflections'%3e%3cellipse%20id='dot_1'%20class='cls-2-5%20svg-elem-5'%20cx='127.34'%20cy='13.96'%20rx='1.84'%20ry='1.42'%3e%3c/ellipse%3e%3cellipse%20id='dot_2'%20class='cls-2-5%20svg-elem-6'%20cx='127.34'%20cy='17.34'%20rx='1.84'%20ry='1.42'%3e%3c/ellipse%3e%3cellipse%20id='dot_3'%20class='cls-2-5%20svg-elem-7'%20cx='127.34'%20cy='20.73'%20rx='1.84'%20ry='1.42'%3e%3c/ellipse%3e%3ccircle%20id='dot_4'%20class='cls-2-5%20svg-elem-8'%20cx='117.07'%20cy='24.04'%20r='1.66'%3e%3c/circle%3e%3cpath%20id='wide_1'%20class='cls-2-5%20svg-elem-9'%20d='M115.16,14.49c-1.07-.88-5.52,3.09-6.31,5.43a1.53,1.53,0,0,0,0,1.26c.43.69,1.73.61,2.18.54,2.69-.44,4.72-4.09,4.81-4.37A3.21,3.21,0,0,0,115.16,14.49Z'%20transform='translate(-5.05%20-4.82)'%3e%3c/path%3e%3c/g%3e%3c/g%3e%3c/svg%3e`,Qi=t({default:()=>$i}),$i=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20viewBox='-40%20-30%20300%20300'%3e%3cdefs%3e%3cstyle%3e.cls-3-1%20{fill:%20url(%23dark_wine);}%20.cls-3-2%20{fill:%20url(%23light_wine);}%20.cls-3-3%20{fill:%20none;stroke:%20%23000;stroke-miterlimit:%2010;opacity:%200;}%20.cls-3-4%20{fill:%20%23c5c6c8;}%20.cls-3-5%20{fill:%20%231a1e21;stroke:%20%233a3a3a;stroke-width:%202px;}%20.cls-3-6%20{fill:%20%23fff;}%3c/style%3e%3clinearGradient%20id='dark_wine'%20x1='220.57'%20y1='310.8'%20x2='220.57'%20y2='211.98'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20offset='0'%20stop-color='%23730000'%20/%3e%3cstop%20offset='0.49'%20stop-color='%23a51733'%20/%3e%3c/linearGradient%3e%3clinearGradient%20id='light_wine'%20x1='246.27'%20y1='349.71'%20x2='246.27'%20y2='233'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20offset='0'%20stop-color='%23f44a6b'%20/%3e%3cstop%20offset='0.28'%20stop-color='%23df294c'%20/%3e%3c/linearGradient%3e%3c/defs%3e%3cg%20id='CameraUI_U'%20class='cameraLetter'%3e%3cpath%20id='U_Left'%20class='cls-3-1'%20d='M180.26,271.6s7.57,16,14.11,23.42a45.43,45.43,0,0,0,16.38,11.86,49.46,49.46,0,0,0,21.42,3.87c9.42-.46,20.55-3.87,29.24-11.86-3.9,2.5-9.87,5.1-15.9,4.77a25.66,25.66,0,0,1-18.39-9.09c-9.38-10.31-7.61-28.35-7.74-32.68-.35-11.43.77-21.92-1.76-36.2-.47-2.63-1.79-5.18-4.55-8-1.84-1.86-8.41-5.75-13.43-5.74-7.3,0-12.94,3.71-15.38,7.84-2,3.41-3.06,4.22-4.22,25.08a215.27,215.27,0,0,0,.22,26.76Z'%20transform='translate(-132.71%20-151.63)'%20/%3e%3cpath%20id='U_Right'%20class='cls-3-2'%20d='M277.33,241.73a16.41,16.41,0,0,1,4.05-4.91c4.17-3.39,9-3.66,10.92-3.81a19.67,19.67,0,0,1,12.53,4.58c1.2,1,6.12,5.58,7.13,17.29.74,8.51,3.31,65.93-37,87.13-4.23,2.22-18,9.26-35.67,7.39a62.35,62.35,0,0,1-20.79-6.11,65.68,65.68,0,0,1-18.9-14.24c-20.2-21.66-19.35-57.45-19.35-57.45s7.57,16,14.11,23.42a45.43,45.43,0,0,0,16.38,11.86,49.46,49.46,0,0,0,21.42,3.87c11.66-.57,25.92-5.64,35-18.33C276.73,278.93,271.67,252.64,277.33,241.73Z'%20transform='translate(-132.71%20-151.63)'%20/%3e%3c/g%3e%3cg%20id='CameraUI_Lens'%3e%3cg%20id='lens'%20class='cameraLens'%3e%3ccircle%20id='lens_bg'%20class='cls-3-4'%20cx='159.13'%20cy='58.39'%20r='18.66'%20/%3e%3cpath%20id='lens_inner'%20class='cls-3-5'%20d='M302.85,210.44a11,11,0,1,1-22,0c0-6.08,4.93-11.86,11-11.86S302.85,204.36,302.85,210.44Z'%20transform='translate(-132.71%20-151.63)'%20/%3e%3cg%20id='reflections'%3e%3cellipse%20id='dot_1'%20class='cls-3-6'%20cx='174.36'%20cy='53.69'%20rx='1.84'%20ry='1.42'%20/%3e%3cellipse%20id='dot_2'%20class='cls-3-6'%20cx='174.36'%20cy='57.08'%20rx='1.84'%20ry='1.42'%20/%3e%3cellipse%20id='dot_3'%20class='cls-3-6'%20cx='174.36'%20cy='60.46'%20rx='1.84'%20ry='1.42'%20/%3e%3ccircle%20id='dot_4'%20class='cls-3-6'%20cx='164.09'%20cy='63.77'%20r='1.66'%20/%3e%3cpath%20id='wide_1'%20class='cls-3-6'%20d='M289.83,201c-1.07-.88-5.52,3.09-6.3,5.43a1.52,1.52,0,0,0,0,1.26c.43.69,1.72.61,2.18.53,2.68-.43,4.72-4.08,4.8-4.36A3.18,3.18,0,0,0,289.83,201Z'%20transform='translate(-132.71%20-151.63)'%20/%3e%3c/g%3e%3c/g%3e%3c/g%3e%3c/svg%3e`,ea=3e4;function ta(){let e=ei(),t=U(()=>e.target.value?.endpoint.url),n=U(()=>e.target.value?.tokens.access),r=U(()=>e.target.value?.tokens.proxySession),i=U(()=>{let t=e.phase.value;return t.kind===`idle`?null:t.instanceId}),a=U(()=>e.phase.value.kind===`idle`),o=U(()=>e.phase.value.kind===`discovering`),s=U(()=>e.phase.value.kind===`online`),c=U(()=>e.phase.value.kind===`needs-auth`),l=U(()=>e.phase.value.kind===`offline`),u=U(()=>{let t=e.signal.value;return t.kind===`connecting`?e.hasBeenOnline.value?`reconnecting`:`connecting`:t.kind===`offline`?`reconnecting`:t.kind===`degraded`?`degraded`:null}),d=U(()=>e.troubleElapsedMs.value>=ea),f=U(()=>{let t=e.phase.value;return t.kind===`offline`?t.nextRetryAt:null}),p=U(()=>{let t=e.phase.value;return t.kind===`offline`?t.lastError:null});return{phase:e.phase,signal:e.signal,target:e.target,endpoint:t,accessToken:n,proxySession:r,instanceId:i,isIdle:a,isDiscovering:o,isOnline:s,isNeedsAuth:c,isOffline:l,bannerMode:u,inTrouble:d,nextRetryAt:f,offlineReason:p,boot:t=>e.boot(t),retry:()=>e.retry(),reset:()=>e.reset()}}var na={de:{components:{automation_import:{title:`Automatisierung importieren`,import:`Importieren`,intro:`Verknüpfen Sie die Referenzen dieser Vorlage mit Ihren lokalen Kameras, Plugins und Benutzern. Prüfen Sie vorausgefüllte Werte.`,no_inputs:`Diese Vorlage enthält keine Referenzen zum Verknüpfen. Sie können sie direkt importieren.`,missing_plugins:`Fehlende benötigte Plugins: {plugins}. Installieren Sie sie vor dem Import.`,open_plugin_store:`Plugin-Store öffnen`,select_camera:`Kamera auswählen`,select_plugin:`Plugin auswählen`,no_plugin_for_interface:`Kein installiertes Plugin bietet die Schnittstelle "{interface}".`,select_targets:`Empfänger auswählen`,select_sensor:`Sensor auswählen`,enter_target_id:`Ziel-ID eingeben`},automation_store:{search:`Community-Automatisierungen suchen...`,filter_category:`Kategorie`,filter_all_categories:`Alle Kategorien`,sort_by:`Sortieren nach`,sort_featured:`Empfohlen`,sort_name:`Name`,featured:`Empfohlen`,automations:`Automatisierungen`,refresh:`Aktualisieren`,empty:`Keine Community-Automatisierungen verfügbar`,not_found:`Automatisierung nicht gefunden`,needs:`Benötigt`,import:`Importieren`,required_plugins:`Benötigte Plugins`,missing_plugins_hint:`Einige benötigte Plugins sind nicht installiert. Installieren Sie sie vor dem Import aus dem Plugin-Store.`,required_inputs:`Benötigte Eingaben`,input_camera:`{count} Kamera`,input_plugin:`{count} Plugin`,input_sensor:`{count} Sensor`,input_notification_targets:`Benachrichtigungen`,input_system_target:`{count} Ziel`,input_text:`{count} Wert`,category_notification:`Benachrichtigung`,category_recording:`Aufnahme`,category_presence:`Anwesenheit`,category_detection:`Erkennung`,category_schedule:`Zeitplan`,category_webhook:`Webhook`,category_mqtt:`MQTT`,category_scene:`Szene`,category_utility:`Werkzeug`,category_other:`Sonstiges`},automation_nodes:{category_triggers:`Auslöser`,category_conditions:`Bedingungen`,category_actions:`Aktionen`,category_utilities:`Hilfsmittel`,trigger_detection:`Erkennungsereignis`,trigger_detection_desc:`Wird ausgelöst, wenn eine Kamera Bewegung, eine Person, ein Fahrzeug usw. erkennt.`,event_phase:`Auslösen bei`,event_phase_start:`Ereignisstart`,event_phase_update:`Ereignisaktualisierung`,event_phase_end:`Ereignisende`,event_phase_segment_start:`Segment Start`,event_phase_segment_update:`Segment Update`,event_phase_segment_end:`Segment Ende`,event_phase_placeholder:`Alle Phasen`,event_phase_multi_hint:`Wählen Sie aus, auf welche Event-Phasen getriggert wird. Leer = alle Phasen.`,detection_labels:`Objektfilter`,detection_labels_placeholder:`Jede Erkennung`,detection_labels_hint:`Nur auslösen wenn diese Objekte erkannt werden. Leer lassen für jede Erkennung.`,label_motion:`Bewegung`,label_person:`Person`,label_vehicle:`Fahrzeug`,label_animal:`Tier`,label_package:`Paket`,label_audio:`Audio`,confidence_hint:`Mindestvertrauen für Objekterkennung. Auf 0 setzen zum Überspringen.`,audio_labels:`Audio-Ereignisfilter`,audio_labels_placeholder:`Jedes Audio-Ereignis`,audio_labels_hint:`Nur bei bestimmten Audio-Ereignissen auslösen. Leer lassen für alle.`,audio_doorbell:`Türklingel`,audio_glass_break:`Glasbruch`,audio_scream:`Schrei`,audio_gunshot:`Schuss`,audio_dog_bark:`Hundebellen`,audio_baby_cry:`Baby weint`,audio_alarm:`Alarm`,audio_car_alarm:`Autoalarm`,audio_smoke_alarm:`Rauchmelder`,audio_siren:`Sirene`,audio_speaking:`Sprache`,audio_cat:`Katze`,face_filter:`Gesichtsfilter`,face_filter_placeholder:`Name hinzufügen`,face_filter_hint:`Nur für bestimmte Personen auslösen. Funktioniert am besten mit "Ereignisende".`,license_plate_filter:`Kennzeichenfilter`,license_plate_filter_placeholder:`Kennzeichen hinzufügen`,license_plate_filter_hint:`Nur für bestimmte Kennzeichen auslösen.`,trigger_sensor:`Sensoränderung`,trigger_sensor_desc:`Wird ausgelöst, wenn sich eine Sensoreigenschaft ändert.`,sensor_properties:`Eigenschaften`,sensor_properties_placeholder:`Alle Eigenschaften`,sensor_properties_hint:`Wählen Sie, welche Eigenschaften überwacht werden. Leer = jede Änderung.`,snapshot_force_new:`Neuen Snapshot erzwingen`,snapshot_force_new_hint:`Cache umgehen und ein frisches Bild von der Kamera aufnehmen.`,condition_logic:`Verknüpfung`,condition_add:`Bedingung hinzufügen`,logic_and:`UND`,logic_or:`ODER`,trigger_schedule:`Zeitplan`,trigger_schedule_desc:`Wird nach einem Zeitplan ausgelöst.`,cron_expression:`Cron-Ausdruck`,cron_presets:`Vorlagen`,cron_every_minute:`Jede Minute`,cron_every_5_min:`Alle 5 Min.`,cron_every_hour:`Jede Stunde`,cron_daily_midnight:`Täglich (Mitternacht)`,cron_daily_6am:`Täglich (6 Uhr)`,trigger_webhook:`Webhook`,trigger_mqtt:`MQTT-Nachricht`,trigger_mqtt_desc:`Wird ausgelöst, wenn eine Nachricht auf einem MQTT-Topic eingeht. Benötigt die MQTT-Verbindung in den Einstellungen.`,mqtt_topic:`Topic`,mqtt_topic_hint:`MQTT-Topic, das abonniert wird. Wildcards + und # werden unterstützt.`,mqtt_match_mode:`Abgleich`,mqtt_match_any:`Jede Nachricht`,mqtt_match_exact:`Exakter Payload`,mqtt_match_json:`JSON-Wert`,mqtt_payload_filter:`Payload`,mqtt_payload_filter_hint:`Nur auslösen, wenn der Payload exakt diesem Text entspricht. Für JSON-Geräte (Shelly, Tasmota, …) stattdessen JSON-Wert verwenden.`,mqtt_json_path:`JSON-Pfad`,mqtt_json_path_hint:`Punkt-Pfad in den JSON-Payload, z. B. "output" oder "params.switch:0.output".`,mqtt_json_value:`Ist gleich`,mqtt_json_value_hint:`Nur auslösen, wenn der Wert am Pfad diesem entspricht. Leer lassen, um bei vorhandenem Pfad auszulösen.`,action_mqtt:`MQTT Publish`,action_mqtt_desc:`Veröffentlicht eine Nachricht auf einem MQTT-Topic. Benötigt die MQTT-Verbindung in den Einstellungen.`,mqtt_payload:`Payload`,mqtt_retain:`Retain`,mqtt_retain_hint:`Der Broker speichert die Nachricht und liefert sie an neue Abonnenten aus.`,trigger_webhook_desc:`Wird durch eine externe HTTP-Anfrage ausgelöst.`,trigger_system:`Systemereignis`,trigger_system_desc:`Wird durch ein Systemereignis ausgelöst.`,system_category:`Kategorie`,system_event_type:`Ereignistyp`,system_event_placeholder:`Ereignistyp auswählen`,system_cat_system:`System`,system_cat_plugin:`Plugin`,system_cat_camera:`Kamera`,system_evt_started:`System gestartet`,system_evt_shutdown:`System heruntergefahren`,system_evt_camera_added:`Kamera hinzugefügt`,system_evt_camera_removed:`Kamera entfernt`,system_evt_plugin_started:`Plugin gestartet`,system_evt_plugin_stopped:`Plugin gestoppt`,system_evt_plugin_error:`Plugin-Fehler`,system_evt_camera_connected:`Kamera verbunden`,system_evt_camera_disconnected:`Kamera getrennt`,system_evt_fw_started:`FrameWorker gestartet`,system_evt_fw_stopped:`FrameWorker gestoppt`,system_evt_property_changed:`Eigenschaft geändert`,system_evt_sensor_added:`Sensor hinzugefügt`,system_evt_sensor_deleted:`Sensor gelöscht`,camera:`Kamera`,camera_placeholder:`Kamera auswählen`,trigger_manual:`Manuell`,trigger_manual_desc:`Wird manuell durch Klicken auf Ausführen ausgelöst.`,condition_ifelse:`Wenn / Sonst`,condition_ifelse_desc:`Verzweigung basierend auf einer Bedingung.`,condition_switch:`Verzweigung`,condition_switch_desc:`Verzweigung basierend auf mehreren Werten.`,condition_sensorstate:`Sensorstatus`,condition_sensorstate_desc:`Aktuellen Status eines Sensors prüfen.`,action_snapshot:`Schnappschuss`,action_snapshot_desc:`Einen Schnappschuss von einer Kamera aufnehmen.`,action_recording:`Aufnahme umschalten`,action_recording_desc:`Aufnahme einer Kamera starten oder stoppen.`,action_sensor:`Sensor steuern`,action_sensor_desc:`Einen Sensorwert setzen.`,action_notification:`Benachrichtigung senden`,action_notification_desc:`Eine Push-Benachrichtigung senden.`,action_notification_control:`Benachrichtigungen an/aus`,action_notification_control_desc:`Push-Benachrichtigungen an- oder ausschalten, für alle oder einen Nutzer.`,notification_control_mode:`Benachrichtigungen`,notification_control_enable:`An`,notification_control_disable:`Aus`,notification_control_scope:`Gilt für`,notification_control_scope_global:`Alle`,notification_control_scope_user:`Einen Nutzer`,notification_control_scope_global_hint:`Schaltet Push für alle Nutzer stumm oder wieder an.`,notification_control_scope_user_hint:`Schaltet Push nur für den gewählten Nutzer stumm oder wieder an.`,notification_control_user:`Nutzer`,notification_control_user_placeholder:`Nutzer auswählen`,notification_title:`Titel`,notification_title_placeholder:`Titel der Benachrichtigung`,notification_body:`Text`,notification_body_placeholder:`Text der Benachrichtigung`,notification_severity:`Wichtigkeit`,severity_info:`Info`,severity_warning:`Warnung`,severity_error:`Fehler`,severity_critical:`Kritisch (umgeht Nicht stören)`,notification_image:`Bild`,notification_image_placeholder:`{'{{snapshot}}'} oder https://…`,notification_image_hint:`Bild-Variable verwenden, URL einfügen oder Datei hochladen. Leer lassen für reinen Text.`,notification_deep_link:`Deep Link`,notification_targets:`Zielgeräte`,notification_targets_hint:`Geräte, die diese Benachrichtigung erhalten. Leer lassen, um an alle registrierten Geräte zu senden.`,notification_targets_placeholder:`Alle Geräte`,action_http:`HTTP-Anfrage`,action_http_desc:`Eine HTTP-Anfrage an eine externe URL senden.`,action_delay:`Verzögerung`,action_delay_desc:`Für eine bestimmte Dauer warten.`,action_variable:`Variable setzen`,action_variable_desc:`Einen Wert zur späteren Verwendung speichern.`,action_plugin:`Plugin-Aufruf`,action_plugin_desc:`Ein Erkennungs- oder Analyse-Plugin auf ein Bild anwenden.`,action_image_input:`Bild-Eingabe`,action_image_input_desc:`Ein Bild von einer URL oder Variable laden.`,action_output:`Ausgabe`,action_output_desc:`Ergebnisse nach Ausführung anzeigen.`,image_source:`Bildquelle`,image_source_placeholder:`https://example.com/bild.jpg oder {'{{variable}}'}`,image_upload:`Bild hochladen`,image_source_hint:`URL, base64-Daten oder Datei hochladen.`,image_variable_hint:`Das Bild wird als base64 in dieser Variable gespeichert.`,image_width:`Breite`,image_height:`Höhe`,image_auto:`0 = auto`,image_resize_hint:`0 für Originalgröße. Beide 0 = kein Resize.`,image_output_format:`Ausgabeformat`,variable:`Variable`,output_label:`Label`,output_label_placeholder:`z.B. Dauer`,output_add:`Ausgabe-Variable hinzufügen`,output_hint:`Diese Werte werden nach manueller Ausführung angezeigt.`,available_variables:`Variablen`,variable_operator:`Operator`,alias:`Alias`,alias_placeholder:`myNode`,alias_hint:`Variablen mit Prefix versehen, z.B. cam1.plugin.result`,repeat:`Wiederholen`,repeat_count:`Wiederholungen`,repeat_concurrency:`Parallele Aufrufe pro Durchlauf`,repeat_concurrency_hint:`Anzahl gleichzeitiger Aufrufe pro Durchlauf. Total = Durchläufe × Parallelität.`,repeat_delay:`Pause zwischen Durchläufen`,plugin_settings:`Plugin-Einstellungen`,plugin_apply_settings:`Übernehmen`,plugin_interface:`Plugin-Schnittstelle`,plugin_interface_placeholder:`Schnittstelle wählen`,plugin_name:`Plugin`,plugin_name_placeholder:`Plugin wählen`,plugin_no_plugins:`Keine Plugins für diese Schnittstelle verfügbar`,plugin_method:`Methode`,plugin_method_placeholder:`Methode wählen`,method_test_object:`Objekte erkennen`,method_test_face:`Gesichter erkennen`,method_test_plate:`Kennzeichen erkennen`,method_test_classifier:`Bild klassifizieren`,method_test_motion:`Bewegung erkennen`,method_test_audio:`Audio-Ereignisse erkennen`,method_test_clip:`CLIP-Embedding generieren`,method_text_embedding:`Text-Embedding`,method_detect_objects:`Objekte erkennen (Raw Frame)`,method_detect_faces:`Gesichter erkennen (Raw Frame)`,method_detect_plates:`Kennzeichen erkennen (Raw Frame)`,method_detect_classifications:`Klassifizieren (Raw Frame)`,method_detect_motion:`Bewegung erkennen (Raw Frame)`,method_detect_audio:`Audio-Ereignisse erkennen (Raw Frame)`,method_detect_clip:`CLIP Embedding (Raw Frame)`,param_frame:`Frame-Daten`,param_image:`Bilddaten`,param_audio:`Audiodaten`,param_image_hint:`Verwenden Sie {'{{snapshot}}'} von einem vorherigen Capture-Snapshot-Knoten.`,param_video:`Videodaten`,param_text:`Text`,confidence:`Konfidenzschwelle`,webhook_url:`Webhook-URL`,webhook_url_hint:`Sende einen POST-Request an diese URL um die Automatisierung auszulösen.`,webhook_secret:`HMAC-Secret`,webhook_secret_hint:`Sende dieses Secret in einem X-Webhook-Secret Header. Alternativ den Body mit HMAC-SHA256(body, secret) in einem X-Webhook-Signature Header signieren.`,webhook_secret_save_hint:`Speichern Sie die Automatisierung, um ein HMAC-Secret zu generieren.`,webhook_secret_copied:`Kopiert`,condition_variable:`Variable`,condition_variable_placeholder:`Variable auswählen oder eingeben`,condition_variable_hint:`Vordefinierte Variable auswählen oder eigenen Ausdruck eingeben.`,condition_source_info:`Verbunden mit: {source}`,condition_no_source:`Verbinden Sie einen Knoten um verfügbare Variablen zu sehen.`,sensor_label:`Sensor`,sensor_placeholder:`Sensor auswählen`,sensor_property_placeholder:`Eigenschaft`,sensor_property_detected:`Erkannt`,sensor_property_detections:`Erkennungen`,sensor_property_blocked:`Blockiert`,sensor_property_lastTriggered:`Zuletzt ausgelöst`,sensor_property_labels:`Labels`,sensor_property_decibels:`Dezibel`,sensor_property_current:`Aktueller Wert`,sensor_property_on:`An`,sensor_property_brightness:`Helligkeit`,sensor_property_active:`Aktiv`,sensor_property_volume:`Lautstärke`,sensor_property_currentState:`Aktueller Zustand`,sensor_property_targetState:`Zielzustand`,sensor_property_obstructionDetected:`Hindernis erkannt`,sensor_property_position:`Position`,sensor_property_moving:`In Bewegung`,sensor_property_presets:`Voreinstellungen`,sensor_property_velocity:`Geschwindigkeit`,sensor_property_targetPreset:`Ziel-Voreinstellung`,sensor_property_relativeMove:`Relative Bewegung`,sensor_property_home:`Home-Position`,sensor_property_ring:`Klingeln`,sensor_property_level:`Batteriestand`,sensor_property_charging:`Ladezustand`,sensor_property_low:`Batterie schwach`,mqtt_recent_topics:`Letzte Topics`,validation_no_trigger:`Der Flow hat keinen Trigger.`,validation_unreachable:`Dieser Node ist mit keinem Trigger verbunden.`,validation_missing_fields:`Erforderliche Einstellungen fehlen.`,validation_no_cases:`Der Switch hat keine Fälle.`,validation_invalid_cron:`Der Cron-Ausdruck braucht 5 Felder.`,validation_invalid_variable_name:`Variablennamen dürfen nur Buchstaben, Ziffern, Unterstriche und Punkte enthalten.`,validation_unknown_variable:`Unbekannte Variable {name}.`,variable_event_type:`Ereignistyp`,variable_event_types:`Alle Ereignistypen`,variable_event_label:`Erkanntes Label`,variable_event_confidence:`Konfidenz`,variable_event_state:`Ereignisstatus`,variable_event_camera:`Kamera-ID`,variable_event_faces:`Erkannte Gesichter`,variable_event_plates:`Kennzeichen`,variable_event_id:`Ereignis-ID`,variable_sensor_value:`Sensorwert`,variable_sensor_previous_value:`Vorheriger Wert`,variable_sensor_property:`Geänderte Eigenschaft`,variable_sensor_type:`Sensortyp`,variable_sensor_id:`Sensor-ID`,variable_sensor_cameras:`Zugewiesene Kameras`,variable_webhook_body:`Webhook-Body`,variable_webhook_data:`Webhook-Daten (Base64)`,variable_webhook_method:`HTTP-Methode`,variable_webhook_headers:`Header (JSON)`,variable_mqtt_topic:`Topic`,variable_mqtt_payload:`Payload`,variable_geo_event:`Geofence-Ereignis`,variable_geo_user:`Benutzer`,variable_geo_zone:`Zone`,variable_geo_lat:`Breitengrad`,variable_geo_lon:`Längengrad`,variable_geo_distance:`Entfernung (m)`,variable_system_event_type:`Ereignistyp`,variable_system_camera_id:`Kamera-ID`,variable_system_camera_name:`Kameraname`,variable_system_plugin_name:`Plugin-Name`,variable_system_plugin_id:`Plugin-ID`,variable_system_status:`Status`,variable_system_property:`Eigenschaft`,variable_system_sensor_id:`Sensor-ID`,variable_system_sensor_type:`Sensortyp`,variable_system_sensor_name:`Sensorname`,variable_snapshot:`Schnappschuss (Base64)`,variable_snapshot_data_uri:`Schnappschuss (Data-URI)`,variable_http_status:`HTTP-Status`,variable_http_body:`Antwort-Body`,variable_http_base64:`Antwort (Data-URI)`,variable_http_json:`Antwort-JSON`,variable_plugin_detected:`Erkannt`,variable_plugin_labels:`Labels`,variable_plugin_detections:`Erkennungen (JSON)`,variable_plugin_result:`Ergebnis (JSON)`,variable_plugin_duration:`Dauer (ms)`,variable_camera_id:`Kamera-ID`,variable_camera_name:`Kameraname`,variable_repeat_index:`Wiederholungsindex (ab 0)`,variable_repeat_iteration:`Wiederholung (ab 1)`,variable_repeat_total:`Wiederholungen gesamt`,variable_repeat_total_calls:`Aufrufe gesamt`,variable_repeat_elapsed_ms:`Dauer (ms)`,variable_repeat_elapsed_sec:`Dauer (s)`,variable_previous_success:`Vorherige Aktion erfolgreich`,variable_previous_result:`Ergebnis der vorherigen Aktion`,variable_value_active:`Aktiv`,variable_value_ended:`Beendet`,variable_value_enter:`Betreten`,variable_value_leave:`Verlassen`,lock_state_secured:`Verriegelt`,lock_state_unsecured:`Entriegelt`,lock_state_unknown:`Unbekannt`,garage_state_open:`Offen`,garage_state_closed:`Geschlossen`,garage_state_opening:`Öffnet`,garage_state_closing:`Schließt`,garage_state_stopped:`Gestoppt`,securitySystem_state_stay_arm:`Zuhause (Stay)`,securitySystem_state_away_arm:`Abwesend`,securitySystem_state_night_arm:`Nacht`,securitySystem_state_disarmed:`Deaktiviert`,securitySystem_state_alarm_triggered:`Alarm ausgelöst`,battery_state_not_chargeable:`Nicht aufladbar`,battery_state_not_charging:`Lädt nicht`,battery_state_charging:`Lädt`,battery_state_full:`Voll geladen`,http_url:`URL`,http_method:`Methode`,http_body:`Body`,http_headers:`Header`,http_header_name:`Name`,http_header_value:`Wert`,http_add_header:`Header hinzufügen`,switch_cases:`Fälle`,switch_cases_placeholder:`Fallwert hinzufügen`,switch_cases_hint:`Enter drücken um einen Fall hinzuzufügen. Jeder Fall erzeugt einen separaten Ausgang.`,switch_cases_suggested:`Vorgeschlagene Werte:`,condition_operator:`Operator`,operator_equals:`gleich`,operator_not_equals:`ungleich`,operator_greater:`größer als`,operator_less:`kleiner als`,operator_greater_equal:`größer oder gleich`,operator_less_equal:`kleiner oder gleich`,operator_contains:`enthält`,operator_starts_with:`beginnt mit`,operator_ends_with:`endet mit`,condition_value:`Wert`,condition_value_placeholder:`z.B. 0.8, true, person`,sensor_value_state:`Zustand`,sensor_value_variable:`Variable verwenden`,sensor_value_fixed:`Fester Wert`,sensor_value_variable_placeholder:`Variable unten einfügen`,variable_name:`Variablenname`,variable_name_hint:`Ein eindeutiger Name um diesen Wert später zu referenzieren.`,variable_value_placeholder:`Wert auswählen oder eingeben`,variable_value_hint:`Wert vom verbundenen Knoten auswählen oder eigenen Wert eingeben.`,delay_duration:`Dauer`,delay_unit:`Einheit`,unit_seconds:`Sekunden`,unit_minutes:`Minuten`,unit_hours:`Stunden`,condition_time:`Zeitbereich`,condition_time_desc:`Prüft ob die aktuelle Uhrzeit in einem Bereich liegt.`,condition_time_info:`Ergibt true wenn die aktuelle Uhrzeit im angegebenen Bereich liegt. Unterstützt Nachtbereiche (z.B. 22:00 - 06:00).`,condition_time_start:`Startzeit`,condition_time_end:`Endzeit`,condition_time_days:`Tage`,condition_time_days_all:`Alle Tage`,day_monday:`Montag`,day_tuesday:`Dienstag`,day_wednesday:`Mittwoch`,day_thursday:`Donnerstag`,day_friday:`Freitag`,day_saturday:`Samstag`,day_sunday:`Sonntag`,action_camera_control:`Kamera-Steuerung`,action_camera_control_desc:`Kamera-Einstellungen wie Snooze, Erkennungsempfindlichkeit etc. ändern.`,camera_select:`Kamera auswählen`,camera_control_properties:`Zu ändernde Eigenschaften`,camera_control_properties_hint:`Aktivieren Sie die Eigenschaften, die Sie ändern möchten, und setzen Sie ihre Werte.`,camera_prop_snooze:`Erkennung pausieren`,camera_prop_disabled:`Kamera deaktivieren`,camera_prop_recording:`Aufnahme aktivieren`,camera_prop_recording_mode:`Aufnahmemodus`,camera_prop_recording_prebuffer:`Aufnahme-Vorpuffer (s)`,camera_prop_ptz_autotrack:`PTZ Autotrack`,camera_prop_object_confidence:`Objekt-Konfidenz`,camera_prop_suppress_static:`Unbewegte Objekte ignorieren`,camera_prop_face_confidence:`Gesichts-Konfidenz`,camera_prop_plate_confidence:`Kennzeichen-Konfidenz`,camera_prop_plate_min_length:`Minimale Kennzeichenlänge`,camera_prop_hq_snapshots:`HQ-Schnappschüsse`,camera_prop_motion_timeout:`Bewegungs Timeout (s)`,camera_prop_motion_resolution:`Bewegungs-Auflösung`,camera_prop_audio_timeout:`Audio-Timeout (s)`,camera_prop_audio_min_decibels:`Audio Min. Dezibel`,camera_prop_audio_confidence:`Audio-Konfidenz`,camera_prop_sensor_timeout:`Sensor-Timeout (s)`,camera_prop_cascade_detection:`Kaskaden-Erkennung`,camera_prop_cascade_timeout:`Kaskaden-Timeout (s)`,camera_prop_fps:`FrameWorker FPS`,camera_prop_auto_refresh:`Snapshot Auto-Refresh`,camera_prop_snapshot_interval:`Snapshot-Intervall (s)`,camera_prop_snapshot_ttl:`Snapshot-TTL (s)`,trigger_geofence:`Geofence`,trigger_geofence_desc:`Wird ausgelöst wenn ein Benutzer eine geografische Zone betritt oder verlässt.`,geofence_zone_name:`Zonenname`,geofence_zone_name_placeholder:`z.B. Zuhause`,geofence_latitude:`Breitengrad`,geofence_longitude:`Längengrad`,geofence_radius:`Radius (Meter)`,geofence_event:`Auslösen bei`,geofence_event_enter:`Zone betreten`,geofence_event_leave:`Zone verlassen`,geofence_event_both:`Betreten & Verlassen`,geofence_users:`Überwachte Benutzer`,geofence_users_placeholder:`Benutzer auswählen`,geofence_users_hint:`Nur für diese Benutzer auslösen. Jeder getrackte Benutzer bekommt unten sein eigenes Secret — ein Reporter kann nur für einen Benutzer melden, dessen Secret er hat.`,geofence_url:`Location URL`,geofence_url_hint:`POST mit {'{'} lat: number, lon: number, user: string, timestamp: number {'}'} als JSON Body senden. timestamp = aktuelle Unix-Zeit in ms; wird mitsigniert und darf max. 5 Minuten alt sein (Replay-Schutz).`,geofence_secret:`HMAC-Secrets (pro Benutzer)`,geofence_secret_hint:`Jeder Benutzer signiert mit seinem eigenen Secret: X-Webhook-Signature = HMAC-SHA256(body, Secret des Benutzers).`,geofence_secret_save_hint:`Oben die zu trackenden Benutzer hinzufügen, dann die Automation speichern — es wird die Location URL und ein Secret pro Benutzer generiert.`,geofence_use_my_location:`Mein Standort`,geofence_map_hint:`Marker ziehen um den Zonenmittelpunkt zu setzen.`,geofence_location_error:`Standort nicht verfügbar. Bitte den Zonenmittelpunkt manuell auf der Karte setzen.`},camera_events:{no_events:`Keine aktuellen Ereignisse`,title:`Letzte Ereignisse`},camera_options:{overview:`Übersicht`,overview_status:`Status`,overview_sources:`Quellen`,overview_last_motion:`Letzte Bewegung`,overview_motion_active:`Aktiv`,overview_no_motion:`Keine Bewegung erkannt`,accessories:`Zubehör`,advanced:`Erweitert`,audio_state:`Audiozustand`,battery_state:`Batteriezustand`,branding:`Branding`,categories:`Kategorien`,category_audio_detection:`Geräuscherkennung`,category_camera_controller:`Kamera Controller`,category_controls:`Steuerungen`,category_hub:`Hub`,category_motion_detection:`Bewegungserkennung`,category_object_detection:`Objekterkennung`,category_ptz:`PTZ`,category_sensors:`Sensoren`,chip_audioDetection:`Geräuscherkennung`,chip_cameraController:`Kamera`,chip_hub:`Hub`,chip_more:`Mehr`,chip_motionDetection:`Bewegungserkennung`,chip_objectDetection:`Objekterkennung`,chip_plugins:`Plugins`,chip_ptz:`PTZ`,chip_controls:`Steuerungen`,chip_sensors:`Sensoren`,chip_detection:`Erkennung`,chip_core:`Kern`,chip_accessories:`Zubehör`,detection:`Erkennung`,provides:`Bietet`,sensor_types:`Sensor-Typen`,sensors:`Sensoren`,sensor_type_motion:`Bewegung`,sensor_type_object:`Objekt`,sensor_type_objectAssist:`Objekt-Assistenz`,sensor_type_audio:`Geräusch`,sensor_type_face:`Gesicht`,sensor_type_licensePlate:`Kennzeichen`,sensor_type_classifier:`Klassifizierer`,sensor_type_ptz:`PTZ`,sensor_type_light:`Licht`,sensor_type_siren:`Sirene`,sensor_type_doorbell:`Türklingel`,sensor_type_contact:`Kontakt`,sensor_type_battery:`Batterie`,sensor_type_switch:`Schalter`,sensor_type_lock:`Schloss`,sensor_type_temperature:`Temperatur`,sensor_type_humidity:`Feuchtigkeit`,sensor_type_occupancy:`Belegung`,sensor_type_smoke:`Rauchmelder`,sensor_type_leak:`Wassersensor`,sensor_type_garage:`Garagentor`,sensor_type_clip:`CLIP`,sensor_type_securitySystem:`Alarmanlage`,sensor_type_gas:`Gasmelder`,sensor_type_carbonMonoxide:`Kohlenmonoxid`,sensor_type_heat:`Hitze`,sensor_type_cold:`Kälte`,sensor_type_vibration:`Vibration`,sensor_type_tamper:`Sabotage`,sensor_type_problem:`Problem`,sensor_type_power:`Strom`,sensor_type_illuminance:`Helligkeit`,sensor_type_carbonDioxide:`CO₂`,doorbell_state:`Türklingelzustand`,enabled_extension:`Aktivierte Erweiterung`,frame_worker:`Frame Worker`,general:`Allgemein`,interface:`Interface`,light_state:`Lichtzustand`,manage_plugins:`Plugins verwalten`,model:`Modell`,more_plugins:`Mehr Plugins`,motion_detection:`Bewegungserkennung`,motion_state:`Bewegungszustand`,name:`Name`,native:`Nativ`,no_accessories:`Kein Zubehör verfügbar`,no_sensors:`Keine Sensoren verfügbar`,sensor_display_name:`Sensor Name`,no_plugins_available:`Keine Plugins verfügbar`,no_plugins_enabled:`Keine Plugins aktiviert`,no_plugins_found:`Keine Plugins gefunden`,object_detection:`Objekterkennung`,object_assist:`Objekt-Assistenz`,object_state:`Objektzustand`,plugin:`Plugin`,ptz_autotrack:`Autotrack`,plugin_settings:`Plugin Einstellungen`,sensor_settings:`Sensor Einstellungen`,virtual_sensors_hint:`Virtuelle Sensoren bilden externe Geräte und Zustände in camera.ui ab. Sie werden über den Übersicht-Tab oder durch Automatisierungen gesteuert.`,virtual_sensor_created:`Virtueller Sensor erstellt`,virtual_sensor_delete_confirm:`Sind Sie sicher, dass Sie diesen virtuellen Sensor löschen möchten? Automatisierungen, die ihn verwenden, funktionieren dann nicht mehr.`,source_delete:`Source entfernen`,source_delete_confirm:`Source "{name}" entfernen? Die Änderung greift erst beim Speichern.`,virtual_sensor_name_placeholder:`z. B. Haustür`,general_hint:`Änderungen hier betreffen nur die Darstellung der Kamera in camera.ui. Wird die Kamera deaktiviert, stoppen alle Streams und Erkennungen, bis sie wieder aktiviert wird.`,branding_hint:`Rein informativ und ohne Auswirkung auf die Funktionalität. Praktisch, um den Überblick über Ihre Hardware zu behalten.`,interface_hint:`Betrifft Wiedergabe und Darstellung, nicht die Kamera selbst. Passen Sie den Streaming-Modus an, wenn Livevideo auf Ihren Geräten nicht zuverlässig startet.`,detection_hint:`Bestimmt, wie empfindlich diese Kamera auf Ereignisse reagiert. Höhere Konfidenz und längere Timeouts bedeuten weniger, dafür zuverlässigere Ereignisse.`,ptz_autotrack_hint:`Wenn aktiviert, schwenkt die Kamera automatisch, um ausgewählte Objekttypen im Bild zu halten.`,recording:`Aufnahme`,recording_hint:`Steuert, ob und wie diese Kamera aufgezeichnet wird. Die Aufnahme übernimmt ein installiertes NVR-Plugin.`,recording_requires:`Kein NVR-Plugin zugewiesen. Die Einstellungen greifen, sobald eins installiert ist.`,zones_hint:`Ohne Zonen löst das gesamte Bild Ereignisse aus. Zonen beschränken Erkennungen auf relevante Bereiche, ignorierte Zonen verwerfen Erkennungen darin und Linien melden Objekte, die sie überqueren.`,snapshot_hint:`Schnappschüsse werden für Vorschauen und Benachrichtigungen verwendet. Kürzere Intervalle halten sie aktuell, erhöhen aber die Last auf der Kamera.`,frame_worker_hint:`Der FrameWorker analysiert den Videostream für Erkennungen. Ändern Sie diese Werte nur, wenn Erkennungen verzögert sind oder die Systemlast zu hoch ist.`,zones_empty:`Noch keine Zonen oder Linien an dieser Kamera.`,zone_entry_zone:`Zone`,zone_entry_privacy_mask:`Ignorierte Zone`,zone_entry_line:`Linienüberquerung`,zone_entry_delete:`Löschen`,zone_entry_delete_confirm:`Sind Sie sicher, dass Sie diesen Eintrag löschen möchten?`,recordings:`Aufnahmeeinstellungen`,settings:`Einstellungen`,siren_state:`Sirenenzustand`,source:`Quelle`,snapshot:`Snapshot`,streaming_mode:`Streaming Modus`,unknown:`Unbekannt`,zones:`Zonen`,detected:`Erkannt`,active:`Aktiv`,ringing:`Klingelt`,open:`Offen`,closed:`Geschlossen`},camera_table:{cameras:`Kameras`,name:`Name`,idle:`Inaktiv`,offline:`Offline`,online:`Online`,connecting:`Verbindet`,partial:`Teilweise`,error:`Fehler`,status:`Status`},detection_sensor:{detected:`Erkannt`,idle:`Ruhig`},battery_info:{charging:`Lädt...`,fully_charged:`Voll geladen`,not_chargeable:`Nicht ladbar`,critically_low:`Kritisch niedrig`,low:`Niedrig`,ready:`Bereit`},charts:{no_data:`Keine Daten verfügbar`},contact_sensor:{open:`Offen`,closed:`Geschlossen`},occupancy_sensor:{occupied:`Belegt`,empty:`Leer`},smoke_sensor:{detected:`Rauch erkannt`,clear:`Kein Rauch`},binary_sensor:{detected:`Ausgelöst`,clear:`Inaktiv`},leak_sensor:{detected:`Leck erkannt`,clear:`Kein Leck`},garage_control:{open:`Offen`,closed:`Geschlossen`,opening:`Öffnet`,closing:`Schließt`,stopped:`Gestoppt`},detection:{detected:`Erkannt`,idle:`Inaktiv`},detection_interface:{audio_detected:`Audio erkannt`,audio_not_detected:`Audio nicht erkannt`,audio_required:`Audio Datei erforderlich`,detect:`Erkennen`,drop_or_select_audio_to_detect:`Audio ablegen oder auswählen, um Geräusche zu erkennen`,drop_or_select_image_for_semantic_search:`Bild ablegen oder auswählen für die semantische Suche`,drop_or_select_image_to_classify:`Bild ablegen oder auswählen, um es zu klassifizieren`,drop_or_select_image_to_detect_faces:`Bild ablegen oder auswählen, um Gesichter zu erkennen`,drop_or_select_image_to_detect_license_plates:`Bild ablegen oder auswählen, um Kennzeichen zu erkennen`,drop_or_select_image_to_detect_objects:`Bild ablegen oder auswählen, um Objekte zu erkennen`,drop_or_select_video_to_detect_motion:`Video ablegen oder auswählen, um Bewegung zu erkennen`,file_size_error:`Dateigröße zu groß`,image_required:`Bild erforderlich`,interface_config:`Interface-Konfiguration`,no_interface_config:`Keine Interface-Konfiguration verfügbar`,only_one_audio_allowed:`Es ist nur ein Audio erlaubt`,only_one_image_allowed:`Es ist nur ein Bild erlaubt`,only_one_video_allowed:`Es ist nur ein Video erlaubt`,video_required:`Video erforderlich`},notification_interface:{template:`Benachrichtigungsvorlage`,title:`Titel`,title_required:`Titel ist erforderlich`,subtitle:`Untertitel`,body:`Text`,severity:`Dringlichkeit`,severity_info:`Info`,severity_warn:`Warnung`,severity_error:`Fehler`,severity_critical:`Kritisch (DND-Bypass)`,tag:`Tag`,image_url:`Bild-URL`,deep_link:`Deep Link`,data:`Daten`,data_key:`Schlüssel`,data_value:`Wert`,add_data:`Feld hinzufügen`,targets:`Ziele`,targets_hint:`Wählen Sie, welche Geräte diesen Test erhalten. Leer lassen, um an alle registrierten Geräte zu senden.`,all_devices:`Alle Geräte`,no_devices:`Keine Geräte für diesen Notifier registriert`,settings:`Notifier-Einstellungen`,send_test:`Test senden`,sent:`Testbenachrichtigung gesendet`},clip_interface:{enter_query:`Beschreiben Sie, was Sie sehen...`,search:`Suchen`},doorbell_trigger:{ringing:`Klingelt!`,ready:`Bereit`},dialog:{open:`Öffnen`,components:{new_camera:{add_camera:`Kamera hinzufügen`,add_camera_description:`Fügen Sie eine Kamera hinzu, die mit Ihrem lokalen Netzwerk verbunden ist`,camera:`Kamera`,discover_cameras:`Kameras suchen`,discover_cameras_description:`Suchen Sie nach Kameras in Ihrem lokalen Netzwerk`,no_cameras_found:`Keine Kameras gefunden`,no_schema_available:`Kein Verbindungsformular für diesen Gerätetyp verfügbar`,protocol_info:`Informationen zum gewählten Protokoll`,scan_again:`Erneut scannen`,search_camera:`Kamera suchen`,source:`Quelle`,test_source:`Kameraquelle testen`,title:`Neue Kamera`,unknown:`Unbekannt`}},message:{confirm_clear_log:`Sind Sie sicher, dass Sie das Protokoll löschen möchten?`,confirm_remove:`Sind Sie sicher, dass Sie diese Kamera entfernen möchten?`,confirm_remove_selected:`Sind Sie sicher, dass Sie {count} Kamera(s) entfernen möchten?`,confirm_remove_layout:`Sind Sie sicher, dass Sie dieses Layout entfernen möchten?`,confirm_reset_server:`Sind Sie sicher, dass Sie den Server zurücksetzen möchten?`,confirm_restart_go2rtc:`Sind Sie sicher, dass Sie Go2RTC neu starten möchten?`,confirm_restart_plugin:`Sind Sie sicher, dass Sie dieses Plugin neu starten möchten?`,confirm_restart_server:`Sind Sie sicher, dass Sie den Server neu starten möchten?`,confirm_restore:`Sind Sie sicher, dass Sie dieses Backup wiederherstellen möchten?`,confirm_delete_backup:`Sind Sie sicher, dass Sie "{filename}" löschen möchten?`,confirm_uninstall_plugin:`Sind Sie sicher, dass Sie dieses Plugin deinstallieren möchten?`,uninstall_remove_storage:`Gespeicherte Daten ebenfalls löschen`,uninstall_remove_storage_hint:`Entfernt dauerhaft die Einstellungen, Datenbanken und Caches dieses Plugins.`,compatibility_engine:`Benötigt {engine} {required} (installiert: {current})`,confirm_unregister_server:`Sind Sie sicher, dass Sie den Server deregistrieren möchten?`,confirm_enable_cloud:`Remote-Zugriff auf diesen Server über die camera.ui Cloud erlauben?`,confirm_disable_cloud_remote:`Das Deaktivieren beendet Ihre aktuelle Remote-Sitzung. Sie werden zur Cloud-Anmeldung weitergeleitet. Fortfahren?`,confirm_disable_cloud_local:`Das Deaktivieren trennt Remote-Sitzungen, die über die Cloud laufen. Lokale Verbindungen bleiben bestehen. Fortfahren?`,intercom_info:`Sprechen Sie gleichzeitig mit allen Kameras in dieser Ansicht, die eine Sprechanlage haben`},title:{config:`Konfiguration`,confirm:`Bestätigen`,details:`Details`,create_new_user:`Neuer Benutzer`,edit_dnd:`DND bearbeiten`,create_room:`Neuer Raum`,edit_layout:`Layout bearbeiten`,edit_user:`Benutzer bearbeiten`,edit_view:`Ansicht bearbeiten`,information:`Information`,install:`Installieren`,install_version:`Version installieren`,intercom:`Gegensprechanlage`,log:`Protokoll`,new_dnd:`Neue DND`,new_view:`Neue Ansicht`,new_zone:`Neue Zone`,plugin_config:`Plugin-Konfiguration`,preview:`Vorschau`,remove_layout:`Layout entfernen`,reset_server:`Server zurücksetzen`,restart:`Neustart`,result:`Ergebnis`,search_plugin:`Plugin suchen`,update:`Aktualisieren`,unknown:`Unbekannt`,unregister_server:`Server deregistrieren`,zone:`Zone`,zone_editor:`Zonen-Editor`}},form:{button:{add:`Hinzufügen`,add_source:`Quelle hinzufügen`,create_room:`Neuen Raum erstellen`,add_view:`Ansicht hinzufügen`,apply:`Übernehmen`,back:`Zurück`,biometric_login:`Mit Face ID anmelden`,cancel:`Abbrechen`,connect_cloudflare:`Cloudflare verbinden`,copy:`Kopieren`,copy_url:`URL kopieren`,disable:`Deaktivieren`,disconnect:`Trennen`,open_in_browser:`Im Browser öffnen`,test_connection_success:`Erfolgreich`,test_connection_error:`Fehler`,enable:`Aktivieren`,change_view:`Ansicht wechseln`,clear:`Löschen`,close:`Schließen`,collapse:`Einklappen`,continue:`Fortfahren`,create_new_user:`Neuen Benutzer erstellen`,download:`Herunterladen`,download_backup_archive:`Backup-Archiv herunterladen`,edit:`Bearbeiten`,edit_zones:`Zonen bearbeiten`,expand:`Ausklappen`,finish:`Fertig`,go_to_message:`Zur Nachricht gehen`,home:`Startseite`,install:`Installieren`,login:`Anmelden`,logout:`Abmelden`,logout_all:`Alle abmelden`,manage:`Verwalten`,mark_as_read:`Als gelesen markieren`,next:`Weiter`,previous:`Zurück`,register_server:`Server registrieren`,reconnect_server:`Neu verbinden`,reload:`Neu laden`,remove:`Entfernen`,reset:`Zurücksetzen`,restart:`Neustarten`,restore_backup_archive:`Backup-Archiv wiederherstellen`,restore_and_restart:`Wiederherstellen und neustarten`,run_now:`Jetzt ausführen`,save:`Speichern`,save_and_restart:`Speichern und neustarten`,test_connection:`Verbindung testen`,update_profile:`Profil aktualisieren`,change_password:`Passwort ändern`,update:`Aktualisieren`,uninstall:`Deinstallieren`,unregister:`Deregistrieren`,unregister_server:`Server deregistrieren`},error:{no_cameras_selected:`Keine Kameras ausgewählt`,no_view_selected:`Keine Ansicht ausgewählt`},hint:{aspect_ratio:`Zwingt das Seitenverhältnis der Kamera auf den gewählten Wert`,aspect_ratio_custom:`Eigenes Verhältnis ({ratio}:1) angewendet`,aspect_ratio_invalid:`Verhältnis als Breite:Höhe angeben, z.B. 16:9 oder 21:9`,aspect_ratio_required:`Verhältnis eingeben, z.B. 16:9`,audio_codec:`Der erkannte Audio Codec für diesen Stream`,auto_refresh:`Aktualisiert den Snapshot automatisch in regelmäßigen Abständen`,cache_time:`Zeit in Sekunden, die der Cache für die Kamerabilder verwendet`,camera_name:`Eindeutiger Name zur Identifizierung dieser Kamera im System`,room:`Diese Kamera einem Raum zur Gruppierung zuweisen`,room_select:`Raum auswählen oder neuen erstellen`,confidence:`Die benötigte Konfidenz für die Erkennung eines Objekts`,connections:`Anzahl der aktiven Verbindungen, die diesen Stream derzeit nutzen`,cloud_access_enabled_info:`Ermöglicht den Cloud-Zugriff für diesen Server`,cloudflare_info:`Ermöglicht den Zugriff auf den Server über Cloudflare`,cloudflare_mode_info:`Stellt einen öffentlichen Hostnamen über das Cloudflare-Netzwerk bereit.`,cloudflare_url_info:`Temporäre öffentliche URL — ändert sich bei jedem Neustart.`,cloudflare_variant_quick:`Ein schneller, temporärer Tunnel ohne Cloudflare-Konto.`,cloudflare_variant_token:`Eigene Domain mit einem Tunnel-Token aus dem Cloudflare-Dashboard.`,cloudflare_variant_managed:`Eigene Domain via OAuth-Login. Tunnel und DNS-Eintrag werden automatisch eingerichtet.`,cloudflare_hostname_info:`Die Domain muss in Ihrem Cloudflare-Konto bereits als Zone eingerichtet sein.`,cloudflare_token_info:`Aus dem Cloudflare-Dashboard.`,cloudflare_tunnel_id_info:`Kennung des aktuell aktiven Tunnels.`,cloudflare_token_already_set:`Token ist gesetzt. Leer lassen zum Behalten, oder neuen Token tippen zum Ersetzen.`,cloudflare_managed_idle:`Auf Verbinden klicken, um diesen Server mit Ihrem Cloudflare-Konto zu authorisieren.`,cloudflare_managed_awaiting_login:`Öffnen Sie die URL unten im Browser und authorisieren Sie die Zone für "{hostname}".`,cloudflare_managed_creating_tunnel:`Tunnel wird erstellt...`,cloudflare_managed_setting_dns:`DNS-Eintrag für {hostname} wird angelegt...`,cloudflare_managed_running:`Tunnel läuft.`,custom_domain_info:`Ermöglicht den Zugriff auf den Server über eine benutzerdefinierte Domain`,custom_domain_mode_info:`Verwenden Sie Ihre eigene Domain, die per DNS oder Reverse-Proxy auf den HTTPS-Port dieses Servers zeigt.`,default_landing_page:`Die Seite, die nach dem Login und beim Öffnen von camera.ui angezeigt wird`,default_settings_page:`Die Standardseite, die beim Öffnen der Einstellungen angezeigt wird`,table_rows:`Wie viele Zeilen eine Tabelle pro Seite zeigt`,disable_camera:`Deaktiviert die Kamera und stoppt alle Aktivitäten. Die Kamera wird weiterhin angezeigt`,snooze_camera:`Pausiert alle Erkennungen. Streams und Snapshots bleiben aktiv.`,suppress_static:`Objekte, die über Events hinweg unbewegt bleiben – z.B. ein geparktes Auto – lösen keine neuen Objekt-Events aus, bis sie sich wieder bewegen.`,ptz_autotrack:`Kamera folgt automatisch erkannten Objekten über Pan/Tilt.`,ptz_autotrack_requires:`Erfordert eine PTZ-fähige Kamera mit zugewiesenem PTZ-Plugin.`,recording_enabled:`Diese Kamera aufzeichnen.`,recording_mode:`Continuous zeichnet durchgehend auf, event nur rund um Erkennungen, adhoc nur bei manuellem Start.`,recording_prebuffer:`Sekunden Video, die vor einem Ereignis aufbewahrt werden.`,recording_sources:`Stream-Qualitäten, die aufgezeichnet werden. Die niedrigste wird für schnelles Spulen genutzt.`,ptz_autotrack_target_labels:`Welchen Objekttypen die Kamera folgen soll.`,ptz_autotrack_min_confidence:`Nur Erkennungen mit mindestens dieser Konfidenz verfolgen.`,ptz_autotrack_trigger_dead_zone:`Das Ziel muss diese Zone um die Bildmitte verlassen, bevor sich die Kamera in Bewegung setzt. Größer = ruhigere Kamera, kleiner = genaueres Zentrieren.`,ptz_autotrack_tracking_speed:`Wie energisch die Kamera nachzieht, um das Ziel zu zentrieren. Höher = schneller, niedriger = sanfter. Nur für Kameras, die sich über kontinuierliche Bewegung steuern lassen, andere wählen ihre Geschwindigkeit selbst.`,ptz_autotrack_lead_ms:`Wie weit die Kamera einem bewegten Ziel vorausblickt. Der Standardwert deckt die Zeit ab, die die Kamera zum Bewegen und Einschwingen braucht. Kleiner, wenn die Kamera überschießt, größer für schnelle Ziele. 0 schaltet die Vorhersage ab.`,ptz_autotrack_pan_rate:`Kalibriert, wie weit ein Bewegungsschritt bei deiner Kamera schwenkt. Kleiner, wenn die Kamera vor dem Ziel stoppt, größer, wenn sie überschießt.`,ptz_autotrack_return_home:`Kamera zur Home-Position zurückfahren, wenn länger kein Ziel erkannt wird.`,ptz_autotrack_home_wait:`Wartezeit ohne Ziel, bevor die Kamera zur Home-Position zurückfährt.`,frameworker_fps:`Die Anzahl der Frames pro Sekunde, welche für den Frame Worker verwendet werden. '0' verwendet die native Framerate`,decoder_hardware:`Hardware, mit der diese Kamera für die Erkennung decodiert wird. Auto wählt die beste verfügbare. Gilt auf der Maschine, die diese Kamera decodiert (Server oder zugewiesener Worker).`,decoder_device:`Welches Gerät das Backend öffnet, zum Beispiel 0 für die erste GPU oder /dev/dri/renderD128. Leer verwendet den Backend-Standard. Fällt auf Auto zurück, wenn nicht nutzbar.`,worker_decoder_hardware:`Hardware, wenn diese Kamera auf ihrem zugewiesenen Worker decodiert wird. Wie Server verwendet die Auswahl oben.`,hq_snapshots:`Event-Thumbnails aus dem höchstauflösenden Stream erzeugen.`,motion_resolution:`Auflösungsvoreinstellung für Bewegungserkennung (low: schnell, medium: ausgewogen, high: genau)`,hot_mode:`Lässt die Verbindung zur Kamera aktiv, um die Verzögerung zu minimieren`,motion_timeout:`Zeit in Sekunden nach dem letzten Bewegungs-Trigger, bis das Bewegungsereignis endet (min. 10s)`,audio_timeout:`Zeit in Sekunden nach dem letzten Audio-Trigger, bis das Audioereignis endet (min. 10s)`,audio_min_decibels:`Audio-Frames unterhalb dieses Lautstärkepegels (in dBFS) werden übersprungen. -100 = Stille, 0 = Maximum`,audio_confidence:`Erkannte Geräusche unterhalb dieser Konfidenz werden für Ereignisse und Automationen ignoriert`,face_confidence:`Gesichter unterhalb dieser Konfidenz werden für Ereignisse und Automationen ignoriert`,plate_confidence:`Kennzeichen-Lesungen unterhalb dieser Texterkennungs-Konfidenz werden ignoriert`,plate_min_length:`Kürzere Kennzeichen-Lesungen werden als Fragmente verworfen`,sensor_timeout:`Zeit in Sekunden nach dem letzten Sensor-Trigger, bis das Ereignis endet (min. 10s)`,sensor_triggers:`Wählen Sie Sensoren aus, die ebenfalls die Erkennungskaskade auslösen sollen (z.B. ein Kontaktsensor an einer Tür löst die Objekterkennung aus)`,sensor_triggers_placeholder:`Sensor-Trigger auswählen...`,onvif_url:`ONVIF-kompatible URL zur Integration mit anderen Systemen`,navbar_stay_collapsed:`Lasse die Navigationsleiste eingeklappt`,record_logs:`Zeichnet App-Protokolle auf, damit Sie sie auf der Konsolen-Seite ansehen und zur Fehlersuche teilen können`,debug_verbose:`Aktiviert ausführliche Debug-Level-Protokolle`,pip_source:`Wählen Sie eine Kameraquelle für die Bild-in-Bild-Anzeige`,port_forward_info:`Ermöglicht das Port-Forwarding für diesen Server`,refresh_interval:`Intervall in Sekunden für das automatische Aktualisieren des Snapshots`,rtsp_url:`RTSP-URL für direkten Zugriff auf diesen Stream von externen Anwendungen`,preload:`Vorladen der Kameraquelle, um die Verzögerung zu minimieren`,muted:`Entfernt die Audiospur dieser Quelle`,show_bottombar_on_mobile:`Zeigt die untere Leiste auf Mobilgeräten`,show_camera_events:`Zeigt die Kameraereignisse in der Kameraansicht`,source_name:`Eindeutiger Bezeichner für diese Kameraquelle`,source_protocol:`Der Protokolltyp der Streamquelle`,source_role:`Bestimmt die Verwendung dieser Quelle (Hoch/Mittel/Niedrig-Auflösung für Streaming, Snapshot für Bilder)`,source_url:`Fügen Sie die komplette Stream-URL inklusive Protokoll ein, z. B. rtsp://user:pass{'@'}192.168.1.50:554/stream`,source_detected_protocol:`Erkanntes Protokoll: {protocol}`,source_urls:`Fügen Sie mehrere URLs hinzu, damit go2rtc Codecs kombinieren kann (z. B. Video aus der einen, Audio aus der anderen) für optimale Wiedergabe`,streaming_mode:`Stream Transport Protokoll für die Benutzeroberfläche. In 'auto' wird der beste Modus automatisch ausgewählt`,streaming_source:`Kameraquelle für den Stream — wählen Sie hohe, mittlere oder niedrige Auflösung`,system_preference:`Systemeinstellung für die Benutzeroberfläche`,type_and_enter:`Text eingeben und mit Enter hinzufügen`,use_for_snapshot:`Verwendet diese Quelle für Snapshots (wenn sonst keine geeignete Quelle existiert)`,video_codec:`Der erkannte Video Codec für diesen Stream`},label:{aspect_ratio:`Seitenverhältnis`,aspect_ratio_custom:`Eigenes Verhältnis`,audio_codec:`Audio Codec`,auto_refresh:`Automatische Aktualisierung`,cache_time:`Cache Zeit`,camera:`Kamera`,cameras:`Kameras`,changelog:`Änderungsprotokoll`,labels:`Labels`,cloudflare:`Cloudflare`,cloudflare_url:`Cloudflare URL`,cloudflare_variant:`Cloudflare Variante`,cloudflare_variant_quick:`Quick Tunnel`,cloudflare_variant_token:`Named Tunnel (Token)`,cloudflare_variant_managed:`Named Tunnel (OAuth)`,hostname:`Hostname`,tunnel_id:`Tunnel ID`,tunnel_token:`Tunnel Token`,color:`Farbe`,confidence:`Objekt-Konfidenz`,connections:`Verbindungen`,stream_status:`Stream-Status`,custom_domain:`Benutzerdefinierte Domain`,default_landing_page:`Startseite`,default_settings_page:`Standard Einstellungsseite`,table_rows:`Tabellenzeilen pro Seite`,disabled:`Deaktiviert`,snooze:`Erkennung pausieren`,suppress_static:`Statische Objekte ignorieren`,ptz_autotrack:`PTZ Autotrack`,ptz_autotrack_enabled:`Autotrack aktivieren`,recording_enabled:`Aufnahme aktivieren`,recording_mode:`Aufnahmemodus`,recording_prebuffer:`Vorpuffer`,recording_sources:`Aufgezeichnete Streams`,ptz_autotrack_target_labels:`Ziel-Labels`,ptz_autotrack_min_confidence:`Minimale Konfidenz`,ptz_autotrack_trigger_dead_zone:`Totzone`,ptz_autotrack_tracking_speed:`Verfolgungsgeschwindigkeit`,ptz_autotrack_lead_ms:`Bewegungsvorhersage`,ptz_autotrack_pan_rate:`Schwenkraten-Kalibrierung`,ptz_autotrack_return_home:`Zur Home-Position zurückkehren`,ptz_autotrack_home_wait:`Wartezeit vor Rückkehr`,disconnected:`Getrennt`,domain:`Domain`,enabled:`Aktiviert`,external_port:`Externer Port`,external_url:`Externe URL`,firmware_version:`Firmware Version`,fps:`FPS`,decoder_hardware:`Decoder-Hardware`,decoder_device:`Decoder-Gerät`,worker_decoder_hardware:`Decoder-Hardware (Worker)`,worker_decoder_device:`Decoder-Gerät (Worker)`,decoder_same_as_server:`Wie Server`,hardware_version:`Hardware Version`,hot_mode:`Hot Modus`,hq_snapshots:`HQ-Event-Thumbnails`,language:`Sprache`,language_system:`Systemstandard`,layout_name:`Layoutname`,manufacturer:`Hersteller`,model:`Modell`,motion_timeout:`Bewegungs Timeout`,audio_timeout:`Audio-Timeout`,audio_min_decibels:`Min. Lautstärke (dBFS)`,audio_confidence:`Audio-Konfidenz`,face_confidence:`Gesichts-Konfidenz`,plate_confidence:`Kennzeichen-Konfidenz`,plate_min_length:`Min. Kennzeichenlänge`,sensor_timeout:`Sensor-Timeout`,sensor_triggers:`Sensor-Trigger`,name:`Name`,room:`Raum`,room_default:`Standard`,navbar_stay_collapsed:`Navbar eingeklappt lassen`,record_logs:`Protokolle aufzeichnen`,debug_verbose:`Ausführliches Logging`,new_password:`Neues Passwort`,new_password_confirm:`Neues Passwort bestätigen`,none:`Keine`,onvif_url:`ONVIF URL`,password:`Passwort`,pip_source:`Bild-in-Bild Quelle`,port_forward:`Port-Weiterleitung`,preload:`Vorladen`,muted:`Audio stummschalten`,refresh_interval:`Aktualisierungsintervall`,remember_me:`Erinnere mich`,motion_resolution:`Bewegungsauflösung`,role:`Rolle`,rtsp_url:`RTSP-URL`,select_all:`Alle auswählen`,select_cameras:`Kameras auswählen`,serial_number:`Seriennummer`,server_addresses:`Server-Adressen`,server_version:`Server-Version`,settings:`Einstellungen`,show_bottombar_on_mobile:`Bottombar auf Mobilgeräten anzeigen`,show_camera_events:`Kameraereignisse anzeigen`,source:`Quelle`,source_name:`Quellenname`,source_role:`Quellenrolle`,sources:`Quellen`,streaming_mode:`Streaming Modus`,streaming_source:`Streaming Quelle`,support_url:`Support URL`,system_preference:`Systemeinstellung`,theme:`Design`,token:`Token`,type:`Typ`,unknown:`Unbekannt`,url:`URL`,use_for_snapshot:`Für Snapshot verwenden`,username:`Benutzername`,version:`Version`,video_codec:`Video Codec`,views:`Ansichten`,zone_name:`Zonenname`},placeholder:{search:`Suchen...`},tooltip:{activity_mode_activity:`Aktivität`,activity_mode_always_on:`Immer An`,activity_mode_standby:`Standby`,clear:`Säubern`,console:`Konsole`,contain:`Enthalten`,cancel_selection:`Auswahl abbrechen`,copied:`Kopiert`,select_cameras:`Kameras auswählen`,select_all:`Alle Kameras auswählen`,deselect_all:`Alle Kameras abwählen`,snooze_selected:`Erkennung für ausgewählte Kameras pausieren`,unsnooze_selected:`Erkennung für ausgewählte Kameras fortsetzen`,recording_on_selected:`Aufnahme für ausgewählte Kameras aktivieren`,recording_off_selected:`Aufnahme für ausgewählte Kameras deaktivieren`,copy_all:`Alles kopieren`,delete:`Löschen`,delete_selected:`Ausgewählte Kameras entfernen`,disable_selected:`Ausgewählte Kameras deaktivieren`,enable_selected:`Ausgewählte Kameras aktivieren`,disable_drag:`Ziehen deaktivieren`,disabled:`Deaktiviert`,download:`Herunterladen`,edit:`Bearbeiten`,enable_drag:`Ziehen aktivieren`,view_default:`Alle Kameras anzeigen`,view_grouped:`Nach Raum gruppieren`,exclude:`Ausschließen`,finish:`Fertig`,fullscreen_off:`Vollbildmodus ausschalten`,fullscreen_on:`Vollbildmodus einschalten`,hide_timeline:`Zeitleiste ausblenden`,include:`Einschließen`,intercom:`Gegensprechanlage`,intersect:`Schneiden`,logout:`Abmelden`,mode:`Modus`,mute:`Stumm`,new:`Neu`,nvr_settings:`NVR-Einstellungen`,privacy_mask:`Ignorierte Zone`,public_mask:`Erkennungszone`,resolution:`Auflösung`,restart:`Neustarten`,show_timeline:`Zeitleiste anzeigen`,show_pip:`PiP anzeigen`,hide_pip:`PiP ausblenden`,source_role_auto:`Auto`,source_role_low:`Niedrige Auflösung`,source_role_mid:`Mittlere Auflösung`,source_role_high:`Hohe Auflösung`,source_role_snapshot:`Snapshot`,source_role_unknown:`Unbekannt`,streaming_mode_auto:`Auto`,streaming_mode_mse:`MSE`,streaming_mode_unknown:`Unbekannt`,streaming_mode_webcodecs:`WebCodecs`,streaming_mode_webrtc:`WebRTC`,undo:`Rückgängig`,unmute:`Stummschalten aufheben`,update_available:`Aktualisierung verfügbar`,zoom_in:`Vergrößern`,zoom_out:`Verkleinern`}},notification_menu:{clear_notifications:`Benachrichtigungen löschen`,mark_all_read:`Alle als gelesen markieren`,mark_read:`Als gelesen markieren`,delete:`Löschen`,debug:`Debug`,error:`Fehler`,info:`Info`,disabled:`Benachrichtigungen sind deaktiviert`,disabled_hint:`Aktivieren Sie Benachrichtigungen, um hier Hinweise zu erhalten.`,open_settings:`Einstellungen öffnen`,no_notifications:`Keine Benachrichtigungen`,notifications:`Benachrichtigungen`,short_days:`Tg.`,short_hours:`Std.`,short_minutes:`Min.`,short_months:`M.`,short_weeks:`Wo.`,short_years:`J.`,verbose:`Ausführlich`,warn:`Warnung`},options_sidebar:{segment_tab_default:`Standard`,segment_tab_overview:`Übersicht`,segment_tab_plugins:`Plugins`,segment_tab_settings:`Einstellungen`,segment_tab_sources:`Quellen`},player:{activity_mode_activity:`Aktivität`,activity_mode_always_on:`Immer An`,activity_mode_standby:`Standby`,add_shortcut_info:`Klicken Sie auf einen beliebigen Ort im Video, um einen Shortcut hinzuzufügen`,ai_descriptions:`KI-Beschreibungen`,capture_snapshot:`Snapshot aufnehmen`,cast:`Auf TV abspielen`,cast_failed:`Übertragen fehlgeschlagen`,cast_sent:`Läuft auf {name}`,codec_degraded:`H.265 wird hier nicht unterstützt, gezeigt wird: {quality}`,codec_unsupported:`Dieser Stream nutzt einen Codec, den dieses Gerät nicht abspielen kann`,codec_unsupported_recording:`Diese Aufnahme nutzt einen Codec, den dieses Gerät nicht abspielen kann`,copied:`Kopiert`,detections:`Erkennungen`,edit_shortcuts:`Shortcuts bearbeiten`,expand:`Vergrößern`,fast_forward:`30s vor`,hide_pip:`Bild-in-Bild ausblenden`,finish_editing:`Bearbeitung beenden`,hide_timeline:`Zeitleiste ausblenden`,live:`Live`,license_required:`Lizenz erforderlich`,log:`Protokoll`,no_recording:`Keine Aufnahmen`,playback_failed:`Wiedergabe fehlgeschlagen`,open_camera:`Kamera öffnen`,options:`Optionen`,ptz:`PTZ`,ptz_go_to_home:`Zurück zur Startposition`,rewind:`30s zurück`,reconnecting:`Wiederverbinden...`,refresh_snapshot:`Snapshot aktualisieren`,settings:`Einstellungen`,share_camera:`Kamera teilen`,shortcuts:`Shortcuts`,show_pip:`Bild-in-Bild anzeigen`,show_timeline:`Zeitleiste anzeigen`,speed:`Geschwindigkeit`,toggle_pip:`PiP ein-/ausblenden`,shrink:`Verkleinern`,source_role_auto:`Auto`,source_role_low:`Niedrige Auflösung`,source_role_mid:`Mittlere Auflösung`,source_role_high:`Hohe Auflösung`,source_role_snapshot:`Snapshot`,source_role_unknown:`Unbekannt`,stream_info:`Stream-Informationen`,stream_paused:`Stream pausiert, um Ressourcen zu schonen. Klicken Sie auf den Stream, um fortzufahren.`,streaming_mode_auto:`Auto`,streaming_mode_mse:`MSE`,streaming_mode_unknown:`Unbekannt`,streaming_mode_webcodecs:`WebCodecs`,streaming_mode_webrtc:`WebRTC`,timelapse:`Zeitraffer`,timelapse_min_duration:`Zeitraffer benötigt mindestens 1 Stunde`,timelapse_off:`Zeitraffer: Aus`,export:`Export`,intercom:`Gegensprechanlage`,export_selection:`Auswahl exportieren`,zones:`Zonen`,heatmap:`Heatmap`,more:`Mehr`,zoom_in:`Zoom rein`,zoom_out:`Zoom raus`},lock:{status_locked:`Verriegelt`,status_unlocked:`Entriegelt`,status_unknown:`Unbekannt`,status_locking:`Verriegeln...`,status_unlocking:`Entriegeln...`},security_system:{alarm_triggered:`Alarm ausgelöst!`,reset:`Zurücksetzen`,off:`Aus`,home:`Zuhause`,away:`Abwesend`,night:`Nacht`,status_home_armed:`Zuhause (Scharf)`,status_away_armed:`Abwesend (Scharf)`,status_night_armed:`Nacht (Scharf)`,status_disarmed:`Entschärft`,status_alarm:`ALARM!`,status_unknown:`Unbekannt`,status_arming:`Wird scharf...`,status_disarming:`Wird entschärft...`},oauth:{dialog_title:`Cloud-Konto verbinden`,intro:`Dieses Plugin verbindet sich mit {idp}, um Folgendes zu autorisieren:`,enter_code_at:`Öffnen Sie die Seite unten und geben Sie den Code ein:`,waiting:`Warte auf Autorisierung…`,connect:`Verbinden`,disconnect:`Trennen`,connected_as:`Verbunden als {email}`,tooltip_connect:`Cloud-Konto verbinden`,tooltip_connected:`Verbunden als {email}`,tooltip_authorizing:`Autorisierung läuft — zum Anzeigen klicken`,tooltip_error:`Letzter Autorisierungsversuch fehlgeschlagen`,error_access_denied:`Autorisierung wurde abgelehnt`,error_expired:`Der Code ist abgelaufen — bitte erneut versuchen`,error_generic:`Autorisierung fehlgeschlagen`},plugin_card:{author:`Autor`,compat_engine:`Erfordert {engine} {required} (aktuell {current})`,compat_platform:`Auf diesem System nicht unterstützt — erfordert {requirement}`,compat_protocol_plugin:`Für eine ältere camera.ui Plugin-API gebaut, aktualisiere das Plugin`,compat_protocol_server:`Für eine neuere camera.ui Plugin-API gebaut, aktualisiere camera.ui`,installed:`Installiert`,no_description:`Keine Beschreibung verfügbar`,restart:`Neustart`,restart_required:`Neustart erforderlich, um die installierte Version zu übernehmen`,update_now:`Auf v{version} aktualisieren`,update_queued:`Wartet in der Warteschlange`,update_running:`Update läuft, Fortschritt anzeigen`,update_progress_title:`{name} aktualisieren`,select_version:`Version auswählen`,settings:`Einstellungen`,start:`Start`,status_disabled:`Deaktiviert`,status_error:`Fehler`,status_incompatible:`Inkompatibel mit diesem System — weise es einem kompatiblen Worker zu`,status_ready:`Bereit`,status_server_update_required:`Nicht gestartet, benötigt ein neueres camera.ui`,status_started:`Gestartet`,status_starting:`Startet`,status_stopped:`Gestoppt`,status_stopping:`Stoppt`,status_unknown:`Unbekannt`,status_update_required:`Nicht gestartet, benötigt ein Plugin-Update`,stop:`Stop`,uninstall:`Deinstallieren`,update:`Aktualisieren`,update_available:`Aktualisierung verfügbar`,updated:`Aktualisiert`,version:`Version`},plugin_search:{bugs:`Fehler melden`,compatible_system:`Läuft auf diesem System`,incompatible_system:`Nicht kompatibel mit diesem System`,incompatible_worker_hint:`Sie können es trotzdem installieren und auf einem kompatiblen Worker ausführen — nach der Installation unter Workers zuweisen.`,incompatible:`Inkompatibel`,requires_newer_server:`Benötigt neueres camera.ui`,requires_newer_server_hint:`Dieses Plugin benötigt eine neuere camera.ui Version. Aktualisiere zuerst camera.ui und installiere es dann.`,category_ai_model:`KI-Modell`,category_automation:`Automatisierung`,category_camera_source:`Kameraquelle`,category_detection:`Erkennung`,category_notification:`Benachrichtigung`,category_other:`Sonstiges`,category_recording:`Aufnahme`,category_utility:`Werkzeug`,downloads_per_week:`{count} / Woche`,featured:`Empfohlen`,filter_all_categories:`Alle Kategorien`,filter_all_trust:`Alle Quellen`,filter_category:`Kategorie`,filter_trust:`Vertrauen`,homepage:`Webseite`,in_progress:`In Bearbeitung`,plugins:`Plugins`,refresh:`Aktualisieren`,repository:`Repository`,screenshots:`Screenshots`,sort_by:`Sortieren nach`,sort_downloads:`Meiste Downloads`,sort_name:`Name`,sort_updated:`Zuletzt aktualisiert`,trust_community:`Community`,trust_community_description:`Community-Plugin — nicht vom camera.ui-Team geprüft. Installation auf eigenes Ermessen.`,trust_official:`Offiziell`,trust_official_description:`Offizielles Plugin, veröffentlicht unter dem {'@'}camera.ui-Scope.`,trust_verified:`Verifiziert`,trust_verified_description:`Community-Plugin, das vom camera.ui-Team geprüft und empfohlen wurde.`,updated_ago:`aktualisiert {time}`},plugin_types:{hub:`Hub`,cameraController:`Kamera-Controller`,motionDetection:`Bewegungserkennung`,objectDetection:`Objekterkennung`,audioDetection:`Geräuscherkennung`,ptz:`PTZ`},process_table:{empty:`Keine Daten verfügbar`,status_error:`Fehler`,status_ready:`Bereit`,status_started:`Gestartet`,status_starting:`Startet`,status_stopped:`Gestoppt`,status_stopping:`Stoppt`,status_unknown:`Unbekannt`,system:`System`,title_cpu:`CPU`,title_cpu_load:`CPU-Auslastung`,title_memory:`Speicher`,title_memory_load:`Speicherauslastung`,title_name:`Name`,title_pid:`PID`},timeline:{fine_scrubbing:`Feinsteuerung`,filter_events:`Ereignisse`,filter_cameras:`Kameras`,filter_scope_camera:`Nur angezeigte Kamera`,filter_scope_all:`Alle Kameras der Ansicht`,type_motion:`Bewegung`,type_person:`Person`,type_face:`Gesicht`,type_vehicle:`Fahrzeug`,type_animal:`Tier`,type_package:`Paket`,type_audio:`Audio`,type_license_plate:`Kennzeichen`,type_contact:`Kontakt`,type_doorbell:`Türklingel`,type_switch:`Schalter`,type_light:`Licht`,type_siren:`Sirene`,type_security_system:`Alarmanlage`,"type_line-crossing":`Linienübertritt`,type_smoke:`Rauch`,type_gas:`Gas`,type_carbonMonoxide:`Kohlenmonoxid`,type_heat:`Hitze`,type_leak:`Wasser`,type_cold:`Kälte`,type_vibration:`Vibration`,type_tamper:`Manipulation`,type_problem:`Problem`,live:`Live`,today:`Heute`,yesterday:`Gestern`},toast:{backup_downloaded:`Backup-Datei erfolgreich heruntergeladen`,backup_restored:`Backup-Datei erfolgreich wiederhergestellt`,backup_scheduler_saved:`Backup-Zeitplan aktualisiert`,backup_created:`Backup erfolgreich erstellt`,backup_deleted:`Backup gelöscht`,camera_added:`Kamera erfolgreich hinzugefügt`,camera_add_failed:`Kamera konnte nicht hinzugefügt werden`,camera_removed:`Kamera erfolgreich entfernt`,camera_updated:`Kamera erfolgreich aktualisiert`,cameras_removed:`Kameras erfolgreich entfernt`,config_deleted:`Konfiguration erfolgreich gelöscht`,config_go2rtc_deleted:`Go2RTC-Konfiguration erfolgreich gelöscht`,config_go2rtc_updated:`Go2RTC-Konfiguration erfolgreich aktualisiert`,config_updated:`Konfiguration erfolgreich aktualisiert`,copied:`Kopiert`,copy_failed:`Kopieren fehlgeschlagen`,error_see_console:`Fehler, siehe Konsole`,frame_worker_restarted:`Frame Worker erfolgreich neugestartet`,go2rtc_restarted:`Go2RTC erfolgreich neugestartet`,log_cleared:`Protokoll erfolgreich gelöscht`,no_version_selected:`Keine Version ausgewählt`,plugin_config_updated:`Plugin-Konfiguration erfolgreich aktualisiert`,plugin_disabled:`Plugin erfolgreich deaktiviert`,plugin_enabled:`Plugin erfolgreich aktiviert`,plugin_installed:`Plugin erfolgreich installiert`,plugin_removed:`Plugin erfolgreich entfernt`,plugin_request_sent:`Plugin-Anfrage erfolgreich gesendet`,plugin_restarted:`Plugin erfolgreich neugestartet`,plugin_settings_updated:`Plugin-Einstellungen erfolgreich aktualisiert`,plugin_started:`Plugin erfolgreich gestartet`,plugin_stopped:`Plugin erfolgreich gestoppt`,plugins_removed:`Plugins erfolgreich entfernt`,password_updated:`Passwort erfolgreich aktualisiert`,profile_updated:`Profil erfolgreich aktualisiert`,probe_failed:`Quelle konnte nicht geprüft werden — bitte erneut versuchen`,remote_access_not_available:`Remote-Zugriff ist nicht verfügbar`,pair_expired:`Pairing-Code abgelaufen — bitte erneut versuchen`,pair_denied:`Pairing wurde abgelehnt`,pair_init_failed:`Pairing konnte nicht gestartet werden`,remote_registered:`Server erfolgreich registriert`,remote_unregistered:`Server erfolgreich deregistriert`,remote_updated:`Remote-Zugriff erfolgreich aktualisiert`,mqtt_updated:`MQTT-Einstellungen erfolgreich aktualisiert`,mqtt_test_success:`Verbindung zum MQTT-Broker erfolgreich`,mqtt_test_failed:`Verbindung fehlgeschlagen: {message}`,remote_test_success:`Verbindungstest erfolgreich`,remote_test_failed:`Verbindungstest fehlgeschlagen: {message}`,server_name_updated:`Servername erfolgreich aktualisiert`,server_resetted:`Server erfolgreich zurückgesetzt`,server_restarted:`Server erfolgreich neugestartet`,server_updated:`Server erfolgreich aktualisiert`,something_wrong_happened:`Etwas ist schief gelaufen`,title_error:`Fehler`,title_info:`Info`,title_success:`Erfolgreich`,title_warn:`Warnung`,update_available_title:`Update verfügbar`,update_installed_detail:`Neue Version von camera.ui ist bereit.`,update_now:`Jetzt aktualisieren`,update_applying:`Update wird angewendet…`,user_added:`Benutzer erfolgreich hinzugefügt`,user_logged_out:`Benutzer erfolgreich abgemeldet`,user_removed:`Benutzer erfolgreich entfernt`,user_updated:`Benutzer erfolgreich aktualisiert`,users_removed:`Benutzer erfolgreich entfernt`,view_added:`Ansicht erfolgreich hinzugefügt`,validation_failed:`Validierung fehlgeschlagen. Überprüfen Sie die Konsole für weitere Informationen`,view_removed:`Ansicht erfolgreich entfernt`,view_updated:`Ansicht erfolgreich aktualisiert`,views_removed:`Ansichten erfolgreich entfernt`,zone_updated:`Zone erfolgreich aktualisiert`,zone_removed:`Zone erfolgreich entfernt`,line_updated:`Linie erfolgreich aktualisiert`},upload_files:{drop_or_select_file:`Datei ablegen oder auswählen`,only_one_file_allowed:`Es ist nur eine Datei erlaubt`},instance_switcher:{manage:`Instanzen verwalten`,not_logged_in:`Nicht eingeloggt`,session_expired:`Sitzung abgelaufen`,switching_to:`Wechsle zu`,go_back:`Zurück`},user_menu:{account:`Konto`,admin_panel:`Adminpanel`,config:`Konfiguration`,console:`Konsole`,logs:`Protokolle`,logout:`Abmelden`,plugins:`Plugins`,reload:`Neu laden`},user_table:{title_address:`Adresse`,title_device:`Gerät`,title_kind:`Typ`,title_username:`Benutzername`,you:`Sie`},view_box:{available_streams:`Verfügbare Streams`,no_cameras:`Keine Kameras verfügbar`},zone_editor:{base_labels:`Basis`,edit_zones:`Zonen bearbeiten`,zone:`Zone`,tab_zones:`Zonen`,tab_lines:`Linien`}},connection:{offline:`Offline`,reconnected:`Verbunden`,reconnecting:`Verbinde...`,degraded:`Synchronisiere...`,restarting:`Starte neu...`,retry:`Erneut versuchen`,connecting_remote:`Verbinde mit Ihrem Server...`,unreachable:`Server nicht erreichbar`,pick_server:`Anderen Server wählen`},restore:{title:`Backup wiederherstellen`,phase_uploading:`Backup wird hochgeladen...`,phase_restoring:`Wird wiederhergestellt...`,phase_restarting:`Server wird neu gestartet...`,dont_close:`Bitte schließen Sie dieses Fenster nicht.`},instances:{local:`Lokal`,unreachable:`{name} ist von diesem Gerät aus nicht erreichbar`,switch_timeout:`Wechsel zu {name} hat zu lange gedauert`,two_factor_title:`Zwei-Faktor-Authentifizierung`,two_factor_hint:`Das Konto auf "{name}" ist mit Zwei-Faktor-Authentifizierung geschützt. Geben Sie den 6-stelligen Code aus Ihrer Authenticator-App ein.`,two_factor_completed:`Mit {name} verbunden`,two_factor_failed:`Zwei-Faktor-Verifizierung fehlgeschlagen. Bitte versuchen Sie es erneut.`,insecure_handoff_title:`Zu unverschlüsselter Instanz wechseln?`,insecure_handoff_message:`{name} läuft über eine unverschlüsselte HTTP-Verbindung. Beim Wechsel werden Ihre Sitzungs-Tokens kurzzeitig über die URL übertragen. Sie werden direkt danach aus der URL entfernt, sind aber für kurze Zeit im Browser-Verlauf sichtbar. Fortfahren?`,insecure_handoff_confirm:`Fortfahren`},general:{loading:`Laden...`,role_admin:`Admin`,role_user:`Benutzer`},navigation:{sensors:`Sensoren`,about:`Über`,account:`Konto`,adminpanel:`Adminpanel`,appearance:`Erscheinungsbild`,backup:`Backup`,cameras:`Kameras`,camview:`Kameransicht`,config:`Konfiguration`,console:`Konsole`,logs:`Protokolle`,extras:`Extras`,home:`Startseite`,nvr:`NVR`,plugins:`Plugins`,faces:`Gesichter`,menu:`Menü`,mqtt:`MQTT`,notifications:`Benachrichtigungen`,permissions:`Berechtigungen`,recordings:`Aufnahmen`,remote:`Remote Zugriff`,settings:`Einstellungen`,system:`System`,automations:`Automatisierungen`,terminal:`Terminal`,user:`Benutzer`,instances:`Instanzen`,workers:`Workers`},navigation_description:{account_description:`Verwalten Sie Kontoeinstellungen und Erfahrungen.`,appearance_description:`Verwalten Sie das Erscheinungsbild und die Benutzeroberfläche der App.`,backup_description:`Verwalten, planen Sie Backups und stellen Sie Daten wieder her.`,notifications_description:`Benachrichtigungsregeln und Geräte verwalten.`,permissions_description:`Geräteberechtigungen für Mikrofon, Standort und Benachrichtigungen.`,mqtt_description:`Verbinden Sie camera.ui mit einem MQTT-Broker.`,nvr_description:`Verwalten Sie das Netzwerk-Videorekorder-System.`,recordings_description:`Verwalten Sie Aufnahmen und Speicheroptionen.`,remote_access_description:`Verwalten Sie den Remote-Zugriff und die Verbindungseinstellungen.`,system_description:`Verwalten Sie das System, überwachen Sie den Status und die Aufgaben.`,user_description:`Verwalten Sie Benutzer, Rollen und Berechtigungen.`},shares:{actions:`Aktionen`,code:`Zugangscode`,done:`Fertig`,create:`Erstellen`,create_share:`Kamera teilen`,code_save_hint:`Speichern Sie diesen Code — er kann später nicht mehr abgerufen werden.`,copy_link:`Link kopieren`,created:`Erstellt`,days:`Tage`,expires:`Läuft ab`,hour:`Stunde`,hours:`Stunden`,label:`Bezeichnung`,label_placeholder:`Optionale Bezeichnung`,link:`Share-Link`,max_viewers:`Max. Zuschauer`,no_shares:`Keine aktiven Share-Links`,revoke:`Widerrufen`,share_created:`Share-Link erstellt`,share_revoked:`Share-Link widerrufen`,share:`Teilen`,share_camera:`Kamera teilen`,share_title:`Kamera-Stream`,source:`Quelle`,ttl:`Gültig für`,unlimited:`Unbegrenzt`,viewers:`Zuschauer`},views:{404:{error_message:`Wir haben überall gesucht, aber diese Seite scheint Verstecken zu spielen... und sie gewinnt! Lassen Sie uns Sie zurück an einen Ort bringen, der existiert.`},adminpanel:{core:`Core`,frameworker:`Frameworker`,general:`Allgemein`,logged_in_users:`Derzeit angemeldete Benutzer`,no_core:`Keine Core-Prozesse verfügbar`,no_frameworkers:`Keine Frameworker verfügbar`,no_plugins:`Keine Plugins verfügbar`,no_system:`Keine Systemdaten verfügbar`,no_users:`Keine angemeldeten Benutzer`,plugins:`Plugins`,title:`Adminpanel`},camera:{cameras:`Kameras`,camera_disabled:`Diese Kamera ist deaktiviert`,camera_disabled_hint:`Aktivieren Sie die Kamera, um den Livestream und die Erkennung zu starten`,camera_snoozed:`Erkennung pausiert`,detections:`Erkennungen`,events:`Ereignisse`,recordings:`Aufnahmen`,shares:`Freigaben`,timeline:`Zeitleiste`,title:`Kamera`},cameras:{add_camera:`Kamera hinzufügen`,events:`Ereignisse`,get_started:`Jetzt starten`,new_camera:`Neue Kamera`,no_cameras:`Keine Kameras verfügbar`,no_cameras_hint:`Fügen Sie Ihre erste Kamera hinzu, um zu überwachen und aufzuzeichnen.`,title:`Kameras`},devices:{address:`Adresse`,confirm:`Kamera hinzufügen`,confirm_title:`Kamera bestätigen`,connect:`Verbinden`,device_hidden:`Gerät ausgeblendet`,device_unhidden:`Gerät eingeblendet`,hide:`Ausblenden`,hide_hidden:`Ausgeblendete Geräte verstecken`,managed_source_hint:`Diese Quelle wird von camera.ui verwaltet und kann nicht bearbeitet werden.`,manufacturer:`Hersteller`,model:`Modell`,name:`Name`,native_id:`Native ID`,no_settings_required:`Keine zusätzlichen Einstellungen für dieses Gerät erforderlich.`,no_devices:`Keine Geräte gefunden`,no_devices_hint:`Stellen Sie sicher, dass Ihre Kameras eingeschaltet und mit dem gleichen Netzwerk verbunden sind.`,no_schema:`Kein Verbindungsschema für dieses Gerät verfügbar`,plugin:`Plugin`,provider:`Anbieter`,rescan:`Neu scannen`,rescan_error:`Fehler beim Neuscannen. Siehe Konsole für weitere Informationen.`,rescan_success:`Neuscannen erfolgreich abgeschlossen`,scanning:`Scanne...`,scanning_hint:`Suche nach Kameras im Netzwerk. Das kann einen Moment dauern.`,show_hidden:`Ausgeblendete Geräte anzeigen`,status_added:`Hinzugefügt`,status_adopted_cameras:`Verbundene Kameras`,status_adopting:`Verbinde...`,status_discovered:`Entdeckt`,no_discovered:`Noch keine Geräte entdeckt`,status_error:`Fehler`,status_unknown:`Unbekannt`,title:`Geräte`,unhide:`Einblenden`,unknown:`Unbekannt`},camview:{all_cameras:`Alle Kameras`,cameras:`Kameras`,new_dnd:`Neue DND`,new_view:`Neue Ansicht`,rearrange:`Anordnen`,rearrange_done:`Fertig`,rearrange_auto:`Automatisch anordnen`,rearrange_fit_aspect:`Seitenverhältnisse anpassen`,no_dnds_configured:`Keine DNDs konfiguriert`,no_views_configured:`Keine Ansichten konfiguriert`,no_cameras:`Keine Kameras verfügbar`,title:`Camview`},config:{title:`Konfiguration`},console:{title:`Konsole`,copy:`Kopieren`,export:`Exportieren / Teilen`,source_logs:`Logs`,source_connection:`Verbindung`,clear:`Leeren`,refresh:`Aktualisieren`,empty:`Noch keine Protokoll-Einträge.`,recording_off:`Aufzeichnung ist aus — aktivieren Sie sie in Einstellungen → Erscheinungsbild, um Protokolle zu erfassen.`,copied:`Protokolle kopiert`,copy_failed:`Kopieren fehlgeschlagen`,cleared:`Protokolle geleert`,levels:`Level`,level:{debug:`Debug`,log:`Log`,info:`Info`,warn:`Warnung`,error:`Fehler`}},logs:{title:`Protokolle`,groups:{system:`System`,plugins:`Plugins`,cameras:`Kameras`}},home:{title:`Startseite`},terminal:{title:`Terminal`,connected:`Verbunden`,connecting:`Verbinde...`,disconnected:`Getrennt`,new_tab:`Neuer Tab`,reconnect:`Neu verbinden`},sensors:{title:`Sensoren`,search:`Sensoren durchsuchen`,no_sensors:`Noch keine Sensoren. Lege einen virtuellen Sensor an oder installiere ein Sensor-Plugin.`,no_matches:`Keine Sensoren passen zur Suche oder zum aktiven Filter.`,name:`Name`,type:`Typ`,plugin:`Plugin`,connected:`Verbunden`,disconnected:`Nicht verbunden`,hide:`Sensor ausblenden`,unhide:`Sensor einblenden`,show_hidden:`Ausgeblendete anzeigen`,hide_hidden:`Ausgeblendete verbergen`,select:`Sensoren auswählen`,view_cards:`Kartenansicht`,view_table:`Tabellenansicht`,hide_selected:`Auswahl ausblenden`,unhide_selected:`Auswahl einblenden`,delete_selected:`Auswahl löschen`,delete_selected_confirm:`{count} Sensoren löschen? Verbundene Plugin-Sensoren werden übersprungen.`,hide_selected_done:`{count} Sensoren ausgeblendet`,unhide_selected_done:`{count} Sensoren eingeblendet`,delete_selected_done:`{count} Sensoren gelöscht`,bulk_failed:`{count} Sensoren fehlgeschlagen`,settings:`Sensor-Einstellungen`,hide_camera_bound:`Kamera-Sensoren ausblenden`,hide_camera_bound_hint:`Sensoren, die ein Plugin an einer Kamera registriert hat, nicht in der Liste zeigen.`,unassigned:`Keiner Kamera zugewiesen`,not_exposed:`In HomeKit, Home Assistant und MQTT ausgeblendet`,owner_virtual:`Virtuell`,assigned_cameras:`Zugewiesene Kameras`,assigned_cameras_placeholder:`Kameras auswählen`,assigned_cameras_hint:`Der Sensor erscheint bei diesen Kameras und kann deren Erkennung auslösen.`,assigned_cameras_locked_hint:`Vom Plugin auf dieser Kamera registriert. Die Zuweisung kann nicht geändert werden.`,exposed:`Sensor freigeben`,exposed_hint:`In HomeKit, Home Assistant und MQTT anzeigen.`,create_virtual:`Virtuellen Sensor anlegen`,delete:`Sensor löschen`,delete_connected:`Verbundene Sensoren können nicht gelöscht werden.`,delete_confirm:`Der Sensor und seine Zuweisungen werden entfernt. Ein Plugin-Sensor kommt zurück, sobald sein Plugin sich neu verbindet.`,history:`Verlauf`,history_empty:`Noch keine Zustandsänderungen aufgezeichnet.`,control:`Steuern`,control_offline:`Sensor ist nicht verbunden.`},automations:{title:`Automatisierungen`,select:`Automatisierungen auswählen`,select_all:`Alle auswählen`,deselect_all:`Auswahl aufheben`,enable_selected:`Ausgewählte aktivieren`,disable_selected:`Ausgewählte deaktivieren`,delete_selected:`Ausgewählte löschen`,delete_selected_confirm:`{count} ausgewählte Automatisierung(en) löschen?`,run_history:`Verlauf`,no_runs:`Noch keine Ausführungen`,run_success:`Erfolgreich`,run_error:`Fehler`,run_completed:`Abgeschlossen`,run_skipped:`Übersprungen`,run_warnings:`Warnungen`,create:`Automatisierung erstellen`,delete:`Automatisierung löschen`,delete_confirm:`Möchten Sie diese Automatisierung wirklich löschen?`,duplicate:`Duplizieren`,enable:`Aktivieren`,disable:`Deaktivieren`,enabled:`Aktiviert`,disabled:`Deaktiviert`,last_run:`Letzter Lauf`,never_run:`Nie`,requires_update:`Diese Automatisierung verweist auf eine gelöschte Kamera oder Sensor und wurde deaktiviert. Bearbeiten Sie den Flow, um das Problem zu beheben.`,no_automations:`Noch keine Automatisierungen`,search:`Automatisierungen suchen...`,flow_name_placeholder:`Name der Automatisierung`,import_blueprint:`Blueprint importieren`,import_success:`Blueprint erfolgreich importiert`,import_invalid:`Ungültige Blueprint-Datei`,browse_community:`Community-Automatisierungen durchsuchen`},automation:{title:`Automatisierung`,save:`Speichern`,saved:`Automatisierung gespeichert`,save_failed:`Fehler beim Speichern der Automatisierung`,triggered:`Automatisierung ausgelöst`,trigger_failed:`Fehler beim Auslösen der Automatisierung`,output:`Ausgabe`,unsaved_title:`Ungespeicherte Änderungen`,unsaved_message:`Sie haben ungespeicherte Änderungen. Möchten Sie diese verwerfen?`,discard:`Verwerfen`,run:`Ausführen`,add_step:`Schritt hinzufügen`,suppress_duplicates:`Wiederholte Ereignisse ignorieren`,suppress_duplicates_hint:`Identische Trigger-Ereignisse in schneller Folge überspringen.`,single_execution:`Auf Abschluss warten`,single_execution_hint:`Neue Trigger blockieren solange die Automatisierung noch läuft.`,undo:`Rückgängig`,redo:`Wiederherstellen`,export_blueprint:`Blueprint exportieren`,clear:`Leeren`,clear_confirm:`Möchten Sie wirklich alle Knoten und Verbindungen entfernen?`,delete_node:`Löschen`,node_palette:`Knoten`,node_config:`Konfiguration`,no_nodes:`Ziehen Sie einen Knoten aus der Seitenleiste um zu beginnen`,no_nodes_mobile:`Tippen Sie auf + um einen Knoten hinzuzufügen`,no_node_selected:`Wählen Sie einen Knoten zur Konfiguration`,untitled:`Unbenannte Automatisierung`},firststeps:{complete:`Fertig`,enjoy:`Viel Spaß!`,finish_message:`Sie haben die ersten Schritte erfolgreich abgeschlossen. Sie können nun die Anwendung nutzen.`,from_backup:`Aus Backup wiederherstellen`,new_installation:`Neue Installation`,slogan:`Die moderne Lösung für professionelle Videoüberwachung.`,start:`Start`,start_message:`Bitte wählen Sie, ob Sie eine neue Installation starten oder ein Backup wiederherstellen möchten.`,step_account:`Konto`,step_appearance:`Erscheinungsbild`,step_finish:`Fertig`,step_welcome:`Willkommen`,title:`Erste Schritte`,welcome_to:`Willkommen bei`},plugin:{changelog:`Änderungsprotokoll`,disabled_info:`Plugin ist deaktiviert`,no_cameras:`Keine Kamera verfügbar`,no_changelog:`Kein Änderungsprotokoll verfügbar`,no_readme:`Keine Leseanleitung verfügbar`,no_settings:`Keine Einstellungen verfügbar`,assignment_requires_running:`Starte das Plugin, um Kamera-Zuordnungen zu ändern.`,nvr_settings_hint:`NVR-Einstellungen werden unter Einstellungen → Aufnahmen vorgenommen.`,nvr_settings_button:`Aufnahme-Einstellungen öffnen`,plugin_is_disabled:`Plugin ist deaktiviert`,readme:`Leseanleitung`,segment_tab_cameras:`Kameras`,segment_tab_interface:`Interface`,segment_tab_plugins:`Plugins`,segment_tab_settings:`Einstellungen`,settings:`Einstellungen`,title:`Plugin`,settings_tab_tooltip:`Plugin-Einstellungen`,cameras_tab_tooltip:`Kamera-Zuweisung`,motion_detection_tab_tooltip:`Bewegungserkennung`,object_detection_tab_tooltip:`Objekterkennung`,audio_detection_tab_tooltip:`Audioerkennung`,face_detection_tab_tooltip:`Gesichtserkennung`,license_plate_detection_tab_tooltip:`Kennzeichenerkennung`,classifier_detection_tab_tooltip:`Bildklassifizierung`,clip_detection_tab_tooltip:`CLIP Semantische Suche`,notification_tab_tooltip:`Benachrichtigungen`},plugins:{allow_build_scripts:`Plugin-Build-Skripte erlauben`,allow_build_scripts_hint:`Plugins dürfen beim Installieren oder Aktualisieren Install-Skripte und native Builds ausführen. Nur aktivieren, wenn du den installierten Plugins vertraust.`,beta_versions:`Beta-Versionen`,beta_versions_hint:`Zeigt Vorabversionen in der Versionsauswahl der Plugins und bietet Beta-Releases als verfügbare Updates an.`,no_plugins:`Keine Plugins verfügbar`,search:`Plugins suchen...`,search_plugins:`Plugins suchen`,update_all:`Alle aktualisieren ({count})`,update_all_hint:`Aktualisiert alle Plugins mit neuerer Version, eines nach dem anderen`,update_all_done:`{count} Plugins aktualisiert`,update_all_failed:`{count} Updates fehlgeschlagen`,view_cards:`Kartenansicht`,view_table:`Tabellenansicht`,plugin:`Plugin`,version:`Version`,select:`Plugins auswählen`,update_selected:`Ausgewählte aktualisieren`,enable_selected:`Ausgewählte aktivieren`,enable_selected_done:`{count} Plugins aktiviert`,disable_selected:`Ausgewählte deaktivieren`,disable_selected_done:`{count} Plugins deaktiviert`,uninstall_selected:`Ausgewählte deinstallieren`,uninstall_selected_confirm:`{count} Plugins deinstallieren? Ihre Einstellungen bleiben erhalten.`,uninstall_selected_done:`{count} Plugins deinstalliert`,bulk_failed:`{count} Plugins fehlgeschlagen`,settings:`Plugin-Einstellungen`,title:`Plugins`},menu:{title:`Menü`,view_profile:`Profil anzeigen`,reload:`Neu laden`,switch_server:`Server wechseln`,logout:`Abmelden`,section_app:`App`,section_system:`System`,section_actions:`Aktionen`},app_lock:{title:`App gesperrt`,subtitle:`Authentifizieren, um camera.ui zu entsperren`,unlock:`Entsperren`},about:{title:`Über`,versions:`Versionen`,version_app:`App`,version_server:`Server`},faces:{title:`Gesichter`,known_faces:`Bekannte Gesichter`,unknown:`Unbekannt`,unknown_faces:`Unbekannte Gesichter`,no_faces_yet:`Noch keine Gesichter registriert.`,no_known_faces:`Noch keine bekannten Gesichter registriert.`,no_unknown_faces:`Keine unbekannten Gesichter erkannt.`,no_ungrouped_faces:`Keine ungruppierten Gesichter.`,clear_all:`Alle löschen`,add_face:`Gesicht hinzufügen`,assign:`Zuordnen`,skip:`Überspringen`,new_person:`+ Neue Person`,images:`Bilder`,training_images:`Trainingsbilder`,delete_person:`Person löschen`,name:`Name`,enter_name:`Name eingeben`,face_plugin:`Gesichtserkennungs-Plugin`,select_plugin:`Plugin wählen`,drop_image:`Bild hierher ziehen oder klicken`,faces_detected:`Gesicht(er) erkannt`,no_face_detected:`Kein Gesicht im Bild erkannt`,enroll:`Registrieren`,enter_person_name:`Name der Person eingeben`,face_enrolled:`Gesicht erfolgreich registriert`,face_assigned:`Gesicht erfolgreich zugeordnet`,person_deleted:`Person gelöscht`,image_removed:`Trainingsbild entfernt`,all_unknown_cleared:`Alle unbekannten Gesichter gelöscht`,faces_in_cluster:`Gesichter in Gruppe`,assign_cluster:`Gruppe zuordnen`,ungrouped:`Ungruppiert`,select:`Bilder auswählen`,discard:`Verwerfen`,remove_from_cluster:`Aus Gruppe entfernen`,show_all:`Alle anzeigen ({count})`,show_less:`Weniger anzeigen`,rescan_events:`Bestehende Events erneut scannen`,rescan_complete:`{count} Gesicht(er) in bestehenden Events aktualisiert`,rescan_no_matches:`Keine neuen Übereinstimmungen gefunden`},recordings:{title:`Aufnahmen`,export:{title:`Aufnahmen exportieren`,cameras:`Kameras`,cameras_placeholder:`Kameras auswählen`,range:`Zeitbereich`,from:`Von`,to:`Bis`,range_hint:`Eine Datei pro Kamera und Tag — erster und letzter Tag decken den gewählten Zeitraum ab, Tage dazwischen komplett.`,invalid_range:`„Bis“ muss nach „Von“ liegen.`,quality:`Qualität`,quality_best:`Beste Qualität`,quality_smallest:`Kleinste Dateien`,timelapse:`Zeitraffer`,timelapse_off:`Aus`,result:`Ergebnis`,file:`Datei`,files:`Dateien`,whole_day:`ganzer Tag`,no_cameras:`Keine Kamera ausgewählt.`,no_range:`Kein Zeitbereich gewählt.`,no_footage:`Keine Aufnahmen im gewählten Bereich.`,estimating:`Berechne…`,confirm:`Exportieren`,plugin_missing:`NVR-Plugin nicht verfügbar.`},search:`Suche`,search_placeholder:`Gesichter, Kennzeichen, Labels suchen...`,download_failed:`Download fehlgeschlagen`,filter_and:`UND`,filter_or:`ODER`,semantic_search:`KI-Suche`,semantic_search_placeholder:`Beschreiben Sie, was Sie suchen...`,semantic_search_button:`Suchen`,min_match_score:`Min. Übereinstimmung`,semantic_search_hint:`z.B. "Person mit roter Jacke" oder "Lieferwagen"`,cameras:`Kameras`,all_cameras:`Alle Kameras`,only_with_recordings:`Nur mit Aufnahme`,time_range:`Zeitraum`,time_1h:`1H`,time_1d:`1T`,time_1w:`1W`,time_1m:`1M`,event_type:`Labels`,type_person:`Person`,type_vehicle:`Fahrzeug`,type_animal:`Tier`,type_package:`Paket`,type_other:`Sonstige`,audio:`Audio`,audio_doorbell:`Türklingel`,audio_glass_break:`Glasbruch`,audio_siren:`Sirene`,audio_speaking:`Sprache`,audio_gunshot:`Schuss`,audio_dog_bark:`Hundegebell`,audio_baby_cry:`Babygeschrei`,audio_alarm:`Alarm`,audio_scream:`Schrei`,audio_cat:`Katze`,audio_car_alarm:`Autoalarm`,audio_smoke_alarm:`Rauchmelder`,attributes:`Attribute`,attr_face:`Gesicht`,attr_license_plate:`Kennzeichen`,sensor_events:`Auslöser`,sensor_motion:`Bewegung`,sensor_audio:`Audio`,sensor_contact:`Kontakt`,sensor_doorbell:`Türklingel`,sensor_switch:`Schalter`,sensor_light:`Licht`,sensor_siren:`Sirene`,sensor_security_system:`Sicherheitssystem`,sensor_line_crossing:`Linienüberschreitung`,sensor_occupancy:`Anwesenheit`,sensor_smoke:`Rauch`,sensor_leak:`Wasser`,sensor_gas:`Gas`,sensor_carbonMonoxide:`Kohlenmonoxid`,sensor_heat:`Hitze`,sensor_cold:`Kälte`,sensor_vibration:`Vibration`,sensor_tamper:`Manipulation`,sensor_problem:`Problem`,sensor_power:`Strom`,sensor_lock:`Schloss`,sensor_garage:`Garage`,grid_search:`Rastersuche`,grid_clear:`Auswahl zurücksetzen`,confidence:`Konfidenz`,date:`Datum`,download:`Aufnahme herunterladen`,no_recordings:`Keine Aufnahmen gefunden`,no_semantic_results:`Keine passenden Aufnahmen für Ihre Suche gefunden`,ungroup:`Aufteilen`,ungroup_hint:`Eine Karte pro Schnappschuss statt pro Ereignis`,only_with_recordings_hint:`Blendet Ereignisse ohne gespeicherte Aufnahme aus`,view_options:`Ansichtsoptionen`,result_count:`{count} Aufnahmen`,semantic_results:`{count} KI-Treffer`,events_count:`{count} Ereignisse`},login:{"2fa_backup_hint":`Backup-Code verwenden`,"2fa_backup_description":`Geben Sie einen Ihrer 8-stelligen Backup-Codes ein`,"2fa_backup_placeholder":`Backup-Code`,"2fa_use_app":`Authenticator-App verwenden`,"2fa_description":`Geben Sie den 6-stelligen Code aus Ihrer Authenticator-App ein`,"2fa_title":`Zwei-Faktor-Authentifizierung`,"2fa_invalid_code":`Ungültiger Code. Bitte erneut versuchen.`,"2fa_verify":`Verifizieren`,biometric_reason:`Bei camera.ui anmelden`,biometric_save_title:`Biometrische Anmeldung verwenden?`,biometric_save_description:`Speichern Sie Ihre Zugangsdaten im sicheren Speicher dieses Geräts, damit Sie sich beim nächsten Mal mit Face ID oder Touch ID anmelden können.`,biometric_save_confirm:`Aktivieren`,biometric_save_decline:`Nicht jetzt`,invalid_credentials:`Ungültiger Benutzername oder Passwort`,searching_direct:`Suche nach einer direkten Verbindung zu Ihrem Server…`,offline_title:`Server nicht erreichbar`,offline_description:`Es ist gerade keine direkte Verbindung verfügbar. Stellen Sie sicher, dass der Server online ist, und versuchen Sie es erneut.`,offline_retry:`Erneut versuchen`,pick_server:`Cloud`},settings:{app:`App`,available_updates:`Verfügbare Aktualisierungen`,available_updates_info:`Es sind Aktualisierungen für camera.ui verfügbar.`,beta_updates:`Beta-Updates`,beta_updates_info:`Vorabversionen empfangen, bevor sie allgemein ausgerollt werden — sowohl Server-Updates als auch, in der mobilen App, OTA-UI-Updates.`,certificate:`Zertifikat`,certificate_info:`Laden Sie hier das SSL-Zertifikat der Webseite herunter. Durch das Hinzufügen dieses Zertifikats zu Ihrem Keychain oder Ihrer Zertifikatsverwaltung wird die Seite als sicher erkannt. Dies verbessert die Browsererfahrung und vermeidet Sicherheitswarnungen.`,cloud:`Cloud`,connection:`Verbindung`,create_backup:`Backup erstellen`,create_backup_info:`Erstellen Sie ein Backup der aktuellen Konfiguration. Das Archiv enthält Ihr camera.ui Speicherverzeichnis, aber nicht Ihre Aufnahmen und deren Ereignisverlauf. Kopieren Sie den Aufnahmen-Ordner dafür selbst. Das Archiv können Sie später auf jeder Plattform wiederherstellen, auf der camera.ui läuft.`,edit:`Bearbeiten`,debugging:`Debugging`,interface:`Interface`,invalid_domain:`Ungültige Domain`,locale:`Sprache`,network:`Netzwerk`,network_info:`Wählen Sie aus, welche IP-Adressen dieses Servers für lokale Verbindungen verwendet werden. Apps und Browser erreichen den Server und seine Streams im Netzwerk über diese Adressen. Leer lassen, um alle Adressen zu verwenden.`,status_info:`Zeigt an, ob dieser Server bei der camera.ui Cloud für den Fernzugriff registriert ist.`,server_name:`Servername`,server_name_info:`Legen Sie einen benutzerdefinierten Namen für diesen Server fest. Dieser Name wird im Cloud-Dashboard angezeigt und hilft Ihnen, diesen Server zu identifizieren.`,server_name_label:`Name`,tunnel_status:`Tunnel`,tunnel_status_info:`Zeigt den Status der Remote-Tunnel-Verbindung für den Cloud-Zugriff an.`,tunnel_connected:`Verbunden`,tunnel_disconnected:`Getrennt`,cloudflare_login_waiting:`Warte auf Autorisierung...`,pair_instructions:`Scannen Sie den QR-Code oder öffnen Sie die Pairing-URL unten im Browser und melden Sie sich bei Ihrem camera.ui-Konto an.`,pair_code:`Pairing-Code`,pair_code_hint:`Begrenzt gültig. Der Code ist im QR-Code und in der Pairing-URL bereits enthalten.`,pair_url:`Pairing-URL`,pair_waiting:`Warte auf Bestätigung… ({remaining})`,not_registered:`Nicht registriert`,needs_reauth:`Neu-Authentifizierung nötig`,not_available_updates_info:`Ihre camera.ui Version ist auf dem neuesten Stand.`,password:`Passwort`,profile:`Profil`,registered_users:`Registrierte Benutzer`,remote_access_info:`Konfigurieren Sie hier die Remote-Zugriffseinstellungen. Diese Einstellungen ermöglichen es Ihnen, von überall auf Ihre camera.ui Umgebung zuzugreifen.`,remote_access_settings:`Remote Zugriff Einstellungen`,connection_status:`Verbindungsstatus`,direct_connection:`Direkte Verbindung`,direct_connection_info:`Macht diesen Server über eine öffentliche Adresse erreichbar, sodass er von außerhalb des lokalen Netzwerks zugänglich ist.`,direct_override_active:`Die direkte Verbindung bleibt aktiv, solange die Cloud eingeschaltet ist, damit dieser Server über seine externe Adresse erreichbar bleibt.`,direct_override_fallback:`Ihre konfigurierte direkte Adresse war nicht erreichbar — solange die Cloud aktiv ist, wird ein temporärer Cloudflare-Tunnel verwendet.`,external_url:`Externe URL`,external_url_info:`Die öffentliche Adresse, unter der dieser Server aktuell erreichbar ist. Bei einem Fallback ist das der temporäre Cloudflare-Tunnel, nicht Ihre konfigurierte Adresse.`,connection_method:`Verbindungsmethode`,connection_type:{local:`Lokal`,lan:`Lokales Netzwerk`,external:`Remote`,cloud:`Cloud`},remove:`Entfernen`,registered:`Registriert`,reset_server:`Server zurücksetzen`,reset_server_info:`Durch Klicken auf diesen Button setzen Sie die Konfiguration auf die Standardwerte zurück. Dies entfernt alle Ihre Einstellungen und Daten. Diese Aktion kann nicht rückgängig gemacht werden.`,restart_server:`Server neustarten`,restart_server_info:`Durch Klicken auf diesen Button starten Sie den Server neu. Ein Ladebildschirm wird angezeigt, bis der Neustart abgeschlossen ist. Anschließend wird die Seite automatisch aktualisiert und steht Ihnen wieder zur Verfügung.`,restore_backup:`Backup wiederherstellen`,restore_backup_info:`Stellen Sie ein Sicherungsarchiv wieder her, das Sie zuvor mit camera.ui erstellt haben. Ihre camera.ui Konfiguration, Datenbank und Benutzerkonten werden wiederhergestellt. Aufnahmen sind nicht Teil des Archivs.`,search_by_name:`Nach Namen suchen`,searching_updates:`Suche nach Aktualisierungen...`,server:`Server`,biometric:{title:`Biometrische Anmeldung`,label:`Face ID / Touch ID verwenden`,description:`Speichern Sie Ihre Zugangsdaten im sicheren Speicher dieses Geräts, damit Sie sich beim nächsten Mal biometrisch anmelden können.`,enable_hint:`Melden Sie sich ab und wieder an, um Ihre Zugangsdaten für die biometrische Anmeldung zu speichern.`,cleared:`Gespeicherte Zugangsdaten entfernt`},active_sessions:{title:`Aktive Sitzungen`,empty:`Keine aktiven Sitzungen`,this_device:`Dieses Gerät`,revoke:`Abmelden`,revoke_others_title:`Andere Geräte abmelden`,revoke_others_confirm:`Hierdurch werden {count} andere Geräte abgemeldet. Fortfahren?`,revoke_all_others:`{count} andere Geräte abmelden`,revoke_others_success:`Andere Geräte abgemeldet`},api_tokens:{title:`API-Tokens`,info:`Für externe Integrationen wie Home Assistant. Tokens haben vollen Kontozugriff und bleiben gültig, bis sie widerrufen werden.`,empty:`Keine API-Tokens`,create:`Token erstellen`,create_confirm:`Erstellen`,name_label:`Name`,name_placeholder:`z.B. Home Assistant`,name_exists:`Ein Token mit diesem Namen existiert bereits`,last_used:`Zuletzt benutzt`,never:`Nie`,revoke:`Widerrufen`,revoke_title:`API-Token widerrufen`,revoke_confirm:`Integrationen, die "{name}" verwenden, funktionieren danach nicht mehr. Fortfahren?`,revoke_success:`API-Token widerrufen`,created_title:`API-Token erstellt`,created_warning:`Dieser Token wird nur einmal angezeigt. Kopiere ihn jetzt und bewahre ihn sicher auf.`},scheduled_backup:`Backup-Zeitplan`,scheduled_backup_info:`Backups automatisch nach Zeitplan erstellen und nur die neuesten Archive behalten`,backup_interval:`Häufigkeit`,backup_interval_daily:`Täglich`,backup_interval_weekly:`Wöchentlich`,backup_interval_monthly:`Monatlich`,backup_time:`Uhrzeit`,backup_weekday:`Wochentag`,backup_day_of_month:`Tag des Monats`,backup_retention:`Backups behalten`,backup_retention_hint:`Anzahl der Archive, die behalten werden — ältere werden automatisch gelöscht`,backup_destination:`Zielordner`,backup_destination_hint:`Absoluter Pfad auf dem Server (z.B. NAS-Mount). Leer lassen für den Standardordner`,backup_last_run:`Letzter Lauf: {info}`,backup_last_run_never:`nie`,backup_existing:`Vorhandene Backups`,status:`Status`,theme:`Design`,title:`Einstellungen`,title_account:`Konto`,title_appearance:`Erscheinungsbild`,title_backup:`Backup`,title_go2rtc:`Go2RTC`,title_notifications:`Benachrichtigungen`,title_settings:`Einstellungen`,notifications:{general:`Allgemein`,general_info:`Der Hauptschalter aktiviert oder deaktiviert sämtliche Benachrichtigungen auf einen Schlag — wenn er aus ist, sind alle Quellen darunter stumm. Ruhezeiten unterdrücken die externe Auslieferung an Ihre registrierten Geräte während des täglichen Zeitfensters; nur Critical-Ereignisse durchbrechen die Stille. Die In-App-Benachrichtigungsliste bleibt unabhängig von den Ruhezeiten aktuell.`,enable:`Benachrichtigungen aktivieren`,os_permission_denied:`Benachrichtigungen sind auf diesem Gerät auf Systemebene blockiert.`,os_permission_link:`Berechtigungen öffnen`,enable_info:`Aktivieren Sie dies, um Benachrichtigungen für Ihr Konto zu erhalten.`,enable_failed:`Benachrichtigungen konnten nicht aktiviert werden.`,this_device:`Dieses Gerät`,this_device_synced:`Dieses Gerät ist für Benachrichtigungen eingerichtet.`,this_device_unsynced:`Dieses Gerät ist noch nicht eingerichtet — synchronisieren, um hier Benachrichtigungen zu empfangen.`,this_device_desktop:`Desktop-Benachrichtigungen auf diesem Computer anzeigen, solange die App läuft.`,sync:`Dieses Gerät synchronisieren`,resync:`Erneut synchronisieren`,quiet_hours:`Ruhezeiten`,quiet_hours_info:`Unterdrückt nicht-kritische Benachrichtigungen in einem täglichen Zeitfenster.`,from:`Von`,to:`Bis`,timezone:`Zeitzone`,system_notifications:`System-Benachrichtigungen`,system_notifications_info:`Eingebaute Ereignisse von camera.ui selbst — typischerweise Lebenszyklus- und Update-Hinweise, etwa wenn ein Plugin abstürzt oder eine neuere Server-Version verfügbar ist. Jeder Eintrag kann einzeln umgeschaltet werden, sodass Sie nur das sehen, was Sie interessiert.`,no_system_types:`Keine System-Benachrichtigungstypen verfügbar.`,plugin_notifications:`Plugin-Benachrichtigungen`,plugin_notifications_info:`Aktivierte Plugins dürfen camera.ui über eigene Ereignisse benachrichtigen — immer wenn etwas passiert das Ihre Aufmerksamkeit braucht. Diese Benachrichtigungen werden dann gemäß Ihren Einstellungen ausgeliefert. Deaktivierte Plugins werden vom Benachrichtigungs-Service stillschweigend ignoriert.`,no_plugin_sources:`Aktuell darf kein Plugin Benachrichtigungen senden.`,devices:`Geräte`,devices_info:`Registrierte Geräte sind die Ziele, an die Benachrichtigungen ausgeliefert werden. Jedes Gerät gehört dem Plugin, das es registriert hat — die Plugin-Spalte zeigt welches. Mit dem Active-Schalter pausieren Sie die Auslieferung, ohne das Gerät abzumelden; das Mülleimer-Symbol entfernt es vollständig.`,no_devices:`Noch keine Benachrichtigungsgeräte registriert.`,col_name:`Name`,col_plugin:`Plugin`,col_active:`Aktiv`,revoke:`Entfernen`,device_revoked:`Gerät entfernt.`,revoke_failed:`Gerät konnte nicht entfernt werden.`,update_failed:`Gerät konnte nicht aktualisiert werden.`,save:`Speichern`,reset:`Zurücksetzen`,saved:`Benachrichtigungseinstellungen gespeichert.`,save_failed:`Speichern der Benachrichtigungseinstellungen fehlgeschlagen.`,system_types:{system_plugin_update_available:`Plugin-Updates verfügbar`,system_plugin_crashed:`Plugin abgestürzt / wiederhergestellt`,system_update_available:`Server-Update verfügbar`}},instances:{add:`Instanz hinzufügen`,remove:`Entfernen`,edit:`Instanz bearbeiten`,name:`Name`,url:`URL`,url_placeholder:`https://beispiel.de:8443`,added:`Instanz hinzugefügt`,updated:`Instanz aktualisiert`,removed:`Instanz entfernt`,confirm_remove:`Instanz entfernen?`,credentials_username:`Benutzername`,credentials_password:`Passwort`,credentials_unchanged:`Unverändert`,cannot_add_self:`Dieser Server kann nicht als Remote-Instanz hinzugefügt werden.`,credentials_required:`Benutzername und Passwort sind erforderlich.`},title_mqtt:`MQTT`,mqtt_broker:`MQTT-Broker`,mqtt_status_info:`Live-Verbindungsstatus der MQTT-Bridge.`,mqtt_state_connected:`Verbunden`,mqtt_state_connecting:`Verbinde…`,mqtt_state_reconnecting:`Verbinde erneut…`,mqtt_state_error:`Fehler`,mqtt_state_disabled:`Deaktiviert`,mqtt_enabled_info:`Veröffentlicht camera.ui-Ereignisse, Kamera- und Sensorzustände an Ihren MQTT-Broker.`,mqtt_host_label:`Host`,mqtt_port_label:`Port`,mqtt_protocol_label:`Protokoll`,mqtt_username_label:`Benutzername`,mqtt_password_label:`Passwort`,mqtt_password_keep_hint:`Leer lassen, um das gespeicherte Passwort zu behalten.`,mqtt_client_id_label:`Client-ID`,mqtt_topic_prefix_label:`Topic-Präfix`,mqtt_topic_prefix_info:`Alle camera.ui-Topics werden unterhalb dieses Präfixes veröffentlicht.`,mqtt_tls_reject_unauthorized:`Serverzertifikat prüfen`,mqtt_tls_reject_unauthorized_info:`Nur für Broker mit selbstsignierten Zertifikaten deaktivieren.`,mqtt_tls_ca_label:`CA-Zertifikat (PEM)`,mqtt_tls_cert_label:`Client-Zertifikat (PEM)`,mqtt_tls_key_label:`Client-Schlüssel (PEM)`,mqtt_test:`Verbindung testen`,mqtt_mode_label:`Modus`,mqtt_mode_external:`Externer Broker`,mqtt_mode_embedded:`Eingebauter Broker`,mqtt_mode_embedded_info:`camera.ui startet einen eigenen MQTT-Broker. Richten Sie Ihre MQTT-Geräte mit der unten stehenden Adresse und den Zugangsdaten ein.`,mqtt_broker_address:`Broker-Adresse`,mqtt_broker_address_hint:`Verwenden Sie diese Adresse und die Zugangsdaten oben in Ihren MQTT-Geräten.`,mqtt_broker_running:`Eingebauter Broker läuft auf Port {port}`,mqtt_ha_discovery:`Home Assistant Discovery`,mqtt_ha_discovery_info:`Erstellt Geräte und Entitäten in Home Assistant automatisch via MQTT Discovery.`,mqtt_ha_prefix_label:`Discovery-Präfix`,mqtt_ha_prefix_info:`Muss dem in Home Assistant konfigurierten Discovery-Präfix entsprechen (Standard: homeassistant).`,title_remote:`Remote Zugriff`,title_nvr:`NVR`,title_permissions:`Berechtigungen`,title_recordings:`Aufnahmen`,permissions:{general:`App-Berechtigungen`,general_info:`Was dieses Gerät camera.ui erlaubt. Das sind Systemberechtigungen Ihres Geräts, keine Server-Einstellungen.`,microphone:`Mikrofon`,microphone_info:`Nötig für Gegensprechen (Intercom).`,location:`Standort`,location_info:`Nötig für standortbasierte Automationen.`,notifications:`Benachrichtigungen`,notifications_info:`Nötig, um Benachrichtigungen auf diesem Gerät anzuzeigen.`,state_granted:`Erlaubt`,state_denied:`Blockiert`,state_prompt:`Noch nicht gefragt`,state_unknown:`Unbekannt`,request:`Anfragen`,open_settings:`Einstellungen öffnen`,browser_hint:`Ändern Sie das in den Website-Einstellungen Ihres Browsers.`},recordings:{nvr_not_running:`NVR-Plugin ist nicht gestartet. Starten Sie das NVR-Plugin, um Aufnahmen zu verwalten.`,disk_critical:`Kritisch: Speicherplatz wird knapp. Aufnahme ist pausiert, um Datenverlust zu vermeiden.`,disk_warning:`Warnung: Speicherplatz unter 8%. Alte Aufnahmen werden nur mit Aufbewahrungsmodus "Overwrite" und ohne Speicherlimit automatisch gelöscht. Andernfalls pausiert die Aufnahme, wenn der Platz ausgeht.`,disk_small_volume:`Das Speichervolumen ist klein. Aufnahmen werden häufig rotiert, um Platz freizuhalten.`,storage_overview:`Speicherübersicht`,disk_total:`Gesamtspeicher`,nvr_usage:`NVR-Nutzung`,quota:`Kontingent`,retention:`Aufbewahrung`,disk_free:`Freier Speicher`,unlimited:`Unbegrenzt`,days_count:`{count} Tage`,global_settings:`Einstellungen`,camera_storage:`Kameraspeicher`,no_cameras:`Keine Kameras verfügbar`,col_camera:`Kamera`,col_size:`Größe`,col_days:`Tage`,col_rate:`Rate`,col_mode:`Modus`,chart_nvr:`NVR`,chart_other:`Andere`,chart_free:`Frei`,status_recording:`Aufnahme`,status_stopped:`Gestoppt`,not_available:`Nicht verfügbar`,license_title:`Lizenz & Cloud`,license_description:`Verbinden Sie diesen NVR mit der camera.ui Cloud für Lizenz- und Cloud-Funktionen.`,license_disconnected:`Nicht verbunden`},title_system:`System`,title_user:`Benutzer`,title_device:`Gerät`,title_security:`Sicherheit`,security:{title:`Zwei-Faktor-Authentifizierung`,"2fa_title":`Zwei-Faktor-Authentifizierung`,"2fa_description":`Fügen Sie eine zusätzliche Sicherheitsebene zu Ihrem Konto hinzu, indem Sie die Zwei-Faktor-Authentifizierung aktivieren. Sie benötigen eine Authenticator-App wie Google Authenticator oder Authy.`,generating_qr:`QR-Code wird generiert...`,setup_2fa:`2FA einrichten`,step_scan:`QR scannen`,step_verify:`Verifizieren`,scan_qr:`Scannen Sie diesen QR-Code mit Ihrer Authenticator-App`,manual_entry:`Manueller Eingabecode`,enter_code:`Verifizierungscode eingeben`,enter_code_description:`Geben Sie den 6-stelligen Code aus Ihrer Authenticator-App ein, um die Einrichtung zu verifizieren.`,enable_2fa:`2FA aktivieren`,disable_2fa:`2FA deaktivieren`,"2fa_enabled":`2FA ist aktiviert`,"2fa_enabled_success":`Zwei-Faktor-Authentifizierung wurde aktiviert`,"2fa_disabled_success":`Zwei-Faktor-Authentifizierung wurde deaktiviert`,backup_codes:`Backup-Codes`,backup_codes_remaining:`{count} Backup-Codes verbleibend`,backup_warning:`Speichern Sie diese Codes an einem sicheren Ort. Jeder Code kann nur einmal verwendet werden. Falls Sie den Zugang zu Ihrer Authenticator-App verlieren, können Sie diese Codes zur Anmeldung verwenden.`,backup_regenerated:`Backup-Codes wurden neu generiert`,regenerate_backup:`Backup-Codes neu generieren`,regenerate_confirm:`Geben Sie Ihren aktuellen 2FA-Code ein, um neue Backup-Codes zu generieren. Dadurch werden alle bestehenden Backup-Codes ungültig.`,disable_confirm:`Geben Sie Ihren 2FA-Code ein, um die Zwei-Faktor-Authentifizierung zu deaktivieren.`},unknown:`Unbekannt`,update_available:`Aktualisierung verfügbar`,valid_domain:`Gültige Domain`,version:`Version`},instances:{title:`Instanzen`,this_server:`Dieser Server`,remote_servers:`Remote Server`,add:`Instanz hinzufügen`,edit:`Instanz bearbeiten`,remove:`Entfernen`,confirm_remove:`Instanz entfernen?`,select:`Instanzen auswählen`,select_all:`Alle auswählen`,deselect_all:`Auswahl aufheben`,remove_selected:`Ausgewählte entfernen`,remove_selected_confirm:`{count} ausgewählte Instanz(en) entfernen?`,search:`Instanzen suchen...`,no_instances:`Keine Remote-Instanzen konfiguriert.`,active:`Aktiv`,offline:`Offline`,switch_to:`Wechseln`,server_offline:`Server ist offline oder nicht erreichbar.`,no_data:`Laden...`,two_factor_pending_hint:`Zwei-Faktor-Bestätigung ausstehend`,two_factor_enter_code:`Code eingeben`,version:`Version`,uptime:`Laufzeit`,os:`System`,hostname:`Hostname`,cpu:`CPU`,cores:`Kerne`,memory:`Arbeitsspeicher`,disk:`Speicher`,cameras:`Kameras`,online:`Online`,recording:`Aufnahme`,credentials_required:`Zugangsdaten hinzufügen für Statusüberwachung.`},workers:{title:`Workers`,workers:`Workers`,address_required:`Keine LAN-Adresse erkannt. Setzen Sie die Master-Adresse manuell, bevor Sie Workers aktivieren.`,camera_assignments:`Kamera-Zuweisungen`,camera_assignments_description:`Lagern Sie das Video-Decoding und die Erkennung einer Kamera auf einen Worker aus. Der Stream wird auf der zugewiesenen Maschine dekodiert — praktisch, um CPU-Last zu verteilen. „Lokal" lässt sie auf diesem Master laufen.`,camera:`Kamera`,configuration:`Konfiguration`,copied:`Kopiert!`,cpu:`CPU`,enable_workers:`Workers aktivieren`,enable_workers_description:`Erlauben Sie anderen Maschinen, sich als Worker zu verbinden und Kamera-Decoding oder Plugins zu übernehmen.`,failed_to_update_assignment:`Worker-Zuweisung konnte nicht aktualisiert werden`,generate_code:`Pairing-Code generieren`,incompatible:`inkompatibel`,leaf_port:`Worker-Verbindungsport`,local:`Lokal`,master_address:`Master-Adresse`,master_address_hint:`Die Adresse, über die Worker diesen Master erreichen (LAN-IP oder Hostname).`,master_address_placeholder:`z. B. 192.168.1.10`,memory:`Speicher`,name:`Name`,ok:`OK`,port_change_warning:`Eine Port-Änderung erfordert, dass bereits gepairte Worker neu gepairt werden.`,save:`Speichern`,no_cameras:`Keine Kameras verfügbar`,no_plugins:`Keine Plugins installiert`,no_workers:`Keine Workers verfügbar`,plugin:`Plugin`,plugin_assignments:`Plugin-Zuweisungen`,plugin_assignments_description:`Betreiben Sie ein ganzes Plugin auf einem Worker statt auf diesem Master — z. B. einen Detektor, der Hardware braucht, die dieser Master nicht hat, oder der nur auf einer anderen Plattform verfügbar ist. Der Worker installiert und startet das Plugin; konfiguriert wird es weiterhin hier wie gewohnt. Es werden nur kompatible Worker angeboten.`,offline:`Offline`,online:`Online`,pair_worker:`Neuen Worker koppeln`,pair_worker_description:`Generieren Sie einen einmaligen Pairing-Code und starten Sie den Worker damit. Der Worker tauscht den Code gegen eigene Zugangsdaten — keine geteilten Secrets, pro Worker widerrufbar. Beim Koppeln startet der interne Message-Broker kurz neu.`,pairing_code:`Pairing-Code`,pairing_expires:`Läuft in {minutes} Min ab — einmalig verwendbar`,pairing_snippet:`Worker-Konfiguration`,pairing_snippet_hint:`In die camera.ui.yaml des Workers einfügen, dann mit "cameraui --worker run" starten.`,pid:`PID`,platform:`Plattform`,remove:`Entfernen`,remove_worker:`Worker entfernen`,rename_worker:`Worker umbenennen`,remove_worker_confirm:`"{name}" entfernen? Die Zugangsdaten werden widerrufen und die Verbindung gekappt — zugewiesene Kameras laufen wieder auf dieser Maschine. Der interne Message-Broker startet kurz neu.`,version:`Version`,version_mismatch:`Worker läuft mit {version}, auf die Server-Version aktualisieren`,update_worker:`Auf {version} aktualisieren`,update_worker_short:`Worker aktualisieren`,restart_worker:`Worker neu starten`,updating:`Wird aktualisiert, der Worker startet danach neu`,update_failed:`Update fehlgeschlagen: {error}`}}},en:{components:{automation_import:{title:`Import Automation`,import:`Import`,intro:`Bind the references in this blueprint to your local cameras, plugins and users. Check any pre-filled values.`,no_inputs:`This blueprint has no references to bind. You can import it directly.`,missing_plugins:`Missing required plugins: {plugins}. Install them before importing.`,open_plugin_store:`Open plugin store`,select_camera:`Select camera`,select_plugin:`Select plugin`,no_plugin_for_interface:`No installed plugin provides the "{interface}" interface.`,select_targets:`Select recipients`,select_sensor:`Select sensor`,enter_target_id:`Enter target ID`},automation_store:{search:`Search community automations...`,filter_category:`Category`,filter_all_categories:`All categories`,sort_by:`Sort by`,sort_featured:`Featured`,sort_name:`Name`,featured:`Featured`,automations:`Automations`,refresh:`Refresh`,empty:`No community automations available`,not_found:`Automation not found`,needs:`Needs`,import:`Import`,required_plugins:`Required plugins`,missing_plugins_hint:`Some required plugins are not installed. Install them from the plugin store before importing.`,required_inputs:`Required inputs`,input_camera:`{count} camera`,input_plugin:`{count} plugin`,input_sensor:`{count} sensor`,input_notification_targets:`notifications`,input_system_target:`{count} target`,input_text:`{count} value`,category_notification:`Notification`,category_recording:`Recording`,category_presence:`Presence`,category_detection:`Detection`,category_schedule:`Schedule`,category_webhook:`Webhook`,category_mqtt:`MQTT`,category_scene:`Scene`,category_utility:`Utility`,category_other:`Other`},automation_nodes:{category_triggers:`Triggers`,category_conditions:`Conditions`,category_actions:`Actions`,category_utilities:`Utilities`,trigger_detection:`Detection Event`,trigger_detection_desc:`Triggered when a camera detects motion, a person, a vehicle, etc.`,event_phase:`Trigger on`,event_phase_start:`Event Start`,event_phase_update:`Event Update`,event_phase_end:`Event End`,event_phase_segment_start:`Segment Start`,event_phase_segment_update:`Segment Update`,event_phase_segment_end:`Segment End`,event_phase_placeholder:`All phases`,event_phase_multi_hint:`Select which event phases to trigger on. Empty = all phases.`,detection_labels:`Object Filter`,detection_labels_placeholder:`Any detection`,detection_labels_hint:`Only trigger when these objects are detected. Leave empty for any detection.`,label_motion:`Motion`,label_person:`Person`,label_vehicle:`Vehicle`,label_animal:`Animal`,label_package:`Package`,label_audio:`Audio`,confidence_hint:`Minimum confidence for object detections. Set to 0 to skip.`,audio_labels:`Audio Event Filter`,audio_labels_placeholder:`Any audio event`,audio_labels_hint:`Only trigger for specific audio events. Leave empty for any.`,audio_doorbell:`Doorbell`,audio_glass_break:`Glass Break`,audio_scream:`Scream`,audio_gunshot:`Gunshot`,audio_dog_bark:`Dog Bark`,audio_baby_cry:`Baby Cry`,audio_alarm:`Alarm`,audio_car_alarm:`Car Alarm`,audio_smoke_alarm:`Smoke Alarm`,audio_siren:`Siren`,audio_speaking:`Speaking`,audio_cat:`Cat`,face_filter:`Face Filter`,face_filter_placeholder:`Add name`,face_filter_hint:`Only trigger for specific people. Works best with "Event End" phase.`,license_plate_filter:`License Plate Filter`,license_plate_filter_placeholder:`Add plate`,license_plate_filter_hint:`Only trigger for specific license plates.`,trigger_sensor:`Sensor Change`,trigger_sensor_desc:`Triggered when a sensor property changes.`,sensor_properties:`Properties`,sensor_properties_placeholder:`All properties`,sensor_properties_hint:`Select which properties to watch. Empty = any property change.`,snapshot_force_new:`Force new snapshot`,snapshot_force_new_hint:`Bypass cache and capture a fresh frame from the camera.`,condition_logic:`Match`,condition_add:`Add condition`,logic_and:`AND`,logic_or:`OR`,trigger_schedule:`Schedule`,trigger_schedule_desc:`Triggered on a time-based schedule.`,cron_expression:`Cron Expression`,cron_presets:`Presets`,cron_every_minute:`Every minute`,cron_every_5_min:`Every 5 min`,cron_every_hour:`Every hour`,cron_daily_midnight:`Daily (midnight)`,cron_daily_6am:`Daily (6 AM)`,trigger_webhook:`Webhook`,trigger_mqtt:`MQTT Message`,trigger_mqtt_desc:`Triggered when a message arrives on an MQTT topic. Requires the MQTT connection in Settings.`,mqtt_topic:`Topic`,mqtt_topic_hint:`MQTT topic to subscribe to. Wildcards + and # are supported.`,mqtt_match_mode:`Match`,mqtt_match_any:`Any message`,mqtt_match_exact:`Exact payload`,mqtt_match_json:`JSON value`,mqtt_payload_filter:`Payload`,mqtt_payload_filter_hint:`Trigger only when the payload equals this exact text. For JSON devices (Shelly, Tasmota, …) use JSON value instead.`,mqtt_json_path:`JSON path`,mqtt_json_path_hint:`Dot path into the JSON payload, e.g. "output" or "params.switch:0.output".`,mqtt_json_value:`Equals value`,mqtt_json_value_hint:`Trigger only when the value at the path equals this. Leave empty to trigger whenever the path is present.`,action_mqtt:`MQTT Publish`,action_mqtt_desc:`Publishes a message to an MQTT topic. Requires the MQTT connection in Settings.`,mqtt_payload:`Payload`,mqtt_retain:`Retain`,mqtt_retain_hint:`The broker keeps the message and delivers it to new subscribers.`,trigger_webhook_desc:`Triggered by an external HTTP request.`,trigger_system:`System Event`,trigger_system_desc:`Triggered by a system event.`,system_category:`Category`,system_event_type:`Event Type`,system_event_placeholder:`Select event type`,system_cat_system:`System`,system_cat_plugin:`Plugin`,system_cat_camera:`Camera`,system_evt_started:`System Started`,system_evt_shutdown:`System Shutdown`,system_evt_camera_added:`Camera Added`,system_evt_camera_removed:`Camera Removed`,system_evt_plugin_started:`Plugin Started`,system_evt_plugin_stopped:`Plugin Stopped`,system_evt_plugin_error:`Plugin Error`,system_evt_camera_connected:`Camera Connected`,system_evt_camera_disconnected:`Camera Disconnected`,system_evt_fw_started:`FrameWorker Started`,system_evt_fw_stopped:`FrameWorker Stopped`,system_evt_property_changed:`Property Changed`,system_evt_sensor_added:`Sensor Added`,system_evt_sensor_deleted:`Sensor Deleted`,camera:`Camera`,camera_placeholder:`Select camera`,trigger_manual:`Manual`,trigger_manual_desc:`Triggered manually by clicking Run.`,condition_ifelse:`If / Else`,condition_ifelse_desc:`Branch based on a condition.`,condition_switch:`Switch`,condition_switch_desc:`Branch based on multiple values.`,condition_sensorstate:`Sensor State`,condition_sensorstate_desc:`Check the current state of a sensor.`,action_snapshot:`Capture Snapshot`,action_snapshot_desc:`Capture a snapshot from a camera.`,action_recording:`Toggle Recording`,action_recording_desc:`Start or stop recording on a camera.`,action_sensor:`Control Sensor`,action_sensor_desc:`Set a sensor property value.`,action_notification:`Send Notification`,action_notification_desc:`Send a push notification.`,action_notification_control:`Notifications On/Off`,action_notification_control_desc:`Turn push notifications on or off, for everyone or one user.`,notification_control_mode:`Notifications`,notification_control_enable:`On`,notification_control_disable:`Off`,notification_control_scope:`Applies to`,notification_control_scope_global:`Everyone`,notification_control_scope_user:`One user`,notification_control_scope_global_hint:`Mutes or unmutes push for all users.`,notification_control_scope_user_hint:`Mutes or unmutes push for the selected user only.`,notification_control_user:`User`,notification_control_user_placeholder:`Select a user`,notification_title:`Title`,notification_title_placeholder:`Notification title`,notification_body:`Body`,notification_body_placeholder:`Notification body`,notification_severity:`Severity`,severity_info:`Info`,severity_warning:`Warning`,severity_error:`Error`,severity_critical:`Critical (bypasses DND)`,notification_image:`Image`,notification_image_placeholder:`{'{{snapshot}}'} or https://…`,notification_image_hint:`Use an upstream image variable, paste a URL or upload a file. Leave empty for text only.`,notification_deep_link:`Deep link`,notification_targets:`Targets`,notification_targets_hint:`Devices that receive this notification. Leave empty to send to all registered devices.`,notification_targets_placeholder:`All devices`,action_http:`HTTP Request`,action_http_desc:`Send an HTTP request to an external URL.`,action_delay:`Delay`,action_delay_desc:`Wait for a specified duration.`,action_variable:`Set Variable`,action_variable_desc:`Store a value for later use.`,action_plugin:`Plugin Call`,action_plugin_desc:`Run a detection or analysis plugin on an image.`,action_image_input:`Image Input`,action_image_input_desc:`Load an image from a URL or variable.`,action_output:`Output`,action_output_desc:`Collect results for display after execution.`,image_source:`Image Source`,image_source_placeholder:`https://example.com/image.jpg or {'{{variable}}'}`,image_upload:`Upload image`,image_source_hint:`URL to fetch, base64 data, or upload a file.`,image_variable_hint:`The image will be stored as base64 in this variable.`,image_width:`Width`,image_height:`Height`,image_auto:`0 = auto`,image_resize_hint:`Set 0 for original size. Both 0 = no resize.`,image_output_format:`Output Format`,variable:`Variable`,output_label:`Label`,output_label_placeholder:`e.g. Duration`,output_add:`Add output variable`,output_hint:`These values will be shown after manual execution.`,available_variables:`Variables`,variable_operator:`Operator`,alias:`Alias`,alias_placeholder:`myNode`,alias_hint:`Scope output variables with a prefix, e.g. cam1.plugin.result`,repeat:`Repeat`,repeat_count:`Iterations`,repeat_concurrency:`Parallel calls per iteration`,repeat_concurrency_hint:`Number of concurrent calls per iteration. Total = iterations × concurrency.`,repeat_delay:`Delay between iterations`,plugin_settings:`Plugin Settings`,plugin_apply_settings:`Apply`,plugin_interface:`Plugin Interface`,plugin_interface_placeholder:`Select interface`,plugin_name:`Plugin`,plugin_name_placeholder:`Select plugin`,plugin_no_plugins:`No plugins available for this interface`,plugin_method:`Method`,plugin_method_placeholder:`Select method`,method_test_object:`Detect Objects`,method_test_face:`Detect Faces`,method_test_plate:`Detect License Plates`,method_test_classifier:`Classify Image`,method_test_motion:`Detect Motion`,method_test_audio:`Detect Audio Events`,method_test_clip:`Generate CLIP Embedding`,method_text_embedding:`Text Embedding`,method_detect_objects:`Detect Objects (Raw Frame)`,method_detect_faces:`Detect Faces (Raw Frame)`,method_detect_plates:`Detect License Plates (Raw Frame)`,method_detect_classifications:`Classify (Raw Frame)`,method_detect_motion:`Detect Motion (Raw Frame)`,method_detect_audio:`Detect Audio Events (Raw Frame)`,method_detect_clip:`CLIP Embedding (Raw Frame)`,param_frame:`Frame Data`,param_image:`Image Data`,param_audio:`Audio Data`,param_image_hint:`Use {'{{snapshot}}'} from a previous Capture Snapshot node.`,param_video:`Video Data`,param_text:`Text`,confidence:`Confidence Threshold`,webhook_url:`Webhook URL`,webhook_url_hint:`Send a POST request to this URL to trigger the automation.`,webhook_secret:`HMAC Secret`,webhook_secret_hint:`Send this secret in an X-Webhook-Secret header. Alternatively sign the body with HMAC-SHA256(body, secret) in an X-Webhook-Signature header.`,webhook_secret_save_hint:`Save the automation to generate an HMAC secret.`,webhook_secret_copied:`Copied`,condition_variable:`Variable`,condition_variable_placeholder:`Select or type a variable`,condition_variable_hint:`Select a predefined variable or type a custom expression.`,condition_source_info:`Connected to: {source}`,condition_no_source:`Connect a node to see available variables.`,sensor_label:`Sensor`,sensor_placeholder:`Select sensor`,sensor_property_placeholder:`Property`,sensor_property_detected:`Detected`,sensor_property_detections:`Detections`,sensor_property_blocked:`Blocked`,sensor_property_lastTriggered:`Last triggered`,sensor_property_labels:`Labels`,sensor_property_decibels:`Decibels`,sensor_property_current:`Current value`,sensor_property_on:`On`,sensor_property_brightness:`Brightness`,sensor_property_active:`Active`,sensor_property_volume:`Volume`,sensor_property_currentState:`Current state`,sensor_property_targetState:`Target state`,sensor_property_obstructionDetected:`Obstruction detected`,sensor_property_position:`Position`,sensor_property_moving:`Moving`,sensor_property_presets:`Presets`,sensor_property_velocity:`Velocity`,sensor_property_targetPreset:`Target preset`,sensor_property_relativeMove:`Relative move`,sensor_property_home:`Home position`,sensor_property_ring:`Ring`,sensor_property_level:`Battery level`,sensor_property_charging:`Charging`,sensor_property_low:`Low battery`,mqtt_recent_topics:`Recent topics`,validation_no_trigger:`The flow has no trigger.`,validation_unreachable:`This node is not connected to a trigger.`,validation_missing_fields:`Required settings are missing.`,validation_no_cases:`The switch has no cases.`,validation_invalid_cron:`The cron expression needs 5 fields.`,validation_invalid_variable_name:`Variable names may only contain letters, digits, underscores and dots.`,validation_unknown_variable:`Unknown variable {name}.`,variable_event_type:`Event type`,variable_event_types:`All event types`,variable_event_label:`Detection label`,variable_event_confidence:`Confidence`,variable_event_state:`Event state`,variable_event_camera:`Camera ID`,variable_event_faces:`Recognized faces`,variable_event_plates:`License plates`,variable_event_id:`Event ID`,variable_sensor_value:`Sensor value`,variable_sensor_previous_value:`Previous value`,variable_sensor_property:`Changed property`,variable_sensor_type:`Sensor type`,variable_sensor_id:`Sensor ID`,variable_sensor_cameras:`Assigned cameras`,variable_webhook_body:`Webhook body`,variable_webhook_data:`Webhook data (base64)`,variable_webhook_method:`HTTP method`,variable_webhook_headers:`Headers (JSON)`,variable_mqtt_topic:`Topic`,variable_mqtt_payload:`Payload`,variable_geo_event:`Geofence event`,variable_geo_user:`User`,variable_geo_zone:`Zone`,variable_geo_lat:`Latitude`,variable_geo_lon:`Longitude`,variable_geo_distance:`Distance (m)`,variable_system_event_type:`Event type`,variable_system_camera_id:`Camera ID`,variable_system_camera_name:`Camera name`,variable_system_plugin_name:`Plugin name`,variable_system_plugin_id:`Plugin ID`,variable_system_status:`Status`,variable_system_property:`Property`,variable_system_sensor_id:`Sensor ID`,variable_system_sensor_type:`Sensor type`,variable_system_sensor_name:`Sensor name`,variable_snapshot:`Snapshot (base64)`,variable_snapshot_data_uri:`Snapshot (data URI)`,variable_http_status:`HTTP status`,variable_http_body:`Response body`,variable_http_base64:`Response (data URI)`,variable_http_json:`Response JSON`,variable_plugin_detected:`Detected`,variable_plugin_labels:`Labels`,variable_plugin_detections:`Detections (JSON)`,variable_plugin_result:`Result (JSON)`,variable_plugin_duration:`Duration (ms)`,variable_camera_id:`Camera ID`,variable_camera_name:`Camera name`,variable_repeat_index:`Repeat index (0-based)`,variable_repeat_iteration:`Repeat iteration (1-based)`,variable_repeat_total:`Repeat total`,variable_repeat_total_calls:`Total calls`,variable_repeat_elapsed_ms:`Elapsed (ms)`,variable_repeat_elapsed_sec:`Elapsed (s)`,variable_previous_success:`Previous action succeeded`,variable_previous_result:`Previous action result`,variable_value_active:`Active`,variable_value_ended:`Ended`,variable_value_enter:`Enter`,variable_value_leave:`Leave`,lock_state_secured:`Locked`,lock_state_unsecured:`Unlocked`,lock_state_unknown:`Unknown`,garage_state_open:`Open`,garage_state_closed:`Closed`,garage_state_opening:`Opening`,garage_state_closing:`Closing`,garage_state_stopped:`Stopped`,securitySystem_state_stay_arm:`Home (Stay)`,securitySystem_state_away_arm:`Away`,securitySystem_state_night_arm:`Night`,securitySystem_state_disarmed:`Disarmed`,securitySystem_state_alarm_triggered:`Alarm triggered`,battery_state_not_chargeable:`Not chargeable`,battery_state_not_charging:`Not charging`,battery_state_charging:`Charging`,battery_state_full:`Fully charged`,http_url:`URL`,http_method:`Method`,http_body:`Body`,http_headers:`Headers`,http_header_name:`Name`,http_header_value:`Value`,http_add_header:`Add header`,switch_cases:`Cases`,switch_cases_placeholder:`Add case value`,switch_cases_hint:`Press Enter to add a case. Each case creates a separate output.`,switch_cases_suggested:`Suggested values:`,condition_operator:`Operator`,operator_equals:`equals`,operator_not_equals:`not equals`,operator_greater:`greater than`,operator_less:`less than`,operator_greater_equal:`greater or equal`,operator_less_equal:`less or equal`,operator_contains:`contains`,operator_starts_with:`starts with`,operator_ends_with:`ends with`,condition_value:`Value`,condition_value_placeholder:`e.g. 0.8, true, person`,sensor_value_state:`State`,sensor_value_variable:`Use a variable`,sensor_value_fixed:`Fixed value`,sensor_value_variable_placeholder:`Insert a variable from below`,variable_name:`Variable Name`,variable_name_hint:`A unique name to reference this value later.`,variable_value_placeholder:`Select or type a value`,variable_value_hint:`Select a value from the connected node or type a custom value.`,delay_duration:`Duration`,delay_unit:`Unit`,unit_seconds:`Seconds`,unit_minutes:`Minutes`,unit_hours:`Hours`,condition_time:`Time Range`,condition_time_desc:`Check if current time is within a range.`,condition_time_info:`Evaluates to true if current time is within the specified range. Supports overnight ranges (e.g. 22:00 - 06:00).`,condition_time_start:`Start Time`,condition_time_end:`End Time`,condition_time_days:`Days`,condition_time_days_all:`All days`,day_monday:`Monday`,day_tuesday:`Tuesday`,day_wednesday:`Wednesday`,day_thursday:`Thursday`,day_friday:`Friday`,day_saturday:`Saturday`,day_sunday:`Sunday`,action_camera_control:`Camera Control`,action_camera_control_desc:`Change camera settings like snooze, detection sensitivity, etc.`,camera_select:`Select camera`,camera_control_properties:`Properties to change`,camera_control_properties_hint:`Enable the properties you want to change and set their values.`,camera_prop_snooze:`Snooze Detections`,camera_prop_disabled:`Disable Camera`,camera_prop_recording:`Enable Recording`,camera_prop_recording_mode:`Recording Mode`,camera_prop_recording_prebuffer:`Recording Pre-Buffer (s)`,camera_prop_ptz_autotrack:`PTZ Autotrack`,camera_prop_object_confidence:`Object Confidence`,camera_prop_suppress_static:`Ignore Stationary Objects`,camera_prop_face_confidence:`Face Confidence`,camera_prop_plate_confidence:`Plate Reading Confidence`,camera_prop_plate_min_length:`Minimum Plate Length`,camera_prop_hq_snapshots:`HQ Snapshots`,camera_prop_motion_timeout:`Motion Timeout (s)`,camera_prop_motion_resolution:`Motion Resolution`,camera_prop_audio_timeout:`Audio Timeout (s)`,camera_prop_audio_min_decibels:`Audio Min Decibels`,camera_prop_audio_confidence:`Audio Confidence`,camera_prop_sensor_timeout:`Sensor Timeout (s)`,camera_prop_cascade_detection:`Cascade Detection`,camera_prop_cascade_timeout:`Cascade Timeout (s)`,camera_prop_fps:`FrameWorker FPS`,camera_prop_auto_refresh:`Snapshot Auto-Refresh`,camera_prop_snapshot_interval:`Snapshot Interval (s)`,camera_prop_snapshot_ttl:`Snapshot TTL (s)`,trigger_geofence:`Geofence`,trigger_geofence_desc:`Triggered when a user enters or leaves a geographic zone.`,geofence_zone_name:`Zone Name`,geofence_zone_name_placeholder:`e.g. Home`,geofence_latitude:`Latitude`,geofence_longitude:`Longitude`,geofence_radius:`Radius (meters)`,geofence_event:`Trigger on`,geofence_event_enter:`Enter zone`,geofence_event_leave:`Leave zone`,geofence_event_both:`Enter & Leave`,geofence_users:`Tracked Users`,geofence_users_placeholder:`Select users`,geofence_users_hint:`Only trigger for these users. Each tracked user gets their own secret below — a reporter can only report for a user whose secret it holds.`,geofence_url:`Location URL`,geofence_url_hint:`Send POST with {'{'} lat: number, lon: number, user: string, timestamp: number {'}'} as JSON body. timestamp = current Unix time in ms; it is signed and must be within 5 minutes (replay protection).`,geofence_secret:`HMAC Secrets (per user)`,geofence_secret_hint:`Each user signs with their own secret: X-Webhook-Signature = HMAC-SHA256(body, that user's secret).`,geofence_secret_save_hint:`Add the users to track above, then save the automation to generate the location URL and a secret per user.`,geofence_use_my_location:`My location`,geofence_map_hint:`Drag the marker to set the zone center.`,geofence_location_error:`Location unavailable. Set the zone center manually on the map.`},camera_events:{no_events:`No recent events`,title:`Recent Events`},camera_options:{overview:`Overview`,overview_status:`Status`,overview_sources:`Sources`,overview_last_motion:`Last Motion`,overview_motion_active:`Active`,overview_no_motion:`No motion detected`,accessories:`Accessories`,advanced:`Advanced`,audio_state:`Audio state`,battery_state:`Battery state`,branding:`Branding`,categories:`Categories`,category_audio_detection:`Audio Detection`,category_camera_controller:`Camera Controller`,category_controls:`Controls`,category_hub:`Hub`,category_motion_detection:`Motion Detection`,category_object_detection:`Object Detection`,category_ptz:`PTZ`,category_sensors:`Sensors`,chip_audioDetection:`Audio detection`,chip_cameraController:`Camera`,chip_hub:`Hub`,chip_more:`More`,chip_motionDetection:`Motion detection`,chip_objectDetection:`Object detection`,chip_plugins:`Plugins`,chip_ptz:`PTZ`,chip_controls:`Controls`,chip_sensors:`Sensors`,chip_detection:`Detection`,chip_core:`Core`,chip_accessories:`Accessories`,detection:`Detection`,provides:`Provides`,sensor_types:`Sensor Types`,sensors:`Sensors`,sensor_type_motion:`Motion`,sensor_type_object:`Object`,sensor_type_objectAssist:`Object Assist`,sensor_type_audio:`Audio`,sensor_type_face:`Face`,sensor_type_licensePlate:`License Plate`,sensor_type_classifier:`Classifier`,sensor_type_ptz:`PTZ`,sensor_type_light:`Light`,sensor_type_siren:`Siren`,sensor_type_doorbell:`Doorbell`,sensor_type_contact:`Contact`,sensor_type_battery:`Battery`,sensor_type_switch:`Switch`,sensor_type_lock:`Lock`,sensor_type_temperature:`Temperature`,sensor_type_humidity:`Humidity`,sensor_type_occupancy:`Occupancy`,sensor_type_smoke:`Smoke`,sensor_type_leak:`Leak`,sensor_type_garage:`Garage`,sensor_type_clip:`CLIP`,sensor_type_securitySystem:`Security System`,sensor_type_gas:`Gas`,sensor_type_carbonMonoxide:`Carbon Monoxide`,sensor_type_heat:`Heat`,sensor_type_cold:`Cold`,sensor_type_vibration:`Vibration`,sensor_type_tamper:`Tamper`,sensor_type_problem:`Problem`,sensor_type_power:`Power`,sensor_type_illuminance:`Illuminance`,sensor_type_carbonDioxide:`CO₂`,doorbell_state:`Doorbell state`,enabled_extension:`Enabled extension`,frame_worker:`Frame Worker`,general:`General`,interface:`Interface`,light_state:`Light state`,manage_plugins:`Manage plugins`,model:`Model`,more_plugins:`More plugins`,motion_detection:`Motion detection`,motion_state:`Motion state`,name:`Name`,native:`Native`,no_accessories:`No accessories available`,no_sensors:`No sensors available`,sensor_display_name:`Sensor Name`,no_plugins_available:`No plugins available`,no_plugins_enabled:`No plugins enabled`,no_plugins_found:`No plugins found`,object_detection:`Object detection`,object_assist:`Object assist`,object_state:`Object state`,plugin:`Plugin`,ptz_autotrack:`Autotrack`,plugin_settings:`Plugin settings`,sensor_settings:`Sensor settings`,virtual_sensor_created:`Virtual sensor created`,source_delete:`Remove Source`,source_delete_confirm:`Remove the source "{name}"? The change applies when you save.`,virtual_sensor_name_placeholder:`e.g. Front Door`,general_hint:`Changes here only affect how the camera appears in camera.ui. Disabling a camera stops all streams and detections until it is enabled again.`,branding_hint:`Purely informational and has no effect on functionality. Useful to keep track of your hardware.`,interface_hint:`Affects playback and layout, not the camera itself. Adjust the streaming mode if live video does not start reliably on your devices.`,detection_hint:`Defines how sensitive this camera reacts to events. Higher confidence and longer timeouts mean fewer but more reliable events.`,ptz_autotrack_hint:`When enabled, the camera automatically pans to keep selected object types in view.`,recording:`Recording`,recording_hint:`Controls if and how this camera is recorded. An installed NVR plugin does the recording.`,recording_requires:`No NVR plugin assigned. These settings apply as soon as one is installed.`,zones_hint:`Without zones, the whole image triggers events. Zones restrict detections to the areas that matter, ignore zones drop detections inside them, and lines report objects crossing them.`,snapshot_hint:`Snapshots are used for previews and notifications. Shorter intervals keep them fresh but increase load on the camera.`,frame_worker_hint:`The frame worker analyzes the video stream for detections. Only change these values if detections are delayed or the system load is too high.`,zones_empty:`No zones or lines on this camera yet.`,zone_entry_zone:`Zone`,zone_entry_privacy_mask:`Ignore zone`,zone_entry_line:`Line crossing`,zone_entry_delete:`Delete`,zone_entry_delete_confirm:`Are you sure you want to delete this entry?`,recordings:`Recordings`,settings:`Settings`,siren_state:`Siren state`,source:`Source`,snapshot:`Snapshot`,streaming_mode:`Streaming mode`,unknown:`Unknown`,zones:`Zones`,detected:`Detected`,active:`Active`,ringing:`Ringing`,open:`Open`,closed:`Closed`},camera_table:{cameras:`Cameras`,name:`Name`,idle:`Idle`,offline:`Offline`,online:`Online`,connecting:`Connecting`,partial:`Partial`,error:`Error`,status:`Status`},detection_sensor:{detected:`Detected`,idle:`Idle`},battery_info:{charging:`Charging...`,fully_charged:`Fully charged`,not_chargeable:`Not chargeable`,critically_low:`Critically low`,low:`Low`,ready:`Ready`},charts:{no_data:`No data available`},contact_sensor:{open:`Open`,closed:`Closed`},occupancy_sensor:{occupied:`Occupied`,empty:`Empty`},smoke_sensor:{detected:`Smoke Detected`,clear:`Clear`},binary_sensor:{detected:`Triggered`,clear:`Clear`},leak_sensor:{detected:`Leak Detected`,clear:`Clear`},garage_control:{open:`Open`,closed:`Closed`,opening:`Opening`,closing:`Closing`,stopped:`Stopped`},detection:{detected:`Detected`,idle:`Idle`},detection_interface:{audio_detected:`Audio detected`,audio_not_detected:`Audio not detected`,audio_required:`Audio required`,detect:`Detect`,drop_or_select_audio_to_detect:`Drop or select audio to detect`,drop_or_select_image_for_semantic_search:`Drop or select image for semantic search`,drop_or_select_image_to_classify:`Drop or select image to classify`,drop_or_select_image_to_detect_faces:`Drop or select image to detect faces`,drop_or_select_image_to_detect_license_plates:`Drop or select image to detect license plates`,drop_or_select_image_to_detect_objects:`Drop or select image to detect objects`,drop_or_select_video_to_detect_motion:`Drop or select video to detect motion`,file_size_error:`File size error`,image_required:`Image required`,interface_config:`Interface configuration`,no_interface_config:`No interface configuration available`,only_one_audio_allowed:`Only one audio allowed`,only_one_image_allowed:`Only one image allowed`,only_one_video_allowed:`Only one video allowed`,video_required:`Video required`},notification_interface:{template:`Notification template`,title:`Title`,title_required:`Title is required`,subtitle:`Subtitle`,body:`Body`,severity:`Severity`,severity_info:`Info`,severity_warn:`Warning`,severity_error:`Error`,severity_critical:`Critical (DND-bypass)`,tag:`Tag`,image_url:`Image URL`,deep_link:`Deep link`,data:`Data`,data_key:`Key`,data_value:`Value`,add_data:`Add field`,targets:`Targets`,targets_hint:`Pick which devices receive this test. Leave empty to send to all registered devices.`,all_devices:`All devices`,no_devices:`No devices registered for this notifier`,settings:`Notifier settings`,send_test:`Send test`,sent:`Test notification sent`},clip_interface:{enter_query:`Describe what you see...`,search:`Search`},doorbell_trigger:{ringing:`Ringing!`,ready:`Ready`},dialog:{open:`Open`,components:{new_camera:{add_camera:`Add camera`,add_camera_description:`Add a camera connected to your local network`,camera:`Camera`,discover_cameras:`Discover cameras`,discover_cameras_description:`Search for cameras in your local network`,no_cameras_found:`No cameras found`,no_schema_available:`No connection form available for this device type`,protocol_info:`Information about the selected protocol`,scan_again:`Scan again`,search_camera:`Search camera`,source:`Source`,test_source:`Test camera source`,title:`New camera`,unknown:`Unknown`}},message:{confirm_clear_log:`Are you sure you want to clear the log?`,confirm_remove:`Are you sure you want to remove this camera?`,confirm_remove_selected:`Are you sure you want to remove {count} camera(s)?`,confirm_remove_layout:`Are you sure you want to remove this layout?`,confirm_reset_server:`Are you sure you want to reset the server?`,confirm_restart_go2rtc:`Are you sure you want to restart the Go2RTC?`,confirm_restart_plugin:`Are you sure you want to restart this plugin?`,confirm_restart_server:`Are you sure you want to restart the server?`,confirm_restore:`Are you sure you want to restore this backup?`,confirm_delete_backup:`Are you sure you want to delete "{filename}"?`,confirm_uninstall_plugin:`Are you sure you want to uninstall this plugin?`,uninstall_remove_storage:`Also delete stored data`,uninstall_remove_storage_hint:`Permanently removes this plugin's settings, databases and caches.`,compatibility_engine:`Requires {engine} {required} (installed: {current})`,confirm_unregister_server:`Are you sure you want to unregister the server?`,confirm_enable_cloud:`Allow remote access to this server via the camera.ui cloud?`,confirm_disable_cloud_remote:`Disabling cloud access will end your current remote session. You will be redirected to the cloud sign-in. Continue?`,confirm_disable_cloud_local:`Disabling cloud access will disconnect remote sessions that use the cloud. Local connections remain unaffected. Continue?`,intercom_info:`Speak simultaneously to all cameras in this view that have intercom`},title:{config:`Configuration`,confirm:`Confirm`,details:`Details`,create_new_user:`New user`,edit_dnd:`Edit DND`,create_room:`New Room`,edit_layout:`Edit layout`,edit_user:`Edit user`,edit_view:`Edit view`,information:`Information`,install:`Install`,install_version:`Install version`,intercom:`Intercom`,log:`Log`,new_dnd:`New DND`,new_view:`New view`,new_zone:`New zone`,plugin_config:`Plugin config`,preview:`Preview`,remove_layout:`Remove layout`,reset_server:`Reset server`,restart:`Restart`,result:`Result`,search_plugin:`Search plugin`,update:`Update`,unknown:`Unknown`,unregister_server:`Unregister server`,zone:`Zone`,zone_editor:`Zone editor`}},form:{button:{add:`Add`,add_source:`Add source`,create_room:`Create new room`,add_view:`Add view`,apply:`Apply`,back:`Back`,biometric_login:`Sign in with Face ID`,cancel:`Cancel`,connect_cloudflare:`Connect Cloudflare`,copy:`Copy`,copy_url:`Copy URL`,disable:`Disable`,disconnect:`Disconnect`,open_in_browser:`Open in browser`,test_connection_success:`Success`,test_connection_error:`Error`,enable:`Enable`,change_view:`Change view`,clear:`Clear`,close:`Close`,collapse:`Collapse`,continue:`Continue`,create_new_user:`Create new user`,download:`Download`,download_backup_archive:`Download backup archive`,edit:`Edit`,edit_zones:`Edit zones`,expand:`Expand`,finish:`Finish`,go_to_message:`Go to message`,home:`Home`,install:`Install`,login:`Login`,logout:`Logout`,logout_all:`Logout all`,manage:`Manage`,mark_as_read:`Mark as read`,next:`Next`,previous:`Previous`,register_server:`Register server`,reconnect_server:`Reconnect`,reload:`Reload`,remove:`Remove`,reset:`Reset`,restart:`Restart`,restore_backup_archive:`Restore backup archive`,restore_and_restart:`Restore and restart`,run_now:`Run now`,save:`Save`,save_and_restart:`Save and restart`,test_connection:`Test connection`,update_profile:`Update profile`,change_password:`Change password`,update:`Update`,uninstall:`Uninstall`,unregister:`Unregister`,unregister_server:`Unregister server`},error:{no_cameras_selected:`No cameras selected`,no_view_selected:`No view selected`},hint:{aspect_ratio:`Forces the camera aspect ratio to the selected value`,aspect_ratio_custom:`Custom ratio ({ratio}:1) applied`,aspect_ratio_invalid:`Use a width:height ratio, e.g. 16:9 or 21:9`,aspect_ratio_required:`Enter a ratio like 16:9`,audio_codec:`The audio codec detected for this stream`,auto_refresh:`Automatically refreshes the snapshot at regular intervals`,cache_time:`Time in seconds used for the camera image cache`,camera_name:`Unique name to identify this camera in the system`,room:`Assign this camera to a room for grouping`,room_select:`Select a room or create a new one`,confidence:`The required confidence level for object detection`,connections:`Number of active connections currently using this stream`,cloud_access_enabled_info:`Enables the cloud access for this server`,cloudflare_info:`Enables the access to the server via Cloudflare`,cloudflare_mode_info:`Provides a public hostname through Cloudflare's network.`,cloudflare_url_info:`Ephemeral public URL — changes on every restart.`,cloudflare_variant_quick:`A quick ephemeral tunnel without a Cloudflare account.`,cloudflare_variant_token:`Your own domain via a tunnel token from the Cloudflare dashboard.`,cloudflare_variant_managed:`Your own domain via OAuth login. Tunnel and DNS are set up automatically.`,cloudflare_hostname_info:`The domain must already be set up as a zone in your Cloudflare account.`,cloudflare_token_info:`From the Cloudflare dashboard.`,cloudflare_tunnel_id_info:`Identifier of the currently active tunnel.`,cloudflare_token_already_set:`Token is set. Leave empty to keep, or type a new token to replace.`,cloudflare_managed_idle:`Click Connect to authorise this server with your Cloudflare account.`,cloudflare_managed_awaiting_login:`Open the URL below in a browser and authorise the zone for "{hostname}".`,cloudflare_managed_creating_tunnel:`Creating tunnel...`,cloudflare_managed_setting_dns:`Setting up DNS record for {hostname}...`,cloudflare_managed_running:`Tunnel is running.`,custom_domain_info:`Enables the access to the server via a custom domain`,custom_domain_mode_info:`Use your own domain pointing to this server's HTTPS port via DNS or a reverse proxy.`,default_landing_page:`The page shown after login and when opening camera.ui`,default_settings_page:`The default page shown when opening settings`,table_rows:`How many rows a table shows per page`,disable_camera:`Deactivates the camera and stops all activities. The camera will still be displayed`,snooze_camera:`Pauses all detections. Streams and snapshots remain active.`,suppress_static:`Objects that stay put across events — like a car parked in the driveway — don't trigger new object events until they move again.`,ptz_autotrack:`Automatically follow detected objects using the camera's pan/tilt controls.`,ptz_autotrack_requires:`Requires a PTZ-capable camera with an assigned PTZ plugin.`,recording_enabled:`Record this camera.`,recording_mode:`Continuous records around the clock, event only around detections, adhoc only when started manually.`,recording_prebuffer:`Seconds of video kept before an event.`,recording_sources:`Stream qualities that get recorded. The lowest one is used for fast scrubbing.`,ptz_autotrack_target_labels:`Which object types the camera should follow.`,ptz_autotrack_min_confidence:`Only track detections with at least this confidence score.`,ptz_autotrack_trigger_dead_zone:`Target must leave this zone around the frame center before the camera starts moving. Larger values = calmer camera, smaller values = tighter centering.`,ptz_autotrack_tracking_speed:`How aggressively the camera moves to re-center the target. Higher = snappier, lower = smoother. Only for cameras that steer by continuous motion, others pick their own speed.`,ptz_autotrack_lead_ms:`How far ahead the camera aims along a moving target's path. The default covers the time the camera needs to move and settle. Lower it if the camera overshoots, raise it for fast targets. 0 turns prediction off.`,ptz_autotrack_pan_rate:`Calibrates how far each move step travels for your camera. Lower it if the camera stops short of the target, raise it if it overshoots.`,ptz_autotrack_return_home:`Move the camera back to its home position when no target is detected for a while.`,ptz_autotrack_home_wait:`How long to wait without a target before returning to the home position.`,frameworker_fps:`The number of frames per second used for the frame worker. '0' uses the native frame rate`,decoder_hardware:`Hardware used to decode this camera for detection. Auto picks the best available. Applies on the machine that decodes this camera (server or its worker).`,decoder_device:`Which device the backend opens, for example 0 for the first GPU or /dev/dri/renderD128. Empty uses the backend default. Falls back to Auto if not usable.`,worker_decoder_hardware:`Hardware used while this camera is decoded on its assigned worker. Same as server uses the selection above.`,hq_snapshots:`Capture event thumbnails from the highest-resolution stream.`,motion_resolution:`Resolution preset for motion detection (low: fast, medium: balanced, high: accurate)`,hot_mode:`Keeps the connection to the camera active to minimize delay`,motion_timeout:`Time in seconds after the last motion trigger before the motion event ends (min. 10s)`,audio_timeout:`Time in seconds after the last audio trigger before the audio event ends (min. 10s)`,audio_min_decibels:`Audio frames below this volume level (in dBFS) are skipped. -100 = silence, 0 = maximum`,audio_confidence:`Recognized sounds below this confidence are ignored for events and automations`,face_confidence:`Faces below this confidence are ignored for events and automations`,plate_confidence:`Plate readings below this text recognition confidence are ignored`,plate_min_length:`Plate readings shorter than this are dropped as fragments`,sensor_timeout:`Time in seconds after the last sensor trigger before the event ends (min. 10s)`,sensor_triggers:`Select sensors that should also trigger the detection cascade (e.g., a contact sensor on a door triggers object detection)`,sensor_triggers_placeholder:`Select sensor triggers...`,onvif_url:`ONVIF-compatible URL for integration with other systems`,navbar_stay_collapsed:`Keeps the navbar collapsed, even on larger screens`,record_logs:`Record app logs so you can view and share them on the Console page for troubleshooting`,debug_verbose:`Enable verbose debug-level logs`,port_forward_info:`Enables the port forwarding for this server`,pip_source:`Select a camera source to display as Picture-in-Picture overlay`,refresh_interval:`Interval in seconds for automatic snapshot refresh`,rtsp_url:`RTSP URL for direct access to this stream from external applications`,preload:`Preloads the camera stream to reduce delay when opening the camera view`,muted:`Removes the audio track from this source`,show_bottombar_on_mobile:`Shows the bottom bar on mobile devices`,show_camera_events:`Shows camera events in the camera view`,source_name:`Unique identifier for this camera source`,source_protocol:`The protocol type of the stream source`,source_role:`Determines how this source is used (high/mid/low resolution for streaming, snapshot for images)`,source_url:`Paste the full stream URL including the protocol, e.g. rtsp://user:pass{'@'}192.168.1.50:554/stream`,source_detected_protocol:`Detected protocol: {protocol}`,source_urls:`Add more than one URL to let go2rtc combine codecs (e.g. video from one, audio from another) for optimal playback`,streaming_mode:`Stream transport protocol for the user interface. In 'auto' mode, the best mode is automatically selected`,streaming_source:`Camera source used for the stream — choose high, mid, or low resolution`,system_preference:`System setting for the user interface`,type_and_enter:`Type and press Enter`,use_for_snapshot:`Uses this source for snapshots (if no other suitable source exists)`,video_codec:`The video codec detected for this stream`},label:{aspect_ratio:`Aspect ratio`,aspect_ratio_custom:`Custom ratio`,audio_codec:`Audio codec`,auto_refresh:`Auto refresh`,cache_time:`Cache time`,camera:`Camera`,cameras:`Cameras`,changelog:`Changelog`,labels:`Labels`,cloudflare:`Cloudflare`,cloudflare_url:`Cloudflare URL`,cloudflare_variant:`Cloudflare variant`,cloudflare_variant_quick:`Quick Tunnel`,cloudflare_variant_token:`Named Tunnel (Token)`,cloudflare_variant_managed:`Named Tunnel (OAuth)`,hostname:`Hostname`,tunnel_id:`Tunnel ID`,tunnel_token:`Tunnel Token`,color:`Color`,confidence:`Object Confidence`,connections:`Connections`,stream_status:`Stream Status`,custom_domain:`Custom domain`,default_landing_page:`Start page`,default_settings_page:`Default Settings page`,table_rows:`Table rows per page`,disabled:`Disabled`,snooze:`Snooze Detections`,suppress_static:`Ignore stationary objects`,ptz_autotrack:`PTZ Autotrack`,ptz_autotrack_enabled:`Enable autotrack`,recording_enabled:`Enable recording`,recording_mode:`Recording mode`,recording_prebuffer:`Pre-buffer`,recording_sources:`Recorded streams`,ptz_autotrack_target_labels:`Target Labels`,ptz_autotrack_min_confidence:`Minimum Confidence`,ptz_autotrack_trigger_dead_zone:`Dead Zone`,ptz_autotrack_tracking_speed:`Tracking Speed`,ptz_autotrack_lead_ms:`Motion Prediction`,ptz_autotrack_pan_rate:`Pan-Rate Calibration`,ptz_autotrack_return_home:`Return to home position`,ptz_autotrack_home_wait:`Wait before returning`,disconnected:`Disconnected`,domain:`Domain`,enabled:`Enabled`,external_port:`External port`,external_url:`External URL`,firmware_version:`Firmware version`,fps:`FPS`,decoder_hardware:`Decoder hardware`,decoder_device:`Decoder device`,worker_decoder_hardware:`Decoder hardware (worker)`,worker_decoder_device:`Decoder device (worker)`,decoder_same_as_server:`Same as server`,hardware_version:`Hardware version`,hot_mode:`Hot mode`,hq_snapshots:`HQ event thumbnails`,language:`Language`,language_system:`System default`,layout_name:`Layout name`,manufacturer:`Manufacturer`,model:`Model`,motion_timeout:`Motion timeout`,audio_timeout:`Audio timeout`,audio_min_decibels:`Min. volume (dBFS)`,audio_confidence:`Audio confidence`,face_confidence:`Face confidence`,plate_confidence:`Plate confidence`,plate_min_length:`Min. plate length`,sensor_timeout:`Sensor timeout`,sensor_triggers:`Sensor Triggers`,name:`Name`,room:`Room`,room_default:`Default`,navbar_stay_collapsed:`Keep navbar collapsed`,record_logs:`Record logs`,debug_verbose:`Verbose logging`,new_password:`New password`,new_password_confirm:`Confirm new password`,none:`None`,onvif_url:`ONVIF URL`,password:`Password`,pip_source:`PiP Source`,port_forward:`Port forward`,preload:`Preload`,muted:`Mute audio`,refresh_interval:`Refresh interval`,remember_me:`Remember me`,motion_resolution:`Motion Resolution`,role:`Role`,rtsp_url:`RTSP URL`,select_all:`Select all`,select_cameras:`Select cameras`,serial_number:`Serial number`,server_addresses:`Server addresses`,server_version:`Server version`,settings:`Settings`,show_bottombar_on_mobile:`Show bottombar on mobile`,show_camera_events:`Show camera events`,source:`Source`,source_name:`Source name`,source_role:`Source role`,sources:`Sources`,streaming_mode:`Streaming mode`,streaming_source:`Streaming source`,support_url:`Support URL`,system_preference:`System preference`,theme:`Theme`,token:`Token`,type:`Type`,unknown:`Unknown`,url:`URL`,use_for_snapshot:`Use for snapshot`,username:`Username`,version:`Version`,video_codec:`Video codec`,views:`Views`,zone_name:`Zone name`},placeholder:{search:`Search...`},tooltip:{activity_mode_activity:`Activity`,activity_mode_always_on:`Always On`,activity_mode_standby:`Standby`,clear:`Clear`,console:`Console`,contain:`Contain`,cancel_selection:`Cancel selection`,select_cameras:`Select cameras`,select_all:`Select all cameras`,deselect_all:`Deselect all cameras`,snooze_selected:`Snooze detections for selected cameras`,unsnooze_selected:`Resume detections for selected cameras`,recording_on_selected:`Enable recording for selected cameras`,recording_off_selected:`Disable recording for selected cameras`,copied:`Copied`,copy_all:`Copy all`,delete:`Delete`,delete_selected:`Remove selected cameras`,disable_selected:`Disable selected cameras`,enable_selected:`Enable selected cameras`,disable_drag:`Disable drag`,disabled:`Disabled`,download:`Download`,edit:`Edit`,enable_drag:`Enable drag`,view_default:`Show all cameras`,view_grouped:`Group by room`,exclude:`Exclude`,finish:`Finish`,fullscreen_off:`Fullscreen off`,fullscreen_on:`Fullscreen on`,hide_timeline:`Hide timeline`,include:`Include`,intercom:`Intercom`,intersect:`Intersect`,logout:`Logout`,mode:`Mode`,mute:`Mute`,new:`New`,nvr_settings:`NVR Settings`,privacy_mask:`Ignore zone`,public_mask:`Detection zone`,resolution:`Resolution`,restart:`Restart`,show_timeline:`Show timeline`,show_pip:`Show PiP`,hide_pip:`Hide PiP`,source_role_auto:`Auto`,source_role_low:`Low Resolution`,source_role_mid:`Mid Resolution`,source_role_high:`High Resolution`,source_role_snapshot:`Snapshot`,source_role_unknown:`Unknown`,streaming_mode_auto:`Auto`,streaming_mode_mse:`MSE`,streaming_mode_unknown:`Unknown`,streaming_mode_webcodecs:`WebCodecs`,streaming_mode_webrtc:`WebRTC`,undo:`Undo`,unmute:`Unmute`,update_available:`Update available`,zoom_in:`Zoom in`,zoom_out:`Zoom out`}},notification_menu:{clear_notifications:`Clear notifications`,mark_all_read:`Mark all as read`,mark_read:`Mark as read`,delete:`Delete`,debug:`Debug`,error:`Error`,info:`Info`,disabled:`Notifications are turned off`,disabled_hint:`Enable notifications to receive alerts here.`,open_settings:`Open settings`,no_notifications:`No notifications`,notifications:`Notifications`,short_days:`d`,short_hours:`hr`,short_minutes:`min`,short_months:`mo`,short_weeks:`wk`,short_years:`yr`,verbose:`Verbose`,warn:`Warning`},options_sidebar:{segment_tab_default:`Default`,segment_tab_overview:`Overview`,segment_tab_plugins:`Plugins`,segment_tab_settings:`Settings`,segment_tab_sources:`Sources`},player:{activity_mode_activity:`Activity`,activity_mode_always_on:`Always On`,activity_mode_standby:`Standby`,add_shortcut_info:`Click on any place in the video to add a shortcut`,ai_descriptions:`AI descriptions`,capture_snapshot:`Capture snapshot`,cast:`Play on TV`,cast_failed:`Cast failed`,cast_sent:`Playing on {name}`,codec_degraded:`H.265 not supported here, showing: {quality}`,codec_unsupported:`This stream uses a codec this device cannot play`,codec_unsupported_recording:`This recording uses a codec this device cannot play`,copied:`Copied`,detections:`Detections`,expand:`Expand`,fast_forward:`Fast Forward 30s`,hide_pip:`Hide Picture-in-Picture`,edit_shortcuts:`Edit Shortcuts`,finish_editing:`Finish Editing`,hide_timeline:`Hide timeline`,live:`Live`,license_required:`License required`,log:`Log`,no_recording:`No recording`,playback_failed:`Playback failed`,open_camera:`Open camera`,options:`Options`,ptz:`PTZ`,ptz_go_to_home:`Go to home`,rewind:`Rewind 30s`,reconnecting:`Reconnecting...`,refresh_snapshot:`Refresh snapshot`,settings:`Settings`,share_camera:`Share Camera`,shortcuts:`Shortcuts`,show_pip:`Show Picture-in-Picture`,show_timeline:`Show timeline`,speed:`Speed`,shrink:`Shrink`,source_role_auto:`Auto`,source_role_low:`Low Resolution`,source_role_mid:`Mid Resolution`,source_role_high:`High Resolution`,source_role_snapshot:`Snapshot`,source_role_unknown:`Unknown`,stream_info:`Stream info`,stream_paused:`Stream paused to conserve resources. Click on stream to resume.`,streaming_mode_auto:`Auto`,streaming_mode_mse:`MSE`,streaming_mode_unknown:`Unknown`,streaming_mode_webcodecs:`WebCodecs`,streaming_mode_webrtc:`WebRTC`,toggle_pip:`Toggle PiP`,timelapse:`Timelapse`,timelapse_min_duration:`Timelapse requires at least 1 hour`,timelapse_off:`Timelapse: Off`,export:`Export`,intercom:`Intercom`,export_selection:`Export selection`,zones:`Zones`,heatmap:`Heatmap`,more:`More`,zoom_in:`Zoom in`,zoom_out:`Zoom out`},lock:{status_locked:`Locked`,status_unlocked:`Unlocked`,status_unknown:`Unknown`,status_locking:`Locking...`,status_unlocking:`Unlocking...`},security_system:{alarm_triggered:`Alarm triggered!`,reset:`Reset`,off:`Off`,home:`Home`,away:`Away`,night:`Night`,status_home_armed:`Home (Armed)`,status_away_armed:`Away (Armed)`,status_night_armed:`Night (Armed)`,status_disarmed:`Disarmed`,status_alarm:`ALARM!`,status_unknown:`Unknown`,status_arming:`Arming...`,status_disarming:`Disarming...`},oauth:{dialog_title:`Connect cloud account`,intro:`This plugin connects to {idp} to authorize:`,enter_code_at:`Open the page below and enter the code:`,waiting:`Waiting for authorization…`,connect:`Connect`,disconnect:`Disconnect`,connected_as:`Connected as {email}`,tooltip_connect:`Connect cloud account`,tooltip_connected:`Connected as {email}`,tooltip_authorizing:`Authorizing — click to view`,tooltip_error:`Last authorization attempt failed`,error_access_denied:`Authorization was denied`,error_expired:`The code expired — please try again`,error_generic:`Authorization failed`},plugin_card:{author:`Author`,compat_engine:`Requires {engine} {required} (currently {current})`,compat_platform:`Not supported on this system — requires {requirement}`,compat_protocol_plugin:`Built for an older camera.ui plugin API, update the plugin`,compat_protocol_server:`Built for a newer camera.ui plugin API, update camera.ui`,installed:`Installed`,no_description:`No description available`,restart:`Restart`,restart_required:`Restart required to apply the installed version`,update_now:`Update to v{version}`,update_queued:`Waiting in queue`,update_running:`Update running, show progress`,update_progress_title:`Updating {name}`,select_version:`Select version`,settings:`Settings`,start:`Start`,status_disabled:`Disabled`,status_error:`Error`,status_incompatible:`Incompatible with this system — assign it to a compatible worker`,status_ready:`Ready`,status_server_update_required:`Not started, needs a newer camera.ui`,status_started:`Started`,status_starting:`Starting`,status_stopped:`Stopped`,status_stopping:`Stopping`,status_unknown:`Unknown`,status_update_required:`Not started, needs a plugin update`,stop:`Stop`,uninstall:`Uninstall`,update:`Update`,update_available:`Update available`,updated:`Updated`,version:`Version`},plugin_search:{bugs:`Report a bug`,compatible_system:`Runs on this system`,incompatible_system:`Not compatible with this system`,incompatible_worker_hint:`You can still install it and run it on a compatible worker — assign it under Workers after installing.`,incompatible:`Incompatible`,requires_newer_server:`Needs newer camera.ui`,requires_newer_server_hint:`This plugin needs a newer camera.ui version. Update camera.ui first, then install it.`,category_ai_model:`AI Model`,category_automation:`Automation`,category_camera_source:`Camera Source`,category_detection:`Detection`,category_notification:`Notification`,category_other:`Other`,category_recording:`Recording`,category_utility:`Utility`,downloads_per_week:`{count} / week`,featured:`Featured`,filter_all_categories:`All categories`,filter_all_trust:`All sources`,filter_category:`Category`,filter_trust:`Trust`,homepage:`Homepage`,in_progress:`In progress`,plugins:`Plugins`,refresh:`Refresh`,repository:`Repository`,screenshots:`Screenshots`,sort_by:`Sort by`,sort_downloads:`Most downloaded`,sort_name:`Name`,sort_updated:`Recently updated`,trust_community:`Community`,trust_community_description:`Community plugin — not reviewed by the camera.ui team. Install at your own discretion.`,trust_official:`Official`,trust_official_description:`Official plugin published under the {'@'}camera.ui scope.`,trust_verified:`Verified`,trust_verified_description:`Community plugin reviewed and vouched for by the camera.ui team.`,updated_ago:`updated {time}`},plugin_types:{hub:`Hub`,cameraController:`Camera Controller`,motionDetection:`Motion Detection`,objectDetection:`Object Detection`,audioDetection:`Audio Detection`,ptz:`PTZ`},process_table:{empty:`No data available`,status_error:`Error`,status_ready:`Ready`,status_started:`Started`,status_starting:`Starting`,status_stopped:`Stopped`,status_stopping:`Stopping`,status_unknown:`Unknown`,system:`System`,title_cpu:`CPU`,title_cpu_load:`CPU load`,title_memory:`Memory`,title_memory_load:`Memory load`,title_name:`Name`,title_pid:`PID`},timeline:{fine_scrubbing:`Fine Scrubbing`,filter_events:`Events`,filter_cameras:`Cameras`,filter_scope_camera:`Shown camera only`,filter_scope_all:`All cameras in view`,type_motion:`Motion`,type_person:`Person`,type_face:`Face`,type_vehicle:`Vehicle`,type_animal:`Animal`,type_package:`Package`,type_audio:`Audio`,type_license_plate:`License Plate`,type_contact:`Contact`,type_doorbell:`Doorbell`,type_switch:`Switch`,type_light:`Light`,type_siren:`Siren`,type_security_system:`Security System`,"type_line-crossing":`Line Crossing`,type_smoke:`Smoke`,type_gas:`Gas`,type_carbonMonoxide:`Carbon Monoxide`,type_heat:`Heat`,type_leak:`Leak`,type_cold:`Cold`,type_vibration:`Vibration`,type_tamper:`Tamper`,type_problem:`Problem`,live:`Live`,today:`Today`,yesterday:`Yesterday`},toast:{backup_downloaded:`Backup file download successfully`,backup_restored:`Backup file restored successfully`,backup_scheduler_saved:`Backup scheduler updated`,backup_created:`Backup created successfully`,backup_deleted:`Backup deleted`,camera_added:`Camera added successfully`,camera_add_failed:`Failed to add camera`,camera_removed:`Camera removed successfully`,camera_updated:`Camera updated successfully`,cameras_removed:`Cameras removed successfully`,config_deleted:`Configuration deleted successfully`,config_go2rtc_deleted:`Go2RTC configuration deleted successfully`,config_go2rtc_updated:`Go2RTC configuration updated successfully`,config_updated:`Configuration updated successfully`,copied:`Copied`,copy_failed:`Copy failed`,error_see_console:`Error, see console`,frame_worker_restarted:`Frame worker restarted successfully`,go2rtc_restarted:`Go2RTC restarted successfully`,log_cleared:`Log cleared successfully`,no_version_selected:`No version selected`,plugin_config_updated:`Plugin configuration updated successfully`,plugin_disabled:`Plugin disabled successfully`,plugin_enabled:`Plugin enabled successfully`,plugin_installed:`Plugin installed successfully`,plugin_removed:`Plugin removed successfully`,plugin_request_sent:`Plugin request sent successfully`,plugin_restarted:`Plugin restarted successfully`,plugin_settings_updated:`Plugin settings updated successfully`,plugin_started:`Plugin started successfully`,plugin_stopped:`Plugin stopped successfully`,plugins_removed:`Plugins removed successfully`,password_updated:`Password updated successfully`,profile_updated:`Profile updated successfully`,probe_failed:`Failed to probe the source — please try again`,remote_access_not_available:`Remote access is not available`,pair_expired:`Pair code expired — please try again`,pair_denied:`Pairing was denied`,pair_init_failed:`Failed to start pairing`,remote_registered:`Server registered successfully`,remote_unregistered:`Server unregistered successfully`,remote_updated:`Remote access updated successfully`,mqtt_updated:`MQTT settings updated successfully`,mqtt_test_success:`Connection to the MQTT broker succeeded`,mqtt_test_failed:`Connection failed: {message}`,remote_test_success:`Connection test succeeded`,remote_test_failed:`Connection test failed: {message}`,server_name_updated:`Server name updated successfully`,server_resetted:`Server reset successfully`,server_restarted:`Server restarted successfully`,server_updated:`Server updated successfully`,something_wrong_happened:`Something went wrong.`,title_error:`Error`,title_info:`Info`,title_success:`Success`,title_warn:`Warning`,update_available_title:`Update available`,update_installed_detail:`New version of camera.ui is ready.`,update_now:`Update now`,update_applying:`Applying update…`,user_added:`User added successfully`,user_logged_out:`User logged out successfully`,user_removed:`User removed successfully`,user_updated:`User updated successfully`,users_removed:`Users removed successfully`,validation_failed:`Validation failed. Check console for more information`,view_added:`View added successfully`,view_removed:`View removed successfully`,view_updated:`View updated successfully`,views_removed:`Views removed successfully`,zone_updated:`Zone updated successfully`,zone_removed:`Zone removed successfully`,line_updated:`Line updated successfully`},upload_files:{drop_or_select_file:`Drop or select file`,only_one_file_allowed:`Only one file allowed`},instance_switcher:{manage:`Manage Instances`,not_logged_in:`Not logged in`,session_expired:`Session expired`,switching_to:`Switching to`,go_back:`Go Back`},user_menu:{account:`Account`,admin_panel:`Adminpanel`,config:`Configuration`,console:`Console`,logs:`Logs`,logout:`Logout`,plugins:`Plugins`,reload:`Reload`},user_table:{title_address:`Address`,title_device:`Device`,title_kind:`Type`,title_username:`Username`,you:`You`},view_box:{available_streams:`Available streams`,no_cameras:`No cameras available`},zone_editor:{base_labels:`Base`,edit_zones:`Edit zones`,zone:`Zone`,tab_zones:`Zones`,tab_lines:`Lines`}},connection:{offline:`Offline`,reconnected:`Reconnected`,reconnecting:`Reconnecting...`,degraded:`Syncing...`,restarting:`Restarting...`,retry:`Retry`,connecting_remote:`Connecting to your home server...`,unreachable:`Cannot reach your home server`,pick_server:`Pick another server`},restore:{title:`Restoring backup`,phase_uploading:`Uploading backup...`,phase_restoring:`Restoring...`,phase_restarting:`Restarting server...`,dont_close:`Please don't close this window.`},instances:{local:`Local`,unreachable:`Cannot reach {name} from this device`,switch_timeout:`Switching to {name} timed out`,two_factor_title:`Two-Factor Authentication`,two_factor_hint:`The account on "{name}" is protected with two-factor authentication. Enter the 6-digit code from your authenticator app.`,two_factor_completed:`Connected to {name}`,two_factor_failed:`Two-factor verification failed. Please try again.`,insecure_handoff_title:`Switch to insecure instance?`,insecure_handoff_message:`{name} is served over an unencrypted HTTP connection. To switch, your browser will navigate to the instance and your session tokens will be transferred via the URL. They are stripped immediately afterwards, but may be visible in browser history for a short time. Continue?`,insecure_handoff_confirm:`Continue`},general:{loading:`Loading...`,role_admin:`Admin`,role_user:`User`},navigation:{about:`About`,sensors:`Sensors`,account:`Account`,adminpanel:`Adminpanel`,appearance:`Appearance`,backup:`Backup`,cameras:`Cameras`,camview:`Camview`,config:`Configuration`,console:`Console`,logs:`Logs`,extras:`Extras`,home:`Home`,nvr:`NVR`,plugins:`Plugins`,faces:`Faces`,menu:`Menu`,mqtt:`MQTT`,notifications:`Notifications`,permissions:`Permissions`,recordings:`Recordings`,remote:`Remote Access`,settings:`Settings`,system:`System`,automations:`Automations`,terminal:`Terminal`,user:`Users`,instances:`Instances`,workers:`Workers`},navigation_description:{account_description:`Manage account settings & experience.`,appearance_description:`Manage app appearance & interface.`,backup_description:`Manage, schedule backups & restore data.`,notifications_description:`Manage notification rules and devices.`,permissions_description:`Device permissions for microphone, location and notifications.`,mqtt_description:`Connect camera.ui to an MQTT broker.`,nvr_description:`Manage Network Video Recorder system.`,recordings_description:`Manage recordings & storage options.`,remote_access_description:`Manage remote access and connection settings.`,system_description:`Manage system, monitor status & tasks.`,user_description:`Manage users, roles & permissions.`},shares:{actions:`Actions`,code:`Access Code`,done:`Done`,create:`Create`,create_share:`Share Camera`,code_save_hint:`Save this code — it cannot be retrieved later.`,copy_link:`Copy link`,created:`Created`,days:`days`,expires:`Expires`,hour:`hour`,hours:`hours`,label:`Label`,label_placeholder:`Optional label`,link:`Share Link`,max_viewers:`Max Viewers`,no_shares:`No active share links`,revoke:`Revoke`,share_created:`Share link created`,share_revoked:`Share link revoked`,share:`Share`,share_camera:`Share Camera`,share_title:`Camera Stream`,source:`Source`,ttl:`Expires after`,unlimited:`Unlimited`,viewers:`Viewers`},views:{404:{error_message:`We've looked everywhere, but this page seems to be playing hide and seek... and it's winning! Let's get you back to somewhere that exists.`},adminpanel:{core:`Core`,frameworker:`Frameworker`,general:`General`,logged_in_users:`Logged in users`,no_core:`No core processes available`,no_frameworkers:`No frameworkers available`,no_plugins:`No plugins available`,no_system:`No system data available`,no_users:`No logged in users`,plugins:`Plugins`,title:`Adminpanel`},camera:{cameras:`Cameras`,camera_disabled:`This camera is disabled`,camera_disabled_hint:`Enable this camera to start the live stream and detection`,camera_snoozed:`Detections paused`,detections:`Detections`,events:`Events`,recordings:`Recordings`,shares:`Shares`,timeline:`Timeline`,title:`Camera`},cameras:{add_camera:`Add camera`,events:`Events`,get_started:`Get started`,new_camera:`New camera`,no_cameras:`No cameras available`,no_cameras_hint:`Add your first camera to start monitoring and recording.`,title:`Cameras`},devices:{address:`Address`,confirm:`Add camera`,confirm_title:`Confirm camera`,connect:`Connect`,device_hidden:`Device hidden`,device_unhidden:`Device unhidden`,hide:`Hide`,hide_hidden:`Hide hidden devices`,managed_source_hint:`This source is managed by camera.ui and cannot be edited.`,manufacturer:`Manufacturer`,model:`Model`,name:`Name`,native_id:`Native ID`,no_settings_required:`No additional settings required for this device.`,no_devices:`No devices found`,no_devices_hint:`Make sure your cameras are powered on and connected to the same network.`,no_schema:`No connection schema available for this device`,plugin:`Plugin`,provider:`Provider`,rescan:`Rescan`,rescan_error:`Rescan failed. See console for more information.`,rescan_success:`Rescan completed successfully`,scanning:`Scanning...`,scanning_hint:`Looking for cameras on your network. This may take a moment.`,show_hidden:`Show hidden devices`,status_added:`Added`,status_adopted_cameras:`Adopted cameras`,status_adopting:`Connecting...`,status_discovered:`Discovered`,no_discovered:`No devices discovered yet`,status_error:`Error`,status_unknown:`Unknown`,title:`Devices`,unhide:`Unhide`,unknown:`Unknown`},camview:{all_cameras:`All cameras`,cameras:`Cameras`,new_dnd:`New DND`,new_view:`New View`,rearrange:`Rearrange`,rearrange_done:`Done`,rearrange_auto:`Auto-arrange`,rearrange_fit_aspect:`Fit aspect ratios`,no_dnds_configured:`No DNDs configured`,no_views_configured:`No views configured`,no_cameras:`No cameras available`,title:`Camview`},config:{title:`Configuration`},console:{title:`Console`,copy:`Copy`,export:`Export / share`,source_logs:`Logs`,source_connection:`Connection`,clear:`Clear`,refresh:`Refresh`,empty:`No log entries yet.`,recording_off:`Recording is off — enable it in Settings → Appearance to capture logs.`,copied:`Logs copied`,copy_failed:`Copy failed`,cleared:`Logs cleared`,levels:`Levels`,level:{debug:`Debug`,log:`Log`,info:`Info`,warn:`Warning`,error:`Error`}},logs:{title:`Logs`,groups:{system:`System`,plugins:`Plugins`,cameras:`Cameras`}},home:{title:`Home`},terminal:{title:`Terminal`,connected:`Connected`,connecting:`Connecting...`,disconnected:`Disconnected`,new_tab:`New tab`,reconnect:`Reconnect`},sensors:{title:`Sensors`,search:`Search sensors`,no_sensors:`No sensors yet. Create a virtual sensor or install a sensor plugin.`,no_matches:`No sensors match the search or the active filter.`,name:`Name`,type:`Type`,plugin:`Plugin`,connected:`Connected`,disconnected:`Disconnected`,hide:`Hide sensor`,unhide:`Unhide sensor`,show_hidden:`Show hidden`,select:`Select sensors`,view_cards:`Card view`,view_table:`Table view`,hide_selected:`Hide selected`,unhide_selected:`Unhide selected`,delete_selected:`Delete selected`,delete_selected_confirm:`Delete {count} sensors? Connected plugin sensors are skipped.`,hide_selected_done:`{count} sensors hidden`,unhide_selected_done:`{count} sensors unhidden`,delete_selected_done:`{count} sensors deleted`,bulk_failed:`{count} sensors failed`,hide_hidden:`Hide hidden`,settings:`Sensor settings`,hide_camera_bound:`Hide camera sensors`,hide_camera_bound_hint:`Keep sensors that a plugin registered on a camera out of the list.`,unassigned:`Not assigned to a camera`,not_exposed:`Hidden from HomeKit, Home Assistant and MQTT`,owner_virtual:`Virtual`,assigned_cameras:`Assigned cameras`,assigned_cameras_placeholder:`Select cameras`,assigned_cameras_hint:`The sensor shows up on these cameras and can trigger their detection.`,assigned_cameras_locked_hint:`Registered on this camera by its plugin. The assignment cannot be changed.`,exposed:`Expose sensor`,exposed_hint:`Show in HomeKit, Home Assistant and MQTT.`,create_virtual:`Create virtual sensor`,delete:`Delete sensor`,delete_connected:`Connected sensors cannot be deleted.`,delete_confirm:`The sensor and its assignments are removed. A plugin sensor comes back when its plugin reconnects.`,history:`History`,history_empty:`No state changes recorded yet.`,control:`Control`,control_offline:`Sensor is not connected.`},automations:{title:`Automations`,select:`Select automations`,select_all:`Select all`,deselect_all:`Deselect all`,enable_selected:`Enable selected`,disable_selected:`Disable selected`,delete_selected:`Delete selected`,delete_selected_confirm:`Delete {count} selected automation(s)?`,run_history:`Run history`,no_runs:`No runs yet`,run_success:`Success`,run_error:`Error`,run_completed:`Completed`,run_skipped:`Skipped`,run_warnings:`Warnings`,create:`Create Automation`,delete:`Delete Automation`,delete_confirm:`Are you sure you want to delete this automation?`,duplicate:`Duplicate`,enable:`Enable`,disable:`Disable`,enabled:`Enabled`,disabled:`Disabled`,last_run:`Last run`,never_run:`Never`,requires_update:`This automation references a deleted camera or sensor and was disabled. Edit the flow to fix it.`,no_automations:`No automations yet`,search:`Search automations...`,flow_name_placeholder:`Automation name`,import_blueprint:`Import Blueprint`,import_success:`Blueprint imported successfully`,import_invalid:`Invalid blueprint file`,browse_community:`Browse community automations`},automation:{title:`Automation`,save:`Save`,saved:`Automation saved`,save_failed:`Failed to save automation`,triggered:`Automation triggered`,trigger_failed:`Failed to trigger automation`,output:`Output`,unsaved_title:`Unsaved Changes`,unsaved_message:`You have unsaved changes. Do you want to discard them?`,discard:`Discard`,run:`Run`,add_step:`Add Step`,suppress_duplicates:`Ignore repeated events`,suppress_duplicates_hint:`Skip identical trigger events that fire in quick succession.`,single_execution:`Wait for completion`,single_execution_hint:`Block new triggers while the automation is still running.`,undo:`Undo`,redo:`Redo`,export_blueprint:`Export Blueprint`,clear:`Clear`,clear_confirm:`Are you sure you want to remove all nodes and connections?`,delete_node:`Delete`,node_palette:`Nodes`,node_config:`Configuration`,no_nodes:`Drag a node from the sidebar to get started`,no_nodes_mobile:`Tap the + button to add a node`,no_node_selected:`Select a node to configure it`,untitled:`Untitled Automation`},firststeps:{complete:`Complete`,enjoy:`Enjoy!`,finish_message:`You have successfully completed the first steps. You can now start using the application.`,from_backup:`Restore from Backup`,new_installation:`New Installation`,slogan:`The modern solution for professional video surveillance.`,start:`Start`,start_message:`Please choose whether you want to start a new installation or restore from a backup.`,step_account:`Account`,step_appearance:`Appearance`,step_finish:`Finish`,step_welcome:`Welcome`,title:`First steps`,welcome_to:`Welcome to`},plugin:{changelog:`Changelog`,disabled_info:`Plugin is disabled`,no_cameras:`No cameras available`,no_changelog:`No changelog available`,no_readme:`No readme available`,no_settings:`No settings available`,assignment_requires_running:`Start the plugin to change camera assignments.`,nvr_settings_hint:`NVR settings are configured under Settings → Recordings.`,nvr_settings_button:`Open recording settings`,plugin_is_disabled:`Plugin is disabled`,readme:`Readme`,segment_tab_cameras:`Cameras`,segment_tab_interface:`Interface`,segment_tab_plugins:`Plugins`,segment_tab_settings:`Settings`,settings:`Settings`,title:`Plugin`,settings_tab_tooltip:`Plugin Settings`,cameras_tab_tooltip:`Camera Assignment`,motion_detection_tab_tooltip:`Motion Detection`,object_detection_tab_tooltip:`Object Detection`,audio_detection_tab_tooltip:`Audio Detection`,face_detection_tab_tooltip:`Face Detection`,license_plate_detection_tab_tooltip:`License Plate Detection`,classifier_detection_tab_tooltip:`Image Classification`,clip_detection_tab_tooltip:`CLIP Semantic Search`,notification_tab_tooltip:`Notifications`},plugins:{allow_build_scripts:`Allow plugin build scripts`,allow_build_scripts_hint:`Let plugins run install scripts and native builds when installing or updating. Only enable if you trust the plugins you install.`,beta_versions:`Beta versions`,beta_versions_hint:`Show pre-release versions in the plugin version picker and offer beta releases as available updates.`,no_plugins:`No plugins available`,search:`Search plugins...`,search_plugins:`Search plugins`,update_all:`Update all ({count})`,update_all_hint:`Update every plugin with a newer version, one after another`,update_all_done:`{count} plugins updated`,update_all_failed:`{count} updates failed`,view_cards:`Card view`,view_table:`Table view`,plugin:`Plugin`,version:`Version`,select:`Select plugins`,update_selected:`Update selected`,enable_selected:`Enable selected`,enable_selected_done:`{count} plugins enabled`,disable_selected:`Disable selected`,disable_selected_done:`{count} plugins disabled`,uninstall_selected:`Uninstall selected`,uninstall_selected_confirm:`Uninstall {count} plugins? Their settings are kept.`,uninstall_selected_done:`{count} plugins uninstalled`,bulk_failed:`{count} plugins failed`,settings:`Plugin settings`,title:`Plugins`},menu:{title:`Menu`,view_profile:`View profile`,reload:`Reload`,switch_server:`Switch server`,logout:`Logout`,section_app:`App`,section_system:`System`,section_actions:`Actions`},app_lock:{title:`App locked`,subtitle:`Authenticate to unlock camera.ui`,unlock:`Unlock`},about:{title:`About`,versions:`Versions`,version_app:`App`,version_server:`Server`},faces:{title:`Faces`,known_faces:`Known Faces`,unknown:`Unknown`,unknown_faces:`Unknown Faces`,no_faces_yet:`No faces enrolled yet.`,no_known_faces:`No known faces enrolled yet.`,no_unknown_faces:`No unknown faces detected.`,no_ungrouped_faces:`No ungrouped faces.`,clear_all:`Clear all`,add_face:`Add Face`,assign:`Assign`,skip:`Skip`,new_person:`+ New person`,images:`images`,training_images:`training images`,delete_person:`Delete Person`,name:`Name`,enter_name:`Enter name`,face_plugin:`Face Detection Plugin`,select_plugin:`Select plugin`,drop_image:`Drop image here or click to browse`,faces_detected:`face(s) detected`,no_face_detected:`No face detected in image`,enroll:`Enroll`,enter_person_name:`Enter person name`,face_enrolled:`Face enrolled successfully`,face_assigned:`Face assigned successfully`,person_deleted:`Person deleted`,image_removed:`Training image removed`,all_unknown_cleared:`All unknown faces cleared`,faces_in_cluster:`faces in group`,assign_cluster:`Assign group`,ungrouped:`Ungrouped`,select:`Select images`,discard:`Discard`,remove_from_cluster:`Remove from group`,show_all:`Show all ({count})`,show_less:`Show less`,rescan_events:`Rescan existing events`,rescan_complete:`{count} face(s) updated in existing events`,rescan_no_matches:`No new matches found`},recordings:{title:`Recordings`,export:{title:`Export recordings`,cameras:`Cameras`,cameras_placeholder:`Select cameras`,range:`Time range`,from:`From`,to:`To`,range_hint:`One file per camera and day — the first and last day cover the selected time, days in between are full days.`,invalid_range:`“To” must be after “From”.`,quality:`Quality`,quality_best:`Best quality`,quality_smallest:`Smallest files`,timelapse:`Timelapse`,timelapse_off:`Off`,result:`Result`,file:`file`,files:`files`,whole_day:`Full day`,no_cameras:`No cameras selected.`,no_range:`No time range selected.`,no_footage:`No recordings in the selected range.`,estimating:`Calculating…`,confirm:`Export`,plugin_missing:`NVR plugin is unavailable.`},search:`Search`,search_placeholder:`Search faces, plates, labels...`,download_failed:`Download failed`,filter_and:`AND`,filter_or:`OR`,semantic_search:`AI Search`,semantic_search_placeholder:`Describe what you're looking for...`,semantic_search_button:`Search`,min_match_score:`Min. Match Score`,semantic_search_hint:`e.g. "person with red jacket" or "delivery truck"`,cameras:`Cameras`,all_cameras:`All Cameras`,only_with_recordings:`Only with recording`,time_range:`Time Range`,time_1h:`1H`,time_1d:`1D`,time_1w:`1W`,time_1m:`1M`,event_type:`Labels`,type_person:`Person`,type_vehicle:`Vehicle`,type_animal:`Animal`,type_package:`Package`,type_other:`Other`,audio:`Audio`,audio_doorbell:`Doorbell`,audio_glass_break:`Glass Break`,audio_siren:`Siren`,audio_speaking:`Speaking`,audio_gunshot:`Gunshot`,audio_dog_bark:`Dog Bark`,audio_baby_cry:`Baby Cry`,audio_alarm:`Alarm`,audio_scream:`Scream`,audio_cat:`Cat`,audio_car_alarm:`Car Alarm`,audio_smoke_alarm:`Smoke Alarm`,attributes:`Attributes`,attr_face:`Face`,attr_license_plate:`License Plate`,sensor_events:`Triggers`,sensor_motion:`Motion`,sensor_audio:`Audio`,sensor_contact:`Contact`,sensor_doorbell:`Doorbell`,sensor_switch:`Switch`,sensor_light:`Light`,sensor_siren:`Siren`,sensor_security_system:`Security System`,sensor_line_crossing:`Line Crossing`,sensor_occupancy:`Occupancy`,sensor_smoke:`Smoke`,sensor_leak:`Leak`,sensor_gas:`Gas`,sensor_carbonMonoxide:`Carbon Monoxide`,sensor_heat:`Heat`,sensor_cold:`Cold`,sensor_vibration:`Vibration`,sensor_tamper:`Tamper`,sensor_problem:`Problem`,sensor_power:`Power`,sensor_lock:`Lock`,sensor_garage:`Garage`,grid_search:`Grid Search`,grid_clear:`Clear Selection`,confidence:`Confidence`,date:`Date`,download:`Download recording`,no_recordings:`No recordings found`,no_semantic_results:`No matching recordings found for your search`,ungroup:`Ungroup`,ungroup_hint:`One card per snapshot instead of per event`,only_with_recordings_hint:`Hide events without saved footage`,view_options:`View options`,result_count:`{count} recordings`,semantic_results:`{count} AI matches`,events_count:`{count} events`},login:{"2fa_backup_hint":`Use a backup code`,"2fa_backup_description":`Enter one of your 8-character backup codes`,"2fa_backup_placeholder":`Backup code`,"2fa_use_app":`Use your authenticator app`,"2fa_description":`Enter the 6-digit code from your authenticator app`,"2fa_title":`Two-Factor Authentication`,"2fa_invalid_code":`Invalid code. Please try again.`,"2fa_verify":`Verify`,biometric_reason:`Sign in to camera.ui`,biometric_save_title:`Use biometric login?`,biometric_save_description:`Save your credentials in this device's secure storage so you can sign in with Face ID or Touch ID next time.`,biometric_save_confirm:`Enable`,biometric_save_decline:`Not now`,invalid_credentials:`Invalid username or password`,searching_direct:`Searching for a direct connection to your server…`,offline_title:`Could not reach your server`,offline_description:`No direct route is available right now. Make sure the server is online and try again.`,offline_retry:`Retry`,pick_server:`Cloud`},settings:{app:`App`,available_updates:`Available updates`,available_updates_info:`Updates are available for camera.ui.`,beta_updates:`Beta updates`,beta_updates_info:`Receive pre-release versions before the general rollout — both server updates and, on the mobile app, over-the-air UI updates.`,certificate:`Certificate`,certificate_info:`Download the SSL certificate of the website here. By adding this certificate to your keychain or certificate management, the site is recognized as secure. This improves the browser experience and avoids security warnings.`,cloud:`Cloud`,connection:`Connection`,create_backup:`Create backup`,create_backup_info:`Create a backup of the current configuration. The archive contains your camera.ui storage directory, but not your recordings and their event history. Copy the recordings folder yourself to keep those. You can restore this later on any platform where camera.ui is running.`,edit:`Edit`,debugging:`Debugging`,interface:`Interface`,invalid_domain:`Invalid domain`,locale:`Locale`,network:`Network`,network_info:`Select which of this server's own IP addresses are used for local connections. Apps and browsers use these addresses to reach the server and its streams on your network. Leave empty to use all addresses.`,status_info:`Shows whether this server is registered with camera.ui cloud for remote access.`,server_name:`Server Name`,server_name_info:`Set a custom name for this server. This name is displayed in the cloud dashboard and helps you identify this server.`,server_name_label:`Name`,tunnel_status:`Tunnel`,tunnel_status_info:`Shows the status of the remote tunnel connection used for cloud access.`,tunnel_connected:`Connected`,tunnel_disconnected:`Disconnected`,cloudflare_login_waiting:`Waiting for authorisation...`,pair_instructions:`Scan the QR code, or open the pair URL below in a browser and sign in to your camera.ui account.`,pair_code:`Pair code`,pair_code_hint:`Valid for a limited time. The code is already included in the QR code and the pair URL.`,pair_url:`Pair URL`,pair_waiting:`Waiting for confirmation… ({remaining})`,not_registered:`Not registered`,needs_reauth:`Re-authentication required`,not_available_updates_info:`You are using the latest version of camera.ui`,password:`Password`,profile:`Profile`,registered:`Registered`,registered_users:`Registered users`,remote_access_info:`Configure the remote access settings here. These settings allow you to access your camera.ui environment from anywhere.`,remote_access_settings:`Remote access settings`,connection_status:`Connection status`,direct_connection:`Direct connection`,direct_connection_info:`Exposes this server with a public address so it can be reached from outside your local network.`,direct_override_active:`Direct access is kept on while cloud is enabled, so this server stays reachable over its external address.`,direct_override_fallback:`Your configured direct address was not reachable — a temporary Cloudflare tunnel is being used while cloud is enabled.`,external_url:`External URL`,external_url_info:`The public address this server is currently reachable at. In a fallback this is the temporary Cloudflare tunnel, not your configured one.`,connection_method:`Connection method`,connection_type:{local:`Local`,lan:`Local network`,external:`Remote`,cloud:`Cloud`},remove:`Remove`,reset_server:`Reset server`,reset_server_info:`By clicking this button you reset the configuration to the default values. This removes all your settings and data. This action cannot be undone.`,restart_server:`Restart server`,restart_server_info:`By clicking this button you restart the server. A loading screen will be displayed until the restart is complete. The page will then be automatically refreshed and available to you again.`,restore_backup:`Restore backup`,restore_backup_info:`Restore a backup archive you previously created with camera.ui. Your camera.ui configuration, database and user accounts will be restored. Recordings are not part of the archive.`,search_by_name:`Search by name`,searching_updates:`Searching for updates...`,server:`Server`,biometric:{title:`Biometric login`,label:`Use Face ID / Touch ID`,description:`Save your credentials in this device's secure storage so you can sign in with biometrics next time.`,enable_hint:`Sign out and sign back in to save your credentials for biometric login.`,cleared:`Saved credentials removed`},active_sessions:{title:`Active sessions`,empty:`No active sessions`,this_device:`This device`,revoke:`Sign out`,revoke_others_title:`Sign out other devices`,revoke_others_confirm:`This will sign out {count} other device(s). Continue?`,revoke_all_others:`Sign out {count} other device(s)`,revoke_others_success:`Other devices signed out`},api_tokens:{title:`API tokens`,info:`For external integrations like Home Assistant. Tokens have full account access and stay valid until revoked.`,empty:`No API tokens`,create:`Create token`,create_confirm:`Create`,name_label:`Name`,name_placeholder:`e.g. Home Assistant`,name_exists:`A token with this name already exists`,last_used:`Last used`,never:`Never`,revoke:`Revoke`,revoke_title:`Revoke API token`,revoke_confirm:`Integrations using "{name}" will stop working immediately. Continue?`,revoke_success:`API token revoked`,created_title:`API token created`,created_warning:`This token is only shown once. Copy it now and store it somewhere safe.`},scheduled_backup:`Backup scheduler`,scheduled_backup_info:`Automatically create backups on a schedule and keep only the newest archives`,backup_interval:`Frequency`,backup_interval_daily:`Daily`,backup_interval_weekly:`Weekly`,backup_interval_monthly:`Monthly`,backup_time:`Time`,backup_weekday:`Weekday`,backup_day_of_month:`Day of month`,backup_retention:`Keep backups`,backup_retention_hint:`Number of archives to keep — older ones are deleted automatically`,backup_destination:`Destination folder`,backup_destination_hint:`Absolute path on the server (e.g. a NAS mount). Leave empty for the default folder`,backup_last_run:`Last run: {info}`,backup_last_run_never:`never`,backup_existing:`Available backups`,status:`Status`,theme:`Theme`,title:`Settings`,title_account:`Account`,title_appearance:`Appearance`,title_backup:`Backup`,title_go2rtc:`Go2RTC`,title_notifications:`Notifications`,title_nvr:`NVR`,title_permissions:`Permissions`,title_recordings:`Recordings`,title_settings:`Settings`,notifications:{general:`General`,general_info:`The master switch enables or disables every notification at once — turning it off silences every source below. Quiet Hours suppress external delivery to your registered devices during the chosen daily window; only Critical-severity events break the silence. The in-app notification list always stays up to date regardless of Quiet Hours.`,enable:`Enable Notifications`,enable_info:`Turn this on to start receiving notifications for your account.`,os_permission_denied:`Notifications are blocked at the system level on this device.`,os_permission_link:`Open permissions`,enable_failed:`Could not enable notifications.`,this_device:`This device`,this_device_synced:`This device is set up to receive notifications.`,this_device_unsynced:`This device is not set up yet — sync it to receive notifications here.`,this_device_desktop:`Show desktop notifications on this computer while the app is running.`,sync:`Sync this device`,resync:`Re-sync`,quiet_hours:`Quiet Hours`,quiet_hours_info:`Suppress non-critical notifications during a daily window.`,from:`From`,to:`To`,timezone:`Timezone`,system_notifications:`System Notifications`,system_notifications_info:`Built-in events that camera.ui itself emits — typically lifecycle and update notices, like a plugin crash or a newer server version becoming available. Each entry can be toggled individually so you only get pinged for the things that matter to you.`,no_system_types:`No system notification types available.`,plugin_notifications:`Plugin Notifications`,plugin_notifications_info:`Enabled plugins are permitted to notify camera.ui about their own events — whenever something happens that may need your attention. Those notifications are then delivered according to your settings. Disabled plugins are silently ignored by the notification service.`,no_plugin_sources:`No plugins are currently allowed to publish notifications.`,devices:`Devices`,devices_info:`Registered devices are the destinations where notifications get delivered. Each device is owned by the plugin that registered it — the Plugin column tells you which one. Toggle the Active switch to pause delivery without unregistering, or use the trash icon to remove a device entirely.`,no_devices:`No notification devices registered yet.`,col_name:`Name`,col_plugin:`Plugin`,col_active:`Active`,revoke:`Revoke`,device_revoked:`Device revoked.`,revoke_failed:`Failed to revoke device.`,update_failed:`Failed to update device.`,save:`Save`,reset:`Reset`,saved:`Notification settings saved.`,save_failed:`Failed to save notification settings.`,system_types:{system_plugin_update_available:`Plugin updates available`,system_plugin_crashed:`Plugin crashed / recovered`,system_update_available:`Server update available`}},permissions:{general:`App permissions`,general_info:`What this device allows camera.ui to use. These are system permissions of your device, not server settings.`,microphone:`Microphone`,microphone_info:`Needed for two-way audio (intercom).`,location:`Location`,location_info:`Needed for location-based automations.`,notifications:`Notifications`,notifications_info:`Needed to show notifications on this device.`,state_granted:`Allowed`,state_denied:`Blocked`,state_prompt:`Not asked yet`,state_unknown:`Unknown`,request:`Request`,open_settings:`Open settings`,browser_hint:`Change this in your browser site settings.`},recordings:{nvr_not_running:`NVR plugin is not running. Start the NVR plugin to manage recordings.`,not_available:`Not available`,disk_critical:`Critical: disk space is running out. Recording is paused to prevent data loss.`,disk_warning:`Warning: Disk space is below 8%. Old recordings are deleted automatically only with retention mode "Overwrite" and no storage limit set. Otherwise recording pauses when space runs out.`,disk_small_volume:`Storage volume is small. Recordings will rotate frequently to keep space free.`,storage_overview:`Storage Overview`,disk_total:`Disk Total`,nvr_usage:`NVR Usage`,quota:`Quota`,retention:`Retention`,disk_free:`Disk Free`,unlimited:`Unlimited`,days_count:`{count} days`,global_settings:`Settings`,camera_storage:`Camera Storage`,no_cameras:`No cameras available`,col_camera:`Camera`,col_size:`Size`,col_days:`Days`,col_rate:`Rate`,col_mode:`Mode`,chart_nvr:`NVR`,chart_other:`Other`,chart_free:`Free`,status_recording:`Recording`,status_stopped:`Stopped`,license_title:`License & Cloud`,license_description:`Connect this NVR to the camera.ui cloud for license and cloud features.`,license_disconnected:`Not connected`},instances:{add:`Add Instance`,remove:`Remove`,edit:`Edit Instance`,name:`Name`,url:`URL`,url_placeholder:`https://example.com:8443`,added:`Instance added`,updated:`Instance updated`,removed:`Instance removed`,confirm_remove:`Remove this instance?`,credentials_username:`Username`,credentials_password:`Password`,credentials_unchanged:`Unchanged`,cannot_add_self:`Cannot add this server as a remote instance.`,credentials_required:`Username and password are required.`},title_mqtt:`MQTT`,mqtt_broker:`MQTT broker`,mqtt_status_info:`Live connection state of the MQTT bridge.`,mqtt_state_connected:`Connected`,mqtt_state_connecting:`Connecting…`,mqtt_state_reconnecting:`Reconnecting…`,mqtt_state_error:`Error`,mqtt_state_disabled:`Disabled`,mqtt_enabled_info:`Publish camera.ui events, camera and sensor states to your MQTT broker.`,mqtt_host_label:`Host`,mqtt_port_label:`Port`,mqtt_protocol_label:`Protocol`,mqtt_username_label:`Username`,mqtt_password_label:`Password`,mqtt_password_keep_hint:`Leave empty to keep the stored password.`,mqtt_client_id_label:`Client ID`,mqtt_topic_prefix_label:`Topic prefix`,mqtt_topic_prefix_info:`All camera.ui topics are published below this prefix.`,mqtt_tls_reject_unauthorized:`Verify server certificate`,mqtt_tls_reject_unauthorized_info:`Disable this only for brokers using self-signed certificates.`,mqtt_tls_ca_label:`CA certificate (PEM)`,mqtt_tls_cert_label:`Client certificate (PEM)`,mqtt_tls_key_label:`Client key (PEM)`,mqtt_test:`Test connection`,mqtt_mode_label:`Mode`,mqtt_mode_external:`External broker`,mqtt_mode_embedded:`Built-in broker`,mqtt_mode_embedded_info:`camera.ui runs its own MQTT broker. Point your MQTT devices at the address below using the credentials.`,mqtt_broker_address:`Broker address`,mqtt_broker_address_hint:`Use this address and the credentials above in your MQTT devices.`,mqtt_broker_running:`Built-in broker running on port {port}`,mqtt_ha_discovery:`Home Assistant discovery`,mqtt_ha_discovery_info:`Automatically create devices and entities in Home Assistant via MQTT discovery.`,mqtt_ha_prefix_label:`Discovery prefix`,mqtt_ha_prefix_info:`Must match the discovery prefix configured in Home Assistant (default: homeassistant).`,title_remote:`Remote Access`,title_system:`System`,title_user:`User`,title_device:`Device`,title_security:`Security`,security:{title:`Two-Factor Authentication`,"2fa_title":`Two-Factor Authentication`,"2fa_description":`Add an extra layer of security to your account by enabling two-factor authentication. You will need an authenticator app like Google Authenticator or Authy.`,generating_qr:`Generating QR code...`,setup_2fa:`Set up 2FA`,step_scan:`Scan QR`,step_verify:`Verify`,scan_qr:`Scan this QR code with your authenticator app`,manual_entry:`Manual entry code`,enter_code:`Enter verification code`,enter_code_description:`Enter the 6-digit code from your authenticator app to verify the setup.`,enable_2fa:`Enable 2FA`,disable_2fa:`Disable 2FA`,"2fa_enabled":`2FA is enabled`,"2fa_enabled_success":`Two-factor authentication has been enabled`,"2fa_disabled_success":`Two-factor authentication has been disabled`,backup_codes:`Backup Codes`,backup_codes_remaining:`{count} backup codes remaining`,backup_warning:`Save these codes in a safe place. Each code can only be used once. If you lose access to your authenticator app, you can use these codes to sign in.`,backup_regenerated:`Backup codes have been regenerated`,regenerate_backup:`Regenerate backup codes`,regenerate_confirm:`Enter your current 2FA code to generate new backup codes. This will invalidate all existing backup codes.`,disable_confirm:`Enter your 2FA code to disable two-factor authentication.`},unknown:`Unknown`,update_available:`Update available`,valid_domain:`Valid domain`,version:`Version`},instances:{title:`Instances`,this_server:`This Server`,remote_servers:`Remote Servers`,add:`Add Instance`,edit:`Edit Instance`,remove:`Remove`,confirm_remove:`Remove this instance?`,select:`Select instances`,select_all:`Select all`,deselect_all:`Deselect all`,remove_selected:`Remove selected`,remove_selected_confirm:`Remove {count} selected instance(s)?`,search:`Search instances...`,no_instances:`No remote instances configured.`,active:`Active`,offline:`Offline`,switch_to:`Switch`,server_offline:`Server is offline or unreachable.`,no_data:`Loading...`,two_factor_pending_hint:`Two-factor confirmation pending`,two_factor_enter_code:`Enter code`,version:`Version`,uptime:`Uptime`,os:`System`,hostname:`Hostname`,cpu:`CPU`,cores:`Cores`,memory:`Memory`,disk:`Storage`,cameras:`Cameras`,online:`Online`,recording:`Recording`,credentials_required:`Add credentials to enable status monitoring.`},workers:{title:`Workers`,workers:`Workers`,address_required:`No LAN address was detected. Set the master address manually before enabling workers.`,camera_assignments:`Camera Assignments`,camera_assignments_description:`Offload a camera's video decoding and detection to a worker. The stream is decoded on the assigned machine — useful to spread CPU load. Leave on "Local" to keep it on this master.`,camera:`Camera`,configuration:`Configuration`,copied:`Copied!`,cpu:`CPU`,enable_workers:`Enable Workers`,enable_workers_description:`Let other machines connect as workers and take over camera decoding or plugins.`,failed_to_update_assignment:`Failed to update worker assignment`,generate_code:`Generate Pairing Code`,incompatible:`incompatible`,leaf_port:`Worker Connection Port`,local:`Local`,master_address:`Master Address`,master_address_hint:`The address workers use to reach this master (LAN IP or hostname).`,master_address_placeholder:`e.g. 192.168.1.10`,memory:`Memory`,name:`Name`,ok:`OK`,port_change_warning:`Changing the port requires already-paired workers to be re-paired.`,save:`Save`,no_cameras:`No cameras available`,no_plugins:`No plugins installed`,no_workers:`No workers available`,plugin:`Plugin`,plugin_assignments:`Plugin Assignments`,plugin_assignments_description:`Run an entire plugin on a worker instead of this master — e.g. a detector that needs hardware this master lacks, or one only available on another platform. The worker installs and runs the plugin; you still configure it here as usual. Only compatible workers are offered.`,offline:`Offline`,online:`Online`,pair_worker:`Pair New Worker`,pair_worker_description:`Generate a one-time pairing code and start the worker with it. The worker exchanges the code for its own credentials — no shared secrets, revocable per worker. The internal message broker restarts briefly when the worker pairs.`,pairing_code:`Pairing Code`,pairing_expires:`Expires in {minutes} min — one-time use`,pairing_snippet:`Worker configuration`,pairing_snippet_hint:`Paste into the worker's camera.ui.yaml, then start it with "cameraui --worker run".`,pid:`PID`,platform:`Platform`,remove:`Remove`,remove_worker:`Remove Worker`,rename_worker:`Rename Worker`,remove_worker_confirm:`Remove "{name}"? Its credentials are revoked and the connection is dropped — assigned cameras fall back to this machine. The internal message broker restarts briefly.`,version:`Version`,version_mismatch:`Worker runs {version}, update it to match the server`,update_worker:`Update to {version}`,update_worker_short:`Update Worker`,restart_worker:`Restart Worker`,updating:`Updating, the worker restarts when it is done`,update_failed:`Update failed: {error}`}}}},ra=[...qn],ia={de:`German (de)`,en:`English (en)`},aa=e=>{let t=(e??(typeof window<`u`?window:void 0)?.navigator?.language??`en`).toLowerCase().split(`-`)[0];return oa(t)},oa=e=>ra.find(t=>t===e)??`en`,sa=Xe({locale:aa(),fallbackLocale:`en`,legacy:!1,globalInjection:!0,messages:na}),ca=S(`cui-toast`);function la(e){return e instanceof Error}function ua(){let e=In();return{add:t=>{t.detail===``&&(t.detail=void 0),t.severity===`error`&&t.detail&&e.error(`Error detail:`,t.detail),ca.emit({...t,detail:la(t.detail)?mE(t.detail):t.detail})},dismiss:e=>{ca.emit({type:`dismiss`,id:e})}}}function da(e){let t=Ht(e),n=U(()=>t.data.value===void 0?t.fetchStatus.value!==`idle`||t.isError.value:t.isFetching.value||t.isPaused.value);return{...t,isLoading:n,isBusy:n}}async function fa({userData:e}){return(await Q.post(`/users`,e)).data}async function pa({username:e,signal:t}){return(await Q.get(`/users/${e}`,{signal:t})).data}async function ma({parameter:e,signal:t}){return(await Q.get(`/users`,{params:e,signal:t})).data}async function ha({username:e,userData:t}){return(await Q.patch(`/users/${e}`,t)).data}async function ga({username:e}){return(await Q.delete(`/users/${e}`)).data}async function _a(){return(await Q.delete(`/users`)).data}async function va({username:e,cameraname:t,shortcutData:n}){return(await Q.post(`/users/${e}/preferences/cameras/${t}/shortcuts`,n)).data}async function ya({username:e,cameraname:t,shortcutid:n,signal:r}){return(await Q.get(`/users/${e}/preferences/cameras/${t}/shortcuts/${n}`,{signal:r})).data}async function ba({username:e,cameraname:t,signal:n}){return(await Q.get(`/users/${e}/preferences/cameras/${t}/shortcuts`,{signal:n})).data}async function xa({username:e,cameraname:t,shortcutid:n,shortcutData:r}){return(await Q.patch(`/users/${e}/preferences/cameras/${t}/shortcuts/${n}`,r)).data}async function Sa({username:e,cameraname:t,shortcutid:n}){return(await Q.delete(`/users/${e}/preferences/cameras/${t}/shortcuts/${n}`)).data}async function Ca({username:e,cameraname:t}){return(await Q.delete(`/users/${e}/preferences/cameras/${t}/shortcuts`)).data}async function wa({username:e,viewData:t}){return(await Q.post(`/users/${e}/preferences/camview/views`,t)).data}async function Ta({username:e,viewid:t,signal:n}){return(await Q.get(`/users/${e}/preferences/camview/views/${t}`,{signal:n})).data}async function Ea({username:e,parameter:t,signal:n}){return(await Q.get(`/users/${e}/preferences/camview/views`,{params:t,signal:n})).data}async function Da({username:e,viewid:t,viewData:n}){return(await Q.patch(`/users/${e}/preferences/camview/views/${t}`,n)).data}async function Oa({username:e,viewid:t}){return(await Q.delete(`/users/${e}/preferences/camview/views/${t}`)).data}async function ka({username:e}){return(await Q.delete(`/users/${e}/preferences/camview/views`)).data}var Aa=class{_queryClient=Tn();t=sa.global.t;toast=ua();queryActivator=B([{name:`getUserQuery`,enabled:!0},{name:`getUsersQuery`,enabled:!0},{name:`getShortcutQuery`,enabled:!0},{name:`getShortcutsQuery`,enabled:!0},{name:`getViewQuery`,enabled:!0},{name:`getViewsQuery`,enabled:!0}]);get queryClient(){return this._queryClient}createUserQuery(){return P({mutationFn:fa,onSuccess:async()=>{await this._queryClient.refetchQueries({queryKey:[`usersList`]}),this.toast.add({severity:`success`,detail:this.t(`components.toast.user_added`),life:3e3})}})}getUserQuery(e){return da({queryKey:[`users`,e],queryFn:({signal:t})=>pa({username:H(e),signal:t}),enabled:()=>this.queryActivator.value.some(e=>e.name===`getUserQuery`&&e.enabled)})}getUsersQuery(e){return da({queryKey:[`usersList`,e],queryFn:({signal:t})=>ma({parameter:H(e),signal:t}),placeholderData:e=>e,enabled:()=>this.queryActivator.value.some(e=>e.name===`getUsersQuery`&&e.enabled)})}patchUserQuery(){return P({mutationFn:async({username:e,userData:t})=>{await ha({username:e,userData:t})},onSuccess:async(e,t)=>{await this._queryClient.refetchQueries({queryKey:[`users`,t.username]})}})}removeUserQuery(){return P({mutationFn:ga,onSuccess:async()=>{await this._queryClient.refetchQueries({queryKey:[`usersList`]}),this.toast.add({severity:`success`,detail:this.t(`components.toast.user_removed`),life:3e3})}})}removeUsersQuery(){return P({mutationFn:_a,onSuccess:async()=>{await this._queryClient.refetchQueries({queryKey:[`usersList`]}),this.toast.add({severity:`success`,detail:this.t(`components.toast.users_removed`),life:3e3})}})}createShortcutQuery(){return P({mutationFn:va,onSuccess:async(e,t)=>{await this._queryClient.refetchQueries({queryKey:[`shortcutsList`,t.username]})}})}getShortcutQuery(e,t,n){return da({queryKey:[`shortcutsList`,e,t,n],queryFn:({signal:r})=>ya({username:H(e),cameraname:H(t),shortcutid:H(n),signal:r}),enabled:()=>this.queryActivator.value.some(e=>e.name===`getShortcutQuery`&&e.enabled)})}getShortcutsQuery(e,t){return da({queryKey:[`shortcutsList`,e,t],queryFn:({signal:n})=>ba({username:H(e),cameraname:H(t),signal:n}),placeholderData:e=>e,enabled:()=>this.queryActivator.value.some(e=>e.name===`getShortcutsQuery`&&e.enabled)})}patchShortcutQuery(){return P({mutationFn:xa,onSuccess:async(e,t)=>{await this._queryClient.refetchQueries({queryKey:[`shortcutsList`,t.username]})}})}removeShortcutQuery(){return P({mutationFn:Sa,onSuccess:async(e,t)=>{await this._queryClient.refetchQueries({queryKey:[`shortcutsList`,t.username]})}})}removeShortcutsQuery(){return P({mutationFn:Ca,onSuccess:async(e,t)=>{await this._queryClient.refetchQueries({queryKey:[`shortcutsList`,t.username]})}})}createViewQuery(){return P({mutationFn:wa,onSuccess:async(e,t)=>{await this._queryClient.refetchQueries({queryKey:[`viewsList`,t.username]}),this.toast.add({severity:`success`,detail:this.t(`components.toast.view_added`),life:3e3})}})}getViewQuery(e,t){return da({queryKey:[`viewsList`,e],queryFn:({signal:n})=>Ta({username:H(e),viewid:H(t),signal:n}),enabled:()=>this.queryActivator.value.some(e=>e.name===`getUserQuery`&&e.enabled)})}getViewsQuery(e,t){return da({queryKey:[`viewsList`,e,t],queryFn:({signal:n})=>Ea({username:H(e),parameter:H(t),signal:n}),placeholderData:e=>e,enabled:()=>this.queryActivator.value.some(e=>e.name===`getViewsQuery`&&e.enabled)})}patchViewQuery(){return P({mutationFn:Da,onSuccess:async(e,t)=>{await this._queryClient.refetchQueries({queryKey:[`viewsList`,t.username]}),this.toast.add({severity:`success`,detail:this.t(`components.toast.view_updated`),life:3e3})}})}patchViewQuerySilent(){return P({mutationFn:Da,onSuccess:async(e,t)=>{await this._queryClient.invalidateQueries({queryKey:[`viewsList`,t.username],refetchType:`none`})}})}removeViewQuery(){return P({mutationFn:Oa,onSuccess:async(e,t)=>{await this._queryClient.refetchQueries({queryKey:[`viewsList`,t.username]}),this.toast.add({severity:`success`,detail:this.t(`components.toast.view_removed`),life:3e3})}})}removeViewsQuery(){return P({mutationFn:ka,onSuccess:async(e,t)=>{await this._queryClient.refetchQueries({queryKey:[`viewsList`,t.username]}),this.toast.add({severity:`success`,detail:this.t(`components.toast.views_removed`),life:3e3})}})}toggleQueryActivator(e,t){let n=this.queryActivator.value.find(t=>t.name===e);return n&&(n.enabled=t),this}};function ja(){let e=typeof window<`u`?window.__CUI_BASE__:void 0;return!e||!e.startsWith(`/`)?`/`:e.endsWith(`/`)?e:`${e}/`}function Ma(){return ja()!==`/`}function Na(){let e=ja();return e===`/`?window.location.origin:new URL(e,window.location.origin).href.replace(/\/$/,``)}function Pa(){return(typeof window<`u`?window.__CUI_EMBED__:void 0)||null}function Fa(){return Pa()===`homeassistant`}var Ia=31536e7,La=3,Ra=300;async function za(e){for(let t=0;t<La;t++){try{let t=await fetch(e);if(t.ok)return await t.json();if(t.status===401||t.status===403)return null}catch{}t<2&&await x(Ra)}return null}async function Ba(e,t={}){let n=Na(),r=await za(`${n}/api/auth/me`);if(!r||!r._id||!r.username||!r.role)return!1;let i={url:n,mode:`direct-lan`,priority:0},a={access:`embed`,accessExpiresAt:Date.now()+Ia};return await e.seedAndRetry({endpoint:i,tokens:a},`home`),t.onUser?.({_id:r._id,username:r.username,email:r.email,role:r.role,firstLogin:r.firstLogin,avatar:r.avatar}),!0}function Va(e){return`twoFactorPending`in e&&e.twoFactorPending===!0}async function Ha(e,t,n,r){let i=await t.loginDirect(n,r);if(Va(i))return i;let a={url:n,mode:`direct-lan`,priority:0};return await e.seedAndRetry({endpoint:a,tokens:i.tokens}),i}async function Ua(e,t,n,r){let i=await Ja(t,n,e),a=await t.loginDirect(i.endpoint.url,r);return Va(a)||await e.seedAndRetry({endpoint:i.endpoint,tokens:Xa(a.tokens,i.extraTokens)}),a}async function Wa(e){let t=yE();if(t.mode===`cloud`){if(!t.cloudSession)throw Error(`login(): cloud mode but cloudSession missing`);return Ua(t.connection,t.api,t.cloudSession,e)}let n=Xr.value??Na();return Ha(t.connection,t.api,n,e)}async function Ga(e,t){let n=yE(),r,i;if(n.mode===`cloud`){if(!n.cloudSession)throw Error(`verify2FA(): cloud mode but cloudSession missing`);let e=await Ja(n.api,n.cloudSession,n.connection);r=e.endpoint,i=e.extraTokens}else r={url:Xr.value??Na(),mode:`direct-lan`,priority:0};let a=await n.api.verify2FA(r.url,e,t);return await n.connection.seedAndRetry({endpoint:r,tokens:Xa(a.tokens,i)}),a}async function Ka(){let e=yE();await qa(e.connection,e.api)}async function qa(e,t){let n=e.target.value;if(n?.tokens.access)try{await t.logoutDirect(n.endpoint.url,n.tokens.access)}catch{}let r=e.phase.value,i=(r.kind===`idle`?null:r.instanceId)??`default`;e.reset(),e.boot(i)}async function Ja(e,t,n){let r=t.state.value;if(!r)throw Error(`resolveCloudEndpoint(): cloud session not initialised`);let i=await e.tunnelCheck(r.proxyUrl,r.proxyToken),a=i.internalAddresses,o=i.externalAddresses;if(a.length===0&&o.length===0)throw Error(`tunnel/check returned no reachable addresses`);let s=n.lastReachableEndpoint.value,c=s&&(a.includes(s)||o.includes(s))?s:null;if(!c&&a.length+o.length>1){let t=[...a.map(t=>({endpoint:{url:t,mode:`direct-lan`},run:Ya(e,t)})),...o.map(t=>({endpoint:{url:t,mode:`direct-wan`},run:Ya(e,t)}))];try{c=(await b(t)).endpoint.url}catch{}}c??=a[0]??o[0];let l=a.includes(c)?`direct-lan`:`direct-wan`;return{endpoint:{url:c,mode:l,priority:0},extraTokens:{proxySession:r.proxyToken,proxySessionExpiresAt:r.proxyTokenExpiresAt,proxyRefresh:r.proxyRefreshToken}}}function Ya(e,t){return async n=>{try{return await e.authCheck(t,``,n),!0}catch(e){if(typeof e?.response?.status==`number`)return!0;throw e}}}function Xa(e,t){return t?{...e,...t}:e}async function Za(){return Qa()?$a():{mode:`direct`,directEndpointUrl:Na()}}function Qa(){return gi?window.location.host===gi:!1}async function $a(){try{let e=await fetch(`${pi}/api/proxy/refresh`,{method:`POST`,credentials:`include`});if(!e.ok)return{mode:`cloud`};let t=await e.json();return t.proxy_token?{mode:`cloud`,cloudSession:{proxyUrl:t.proxy_url??window.location.origin,proxyToken:t.proxy_token,proxyRefreshToken:t.proxy_refresh_token,proxyTokenExpiresAt:t.proxy_token_expires_at,proxyRefreshTokenExpiresAt:t.proxy_refresh_token_expires_at,serverId:t.server_id??void 0,cloudApiBase:pi}}:{mode:`cloud`}}catch{return{mode:`cloud`}}}var eo=15e3;function to(e){let t=null,n=null,r=``,i=null;function a(e){return!!e.accessExpiresAt&&e.accessExpiresAt>Date.now()+eo}function o(e){e&&n?.access===e&&(n=null)}async function s(o,s,c,l){if(r===o&&n&&a(n))return n;if(t)return t;let u=i?.getLatestTokens?.()??null;if(u&&a(u))return n=u,r=o,u;let d=u?.refresh??s;if(!d)throw Error(`no refresh token available`);t=(async()=>{let t=await e.refreshDirect(o,d,l),i={...c,...t.tokens};return n=i,r=o,i})();try{return await t}finally{t=null}}async function c(e,o,c,l){if(r===e&&n&&a(n))return n;if(t)return t;let u=i?.acquireLock;return u?u(()=>s(e,o,c,l)):s(e,o,c,l)}return{refresh:(e,t)=>(t===`auth-error`&&o(e.tokens.access),s(e.endpoint.url,e.tokens.refresh,e.tokens)),getFreshTokens:({endpoint:e,refreshToken:t,base:n,signal:r})=>(o(n?.access),c(e,t,n,r)),bindCoordination:e=>{i=e},clear:()=>{n=null,r=``,t=null}}}function no(e,t){let n=Si(),r=_i(),i=to(n);return{options:{adapters:{storage:vi(),visibilitySource:yi(),networkSource:r.networkSource,networkChangeSource:r.networkChangeSource},callbacks:{discover:Ii(e),probe:hE(n,i),refresh:i.refresh,bindRefresh:i.bindCoordination,onConnectionReset:i.clear},logger:t},api:n}}var ro=3e4;function io(e){let t=ei(),n=pn(!1),r=U(()=>n.value),i=null,a=new Map;function o(){n.value=!0}function s(){n.value=!1}function c(e){i=e,n.value=e.connected,e.on(`connect`,o),e.on(`disconnect`,s);for(let[t,n]of a)for(let r of n)e.on(t,r)}function l(){if(i){i.off(`connect`,o),i.off(`disconnect`,s);for(let[e,t]of a)for(let n of t)i.off(e,n);i=null}n.value=!1}let u=q(()=>t.target.value?.endpoint.url,n=>{if(l(),n){let n=t.socketio.ensureSocket(e);n&&c(n)}},{immediate:!0});Ne(()=>{u(),l(),a.clear()});function d(e,t){let n=a.get(e);return n||(n=new Set,a.set(e,n)),n.add(t),i?.on(e,t),()=>{n.delete(t),i?.off(e,t)}}function f(e){return q(n,(t,n)=>{t&&!n&&e()},{immediate:!0})}function p(e,...t){i?.emit(e,...t)}function m(t,n,r){let a=i;if(!a||!a.connected)return Promise.reject(Error(`socket "${e}" not connected`));let o=r?.timeoutMs??ro;return new Promise((r,i)=>{let s=setTimeout(()=>i(Error(`socket "${e}" request timeout: ${t}`)),o);a.emit(t,n,e=>{clearTimeout(s),r(e)})})}return{connected:n,ready:r,on:d,onReady:f,emit:p,request:m}}function ao(e){let t=pn(e??null);function n(e){t.value=e}function r(e){let n=t.value;n&&(t.value={...n,...e})}function i(){t.value=null}return{state:t,set:n,patch:r,clear:i}}var oo=6e4;function so(e,t=Date.now()){return!e.proxyTokenExpiresAt||e.proxyTokenExpiresAt>t+oo}function co(e,t=Date.now()){return e.proxyRefreshToken?!e.proxyRefreshTokenExpiresAt||e.proxyRefreshTokenExpiresAt>t:!1}function lo(e){let{api:t,cloudSession:n,readL1AccessToken:r,onL1Unavailable:i,logger:a}=e,o=null;function s(e){return o||(o=(async()=>{try{await c(e)}finally{o=null}})(),o)}async function c(e){let o=n.state.value;if(o&&so(o))return;if(o&&co(o)&&o.cloudApiBase)try{let r=await t.refreshProxy(o.cloudApiBase,o.proxyRefreshToken,e);if(e.aborted)return;n.set({...o,proxyUrl:r.proxyUrl??o.proxyUrl,proxyToken:r.proxyToken,proxyRefreshToken:r.proxyRefreshToken??o.proxyRefreshToken,proxyTokenExpiresAt:r.proxyTokenExpiresAt,proxyRefreshTokenExpiresAt:r.proxyRefreshTokenExpiresAt??o.proxyRefreshTokenExpiresAt}),a?.debug(`cloud-session`,`refresh OK via RT`);return}catch(e){if(Wt.isAxiosError(e)&&(e.response?.status===401||e.response?.status===403))a?.warn(`cloud-session`,`RT rejected — falling through to L1`);else throw e}if(!r||!o?.serverId||!o.cloudApiBase)throw await i?.(),Error(`cloud session expired and no L1 fallback available`);let s=await r();if(e.aborted)return;if(!s)throw await i?.(),Error(`no L1 access token in secure storage`);let c=await t.remintProxyFromL1(o.cloudApiBase,o.serverId,s,e);e.aborted||(n.set({...o,proxyUrl:c.proxyUrl??o.proxyUrl,proxyToken:c.proxyToken,proxyRefreshToken:c.proxyRefreshToken,proxyTokenExpiresAt:c.proxyTokenExpiresAt,proxyRefreshTokenExpiresAt:c.proxyRefreshTokenExpiresAt}),a?.debug(`cloud-session`,`refresh OK via L1 re-mint`))}function l(){let e=n.state.value;e&&(so(e)||s(new AbortController().signal).catch(()=>{}))}return{ensureFresh:s,wake:l}}var uo=!1;function fo(){try{return yE().cloudSession?.state.value?.serverId??null}catch{return null}}async function po(){}async function mo(){try{yE().cloudSession?.clear()}catch{}await po()}function ho(){try{return yE().mode===`cloud`}catch{return!1}}async function go(){uo||(uo=!0,await mo(),window.location.host===gi&&window.location.replace(pi))}var _o={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function vo(e,t){return M(),z(`svg`,_o,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M20.916 9.564a1 1 0 0 0-.513-1.316L7.328 2.492c-.995-.438-2.22.051-2.645 1.042l-2.21 5.154a2 2 0 0 0 1.052 2.624L9.563 13.9L8.323 17H4v-3H2v8h2v-3h4.323c.823 0 1.552-.494 1.856-1.258l1.222-3.054l5.205 2.23a1 1 0 0 0 1.31-.517l.312-.71l1.701.68l2-5l-1.536-.613zm-4.434 5.126L4.313 9.475l2.208-5.152l12.162 5.354z`},null,-1)]])}var yo=W({name:`bx-cctv`,render:vo}),bo={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function xo(e,t){return M(),z(`svg`,bo,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M5.525 18q1.05 0 1.775-.725t.725-1.775q0-.6-.275-1.175t-.825-.925l-.9-.6V6.5q0-.225-.137-.363T5.525 6t-.363.138t-.137.362v6.3l-.9.6q-.55.375-.825.925T3.025 15.5q0 1.05.725 1.775T5.525 18m0 2q-1.875 0-3.187-1.3t-1.313-3.2q0-1.2.55-2.15t1.45-1.55V6.5q0-1.05.725-1.775T5.525 4t1.775.725t.725 1.775v5.3q.9.6 1.45 1.55t.55 2.15q0 1.875-1.312 3.188T5.525 20m8.175-5q-1.2-.825-1.95-2.125T11 10q0-2.5 1.75-4.25T17 4t4.25 1.75T23 10q0 1.575-.75 2.875T20.3 15zm.7-2h5.3q.675-.6.988-1.35T21 10q0-1.65-1.175-2.825T17 6t-2.825 1.175T13 10q0 .9.363 1.65T14.4 13m2.6 7q-.6 0-1.05-.45t-.45-1.05h3q0 .6-.45 1.05T17 20m-3-2v-2h6v2zm3-8.5`},null,-1)]])}var So=W({name:`material-symbols-home-iot-device-outline`,render:xo}),Co={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function wo(e,t){return M(),z(`svg`,Co,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M5.025 10h1V6.5q0-.225-.137-.363T5.525 6t-.363.138t-.137.362zm.5 10q-1.875 0-3.187-1.3t-1.313-3.2q0-1.2.55-2.15t1.45-1.55V6.5q0-1.05.725-1.775T5.525 4t1.775.725t.725 1.775v5.3q.9.6 1.45 1.55t.55 2.15q0 1.875-1.312 3.188T5.525 20m8.175-5q-1.2-.825-1.95-2.125T11 10q0-2.5 1.75-4.25T17 4t4.25 1.75T23 10q0 1.575-.75 2.875T20.3 15zm2.25 4.55q-.45-.45-.45-1.05h3q0 .6-.45 1.05T17 20t-1.05-.45M14 18v-2h6v2z`},null,-1)]])}var To=W({name:`material-symbols-home-iot-device`,render:wo}),Eo={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Do(e,t){return M(),z(`svg`,Eo,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M20 3H4a2 2 0 0 0-2 2v4a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V5a2 2 0 0 0-2-2M4 9V5h16v4zm16 4H4a2 2 0 0 0-2 2v4a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-4a2 2 0 0 0-2-2M4 19v-4h16v4z`},null,-1),L(`path`,{fill:`currentColor`,d:`M17 6h2v2h-2zm-3 0h2v2h-2zm3 10h2v2h-2zm-3 0h2v2h-2z`},null,-1)]])}var Oo=W({name:`bx-server`,render:Do}),ko={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Ao(e,t){return M(),z(`svg`,ko,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M18.618 7.462L6.403 2.085a1 1 0 0 0-.77-.016a1 1 0 0 0-.552.537l-3 7a1 1 0 0 0 .525 1.313L9.563 13.9L8.323 17H4v-3H2v8h2v-3h4.323c.823 0 1.552-.494 1.856-1.258l1.222-3.054l3.419 1.465a1 1 0 0 0 1.311-.518l3-6.857a1 1 0 0 0-.513-1.316m1.312 8.91l-1.858-.742l1.998-5l1.858.741z`},null,-1)]])}var jo=W({name:`bxs-cctv`,render:Ao}),Mo={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function No(e,t){return M(),z(`svg`,Mo,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M20 3H4a2 2 0 0 0-2 2v4a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V5a2 2 0 0 0-2-2m-5 5h-2V6h2zm4 0h-2V6h2zm1 5H4a2 2 0 0 0-2 2v4a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-4a2 2 0 0 0-2-2m-5 5h-2v-2h2zm4 0h-2v-2h2z`},null,-1)]])}var Po=W({name:`bxs-server`,render:No}),Fo={viewBox:`0 0 36 36`,width:`1.2em`,height:`1.2em`};function Io(e,t){return M(),z(`svg`,Fo,[...t[0]||=[fn(`<path fill="currentColor" d="M6 22h24v2H6z" class="clr-i-outline clr-i-outline-path-1"></path><path fill="currentColor" d="M26 26h4v2h-4z" class="clr-i-outline clr-i-outline-path-2"></path><path fill="currentColor" d="M13 9.92L17 6v13a1 1 0 1 0 2 0V6l4 3.95a1 1 0 1 0 1.38-1.45L18 2.16L11.61 8.5A1 1 0 0 0 13 9.92" class="clr-i-outline clr-i-outline-path-3"></path><path fill="currentColor" d="M30.84 13.37A1.94 1.94 0 0 0 28.93 12H21v2h7.95c1.05 2.94 2.77 7.65 3.05 8.48V30H4v-7.52C4.28 21.65 7.05 14 7.05 14H15v-2H7.07a1.92 1.92 0 0 0-1.9 1.32C2 22 2 22.1 2 22.33V30a2 2 0 0 0 2 2h28a2 2 0 0 0 2-2v-7.67c0-.23 0-.33-3.16-8.96" class="clr-i-outline clr-i-outline-path-4"></path><path fill="none" d="M0 0h36v36H0z"></path>`,5)]])}var Lo=W({name:`clarity-backup-restore-line`,render:Io}),Ro={viewBox:`0 0 36 36`,width:`1.2em`,height:`1.2em`};function zo(e,t){return M(),z(`svg`,Ro,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M2 24v6a2 2 0 0 0 2 2h28a2 2 0 0 0 2-2v-6Zm28 5h-4v-2h4Z`,class:`clr-i-solid clr-i-solid-path-1`},null,-1),L(`path`,{fill:`currentColor`,d:`M30.84 13.37A1.94 1.94 0 0 0 28.93 12H21v6a3 3 0 1 1-6 0v-6H7.07a1.92 1.92 0 0 0-1.9 1.32c-2.31 6.36-2.93 8.11-3.1 8.68h31.86c-.16-.57-.79-2.31-3.09-8.63`,class:`clr-i-solid clr-i-solid-path-2`},null,-1),L(`path`,{fill:`currentColor`,d:`M13 9.92L17 6v12a1 1 0 1 0 2 0V6l4 3.95a1 1 0 1 0 1.38-1.45L18 2.16L11.61 8.5A1 1 0 0 0 13 9.92`,class:`clr-i-solid clr-i-solid-path-3`},null,-1),L(`path`,{fill:`none`,d:`M0 0h36v36H0z`},null,-1)]])}var Bo=W({name:`clarity-backup-restore-solid`,render:zo}),Vo={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Ho(e,t){return M(),z(`svg`,Vo,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M20.97 7.27a.996.996 0 0 0 0-1.41l-2.83-2.83a.996.996 0 0 0-1.41 0l-4.49 4.49l-3.89-3.89c-.78-.78-2.05-.78-2.83 0l-1.9 1.9c-.78.78-.78 2.05 0 2.83l3.89 3.89L3 16.76V21h4.24l4.52-4.52l3.89 3.89c.95.95 2.23.6 2.83 0l1.9-1.9c.78-.78.78-2.05 0-2.83l-3.89-3.89zM5.04 6.94l1.89-1.9L8.2 6.31L7.02 7.5l1.41 1.41l1.19-1.19l1.2 1.2l-1.9 1.9zm11.23 7.44l-1.19 1.19l1.41 1.41l1.19-1.19l1.27 1.27l-1.9 1.9l-3.89-3.89l1.9-1.9zM6.41 19H5v-1.41l9.61-9.61l1.3 1.3l.11.11zm9.61-12.44l1.41-1.41l1.41 1.41l-1.41 1.41z`},null,-1)]])}var Uo=W({name:`ic-outline-design-services`,render:Ho}),Wo={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Go(e,t){return M(),z(`svg`,Wo,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`m16.24 11.51l1.57-1.57l-3.75-3.75l-1.57 1.57l-4.14-4.13c-.78-.78-2.05-.78-2.83 0l-1.9 1.9c-.78.78-.78 2.05 0 2.83l4.13 4.13l-4.6 4.61q-.15.15-.15.36v3.04c0 .28.22.5.5.5h3.04c.13 0 .26-.05.35-.15l4.62-4.62l4.13 4.13c1.32 1.32 2.76.07 2.83 0l1.9-1.9c.78-.78.78-2.05 0-2.83zm-7.06-.44L5.04 6.94l1.89-1.9L8.2 6.31l-.47.49a.996.996 0 1 0 1.41 1.41l.48-.48l1.45 1.45zm7.88 7.89l-4.13-4.13l1.9-1.9l1.45 1.45l-.48.48a.996.996 0 1 0 1.41 1.41l.48-.48l1.27 1.27zm3.65-11.92a.996.996 0 0 0 0-1.41l-2.34-2.34c-.47-.47-1.12-.29-1.41 0l-1.83 1.83l3.75 3.75z`},null,-1)]])}var Ko=W({name:`ic-round-design-services`,render:Go}),qo={viewBox:`0 0 48 48`,width:`1.2em`,height:`1.2em`};function Jo(e,t){return M(),z(`svg`,qo,[...t[0]||=[L(`g`,{fill:`none`,stroke:`currentColor`,"stroke-width":`4`},[L(`path`,{d:`M13.5 39.37A16.93 16.93 0 0 0 24 43c3.963 0 7.61-1.356 10.5-3.63M19 9.747C12.051 11.882 7 18.351 7 26c0 1.925.32 3.775.91 5.5M29 9.747C35.949 11.882 41 18.351 41 26c0 1.925-.32 3.775-.91 5.5`}),L(`path`,{"stroke-linecap":`round`,"stroke-linejoin":`round`,d:`M43 36c0 1.342-.528 2.56-1.388 3.458A5 5 0 1 1 43 36m-28 0c0 1.342-.528 2.56-1.388 3.458A5 5 0 1 1 15 36M29 9c0 1.342-.528 2.56-1.388 3.458A5 5 0 1 1 29 9`})],-1)]])}var Yo=W({name:`icon-park-outline-circular-connection`,render:Jo}),Xo={viewBox:`0 0 48 48`,width:`1.2em`,height:`1.2em`};function Zo(e,t){return M(),z(`svg`,Xo,[...t[0]||=[L(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linejoin":`round`,"stroke-width":`4`},[L(`path`,{d:`M13 10h28v34H13z`}),L(`path`,{"stroke-linecap":`round`,d:`M35 10V4H8a1 1 0 0 0-1 1v33h6m8-16h12m-12 8h12`})],-1)]])}var Qo=W({name:`icon-park-outline-log`,render:Zo}),$o={viewBox:`0 0 48 48`,width:`1.2em`,height:`1.2em`};function es(e,t){return M(),z(`svg`,$o,[...t[0]||=[L(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linejoin":`round`,"stroke-width":`4`},[L(`rect`,{width:`40`,height:`32`,x:`4`,y:`8`,rx:`2`}),L(`path`,{"stroke-linecap":`round`,d:`m12 18l7 6l-7 6m11 2h13`})],-1)]])}var ts=W({name:`icon-park-outline-terminal`,render:es}),ns={viewBox:`0 0 48 48`,width:`1.2em`,height:`1.2em`};function rs(e,t){return M(),z(`svg`,ns,[...t[0]||=[L(`g`,{fill:`none`,stroke:`currentColor`,"stroke-width":`4`},[L(`path`,{d:`M13.5 39.37A16.93 16.93 0 0 0 24 43c3.963 0 7.61-1.356 10.5-3.63M19 9.747C12.051 11.882 7 18.351 7 26c0 1.925.32 3.775.91 5.5M29 9.747C35.949 11.882 41 18.351 41 26c0 1.925-.32 3.775-.91 5.5`}),L(`path`,{fill:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,d:`M43 36c0 1.342-.528 2.56-1.388 3.458A5 5 0 1 1 43 36m-28 0c0 1.342-.528 2.56-1.388 3.458A5 5 0 1 1 15 36M29 9c0 1.342-.528 2.56-1.388 3.458A5 5 0 1 1 29 9`})],-1)]])}var is=W({name:`icon-park-solid-circular-connection`,render:rs}),as={viewBox:`0 0 48 48`,width:`1.2em`,height:`1.2em`},os=[`id`],ss=[`mask`];function cs(e,t){return M(),z(`svg`,as,[L(`defs`,null,[L(`mask`,{id:e.idMap.SVGzmZ6hexT},[...t[0]||=[L(`g`,{fill:`none`,"stroke-linejoin":`round`,"stroke-width":`4`},[L(`path`,{fill:`#fff`,stroke:`#fff`,d:`M13 10h28v34H13z`}),L(`path`,{stroke:`#fff`,"stroke-linecap":`round`,d:`M35 10V4H8a1 1 0 0 0-1 1v33h6`}),L(`path`,{stroke:`#000`,"stroke-linecap":`round`,d:`M21 22h12m-12 8h12`})],-1)]],8,os)]),L(`path`,{fill:`currentColor`,d:`M0 0h48v48H0z`,mask:`url(#`+e.idMap.SVGzmZ6hexT+`)`},null,8,ss)])}var ls=W({name:`icon-park-solid-log`,render:cs,setup(){return{idMap:{SVGzmZ6hexT:`uicons-`+Math.random().toString(36).substr(2,10)}}}}),us={viewBox:`0 0 48 48`,width:`1.2em`,height:`1.2em`},ds=[`id`],fs=[`mask`];function ps(e,t){return M(),z(`svg`,us,[L(`defs`,null,[L(`mask`,{id:e.idMap.SVGXE6zpcEE},[...t[0]||=[L(`g`,{fill:`none`,"stroke-linejoin":`round`,"stroke-width":`4`},[L(`rect`,{width:`40`,height:`32`,x:`4`,y:`8`,fill:`#fff`,stroke:`#fff`,rx:`2`}),L(`path`,{stroke:`#000`,"stroke-linecap":`round`,d:`m12 18l7 6l-7 6m11 2h13`})],-1)]],8,ds)]),L(`path`,{fill:`currentColor`,d:`M0 0h48v48H0z`,mask:`url(#`+e.idMap.SVGXE6zpcEE+`)`},null,8,fs)])}var ms=W({name:`icon-park-solid-terminal`,render:ps,setup(){return{idMap:{SVGXE6zpcEE:`uicons-`+Math.random().toString(36).substr(2,10)}}}}),hs={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function gs(e,t){return M(),z(`svg`,hs,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M7.4 17.25q-1.05.875-2.187.8t-1.988-.775t-1.162-1.837t.412-2.338L4.35 10q-.625-.55-.987-1.325T3 7q0-1.65 1.175-2.825T7 3t2.825 1.175T11 7T9.825 9.825T7 11q-.225 0-.45-.025t-.425-.075L4.2 14.15q-.275.45-.175.888t.425.712t.775.313t.875-.313l10.5-9.025q1.05-.875 2.2-.788t2 .788t1.15 1.838t-.425 2.337L19.65 14q.625.55.988 1.325T21 17q0 1.65-1.175 2.825T17 21t-2.825-1.175T13 17t1.175-2.825T17 13q.225 0 .438.025t.412.075l1.95-3.25q.275-.45.175-.888t-.425-.712t-.775-.312t-.875.312z`},null,-1)]])}var _s=W({name:`material-symbols-automation`,render:gs}),vs={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function ys(e,t){return M(),z(`svg`,vs,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M7.4 17.25q-1.05.875-2.187.8t-1.988-.775t-1.162-1.837t.412-2.338L4.35 10q-.625-.55-.987-1.325T3 7q0-1.65 1.175-2.825T7 3t2.825 1.175T11 7T9.825 9.825T7 11q-.225 0-.45-.025t-.425-.075L4.2 14.15q-.275.45-.175.888t.425.712t.775.313t.875-.313l10.5-9.025q1.05-.875 2.2-.788t2 .788t1.15 1.838t-.425 2.337L19.65 14q.625.55.988 1.325T21 17q0 1.65-1.175 2.825T17 21t-2.825-1.175T13 17t1.175-2.825T17 13q.225 0 .438.025t.412.075l1.95-3.25q.275-.45.175-.888t-.425-.712t-.775-.312t-.875.312zm1.013-8.837Q9 7.825 9 7t-.587-1.412T7 5t-1.412.588T5 7t.588 1.413T7 9t1.413-.587m10 10Q19 17.825 19 17t-.587-1.412T17 15t-1.412.588T15 17t.588 1.413T17 19t1.413-.587M17 17`},null,-1)]])}var bs=W({name:`material-symbols-automation-outline`,render:ys}),xs={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Ss(e,t){return M(),z(`svg`,xs,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M6.5 20q-2.275 0-3.887-1.575T1 14.575q0-1.95 1.175-3.475T5.25 9.15q.625-2.3 2.5-3.725T12 4q2.925 0 4.963 2.038T19 11q1.725.2 2.863 1.488T23 15.5q0 1.875-1.312 3.188T18.5 20z`},null,-1)]])}var Cs=W({name:`material-symbols-cloud`,render:Ss}),ws={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Ts(e,t){return M(),z(`svg`,ws,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M6.5 20q-2.275 0-3.887-1.575T1 14.575q0-1.95 1.175-3.475T5.25 9.15q.625-2.3 2.5-3.725T12 4q2.925 0 4.963 2.038T19 11q1.725.2 2.863 1.488T23 15.5q0 1.875-1.312 3.188T18.5 20zm0-2h12q1.05 0 1.775-.725T21 15.5t-.725-1.775T18.5 13H17v-2q0-2.075-1.463-3.538T12 6T8.463 7.463T7 11h-.5q-1.45 0-2.475 1.025T3 14.5t1.025 2.475T6.5 18m5.5-6`},null,-1)]])}var Es=W({name:`material-symbols-cloud-outline`,render:Ts}),Ds={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Os(e,t){return M(),z(`svg`,Ds,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M6 19h3v-5q0-.425.288-.712T10 13h4q.425 0 .713.288T15 14v5h3v-9l-6-4.5L6 10zm-2 0v-9q0-.475.213-.9t.587-.7l6-4.5q.525-.4 1.2-.4t1.2.4l6 4.5q.375.275.588.7T20 10v9q0 .825-.588 1.413T18 21h-4q-.425 0-.712-.288T13 20v-5h-2v5q0 .425-.288.713T10 21H6q-.825 0-1.412-.587T4 19m8-6.75`},null,-1)]])}var ks=W({name:`material-symbols-home-outline-rounded`,render:Os}),As={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function js(e,t){return M(),z(`svg`,As,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M4 19v-9q0-.475.213-.9t.587-.7l6-4.5q.525-.4 1.2-.4t1.2.4l6 4.5q.375.275.588.7T20 10v9q0 .825-.588 1.413T18 21h-3q-.425 0-.712-.288T14 20v-5q0-.425-.288-.712T13 14h-2q-.425 0-.712.288T10 15v5q0 .425-.288.713T9 21H6q-.825 0-1.412-.587T4 19`},null,-1)]])}var Ms=W({name:`material-symbols-home-rounded`,render:js}),Ns={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Ps(e,t){return M(),z(`svg`,Ns,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M12 19.2c-2.5 0-4.71-1.28-6-3.2c.03-2 4-3.1 6-3.1s5.97 1.1 6 3.1a7.23 7.23 0 0 1-6 3.2M12 5a3 3 0 0 1 3 3a3 3 0 0 1-3 3a3 3 0 0 1-3-3a3 3 0 0 1 3-3m0-3A10 10 0 0 0 2 12a10 10 0 0 0 10 10a10 10 0 0 0 10-10c0-5.53-4.5-10-10-10`},null,-1)]])}var Fs=W({name:`mdi-account-circle`,render:Ps}),Is={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Ls(e,t){return M(),z(`svg`,Is,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M12 2A10 10 0 0 0 2 12a10 10 0 0 0 10 10a10 10 0 0 0 10-10A10 10 0 0 0 12 2M7.07 18.28c.43-.9 3.05-1.78 4.93-1.78s4.5.88 4.93 1.78A7.9 7.9 0 0 1 12 20c-1.86 0-3.57-.64-4.93-1.72m11.29-1.45c-1.43-1.74-4.9-2.33-6.36-2.33s-4.93.59-6.36 2.33A7.93 7.93 0 0 1 4 12c0-4.41 3.59-8 8-8s8 3.59 8 8c0 1.82-.62 3.5-1.64 4.83M12 6c-1.94 0-3.5 1.56-3.5 3.5S10.06 13 12 13s3.5-1.56 3.5-3.5S13.94 6 12 6m0 5a1.5 1.5 0 0 1-1.5-1.5A1.5 1.5 0 0 1 12 8a1.5 1.5 0 0 1 1.5 1.5A1.5 1.5 0 0 1 12 11`},null,-1)]])}var Rs=W({name:`mdi-account-circle-outline`,render:Ls}),zs={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Bs(e,t){return M(),z(`svg`,zs,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M21 19v1H3v-1l2-2v-6c0-3.1 2.03-5.83 5-6.71V4a2 2 0 0 1 2-2a2 2 0 0 1 2 2v.29c2.97.88 5 3.61 5 6.71v6zm-7 2a2 2 0 0 1-2 2a2 2 0 0 1-2-2`},null,-1)]])}var Vs=W({name:`mdi-bell`,render:Bs}),Hs={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Us(e,t){return M(),z(`svg`,Hs,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M14 12h-4v-2h4m0 6h-4v-2h4m6-6h-2.81a6 6 0 0 0-1.82-1.96L17 4.41L15.59 3l-2.17 2.17a6 6 0 0 0-2.83 0L8.41 3L7 4.41l1.62 1.63C7.88 6.55 7.26 7.22 6.81 8H4v2h2.09c-.05.33-.09.66-.09 1v1H4v2h2v1c0 .34.04.67.09 1H4v2h2.81c1.04 1.79 2.97 3 5.19 3s4.15-1.21 5.19-3H20v-2h-2.09c.05-.33.09-.66.09-1v-1h2v-2h-2v-1c0-.34-.04-.67-.09-1H20z`},null,-1)]])}var Ws=W({name:`mdi-bug`,render:Us}),Gs={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Ks(e,t){return M(),z(`svg`,Gs,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M20 8h-2.81c-.45-.8-1.07-1.5-1.82-2L17 4.41L15.59 3l-2.17 2.17a6 6 0 0 0-2.83 0L8.41 3L7 4.41L8.62 6c-.75.5-1.36 1.21-1.81 2H4v2h2.09c-.06.33-.09.66-.09 1v1H4v2h2v1c0 .34.03.67.09 1H4v2h2.81A5.99 5.99 0 0 0 15 20.18c.91-.52 1.67-1.28 2.19-2.18H20v-2h-2.09c.06-.33.09-.66.09-1v-1h2v-2h-2v-1c0-.34-.03-.67-.09-1H20zm-4 7a4 4 0 0 1-4 4a4 4 0 0 1-4-4v-4a4 4 0 0 1 4-4a4 4 0 0 1 4 4zm-2-5v2h-4v-2zm-4 4h4v2h-4z`},null,-1)]])}var qs=W({name:`mdi-bug-outline`,render:Ks}),Js={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Ys(e,t){return M(),z(`svg`,Js,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M12 15.5A3.5 3.5 0 0 1 8.5 12A3.5 3.5 0 0 1 12 8.5a3.5 3.5 0 0 1 3.5 3.5a3.5 3.5 0 0 1-3.5 3.5m7.43-2.53c.04-.32.07-.64.07-.97s-.03-.66-.07-1l2.11-1.63c.19-.15.24-.42.12-.64l-2-3.46c-.12-.22-.39-.31-.61-.22l-2.49 1c-.52-.39-1.06-.73-1.69-.98l-.37-2.65A.506.506 0 0 0 14 2h-4c-.25 0-.46.18-.5.42l-.37 2.65c-.63.25-1.17.59-1.69.98l-2.49-1c-.22-.09-.49 0-.61.22l-2 3.46c-.13.22-.07.49.12.64L4.57 11c-.04.34-.07.67-.07 1s.03.65.07.97l-2.11 1.66c-.19.15-.25.42-.12.64l2 3.46c.12.22.39.3.61.22l2.49-1.01c.52.4 1.06.74 1.69.99l.37 2.65c.04.24.25.42.5.42h4c.25 0 .46-.18.5-.42l.37-2.65c.63-.26 1.17-.59 1.69-.99l2.49 1.01c.22.08.49 0 .61-.22l2-3.46c.12-.22.07-.49-.12-.64z`},null,-1)]])}var Xs=W({name:`mdi-cog`,render:Ys}),Zs={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Qs(e,t){return M(),z(`svg`,Zs,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M9 11.75A1.25 1.25 0 0 0 7.75 13A1.25 1.25 0 0 0 9 14.25A1.25 1.25 0 0 0 10.25 13A1.25 1.25 0 0 0 9 11.75m6 0A1.25 1.25 0 0 0 13.75 13A1.25 1.25 0 0 0 15 14.25A1.25 1.25 0 0 0 16.25 13A1.25 1.25 0 0 0 15 11.75M12 2A10 10 0 0 0 2 12a10 10 0 0 0 10 10a10 10 0 0 0 10-10A10 10 0 0 0 12 2m0 18a8 8 0 0 1-8-8a4 4 0 0 1 0-.86a10.05 10.05 0 0 0 5.26-5.37A9.99 9.99 0 0 0 17.42 10c.76 0 1.51-.09 2.25-.26c1.25 4.26-1.17 8.69-5.41 9.93c-.76.22-1.5.33-2.26.33M0 2a2 2 0 0 1 2-2h4v2H2v4H0zm24 20a2 2 0 0 1-2 2h-4v-2h4v-4h2zM2 24a2 2 0 0 1-2-2v-4h2v4h4v2zM22 0a2 2 0 0 1 2 2v4h-2V2h-4V0z`},null,-1)]])}var $s=W({name:`mdi-face-recognition`,render:Qs}),ec={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function tc(e,t){return M(),z(`svg`,ec,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M21 10V9l-6-6H5c-1.11 0-2 .89-2 2v14a2 2 0 0 0 2 2h6v-1.87l8.39-8.39c.44-.44 1-.68 1.61-.74m-7-5.5l5.5 5.5H14zm8.85 9.69l-.98.98l-2.04-2.04l.98-.98c.19-.2.52-.2.72 0l1.32 1.32c.2.2.2.53 0 .72m-3.72-.36l2.04 2.04L15.04 22H13v-2.04z`},null,-1)]])}var nc=W({name:`mdi-note-edit`,render:tc}),rc={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function ic(e,t){return M(),z(`svg`,rc,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`m18.13 12l1.26-1.26c.44-.44 1-.68 1.61-.74V9l-6-6H5c-1.11 0-2 .89-2 2v14a2 2 0 0 0 2 2h6v-1.87l.13-.13H5V5h7v7zM14 4.5l5.5 5.5H14zm5.13 9.33l2.04 2.04L15.04 22H13v-2.04zm3.72.36l-.98.98l-2.04-2.04l.98-.98c.19-.2.52-.2.72 0l1.32 1.32c.2.2.2.53 0 .72`},null,-1)]])}var ac=W({name:`mdi-note-edit-outline`,render:ic}),oc={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function sc(e,t){return M(),z(`svg`,oc,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`m10 17l-4-4l1.41-1.41L10 14.17l6.59-6.59L18 9m-6-8L3 5v6c0 5.55 3.84 10.74 9 12c5.16-1.26 9-6.45 9-12V5z`},null,-1)]])}var cc=W({name:`mdi-shield-check`,render:sc}),lc={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function uc(e,t){return M(),z(`svg`,lc,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M21 11c0 5.55-3.84 10.74-9 12c-5.16-1.26-9-6.45-9-12V5l9-4l9 4zm-9 10c3.75-1 7-5.46 7-9.78V6.3l-7-3.12L5 6.3v4.92C5 15.54 8.25 20 12 21m-2-4l-4-4l1.41-1.41L10 14.17l6.59-6.59L18 9`},null,-1)]])}var dc=W({name:`mdi-shield-check-outline`,render:uc}),fc={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function pc(e,t){return M(),z(`svg`,fc,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M16 17v2H2v-2s0-4 7-4s7 4 7 4m-3.5-9.5A3.5 3.5 0 1 0 9 11a3.5 3.5 0 0 0 3.5-3.5m3.44 5.5A5.32 5.32 0 0 1 18 17v2h4v-2s0-3.63-6.06-4M15 4a3.4 3.4 0 0 0-1.93.59a5 5 0 0 1 0 5.82A3.4 3.4 0 0 0 15 11a3.5 3.5 0 0 0 0-7`},null,-1)]])}var mc=W({name:`mdi-users`,render:pc}),hc={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function gc(e,t){return M(),z(`svg`,hc,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M13.07 10.41a5 5 0 0 0 0-5.82A3.4 3.4 0 0 1 15 4a3.5 3.5 0 0 1 0 7a3.4 3.4 0 0 1-1.93-.59M5.5 7.5A3.5 3.5 0 1 1 9 11a3.5 3.5 0 0 1-3.5-3.5m2 0A1.5 1.5 0 1 0 9 6a1.5 1.5 0 0 0-1.5 1.5M16 17v2H2v-2s0-4 7-4s7 4 7 4m-2 0c-.14-.78-1.33-2-5-2s-4.93 1.31-5 2m11.95-4A5.32 5.32 0 0 1 18 17v2h4v-2s0-3.63-6.06-4Z`},null,-1)]])}var _c=W({name:`mdi-users-outline`,render:gc}),vc={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function yc(e,t){return M(),z(`svg`,vc,[...t[0]||=[L(`path`,{fill:`currentColor`,"fill-rule":`evenodd`,d:`M21 5a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v4a2 2 0 0 0 2 2h4a2 2 0 0 0 2-2zM11 5a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v4a2 2 0 0 0 2 2h4a2 2 0 0 0 2-2zm10 10a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v4a2 2 0 0 0 2 2h4a2 2 0 0 0 2-2zm-10 0a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v4a2 2 0 0 0 2 2h4a2 2 0 0 0 2-2z`,"clip-rule":`evenodd`},null,-1)]])}var bc=W({name:`mingcute-grid-fill`,render:yc}),xc={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Sc(e,t){return M(),z(`svg`,xc,[...t[0]||=[L(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M20 5a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v4a1 1 0 0 0 1 1h4a1 1 0 0 0 1-1zM10 5a1 1 0 0 0-1-1H5a1 1 0 0 0-1 1v4a1 1 0 0 0 1 1h4a1 1 0 0 0 1-1zm10 10a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v4a1 1 0 0 0 1 1h4a1 1 0 0 0 1-1zm-10 0a1 1 0 0 0-1-1H5a1 1 0 0 0-1 1v4a1 1 0 0 0 1 1h4a1 1 0 0 0 1-1z`},null,-1)]])}var Cc=W({name:`mingcute-grid-line`,render:Sc}),wc={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Tc(e,t){return M(),z(`svg`,wc,[...t[0]||=[L(`path`,{fill:`currentColor`,"fill-rule":`evenodd`,d:`M5 3a3 3 0 0 0-3 3v10a2 2 0 0 0 2 2V6a1 1 0 0 1 1-1h14a2 2 0 0 0-2-2zm0 5a2 2 0 0 1 2-2h13a2 2 0 0 1 2 2v11.333a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2zm15 0H7v8.848L10.848 13a1.25 1.25 0 0 1 1.768 0l3.241 3.24l.884-.883a1.25 1.25 0 0 1 1.768 0L20 16.848zm-2 3a1.5 1.5 0 1 1-3 0a1.5 1.5 0 0 1 3 0`,"clip-rule":`evenodd`},null,-1)]])}var Ec=W({name:`mingcute-photo-album-fill`,render:Tc}),Dc={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Oc(e,t){return M(),z(`svg`,Dc,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M17 11a.5.5 0 1 1-1 0a.5.5 0 0 1 1 0`},null,-1),L(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-width":`2`,d:`m15.857 16.655l1.59-1.591a.25.25 0 0 1 .355 0L21 18.262m-15 0l5.555-5.555a.25.25 0 0 1 .354 0l4.71 4.71M18 4H5a2 2 0 0 0-2 2v11m14-6a.5.5 0 1 1-1 0a.5.5 0 0 1 1 0ZM7 20.333h13a1 1 0 0 0 1-1V8a1 1 0 0 0-1-1H7a1 1 0 0 0-1 1v11.333a1 1 0 0 0 1 1Z`},null,-1)]])}var kc=W({name:`mingcute-photo-album-line`,render:Oc}),Ac={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function jc(e,t){return M(),z(`svg`,Ac,[...t[0]||=[L(`path`,{fill:`currentColor`,"fill-rule":`evenodd`,d:`M17 2.5A1.5 1.5 0 0 1 18.5 4v.5H20a1.5 1.5 0 0 1 0 3h-1.5V8a1.5 1.5 0 0 1-3 0v-.5H4a1.5 1.5 0 1 1 0-3h11.5V4A1.5 1.5 0 0 1 17 2.5m-10 6A1.5 1.5 0 0 1 8.5 10v.5H20a1.5 1.5 0 0 1 0 3H8.5v.5a1.5 1.5 0 0 1-3 0v-.5H4a1.5 1.5 0 0 1 0-3h1.5V10A1.5 1.5 0 0 1 7 8.5m10 6a1.5 1.5 0 0 1 1.5 1.5v.5H20a1.5 1.5 0 0 1 0 3h-1.5v.5a1.5 1.5 0 0 1-3 0v-.5H4a1.5 1.5 0 0 1 0-3h11.5V16a1.5 1.5 0 0 1 1.5-1.5`,"clip-rule":`evenodd`},null,-1)]])}var Mc=W({name:`mingcute-settings-2-fill`,render:jc}),Nc={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Pc(e,t){return M(),z(`svg`,Nc,[...t[0]||=[L(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M4 6h16M4 12h16M4 18h16M17 4v4M7 10v4m10 2v4`},null,-1)]])}var Fc=W({name:`mingcute-settings-2-line`,render:Pc}),Ic={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Lc(e,t){return M(),z(`svg`,Ic,[...t[0]||=[fn(`<g fill="currentColor"><circle cx="5" cy="5" r="1.5"></circle><circle cx="12" cy="5" r="1.5"></circle><circle cx="19" cy="5" r="1.5"></circle><circle cx="5" cy="12" r="1.5"></circle><circle cx="12" cy="12" r="1.5"></circle><circle cx="19" cy="12" r="1.5"></circle><circle cx="5" cy="19" r="1.5"></circle><circle cx="12" cy="19" r="1.5"></circle><circle cx="19" cy="19" r="1.5"></circle></g>`,1)]])}var Rc=W({name:`proicons-grid-dots`,render:Lc}),zc={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Bc(e,t){return M(),z(`svg`,zc,[...t[0]||=[L(`path`,{fill:`currentColor`,"fill-rule":`evenodd`,d:`M3.464 3.464C2 4.93 2 7.286 2 12s0 7.071 1.464 8.535C4.93 22 7.286 22 12 22s7.071 0 8.535-1.465C22 19.072 22 16.714 22 12s0-7.071-1.465-8.536C19.072 2 16.714 2 12 2S4.929 2 3.464 3.464m14.112 7.016a.75.75 0 0 0-1.152-.96l-1.797 2.156c-.37.445-.599.716-.786.885a.8.8 0 0 1-.163.122l-.011.005l-.008-.004l-.003-.001a.8.8 0 0 1-.164-.122c-.187-.17-.415-.44-.786-.885l-.292-.35c-.328-.395-.625-.75-.901-1c-.301-.272-.68-.514-1.18-.514s-.878.242-1.18.514c-.276.25-.572.605-.9 1l-1.83 2.194a.75.75 0 1 0 1.153.96l1.797-2.156c.37-.445.599-.716.786-.885a.8.8 0 0 1 .163-.122l.007-.003l.004-.002l.011.005a.8.8 0 0 1 .164.122c.187.17.415.44.786.885l.292.35c.329.395.625.75.901 1c.301.272.68.514 1.18.514s.878-.242 1.18-.514c.276-.25.572-.605.9-1z`,"clip-rule":`evenodd`},null,-1)]])}var Vc=W({name:`solar-graph-bold`,render:Bc}),Hc={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Uc(e,t){return M(),z(`svg`,Hc,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M17.576 10.48a.75.75 0 0 0-1.152-.96l-1.797 2.156c-.37.445-.599.716-.786.885a.8.8 0 0 1-.163.122l-.011.005l-.011-.005a.8.8 0 0 1-.164-.122c-.187-.17-.415-.44-.786-.885l-.292-.35c-.328-.395-.625-.75-.901-1c-.301-.272-.68-.514-1.18-.514s-.878.242-1.18.514c-.276.25-.572.605-.9 1l-1.83 2.194a.75.75 0 1 0 1.153.96l1.797-2.156c.37-.445.599-.716.786-.885a.8.8 0 0 1 .163-.122l.011-.005l.011.005a.8.8 0 0 1 .164.122c.187.17.415.44.786.885l.292.35c.329.395.625.75.901 1c.301.272.68.514 1.18.514s.878-.242 1.18-.514c.276-.25.572-.605.9-1z`},null,-1),L(`path`,{fill:`currentColor`,"fill-rule":`evenodd`,d:`M11.943 1.25c-2.309 0-4.118 0-5.53.19c-1.444.194-2.584.6-3.479 1.494c-.895.895-1.3 2.035-1.494 3.48c-.19 1.411-.19 3.22-.19 5.529v.114c0 2.309 0 4.118.19 5.53c.194 1.444.6 2.584 1.494 3.479c.895.895 2.035 1.3 3.48 1.494c1.411.19 3.22.19 5.529.19h.114c2.309 0 4.118 0 5.53-.19c1.444-.194 2.584-.6 3.479-1.494c.895-.895 1.3-2.035 1.494-3.48c.19-1.411.19-3.22.19-5.529v-.114c0-2.309 0-4.118-.19-5.53c-.194-1.444-.6-2.584-1.494-3.479c-.895-.895-2.035-1.3-3.48-1.494c-1.411-.19-3.22-.19-5.529-.19zM3.995 3.995c.57-.57 1.34-.897 2.619-1.069c1.3-.174 3.008-.176 5.386-.176s4.086.002 5.386.176c1.279.172 2.05.5 2.62 1.069c.569.57.896 1.34 1.068 2.619c.174 1.3.176 3.008.176 5.386s-.002 4.086-.176 5.386c-.172 1.279-.5 2.05-1.069 2.62c-.57.569-1.34.896-2.619 1.068c-1.3.174-3.008.176-5.386.176s-4.086-.002-5.386-.176c-1.279-.172-2.05-.5-2.62-1.069c-.569-.57-.896-1.34-1.068-2.619c-.174-1.3-.176-3.008-.176-5.386s.002-4.086.176-5.386c.172-1.279.5-2.05 1.069-2.62`,"clip-rule":`evenodd`},null,-1)]])}var Wc=W({name:`solar-graph-outline`,render:Uc}),Gc={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Kc(e,t){return M(),z(`svg`,Gc,[...t[0]||=[L(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M4 7h3a1 1 0 0 0 1-1V5a2 2 0 0 1 4 0v1a1 1 0 0 0 1 1h3a1 1 0 0 1 1 1v3a1 1 0 0 0 1 1h1a2 2 0 0 1 0 4h-1a1 1 0 0 0-1 1v3a1 1 0 0 1-1 1h-3a1 1 0 0 1-1-1v-1a2 2 0 0 0-4 0v1a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1v-3a1 1 0 0 1 1-1h1a2 2 0 0 0 0-4H4a1 1 0 0 1-1-1V8a1 1 0 0 1 1-1`},null,-1)]])}var qc=W({name:`tabler-puzzle`,render:Kc}),Jc={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Yc(e,t){return M(),z(`svg`,Jc,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M10 2a3 3 0 0 1 2.995 2.824L13 5v1h3a2 2 0 0 1 1.995 1.85L18 8v3h1a3 3 0 0 1 .176 5.995L19 17h-1v3a2 2 0 0 1-1.85 1.995L16 22h-3a2 2 0 0 1-1.995-1.85L11 20v-1a1 1 0 0 0-1.993-.117L9 19v1a2 2 0 0 1-1.85 1.995L7 22H4a2 2 0 0 1-1.995-1.85L2 20v-3a2 2 0 0 1 1.85-1.995L4 15h1a1 1 0 0 0 .117-1.993L5 13H4a2 2 0 0 1-1.995-1.85L2 11V8a2 2 0 0 1 1.85-1.995L4 6h3V5a3 3 0 0 1 3-3`},null,-1)]])}var Xc=W({name:`tabler-puzzle-filled`,render:Yc}),Zc=`cui-chunk-reload`,Qc=2,$c=8e3;function el(e){let t=Number(sessionStorage.getItem(Zc)??`0`)||0;t>=Qc||(sessionStorage.setItem(Zc,String(t+1)),e())}function tl(e=$c){setTimeout(()=>sessionStorage.removeItem(Zc),e)}function nl(){let{angle:e}=hl(),t=gl({listenOrientation:!0});return{xxsBreakpoint:U(()=>{let n=t.width.value;return e.value>0&&(n=screen.height>screen.width?screen.height:screen.width),n<=360}),xsBreakpoint:U(()=>{let n=t.width.value;return e.value>0&&(n=screen.height>screen.width?screen.height:screen.width),n<=450}),smBreakpoint:U(()=>{let n=t.width.value;return e.value>0&&(n=screen.height>screen.width?screen.height:screen.width),n<640}),mdBreakpoint:U(()=>{let n=t.width.value;return e.value>0&&(n=screen.height>screen.width?screen.height:screen.width),n<768}),xmdBreakpoint:U(()=>{let n=t.width.value;return e.value>0&&(n=screen.height>screen.width?screen.height:screen.width),n>=640&&n<1024}),lgBreakpoint:U(()=>{let n=t.width.value;return e.value>0&&(n=screen.height>screen.width?screen.height:screen.width),n>=1024}),xlBreakpoint:U(()=>{let n=t.width.value;return e.value>0&&(n=screen.height>screen.width?screen.height:screen.width),n>=1280}),xxlBreakpoint:U(()=>{let n=t.width.value;return e.value>0&&(n=screen.height>screen.width?screen.height:screen.width),n>=1536})}}function rl(){let e=U(()=>typeof window>`u`?!1:[/Android/i,/webOS/i,/iPhone/i,/iPad/i,/iPod/i,/BlackBerry/i,/Windows Phone/i].some(e=>navigator.userAgent.match(e))),t=U(()=>typeof window>`u`?!1:[/Android/i].some(e=>navigator.userAgent.match(e))),n=U(()=>typeof window>`u`?!1:r.value||i.value),r=U(()=>typeof window>`u`?!1:[/iPhone/i].some(e=>navigator.userAgent.match(e))),i=U(()=>typeof window>`u`?!1:[/Macintosh/i].some(e=>navigator.userAgent.match(e)&&navigator.maxTouchPoints&&navigator.maxTouchPoints>1)),a=U(()=>typeof window>`u`?[0,0]:r.value&&navigator.userAgent.match(/OS [\d_]+/i)?.[0].substr(3).split(`_`).map(e=>parseInt(e))||[0,0]),o=U(()=>typeof window>`u`?!1:[/Safari/i].some(e=>navigator.userAgent.match(e))),s=U(()=>typeof window>`u`?null:navigator.userAgent.match(/Version\/(\d+).+Safari/)),c=U(()=>typeof window>`u`?!1:[/Firefox/i].some(e=>navigator.userAgent.match(e))),l=U(()=>typeof window>`u`?!1:[/Chrome/i].some(e=>navigator.userAgent.match(e))),u=U(()=>{let e=!1;if(`maxTouchPoints`in navigator)e=navigator.maxTouchPoints>0;else if(`msMaxTouchPoints`in navigator)navigator!==null&&(e=navigator.msMaxTouchPoints>0);else{let t=matchMedia(`(pointer:coarse)`);if(t&&t.media===`(pointer:coarse)`)e=!!t.matches;else if(`orientation`in window)e=!0;else{let t=navigator.userAgent;e=/\b(BlackBerry|webOS|iPhone|IEMobile)\b/i.test(t)||/\b(Android|Windows Phone|iPad|iPod)\b/i.test(t)}}return e}),d=U(()=>xl(`(display-mode: standalone)`).value||window.navigator.standalone||document.referrer.includes(`android-app://`)),f=U(()=>{let e=document.body.requestFullscreen!==void 0||document.body.mozRequestFullScreen!==void 0||document.body.webkitRequestFullscreen!==void 0||document.body.msRequestFullscreen!==void 0||document.exitFullscreen!==void 0||document.mozCancelFullScreen!==void 0||document.webkitExitFullscreen!==void 0,[t,n]=a.value,i=t&&t>=17&&n&&n>=2;return!!(e||!r.value||r.value&&i)});return{isPWA:d,isMobile:e,isAndroid:t,isIos:n,isIphone:r,isIpad:i,iosVersion:a,isSafari:o,safariVersion:s,isFirefox:c,isChrome:l,isTouch:u,isPipSupported:U(()=>{let e=`pictureInPictureEnabled`in document;return n.value&&d.value?!1:e}),isFsSupported:f}}var il={HEIGHT:70},al={HEIGHT:60},ol=[`account`,`appearance`,`user`,`notifications`,`permissions`,`recordings`,`remote`,`backup`,`system`],sl={cameras:{showEvents:!0,order:[],groupOrder:{},viewMode:`default`,dragDisabled:!0},camview:{dragDisabled:!1},config:{zoom:12},console:{zoom:12},interface:{showBottomBarOnMobile:!0,selectedSettingsView:`account`,navbarStayCollapsed:!0,landingPage:`/home`,tableRows:15},sensors:{hideCameraBound:!0,view:`table`},plugins:{view:`cards`},"cui-logger-debug":1,"cui-logger-recording":1},cl=$n(`ui`,()=>{let e=ce(`ui`,sl,{mergeDefaults:!0});return e.value.interface.landingPage??=`/home`,e.value.interface.tableRows??=15,e.value.sensors.view??=`table`,{uiSettings:e}});function ll(){let e=tr(),t=U(()=>e.meta.ui);return{ui:t,showNavbar:U(()=>!!vn(t.value?.showNavbar)),showTopbar:U(()=>!!vn(t.value?.showTopbar)),showBottombar:U(()=>!!vn(t.value?.showBottombar)),showRouterLoading:U(()=>!!vn(t.value?.showRouterLoading)),showRouterLoadingSub:U(()=>!!vn(t.value?.showRouterLoadingSub)),minifiedTopbar:U(()=>!!vn(t.value?.minifiedTopbar)),background:U(()=>vn(t.value?.background)),padding:U(()=>!!vn(t.value?.containerSettings?.padding)),paddingTop:U(()=>vn(t.value?.containerSettings?.paddingTop)),paddingBottom:U(()=>vn(t.value?.containerSettings?.paddingBottom)),paddingLeft:U(()=>vn(t.value?.containerSettings?.paddingLeft)),paddingRight:U(()=>vn(t.value?.containerSettings?.paddingRight)),showTitle:U(()=>!!vn(t.value?.containerSettings?.showTitle)),fullwidth:U(()=>!!vn(t.value?.containerSettings?.fullwidth)),disableScroll:U(()=>!!vn(t.value?.containerSettings?.disableScroll)),ignoreSafeAreaBottom:U(()=>!!vn(t.value?.containerSettings?.ignoreSafeAreaBottom)),noExtraPadding:U(()=>!!vn(t.value?.containerSettings?.noExtraPadding)),allowOverflowX:U(()=>!!vn(t.value?.containerSettings?.allowOverflowX))}}var ul=Symbol(`cui-app-bus`),dl=wn({navbarState:void 0,subbarState:void 0});function fl(){dl.navbarState=void 0,dl.subbarState=void 0}function pl(){let e=S(ul);return e.on(({subbarState:e,navbarState:t})=>{e&&e!==dl.subbarState&&(dl.subbarState=e),t&&t!==dl.navbarState&&(dl.navbarState=t)}),{state:dl,bus:e}}function ml(){let e=cl(),t=tr(),n=ll(),{state:r}=pl(),{mdBreakpoint:i,smBreakpoint:a,xlBreakpoint:o}=vl(),{uiSettings:s}=rr(e),c=U(()=>{if(u.value)return s.value.interface.navbarStayCollapsed&&r.navbarState!==`opened`?i.value?`closed`:`minified`:o.value||r.navbarState===`opened`?`opened`:i.value?`closed`:`minified`}),l=U(()=>t.path.includes(`/settings`)?o.value?`opened`:r.subbarState?r.subbarState:`closed`:void 0),u=U(()=>n.showNavbar.value),d=U(()=>n.showBottombar.value&&s.value.interface.showBottomBarOnMobile&&a.value),f=U(()=>n.showTopbar.value);return{navbarState:c,subbarState:l,showBottombar:d,showNavbar:u,showTopbar:f,topbarHeight:U(()=>f.value?n.minifiedTopbar.value?0:al.HEIGHT:0),bottombarHeight:U(()=>d.value?il.HEIGHT:0)}}var hl=tt(ct),gl=tt(Ve),_l=tt(Re),vl=tt(nl),yl=tt(rl),bl=tt(ml),xl=tt(r),Sl=_n({__name:`CuiFloatingButtonGroup`,props:{direction:{default:`vertical`},right:{},forceVisible:{type:Boolean}},setup(e){let t=e,{bottombarHeight:n}=bl(),{direction:r,forceVisible:i}=Sn(t),{y:a}=yt(window,{throttle:100});return(t,o)=>(M(),z(`div`,{class:I([`fixed z-10 flex transition-all duration-200 ease-in-out`,{"right-safe-offset-5":!e.right,"flex-col":H(r)===`vertical`,"flex-row":H(r)===`horizontal`,"scale-0 opacity-0":!H(i)&&H(a)>10,"scale-100 opacity-100":H(i)||H(a)<=10}]),style:X({bottom:`calc(${H(n)}px + 1.25rem + env(safe-area-inset-bottom, 0px))`,right:e.right||void 0})},[Gt(t.$slots,`default`)],6))}}),Cl=_n({__name:`CuiFloatingButton`,props:{buttonProps:{},tooltipProps:{},label:{},icon:{},iconProps:{},grouped:{type:Boolean},forceVisible:{type:Boolean}},emits:[`click`,`expand`,`shrink`,`hover`],setup(e,{emit:t}){let n=e,r=t,{bottombarHeight:i}=bl(),{buttonProps:a,tooltipProps:o,label:s,icon:c,iconProps:l,grouped:u,forceVisible:d}=Sn(n),f=B(!1),{y:p}=yt(window,{throttle:100});function m(e){f.value=e,r(`hover`,e)}return q(p,()=>{u?.value||(d?.value||p.value<=10?r(`expand`):r(`shrink`))},{immediate:!0,deep:!0}),(e,t)=>{let n=te,r=de;return on((M(),z(`div`,{class:I([`transition-all duration-300 ease-in-out cui-icon-3xl`,[{"fixed right-safe-offset-5 z-10":!H(u),"scale-0 opacity-0":!H(u)&&!H(d)&&H(p)>10,"scale-100 opacity-100":!H(u)&&(H(d)||H(p)<=10),"scale-110":H(f)}]]),style:X(H(u)?void 0:{bottom:`calc(${H(i)}px + 1.25rem + env(safe-area-inset-bottom, 0px))`})},[on((M(),G(n,Mn(H(a),{rounded:``,onClick:t[0]||=t=>e.$emit(`click`),label:H(s),class:`shadow-lg`}),Y({_:2},[H(c)?{name:`icon`,fn:F(()=>[(M(),G(Fn(H(c)),jn(ln(H(l))),null,16))]),key:`0`}:void 0]),1040,[`label`])),[[r,H(o),void 0,{left:!0}]])],6)),[[H(ar),[m,{}]]])}}}),wl=[`src`,`alt`],Tl=[`src`,`alt`],El=_n({__name:`CuiImage`,props:{src:{},alt:{default:`Image`},width:{default:`100%`},height:{default:`100%`},imageStyle:{type:[Boolean,null,String,Object,Array]},imageClass:{type:[Boolean,null,String,Object,Array]},imageContainerClass:{type:[Boolean,null,String,Object,Array]},imageContainerStyle:{type:[Boolean,null,String,Object,Array]}},setup(e,{expose:t}){let{src:n,width:r,height:i,imageStyle:a,imageClass:o,imageContainerClass:s,imageContainerStyle:c}=Sn(e),l=B(!1),u=new Image,d=B(),f=U(()=>n.value?oE(n.value):void 0),p=U(()=>!!n.value&&!d.value&&!l.value),m=U(()=>oE()),h=U(()=>(u.src=d.value||f.value||``,{width:u.width,height:u.height})),g=U(()=>r.value?typeof r.value==`number`?`${r.value}px`:r.value:`auto`),_=U(()=>i.value?typeof i.value==`number`?`${i.value}px`:i.value:`auto`);return q(f,e=>{if(l.value=!1,!e){d.value=void 0;return}if(e===d.value)return;let t=new Image;t.src=e,t.decode().then(()=>{f.value===e&&(d.value=e)}).catch(()=>{f.value===e&&(l.value=!0)})},{immediate:!0}),t({snapshotDimensions:h}),(t,r)=>{let i=re,u=vr;return M(),G(u,{alt:e.alt,class:`w-full h-full flex items-center justify-center`},{image:F(()=>[H(p)?(M(),G(i,{key:0,"stroke-width":`6`,class:`w-[50%] h-[50%] max-w-[30px] max-h-[30px]`})):J(``,!0),on(L(`div`,{class:I(H(s)),style:X(H(c))},[!H(l)&&H(d)?(M(),z(`img`,{key:0,src:H(d),alt:e.alt,decoding:`async`,style:X([{width:H(g),height:H(_)},H(a)]),class:I(H(o))},null,14,wl)):J(``,!0),H(l)||!H(n)?(M(),z(`img`,{key:1,src:H(m),alt:e.alt,decoding:`async`,style:X({width:H(g),height:H(_)}),class:`object-contain`},null,12,Tl)):J(``,!0)],6),[[sn,!H(p)]])]),_:1},8,[`alt`])}}}),Dl=(e,t)=>{let n=e.__vccOpts||e;for(let[e,r]of t)n[e]=r;return n},Ol=Dl(El,[[`__scopeId`,`data-v-1c793219`]]);async function kl(e){e={...e,filename:Al(e.filename)};let t=await Nl(e);Pl()&&await Fl(t,e.filename)||Il(t,e.filename)}function Al(e){return e.replace(/[\\/:*?"<>|]/g,`_`)}function jl(e){return/^https?:\/\//i.test(e)?e:`${ei().target.value?.endpoint.url??window.location.origin}${e.startsWith(`/`)?``:`/`}${e}`}function Ml(){let e={},t=ei().target.value?.tokens;return t?.access&&(e.Authorization=`Bearer ${t.access}`),t?.proxySession&&(e[`X-Proxy-Session`]=t.proxySession),e}async function Nl(e){if(`blob`in e)return e.blob;if(`dataUrl`in e)return(await fetch(e.dataUrl)).blob();let t=await fetch(jl(e.url),{headers:Ml(),credentials:`include`});if(!t.ok)throw Error(`Download failed: ${t.status} ${t.statusText}`);return t.blob()}function Pl(){return typeof window>`u`?!1:window.matchMedia(`(display-mode: standalone)`).matches?!0:!!window.navigator.standalone}async function Fl(e,t){if(typeof navigator>`u`||!navigator.canShare||!navigator.share)return!1;let n=new File([e],t,{type:e.type||`application/octet-stream`});if(!navigator.canShare({files:[n]}))return!1;try{return await navigator.share({files:[n]}),!0}catch(e){return e instanceof Error&&e.name===`AbortError`}}function Il(e,t){let n=URL.createObjectURL(e),r=document.createElement(`a`);r.href=n,r.download=t,document.body.appendChild(r),r.click(),r.remove(),setTimeout(()=>URL.revokeObjectURL(n),1e3)}var Ll={key:2,class:`absolute top-0 right-0 m-4 px-1.5 py-0.5 text-[10px] font-semibold bg-black/30 rounded-full text-white pointer-events-none`},Rl=_n({__name:`CuiCameraSnapshot`,props:{camera:{},src:{},loading:{type:Boolean},showLoadingScreen:{type:Boolean,default:!0},width:{default:`100%`},height:{default:`100%`},objectFit:{default:`cover`},aspectRatio:{},imageStyle:{type:[Boolean,null,String,Object,Array]},imageClass:{type:[Boolean,null,String,Object,Array]},showTimestamp:{type:Boolean}},setup(e,{expose:t}){let n=e,{camera:r,loading:i,src:a,width:o,height:s,showLoadingScreen:c,objectFit:l,aspectRatio:u,imageStyle:d,imageClass:f,showTimestamp:p}=Sn(n),{snapshotSrc:m,isLoading:h,snapshotTimestamp:g,refresh:_}=fe(r),v=n.showTimestamp?ht({interval:1e3}):void 0,y=Ut(`cuiImageRef`),b=U(()=>typeof r.value==`object`&&r.value?.disabled===!0),x=U(()=>a.value||m.value),S=U(()=>!b.value&&(i.value||h.value)&&c.value&&!x.value),C=U(()=>d.value?d.value:{objectFit:l.value,aspectRatio:u.value,width:o.value,height:s.value}),w=U(()=>f.value||``),T=U(()=>{let e=r.value;return typeof e==`string`?e:e.name}),ee=U(()=>y.value?.snapshotDimensions),E=U(()=>{if(!(!v||!g.value))return te(v.value.getTime()-g.value)});function te(e){let t=Math.floor(e/1e3);if(t<1)return`now`;if(t<60)return`${t}s`;let n=Math.floor(t/60);if(n<60)return`${n}min`;let r=Math.floor(n/60);if(r<24)return`${r}h`;let i=Math.floor(r/24);if(i<30)return`${i}d`;let a=Math.floor(i/30);return a<12?`${a}m`:`${Math.floor(i/365)}y`}async function ne(){if(x.value){let e=`${T.value.replace(/ /g,`_`).toLowerCase()}_${new Date().toISOString()}.png`;await kl({dataUrl:x.value,filename:e,mimeType:`image/png`})}}return t({download:ne,refresh:_,isLoading:S,snapshotSrc:x,snapshotDimensions:ee}),(e,t)=>{let n=re,r=Ol;return M(),z(`div`,{class:I([`bg-black aspect-video flex items-center justify-center`,{relative:H(p)}]),style:X({width:`${H(o)}`,height:`${H(s)}`})},[H(S)?(M(),G(n,{key:0,class:`m-0 max-w-[30px] max-h-[30px]`,"stroke-width":`5`,style:X({width:`calc(${H(o)} / 2)`,height:`calc(${H(s)} / 2)`})},null,8,[`style`])):H(b)?J(``,!0):(M(),G(r,{key:1,ref_key:`cuiImageRef`,ref:y,src:H(x),"image-container-class":`w-full h-full flex items-center justify-center`,"image-style":H(C),"image-class":H(w)},null,8,[`src`,`image-style`,`image-class`])),H(p)&&H(g)&&!H(b)?(M(),z(`span`,Ll,R(H(E)),1)):J(``,!0)],6)}}}),zl={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Bl(e,t){return M(),z(`svg`,zl,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M12 20q-3.35 0-5.675-2.325T4 12t2.325-5.675T12 4q1.725 0 3.3.712T18 6.75V5q0-.425.288-.712T19 4t.713.288T20 5v5q0 .425-.288.713T19 11h-5q-.425 0-.712-.288T13 10t.288-.712T14 9h3.2q-.8-1.4-2.187-2.2T12 6Q9.5 6 7.75 7.75T6 12t1.75 4.25T12 18q1.7 0 3.113-.862t2.187-2.313q.2-.35.563-.487t.737-.013q.4.125.575.525t-.025.75q-1.025 2-2.925 3.2T12 20`},null,-1)]])}var Vl=W({name:`material-symbols-refresh-rounded`,render:Bl}),Hl={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Ul(e,t){return M(),z(`svg`,Hl,[...t[0]||=[L(`path`,{fill:`currentColor`,"fill-rule":`evenodd`,d:`M18 2.75a.75.75 0 0 1 0-1.5h4a.75.75 0 0 1 .53 1.28l-2.72 2.72H22a.75.75 0 0 1 0 1.5h-4a.75.75 0 0 1-.53-1.28l2.72-2.72zm-4.5 6a.75.75 0 0 1 0-1.5h3a.75.75 0 0 1 .53 1.28l-1.72 1.72h1.19a.75.75 0 0 1 0 1.5h-3a.75.75 0 0 1-.53-1.28l1.72-1.72z`,"clip-rule":`evenodd`},null,-1),L(`path`,{fill:`currentColor`,d:`M12 22c5.523 0 10-4.477 10-10c0-.463-.694-.54-.933-.143a6.5 6.5 0 1 1-8.924-8.924C12.54 2.693 12.463 2 12 2C6.477 2 2 6.477 2 12s4.477 10 10 10`},null,-1)]])}var Wl=W({name:`solar-moon-sleep-bold`,render:Ul}),Gl={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Kl(e,t){return M(),z(`svg`,Gl,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M21 7L9 19l-5.5-5.5l1.41-1.41L9 16.17L19.59 5.59z`},null,-1)]])}var ql=W({name:`mdi-check`,render:Kl}),Jl={viewBox:`0 0 32 32`,width:`1.2em`,height:`1.2em`};function Yl(e,t){return M(),z(`svg`,Jl,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`m20.923 22.337l7.37 7.37a1 1 0 0 0 1.414-1.414l-26-26a1 1 0 0 0-1.414 1.414L4.884 6.3A4.5 4.5 0 0 0 2 10.5v11A4.5 4.5 0 0 0 6.5 26h10c2.2 0 4.03-1.578 4.423-3.663m1.577-3.374l5.52 5.519c1.056-.134 1.976-1.017 1.976-2.236V9.754c0-1.814-2.036-2.882-3.528-1.852l-3.968 2.74zM9.537 6L21 17.463V10.5A4.5 4.5 0 0 0 16.5 6z`},null,-1)]])}var Xl=W({name:`fluent-video-off32-filled`,render:Yl}),Zl={user:0,admin:1,master:2};function Ql(e,t){return(Zl[e]??0)>=(Zl[t]??0)}function $l(e,t,n){let{user:r}=rr(eE()),i=r.value?.role??`user`;if(t&&!e)return n?i===t:Ql(i,t);e??=tr();let a=!e?.meta?.auth||e?.meta?.auth.requiresAuth===!1,o=t??e.meta?.auth?.role??`user`;return a||o===`none`?!0:n?i===o:Ql(i,o)}var eu=[`draggable`],tu={key:0,class:`absolute inset-0 z-2 flex items-center justify-center bg-black/80 pointer-events-none`},nu={key:1,class:`absolute top-3 left-3 z-4 pointer-events-none`},ru={class:`w-full h-[60px] p-4 absolute bottom-0 z-3 flex items-center gap-1 justify-between pointer-events-none`},iu={class:`text-xs font-semibold p-2 bg-black/60 rounded-full text-white flex items-center gap-1`},au=300,ou=Dl(_n({__name:`CuiDraggableCameraCard`,props:{camera:{},noDrag:{type:Boolean},viewTransition:{type:Boolean},selectionMode:{type:Boolean},selected:{type:Boolean},findCard:{type:Function},moveCard:{type:Function},snapshotRef:{type:Function}},emits:[`refresh-snapshot`,`open-console`,`open-settings`,`click`,`drag-end`],setup(e,{emit:t}){let n=e,r=t,{x:i,y:a}=_l(),{isTouch:o}=yl(),{camera:s,noDrag:c,viewTransition:l}=Sn(n),u=Ut(`boxRef`),d=pn(),f=pn(null),p=B(0),m=B(0),h=B(!1),g=null,_=0,v=U(()=>!c.value),y=U(()=>n.findCard(s.value._id).index),[b,x]=wr(()=>({type:`camera-card`,canDrag(){return v.value},item:()=>(g=null,_=0,{id:s.value._id,originalIndex:y.value}),collect:e=>({isDragging:e.isDragging()}),end:(e,t)=>{let{id:i,originalIndex:a}=e;t.didDrop()||n.moveCard(i,a),r(`drag-end`)}})),[,S]=Er(()=>({accept:`camera-card`,hover({id:e}){if(e!==s.value._id){let t=Date.now();if(g===s.value._id&&t-_<au)return;let{index:r}=n.findCard(s.value._id),{index:i}=n.findCard(e);i!==r&&(g=s.value._id,_=t,n.moveCard(e,r))}}})),C=U(()=>b.value.isDragging),w=U(()=>C.value&&o.value);function T(){ee(),h.value=!0;let e=u.value?.getBoundingClientRect();e&&(p.value=i.value-e.left,m.value=a.value-e.top,E())}function ee(){h.value=!1,ne(),p.value=0,m.value=0}function E(){if(ne(),!u.value)return;let e=u.value.cloneNode(!0),t=u.value.getBoundingClientRect();e.style.width=`${t.width}px`,e.style.height=`${t.height}px`,e.classList.add(`drag-preview`),document.body.appendChild(e),f.value=e}function ne(){f.value&&document.body.contains(f.value)&&document.body.removeChild(f.value),f.value=null}function D(){!f.value||!h.value||requestAnimationFrame(()=>{if(!f.value)return;let e=i.value-p.value,t=a.value-m.value;f.value.style.left=`${e}px`,f.value.style.top=`${t}px`})}function O(e){d.value=x(S(e))}function re(e){o.value&&e.preventDefault()}return q(w,e=>{e?T():ee()}),q([i,a],()=>{D()},{flush:`sync`}),Xt(()=>{ee()}),(t,n)=>{let r=Xl,i=ql,a=Wl,c=Vl,d=te,f=ts,p=Xs,m=Rl,h=de;return M(),z(`div`,{ref_key:`boxRef`,ref:u,class:`camera-wrapper`},[L(`div`,{ref:O,class:I([`rounded-xl overflow-hidden border-[1px] border-color relative`,{"cursor-move":H(v)&&!H(C)}]),style:X({opacity:+!H(C),viewTransitionName:H(l)?`camera-card-${H(s).name.replace(/[^a-zA-Z0-9-_]/g,`-`)}`:void 0}),draggable:H(v)&&!H(o),onDragstart:re},[H(s).disabled?(M(),z(`div`,tu,[K(r,{class:`w-8 h-8 text-white/60`})])):J(``,!0),e.selectionMode?(M(),z(`div`,nu,[L(`div`,{class:I([`w-6 h-6 rounded-full border-2 flex items-center justify-center transition-colors`,e.selected?`bg-primary border-primary`:`bg-black/40 border-white/80`])},[e.selected?(M(),G(i,{key:0,class:`w-4 h-4 text-white`})):J(``,!0)],2)])):J(``,!0),L(`div`,ru,[L(`span`,iu,[mn(R(H(s).name)+` `,1),H(s).disabled?(M(),G(r,{key:0,class:`w-3 h-3 text-red-400`})):H(s).detectionSettings?.snooze?(M(),G(a,{key:1,class:`w-3 h-3 text-amber-400`})):J(``,!0)]),e.selectionMode?J(``,!0):(M(),z(V,{key:0},[H(s).disabled?J(``,!0):(M(),z(V,{key:0},[on((M(),G(d,{severity:`secondary`,rounded:``,class:`dark-mode cui-icon-md pointer-events-auto ml-auto`,onClick:n[0]||=It(e=>t.$emit(`refresh-snapshot`),[`stop`])},{icon:F(()=>[K(c,{width:`100%`,height:`100%`})]),_:1})),[[h,{value:t.$t(`components.player.refresh_snapshot`)},void 0,{top:!0}]]),(`hasPermission`in t?t.hasPermission:H($l))(void 0,`admin`)?on((M(),G(d,{key:0,severity:`secondary`,rounded:``,class:`dark-mode cui-icon-md pointer-events-auto`,onClick:n[1]||=It(e=>t.$emit(`open-console`),[`stop`])},{icon:F(()=>[K(f,{width:`100%`,height:`100%`})]),_:1})),[[h,{value:t.$t(`components.player.log`)},void 0,{top:!0}]]):J(``,!0)],64)),(`hasPermission`in t?t.hasPermission:H($l))(void 0,`admin`)?on((M(),G(d,{key:1,rounded:``,severity:`secondary`,class:I([`dark-mode cui-icon-md pointer-events-auto`,{"ml-auto":H(s).disabled}]),onClick:n[2]||=It(e=>t.$emit(`open-settings`),[`stop`])},{icon:F(()=>[K(p,{width:`100%`,height:`100%`})]),_:1},8,[`class`])),[[h,{value:t.$t(`components.player.settings`)},void 0,{top:!0}]]):J(``,!0)],64))]),K(m,{ref:e.snapshotRef,camera:H(s),"show-timestamp":``,class:`cursor-pointer`,onClick:n[3]||=e=>t.$emit(`click`)},null,8,[`camera`])],46,eu)],512)}}}),[[`__scopeId`,`data-v-ea661fc8`]]),su={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function cu(e,t){return M(),z(`svg`,su,[...t[0]||=[L(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M12 5v14m-7-7h14`},null,-1)]])}var lu=W({name:`tabler-plus`,render:cu}),uu={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function du(e,t){return M(),z(`svg`,uu,[...t[0]||=[L(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`m15 6l-6 6l6 6`},null,-1)]])}var fu=W({name:`tabler-chevron-left`,render:du}),pu={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function mu(e,t){return M(),z(`svg`,pu,[...t[0]||=[L(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M16 18a2 2 0 0 1 2 2a2 2 0 0 1 2-2a2 2 0 0 1-2-2a2 2 0 0 1-2 2m0-12a2 2 0 0 1 2 2a2 2 0 0 1 2-2a2 2 0 0 1-2-2a2 2 0 0 1-2 2M9 18a6 6 0 0 1 6-6a6 6 0 0 1-6-6a6 6 0 0 1-6 6a6 6 0 0 1 6 6`},null,-1)]])}var hu=W({name:`tabler-sparkles`,render:mu}),gu=Dl(_n({__name:`AiBadge`,props:$t({position:{}},{position:`top-right`}),setup(e){let t=e,n={"top-right":`top-1.5 right-1.5`,"top-left":`top-1.5 left-1.5`,"bottom-right":`bottom-1.5 right-1.5`,"bottom-left":`bottom-1.5 left-1.5`},r=U(()=>t.position===`inline`),i=U(()=>n[t.position]??``);return(e,t)=>{let n=hu;return M(),z(`span`,{class:I([`ai-badge`,H(r)?``:`absolute z-[4] ${H(i)}`])},[K(n,{class:`w-3 h-3 text-white drop-shadow`})],2)}}}),[[`__scopeId`,`data-v-681db3e4`]]),_u={class:`group relative flex items-center w-full`},vu={key:0,class:`flex items-center mr-3 pointer-events-auto`,"data-cui-slot-interactive":``},yu={class:`flex-1 min-w-0 text-left`},bu={class:`text-sm font-medium truncate`},xu=[`is-exact-active`],Su=[`is-exact-active`],Cu={key:0,class:`w-full h-[1px] divider`},wu={key:1,class:`w-full`},Tu=Dl(_n({__name:`CuiListItem`,props:{active:{type:Boolean},disabled:{type:Boolean},to:{},activeClass:{},buttonProps:{},tooltip:{},size:{},divider:{type:Boolean},radius:{}},emits:[`click`],setup(e,{emit:t}){let n=e,r=t,{disabled:i,active:a,to:o,activeClass:s,buttonProps:c,tooltip:l,size:u,divider:d,radius:f}=Sn(n),[p,m]=ue();function h(e){i.value||e.target.closest(`[data-cui-slot-interactive]`)||r(`click`,e)}return(e,t)=>{let n=te,r=Jt(`RouterLink`),g=de;return M(),z(`div`,_u,[K(H(p),null,{default:F(({isExactActive:t})=>[on((M(),G(n,Mn({text:``,fluid:``,disabled:H(i),severity:`contrast`,class:[`cui-button inset-0`,[{active:H(a)||t,"!rounded-none":H(f)===`none`,"!rounded-t-xl !rounded-b-none":H(f)===`top`,"!rounded-b-xl !rounded-t-none":H(f)===`bottom`,"!rounded-xl":H(f)===`both`},H(a)||t?H(s):void 0]]},H(c),{onClick:h}),{default:F(()=>[L(`div`,{class:I([`relative z-10 flex items-center w-full px-3`,{"py-2":H(u)!==`large`,"py-3.5":H(u)===`large`}])},[e.$slots.prepend?(M(),z(`div`,vu,[Gt(e.$slots,`prepend`,{isExactActive:t??!1},void 0,!0)])):J(``,!0),L(`div`,yu,[L(`div`,bu,[Gt(e.$slots,`default`,{isExactActive:t??!1},void 0,!0)]),e.$slots.subtitle?(M(),z(`div`,{key:0,"is-exact-active":t??!1,class:`text-sm text-muted mt-0.5`},[Gt(e.$slots,`subtitle`,{},void 0,!0)],8,xu)):J(``,!0)]),e.$slots.append?(M(),z(`div`,{key:1,"is-exact-active":t??!1,class:`flex items-center ml-auto pl-3 pointer-events-auto`,"data-cui-slot-interactive":``},[Gt(e.$slots,`append`,{},void 0,!0)],8,Su)):J(``,!0)],2)]),_:2},1040,[`disabled`,`class`])),[[g,{value:H(l)}]]),H(d)?(M(),z(`div`,Cu)):J(``,!0)]),_:3}),H(o)?(M(),G(r,{key:0,to:H(o),class:`block transition-all duration-300 w-full`},{default:F(({isExactActive:e})=>[K(H(m),{"is-exact-active":e},null,8,[`is-exact-active`])]),_:1},8,[`to`])):(M(),z(`div`,wu,[K(H(m))]))])}}}),[[`__scopeId`,`data-v-df95d977`]]),Eu=Dl(_n({__name:`CuiAvatar`,props:{src:{},showBorder:{type:Boolean,default:!0},size:{default:22}},setup(e){let{showBorder:t,size:n,src:r}=Sn(e);return(e,i)=>{let a=Ol;return M(),z(`div`,{class:I([`bg-neutral-900 overflow-hidden rounded-full shrink-0`,{"avatar-border":H(t)}]),style:X({width:`${H(n)}px`,height:`${H(n)}px`})},[K(a,{src:H(r),height:H(n),width:H(n),"image-style":{objectFit:`cover`},"image-container-class":`w-full h-full`},null,8,[`src`,`height`,`width`])],6)}}}),[[`__scopeId`,`data-v-69aff2ac`]]),Du={autoHide:!0,dividers:`all`},Ou={class:`flex items-center gap-3`},ku={key:0,class:`flex items-center`},Au={key:0,class:`px-3 pt-3 pb-1 text-[0.7rem] font-semibold uppercase tracking-wider text-muted-color select-none`},ju=_n({__name:`CuiMenu`,props:$t({items:{},autoHide:{type:Boolean},dividers:{},popover:{},sortList:{type:Boolean},maxHeight:{}},Du),emits:[`show`,`hide`,`click:menu-item`],setup(e,{expose:t,emit:n}){let r=e,i=n,{items:a,autoHide:o,dividers:s,sortList:c,maxHeight:l}=Sn(r),[u,f]=ue(),p=Ut(`menuRef`),m=B(!1),h=B(),g=U(()=>{if(l.value!==void 0)return{maxHeight:typeof l.value==`number`?`${l.value}px`:l.value}}),_=U(()=>{let e=a.value.filter(e=>!e.hide);return c.value?e.sort((e,t)=>e.key&&t.key?e.key.localeCompare(t.key):e.label&&t.label?e.label.localeCompare(t.label):0):e}),v=U(()=>{let e=_.value.filter(e=>e.position===`header`),t=_.value.filter(e=>!e.position),n=_.value.filter(e=>e.position===`footer`),r=[...e,...t,...n];if(s.value===`all`)return r.map((e,t)=>({...e,showDivider:t<r.length-1}));let i=[];for(let r=0;r<e.length;r++)i.push({...e[r],showDivider:r<e.length-1||t.length>0||n.length>0});for(let e=0;e<t.length;e++)i.push({...t[e],showDivider:e<t.length-1?!1:n.length>0});for(let e=0;e<n.length;e++)i.push(n[e]);return i}),y=U(()=>{let e=[],t;for(let n of v.value)n.group&&n.group!==t&&e.push({type:`group`,label:n.group}),t=n.group,e.push({type:`item`,item:n});return e});function b(e){o.value&&w(),e.onClick?.(hn(h.value)),i(`click:menu-item`,e)}function x(){m.value=!0,i(`show`)}function S(){h.value=void 0,m.value=!1,i(`hide`)}function C(e,t,n){h.value=n,p.value?.toggle(e,t)}function w(){p.value?.hide()}function T(e,t){p.value?.show(e,t)}return t({menu:p,isOpen:m,data:hn(h),toggleMenu:C,hide:w,show:T}),(t,n)=>{let r=Eu,i=re,a=dr,o=Tu,s=Nt,c=d;return M(),G(c,Mn({ref_key:`menuRef`,ref:p,class:`shadow-lg cui-rounded-corner`},e.popover,{onShow:x,onHide:S}),{default:F(()=>[K(H(u),null,{default:F(({item:e})=>[(M(),G(o,{key:e.key,to:e.to,class:`min-h-10`,"active-class":`!bg-primary-500/10`,disabled:e.disabled||e.loading,"button-props":e.buttonProps,tooltip:e.tooltip,radius:`none`,divider:e.showDivider,onClick:t=>b(e)},Y({default:F(({isExactActive:t})=>[L(`div`,Ou,[L(`span`,Mn(e.labelProps,{class:{"text-primary":t||e.active,"!font-bold":e.avatarProps,"opacity-70":!e.disabled}}),R(e.label),17),e.loading?(M(),z(`div`,ku,[K(i,{class:`!w-3 !h-3`,"stroke-width":`5`})])):e.badge?(M(),z(`span`,Mn({key:1},e.badgeProps,{class:`text-[0.65rem] font-medium px-1.5 py-0.5 rounded-full leading-none bg-surface-200 dark:bg-surface-700 text-muted-color`}),R(e.badge),17)):J(``,!0)])]),_:2},[e.avatarProps||e.icon?{name:`prepend`,fn:F(({isExactActive:t})=>[e.avatarProps?(M(),G(r,jn(Mn({key:0},e.avatarProps)),null,16)):J(``,!0),e.icon?(M(),G(Fn(e.icon),Mn({key:1},e.iconProps,{class:{"text-primary":t||e.active,"opacity-70":!e.disabled}}),null,16,[`class`])):J(``,!0)]),key:`0`}:void 0,e.description?{name:`subtitle`,fn:F(()=>[L(`span`,Mn(e.descriptionProps,{class:{"opacity-70":!e.disabled}}),R(e.description),17)]),key:`1`}:void 0,e.toggle?{name:`append`,fn:F(()=>[K(a,{"model-value":e.toggleState,disabled:e.disabled,"onUpdate:modelValue":t=>b(e)},null,8,[`model-value`,`disabled`,`onUpdate:modelValue`])]),key:`2`}:void 0]),1032,[`to`,`disabled`,`button-props`,`tooltip`,`divider`,`onClick`]))]),_:1}),K(s,{class:`cui-card border-0!`,pt:{body:{class:`p-0`}}},{content:F(()=>[L(`div`,{class:`overflow-y-auto overscroll-contain`,style:X(H(g))},[(M(!0),z(V,null,Vt(H(y),(e,t)=>(M(),z(V,{key:t},[e.type===`group`?(M(),z(`div`,Au,R(e.label),1)):(M(),G(H(f),{key:1,item:e.item},null,8,[`item`]))],64))),128))],4)]),_:1})]),_:1},16)}}}),Mu={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Nu(e,t){return M(),z(`svg`,Mu,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M1 10v2a9 9 0 0 1 9 9h2c0-6.08-4.93-11-11-11m0 4v2a5 5 0 0 1 5 5h2a7 7 0 0 0-7-7m0 4v3h3a3 3 0 0 0-3-3M21 3H3c-1.11 0-2 .89-2 2v3h2V5h18v14h-7v2h7a2 2 0 0 0 2-2V5a2 2 0 0 0-2-2`},null,-1)]])}var Pu=W({name:`mdi-cast`,render:Nu}),Fu={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Iu(e,t){return M(),z(`svg`,Fu,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M13 3a1 1 0 1 0-2 0v18a1 1 0 1 0 2 0zM7 4h3v5H7a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2m-2 6h5v5H5a2 2 0 0 1-2-2v-1a2 2 0 0 1 2-2m9 0v5h2a2 2 0 0 0 2-2v-1a2 2 0 0 0-2-2zm-6 6h2v5H8a2 2 0 0 1-2-2v-1a2 2 0 0 1 2-2m6 0v5h5a2 2 0 0 0 2-2v-1a2 2 0 0 0-2-2zm0-12v5h4a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2z`},null,-1)]])}var Lu=W({name:`mingcute-timeline-fill`,render:Iu}),Ru={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function zu(e,t){return M(),z(`svg`,Ru,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M13 3a1 1 0 1 0-2 0zm-2 18a1 1 0 1 0 2 0zm8-15h-1v1h2V6zM6 7h1V6H5v1zm11 5h-1v1h2v-1zM4 13h1v-1H3v1zm16 5h-1v1h2v-1zM7 19h1v-1H6v1zM7 5v1h3V4H7zm7 0v1h4V4h-4zm-4 3V7H7v2h3zm8 0V7h-4v2h4zM5 11v1h5v-2H5zm9 0v1h2v-2h-2zm-4 3v-1H5v2h5zm6 0v-1h-2v2h2zm-8 3v1h2v-2H8zm6 0v1h5v-2h-5zm-4 3v-1H8v2h2zm9 0v-1h-5v2h5zM12 3h-1v18h2V3zM7 19H6a2 2 0 0 0 2 2v-2zm13 0h-1v2a2 2 0 0 0 2-2zm0-1h1a2 2 0 0 0-2-2v2zM7 18h1v-2a2 2 0 0 0-2 2zm-3-5H3a2 2 0 0 0 2 2v-2zm13 0h-1v2a2 2 0 0 0 2-2zm0-1h1a2 2 0 0 0-2-2v2zM4 12h1v-2a2 2 0 0 0-2 2zm2-5H5a2 2 0 0 0 2 2V7zm13 0h-1v2a2 2 0 0 0 2-2zm0-1h1a2 2 0 0 0-2-2v2zM6 6h1V4a2 2 0 0 0-2 2z`},null,-1)]])}var Bu=W({name:`mingcute-timeline-line`,render:zu}),Vu={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Hu(e,t){return M(),z(`svg`,Vu,[...t[0]||=[fn(`<g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"><rect width="7" height="7" x="3" y="3" rx="1"></rect><rect width="7" height="7" x="14" y="3" rx="1"></rect><rect width="7" height="7" x="14" y="14" rx="1"></rect><rect width="7" height="7" x="3" y="14" rx="1"></rect></g>`,1)]])}var Uu=W({name:`lucide-layout-grid`,render:Hu}),Wu={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Gu(e,t){return M(),z(`svg`,Wu,[...t[0]||=[L(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M20 6L9 17l-5-5`},null,-1)]])}var Ku=W({name:`lucide-check`,render:Gu}),qu={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Ju(e,t){return M(),z(`svg`,qu,[...t[0]||=[L(`g`,{fill:`none`,stroke:`currentColor`,"stroke-width":`1.5`},[L(`path`,{d:`M2 12c0-4.714 0-7.071 1.464-8.536C4.93 2 7.286 2 12 2s7.071 0 8.535 1.464C22 4.93 22 7.286 22 12s0 7.071-1.465 8.535C19.072 22 16.714 22 12 22s-7.071 0-8.536-1.465C2 19.072 2 16.714 2 12Z`}),L(`circle`,{cx:`12`,cy:`12`,r:`4`})],-1)]])}var Yu=W({name:`solar-camera-square-linear`,render:Ju}),Xu={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Zu(e,t){return M(),z(`svg`,Xu,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M19 11h-8v6h8zm4 8V5c0-1.12-.9-2-2-2H3a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h18a2 2 0 0 0 2-2m-2 0H3V4.97h18z`},null,-1)]])}var Qu=W({name:`mdi-picture-in-picture-bottom-right`,render:Zu}),$u={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function ed(e,t){return M(),z(`svg`,$u,[...t[0]||=[L(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M3 12a3 3 0 1 0 6 0a3 3 0 1 0-6 0m12-6a3 3 0 1 0 6 0a3 3 0 1 0-6 0m0 12a3 3 0 1 0 6 0a3 3 0 1 0-6 0m-6.3-7.3l6.6-3.4m-6.6 6l6.6 3.4`},null,-1)]])}var td=W({name:`tabler-share`,render:ed}),nd={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function rd(e,t){return M(),z(`svg`,nd,[...t[0]||=[L(`path`,{fill:`none`,stroke:`currentColor`,"stroke-width":`2`,d:`M8.5 5.5L12 2l3.5 3.5M22 12H2m3.5-3.5L2 12l3.5 3.5m13 0L22 12l-3.5-3.5M12 22V2M8.5 18.5L12 22l3.5-3.5`},null,-1)]])}var id=W({name:`grommet-icons-pan`,render:rd}),ad={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function od(e,t){return M(),z(`svg`,ad,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`m8.471 7.237l3.056 12.992c.233.993 1.63 1.04 1.929.065l2.945-9.58l.384 1.527a1 1 0 0 0 .97.756H21a1 1 0 1 0 0-2h-2.466l-1.069-4.241c-.247-.981-1.628-1.017-1.925-.05l-2.912 9.472L9.475 2.771c-.24-1.02-1.688-1.03-1.943-.014l-2.065 8.24H3a1 1 0 0 0 0 2h3.247a1 1 0 0 0 .97-.757z`},null,-1)]])}var sd=W({name:`fluent-pulse24-filled`,render:od}),cd={viewBox:`0 0 48 48`,width:`1.2em`,height:`1.2em`};function ld(e,t){return M(),z(`svg`,cd,[...t[0]||=[L(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linejoin":`round`,"stroke-width":`4`},[L(`path`,{fill:`currentColor`,d:`M16.866 7.47A18 18 0 0 0 16 13c0 9.941 8.059 18 18 18a17.9 17.9 0 0 0 7.134-1.47C38.801 36.767 32.012 42 24 42c-9.941 0-18-8.059-18-18c0-7.407 4.473-13.768 10.866-16.53Z`}),L(`path`,{"stroke-linecap":`round`,d:`M31.66 10H41l-10 8h10`})],-1)]])}var ud=W({name:`icon-park-solid-sleep`,render:ld}),dd={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function fd(e,t){return M(),z(`svg`,dd,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M12 2a7 7 0 0 1 7 7a7 7 0 0 1-7 7a7 7 0 0 1-7-7a7 7 0 0 1 7-7m0 2a5 5 0 0 0-5 5a5 5 0 0 0 5 5a5 5 0 0 0 5-5a5 5 0 0 0-5-5m0 2a3 3 0 0 1 3 3a3 3 0 0 1-3 3a3 3 0 0 1-3-3a3 3 0 0 1 3-3M6 22a2 2 0 0 1-2-2c0-.38.1-.73.29-1.03l1.82-3.16A9 9 0 0 0 12 18c2.25 0 4.31-.83 5.89-2.19l1.82 3.16c.19.3.29.65.29 1.03a2 2 0 0 1-2 2z`},null,-1)]])}var pd=W({name:`mdi-webcam`,render:fd}),md={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function hd(e,t){return M(),z(`svg`,md,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M12 .36A5.4 5.4 0 0 0 6.62 5.3a5.4 5.4 0 0 0-1.22-.14a5.4 5.4 0 0 0-2.143 10.357a5.4 5.4 0 0 0-.737 2.723a5.4 5.4 0 0 0 9.54 3.466a5.4 5.4 0 0 0 8.833-6.137a5.4 5.4 0 0 0-3.505-10.152A5.4 5.4 0 0 0 12 .36M6.283 7.228h10.592c.746 0 1.352.605 1.352 1.349v7.646a1.35 1.35 0 0 1-1.352 1.348h-3.608l-7.24 3.55l1.1-3.55h-.844a1.35 1.35 0 0 1-1.352-1.348V8.577c0-.744.606-1.349 1.352-1.349`},null,-1)]])}var gd=W({name:`simple-icons-webrtc`,render:hd}),_d={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function vd(e,t){return M(),z(`svg`,_d,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M17.41 2H6.59A4.58 4.58 0 0 0 2 6.59v10.82A4.58 4.58 0 0 0 6.59 22h10.82A4.58 4.58 0 0 0 22 17.41V6.59A4.58 4.58 0 0 0 17.41 2m-2.653 12.447a1.924 1.924 0 0 1-1.924 1.923h-5.86a1.924 1.924 0 0 1-1.923-1.923v-4.87a1.923 1.923 0 0 1 1.927-1.924h5.856a1.925 1.925 0 0 1 1.924 1.924Zm4.2.74a.771.771 0 0 1-1.266.59l-2.211-1.854a.85.85 0 0 1-.3-.653v-2.52a.85.85 0 0 1 .31-.657l2.206-1.82a.769.769 0 0 1 1.26.594Z`},null,-1)]])}var yd=W({name:`cbi-iosfacetime`,render:vd}),bd={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function xd(e,t){return M(),z(`svg`,bd,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M9.367 2.25h5.266c1.092 0 1.958 0 2.655.057c.714.058 1.317.18 1.869.46a4.75 4.75 0 0 1 2.075 2.077c.281.55.403 1.154.461 1.868c.057.697.057 1.563.057 2.655v5.266c0 1.092 0 1.958-.057 2.655c-.058.714-.18 1.317-.46 1.869a4.75 4.75 0 0 1-2.076 2.075c-.552.281-1.155.403-1.869.461c-.697.057-1.563.057-2.655.057H9.367c-1.092 0-1.958 0-2.655-.057c-.714-.058-1.317-.18-1.868-.46a4.75 4.75 0 0 1-2.076-2.076c-.281-.552-.403-1.155-.461-1.869c-.057-.697-.057-1.563-.057-2.655V9.367c0-1.092 0-1.958.057-2.655c.058-.714.18-1.317.46-1.868a4.75 4.75 0 0 1 2.077-2.076c.55-.281 1.154-.403 1.868-.461c.697-.057 1.563-.057 2.655-.057M10.25 8a.75.75 0 0 0-1.5 0v8a.75.75 0 0 0 1.5 0v-3.25h3.5V16a.75.75 0 0 0 1.5 0V8a.75.75 0 0 0-1.5 0v3.25h-3.5z`},null,-1)]])}var Sd=W({name:`mynaui-letter-h-square-solid`,render:xd}),Cd={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function wd(e,t){return M(),z(`svg`,Cd,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M9.367 2.25h5.266c1.092 0 1.958 0 2.655.057c.714.058 1.317.18 1.869.46a4.75 4.75 0 0 1 2.075 2.077c.281.55.403 1.154.461 1.868c.057.697.057 1.563.057 2.655v5.266c0 1.092 0 1.958-.057 2.655c-.058.714-.18 1.317-.46 1.869a4.75 4.75 0 0 1-2.076 2.075c-.552.281-1.155.403-1.869.461c-.697.057-1.563.057-2.655.057H9.367c-1.092 0-1.958 0-2.655-.057c-.714-.058-1.317-.18-1.868-.46a4.75 4.75 0 0 1-2.076-2.076c-.281-.552-.403-1.155-.461-1.869c-.057-.697-.057-1.563-.057-2.655V9.367c0-1.092 0-1.958.057-2.655c.058-.714.18-1.317.46-1.868a4.75 4.75 0 0 1 2.077-2.076c.55-.281 1.154-.403 1.868-.461c.697-.057 1.563-.057 2.655-.057m.233 5.3A.75.75 0 0 0 8.25 8v8a.75.75 0 0 0 1.5 0v-5.75l1.65 2.2a.75.75 0 0 0 1.2 0l1.65-2.2V16a.75.75 0 0 0 1.5 0V8a.75.75 0 0 0-1.35-.45l-2.4 3.2z`},null,-1)]])}var Td=W({name:`mynaui-letter-m-square-solid`,render:wd}),Ed={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Dd(e,t){return M(),z(`svg`,Ed,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M9.367 2.25h5.266c1.092 0 1.958 0 2.655.057c.714.058 1.317.18 1.869.46a4.75 4.75 0 0 1 2.075 2.077c.281.55.403 1.154.461 1.868c.057.697.057 1.563.057 2.655v5.266c0 1.092 0 1.958-.057 2.655c-.058.714-.18 1.317-.46 1.869a4.75 4.75 0 0 1-2.076 2.075c-.552.281-1.155.403-1.869.461c-.697.057-1.563.057-2.655.057H9.367c-1.092 0-1.958 0-2.655-.057c-.714-.058-1.317-.18-1.868-.46a4.75 4.75 0 0 1-2.076-2.076c-.281-.552-.403-1.155-.461-1.869c-.057-.697-.057-1.563-.057-2.655V9.367c0-1.092 0-1.958.057-2.655c.058-.714.18-1.317.46-1.868a4.75 4.75 0 0 1 2.077-2.076c.55-.281 1.154-.403 1.868-.461c.697-.057 1.563-.057 2.655-.057M10.25 8a.75.75 0 0 0-1.5 0v7.5c0 .414.336.75.75.75H15a.75.75 0 0 0 0-1.5h-4.75z`},null,-1)]])}var Od=W({name:`mynaui-letter-l-square-solid`,render:Dd}),kd={viewBox:`0 0 16 16`,width:`1.2em`,height:`1.2em`};function Ad(e,t){return M(),z(`svg`,kd,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M3.5 2A2.5 2.5 0 0 0 1 4.5v5A2.5 2.5 0 0 0 3.5 12H7v-2a2 2 0 0 1 2-2h5V4.5A2.5 2.5 0 0 0 11.5 2zM8 10a1 1 0 0 1 1-1h5a1 1 0 0 1 1 1v3a1 1 0 0 1-1 1H9a1 1 0 0 1-1-1z`},null,-1)]])}var jd=W({name:`fluent-picture-in-picture16-filled`,render:Ad}),Md={viewBox:`0 0 16 16`,width:`1.2em`,height:`1.2em`};function Nd(e,t){return M(),z(`svg`,Md,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M1 4.5A2.5 2.5 0 0 1 3.5 2h8A2.5 2.5 0 0 1 14 4.5V8h-1V4.5A1.5 1.5 0 0 0 11.5 3h-8A1.5 1.5 0 0 0 2 4.5v5A1.5 1.5 0 0 0 3.5 11H7v1H3.5A2.5 2.5 0 0 1 1 9.5zM9 9a1 1 0 0 0-1 1v3a1 1 0 0 0 1 1h5a1 1 0 0 0 1-1v-3a1 1 0 0 0-1-1z`},null,-1)]])}var Pd=W({name:`fluent-picture-in-picture16-regular`,render:Nd}),Fd={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Id(e,t){return M(),z(`svg`,Fd,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M12 16a3 3 0 0 1-3-3c0-1.12.61-2.1 1.5-2.61l9.71-5.62l-5.53 9.58c-.5.98-1.51 1.65-2.68 1.65m0-13c1.81 0 3.5.5 4.97 1.32l-2.1 1.21C14 5.19 13 5 12 5a8 8 0 0 0-8 8c0 2.21.89 4.21 2.34 5.65h.01c.39.39.39 1.02 0 1.41s-1.03.39-1.42.01A9.97 9.97 0 0 1 2 13A10 10 0 0 1 12 3m10 10c0 2.76-1.12 5.26-2.93 7.07c-.39.38-1.02.38-1.41-.01a.996.996 0 0 1 0-1.41A7.95 7.95 0 0 0 20 13c0-1-.19-2-.54-2.9L20.67 8C21.5 9.5 22 11.18 22 13`},null,-1)]])}var Ld=W({name:`mdi-speedometer`,render:Id}),Rd={viewBox:`0 0 32 32`,width:`1.2em`,height:`1.2em`};function zd(e,t){return M(),z(`svg`,Rd,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M7.75 5.5A2.25 2.25 0 0 0 5.5 7.75v16.5a2.25 2.25 0 0 0 2.25 2.25h16.5a2.25 2.25 0 0 0 2.25-2.25v-5a1.25 1.25 0 1 1 2.5 0v5A4.75 4.75 0 0 1 24.25 29H7.75A4.75 4.75 0 0 1 3 24.25V7.75A4.75 4.75 0 0 1 7.75 3h5a1.25 1.25 0 1 1 0 2.5zM18 4.25c0-.69.56-1.25 1.25-1.25h8.5c.69 0 1.25.56 1.25 1.25v8.5a1.25 1.25 0 1 1-2.5 0V7.268l-6.366 6.366a1.25 1.25 0 1 1-1.768-1.768L24.732 5.5H19.25c-.69 0-1.25-.56-1.25-1.25`},null,-1)]])}var Bd=W({name:`fluent-open32-filled`,render:zd}),Vd={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Hd(e,t){return M(),z(`svg`,Vd,[...t[0]||=[L(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`3`,d:`M8 4v3a1 1 0 0 1-1 1H4m4 12v-3a1 1 0 0 0-1-1H4M16 4v3a1 1 0 0 0 1 1h3m-4 12v-3a1 1 0 0 1 1-1h3`},null,-1)]])}var Ud=W({name:`mingcute-fullscreen-exit-fill`,render:Hd}),Wd={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Gd(e,t){return M(),z(`svg`,Wd,[...t[0]||=[L(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`3`,d:`M4 8V5a1 1 0 0 1 1-1h3M4 16v3a1 1 0 0 0 1 1h3M20 8V5a1 1 0 0 0-1-1h-3m4 12v3a1 1 0 0 1-1 1h-3`},null,-1)]])}var Kd=W({name:`mingcute-fullscreen-fill`,render:Gd}),qd={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Jd(e,t){return M(),z(`svg`,qd,[...t[0]||=[L(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[L(`circle`,{cx:`12`,cy:`12`,r:`1`}),L(`circle`,{cx:`12`,cy:`5`,r:`1`}),L(`circle`,{cx:`12`,cy:`19`,r:`1`})],-1)]])}var Yd=W({name:`lucide-more-vertical`,render:Jd}),Xd={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Zd(e,t){return M(),z(`svg`,Xd,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M20 5a1 1 0 0 0-1-1h-5a1 1 0 0 0 0 2h2.57l-3.28 3.29a1 1 0 0 0 0 1.42a1 1 0 0 0 1.42 0L18 7.42V10a1 1 0 0 0 1 1a1 1 0 0 0 1-1Zm-9.29 8.29a1 1 0 0 0-1.42 0L6 16.57V14a1 1 0 0 0-1-1a1 1 0 0 0-1 1v5a1 1 0 0 0 1 1h5a1 1 0 0 0 0-2H7.42l3.29-3.29a1 1 0 0 0 0-1.42`},null,-1)]])}var Qd=W({name:`eva-expand-outline`,render:Zd}),$d={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function ef(e,t){return M(),z(`svg`,$d,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M19 9h-2.58l3.29-3.29a1 1 0 1 0-1.42-1.42L15 7.57V5a1 1 0 0 0-1-1a1 1 0 0 0-1 1v5a1 1 0 0 0 1 1h5a1 1 0 0 0 0-2m-9 4H5a1 1 0 0 0 0 2h2.57l-3.28 3.29a1 1 0 0 0 0 1.42a1 1 0 0 0 1.42 0L9 16.42V19a1 1 0 0 0 1 1a1 1 0 0 0 1-1v-5a1 1 0 0 0-1-1`},null,-1)]])}var tf=W({name:`eva-collapse-outline`,render:ef}),nf={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function rf(e,t){return M(),z(`svg`,nf,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M13.986 14.776a.73.73 0 0 1-.66-.4a.74.74 0 0 1 .3-1a2.45 2.45 0 0 0 1-1.001a.739.739 0 0 1 1.359.127a.75.75 0 0 1-.048.563a3.85 3.85 0 0 1-1.611 1.61a.7.7 0 0 1-.34.1`},null,-1),L(`path`,{fill:`currentColor`,d:`M19.409 10.644a7.55 7.55 0 0 1-.7 3.141a7.48 7.48 0 0 1-4.823 4.003a6.4 6.4 0 0 1-1.151.2v2.511h2.892a.75.75 0 0 1 0 1.501H8.342a.75.75 0 0 1 0-1.5h2.892v-2.512a6 6 0 0 1-.57-.07a.752.752 0 0 1 .27-1.481q.442.078.89.08h.33a5.5 5.5 0 0 0 1.341-.19a5.9 5.9 0 0 0 2.282-1.18a5.9 5.9 0 0 0 2.13-4.543a.75.75 0 0 1 1.502 0zM20.52 4.56l-4.363 4.353l-5.623 5.623l-6.004 6.003a.8.8 0 0 1-.53.22a.75.75 0 0 1-.53-.22a.74.74 0 0 1 0-1.06l3.462-3.462l-.18-.2a7.3 7.3 0 0 1-2.172-5.183a.75.75 0 0 1 .74-.76a.76.76 0 0 1 .751.75a5.92 5.92 0 0 0 1.771 4.172l.14.16l.85-.84a4 4 0 0 1-.65-.77a3.66 3.66 0 0 1-.59-1.892V5.851a4.13 4.13 0 0 1 1.45-2.872a4.92 4.92 0 0 1 5.894 0a4.13 4.13 0 0 1 1.441 2.802v.79l3.092-3.091a.74.74 0 0 1 1.06 0a.75.75 0 0 1-.01 1.08`},null,-1)]])}var af=W({name:`mage-microphone-mute-fill`,render:rf}),of={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function sf(e,t){return M(),z(`svg`,of,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M16.43 5.838v5.57a4.43 4.43 0 0 1-8.78 0v-5.57a4.43 4.43 0 0 1 8.78 0`},null,-1),L(`path`,{fill:`currentColor`,d:`M12.79 17.998v2.5h2.89a.75.75 0 0 1 0 1.5H8.4a.75.75 0 1 1 0-1.5h2.85v-2.5a7.4 7.4 0 0 1-6.67-7.38a.75.75 0 0 1 1.5 0a5.92 5.92 0 1 0 11.84 0a.75.75 0 0 1 1.5 0a7.4 7.4 0 0 1-6.67 7.38z`},null,-1)]])}var cf=W({name:`mage-microphone-fill`,render:sf}),lf={viewBox:`0 0 16 16`,width:`1.2em`,height:`1.2em`};function uf(e,t){return M(),z(`svg`,lf,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M7.557 2.066A.75.75 0 0 1 8 2.75v10.5a.75.75 0 0 1-1.248.56L3.59 11H2a1 1 0 0 1-1-1V6a1 1 0 0 1 1-1h1.59l3.162-2.81a.75.75 0 0 1 .805-.124M11.28 5.72a.75.75 0 1 0-1.06 1.06L11.44 8l-1.22 1.22a.75.75 0 1 0 1.06 1.06l1.22-1.22l1.22 1.22a.75.75 0 1 0 1.06-1.06L13.56 8l1.22-1.22a.75.75 0 0 0-1.06-1.06L12.5 6.94z`},null,-1)]])}var df=W({name:`heroicons-speaker-x-mark16-solid`,render:uf}),ff={viewBox:`0 0 16 16`,width:`1.2em`,height:`1.2em`};function pf(e,t){return M(),z(`svg`,ff,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M7.557 2.066A.75.75 0 0 1 8 2.75v10.5a.75.75 0 0 1-1.248.56L3.59 11H2a1 1 0 0 1-1-1V6a1 1 0 0 1 1-1h1.59l3.162-2.81a.75.75 0 0 1 .805-.124m5.393.984a.75.75 0 1 0-1.06 1.06a5.5 5.5 0 0 1 0 7.78a.75.75 0 1 0 1.06 1.06a7 7 0 0 0 0-9.9`},null,-1),L(`path`,{fill:`currentColor`,d:`M10.828 5.172a.75.75 0 1 0-1.06 1.06a2.5 2.5 0 0 1 0 3.536a.75.75 0 1 0 1.06 1.06a4 4 0 0 0 0-5.656`},null,-1)]])}var mf=W({name:`heroicons-speaker-wave16-solid`,render:pf}),hf={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function gf(e,t){return M(),z(`svg`,hf,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M11.5 3c-4.65 0-8.58 3.03-9.97 7.22L3.9 11c1.05-3.19 4.06-5.5 7.6-5.5c1.96 0 3.73.72 5.12 1.88L14 10h7V3l-2.6 2.6C16.55 4 14.15 3 11.5 3M19 14v6c0 1.11-.89 2-2 2h-2a2 2 0 0 1-2-2v-6a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2m-4 0v6h2v-6zm-4 6a2 2 0 0 1-2 2H5v-2h4v-2H7v-2h2v-2H5v-2h4a2 2 0 0 1 2 2v1.5A1.5 1.5 0 0 1 9.5 17a1.5 1.5 0 0 1 1.5 1.5z`},null,-1)]])}var _f=W({name:`mdi-fast-forward30`,render:gf}),vf={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function yf(e,t){return M(),z(`svg`,vf,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M17.276 5.47c.435.16.724.575.724 1.039V17.49c0 .464-.29.879-.724 1.039a3.7 3.7 0 0 1-2.552 0A1.11 1.11 0 0 1 14 17.491V6.51c0-.464.29-.879.724-1.04a3.7 3.7 0 0 1 2.552 0m-8 0c.435.16.724.575.724 1.039V17.49c0 .464-.29.879-.724 1.039a3.7 3.7 0 0 1-2.552 0A1.11 1.11 0 0 1 6 17.491V6.51c0-.464.29-.879.724-1.04a3.7 3.7 0 0 1 2.552 0`},null,-1)]])}var bf=W({name:`basil-pause-solid`,render:yf}),xf={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Sf(e,t){return M(),z(`svg`,xf,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M19.266 13.516a1.917 1.917 0 0 0 0-3.032A35.8 35.8 0 0 0 9.35 5.068l-.653-.232c-1.248-.443-2.567.401-2.736 1.69a42.5 42.5 0 0 0 0 10.948c.17 1.289 1.488 2.133 2.736 1.69l.653-.232a35.8 35.8 0 0 0 9.916-5.416`},null,-1)]])}var Cf=W({name:`basil-play-solid`,render:Sf}),wf={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Tf(e,t){return M(),z(`svg`,wf,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M19 14v6c0 1.11-.89 2-2 2h-2a2 2 0 0 1-2-2v-6a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2m-4 0v6h2v-6zm-4 6a2 2 0 0 1-2 2H5v-2h4v-2H7v-2h2v-2H5v-2h4a2 2 0 0 1 2 2v1.5A1.5 1.5 0 0 1 9.5 17a1.5 1.5 0 0 1 1.5 1.5zm1.5-17c4.65 0 8.58 3.03 9.97 7.22L20.1 11c-1.05-3.19-4.06-5.5-7.6-5.5c-1.96 0-3.73.72-5.12 1.88L10 10H3V3l2.6 2.6C7.45 4 9.85 3 12.5 3`},null,-1)]])}var Ef=W({name:`mdi-rewind30`,render:Tf}),Df={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Of(e,t){return M(),z(`svg`,Df,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M11 17h2v-6h-2zm1.713-8.287Q13 8.425 13 8t-.288-.712T12 7t-.712.288T11 8t.288.713T12 9t.713-.288M12 22q-2.075 0-3.9-.788t-3.175-2.137T2.788 15.9T2 12t.788-3.9t2.137-3.175T8.1 2.788T12 2t3.9.788t3.175 2.137T21.213 8.1T22 12t-.788 3.9t-2.137 3.175t-3.175 2.138T12 22m0-2q3.35 0 5.675-2.325T20 12t-2.325-5.675T12 4T6.325 6.325T4 12t2.325 5.675T12 20m0-8`},null,-1)]])}var kf=W({name:`material-symbols-info-outline`,render:Of}),Af={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function jf(e,t){return M(),z(`svg`,Af,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M3.27 2L2 3.27L4.73 6H4a1 1 0 0 0-1 1v10a1 1 0 0 0 1 1h12c.2 0 .39-.08.54-.18L19.73 21L21 19.73M21 6.5l-4 4V7a1 1 0 0 0-1-1H9.82L21 17.18z`},null,-1)]])}var Mf=W({name:`mdi-video-off`,render:jf}),Nf={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Pf(e,t){return M(),z(`svg`,Nf,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M11 15h2v2h-2zm0-8h2v6h-2zm1-5C6.47 2 2 6.5 2 12a10 10 0 0 0 10 10a10 10 0 0 0 10-10A10 10 0 0 0 12 2m0 18a8 8 0 0 1-8-8a8 8 0 0 1 8-8a8 8 0 0 1 8 8a8 8 0 0 1-8 8`},null,-1)]])}var Ff=W({name:`mdi-alert-circle-outline`,render:Pf}),If={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Lf(e,t){return M(),z(`svg`,If,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`m22.11 21.46l-1.27 1.27L18.11 20H4a2 2 0 0 1-2-2V6c0-.58.25-1.1.65-1.46L1.11 3l1.28-1.27zm-.23-2.78c.08-.21.12-.44.12-.68V4h-4l2 4h-3l-2-4h-2l2 4h-3l-2-4H8l.8 1.6z`},null,-1)]])}var Rf=W({name:`mdi-movie-off`,render:Lf}),zf={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Bf(e,t){return M(),z(`svg`,zf,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M9 10a3.04 3.04 0 0 1 3-3a3.04 3.04 0 0 1 3 3a3.04 3.04 0 0 1-3 3a3.04 3.04 0 0 1-3-3m3 9l4 1v-3.08A7.54 7.54 0 0 1 12 18a7.54 7.54 0 0 1-4-1.08V20m4-16a5.78 5.78 0 0 0-4.24 1.74A5.78 5.78 0 0 0 6 10a5.78 5.78 0 0 0 1.76 4.23A5.78 5.78 0 0 0 12 16a5.78 5.78 0 0 0 4.24-1.77A5.78 5.78 0 0 0 18 10a5.78 5.78 0 0 0-1.76-4.26A5.78 5.78 0 0 0 12 4m8 6a8 8 0 0 1-.57 2.8A7.8 7.8 0 0 1 18 15.28V23l-6-2l-6 2v-7.72A7.9 7.9 0 0 1 4 10a7.68 7.68 0 0 1 2.33-5.64A7.73 7.73 0 0 1 12 2a7.73 7.73 0 0 1 5.67 2.36A7.68 7.68 0 0 1 20 10`},null,-1)]])}var Vf=W({name:`mdi-license`,render:Bf}),Hf=_n({__name:`CuiHeatmap`,props:{cameraId:{}},setup(e){let t=e,{plugin:n}=kt(`@camera.ui/camera-ui-nvr`),r=Ut(`canvasRef`);async function i(){let e=r.value,i=n.value;if(!(!e||!i?.getDetectionHeatmap))try{let n=Date.now(),r=n-864e5,o=await i.getDetectionHeatmap(t.cameraId,r,n);if(!o?.points?.length)return;a(e,o.points)}catch{}}function a(e,t){e.width=128,e.height=72;let n=e.getContext(`2d`);if(!n)return;for(let e of t){let t=e.x*128,r=e.y*72,i=n.createRadialGradient(t,r,0,t,r,8);i.addColorStop(0,`rgba(255, 255, 255, 0.15)`),i.addColorStop(1,`rgba(255, 255, 255, 0)`),n.fillStyle=i,n.fillRect(t-8,r-8,16,16)}let r=n.getImageData(0,0,128,72),i=r.data,a=0;for(let e=3;e<i.length;e+=4)i[e]>a&&(a=i[e]);if(a!==0){for(let e=0;e<i.length;e+=4){let t=i[e+3]/a;if(t<.01){i[e]=i[e+1]=i[e+2]=i[e+3]=0;continue}let[n,r,s]=o(t);i[e]=n,i[e+1]=r,i[e+2]=s,i[e+3]=Math.floor(t*200+55)}n.putImageData(r,0,0)}}function o(e){if(e<.25){let t=e/.25;return[0,Math.floor(t*255),255]}if(e<.5){let t=(e-.25)/.25;return[0,255,Math.floor((1-t)*255)]}if(e<.75){let t=(e-.5)/.25;return[Math.floor(t*255),255,0]}{let t=(e-.75)/.25;return[255,Math.floor((1-t)*255),0]}}return yn(()=>i()),(e,t)=>(M(),z(`canvas`,{ref_key:`canvasRef`,ref:r,class:`absolute inset-0 w-full h-full pointer-events-none z-1`,style:{opacity:`0.6`}},null,512))}}),Uf={class:`absolute inset-0 pointer-events-auto`,style:{"z-index":`10`}},Wf=[`viewBox`],Gf=[`x1`,`x2`,`y2`],Kf=[`y1`,`x2`,`y2`],qf=[`x`,`y`,`width`,`height`],Jf=[`x`,`y`,`width`,`height`],Yf=[`onClick`],Xf=Dl(_n({__name:`CuiGridSearch`,props:{modelValue:{},cols:{default:10},rows:{default:11}},emits:[`update:modelValue`],setup(e,{emit:t}){let n=e,r=t,i=Ut(`svgRef`),a=B(!1),o=B(null),s=B(null),c=U(()=>{let e=new Set;for(let t of n.modelValue)for(let n=t.row;n<t.row+t.h;n++)for(let r=t.col;r<t.col+t.w;r++)e.add(`${r}:${n}`);return e}),l=U(()=>!a.value||!o.value||!s.value?null:d(o.value,s.value));function u(e,t,n,r){let i=t.col>=e.col?1:-1,a=t.row>=e.row?1:-1,o=e.col,s=e.row;if(r){let r=Math.min(e.row,t.row),c=Math.max(e.row,t.row);for(let a=e.col;i>0?a<=t.col:a>=t.col;a+=i){let e=!1;for(let t=r;t<=c;t++)if(n.has(`${a}:${t}`)){e=!0;break}if(e)break;o=a}let l=Math.min(e.col,o),u=Math.max(e.col,o);for(let r=e.row;a>0?r<=t.row:r>=t.row;r+=a){let e=!1;for(let t=l;t<=u;t++)if(n.has(`${t}:${r}`)){e=!0;break}if(e)break;s=r}}else{let r=Math.min(e.col,t.col),c=Math.max(e.col,t.col);for(let i=e.row;a>0?i<=t.row:i>=t.row;i+=a){let e=!1;for(let t=r;t<=c;t++)if(n.has(`${t}:${i}`)){e=!0;break}if(e)break;s=i}let l=Math.min(e.row,s),u=Math.max(e.row,s);for(let r=e.col;i>0?r<=t.col:r>=t.col;r+=i){let e=!1;for(let t=l;t<=u;t++)if(n.has(`${r}:${t}`)){e=!0;break}if(e)break;o=r}}return f(e,{col:o,row:s})}function d(e,t){let n=c.value,r=u(e,t,n,!0),i=u(e,t,n,!1);return r.w*r.h>=i.w*i.h?r:i}function f(e,t){let n=Math.min(e.col,t.col),r=Math.max(e.col,t.col),i=Math.min(e.row,t.row),a=Math.max(e.row,t.row);return{col:n,row:i,w:r-n+1,h:a-i+1}}function p(e){let t=i.value;if(!t)return;let r=t.getBoundingClientRect(),a=(e.clientX-r.left)/r.width,o=(e.clientY-r.top)/r.height;if(!(a<0||a>=1||o<0||o>=1))return{col:Math.min(Math.floor(a*n.cols),n.cols-1),row:Math.min(Math.floor(o*n.rows),n.rows-1)}}function m(e){let t=p(e);t&&(c.value.has(`${t.col}:${t.row}`)||(a.value=!0,o.value=t,s.value=t,e.target?.setPointerCapture?.(e.pointerId)))}function h(e){if(!a.value)return;let t=p(e);t&&(s.value=t)}function g(){a.value&&l.value&&r(`update:modelValue`,[...n.modelValue,l.value]),a.value=!1,o.value=null,s.value=null}function _(e){let t=[...n.modelValue];t.splice(e,1),r(`update:modelValue`,t)}function v(e){let t=e.col===0,r=e.row===0,i=t?e.col+e.w:e.col,a=r?e.row+e.h:e.row;return{left:`${i/n.cols*100}%`,top:`${a/n.rows*100}%`}}return(t,n)=>{let r=Or;return M(),z(`div`,Uf,[(M(),z(`svg`,{ref_key:`svgRef`,ref:i,class:`w-full h-full`,viewBox:`0 0 ${e.cols} ${e.rows}`,preserveAspectRatio:`none`,style:{cursor:`crosshair`,"touch-action":`none`},onPointerdown:m,onPointermove:h,onPointerup:g,onPointerleave:g},[(M(!0),z(V,null,Vt(e.cols-1,t=>(M(),z(`line`,{key:`v${t}`,x1:t,y1:0,x2:t,y2:e.rows,class:`grid-line`},null,8,Gf))),128)),(M(!0),z(V,null,Vt(e.rows-1,t=>(M(),z(`line`,{key:`h${t}`,x1:0,y1:t,x2:e.cols,y2:t,class:`grid-line`},null,8,Kf))),128)),(M(!0),z(V,null,Vt(e.modelValue,(e,t)=>(M(),z(`rect`,{key:t,x:e.col,y:e.row,width:e.w,height:e.h,class:`grid-region`},null,8,qf))),128)),H(l)?(M(),z(`rect`,{key:0,x:H(l).col,y:H(l).row,width:H(l).w,height:H(l).h,class:`grid-region grid-region-preview`},null,8,Jf)):J(``,!0)],40,Wf)),(M(!0),z(V,null,Vt(e.modelValue,(e,t)=>(M(),z(`button`,{key:`rm-${t}`,class:`grid-remove-btn`,style:X(v(e)),onClick:It(e=>_(t),[`stop`]),onPointerdown:n[0]||=It(()=>{},[`stop`])},[K(r,{class:`w-[10px] h-[10px]`})],44,Yf))),128))])}}}),[[`__scopeId`,`data-v-8276ca40`]]),Zf=[`id`],Qf=[`fill`],$f=[`id`],ep=[`fill`],tp=[`d`],np=[`x1`,`y1`,`x2`,`y2`,`stroke`],rp=[`x1`,`y1`,`x2`,`y2`,`stroke`,`marker-end`,`marker-start`],ip=[`x`,`y`,`fill`],ap=[`x`,`y`],op=[`x`,`y`,`fill`],sp=[`x`,`y`],cp=Dl(_n({__name:`CuiPolygon`,props:{cameraZones:{},cameraLines:{}},setup(e){let{cameraZones:t}=Sn(e),n=Ut(`zoneRef`),r=w(n);function i(e){if(!e)return``;let t=e.map(e=>`${Math.round(e[0]/100*r.width.value)},${Math.round(e[1]/100*r.height.value)}`);if(t.length===0)return``;let n=`M ${t[0]}`;for(let e=1;e<t.length;e++)n+=` L ${t[e]}`;return n+=` Z`,n}function a(e){let t=r.width.value,n=r.height.value,i=e.points[0][0]/100*t,a=e.points[0][1]/100*n,o=e.points[1][0]/100*t,s=e.points[1][1]/100*n,c=(i+o)/2,l=(a+s)/2,u=o-i,d=s-a,f=Math.sqrt(u*u+d*d)||1,p=-d,m=u,h=c-p/2,g=l-m/2,_=c+p/2,v=l+m/2,y=p/f,b=m/f,x=(e,r)=>({x:Math.max(8,Math.min(t-8,e)),y:Math.max(8,Math.min(n-8,r))}),S=x(h-y*18,g-b*18),C=x(_+y*18,v+b*18);return{h1x:i,h1y:a,h2x:o,h2y:s,ax:S.x+y*13,ay:S.y+b*13,bx:C.x-y*13,by:C.y-b*13,labelAx:S.x,labelAy:S.y,labelBx:C.x,labelBy:C.y}}return(r,o)=>(M(),z(`svg`,{ref_key:`zoneRef`,ref:n,width:`100%`,height:`100%`,class:`zones-container polygon-container min-w-0`},[L(`defs`,null,[(M(!0),z(V,null,Vt(e.cameraLines??[],(e,t)=>(M(),z(`marker`,{id:`arrow-ab-${t}`,key:`marker-ab-${t}`,markerWidth:`6`,markerHeight:`5`,refX:`5`,refY:`2.5`,orient:`auto`,markerUnits:`strokeWidth`},[L(`path`,{d:`M0,0 L6,2.5 L0,5 Z`,fill:e.color},null,8,Qf)],8,Zf))),128)),(M(!0),z(V,null,Vt(e.cameraLines??[],(e,t)=>(M(),z(`marker`,{id:`arrow-ba-${t}`,key:`marker-ba-${t}`,markerWidth:`6`,markerHeight:`5`,refX:`1`,refY:`2.5`,orient:`auto`,markerUnits:`strokeWidth`},[L(`path`,{d:`M6,0 L0,2.5 L6,5 Z`,fill:e.color},null,8,ep)],8,$f))),128))]),(M(!0),z(V,null,Vt(H(t),(e,t)=>(M(),z(`path`,{key:`zone-${t}`,d:i(e.points.map(e=>e)),class:I({dash:e.type===`intersect`&&!e.isPrivacyMask}),style:X({fill:e.isPrivacyMask?`rgba(16, 16, 16, 0.9)`:e.filter===`exclude`?`transparent`:`${e.color}4D`,stroke:e.isPrivacyMask?`#333333`:e.color,"stroke-width":`2`})},null,14,tp))),128)),(M(!0),z(V,null,Vt(e.cameraLines??[],(e,t)=>(M(),z(V,{key:`line-${t}`},[L(`line`,{x1:a(e).h1x,y1:a(e).h1y,x2:a(e).h2x,y2:a(e).h2y,stroke:e.color,"stroke-width":`2`,"stroke-dasharray":`6,4`,opacity:`0.5`},null,8,np),L(`line`,{x1:a(e).ax,y1:a(e).ay,x2:a(e).bx,y2:a(e).by,stroke:e.color,"stroke-width":`3`,"marker-end":e.direction===`b-to-a`?void 0:`url(#arrow-ab-${t})`,"marker-start":e.direction===`a-to-b`?void 0:`url(#arrow-ba-${t})`},null,8,rp),L(`rect`,{x:a(e).labelAx-8,y:a(e).labelAy-8,width:`16`,height:`16`,rx:`3`,fill:e.color},null,8,ip),L(`text`,{x:a(e).labelAx,y:a(e).labelAy,fill:`#fff`,"font-size":`10`,"font-weight":`bold`,"text-anchor":`middle`,"dominant-baseline":`central`},`A`,8,ap),L(`rect`,{x:a(e).labelBx-8,y:a(e).labelBy-8,width:`16`,height:`16`,rx:`3`,fill:e.color},null,8,op),L(`text`,{x:a(e).labelBx,y:a(e).labelBy,fill:`#fff`,"font-size":`10`,"font-weight":`bold`,"text-anchor":`middle`,"dominant-baseline":`central`},`B`,8,sp)],64))),128))],512))}}),[[`__scopeId`,`data-v-03a4c212`]]),lp={viewBox:`0 0 16 16`,width:`1.2em`,height:`1.2em`};function up(e,t){return M(),z(`svg`,lp,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M3 14s-1 0-1-1s1-4 6-4s6 3 6 4s-1 1-1 1zm5-6a3 3 0 1 0 0-6a3 3 0 0 0 0 6`},null,-1)]])}var dp=W({name:`bi-person-fill`,render:up}),fp={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function pp(e,t){return M(),z(`svg`,fp,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M6.25 5.25c0-1.422 1.028-2.75 2.5-2.75s2.5 1.328 2.5 2.75S10.222 8 8.75 8s-2.5-1.328-2.5-2.75M1 8.75C1 7.328 2.028 6 3.5 6S6 7.328 6 8.75S4.972 11.5 3.5 11.5S1 10.172 1 8.75M12 10a7 7 0 0 0-7 7c0 1.36.72 2.388 1.7 3.044c.963.645 2.198.956 3.378.956h3.844c1.18 0 2.415-.311 3.377-.956C18.28 19.388 19 18.361 19 17a7 7 0 0 0-7-7m.75-4.75c0-1.422 1.028-2.75 2.5-2.75s2.5 1.328 2.5 2.75S16.722 8 15.25 8s-2.5-1.328-2.5-2.75M18 8.75C18 7.328 19.028 6 20.5 6S23 7.328 23 8.75s-1.028 2.75-2.5 2.75S18 10.172 18 8.75`},null,-1)]])}var mp=W({name:`fluent-animal-paw-print-24-filled`,render:pp}),hp={viewBox:`0 0 16 16`,width:`1.2em`,height:`1.2em`};function gp(e,t){return M(),z(`svg`,hp,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`m3.044 6l-.01.074A1.5 1.5 0 0 0 2 7.5v3A1.5 1.5 0 0 0 3.5 12h9a1.5 1.5 0 0 0 1.5-1.5v-3a1.5 1.5 0 0 0-1.04-1.428L12.951 6h.549a.5.5 0 0 0 0-1h-.677l-.16-1.253A2 2 0 0 0 10.68 2H5.319a2 2 0 0 0-1.984 1.744L3.173 5H2.5a.5.5 0 0 0 0 1zm2.275-3h5.36a1 1 0 0 1 .992.873L11.943 6h-7.89l.274-2.128A1 1 0 0 1 5.319 3M5.25 9.749a.749.749 0 1 1 0-1.498a.749.749 0 0 1 0 1.498m5.498 0a.749.749 0 1 1 0-1.498a.749.749 0 0 1 0 1.498M12.497 13h-1.5v.25a.75.75 0 0 0 1.5 0zM5 13H3.5v.25a.75.75 0 0 0 1.5 0z`},null,-1)]])}var _p=W({name:`fluent-vehicle-car-16-filled`,render:gp}),vp={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function yp(e,t){return M(),z(`svg`,vp,[...t[0]||=[L(`g`,{fill:`currentColor`},[L(`path`,{d:`M15.25 6.5a2.25 2.25 0 1 0 0-4.5a2.25 2.25 0 0 0 0 4.5m-2.867-.001c-1.495-.21-4.912.397-6.32 4.15a1 1 0 1 0 1.873.702c.584-1.555 1.636-2.316 2.574-2.655l-1.17 3.006q-.029.075-.045.15a1 1 0 0 0 .164.91l3.562 4.607l.231 3.693a1 1 0 1 0 1.996-.124l-.27-4.307l-2.092-2.707l1.373-2.661l.093.134a2 2 0 0 0 2.42.711l2.115-.886a1 1 0 0 0-.773-1.844l-2.115.886l-1.606-2.335a3.04 3.04 0 0 0-1.661-1.36a1.4 1.4 0 0 0-.35-.07`}),L(`path`,{d:`m8.45 16.45l.827-2.452l1.469 1.9l-.402 1.191a2 2 0 0 1-2.032 1.356l-2.88-.197a1 1 0 1 1 .136-1.996z`})],-1)]])}var bp=W({name:`healthicons-running-24px`,render:yp}),xp={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Sp(e,t){return M(),z(`svg`,xp,[...t[0]||=[L(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[L(`path`,{d:`M2.97 12.92A2 2 0 0 0 2 14.63v3.24a2 2 0 0 0 .97 1.71l3 1.8a2 2 0 0 0 2.06 0L12 19v-5.5l-5-3zM7 16.5l-4.74-2.85M7 16.5l5-3m-5 3v5.17m5-8.17V19l3.97 2.38a2 2 0 0 0 2.06 0l3-1.8a2 2 0 0 0 .97-1.71v-3.24a2 2 0 0 0-.97-1.71L17 10.5zm5 3l-5-3m5 3l4.74-2.85M17 16.5v5.17`}),L(`path`,{d:`M7.97 4.42A2 2 0 0 0 7 6.13v4.37l5 3l5-3V6.13a2 2 0 0 0-.97-1.71l-3-1.8a2 2 0 0 0-2.06 0zM12 8L7.26 5.15M12 8l4.74-2.85M12 13.5V8`})],-1)]])}var Cp=W({name:`lucide-boxes`,render:Sp}),wp={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Tp(e,t){return M(),z(`svg`,wp,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M20 20H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2M4 6v12h16V6zm2 3h12v2H6zm0 4h10v2H6z`},null,-1)]])}var Ep=W({name:`mdi-card-text-outline`,render:Tp}),Dp={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Op(e,t){return M(),z(`svg`,Dp,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M5.5 9A1.5 1.5 0 0 0 7 7.5A1.5 1.5 0 0 0 5.5 6A1.5 1.5 0 0 0 4 7.5A1.5 1.5 0 0 0 5.5 9m11.91 2.58c.36.36.59.86.59 1.42c0 .55-.22 1.05-.59 1.41l-5 5a1.996 1.996 0 0 1-2.83 0l-6.99-6.99C2.22 12.05 2 11.55 2 11V6c0-1.11.89-2 2-2h5c.55 0 1.05.22 1.41.58zm-3.87-5.87l1-1l6.87 6.87c.37.36.59.87.59 1.42s-.22 1.05-.58 1.41l-5.38 5.38l-1-1L20.75 13z`},null,-1)]])}var kp=W({name:`mdi-tag-multiple`,render:Op}),Ap={key:1,class:`label-text`},jp=Dl(_n({__name:`CuiBBoxPlayground`,props:{showIcon:{type:Boolean,default:!0},showLabel:{type:Boolean,default:!0},showConfidence:{type:Boolean,default:!0},highlightArea:{type:Boolean,default:!0},detections:{default(){return[]}},classes:{default(){return[]}}},setup(e,{expose:t}){let{detections:n,classes:r}=Sn(e),i={motion:{color:`#A855F7`,icon:bp},animal:{color:`#22C55E`,icon:mp},person:{color:`#3B82F6`,icon:dp},vehicle:{color:`#EF4444`,icon:_p},face:{color:`#F59E0B`,icon:$s},license_plate:{color:`#06B6D4`,icon:Ep},classifier:{color:`#8B5CF6`,icon:kp},other:{color:`#CAC443`,icon:Cp}},a={motion:{color:`rgba(168, 85, 247, 0.1)`},animal:{color:`rgba(34, 197, 94, 0.1)`},person:{color:`rgba(59, 130, 246, 0.1)`},vehicle:{color:`rgba(239, 68, 68, 0.1)`},face:{color:`rgba(245, 158, 11, 0.1)`},license_plate:{color:`rgba(6, 182, 212, 0.1)`},classifier:{color:`rgba(139, 92, 246, 0.1)`},other:{color:`rgba(202, 196, 67, 0.1)`}},o=new Map,s=Ut(`containerRef`),c=pn([]),{width:l,height:u}=w(s),d=U(()=>Math.min(l.value||800,u.value||600)),f=U(()=>d.value<200?.8:1),p=U(()=>e=>l.value?Math.round(e*l.value):0),m=U(()=>e=>u.value?Math.round(e*u.value):0),h=U(()=>e=>l.value?Math.round(e*l.value):0),g=U(()=>e=>u.value?Math.round(e*u.value):0),_=U(()=>e=>{let t=h.value(e.box.width),n=g.value(e.box.height);return Math.min(t,n)*(t<200?.3:t<400?.25:.2)}),v=U(()=>e=>m.value(e.box.y)<30*f.value),y=U(()=>e=>p.value(e.box.x)>l.value*.7);function b(e){return e.attribute===`face`}function x(e){return e.attribute===`license_plate`}function S(e){return e.attribute!==`face`&&e.attribute!==`license_plate`&&`subAttribute`in e}function C(e){return b(e)?`face`:x(e)?`license_plate`:S(e)?`classifier`:e.label}function T(e){return i[e]??i.other}function ee(e){return a[e]??a.other}function E(e){return x(e)?e.plateText||`license plate`:b(e)?e.identity||`face`:S(e)&&e.subAttribute||e.label}function te(){let e=[...o.values()].flat();c.value=r.value.length===0?e:e.filter(e=>r.value.includes(e.label))}function ne(e,t){t.length>0?o.set(e,t):o.delete(e),te()}function D(e){e?(o.delete(e),te()):(o.clear(),c.value=[])}return q(n,e=>{e.length&&ne(`props`,e)},{immediate:!0}),t({draw:ne,clear:D}),(t,n)=>(M(),z(`div`,{ref_key:`containerRef`,ref:s,class:`bbox-container min-w-0`},[(M(!0),z(V,null,Vt(H(c),(t,r)=>(M(),z(`div`,{key:`trackId`in t?`t${t.trackId}`:r,class:I([`bbox-corners`,{tracked:`trackId`in t}]),style:X({left:`${H(p)(t.box.x)}px`,top:`${H(m)(t.box.y)}px`,width:`${H(h)(t.box.width)}px`,height:`${H(g)(t.box.height)}px`})},[L(`div`,{class:`w-full h-full`,style:X({background:e.highlightArea?ee(C(t)).color:void 0})},[(M(),z(V,null,Vt([`tl`,`tr`,`bl`,`br`],e=>L(`div`,{key:e,class:I([`corner-lines`,e]),style:X({"--corner-color":T(C(t)).color,"--corner-size":`${H(_)(t)}px`})},[...n[0]||=[L(`div`,{class:`line horizontal`},null,-1),L(`div`,{class:`line vertical`},null,-1)]],6)),64))],4),e.showLabel||e.showConfidence||e.showIcon?(M(),z(`div`,{key:0,class:I([`label z-1`,{"label-bottom":H(v)(t),"label-right":H(y)(t)}]),style:X({backgroundColor:T(C(t)).color,fontSize:`${12*H(f)}px`,padding:`${4*H(f)}px ${8*H(f)}px`,gap:`${4*H(f)}px`})},[e.showIcon?(M(),G(Fn(T(C(t)).icon),{key:0})):J(``,!0),e.showLabel&&H(d)>250?(M(),z(`span`,Ap,R(E(t))+R(`trackId`in t?`#${t.trackId}`:``),1)):J(``,!0),e.showConfidence&&H(d)>250?(M(),z(`span`,{key:2,class:`confidence`,style:X({fontSize:`${11*H(f)}px`})},R((t.confidence*100).toFixed(1))+`% `,5)):J(``,!0)],6)):J(``,!0)],6))),128))],512))}}),[[`__scopeId`,`data-v-67f4f675`]]),Mp={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Np(e,t){return M(),z(`svg`,Mp,[...t[0]||=[L(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M15 14c.2-1 .7-1.7 1.5-2.5c1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5c.7.7 1.3 1.5 1.5 2.5m0 4h6m-5 4h4`},null,-1)]])}var Pp=W({name:`lucide-lightbulb`,render:Np}),Fp={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Ip(e,t){return M(),z(`svg`,Fp,[...t[0]||=[L(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[L(`path`,{d:`M14 17H5M19 7h-9`}),L(`circle`,{cx:`17`,cy:`17`,r:`3`}),L(`circle`,{cx:`7`,cy:`7`,r:`3`})],-1)]])}var Lp=W({name:`lucide-settings2`,render:Ip}),Rp={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function zp(e,t){return M(),z(`svg`,Rp,[...t[0]||=[L(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M5 12h14m-7-7v14`},null,-1)]])}var Bp=W({name:`lucide-plus`,render:zp}),Vp={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Hp(e,t){return M(),z(`svg`,Vp,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M13 14h-2V8h2m0 10h-2v-2h2m3.7-12H15V2H9v2H7.3C6.6 4 6 4.6 6 5.3v15.3c0 .8.6 1.4 1.3 1.4h9.3c.7 0 1.3-.6 1.3-1.3V5.3c.1-.7-.5-1.3-1.2-1.3`},null,-1)]])}var Up=W({name:`mdi-battery-alert`,render:Hp}),Wp={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Gp(e,t){return M(),z(`svg`,Wp,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M16 17H8V6h8m.67-2H15V2H9v2H7.33A1.33 1.33 0 0 0 6 5.33v15.34C6 21.4 6.6 22 7.33 22h9.34A1.33 1.33 0 0 0 18 20.67V5.33C18 4.6 17.4 4 16.67 4`},null,-1)]])}var Kp=W({name:`mdi-battery20`,render:Gp}),qp={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Jp(e,t){return M(),z(`svg`,qp,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M16 14H8V6h8m.67-2H15V2H9v2H7.33A1.33 1.33 0 0 0 6 5.33v15.34C6 21.4 6.6 22 7.33 22h9.34A1.33 1.33 0 0 0 18 20.67V5.33C18 4.6 17.4 4 16.67 4`},null,-1)]])}var Yp=W({name:`mdi-battery40`,render:Jp}),Xp={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Zp(e,t){return M(),z(`svg`,Xp,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M16 12H8V6h8m.67-2H15V2H9v2H7.33A1.33 1.33 0 0 0 6 5.33v15.34C6 21.4 6.6 22 7.33 22h9.34A1.33 1.33 0 0 0 18 20.67V5.33C18 4.6 17.4 4 16.67 4`},null,-1)]])}var Qp=W({name:`mdi-battery60`,render:Zp}),$p={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function em(e,t){return M(),z(`svg`,$p,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M16 9H8V6h8m.67-2H15V2H9v2H7.33A1.33 1.33 0 0 0 6 5.33v15.34C6 21.4 6.6 22 7.33 22h9.34A1.33 1.33 0 0 0 18 20.67V5.33C18 4.6 17.4 4 16.67 4`},null,-1)]])}var tm=W({name:`mdi-battery80`,render:em}),nm={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function rm(e,t){return M(),z(`svg`,nm,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M16.67 4H15V2H9v2H7.33A1.33 1.33 0 0 0 6 5.33v15.34C6 21.4 6.6 22 7.33 22h9.34A1.33 1.33 0 0 0 18 20.67V5.33C18 4.6 17.4 4 16.67 4`},null,-1)]])}var im=W({name:`mdi-battery`,render:rm}),am={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function om(e,t){return M(),z(`svg`,am,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M23.05 11h-3V4l-5 10h3v8M12 20H4l.05-14h8m.67-2h-1.67V2h-6v2H3.38a1.33 1.33 0 0 0-1.33 1.33v15.34c0 .73.6 1.33 1.33 1.33h9.34c.73 0 1.33-.6 1.33-1.33V5.33A1.33 1.33 0 0 0 12.72 4`},null,-1)]])}var sm=W({name:`mdi-battery-charging-outline`,render:om}),cm={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function lm(e,t){return M(),z(`svg`,cm,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M23.05 11h-3V4l-5 10h3v8m-6-5h-8V6h8m.67-2h-1.67V2h-6v2H3.38a1.33 1.33 0 0 0-1.33 1.33v15.34c0 .73.6 1.33 1.33 1.33h9.34c.73 0 1.33-.6 1.33-1.33V5.33A1.33 1.33 0 0 0 12.72 4`},null,-1)]])}var um=W({name:`mdi-battery-charging20`,render:lm}),dm={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function fm(e,t){return M(),z(`svg`,dm,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M13 4h-2V2H5v2H3c-.6 0-1 .4-1 1v16c0 .6.4 1 1 1h10c.6 0 1-.4 1-1V5c0-.6-.4-1-1-1m-1 10.5H4V6h8zM23 11h-3V4l-5 10h3v8`},null,-1)]])}var pm=W({name:`mdi-battery-charging40`,render:fm}),mm={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function hm(e,t){return M(),z(`svg`,mm,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M12 11H4V6h8m.67-2H11V2H5v2H3.33A1.33 1.33 0 0 0 2 5.33v15.34C2 21.4 2.6 22 3.33 22h9.34c.73 0 1.33-.6 1.33-1.33V5.33A1.33 1.33 0 0 0 12.67 4M23 11h-3V4l-5 10h3v8z`},null,-1)]])}var gm=W({name:`mdi-battery-charging60`,render:hm}),_m={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function vm(e,t){return M(),z(`svg`,_m,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M23 11h-3V4l-5 10h3v8M12 9H4V6h8m.67-2H11V2H5v2H3.33A1.33 1.33 0 0 0 2 5.33v15.34C2 21.4 2.6 22 3.33 22h9.34c.73 0 1.33-.6 1.33-1.33V5.33A1.33 1.33 0 0 0 12.67 4`},null,-1)]])}var ym=W({name:`mdi-battery-charging80`,render:vm}),bm={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function xm(e,t){return M(),z(`svg`,bm,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M23 11h-3V4l-5 10h3v8M12.67 4H11V2H5v2H3.33A1.33 1.33 0 0 0 2 5.33v15.34C2 21.4 2.6 22 3.33 22h9.34c.73 0 1.33-.6 1.33-1.33V5.33A1.33 1.33 0 0 0 12.67 4`},null,-1)]])}var Sm=W({name:`mdi-battery-charging100`,render:xm}),Cm={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function wm(e,t){return M(),z(`svg`,Cm,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`m1 4.27l2 2V11c0 5.55 3.84 10.74 9 12c1.87-.46 3.57-1.44 4.97-2.76l2.26 2.26l1.27-1.28L2.28 3zM12 21c-3.75-1-7-5.46-7-9.78V8.27l10.59 10.59C14.53 19.89 13.3 20.65 12 21m9-16v6c0 2.28-.65 4.5-1.77 6.4l-1.46-1.45c.77-1.45 1.23-3.11 1.23-4.73V6.3l-7-3.12l-4.84 2.16l-1.51-1.52L12 1z`},null,-1)]])}var Tm=W({name:`mdi-shield-off-outline`,render:wm}),Em={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Dm(e,t){return M(),z(`svg`,Em,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M12 1L3 5v6c0 5.55 3.84 10.74 9 12c5.16-1.26 9-6.45 9-12V5zm3.97 13.41c-1.84 2.17-5.21 2.09-6.97-.07c-2.18-2.72-.64-6.72 2.7-7.34c.34-.05.63.28.51.61c-.46 1.23-.39 2.64.32 3.86a4.51 4.51 0 0 0 3.18 2.2c.34.05.49.47.26.74`},null,-1)]])}var Om=W({name:`mdi-shield-moon`,render:Dm}),km={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Am(e,t){return M(),z(`svg`,km,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M12 1L3 5v6c0 5.55 3.84 10.74 9 12c5.16-1.26 9-6.45 9-12V5zm0 6c1.4 0 2.8 1.1 2.8 2.5V11c.6 0 1.2.6 1.2 1.3v3.5c0 .6-.6 1.2-1.3 1.2H9.2c-.6 0-1.2-.6-1.2-1.3v-3.5c0-.6.6-1.2 1.2-1.2V9.5C9.2 8.1 10.6 7 12 7m0 1.2c-.8 0-1.5.5-1.5 1.3V11h3V9.5c0-.8-.7-1.3-1.5-1.3`},null,-1)]])}var jm=W({name:`mdi-shield-lock`,render:Am}),Mm={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Nm(e,t){return M(),z(`svg`,Mm,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M11 13h2v3h3v-5h2l-6-5l-6 5h2v5h3zm1-12l9 4v6c0 5.55-3.84 10.74-9 12c-5.16-1.26-9-6.45-9-12V5z`},null,-1)]])}var Pm=W({name:`mdi-shield-home`,render:Nm}),Fm={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Im(e,t){return M(),z(`svg`,Fm,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M12 1L3 5v6c0 5.55 3.84 10.74 9 12c5.16-1.26 9-6.45 9-12V5M11 7h2v6h-2m0 2h2v2h-2`},null,-1)]])}var Lm=W({name:`mdi-shield-alert`,render:Im}),Rm={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function zm(e,t){return M(),z(`svg`,Rm,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M12 10c-1.1 0-2 .9-2 2s.9 2 2 2s2-.9 2-2s-.9-2-2-2m4-8H8c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2m0 18H8V4h8z`},null,-1)]])}var Bm=W({name:`mdi-doorbell`,render:zm}),Vm={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Hm(e,t){return M(),z(`svg`,Vm,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M22 9v11h-2v-9H4v9H2V9l10-4zm-3 3H5v2h14zm0 6H5v2h14zm0-3H5v2h14z`},null,-1)]])}var Um=W({name:`mdi-garage-variant`,render:Hm}),Wm={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Gm(e,t){return M(),z(`svg`,Wm,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M22 9v11h-2v-9H4v9H2V9l10-4zm-3 3H5v2h14z`},null,-1)]])}var Km=W({name:`mdi-garage-open-variant`,render:Gm}),qm={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Jm(e,t){return M(),z(`svg`,qm,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`m20.84 22.73l-4.55-4.55A5.96 5.96 0 0 1 12 20c-3.31 0-6-2.69-6-6c0-1.33.67-2.97 1.55-4.56L1.11 3l1.28-1.27l19.72 19.73zM18 14c0-4-6-10.75-6-10.75s-1.16 1.3-2.45 3.1l8.4 8.4c.05-.25.05-.5.05-.75`},null,-1)]])}var Ym=W({name:`mdi-water-off`,render:Jm}),Xm={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Zm(e,t){return M(),z(`svg`,Xm,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M10 3.25S16 10 16 14c0 3.31-2.69 6-6 6s-6-2.69-6-6c0-4 6-10.75 6-10.75M20 7v6h-2V7zm-2 10h2v-2h-2z`},null,-1)]])}var Qm=W({name:`mdi-water-alert`,render:Zm}),$m={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function eh(e,t){return M(),z(`svg`,$m,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M22.11 21.46L2.39 1.73L1.11 3l2.95 2.95A9.9 9.9 0 0 0 2 12c0 5.5 4.5 10 10 10c2.28 0 4.37-.77 6.05-2.06l2.79 2.79zM12 20c-4.41 0-8-3.59-8-8c0-1.72.56-3.31 1.5-4.62l1.43 1.44A6 6 0 0 0 6 12c0 1.3.42 2.5 1.11 3.47l.72-.72C7.31 13.96 7 13 7 12c0-.89.25-1.72.66-2.45l.74.75c-.25.51-.4 1.09-.4 1.7c0 .74.22 1.43.57 2l.73-.71c-.19-.4-.3-.83-.3-1.29c0-.33.07-.64.18-.93l3.75 3.75c-.29.11-.6.18-.93.18c-.46 0-.89-.11-1.28-.3l-.72.73c.58.36 1.26.57 2 .57c.61 0 1.19-.15 1.71-.4l.74.74c-.73.41-1.56.66-2.45.66c-1 0-1.96-.31-2.75-.83l-.72.72C9.5 17.59 10.7 18 12 18c1.17 0 2.25-.35 3.18-.93l1.44 1.43c-1.3.94-2.9 1.5-4.62 1.5m0-12c.74 0 1.43.22 2 .57l-.71.73c-.33-.15-.69-.24-1.06-.27l-.95-.95c.22-.05.47-.08.72-.08m2.97 3.77c-.03-.37-.11-.73-.27-1.05l.73-.72c.36.58.57 1.26.57 2c0 .25-.03.5-.08.72zm-.22-3.94C13.96 7.31 13 7 12 7c-.54 0-1.06.09-1.55.25l-.76-.75C10.4 6.18 11.18 6 12 6c1.3 0 2.5.42 3.47 1.11zM8.18 5L6.72 3.5C8.25 2.56 10.06 2 12 2c5.5 0 10 4.5 10 10c0 1.94-.56 3.75-1.5 5.28L19 15.83c.65-1.14 1-2.45 1-3.83c0-4.41-3.59-8-8-8c-1.38 0-2.69.35-3.82 1m8.57 8.55c.16-.49.25-1.01.25-1.55c0-1-.31-1.96-.83-2.75l.72-.72C17.59 9.5 18 10.7 18 12c0 .83-.18 1.6-.5 2.32z`},null,-1)]])}var th=W({name:`mdi-smoke-detector-variant-off`,render:eh}),nh={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function rh(e,t){return M(),z(`svg`,nh,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M12 4c4.41 0 8 3.59 8 8s-3.59 8-8 8s-8-3.59-8-8s3.59-8 8-8m0-2C6.5 2 2 6.5 2 12s4.5 10 10 10s10-4.5 10-10S17.5 2 12 2m0 9c-.55 0-1 .45-1 1s.45 1 1 1s1-.45 1-1s-.45-1-1-1m-1.28-1.7c.39-.19.82-.3 1.28-.3s.89.11 1.29.3l.71-.73c-.57-.35-1.26-.57-2-.57s-1.42.22-2 .57zM15 12c0 .46-.11.89-.3 1.29l.73.71c.36-.57.57-1.26.57-2s-.21-1.42-.57-2l-.73.72c.19.39.3.82.3 1.28m-6 0c0-.46.11-.89.3-1.28L8.57 10c-.35.58-.57 1.26-.57 2s.22 1.43.57 2l.73-.71c-.19-.4-.3-.83-.3-1.29m4.29 2.7c-.4.19-.83.3-1.29.3s-.89-.11-1.28-.3l-.72.73c.58.36 1.26.57 2 .57s1.43-.21 2-.57zm3.6-6.17l-.72.72c.52.79.83 1.75.83 2.75s-.31 1.96-.83 2.75l.72.72C17.59 14.5 18 13.3 18 12s-.41-2.5-1.11-3.47m-7.64-.7C10.04 7.31 11 7 12 7s1.96.31 2.75.83l.72-.72a5.98 5.98 0 0 0-6.94 0zm5.5 8.34c-.79.52-1.75.83-2.75.83s-1.96-.31-2.75-.83l-.72.72C9.5 17.59 10.7 18 12 18s2.5-.41 3.47-1.11zm-6.92-1.42C7.31 13.96 7 13 7 12s.31-1.96.83-2.75l-.72-.72a5.98 5.98 0 0 0 0 6.94z`},null,-1)]])}var ih=W({name:`mdi-smoke-detector-variant`,render:rh}),ah={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function oh(e,t){return M(),z(`svg`,ah,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M11.4 8.2H15V10h-1.8zM19.67 1h-1.34c0 2.58 2.09 4.67 4.67 4.67V4.33c-1.84 0-3.33-1.49-3.33-3.33M21 1a2 2 0 0 0 2 2V1zm-4 0h-1.33c0 4.05 3.28 7.33 7.33 7.33V7c-3.31 0-6-2.69-6-6m-7 2.8c1 0 1.8-.8 1.8-1.8S11 .2 10 .2S8.2 1 8.2 2S9 3.8 10 3.8M2.39 1.73L1.11 3l2.35 2.35L2 5.8V11h1.8V7.33l1.25-.39l.63.63L2 22h1.8l2.87-8.11L9 17v5h1.8v-6.41l-2.49-4.54l.19-.68l12.34 12.36l1.27-1.27zm6.99 3.14c-.3-.5-.84-.84-1.46-.84c-.17 0-.34.03-.5.08l-.08.03l4.01 4.01z`},null,-1)]])}var sh=W({name:`mdi-motion-sensor-off`,render:oh}),ch={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function lh(e,t){return M(),z(`svg`,ch,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M10 .2C9 .2 8.2 1 8.2 2S9 3.8 10 3.8S11.8 3 11.8 2S11 .2 10 .2m5.67.8A7.33 7.33 0 0 0 23 8.33V7a6 6 0 0 1-6-6zm2.66 0c0 2.58 2.09 4.67 4.67 4.67V4.33c-1.84 0-3.33-1.49-3.33-3.33zM21 1a2 2 0 0 0 2 2V1zM7.92 4.03c-.17 0-.34.03-.5.08L2 5.8V11h1.8V7.33l2.11-.66L2 22h1.8l2.87-8.11L9 17v5h1.8v-6.41l-2.49-4.54l.73-2.87L10.12 10H15V8.2h-3.62l-2-3.33c-.3-.5-.84-.84-1.46-.84`},null,-1)]])}var uh=W({name:`mdi-motion-sensor`,render:lh}),dh={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function fh(e,t){return M(),z(`svg`,dh,[...t[0]||=[L(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[L(`path`,{d:`M7 16.3c2.2 0 4-1.83 4-4.05c0-1.16-.57-2.26-1.71-3.19S7.29 6.75 7 5.3c-.29 1.45-1.14 2.84-2.29 3.76S3 11.1 3 12.25c0 2.22 1.8 4.05 4 4.05`}),L(`path`,{d:`M12.56 6.6A11 11 0 0 0 14 3.02c.5 2.5 2 4.9 4 6.5s3 3.5 3 5.5a6.98 6.98 0 0 1-11.91 4.97`})],-1)]])}var ph=W({name:`lucide-droplets`,render:fh}),mh={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function hh(e,t){return M(),z(`svg`,mh,[...t[0]||=[L(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M14 4v10.54a4 4 0 1 1-4 0V4a2 2 0 0 1 4 0`},null,-1)]])}var gh=W({name:`lucide-thermometer`,render:hh}),_h={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function vh(e,t){return M(),z(`svg`,_h,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M18 20V10H6v10zm0-12a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V10a2 2 0 0 1 2-2h9V6a3 3 0 0 0-3-3a3 3 0 0 0-3 3H7a5 5 0 0 1 5-5a5 5 0 0 1 5 5v2zm-6 9a2 2 0 0 1-2-2a2 2 0 0 1 2-2a2 2 0 0 1 2 2a2 2 0 0 1-2 2`},null,-1)]])}var yh=W({name:`mdi-lock-open-outline`,render:vh}),bh={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function xh(e,t){return M(),z(`svg`,bh,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M12 17a2 2 0 0 0 2-2a2 2 0 0 0-2-2a2 2 0 0 0-2 2a2 2 0 0 0 2 2m6-9a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V10a2 2 0 0 1 2-2h1V6a5 5 0 0 1 5-5a5 5 0 0 1 5 5v2zm-6-5a3 3 0 0 0-3 3v2h6V6a3 3 0 0 0-3-3`},null,-1)]])}var Sh=W({name:`mdi-lock`,render:xh}),Ch={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function wh(e,t){return M(),z(`svg`,Ch,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M6 6.9L3.87 4.78l1.41-1.41L7.4 5.5zM13 1v3h-2V1zm7.13 3.78L18 6.9l-1.4-1.4l2.12-2.13zM4.5 10.5v2h-3v-2zm15 0h3v2h-3zM6 20h12a2 2 0 0 1 2 2H4a2 2 0 0 1 2-2m6-15a6 6 0 0 1 6 6v8H6v-8a6 6 0 0 1 6-6`},null,-1)]])}var Th=W({name:`mdi-alarm-light`,render:wh}),Eh={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Dh(e,t){return M(),z(`svg`,Eh,[...t[0]||=[L(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M12 2v10m6.4-5.4a9 9 0 1 1-12.77.04`},null,-1)]])}var Oh=W({name:`lucide-power`,render:Dh}),kh={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Ah(e,t){return M(),z(`svg`,kh,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M12 6a6 6 0 0 1 6 6c0 2.22-1.21 4.16-3 5.2V19a1 1 0 0 1-1 1h-4a1 1 0 0 1-1-1v-1.8c-1.79-1.04-3-2.98-3-5.2a6 6 0 0 1 6-6m2 15v1a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1v-1zm6-10h3v2h-3zM1 11h3v2H1zM13 1v3h-2V1zM4.92 3.5l2.13 2.14l-1.42 1.41L3.5 4.93zm12.03 2.13l2.12-2.13l1.43 1.43l-2.13 2.12z`},null,-1)]])}var jh=W({name:`mdi-lightbulb-on`,render:Ah}),Mh={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Nh(e,t){return M(),z(`svg`,Mh,[...t[0]||=[L(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M10 12h.01M18 20V6a2 2 0 0 0-2-2H8a2 2 0 0 0-2 2v14m-4 0h20`},null,-1)]])}var Ph=W({name:`lucide-door-closed`,render:Nh}),Fh={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Ih(e,t){return M(),z(`svg`,Fh,[...t[0]||=[L(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M11 20H2m9-15.438v16.157a1 1 0 0 0 1.242.97L19 20V5.562a2 2 0 0 0-1.515-1.94l-4-1A2 2 0 0 0 11 4.561zM11 4H8a2 2 0 0 0-2 2v14m8-8h.01M22 20h-3`},null,-1)]])}var Lh=W({name:`lucide-door-open`,render:Ih}),Rh={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function zh(e,t){return M(),z(`svg`,Rh,[...t[0]||=[L(`g`,{fill:`none`},[L(`path`,{d:`m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z`}),L(`path`,{fill:`currentColor`,d:`M19.26 16.877c.413.402.74.932.74 1.596c0 .753-.426 1.339-.9 1.745c-.48.408-1.114.731-1.81.983c-1.402.505-3.272.799-5.29.799s-3.888-.294-5.29-.8c-.696-.25-1.33-.574-1.809-.982c-.475-.406-.901-.992-.901-1.745c0-.663.327-1.194.74-1.596A9.97 9.97 0 0 0 12 20c2.859 0 5.438-1.2 7.26-3.123M12 2a8 8 0 1 1 0 16a8 8 0 0 1 0-16m0 4a4 4 0 1 0 0 8a4 4 0 0 0 0-8m0 2a2 2 0 1 1 0 4a2 2 0 0 1 0-4`})],-1)]])}var Bh=W({name:`mingcute-computer-camera-fill`,render:zh});async function Vh({cameraData:e}){return(await Q.post(`/cameras`,e)).data}async function Hh({cameraData:e}){return(await Q.post(`/cameras/preview`,e)).data}async function Uh({signal:e}){return(await Q.get(`/cameras/rooms`,{signal:e})).data}async function Wh({cameraname:e,signal:t}){return(await Q.get(`/cameras/${e}`,{signal:t})).data}async function Gh({cameraname:e}){return(await Q.delete(`/cameras/${e}/log`)).data}async function Kh({cameraname:e,signal:t}){return(await Q.get(`/cameras/${e}/log/download`,{signal:t})).data}async function qh({cameraname:e,sourcename:t,signal:n}){return(await Q.get(`/cameras/${e}/info/${t}`,{signal:n})).data}async function Jh({cameraname:e,sourcename:t,probeConfig:n,force:r,signal:i}){return(await Q.get(`/cameras/${e}/probe/${t}`,{params:{...n,...r?{refresh:!0}:{}},signal:i})).data}async function Yh({cameraname:e,forceNew:t,signal:n}){return(await Q.get(`/cameras/${e}/snapshot`,{signal:n,params:{forceNew:t},responseType:`arraybuffer`})).data}async function Xh({parameter:e,signal:t}){return(await Q.get(`/cameras`,{params:e,signal:t})).data}async function Zh({cameraname:e,cameraData:t}){return(await Q.patch(`/cameras/${e}`,t)).data}async function Qh({cameraname:e,signal:t}){return(await Q.get(`/cameras/${e}/extensions`,{signal:t})).data}async function $h({cameraname:e,pluginname:t,signal:n}){return(await Q.get(`/cameras/${e}/${t}/config`,{signal:n})).data}async function eg({cameraname:e,pluginname:t,configData:n}){return(await Q.patch(`/cameras/${e}/${t}/config`,n)).data}async function tg({cameraname:e,pluginname:t,configData:n}){return(await Q.put(`/cameras/${e}/${t}/config`,n)).data}async function ng({cameraname:e,pluginname:t,configData:n}){return(await Q.post(`/cameras/${e}/${t}/config`,n)).data}async function rg({cameraname:e,pluginname:t,sensorId:n,signal:r}){return(await Q.get(`/cameras/${e}/${t}/sensor/${n}/config`,{signal:r})).data}async function ig({cameraname:e,pluginname:t,sensorId:n,configData:r}){return(await Q.patch(`/cameras/${e}/${t}/sensor/${n}/config`,r)).data}async function ag({cameraname:e,pluginname:t,sensorId:n,configData:r}){return(await Q.put(`/cameras/${e}/${t}/sensor/${n}/config`,r)).data}async function og({cameraname:e,pluginname:t,sensorId:n,configData:r}){return(await Q.post(`/cameras/${e}/${t}/sensor/${n}/config`,r)).data}async function sg({cameraname:e,pluginname:t,type:n}){return(await Q.put(`/cameras/${e}/${t}/enable`,null,{params:{type:n}})).data}async function cg({cameraname:e,pluginname:t,type:n}){return(await Q.put(`/cameras/${e}/${t}/disable`,null,{params:{type:n}})).data}async function lg({cameraname:e,pluginname:t,type:n}){return(await Q.post(`/cameras/${e}/${t}`,null,{params:{type:n}})).data}async function ug({cameraname:e,pluginname:t,type:n}){return(await Q.delete(`/cameras/${e}/${t}`,{params:{type:n}})).data}async function dg({cameraname:e,pluginname:t}){return(await Q.post(`/cameras/${e}/${t}/activate`)).data}async function fg({cameraname:e,pluginname:t}){return(await Q.delete(`/cameras/${e}/${t}/deactivate`)).data}async function pg({cameraname:e,signal:t}){return(await Q.get(`/cameras/${e}/zones`,{signal:t})).data}async function mg({cameraname:e,zoneData:t}){return(await Q.patch(`/cameras/${e}/zones`,t)).data}async function hg({cameraname:e,lineData:t}){return(await Q.patch(`/cameras/${e}/lines`,t)).data}async function gg({cameraname:e}){return(await Q.delete(`/cameras/${e}`)).data}async function _g(){return(await Q.delete(`/cameras`)).data}var vg=class{_queryClient=Tn();t=sa.global.t;toast=ua();queryActivator=B([{name:`getCameraQuery`,enabled:!0},{name:`getCamerasQuery`,enabled:!0},{name:`getCameraSnapshotQuery`,enabled:!0},{name:`getCameraExtensionsQuery`,enabled:!0},{name:`getCameraExtensionConfigQuery`,enabled:!0},{name:`getZonesQuery`,enabled:!0},{name:`streamSourceInfoQuery`,enabled:!0},{name:`probeCameraSourceQuery`,enabled:!0},{name:`downloadLogQuery`,enabled:!0},{name:`getSensorConfigQuery`,enabled:!0}]);get queryClient(){return this._queryClient}createCameraQuery(){return P({mutationFn:Vh,onSuccess:async()=>{await this._queryClient.refetchQueries({queryKey:[`camerasList`]}),this.toast.add({severity:`success`,detail:this.t(`components.toast.camera_added`),life:3e3})}})}previewCameraQuery(){return P({mutationFn:Hh})}getCameraQuery(e){return da({queryKey:[`cameras`,e],queryFn:({signal:t})=>Wh({cameraname:H(e),signal:t}),initialData:()=>{let t=H(e),n=this._queryClient.getQueriesData({queryKey:[`camerasList`]});for(let[,e]of n){let n=e?.result?.find(e=>e.name===t);if(n)return n}},initialDataUpdatedAt:0,enabled:()=>this.queryActivator.value.some(e=>e.name===`getCameraQuery`&&e.enabled)})}getCameraExtensionsQuery(e){return da({queryKey:[`camerasExtensions`,e],queryFn:({signal:t})=>Qh({cameraname:H(e),signal:t}),enabled:()=>this.queryActivator.value.some(e=>e.name===`getCameraExtensionsQuery`&&e.enabled)})}streamSourceInfoQuery(e,t){return da({queryKey:[`cameras`,e,`info`,t],queryFn:({signal:n})=>qh({cameraname:H(e),sourcename:H(t),signal:n}),enabled:()=>this.queryActivator.value.some(e=>e.name===`streamSourceInfoQuery`&&e.enabled)})}probeCameraSourceQuery(e,t,n){return da({queryKey:[`cameras`,e,`probe`,t],queryFn:({signal:r})=>Jh({cameraname:H(e),sourcename:H(t),probeConfig:H(n),signal:r}),enabled:()=>this.queryActivator.value.some(e=>e.name===`probeCameraSourceQuery`&&e.enabled)})}getCameraSnapshotQuery(e,t){return da({queryKey:[`camerasSnapshot`,e],queryFn:({signal:n})=>Yh({cameraname:H(e),forceNew:H(t),signal:n}),enabled:()=>this.queryActivator.value.some(e=>e.name===`getCameraSnapshotQuery`&&e.enabled),retry:!1})}getCamerasQuery(e){return da({queryKey:[`camerasList`,e],queryFn:({signal:t})=>Xh({parameter:H(e),signal:t}),placeholderData:e=>e,enabled:()=>this.queryActivator.value.some(e=>e.name===`getCamerasQuery`&&e.enabled)})}getRoomsQuery(){return da({queryKey:[`camerasRooms`],queryFn:({signal:e})=>Uh({signal:e})})}patchCameraQuery(){return P({mutationFn:Zh,onSuccess:async(e,t)=>{let n=t.cameraData.name&&t.cameraData.name!==t.cameraname,r=t.cameraData.room!==void 0;if(n){let n=t.cameraname;this._queryClient.setQueryData([`cameras`,t.cameraData.name],e),this._queryClient.removeQueries({predicate:e=>e.queryKey.includes(n),type:`inactive`}),await this._queryClient.refetchQueries({queryKey:[`camerasList`]})}else await this._queryClient.refetchQueries({queryKey:[`cameras`,t.cameraname],exact:!0}),await this._queryClient.refetchQueries({queryKey:[`camerasExtensions`,t.cameraname]}),await this._queryClient.refetchQueries({queryKey:[`cameras`,`extensions`,t.cameraname],type:`active`}),r&&(await this._queryClient.refetchQueries({queryKey:[`camerasList`]}),await this._queryClient.refetchQueries({queryKey:[`camerasRooms`]}));this.toast.add({severity:`success`,detail:this.t(`components.toast.camera_updated`),life:3e3})}})}getCameraExtensionConfigQuery(e,t,n){return da({queryKey:[`cameras`,`extensions`,e,t],queryFn:({signal:n})=>$h({cameraname:H(e),pluginname:H(t),signal:n}),enabled:()=>!!H(t)&&this.queryActivator.value.some(e=>e.name===`getCameraExtensionConfigQuery`&&e.enabled),refetchInterval(){if(n.value)return 1e4},retry:10,retryDelay:500,staleTime:0})}patchCameraExtensionConfigQuery(){return P({mutationFn:eg,onSuccess:async(e,t)=>{await this._queryClient.refetchQueries({queryKey:[`cameras`,t.cameraname],exact:!0}),await this._queryClient.refetchQueries({queryKey:[`cameras`,`extensions`,t.cameraname],type:`active`}),await this._queryClient.refetchQueries({queryKey:[`camerasExtensions`,t.cameraname]})}})}setCameraExtensionConfigQuery(){return P({mutationFn:tg,onSuccess:async(e,t)=>{await this._queryClient.refetchQueries({queryKey:[`cameras`,t.cameraname],exact:!0}),await this._queryClient.refetchQueries({queryKey:[`cameras`,`extensions`,t.cameraname],type:`active`}),await this._queryClient.refetchQueries({queryKey:[`camerasExtensions`,t.cameraname]})}})}submitCameraExtensionConfigQuery(){return P({mutationFn:ng,onSuccess:async(e,t)=>{await this._queryClient.refetchQueries({queryKey:[`cameras`,t.cameraname],exact:!0}),await this._queryClient.refetchQueries({queryKey:[`cameras`,`extensions`,t.cameraname],type:`active`}),await this._queryClient.refetchQueries({queryKey:[`camerasExtensions`,t.cameraname]})}})}getSensorConfigQuery(e,t,n,r){return da({queryKey:[`cameras`,`sensor`,e,t,n],queryFn:({signal:r})=>rg({cameraname:H(e),pluginname:H(t),sensorId:H(n),signal:r}),enabled:()=>{let e=H(t),r=H(n);return!e||!r?!1:this.queryActivator.value.some(e=>e.name===`getSensorConfigQuery`&&e.enabled)},refetchInterval(){if(r.value)return 1e4},retry:3,retryDelay:500,staleTime:0})}patchSensorConfigQuery(){return P({mutationFn:ig,onSuccess:async(e,t)=>{await this._queryClient.refetchQueries({queryKey:[`cameras`,t.cameraname],exact:!0}),await this._queryClient.refetchQueries({queryKey:[`cameras`,`sensor`,t.cameraname,t.pluginname,t.sensorId]})}})}setSensorConfigQuery(){return P({mutationFn:ag,onSuccess:async(e,t)=>{await this._queryClient.refetchQueries({queryKey:[`cameras`,t.cameraname],exact:!0}),await this._queryClient.refetchQueries({queryKey:[`cameras`,`sensor`,t.cameraname,t.pluginname,t.sensorId]})}})}submitSensorConfigQuery(){return P({mutationFn:og,onSuccess:async(e,t)=>{await this._queryClient.refetchQueries({queryKey:[`cameras`,t.cameraname],exact:!0}),await this._queryClient.refetchQueries({queryKey:[`cameras`,`sensor`,t.cameraname,t.pluginname,t.sensorId]})}})}enableCameraExtensionQuery(){return P({mutationFn:sg,onSuccess:async(e,t)=>{await this._queryClient.refetchQueries({queryKey:[`cameras`,t.cameraname],exact:!0}),await this._queryClient.refetchQueries({queryKey:[`camerasExtensions`,t.cameraname]})}})}disableCameraExtensionQuery(){return P({mutationFn:cg,onSuccess:async(e,t)=>{await this._queryClient.refetchQueries({queryKey:[`cameras`,t.cameraname],exact:!0}),await this._queryClient.refetchQueries({queryKey:[`camerasExtensions`,t.cameraname]})}})}addCameraExtensionQuery(){return P({mutationFn:lg,onSuccess:async(e,t)=>{await this._queryClient.refetchQueries({queryKey:[`cameras`,t.cameraname],exact:!0}),await this._queryClient.refetchQueries({queryKey:[`camerasExtensions`,t.cameraname]})}})}activateCameraExtensionQuery(){return P({mutationFn:dg,onSuccess:async(e,t)=>{await this._queryClient.refetchQueries({queryKey:[`cameras`,t.cameraname],exact:!0}),await this._queryClient.refetchQueries({queryKey:[`camerasExtensions`,t.cameraname]})}})}deactivateCameraExtensionQuery(){return P({mutationFn:fg,onSuccess:async(e,t)=>{await this._queryClient.refetchQueries({queryKey:[`cameras`,t.cameraname],exact:!0}),await this._queryClient.refetchQueries({queryKey:[`camerasExtensions`,t.cameraname]})}})}getZonesQuery(e){return da({queryKey:[`cameras`,e,`zones`],queryFn:({signal:t})=>pg({cameraname:H(e),signal:t}),enabled:()=>this.queryActivator.value.some(e=>e.name===`getZonesQuery`&&e.enabled)})}patchZonesQuery(){return P({mutationFn:mg,onSuccess:async(e,t)=>{await this._queryClient.refetchQueries({queryKey:[`cameras`,t.cameraname],exact:!0}),this.toast.add({severity:`success`,detail:this.t(`components.toast.zone_updated`),life:3e3})}})}patchLinesQuery(){return P({mutationFn:hg,onSuccess:async(e,t)=>{await this._queryClient.refetchQueries({queryKey:[`cameras`,t.cameraname],exact:!0}),this.toast.add({severity:`success`,detail:this.t(`components.toast.line_updated`),life:3e3})}})}removeCameraExtensionQuery(){return P({mutationFn:ug,onSuccess:async(e,t)=>{await this._queryClient.refetchQueries({queryKey:[`cameras`,t.cameraname],exact:!0}),await this._queryClient.refetchQueries({queryKey:[`camerasExtensions`,t.cameraname]})}})}removeCameraQuery(){return P({mutationFn:gg,onSuccess:async()=>{await this._queryClient.refetchQueries({queryKey:[`camerasList`]}),this.toast.add({severity:`success`,detail:this.t(`components.toast.camera_removed`),life:3e3})}})}removeCamerasQuery(){return P({mutationFn:_g,onSuccess:async()=>{await this._queryClient.refetchQueries({queryKey:[`camerasList`]}),this.toast.add({severity:`success`,detail:this.t(`components.toast.cameras_removed`),life:3e3})}})}downloadLogQuery(e){return da({queryKey:[`logs`,e],queryFn:({signal:t})=>Kh({cameraname:H(e),signal:t}),enabled:()=>this.queryActivator.value.some(e=>e.name===`downloadLogQuery`&&e.enabled)})}clearLogQuery(){return P({mutationFn:Gh,onSuccess:async(e,t)=>{await this._queryClient.refetchQueries({queryKey:[`logs`,t.cameraname],exact:!0}),this.toast.add({severity:`success`,detail:this.t(`components.toast.log_cleared`),life:3e3})}})}toggleQueryActivator(e,t){let n=this.queryActivator.value.find(t=>t.name===e);return n&&(n.enabled=t),this}},yg=Gn(),bg=new Set(yg.map(e=>String(e))),xg=new Set(yg.filter(e=>[l.Sensor,l.Info].includes(Wn[e].category)).map(e=>String(e))),Sg=new Set(yg.filter(e=>Wn[e].category===l.Info).map(e=>String(e))),Cg=e(kr(),1),wg={class:`snapshot-hover-container flex items-center justify-center relative`},Tg=[`onMouseenter`,`onMouseleave`],Eg={class:`flex flex-col gap-1 min-w-[160px]`},Dg=[`onClick`],Og=[`onClick`],kg=[`onClick`],Ag=[`onClick`],jg={class:`sensor-tooltip`},Mg={class:`sensor-tooltip-name`},Ng={key:0,class:`sensor-tooltip-offline text-orange-500`},Pg={class:`shortcut-menu`},Fg=[`onClick`],Ig={key:0,class:`shortcut-menu-item-overlay`},Lg={key:0,class:`shortcut-menu-empty`},Rg={class:`shortcut-menu-sensors`},zg={class:`sensor-menu-icon`},Bg={key:1,class:`shortcut-menu-empty`},Vg=Dl(_n({__name:`CuiShortcuts`,props:{cameraName:{},visible:{type:Boolean},editing:{type:Boolean},interactionLocked:{type:Boolean}},setup(e){let t=new vg,r=new Aa,i=e,a=In(),o=or(),{cameraName:s,visible:c,editing:l,interactionLocked:u}=Sn(i),{camera:f}=et(s),{sensors:p}=Dt(f),h=Ue(),g=wt(),_=$l(void 0,`admin`),v=dn(At,void 0),b=eE(),{user:x}=rr(b);t.toggleQueryActivator(`getCamerasQuery`,!1);let{data:S,isBusy:C}=t.getCameraQuery(s),{data:T,isBusy:ee}=t.getCamerasQuery({page:1,pageSize:-1}),{data:E,isBusy:ne}=r.getShortcutsQuery(x.value?.username||``,s),{mutate:D,isPending:k}=r.patchShortcutQuery(),{mutate:ie,isPending:oe}=r.createShortcutQuery(),{mutate:ce,isPending:le}=r.removeShortcutQuery(),ue=new Map,de=Ut(`placeholderRef`),fe=Ut(`shortcutContainerRef`),me=Ut(`camerasMenuRef`),he=pn({}),ge=pn({}),_e=pn({}),ye=pn({}),be=B({}),xe=B(!1),Ce=B(),we=B(!1),De=B(!1),Oe=B([]),Ae=B({}),je=B(!1),Me=B(`cameras`),Ne=B({}),Pe=B(new Set),Fe=w(fe),Le=U(()=>v?.isActive.value??!1),Re=U(()=>Oe.value.filter(e=>e.type===`camera`)),Be=U(()=>Oe.value.filter(e=>e.type===`sensor`)),Ve=U(()=>p.value.filter(e=>ve(e)||lt(e)||y(e)||A(e)||Je(e)||Se(e)||Te(e)||ae(e)||dt(e)||e.type===O.Switch||_t(e)||m(e)||ot(e)||pe(e))),We=U(()=>{let e=p.value;return Be.value.map(t=>{let n=e.find(e=>e.id===t.sensorId);return{shortcut:t,sensor:n,isOnline:!!n}})}),Ge=U(()=>C.value||ne.value||k.value||ee.value||oe.value||le.value),Ke=U(()=>T.value?.result?T.value.result.filter(e=>e.name!==s.value):[]),Ye=U(()=>x.value?.username??``),Xe=U(()=>{if(Le.value)return Re.value.find(e=>Ae.value[e._id])});function Ze(e){let t=ue.get(e._id);return t||(t=rt(U(()=>e.cameraId),{managed:!0,sourceRole:`scrub`,cameraUi:h,nvrCtx:g}),ue.set(e._id,t),t)}function Qe(e){return Be.value.some(t=>t.sensorId===e.id)}function $e(e){return Re.value.some(t=>t.cameraId===e._id)}function tt(e){switch(e){case O.Contact:return`Contact Sensor`;case O.Light:return`Light`;case O.Switch:return`Switch`;case O.Siren:return`Siren`;case O.Lock:return`Lock`;case O.Temperature:return`Temperature`;case O.Humidity:return`Humidity`;case O.Occupancy:return`Occupancy`;case O.Smoke:return`Smoke Sensor`;case O.Leak:return`Leak Sensor`;case O.Garage:return`Garage`;case O.Doorbell:return`Doorbell`;case O.SecuritySystem:return`Security System`;case O.Battery:return`Battery`;default:return`Sensor`}}function it(e,t){switch(e){case`light`:return t?{color:`rgb(250, 204, 21)`,filter:`drop-shadow(0 0 8px rgba(250, 204, 21, 0.8))`}:{color:`var(--text-secondary-color)`};case`siren`:return t?{color:`rgb(239, 68, 68)`,filter:`drop-shadow(0 0 8px rgba(239, 68, 68, 0.8))`}:{color:`var(--text-secondary-color)`};case`switch`:return t?{color:`rgb(34, 197, 94)`,filter:`drop-shadow(0 0 8px rgba(34, 197, 94, 0.7))`}:{color:`var(--text-secondary-color)`};case`contact`:return t?{color:`rgb(251, 146, 60)`,filter:`drop-shadow(0 0 8px rgba(251, 146, 60, 0.6))`}:{color:`var(--text-secondary-color)`};case`lock`:return t?{color:`rgb(34, 197, 94)`,filter:`drop-shadow(0 0 8px rgba(34, 197, 94, 0.7))`}:{color:`var(--text-secondary-color)`};case`temperature`:return{color:`rgb(6, 182, 212)`};case`humidity`:return{color:`rgb(59, 130, 246)`};case`occupancy`:return t?{color:`rgb(34, 197, 94)`,filter:`drop-shadow(0 0 8px rgba(34, 197, 94, 0.7))`}:{color:`var(--text-secondary-color)`};case`smoke`:return t?{color:`rgb(239, 68, 68)`,filter:`drop-shadow(0 0 8px rgba(239, 68, 68, 0.8))`}:{color:`var(--text-secondary-color)`};case`leak`:return t?{color:`rgb(59, 130, 246)`,filter:`drop-shadow(0 0 8px rgba(59, 130, 246, 0.7))`}:{color:`var(--text-secondary-color)`};case`garage`:return t?{color:`rgb(34, 197, 94)`,filter:`drop-shadow(0 0 8px rgba(34, 197, 94, 0.7))`}:{color:`var(--text-secondary-color)`};case`doorbell`:return t?{color:`rgb(234, 179, 8)`,filter:`drop-shadow(0 0 8px rgba(234, 179, 8, 0.8))`}:{color:`var(--text-secondary-color)`};case`securitySystem`:return t?{color:`rgb(168, 85, 247)`,filter:`drop-shadow(0 0 8px rgba(168, 85, 247, 0.7))`}:{color:`var(--text-secondary-color)`};case`battery`:return t?{color:`rgb(239, 68, 68)`,filter:`drop-shadow(0 0 8px rgba(239, 68, 68, 0.8))`}:{color:`var(--text-secondary-color)`};default:return{color:`var(--text-secondary-color)`}}}function at(e){let t=String(e);return bg.has(t)?t:`contact`}function st(e){return e?ve(e)?e.getProperty(ke.Detected)??!1:Te(e)?e.getProperty(Ie.On)??!1:e.type===O.Switch?e.getProperty(Ee.On)??!1:_t(e)?e.getProperty(n.Active)??!1:ae(e)?(e.getProperty(bt.TargetState)??0)===0:A(e)?e.getProperty(qe.Detected)??!1:Je(e)?e.getProperty(se.Detected)??!1:Se(e)?e.getProperty(j.Detected)??!1:dt(e)?(e.getProperty(He.TargetState)??1)===0:m(e)?e.getProperty(nt.Ring)??!1:ot(e)?(e.getProperty(ze.TargetState)??St.Disarmed)!==St.Disarmed:pe(e)?e.getProperty(Tt.Low)??!1:!1:!1}async function ct(e){let t=p.value.find(t=>t.id===e.shortcut.sensorId);if(!t||!_)return;let r=st(t);try{Te(t)?await t.setProperty(Ie.On,!r):t.type===O.Switch?await t.setProperty(Ee.On,!r):_t(t)?await t.setProperty(n.Active,!r):ae(t)?await t.setProperty(bt.TargetState,+!!r):dt(t)?await t.setProperty(He.TargetState,+!!r):m(t)&&await t.setProperty(nt.Ring,!0)}catch(e){a.error(`Failed to toggle sensor:`,e)}}async function ut(e,t){let n=p.value.find(t=>t.id===e.shortcut.sensorId);if(!(!n||!_))try{await n.setProperty(ze.TargetState,t)}catch(e){a.error(`Failed to set security system state:`,e)}}function ft(e,t){return!e||!ot(e)?!1:e.getProperty(ze.TargetState)===t}function pt(e){return!e||!ot(e)?St.Disarmed:e.getProperty(ze.CurrentState)??e.getProperty(ze.TargetState)??St.Disarmed}function mt(e,t){e&&(_e.value[t]=e)}function ht(e){return Sg.has(e)}function gt(e){if(!e||!ot(e))return`--`;switch(e.getProperty(ze.TargetState)){case St.Disarmed:return`Disarmed`;case St.StayArm:return`Stay Arm`;case St.AwayArm:return`Away Arm`;case St.NightArm:return`Night Arm`;case St.AlarmTriggered:return`ALARM`;default:return`--`}}function vt(e){return!e||!pe(e)?`--`:`${e.getProperty(Tt.Level)??0}%${e.getProperty(Tt.Charging)===jt.Charging?` ⚡`:``}`}function yt(e){return!e||!pe(e)?!1:e.getProperty(Tt.Charging)===jt.Charging}function xt(e){return!e||!pe(e)?0:e.getProperty(Tt.Level)??0}function Ct(e){let t=xt(e);return t>=90?100:t>=70?80:t>=50?60:t>=30?40:t>=15?20:0}function Et(e){if(yt(e))return{color:`rgb(34, 197, 94)`,filter:`drop-shadow(0 0 6px rgba(34, 197, 94, 0.6))`};let t=xt(e);return t<15?{color:`rgb(239, 68, 68)`,filter:`drop-shadow(0 0 6px rgba(239, 68, 68, 0.7))`}:t<30?{color:`rgb(251, 146, 60)`}:t<50?{color:`rgb(234, 179, 8)`}:{color:`rgb(34, 197, 94)`}}function Ot(e){if(!xg.has(e.shortcut.sensorType)&&_){if(e.shortcut.sensorType===`securitySystem`){let t=_e.value[e.shortcut._id],n=he.value[e.shortcut._id];t&&n&&t.toggle({currentTarget:n});return}ct(e)}}function kt(e,n){xe.value||(t.toggleQueryActivator(`getCamerasQuery`,n),Ae.value[e]=!xe.value&&n,n&&Object.entries(Ae.value).forEach(([t,n])=>{t!==e&&n&&(Ae.value[t]=!1)}))}function Mt(e){xe.value||(Ne.value[e._id]=!0,Jt(e))}function Nt(e,t){if(Ne.value[t._id]){delete Ne.value[t._id];return}if(!e)if(!Ae.value[t._id])kt(t._id,!0);else{let e=Le.value&&v?Math.floor(v.currentTimestamp.value/1e3):void 0;kt(t._id,!1),Qt(t.cameraId,e)}}function Pt(e,t){xe.value||(Ae.value[e]=!xe.value&&t,t&&Object.entries(Ae.value).forEach(([t,n])=>{t!==e&&n&&(Ae.value[t]=!1)}))}function Ft(e){xe.value||(Ne.value[e._id]=!0,Rt(e))}function Lt(e){if(Ne.value[e.shortcut._id]){delete Ne.value[e.shortcut._id];return}xe.value||!xg.has(e.shortcut.sensorType)&&_&&Ot(e)}function Rt(e){Pe.value.add(e._id),ge.value[e._id]?.hide(),Ae.value[e._id]=!1,ye.value[e._id]?.destroy(),delete ye.value[e._id],delete be.value[e._id],delete he.value[e._id],ce({username:Ye.value,cameraname:s.value,shortcutid:e._id},{onSettled:()=>{Pe.value.delete(e._id)}})}function zt(){Object.entries(ye.value).forEach(([e,t])=>{let n=fe.value;if(!n)return;let r=n.getBoundingClientRect(),i=t.element.getBoundingClientRect(),a=(i.left-r.left)/r.width*100,o=(i.top-r.top)/r.height*100;be.value[e]={x:Math.max(0,Math.min(a,100)),y:Math.max(0,Math.min(o,100))}})}function Bt(){Object.entries(ye.value).forEach(([e,t])=>{let n=be.value[e];if(!n)return;let r=fe.value;if(!r)return;let i=r.getBoundingClientRect(),a=t.element.getBoundingClientRect(),o=i.width-a.width,s=i.height-a.height,c=Math.max(0,Math.min(n.x/100*i.width,o)),l=Math.max(0,Math.min(n.y/100*i.height,s));t.setPosition(c,l)}),De.value=!1}function Ht(){Object.entries(be.value).forEach(([e,t])=>{be.value[e]={x:Math.max(0,Math.min(t.x,100)),y:Math.max(0,Math.min(t.y,100))}}),Bt()}function Wt(){for(let[e,t]of Object.entries(ye.value))Oe.value.find(t=>t._id===e)||(t.destroy(),delete ye.value[e],delete be.value[e]);for(let[e]of Object.entries(be.value))Oe.value.find(t=>t._id===e)||delete be.value[e];for(let[e,t]of Object.entries(he.value)){let n=Oe.value.find(t=>t._id===e);if(t&&n&&fe.value){ye.value[n._id]&&ye.value[n._id].destroy();let r=new Cg.default(t,{containment:fe.value});u.value&&r.disable(),ye.value[n._id]=r;let[i,a]=n.points,o=fe.value.getBoundingClientRect(),c=i/100*o.width,l=a/100*o.height;r.setPosition(c,l),be.value[n._id]={x:i,y:a},r.on(`dragMove`,()=>{xe.value=!0,ge.value[e]?.alignOverlay()}),r.on(`dragEnd`,()=>{setTimeout(()=>{xe.value=!1},50),zt();let e=be.value[n._id];D({username:Ye.value,cameraname:s.value,shortcutid:n._id,shortcutData:{points:[e.x,e.y]}})})}}Bt()}function Gt(e){if(!l.value||!fe.value||u.value)return;we.value=!0;let t=fe.value.getBoundingClientRect();Ce.value={x:Math.max(0,Math.min(e.clientX-t.left-35/2,t.width-35)),y:Math.max(0,Math.min(e.clientY-t.top-35/2,t.height-35))}}async function Kt(e){if(!de.value||!fe.value)return;let t=fe.value,n=de.value,r=t.getBoundingClientRect(),i=n.getBoundingClientRect(),a=i.left-r.left,o=i.top-r.top,c=a/r.width*100,l=o/r.height*100;ie({username:Ye.value,cameraname:s.value,shortcutData:{_id:``,type:`camera`,points:[c,l],cameraId:e._id}},{onSettled:()=>{we.value=!1,Ce.value=void 0,me.value?.hide()}})}async function qt(e){if(!de.value||!fe.value)return;let t=fe.value,n=de.value,r=t.getBoundingClientRect(),i=n.getBoundingClientRect(),a=i.left-r.left,o=i.top-r.top,c=a/r.width*100,l=o/r.height*100;ie({username:Ye.value,cameraname:s.value,shortcutData:{_id:``,type:`sensor`,points:[c,l],sensorId:e.id,sensorType:at(e.type)}},{onSettled:()=>{we.value=!1,Ce.value=void 0,me.value?.hide()}})}function Jt(e){Pe.value.add(e._id),ge.value[e._id]?.hide(),Ae.value[e._id]=!1,ye.value[e._id]?.destroy(),delete ye.value[e._id],delete be.value[e._id],delete he.value[e._id],ce({username:Ye.value,cameraname:s.value,shortcutid:e._id},{onSettled:()=>{Pe.value.delete(e._id)}})}function Xt(e,t){he.value[t]=e}function Zt(e,t){ge.value[t]=e}async function Qt(e,t){if(xe.value)return;let n=(await Wh({cameraname:e,signal:new AbortController().signal})).name;n&&(t===void 0?o.push(`/cameras/${n}`):o.push({path:`/cameras/${n}`,query:{startTs:String(t)}}))}function N(e){!e&&!we.value&&(Ce.value=void 0),je.value=e,t.toggleQueryActivator(`getCamerasQuery`,e)}return q([E,S],()=>{E.value&&S.value&&(Oe.value=lE(E.value))},{immediate:!0,deep:!0}),q([Fe.width,Fe.height],()=>{De.value=!0,en(()=>{Ht()})}),q(Oe,()=>{en(()=>{Wt()})},{deep:!0,immediate:!0}),q(De,e=>{e&&(Ce.value=void 0)}),q([de,Ce],([e,t])=>{e&&t&&setTimeout(()=>{me.value?.show({currentTarget:e})},50)},{deep:!0}),q(Ae,()=>{Object.entries(Ae.value).forEach(([e,t])=>{if(t&&ge.value[e]){let t=he.value[e];t&&ge.value[e]?.show({currentTarget:t})}else ge.value[e]?.hide()})},{deep:!0}),q(c,e=>{e||(Object.values(ge.value).forEach(e=>e?.hide()),Object.keys(Ae.value).forEach(e=>{Ae.value[e]=!1}))}),q(l,e=>{e||(Ce.value=void 0,we.value=!1,me.value?.hide())}),q(u,e=>{Object.values(ye.value).forEach(t=>{e?t.disable():t.enable()}),e&&(Ce.value=void 0,we.value=!1)}),q(Xe,(e,t)=>{t&&ue.get(t._id)?.stop(),e&&v&&Le.value&&Ze(e).play(v.currentTimestamp.value,!0)}),q(()=>v?.mode.value,e=>{if(!Xe.value||!v)return;let t=ue.get(Xe.value._id);if(t)switch(e){case`idle`:t.stop();break;case`play`:t.play(v.currentTimestamp.value,!0);break;case`pause`:t.pause()}}),q(()=>v?.currentTimestamp.value,e=>{!Xe.value||!v||!e||v.mode.value===`scrub`&&ue.get(Xe.value._id)?.scrub(e,!0)}),q(()=>v?.speed.value,e=>{!Xe.value||!e||ue.get(Xe.value._id)?.setSpeed(e)}),bn(()=>{he.value={}}),yn(()=>{en(()=>{Wt()})}),Yt(()=>{Object.values(ye.value).forEach(e=>e.destroy())}),(e,t)=>{let n=Bh,r=te,i=re,a=$y,o=d,s=Lh,f=Ph,p=jh,m=Qn,h=Oh,g=Th,v=Sh,y=yh,b=gh,x=ph,S=uh,C=sh,w=ih,ee=th,E=Qm,ne=Ym,D=Km,k=Um,ie=Bm,ae=Lm,oe=Pm,se=jm,ce=Om,le=Tm,ue=Sm,pe=ym,he=gm,ge=pm,_e=um,ve=sm,ye=im,be=tm,Se=Qp,we=Yp,Te=Kp,Ee=Up,Oe=Bp,ke=cr,Ne=Lp,Fe=hr,Ie=Rl,ze=Ku,Be=ur,He=Pp,Ue=cc,qe=Tu,Je=mr,Ye=gr,Xe=lr;return M(),z(`div`,{ref_key:`shortcutContainerRef`,ref:fe,class:I([`shortcut-container min-w-0`,{"!pointer-events-auto":H(l)&&!H(u),hidden:!H(c)}]),style:X({cursor:H(l)&&!H(u)?`pointer`:`default`}),onClick:It(Gt,[`self`])},[(M(!0),z(V,null,Vt(H(Re),e=>on((M(),z(`div`,{ref_for:!0,ref:t=>Xt(t,e._id),key:e._id,onMousedown:t[0]||=It(()=>{},[`stop`]),onTouchstart:t[1]||=It(()=>{},[`stop`]),onWheel:t[2]||=It(()=>{},[`stop`]),class:`draggable absolute pointer-events-auto camera-shortcut`,style:X({background:H(Ae)[e._id]?`#545454`:void 0})},[K(r,{severity:`secondary`,rounded:``,class:`cui-icon-lg shadow-sm pointer-events-auto`},{icon:F(()=>[K(n,{width:`100%`,height:`100%`})]),_:1}),K(o,{ref_for:!0,ref:t=>Zt(t,e._id),class:`shadow-lg cui-rounded-corner overflow-hidden`,pt:{content:{class:`p-0`}}},{default:F(()=>[L(`div`,wg,[H(T)?.result.find(t=>t._id===e.cameraId)?(M(),G(a,{key:1,"source-role":H(Le)?void 0:`low-resolution`,"camera-info":H(T).result.find(t=>t._id===e.cameraId),"nvr-controller":H(Le)?Ze(e):void 0,toolbar:!1,control:!1,subcontrol:!1,"isolated-stream":!0,"live-indicator-overlay":``,class:`w-full`,"flat-card":``},null,8,[`source-role`,`camera-info`,`nvr-controller`])):(M(),G(i,{key:0,"stroke-width":`5`,class:`w-[30px] h-[30px]`}))])]),_:2},1536)],36)),[[sn,!H(Pe).has(e._id)],[H(ar),[t=>kt(e._id,t),{delayEnter:0,delayLeave:1e3}]],[H(ir),[()=>Mt(e),{distanceThreshold:24,delay:500,onMouseUp:(t,n,r)=>Nt(r,e)}]]])),128)),(M(!0),z(V,null,Vt(H(We),n=>on((M(),z(`div`,{ref_for:!0,ref:e=>Xt(e,n.shortcut._id),key:n.shortcut._id,onMouseenter:e=>Pt(n.shortcut._id,!0),onMouseleave:e=>Pt(n.shortcut._id,!1),onMousedown:t[3]||=It(()=>{},[`stop`]),onTouchstart:t[4]||=It(()=>{},[`stop`]),onWheel:t[5]||=It(()=>{},[`stop`]),class:I([`draggable absolute pointer-events-auto sensor-shortcut`,{"sensor-active":st(n.sensor),"sensor-offline":!n.isOnline,"sensor-readonly":H(xg).has(n.shortcut.sensorType)||!H(_)}]),style:X({background:H(Ae)[n.shortcut._id]?`#545454`:void 0})},[K(r,{severity:`secondary`,rounded:``,class:`cui-icon-lg shadow-sm pointer-events-auto`},{icon:F(()=>[n.shortcut.sensorType===`contact`&&st(n.sensor)?(M(),G(s,{key:0,width:`100%`,height:`100%`,style:X(it(n.shortcut.sensorType,!0))},null,8,[`style`])):n.shortcut.sensorType===`contact`?(M(),G(f,{key:1,width:`100%`,height:`100%`,style:X(it(n.shortcut.sensorType,!1))},null,8,[`style`])):n.shortcut.sensorType===`light`&&st(n.sensor)?(M(),G(p,{key:2,width:`100%`,height:`100%`,style:X(it(n.shortcut.sensorType,!0))},null,8,[`style`])):n.shortcut.sensorType===`light`?(M(),G(m,{key:3,width:`100%`,height:`100%`,style:X(it(n.shortcut.sensorType,!1))},null,8,[`style`])):n.shortcut.sensorType===`switch`?(M(),G(h,{key:4,width:`100%`,height:`100%`,style:X(it(n.shortcut.sensorType,st(n.sensor)))},null,8,[`style`])):n.shortcut.sensorType===`siren`?(M(),G(g,{key:5,width:`100%`,height:`100%`,style:X(it(n.shortcut.sensorType,st(n.sensor)))},null,8,[`style`])):n.shortcut.sensorType===`lock`&&st(n.sensor)?(M(),G(v,{key:6,width:`100%`,height:`100%`,style:X(it(n.shortcut.sensorType,!0))},null,8,[`style`])):n.shortcut.sensorType===`lock`?(M(),G(y,{key:7,width:`100%`,height:`100%`,style:X(it(n.shortcut.sensorType,!1))},null,8,[`style`])):n.shortcut.sensorType===`temperature`?(M(),G(b,{key:8,width:`100%`,height:`100%`,style:X(it(n.shortcut.sensorType,!1))},null,8,[`style`])):n.shortcut.sensorType===`humidity`?(M(),G(x,{key:9,width:`100%`,height:`100%`,style:X(it(n.shortcut.sensorType,!1))},null,8,[`style`])):n.shortcut.sensorType===`occupancy`&&st(n.sensor)?(M(),G(S,{key:10,width:`100%`,height:`100%`,style:X(it(n.shortcut.sensorType,!0))},null,8,[`style`])):n.shortcut.sensorType===`occupancy`?(M(),G(C,{key:11,width:`100%`,height:`100%`,style:X(it(n.shortcut.sensorType,!1))},null,8,[`style`])):n.shortcut.sensorType===`smoke`&&st(n.sensor)?(M(),G(w,{key:12,width:`100%`,height:`100%`,style:X(it(n.shortcut.sensorType,!0))},null,8,[`style`])):n.shortcut.sensorType===`smoke`?(M(),G(ee,{key:13,width:`100%`,height:`100%`,style:X(it(n.shortcut.sensorType,!1))},null,8,[`style`])):n.shortcut.sensorType===`leak`&&st(n.sensor)?(M(),G(E,{key:14,width:`100%`,height:`100%`,style:X(it(n.shortcut.sensorType,!0))},null,8,[`style`])):n.shortcut.sensorType===`leak`?(M(),G(ne,{key:15,width:`100%`,height:`100%`,style:X(it(n.shortcut.sensorType,!1))},null,8,[`style`])):n.shortcut.sensorType===`garage`&&st(n.sensor)?(M(),G(D,{key:16,width:`100%`,height:`100%`,style:X(it(n.shortcut.sensorType,!0))},null,8,[`style`])):n.shortcut.sensorType===`garage`?(M(),G(k,{key:17,width:`100%`,height:`100%`,style:X(it(n.shortcut.sensorType,!1))},null,8,[`style`])):n.shortcut.sensorType===`doorbell`?(M(),G(ie,{key:18,width:`100%`,height:`100%`,class:I({"doorbell-shake":st(n.sensor)}),style:X(it(n.shortcut.sensorType,st(n.sensor)))},null,8,[`class`,`style`])):n.shortcut.sensorType===`securitySystem`&&pt(n.sensor)===H(St).AlarmTriggered?(M(),G(ae,{key:19,width:`100%`,height:`100%`,style:{color:`rgb(239, 68, 68)`,filter:`drop-shadow(0 0 10px rgba(239, 68, 68, 0.9))`},class:`security-alarm-pulse`})):n.shortcut.sensorType===`securitySystem`&&pt(n.sensor)===H(St).StayArm?(M(),G(oe,{key:20,width:`100%`,height:`100%`,style:X(it(n.shortcut.sensorType,!0))},null,8,[`style`])):n.shortcut.sensorType===`securitySystem`&&pt(n.sensor)===H(St).AwayArm?(M(),G(se,{key:21,width:`100%`,height:`100%`,style:X(it(n.shortcut.sensorType,!0))},null,8,[`style`])):n.shortcut.sensorType===`securitySystem`&&pt(n.sensor)===H(St).NightArm?(M(),G(ce,{key:22,width:`100%`,height:`100%`,style:X(it(n.shortcut.sensorType,!0))},null,8,[`style`])):n.shortcut.sensorType===`securitySystem`?(M(),G(le,{key:23,width:`100%`,height:`100%`,style:X(it(n.shortcut.sensorType,!1))},null,8,[`style`])):n.shortcut.sensorType===`battery`?(M(),z(V,{key:24},[yt(n.sensor)&&Ct(n.sensor)===100?(M(),G(ue,{key:0,width:`100%`,height:`100%`,style:X(Et(n.sensor))},null,8,[`style`])):yt(n.sensor)&&Ct(n.sensor)===80?(M(),G(pe,{key:1,width:`100%`,height:`100%`,style:X(Et(n.sensor))},null,8,[`style`])):yt(n.sensor)&&Ct(n.sensor)===60?(M(),G(he,{key:2,width:`100%`,height:`100%`,style:X(Et(n.sensor))},null,8,[`style`])):yt(n.sensor)&&Ct(n.sensor)===40?(M(),G(ge,{key:3,width:`100%`,height:`100%`,style:X(Et(n.sensor))},null,8,[`style`])):yt(n.sensor)&&Ct(n.sensor)===20?(M(),G(_e,{key:4,width:`100%`,height:`100%`,style:X(Et(n.sensor))},null,8,[`style`])):yt(n.sensor)?(M(),G(ve,{key:5,width:`100%`,height:`100%`,style:X(Et(n.sensor))},null,8,[`style`])):Ct(n.sensor)===100?(M(),G(ye,{key:6,width:`100%`,height:`100%`,style:X(Et(n.sensor))},null,8,[`style`])):Ct(n.sensor)===80?(M(),G(be,{key:7,width:`100%`,height:`100%`,style:X(Et(n.sensor))},null,8,[`style`])):Ct(n.sensor)===60?(M(),G(Se,{key:8,width:`100%`,height:`100%`,style:X(Et(n.sensor))},null,8,[`style`])):Ct(n.sensor)===40?(M(),G(we,{key:9,width:`100%`,height:`100%`,style:X(Et(n.sensor))},null,8,[`style`])):Ct(n.sensor)===20?(M(),G(Te,{key:10,width:`100%`,height:`100%`,style:X(Et(n.sensor))},null,8,[`style`])):(M(),G(Ee,{key:11,width:`100%`,height:`100%`,style:X(Et(n.sensor))},null,8,[`style`]))],64)):J(``,!0)]),_:2},1024),n.shortcut.sensorType===`securitySystem`?(M(),G(o,{key:0,ref_for:!0,ref:e=>mt(e,n.shortcut._id),class:`shadow-lg cui-rounded-corner`,pt:{content:{class:`p-2`}},"append-to":`body`},{default:F(()=>[L(`div`,Eg,[L(`button`,{type:`button`,class:I([`security-state-button`,{"security-state-button--active":ft(n.sensor,H(St).Disarmed)}]),onClick:e=>ut(n,H(St).Disarmed)},[K(le,{class:`w-4 h-4`}),t[9]||=L(`span`,{class:`text-sm`},`Disarmed`,-1)],10,Dg),L(`button`,{type:`button`,class:I([`security-state-button`,{"security-state-button--active":ft(n.sensor,H(St).StayArm)}]),onClick:e=>ut(n,H(St).StayArm)},[K(oe,{class:`w-4 h-4`}),t[10]||=L(`span`,{class:`text-sm`},`Stay Arm`,-1)],10,Og),L(`button`,{type:`button`,class:I([`security-state-button`,{"security-state-button--active":ft(n.sensor,H(St).AwayArm)}]),onClick:e=>ut(n,H(St).AwayArm)},[K(se,{class:`w-4 h-4`}),t[11]||=L(`span`,{class:`text-sm`},`Away Arm`,-1)],10,kg),L(`button`,{type:`button`,class:I([`security-state-button`,{"security-state-button--active":ft(n.sensor,H(St).NightArm)}]),onClick:e=>ut(n,H(St).NightArm)},[K(ce,{class:`w-4 h-4`}),t[12]||=L(`span`,{class:`text-sm`},`Night Arm`,-1)],10,Ag)])]),_:2},1536)):J(``,!0),K(o,{ref_for:!0,ref:e=>Zt(e,n.shortcut._id),class:`shadow-lg cui-rounded-corner`,pt:{content:{class:`p-2`}}},{default:F(()=>[L(`div`,jg,[L(`div`,Mg,R(n.sensor?.displayName.value??e.$t(`components.camera_options.sensor_type_${n.shortcut.sensorType}`)),1),L(`div`,{class:I([`sensor-tooltip-status`,{"text-color":ht(n.shortcut.sensorType),"text-purple-500":n.shortcut.sensorType===`securitySystem`&&st(n.sensor)&&pt(n.sensor)!==H(St).AlarmTriggered,"text-red-500":n.shortcut.sensorType===`securitySystem`&&pt(n.sensor)===H(St).AlarmTriggered,"text-green-500":!ht(n.shortcut.sensorType)&&n.shortcut.sensorType!==`securitySystem`&&st(n.sensor),"text-gray-400":!ht(n.shortcut.sensorType)&&n.shortcut.sensorType!==`securitySystem`&&!st(n.sensor)}])},[n.shortcut.sensorType===`contact`?(M(),z(V,{key:0},[mn(R(st(n.sensor)?`Open`:`Closed`),1)],64)):n.shortcut.sensorType===`lock`?(M(),z(V,{key:1},[mn(R(st(n.sensor)?`Locked`:`Unlocked`),1)],64)):n.shortcut.sensorType===`temperature`?(M(),z(V,{key:2},[mn(R(n.sensor?.getProperty(`current`)??`--`)+`°C `,1)],64)):n.shortcut.sensorType===`humidity`?(M(),z(V,{key:3},[mn(R(n.sensor?.getProperty(`current`)??`--`)+`% `,1)],64)):n.shortcut.sensorType===`occupancy`?(M(),z(V,{key:4},[mn(R(st(n.sensor)?`Occupied`:`Empty`),1)],64)):n.shortcut.sensorType===`smoke`?(M(),z(V,{key:5},[mn(R(st(n.sensor)?`Smoke Detected`:`Clear`),1)],64)):n.shortcut.sensorType===`leak`?(M(),z(V,{key:6},[mn(R(st(n.sensor)?`Leak Detected`:`Clear`),1)],64)):n.shortcut.sensorType===`garage`?(M(),z(V,{key:7},[mn(R(st(n.sensor)?`Open`:`Closed`),1)],64)):n.shortcut.sensorType===`doorbell`?(M(),z(V,{key:8},[mn(R(st(n.sensor)?`Ringing`:`Ready`),1)],64)):n.shortcut.sensorType===`securitySystem`?(M(),z(V,{key:9},[mn(R(gt(n.sensor)),1)],64)):n.shortcut.sensorType===`battery`?(M(),z(V,{key:10},[mn(R(vt(n.sensor)),1)],64)):(M(),z(V,{key:11},[mn(R(st(n.sensor)?`On`:`Off`),1)],64))],2),n.isOnline?J(``,!0):(M(),z(`div`,Ng,`Offline`))])]),_:2},1536)],46,Tg)),[[sn,!H(Pe).has(n.shortcut._id)],[H(ir),[()=>Ft(n.shortcut),{distanceThreshold:24,delay:500,onMouseUp:()=>Lt(n)}]]])),128)),H(Ce)?(M(),z(`div`,{key:0,ref_key:`placeholderRef`,ref:de,class:`draggable absolute pointer-events-auto`,style:X(`left: ${H(Ce).x}px; top: ${H(Ce).y}px;`)},[K(r,{severity:`secondary`,rounded:``,class:`cui-icon-lg shadow-sm pointer-events-auto`},{icon:F(()=>[K(Oe,{width:`100%`,height:`100%`})]),_:1})],4)):J(``,!0),H(l)&&!H(xe)&&!H(De)?(M(),G(o,{key:1,ref_key:`camerasMenuRef`,ref:me,class:`shadow-lg cui-rounded-corner`,"auto-z-index":!0,"append-to":`body`,onShow:t[7]||=e=>je.value=!0,onHide:t[8]||=e=>N(!1)},{default:F(()=>[K(Xe,{value:H(Me),"onUpdate:value":t[6]||=e=>Dn(Me)?Me.value=e:null,class:`shortcut-menu-tabs`},{default:F(()=>[K(Fe,{pt:{content:{class:`border-b border-color`}}},{default:F(()=>[K(ke,{value:`cameras`,class:`flex items-center gap-2 px-3 py-2`},{default:F(()=>[K(n,{class:`w-4 h-4`}),t[13]||=L(`span`,{class:`text-sm`},`Cameras`,-1)]),_:1}),K(ke,{value:`sensors`,class:`flex items-center gap-2 px-3 py-2`},{default:F(()=>[K(Ne,{class:`w-4 h-4`}),t[14]||=L(`span`,{class:`text-sm`},`Sensors`,-1)]),_:1})]),_:1}),K(Ye,null,{default:F(()=>[K(Be,{value:`cameras`},{default:F(()=>[L(`div`,Pg,[(M(!0),z(V,null,Vt(H(Ke),e=>(M(),z(`div`,{key:e._id,class:I([`shortcut-menu-item`,{"shortcut-menu-item-disabled":$e(e)}]),onClick:It(t=>!$e(e)&&Kt(e),[`prevent`])},[K(Ie,{camera:e,width:`100%`,loading:H(Ge)},null,8,[`camera`,`loading`]),$e(e)?(M(),z(`div`,Ig,[K(ze,{class:`w-6 h-6 text-green-500`})])):J(``,!0)],10,Fg))),128)),H(Ke).length===0?(M(),z(`div`,Lg,`No other cameras available`)):J(``,!0)])]),_:1}),K(Be,{value:`sensors`},{default:F(()=>[L(`div`,Rg,[H(Ve).length>0?(M(!0),z(V,{key:0},Vt(H(Ve),(e,t)=>(M(),z(V,{key:e.id},[K(qe,{disabled:Qe(e),onClick:t=>!Qe(e)&&qt(e),"button-props":{pt:{root:{class:`p-0!`}}}},Y({prepend:F(()=>[L(`div`,zg,[e.type===H(O).Contact?(M(),G(f,{key:0,class:`w-5 h-5`})):e.type===H(O).Temperature?(M(),G(b,{key:1,class:`w-5 h-5`})):e.type===H(O).Humidity?(M(),G(x,{key:2,class:`w-5 h-5`})):e.type===H(O).Occupancy?(M(),G(S,{key:3,class:`w-5 h-5`})):e.type===H(O).Smoke?(M(),G(w,{key:4,class:`w-5 h-5`})):e.type===H(O).Leak?(M(),G(E,{key:5,class:`w-5 h-5`})):e.type===H(O).Light?(M(),G(He,{key:6,class:`w-5 h-5`})):e.type===H(O).Switch?(M(),G(h,{key:7,class:`w-5 h-5`})):e.type===H(O).Siren?(M(),G(g,{key:8,class:`w-5 h-5`})):e.type===H(O).Lock?(M(),G(v,{key:9,class:`w-5 h-5`})):e.type===H(O).Garage?(M(),G(k,{key:10,class:`w-5 h-5`})):e.type===H(O).Doorbell?(M(),G(ie,{key:11,class:`w-5 h-5`})):e.type===H(O).SecuritySystem?(M(),G(Ue,{key:12,class:`w-5 h-5`})):e.type===H(O).Battery?(M(),G(ye,{key:13,class:`w-5 h-5`})):J(``,!0)])]),subtitle:F(()=>[mn(R(tt(e.type)),1)]),default:F(()=>[mn(` `+R(e.displayName.value)+` `,1)]),_:2},[Qe(e)?{name:`append`,fn:F(()=>[K(ze,{class:`w-4 h-4 text-green-500`})]),key:`0`}:void 0]),1032,[`disabled`,`onClick`]),t<H(Ve).length-1?(M(),G(Je,{key:0,class:`!my-1`})):J(``,!0)],64))),128)):(M(),z(`div`,Bg,`No sensors available`))])]),_:1})]),_:1})]),_:1},8,[`value`])]),_:1},512)):J(``,!0)],6)}}}),[[`__scopeId`,`data-v-886fdde6`]]),Hg={viewBox:`0 0 512 512`,width:`1.2em`,height:`1.2em`};function Ug(e,t){return M(),z(`svg`,Hg,[...t[0]||=[L(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`48`,d:`m184 112l144 144l-144 144`},null,-1)]])}var Wg=W({name:`ion-chevron-forward-outline`,render:Ug}),Gg={viewBox:`0 0 512 512`,width:`1.2em`,height:`1.2em`};function Kg(e,t){return M(),z(`svg`,Gg,[...t[0]||=[L(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`48`,d:`M328 112L184 256l144 144`},null,-1)]])}var qg=W({name:`ion-chevron-back-outline`,render:Kg}),Jg={viewBox:`0 0 512 512`,width:`1.2em`,height:`1.2em`};function Yg(e,t){return M(),z(`svg`,Jg,[...t[0]||=[L(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`48`,d:`m112 184l144 144l144-144`},null,-1)]])}var Xg=W({name:`ion-chevron-down-outline`,render:Yg}),Zg={viewBox:`0 0 512 512`,width:`1.2em`,height:`1.2em`};function Qg(e,t){return M(),z(`svg`,Zg,[...t[0]||=[L(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`48`,d:`m112 328l144-144l144 144`},null,-1)]])}var $g=W({name:`ion-chevron-up-outline`,render:Qg}),e_={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function t_(e,t){return M(),z(`svg`,e_,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M18 12.998H6a1 1 0 0 1 0-2h12a1 1 0 0 1 0 2`},null,-1)]])}var n_=W({name:`ic-round-minus`,render:t_}),r_={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function i_(e,t){return M(),z(`svg`,r_,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M18 12.998h-5v5a1 1 0 0 1-2 0v-5H6a1 1 0 0 1 0-2h5v-5a1 1 0 0 1 2 0v5h5a1 1 0 0 1 0 2`},null,-1)]])}var a_=W({name:`ic-round-plus`,render:i_}),o_={size:`small`},s_={class:`relative w-full h-full`},c_={class:`absolute top-1`,style:{color:`#646464`}},l_={class:`absolute bottom-1`,style:{color:`#646464`}},u_={class:`absolute left-1`,style:{color:`#646464`}},d_={class:`absolute right-1`,style:{color:`#646464`}},f_=100,p_=.05,m_=.05,h_=.03,g_=_n({__name:`CuiPTZControl`,props:$t({cameraDevice:{},size:{}},o_),emits:[`panTiltChange`,`zoomChange`],setup(e,{expose:t,emit:n}){let r=e,i=n,{cameraDevice:a,size:o}=Sn(r),s=In(),{sensor:c}=Pe(a),l=Ut(`panTiltRef`),u=Ut(`zoomRef`),d=wn({x:0,y:0}),f=wn({x:0,y:0}),p=wn({x:0,y:0}),m=B(!1),h=B(!1),g=B(0),_=B(0),v=B(0),y=B(!1),b=B(0),x=B(0),S=B(0),C=B(0),w=B(0),T=B(0),ee=B(0),E=B(`none`),te=B(0),ne=B(0),D=B(0),O=B(null),re=B(Date.now()),k=U(()=>m.value||h.value),ie=U(()=>o.value===`small`?45:60),ae=U(()=>o.value===`small`?10:15),oe=U(()=>y.value),se=U(()=>c.value?.hasCapability(at.Pan)??!1),ce=U(()=>c.value?.hasCapability(at.Tilt)??!1),le=U(()=>c.value?.hasCapability(at.Zoom)??!1),ue=U(()=>c.value?.hasCapability(at.Presets)??!1),de=U(()=>c.value?.hasCapability(at.Home)??!1),fe=U(()=>se.value||ce.value);function pe(e){return Math.round(e*100)/100}function me(e){return pe(Math.max(0,Math.min(1,e)))}async function he(e){let t=Date.now();if(y.value&&t-b.value<f_)return;let n={panSpeed:pe(e.panSpeed),tiltSpeed:pe(e.tiltSpeed),zoomSpeed:pe(e.zoomSpeed)};y.value=!0,b.value=t;try{await c.value?.setProperty(gt.Velocity,n)}catch(e){s.error(`PTZ continuous move failed:`,e)}finally{y.value=!1}}async function ge(){let e=Date.now();y.value=!0,b.value=e;try{await c.value?.setProperty(gt.Velocity,{panSpeed:0,tiltSpeed:0,zoomSpeed:0})}catch(e){s.error(`PTZ stop failed:`,e)}finally{y.value=!1}}function _e(){let e=Date.now(),t=(e-re.value)/1e3;re.value=e;let n=!1;if(m.value&&(Math.abs(w.value)>=p_||Math.abs(T.value)>=p_)){let e=w.value*m_*t*5,r=T.value*m_*t*5;te.value=Math.max(-1,Math.min(1,te.value+e)),ne.value=Math.max(-1,Math.min(1,ne.value+r));let a=pe(te.value),o=pe(ne.value);(f.x!==a||f.y!==o)&&(f.x=a,f.y=o,i(`panTiltChange`,{x:f.x,y:f.y}),n=!0)}if(h.value&&Math.abs(ee.value)>=p_){let e=ee.value*h_*t*10;D.value=Math.max(0,Math.min(1,D.value+e));let r=pe(D.value);_.value!==r&&(_.value=r,i(`zoomChange`,r),n=!0)}if(n&&k.value&&Date.now()-b.value>=200){if(m.value&&(Math.abs(w.value)>=p_||Math.abs(T.value)>=p_)){let e=pe(w.value),t=pe(T.value);E.value===`pan`?he({panSpeed:e,tiltSpeed:0,zoomSpeed:0}):E.value===`tilt`?he({panSpeed:0,tiltSpeed:t,zoomSpeed:0}):he({panSpeed:e,tiltSpeed:t,zoomSpeed:0})}else if(h.value&&Math.abs(ee.value)>=p_){let e=me(Math.abs(ee.value));he({panSpeed:0,tiltSpeed:0,zoomSpeed:ee.value>0?e:-e})}}k.value&&(O.value=requestAnimationFrame(_e))}function ve(){O.value!==null&&cancelAnimationFrame(O.value),re.value=Date.now(),O.value=requestAnimationFrame(_e)}function ye(){O.value!==null&&(cancelAnimationFrame(O.value),O.value=null)}async function be(){await new Promise(e=>setTimeout(e,50)),!k.value&&(Math.abs(x.value)>=p_||Math.abs(S.value)>=p_||Math.abs(C.value)>=p_)&&(w.value=0,T.value=0,ee.value=0,E.value=`none`,x.value=0,S.value=0,C.value=0,await ge(),ye())}async function xe(e){if(!u.value||!h.value)return;let t=u.value.getBoundingClientRect(),n=t.top+t.height/2,r=ie.value,i=e-n;i=Math.max(-r,Math.min(r,i)),g.value=i;let a=-i/r;ee.value=a;let o=pe(a);if(Math.abs(o)>=p_&&Math.abs(o-C.value)>=p_){C.value=o;let e=o>0,t=me(Math.abs(o));await he({panSpeed:0,tiltSpeed:0,zoomSpeed:e?t:-t})}else h.value&&Math.abs(o)<p_&&Math.abs(C.value)>=p_&&(ee.value=0,C.value=0,await ge())}function Se(e){h.value=!0,re.value=Date.now(),D.value=_.value,ve(),e instanceof MouseEvent?xe(e.clientY):xe(e.touches[0].clientY)}async function Ce(e,t){if(!l.value||!m.value)return;let n=l.value.getBoundingClientRect(),r=n.width/2,i=n.height/2,a=e-n.left-r,o=t-n.top-i,s=Math.min(r,i)-ae.value,c=Math.sqrt(a*a+o*o);c>s&&(a=a/c*s,o=o/c*s),d.x=a,d.y=o;let u=a/s,f=-o/s,h=Math.abs(u),g=Math.abs(f);h>=p_||g>=p_?h>g?(E.value=`pan`,w.value=u,T.value=0):(E.value=`tilt`,w.value=0,T.value=f):(E.value=`none`,w.value=0,T.value=0),(h>p_||g>p_)&&(p.x=w.value,p.y=T.value);let _=Math.abs(w.value-x.value),v=Math.abs(T.value-S.value),y=_>=p_||v>=p_,b=Math.abs(w.value)>=p_||Math.abs(T.value)>=p_;if(b&&y){x.value=w.value,S.value=T.value;let e=pe(w.value),t=pe(T.value);E.value===`pan`?await he({panSpeed:e,tiltSpeed:0,zoomSpeed:0}):E.value===`tilt`&&await he({panSpeed:0,tiltSpeed:t,zoomSpeed:0})}else m.value&&!b&&(Math.abs(x.value)>=p_||Math.abs(S.value)>=p_)&&(w.value=0,T.value=0,E.value=`none`,x.value=0,S.value=0,await ge())}function we(e){m.value=!0,re.value=Date.now(),ve(),e instanceof MouseEvent?Ce(e.clientX,e.clientY):Ce(e.touches[0].clientX,e.touches[0].clientY)}function Te(e){m.value&&Ce(e.clientX,e.clientY),h.value&&xe(e.clientY)}function Ee(e){e.preventDefault(),m.value&&Ce(e.touches[0].clientX,e.touches[0].clientY),h.value&&xe(e.touches[0].clientY)}function De(){m.value&&(m.value=!1,d.x=0,d.y=0),h.value&&(v.value=_.value,h.value=!1,g.value=0),be()}async function Oe(e){try{await c.value?.setProperty(gt.TargetPreset,e)}catch(e){s.error(`PTZ go to preset failed:`,e)}}async function ke(){try{await c.value?.setProperty(gt.Position,{pan:0,tilt:0,zoom:0})}catch(e){s.error(`PTZ go home failed:`,e)}}return yn(()=>{window.addEventListener(`mousemove`,Te),window.addEventListener(`mouseup`,De),window.addEventListener(`touchmove`,Ee,{passive:!1}),window.addEventListener(`touchend`,De)}),Yt(()=>{window.removeEventListener(`mousemove`,Te),window.removeEventListener(`mouseup`,De),window.removeEventListener(`touchmove`,Ee),window.removeEventListener(`touchend`,De),ye(),ge()}),t({goToPreset:Oe,goToHome:ke,isLoading:oe,hasPan:se,hasTilt:ce,hasZoom:le,hasPresets:ue,hasHome:de,hasPanTilt:fe}),(e,t)=>{let n=a_,r=n_,i=$g,a=Xg,s=qg,c=Wg;return M(),z(`div`,s_,[H(le)?(M(),z(`div`,{key:0,ref_key:`zoomRef`,ref:u,class:I([`pointer-events-auto`,[`absolute left-4 bottom-4 bg-black/70 rounded-full flex flex-col items-center justify-center border border-white/10 shadow-md`,H(o)===`small`?`w-12 h-36`:`w-16 h-48`]]),onMousedown:Se,onTouchstart:It(Se,[`prevent`])},[L(`div`,{class:I([`absolute top-4 text-muted`,H(o)===`small`?`text-base`:`text-lg`])},[K(n)],2),L(`div`,{class:I([`absolute bottom-4 text-muted`,H(o)===`small`?`text-base`:`text-lg`])},[K(r)],2),L(`div`,{class:I([`bg-white rounded-full absolute cursor-grab active:cursor-grabbing shadow-lg`,H(o)===`small`?`w-8 h-8`:`w-10 h-10`]),style:X({transform:`translateY(${H(g)}px)`})},null,6)],34)):J(``,!0),H(fe)?(M(),z(`div`,{key:1,ref_key:`panTiltRef`,ref:l,class:I([`pointer-events-auto`,[`absolute right-4 bottom-4 bg-black/70 rounded-full flex items-center justify-center border border-white/10 shadow-md`,H(o)===`small`?`w-24 h-24`:`w-32 h-32`]]),onMousedown:we,onTouchstart:It(we,[`prevent`])},[L(`div`,c_,[K(i)]),L(`div`,l_,[K(a)]),L(`div`,u_,[K(s)]),L(`div`,d_,[K(c)]),L(`div`,{class:I([`bg-white rounded-full absolute cursor-grab active:cursor-grabbing shadow-lg transform -translate-x-1/2 -translate-y-1/2`,H(o)===`small`?`w-8 h-8`:`w-10 h-10`]),style:X({left:`calc(50% + ${H(d).x}px)`,top:`calc(50% + ${H(d).y}px)`})},null,6)],34)):J(``,!0)])}}}),__={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function v_(e,t){return M(),z(`svg`,__,[...t[0]||=[L(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`1.5`,d:`m14 7l-5 5l5 5`},null,-1)]])}var y_=W({name:`iconamoon-arrow-left2-light`,render:v_});async function b_(){return(await Q.get(`/cast/targets`)).data}async function x_(e){await Q.post(`/cast`,e)}var S_=In(),C_=B(!1),w_=null,T_=!1,E_=new Map,D_=null;function O_(){return w_??=(async()=>({plugin:null}))(),w_}async function k_(e){T_||(T_=!0,await e.addListener(`pipChanged`,e=>{M_(e.active),e.active&&D_&&E_.get(D_)?.activate(!0)}),await e.addListener(`pipWillEnter`,()=>{M_(!0),D_&&E_.get(D_)?.activate(!0)}),await e.addListener(`pipEnterFailed`,()=>{M_(!1)}))}function A_(e){E_.delete(e)&&j_()}async function j_(){try{let{plugin:e}=await O_();if(!e)return;await k_(e);let t=E_.size===1?[...E_.entries()][0]:null;D_=t?.[0]??null,await e.setAutoEnter(t?{enabled:!0,width:t[1].width,height:t[1].height}:{enabled:!1,width:16,height:9})}catch(e){S_.warn(`Pip.setAutoEnter failed`,e)}}function M_(e){C_.value=e,document.documentElement.classList.toggle(`cui-native-pip`,e)}var N_={class:`relative`},P_=_n({__name:`CuiActionButton`,props:{label:{},icon:{},iconClass:{},buttonProps:{},tooltipProps:{},actionText:{},actionDuration:{default:1500}},emits:[`action`],setup(e,{emit:t}){let n=e,r=t,{label:i,icon:a,iconClass:o,buttonProps:s,actionText:c,actionDuration:l,tooltipProps:u}=Sn(n),d=Ut(`buttonRef`),f=B(!1),p=be(d),{start:m}=Et(()=>{f.value=!1},l,{immediate:!1}),h=U(()=>({top:`${p.top.value}px`,left:`${p.left.value}px`,transform:`translate(-50%, -100%)`,marginTop:`-8px`}));function g(e){f.value=!1,r(`action`,e),f.value=!0,m()}return(e,t)=>{let n=te;return M(),z(`div`,{ref_key:`buttonRef`,ref:d,class:`relative`},[K(n,Mn(H(s),{label:H(i),onClick:g}),Y({_:2},[H(a)?{name:`icon`,fn:F(()=>[L(`div`,N_,[(M(),G(Fn(H(a)),{class:I(H(o))},null,8,[`class`]))])]),key:`0`}:void 0]),1040,[`label`]),(M(),G(Cn,{to:`body`},[K(En,{name:`fade`},{default:F(()=>[H(f)?(M(),G(n,Mn({key:0,as:`div`},H(u),{class:`fixed text-xs px-2 py-1 rounded whitespace-nowrap z-[99999] cursor-default pointer-events-none`,style:H(h),label:H(c)}),null,16,[`style`,`label`])):J(``,!0)]),_:1})]))],512)}}}),F_={viewBox:`0 0 16 16`,width:`1.2em`,height:`1.2em`};function I_(e,t){return M(),z(`svg`,F_,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M5 9a3 3 0 0 0 3 3h2a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2h1zm7-7a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2z`},null,-1)]])}var L_=W({name:`fluent-copy-16-filled`,render:I_});async function R_({shareData:e}){return(await Q.post(`/shares`,e)).data}async function z_({camera:e,signal:t}){return(await Q.get(`/shares`,{params:{camera:e},signal:t})).data}async function B_({token:e}){return(await Q.delete(`/shares/${e}`)).data}var V_=class{_queryClient=Tn();t=sa.global.t;toast=ua();get queryClient(){return this._queryClient}getSharesQuery(e){return da({queryKey:[`shares`,e],queryFn:({signal:t})=>z_({camera:H(e),signal:t})})}createShareQuery(){return P({mutationFn:R_,onSuccess:async()=>{await this._queryClient.refetchQueries({queryKey:[`shares`]}),this.toast.add({severity:`success`,detail:this.t(`shares.share_created`),life:3e3})}})}revokeShareQuery(){return P({mutationFn:B_,onSuccess:async()=>{await this._queryClient.refetchQueries({queryKey:[`shares`]}),this.toast.add({severity:`success`,detail:this.t(`shares.share_revoked`),life:3e3})}})}},H_={class:`flex flex-col gap-6`},U_={key:0,class:`flex flex-col gap-4`},W_={class:`flex flex-col field-gap`},G_={class:`cui-label`},K_={class:`flex flex-col field-gap`},q_={class:`cui-label`},J_={class:`flex flex-col field-gap`},Y_={class:`cui-label`},X_={class:`flex flex-col field-gap`},Z_={class:`cui-label`},Q_={key:1,class:`flex flex-col gap-4`},$_={class:`flex flex-col field-gap`},ev={class:`cui-label`},tv={class:`flex flex-col field-gap`},nv={class:`cui-label`},rv=_n({__name:`ShareForm`,props:{cameraId:{},cameraName:{},sources:{}},setup(e,{expose:t}){let n=new V_,r=e,{t:i}=E(),a=dn(`dialogRefProps`),{mutateAsync:o,isPending:s}=n.createShareQuery(),c=[{label:`1 `+i(`shares.hour`),value:1},{label:`24 `+i(`shares.hours`),value:24},{label:`7 `+i(`shares.days`),value:168},{label:`30 `+i(`shares.days`),value:720}],l=[{label:i(`shares.unlimited`),value:0},{label:`1`,value:1},{label:`5`,value:5},{label:`10`,value:10}],u=r.sources.map(e=>({label:e.name,value:e._id})),d=B(24),f=B(0),p=B(``),m=B(r.sources.find(e=>e.role===`high-resolution`)?._id??r.sources[0]?._id??``),h=B(null),g=U(()=>!!navigator.share),_=U(()=>!!(a.loading?.value||s.value));async function v(){if(h.value)try{await navigator.share({title:i(`shares.share_title`),text:`${h.value.link}\n\n${i(`shares.code`)}: ${h.value.code}`})}catch{}}async function y(){if(h.value)return;let e;try{e=await o({shareData:{cameraId:r.cameraId,sourceId:m.value,ttlHours:d.value,maxViewers:f.value,label:p.value||void 0}})}catch{return null}return h.value=e,a.confirmText.value=i(`shares.done`),null}return t({isLoading:_,onConfirm:y}),(e,t)=>{let n=_r,r=Ze,i=P_,a=fr,o=pr,s=Sr,_=te;return M(),z(`div`,H_,[H(h)?(M(),z(`div`,Q_,[L(`div`,$_,[L(`label`,ev,R(e.$t(`shares.link`)),1),K(o,null,{default:F(()=>[K(r,{"model-value":H(h).link,readonly:``,class:`w-full font-mono text-sm`},null,8,[`model-value`]),K(a,null,{default:F(()=>[K(i,{"action-text":e.$t(`components.form.tooltip.copied`),icon:H(L_),"button-props":{severity:`secondary`,text:!0},onAction:t[4]||=e=>H(pE)(H(h).link)},null,8,[`action-text`,`icon`])]),_:1})]),_:1})]),L(`div`,tv,[L(`label`,nv,R(e.$t(`shares.code`)),1),K(o,null,{default:F(()=>[K(r,{"model-value":H(h).code,readonly:``,class:`w-full font-mono text-lg tracking-widest text-center`},null,8,[`model-value`]),K(a,null,{default:F(()=>[K(i,{"action-text":e.$t(`components.form.tooltip.copied`),icon:H(L_),"button-props":{severity:`secondary`,text:!0},onAction:t[5]||=e=>H(pE)(H(h).code)},null,8,[`action-text`,`icon`])]),_:1})]),_:1}),K(s,{severity:`secondary`,variant:`simple`,size:`small`,class:`cui-input-hint`},{default:F(()=>[mn(R(e.$t(`shares.code_save_hint`)),1)]),_:1})]),H(g)?(M(),G(_,{key:0,label:e.$t(`shares.share`),class:`w-full cui-button-medium`,onClick:v},null,8,[`label`])):J(``,!0)])):(M(),z(`div`,U_,[L(`div`,W_,[L(`label`,G_,R(e.$t(`shares.source`)),1),K(n,{modelValue:H(m),"onUpdate:modelValue":t[0]||=e=>Dn(m)?m.value=e:null,options:H(u),"option-label":`label`,"option-value":`value`,class:`w-full`},null,8,[`modelValue`,`options`])]),L(`div`,K_,[L(`label`,q_,R(e.$t(`shares.ttl`)),1),K(n,{modelValue:H(d),"onUpdate:modelValue":t[1]||=e=>Dn(d)?d.value=e:null,options:c,"option-label":`label`,"option-value":`value`,class:`w-full`},null,8,[`modelValue`])]),L(`div`,J_,[L(`label`,Y_,R(e.$t(`shares.max_viewers`)),1),K(n,{modelValue:H(f),"onUpdate:modelValue":t[2]||=e=>Dn(f)?f.value=e:null,options:l,"option-label":`label`,"option-value":`value`,class:`w-full`},null,8,[`modelValue`])]),L(`div`,X_,[L(`label`,Z_,R(e.$t(`shares.label`)),1),K(r,{modelValue:H(p),"onUpdate:modelValue":t[3]||=e=>Dn(p)?p.value=e:null,placeholder:e.$t(`shares.label_placeholder`),class:`w-full`},null,8,[`modelValue`,`placeholder`])])]))])}}}),iv=Symbol(`GridSearchState`),av={backButton:!1,doubleClickZoom:!0,expandableCard:!1,flatCard:!1,resizable:!1,pipToggleButton:!1,cardClickAction:`redirect`,viewTransition:!1,cameraNameOverlay:!0,liveIndicatorOverlay:!1,detectionIndicatorOverlay:!1,boundingBoxOverlay:!0,showShortcuts:!1,toolbar:!0,toolbarDetectionButton:!0,toolbarPipToggleButton:!1,toolbarPipToggleActive:!1,toolbarSettingsButton:!0,toolbarShareButton:!0,toolbarShortcutsButton:!0,toolbarSnapshotButton:!0,toolbarTimelineButton:!0,toolbarZoneButton:!0,toolbarDescriptionButton:!1,control:!0,controlFastForwardButton:!0,controlFsButton:!0,controlMicrophoneButton:!0,controlPlayPauseButton:!0,controlPipButton:!0,controlRewindButton:!0,controlSpeakerButton:!0,subcontrol:!0,subcontrolActivityModeButton:!0,subcontrolPtzButton:!0,subcontrolQualityButton:!0,subcontrolStreamingModeButton:!0},ov=S(Symbol(`cui-camera-drawer`)),sv={position:`right`,showCloseIcon:!1,modal:!0,dismissable:!0,baseZIndex:1e3,blockScroll:!0,pt:{root:{class:`w-full sm:w-[400px]`}}};function cv(){let e=B(!1),t=U(()=>e.value);return ov.on(t=>{switch(t.type){case`close`:e.value=!1;break;case`open`:e.value=!0}}),{open:(t,n)=>{ov.emit({type:`open`,options:t,props:{...sv,...n}}),e.value=!0},close:()=>{ov.emit({type:`close`}),e.value=!1},isOpen:t,getEventBus:()=>ov}}var lv={viewBox:`0 0 16 16`,width:`1.2em`,height:`1.2em`};function uv(e,t){return M(),z(`svg`,lv,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M4.75 3.5c-.69 0-1.25.56-1.25 1.25v6.5c0 .69.56 1.25 1.25 1.25h6.5c.69 0 1.25-.56 1.25-1.25v-1.5a.75.75 0 0 1 1.5 0v1.5A2.75 2.75 0 0 1 11.25 14h-6.5A2.75 2.75 0 0 1 2 11.25v-6.5A2.75 2.75 0 0 1 4.75 2h1.5a.75.75 0 0 1 0 1.5zM8 2.75A.75.75 0 0 1 8.75 2h4.5a.75.75 0 0 1 .75.75v4.5a.75.75 0 0 1-1.5 0V4.561l-3.22 3.22A.75.75 0 1 1 8.22 6.72l3.22-3.22H8.75A.75.75 0 0 1 8 2.75`},null,-1)]])}var dv=W({name:`fluent-open16-filled`,render:uv}),fv={viewBox:`0 0 16 16`,width:`1.2em`,height:`1.2em`};function pv(e,t){return M(),z(`svg`,fv,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M9.78 12.78a.75.75 0 0 1-1.06 0L4.47 8.53a.75.75 0 0 1 0-1.06l4.25-4.25a.75.75 0 0 1 1.042.018a.75.75 0 0 1 .018 1.042L6.06 8l3.72 3.72a.75.75 0 0 1 0 1.06`},null,-1)]])}var mv=W({name:`octicon-chevron-left16`,render:pv}),hv=_n({render(){return An(`div`,{class:`flex items-center justify-center w-full h-full min-h-[100px]`},[An(re,{class:`w-[24px] h-[24px] m-0`,strokeWidth:`5`})])}});function gv(e,t){return xn({loader:e,loadingComponent:hv,delay:t?.delay??150})}var _v=Symbol(`DialogStepper`);function vv(e){let t=B(e),n=B(void 0),r={},i=(e,t)=>{r[e]||(r[e]=[]),r[e].push(t)},a=(e,t)=>{let n=r[e];if(n){let e=n.indexOf(t);e!==-1&&n.splice(e,1)}},o=(e,t)=>{let n=r[e];n&&n.forEach(e=>{e(t)})},s={currentTab:n,tabs:t,isMainTab:U(()=>!n.value),goToTab:e=>{let r=t.value.find(t=>t.id===e);r&&(n.value=e,o(`tabChange`,r))},goToMainTab:()=>{n.value=void 0,o(`tabChange`,void 0)},registerTab:e=>{t.value.some(t=>t.id===e.id)||t.value.push(e)},updateTabConfig:(e,n)=>{let r=t.value.findIndex(t=>t.id===e);r!==-1&&(t.value[r]={...t.value[r],...n},n.title&&o(`updateTabTitle`,{tabId:e,title:n.title}))},on:i,off:a,emit:o};return Zt(_v,s),s}var yv={class:`p-dialog-content non-draggable-region`},bv={key:0,class:`p-dialog-header-actions`},xv={class:`p-dialog-title truncate min-w-0 flex-1`},Sv={class:`p-dialog-header-actions ml-auto gap-2`},Cv={key:0,class:`text-wrap`},wv={key:0,class:`flex items-center justify-center shrink-0 w-full p-5 pb-safe-offset-5 mt-5 self-end`,style:{background:`var(--border-color)`}},Tv=_n({__name:`CuiDialog`,setup(e){let t=gv(()=>N(()=>import(`./CuiMarkdownContent-QxLR7_qs.js`),__vite__mapDeps([3,4,1,2,5,6]),import.meta.url)),n=or(),r=ua(),{t:i}=E(),{mdBreakpoint:a}=vl(),{width:o,height:s}=gl(),{isElectronApp:c}=zn(),l=dn(`dialogRef`),u=Ut(`dialogHeader`),d=Sn(l.value.data),{contentText:f,contentProps:p,loading:m,disabled:h,cancelButtonProps:g,confirmButtonProps:_,hideCancelButton:v,hideConfirmButton:y,dialogContentClass:b,dialogContentStyle:x,cancelText:S,confirmText:C,stayActive:T,src:ee,title:ne,fullscreen:D,tabs:O,goTo:re,draggable:k,blockDragOnSelectors:ie,rootId:ae,markdown:oe,headerActions:se,contentClickConfirms:ce}=d;Zt(`dialogRefProps`,d);let le=wn({});Zt(`dialogHeaderToggles`,le);let ue=l.value.options.templates,fe=w(document.getElementById(`app`)),pe=B(!1),me=B(null),ge=B(!1),_e=B(ne.value),ve=B(!1),ye,{style:be,x:xe,y:Se}=he(u,{disabled:!k?.value,containerElement(){return document.getElementById(`app`)},onStart(e,t){let n=t.target;if(n){if(n.closest(`button`))return!1;for(let e of ie?.value??[])if(n.closest(e))return!1}},onMove(){ve.value=!0}}),Ce=U(()=>{let e=document.getElementById(ae?.value||``);if(!e)return 1/0;let t=e.offsetWidth;return fe.width.value-t}),we=U(()=>{let e=document.getElementById(ae?.value||``);if(!e)return 1/0;let t=e.offsetHeight;return fe.height.value-t}),Te=U(()=>!!(pe.value||m?.value||vn(me.value?.isLoading))),Ee=U(()=>O.value!==void 0&&O.value.length>0),De=U(()=>S?.value?S.value:i(`components.form.button.close`)),Oe=U(()=>C?.value?C.value:i(`components.form.button.save`)),ke=U(()=>({...g?.value,label:De.value,loading:void 0,size:`small`,severity:g?.value&&`severity`in g.value?g.value.severity:`secondary`,class:void 0})),Ae=U(()=>({..._?.value,label:Oe.value,loading:void 0,size:`small`,severity:_?.value&&`severity`in _.value?_.value.severity:`success`,class:`ml-auto`,disabled:h.value}));function je(){ce?.value&&Pe()}function Me(e){let t=me.value?.resolveGoTo?.();l.value.close(),n.push(t??e)}async function Ne(){try{pe.value=!0;let e=await me.value?.onCancel?.();l.value.close({status:`cancel`,data:e})}catch(e){r.add({severity:`error`,detail:e,life:3e3})}finally{pe.value=!1}}async function Pe(){try{pe.value=!0;let e=await me.value?.onConfirm?.();if(e===null)return;T?.value?l.value.options.onConfirm?.(e):l.value.close({status:`confirm`,data:e})}catch(e){r.add({severity:`error`,detail:e,life:3e3})}finally{pe.value=!1}}function Fe(){let e=document.getElementById(ae?.value||``)?.closest(`.p-dialog-mask`);if(!e)return;let t=Array.from(document.querySelectorAll(`.p-dialog-mask`)),n=0;for(let e of t){let t=parseInt(e.style.zIndex,10)||0;t>n&&(n=t)}(parseInt(e.style.zIndex,10)||0)<n&&(e.style.zIndex=String(n+1))}return Ee.value&&(ye=vv(O.value??[]),q(ye.isMainTab,e=>{ge.value=!e},{immediate:!0}),ye.on(`updateTabTitle`,({tabId:e,title:t})=>{ye?.currentTab.value===e&&ne?.value&&(_e.value=t)}),ye.on(`tabChange`,e=>{_e.value=e?.title??ne.value})),q([be,o,s],()=>{if(!ve.value)return;let e=document.getElementById(ae?.value||``);if(e){let t=Math.max(0,Math.min(xe.value,Ce.value)),n=Math.max(0,Math.min(Se.value,we.value));e.style.left=`${t}px`,e.style.top=`${n}px`}}),yn(()=>{let e=document.getElementById(ae?.value||``)?.closest(`.p-dialog-mask`);e&&(e.addEventListener(`pointerdown`,Fe),Fe())}),Yt(()=>{let e=document.getElementById(ae?.value||``)?.closest(`.p-dialog-mask`);e&&e.removeEventListener(`pointerdown`,Fe)}),(e,n)=>{let r=mv,i=te,o=dv,s=Or,d=Ol,m=de;return M(),z(`div`,yv,[L(`div`,{ref_key:`dialogHeader`,ref:u,class:I([`p-dialog-header justify-start gap-1`,{"cursor-move":H(k),"pt-6!":H(c)&&(H(D)||H(a))}])},[K(En,{name:`slide-left`},{default:F(()=>[H(ge)?(M(),z(`div`,bv,[K(i,{severity:`secondary`,text:``,rounded:``,class:`p-dialog-back-button`,onClick:H(ye)?.goToMainTab},{icon:F(()=>[K(r,{width:`100%`,height:`100%`})]),_:1},8,[`onClick`])])):J(``,!0)]),_:1}),L(`span`,xv,R(H(_e)),1),L(`div`,Sv,[(M(!0),z(V,null,Vt(H(se)??[],(e,t)=>on((M(),G(i,{key:t,severity:`secondary`,text:``,rounded:``,loading:e.loading,class:I([`p-dialog-close-button`,{"!text-primary":e.toggle&&H(le)[t]}]),onClick:()=>{e.toggle&&(H(le)[t]=!H(le)[t]),e.onClick()}},{icon:F(()=>[(M(),G(Fn(e.icon),{width:`100%`,height:`100%`}))]),_:2},1032,[`loading`,`class`,`onClick`])),[[m,e.tooltip?{value:e.tooltip}:void 0,void 0,{bottom:!0}]])),128)),H(re)?on((M(),G(i,{key:0,severity:`secondary`,text:``,rounded:``,class:`p-dialog-close-button`,onClick:n[0]||=e=>Me(H(re))},{icon:F(()=>[K(o,{width:`100%`,height:`100%`})]),_:1})),[[m,{value:e.$t(`components.dialog.open`)},void 0,{bottom:!0}]]):J(``,!0),K(i,{severity:`secondary`,text:``,rounded:``,class:`p-dialog-close-button`,onClick:H(l).close},{icon:F(()=>[K(s,{width:`100%`,height:`100%`})]),_:1},8,[`onClick`])])],2),L(`div`,{class:I([`p-dialog-body flex justify-center w-full overflow-y-auto px-5 py-1 text-balance`,{"h-full":H(D),"cursor-pointer":H(ce)},H(b)]),style:X(H(x)),onClick:je},[H(f)&&!H(oe)?(M(),z(`span`,Cv,R(H(f)),1)):H(f)&&H(oe)?(M(),G(H(t),{key:1,content:H(f)},null,8,[`content`])):H(ee)?(M(),G(d,{key:2,src:H(ee),"image-container-class":`w-full h-full`},null,8,[`src`])):(M(),G(Fn(H(ue)?.content),Mn({key:3,ref_key:`componentRef`,ref:me,class:`w-full h-full relative`},H(p),Lt(H(l).options.events||{})),null,16))],6),n[2]||=L(`div`,{class:`mt-auto`},null,-1),!H(v)||!H(y)?(M(),z(`div`,wv,[H(v)?J(``,!0):(M(),G(i,Mn({key:0},H(ke),{class:`cui-button-medium`,onClick:Ne}),null,16)),n[1]||=L(`div`,{class:`ml-auto`},null,-1),H(y)?J(``,!0):(M(),G(i,Mn({key:1},H(Ae),{loading:H(Te),disabled:H(h),class:`cui-button-medium`,onClick:Pe}),null,16,[`loading`,`disabled`]))])):J(``,!0)])}}}),Ev={modal:!0,closable:!0,blockScroll:!0,draggable:!1,dismissableMask:!0,baseZIndex:1100,showHeader:!1},Dv={pt:{root:{class:`p-dialog-maximized pt-safe border-none`}}},Ov={pt:{root:{class:`shadow-xl shadow-black/30 overflow-hidden`}}},kv={mobile:{textDialog:{style:{maxWidth:`none`,maxHeight:`100vh`},...Dv},imageDialog:{style:{maxWidth:`none`,maxHeight:`100vh`},...Dv},componentDialog:{style:{maxWidth:`none`,maxHeight:`100vh`},...Dv},stepperDialog:{style:{maxWidth:`none`,maxHeight:`100vh`},...Dv}},desktop:{textDialog:{style:{maxWidth:`1000px`,maxHeight:`90vh`,width:`auto`},...Ov},imageDialog:{style:{maxWidth:`1000px`,maxHeight:`90vh`,width:`70vw`},...Ov},componentDialog:{style:{maxWidth:`1000px`,maxHeight:`90vh`,width:`70vw`},...Ov},stepperDialog:{style:{maxWidth:`1000px`,maxHeight:`90vh`,width:`70vw`},...Ov}}};function Av(){return{open:(e,t)=>{let n={content:e&&W(e),options:t||{},data:t&&t.data,close:e=>{sr.emit(`close`,{instance:n,params:e})}};return sr.emit(`open`,{instance:n}),n}}}function jv(){let e=Av(),{mdBreakpoint:t}=vl(),n=(e,t,n)=>{let r=wn({...e});n&&(t.pt.root.class=(t.pt.root.class?t.pt.root.class+` `:``)+`fixed mt-0`),pt(r.options.props,t)},r=(e,r,i,a)=>{let o={mobile:a?.mobile?{style:{...a.mobile},...Dv}:void 0,desktop:a?.desktop?{style:{...a.desktop},...Ov}:void 0};return q(t,t=>{if(t)switch(r){case`text`:n(e,o.mobile??kv.mobile.textDialog,i);break;case`image`:n(e,o.mobile??kv.mobile.imageDialog,i);break;case`component`:n(e,o.mobile??kv.mobile.componentDialog,i);break;case`stepper`:n(e,o.mobile??kv.mobile.stepperDialog,i)}else switch(r){case`text`:n(e,o.desktop??kv.desktop.textDialog,i);break;case`image`:n(e,o.desktop??kv.desktop.imageDialog,i);break;case`component`:n(e,o.desktop??kv.desktop.componentDialog,i);break;case`stepper`:n(e,o.desktop??kv.desktop.stepperDialog,i)}},{immediate:!0}),e};function i(){let e=document.activeElement;!(e instanceof HTMLElement)||e===document.body||e.closest(`button, a[href], input, select, textarea, [contenteditable="true"]`)||e.blur()}function a(t,n,a){let{component:o,data:s,onConfirm:c,onCancel:l,onSettled:u,events:d,...f}=n;i();let p={content:o?W(o):void 0};a?.pt||(a={...a,pt:{root:{}}});let m=H(s.draggable)??!1;m&&(a.draggable=!0);let h=H(s.dismissableMask);h!==void 0&&(a.dismissableMask=h);let g=H(s.modal);g!==void 0&&(a.modal=g);let _=s.rootId??cE(10);a.pt.root.id=_;let v=e.open(Tv,{data:Sn(wn({confirmText:s.confirmText??void 0,cancelText:s.cancelText??void 0,hideConfirmButton:s.hideConfirmButton??!1,hideCancelButton:s.hideCancelButton??!1,loading:s.loading??!1,disabled:s.disabled??!1,confirmButtonProps:s.confirmButtonProps??void 0,cancelButtonProps:s.cancelButtonProps??void 0,dialogContentClass:s.dialogContentClass??void 0,dialogContentStyle:s.dialogContentStyle??void 0,stayActive:s.stayActive??!1,fullscreen:s.fullscreen??!1,contentText:s.contentText??void 0,src:s.src??void 0,markdown:s.markdown??!1,contentProps:s.contentProps??void 0,tabs:s.tabs??void 0,rootId:_,...s})),props:a,templates:p,events:d,onConfirm:c,onCancel:l,onClose:e=>{if(e?.data?.status===`confirm`){let{status:t,...n}=e.data;c?.(n?.data??n)}else l?.();u?.(e?.data?.data??e?.data)}});return s.fullscreen?v:r(v,t,m,f?.dialogSize)}function o(e){let{data:t,...n}=e,r=structuredClone(Ev);return r.style={...Ev.style,width:`auto`,minWidth:`400px`},t.fullscreen&&(r.style={...r.style,maxWidth:`none`,maxHeight:`100vh`},r.pt={root:{class:`p-dialog-maximized pt-safe border-none`}}),a(`text`,{data:t,...n},r)}function s(e){let{data:t,...n}=e,r=structuredClone(Ev);return t.fullscreen&&(r.style={...r.style,maxWidth:`none`,maxHeight:`100vh`},r.pt={root:{class:`p-dialog-maximized pt-safe border-none`}}),a(`image`,{data:t,...n},r)}function c(e,t){let{data:n,...r}=t,i=structuredClone(Ev);return n.fullscreen&&(i.style={...i.style,maxWidth:`none`,maxHeight:`100vh`},i.pt={root:{class:`p-dialog-maximized pt-safe border-none`}}),a(`component`,{component:e,data:n,...r},i)}function l(e,t){let{data:n,...r}=t,i=structuredClone(Ev);return n.fullscreen&&(i.style={...i.style,maxWidth:`none`,maxHeight:`100vh`},i.pt={root:{class:`p-dialog-maximized pt-safe border-none`}}),a(`stepper`,{component:e,data:n,...r},i)}return{openTextDialog:o,openImageDialog:s,openComponentDialog:c,openStepperDialog:l}}var Mv=`/pwa/favicon-64.ico`,Nv=64,Pv=`#ea5455`,Fv=14,Iv=null,Lv=null,Rv=null,zv=!1,Bv=0;function Vv(){return Iv??=Array.from(document.querySelectorAll(`link[rel="icon"]`)).map(e=>({el:e,href:e.href,type:e.type})),Iv}function Hv(){return Lv??=new Promise((e,t)=>{let n=new Image;n.onload=()=>e(n),n.onerror=()=>t(Error(`failed to load ${Mv}`)),n.src=Mv}),Lv}function Uv(e){let t=document.createElement(`canvas`);t.width=Nv,t.height=Nv;let n=t.getContext(`2d`);return n?(n.drawImage(e,0,0,Nv,Nv),n.beginPath(),n.arc(49,49,Fv,0,Math.PI*2),n.fillStyle=Pv,n.fill(),t.toDataURL(`image/png`)):null}async function Wv(e){if(typeof document>`u`)return;let t=++Bv;if(e===zv)return;let n=Vv();if(n.length!==0){if(!e){zv=!1;for(let{el:e,href:t,type:r}of n)e.href=t,e.type=r;return}if(!Rv)try{Rv=Uv(await Hv())}catch{return}if(!(!Rv||t!==Bv)){zv=!0;for(let{el:e}of n)e.href=Rv,e.type=`image/png`}}}var Gv=100,Kv=wn({notifications:[],castTargets:[]}),qv=null,Jv=null;function Yv(){return Jv||(qv=Ft(!0),qv.run(()=>{let e=io(`/notifications`);Jv=e,e.on(`notification`,e=>{if(e.tag){let t=Kv.notifications.findIndex(t=>t.tag===e.tag);t!==-1&&Kv.notifications.splice(t,1)}Kv.notifications.unshift(e),Kv.notifications.length>Gv&&(Kv.notifications.length=Gv),Xv(e)}),e.on(`history`,e=>{Kv.notifications=e}),e.on(`castTargets`,e=>{Kv.castTargets=e}),e.onReady(()=>{$v(),Qv()}),q(()=>Kv.notifications.filter(e=>e.seenAt==null).length,e=>{Zv(e),Wv(e>0)},{immediate:!0})}),Jv)}function Xv(e){let{isElectronApp:t,electron:n}=zn();!t||!n||n.send(`show-notification`,{id:e.id,title:e.title,subtitle:e.subtitle,body:e.body,deepLink:e.deepLink,tag:e.tag,severity:e.severity})}async function Zv(e){let{isElectronApp:t,electron:n}=zn();t&&n&&n.send(`set-badge-count`,e)}async function Qv(){let e=eE().user?.role;if(e===`admin`||e===`master`)try{Kv.castTargets=await b_()}catch{}}async function $v(){if(Jv?.ready.value)try{Kv.notifications=await Jv.request(`get-notifications`)}catch{}}function ey(){function e(){Yv()}function t(){}function n(e){let t=Kv.notifications.findIndex(t=>t.id===e.id);t!==-1&&Kv.notifications.splice(t,1),e.tag&&Jv?.emit(`remove-notification`,e.tag)}function r(){Kv.notifications.splice(0,Kv.notifications.length),Jv?.emit(`clear-notifications`)}function i(){let e=Date.now();for(let t of Kv.notifications)t.seenAt??=e;Jv?.emit(`mark-all-seen`)}function a(e){let t=Kv.notifications.find(t=>t.id===e.id);t&&t.seenAt==null&&(t.seenAt=Date.now()),Jv?.emit(`mark-seen`,e.id)}function o(e){Kv.notifications.find(t=>t.id===e.id)||Kv.notifications.unshift(e)}return{isConnected:U(()=>Jv?.connected.value??!1),notifications:U(()=>Kv.notifications),notificationCount:U(()=>Kv.notifications.length),unreadCount:U(()=>Kv.notifications.filter(e=>e.seenAt==null).length),castTargets:U(()=>Kv.castTargets),connect:e,disconnect:t,fetchNotifications:$v,removeNotification:n,clearNotifications:r,markAllSeen:i,markSeen:a,addLocalNotification:o}}function ty(){qv?.stop(),qv=null,Jv=null,Kv.notifications=[],Kv.castTargets=[]}var ny={key:`disabled`,class:`absolute inset-0 bg-black/80 flex items-center justify-center z-8 pointer-events-none`},ry={class:`flex flex-col items-center justify-center text-center gap-2`},iy={key:0,class:`text-white/50 text-sm max-w-xs`},ay={key:1,class:`text-white/30 text-xs max-w-xs`},oy={key:`sleep`,class:`absolute inset-0 bg-black/80 flex items-center justify-center z-7 pointer-events-none`},sy={class:`flex flex-col items-center justify-center text-center`},cy={key:0,class:`text-white/80 text-sm max-w-xs mt-3`},ly={key:`loading`,class:`absolute inset-0 flex flex-col items-center justify-center z-6 pointer-events-none`},uy={key:0,class:`mt-3 text-white text-sm text-shadow`},dy={key:`info`,class:`absolute w-full flex justify-center z-6 mt-4 pointer-events-none`},fy={class:`camera-card-info-box`},py={id:`timeline-container`,key:`timeline`,class:`absolute inset-0 z-5`},my={key:0,class:`ai-description-overlay`},hy={class:`min-w-0`},gy={class:`text-sm font-semibold text-white`},_y={class:`text-xs text-white/85 mt-1`},vy=[`data-zoomable-content`],yy={class:`absolute inset-0 z-3 pointer-events-none`},by={key:0,class:`absolute inset-0 z-3 pointer-events-none overflow-hidden`},xy={class:`w-full h-full blur-xs`},Sy={class:`absolute inset-0 flex items-center justify-center bg-black/60`},Cy={class:`flex flex-col items-center justify-center text-center`},wy={key:4,class:`text-white/80 text-sm max-w-xs mt-3`},Ty=[`data-player-id`],Ey={class:`ml-auto flex items-center gap-2`},Dy={key:0,class:`text-sm font-semibold p-2 bg-black/60 rounded-xl text-white`},Oy={class:`relative flex items-center gap-1 px-3 pb-3 pt-8`},ky={class:`flex items-center gap-0.5`},Ay={class:`flex items-center gap-0.5`},jy={class:`flex flex-col min-w-[60px]`},My=[`onClick`],Ny={class:`flex flex-col`},Py=[`disabled`],Fy=[`disabled`],Iy=[`disabled`],Ly=[`disabled`],Ry=[`disabled`],zy=[`disabled`],By=[`disabled`],Vy=[`disabled`],Hy=[`disabled`],Uy=[`disabled`],Wy=[`disabled`],Gy={class:`flex items-center gap-2`},Ky={class:`text-base font-semibold`},qy=2e3,Jy=300,Yy=50,Xy=5,Zy=200,Qy=350,$y=Dl(_n({__name:`CuiCameraCard`,props:Rt($t({cameraInfo:{},backButton:{type:Boolean},doubleClickZoom:{type:Boolean},expandableCard:{type:Boolean},expanded:{type:Boolean},flatCard:{type:Boolean},resizable:{type:Boolean},cardProps:{},routerLink:{},cardClickAction:{},viewTransition:{type:Boolean},cardBackgroundColor:{},control:{type:Boolean},controlFastForwardButton:{type:Boolean},controlFsButton:{type:Boolean},controlMicrophoneButton:{type:Boolean},controlPipButton:{type:Boolean},controlPlayPauseButton:{type:Boolean},controlRewindButton:{type:Boolean},controlSpeakerButton:{type:Boolean},subcontrol:{type:Boolean},subcontrolActivityModeButton:{type:Boolean},subcontrolPtzButton:{type:Boolean},subcontrolQualityButton:{type:Boolean},subcontrolStreamingModeButton:{type:Boolean},cameraNameOverlay:{type:Boolean},liveIndicatorOverlay:{type:Boolean},modeOverlay:{type:Boolean},detectionIndicatorOverlay:{type:Boolean},boundingBoxOverlay:{type:Boolean},showShortcuts:{type:Boolean},toolbar:{type:Boolean},toolbarClass:{type:[Boolean,null,String,Object,Array]},toolbarDetectionButton:{type:Boolean},toolbarPipToggleButton:{type:Boolean},toolbarPipToggleActive:{type:Boolean},toolbarSettingsButton:{type:Boolean},toolbarShareButton:{type:Boolean},toolbarShortcutsButton:{type:Boolean},toolbarSnapshotButton:{type:Boolean},toolbarStyle:{type:[Boolean,null,String,Object,Array]},toolbarTimelineButton:{type:Boolean},toolbarZoneButton:{type:Boolean},toolbarDescriptionButton:{type:Boolean},eventDescription:{},pipSourceRole:{},pipToggleButton:{type:Boolean},isolatedStream:{type:Boolean},nvrController:{}},av),{activityMode:{default:`always-on`},activityModeModifiers:{},sourceRole:{},sourceRoleModifiers:{},streamingMode:{},streamingModeModifiers:{}}),emits:Rt([`streamFinishedLoading`,`expand`,`togglePip`,`muteChange`],[`update:activityMode`,`update:sourceRole`,`update:streamingMode`]),setup(e,{expose:t,emit:n}){an(e=>({v07984327:H(Wn)}));let r=new vg,i=e,a=n,o=tn(e,`activityMode`),s=tn(e,`sourceRole`),c=tn(e,`streamingMode`),l=In(),f=or(),p=cv(),m=jv(),h=ua(),_=ey(),{mdBreakpoint:v}=vl(),{isPipSupported:y,isAndroid:b}=yl(),{height:x}=gl(),{t:S}=E(),{pressed:C}=it(),{cameraInfo:T,backButton:ee,doubleClickZoom:ne,expandableCard:D,flatCard:O,resizable:k,cardProps:ie,routerLink:ae,cardClickAction:oe,viewTransition:se,cardBackgroundColor:ce,cameraNameOverlay:le,liveIndicatorOverlay:ue,detectionIndicatorOverlay:fe,boundingBoxOverlay:pe,control:me,controlFastForwardButton:he,controlFsButton:ge,controlMicrophoneButton:ve,controlPipButton:ye,controlPlayPauseButton:be,controlRewindButton:xe,controlSpeakerButton:Se,subcontrol:Ce,subcontrolActivityModeButton:Te,subcontrolPtzButton:Ee,subcontrolQualityButton:De,subcontrolStreamingModeButton:Oe,toolbar:ke,toolbarClass:je,toolbarDetectionButton:Me,toolbarPipToggleButton:Ne,toolbarPipToggleActive:Pe,toolbarSettingsButton:Fe,toolbarShareButton:Ie,toolbarShortcutsButton:Re,toolbarSnapshotButton:ze,toolbarStyle:Be,toolbarTimelineButton:Ve,toolbarZoneButton:He,toolbarDescriptionButton:Ue,eventDescription:Ke,showShortcuts:qe}=Sn(i);r.toggleQueryActivator(`getCameraQuery`,!1);let{data:Je,isBusy:Ye}=r.getCameraQuery(typeof T.value==`string`?T.value:``),Xe=cE(),Ze=[.25,.5,1,2,4,8],Qe=B(!1),$e=Ut(`streamMenuRef`),tt=Ut(`castMenuRef`),nt=Ut(`detectionCanvasRef`),rt=Ut(`ptzRef`),at=Ut(`playerContainerRef`),ot=B(!1),ct=Ut(`arBoxRef`),lt=Ut(`speedPopoverRef`),dt=Ut(`morePopoverRef`),ft=dn(st,void 0),mt=dn(At,void 0),ht=dn(iv,void 0),gt=g(at,{delayLeave:1e3}),_t=g(at,{delayLeave:0}),vt=w(at),yt=w(ct),bt=B(!1),xt=pn(),St=B(!1),A=B({x:0,y:0}),Ct={x:0,y:0},j=B(1),wt=B(1),Tt=B(!1),Dt=B(!1),Ot=B(!1),kt=B(!1),jt=B(0),Pt=B(1),Ft=B(!1),It=B(!1),Lt=B({x:0,y:0}),Rt=B({x:0,y:0}),Ht=B(!1),Wt=B(0),Gt=B(1),Jt=B({x:0,y:0}),Yt=B({x:0,y:0}),Zt=B(0),Qt=B({x:0,y:0}),N=B(!1),$t=B(!1),P=B(!1),nn=B(!1),rn=B(!1),cn=B(!1),ln=B(!1),un=B(!1),fn=B(!0),mn=B(!0),hn=B(!1),gn=B(!1),_n=B(!1),vn=B(!1),W=B(!1),bn=!1,xn=[],Cn=!1,wn=null,Tn=U(()=>typeof T.value==`string`?T.value:T.value.name),On=U(()=>typeof T.value==`string`?Je.value:T.value),Y=U(()=>{if(i.nvrController)return i.nvrController;if(!i.isolatedStream){if(ft){let e=On.value,t=e?ft.value.get(e._id):void 0;if(t)return t}return mt}}),kn=U(()=>Y.value?.mode.value??`idle`),An=U(()=>Y.value?.currentTimestamp.value??0),jn=U(()=>kn.value!==`idle`),Mn=U(()=>jn.value&&(Y.value?.licenseRequired.value??!1)),Nn=U(()=>jn.value&&!Mn.value&&(Y.value?.noData.value??!1)),Pn=U(()=>jn.value&&!Mn.value&&(Y.value?.playbackError.value??!1)),Fn=U(()=>jn.value&&(Y.value?.loading.value??!1)),zn=U(()=>jn.value?Y.value?.unsupported.value??!1:nr.value),Bn=U(()=>jn.value?Y.value?.playbackDegraded.value??null:tr.value?{from:tr.value,to:er.value}:null),Vn=U(()=>{let e=Bn.value;if(!e)return``;let t=e.to.startsWith(`high`)?S(`components.player.source_role_high`):e.to.startsWith(`mid`)?S(`components.player.source_role_mid`):S(`components.player.source_role_low`);return S(`components.player.codec_degraded`,{quality:t})}),Hn=U(()=>c.value??On.value?.interfaceSettings.streamingMode??`webrtc`),Un=U(()=>s.value??On.value?.interfaceSettings.streamingSource??`high-resolution`),Wn=U(()=>On.value?.interfaceSettings.aspectRatio.replace(`:`,`/`)??`16/9`),{camera:Gn,isLoading:Kn}=et(Tn),qn=u(),Z=Le({camera:Tn,mode:Hn,resolution:Un,activityMode:()=>o.value??`always-on`,activityConfig:{standbyTimeout:5e3,activityTimeout:5e3},autoStart:()=>kn.value===`idle`&&!On.value?.disabled,isolated:i.isolatedStream}),{status:Jn,isPlaying:Yn,hasAudio:Xn,hasBackchannel:Qn,activeMode:$n,activeResolution:er,degradedFrom:tr,unsupported:nr,isReconnecting:rr,inStandby:ir}=Z,{start:ar}=Et(()=>{un.value=!1},qy,{immediate:!1}),sr=U(()=>!jn.value&&(pe.value&&_n.value||fe.value)),cr=U(()=>sr.value?Gn.value:void 0),{sensor:lr}=Ae(cr),{sensor:ur}=Mt(cr),{sensor:dr}=Ge(cr),{sensor:fr}=We(cr),{sensors:pr}=ut(cr),mr=U(()=>({height:Z.isFullscreen.value||j.value>1?`auto`:`100%`,aspectRatio:Wn.value})),hr=U(()=>!Z.paused.value),gr=U(()=>Z.isPip.value),_r=U(()=>(Gn.value?.hasPtz.value??!1)&&$l(void 0,`admin`)),vr=U(()=>Gn.value?.hasMotionSensor.value??!1),yr=U(()=>Gn.value?.hasObjectSensor.value??!1),br=U(()=>Gn.value?.camera.value?.detectionZones??[]),xr=U(()=>Gn.value?.camera.value?.detectionLines??[]),Sr=U(()=>i.expanded??Ot.value),Cr=U(()=>_n.value?[]:[`__none__`]),wr=U(()=>!!ht?.active.value),Tr=U(()=>void 0),Er=U(()=>(gt.value||fn.value)&&me.value&&!$t.value),Dr=U(()=>On.value?.disabled===!0),Or=U(()=>On.value?.detectionSettings?.snooze===!0),kr=U(()=>Dr.value?!1:jn.value?Fn.value:nr.value?!1:Kn.value||Ye.value||!Yn.value||rr.value),Ar=U(()=>Dr.value?!1:jn.value?Fn.value:kr.value),jr=U(()=>jn.value?Y.value?.hasAudio.value??!1:Xn.value&&Jn.value!==`error`),Mr=U(()=>!!navigator.mediaDevices&&Qn.value),Nr=U(()=>!Mr.value||kr.value||jn.value),Pr=U(()=>jn.value?Fn.value||gn.value:Dr.value||nr.value?!1:!Yn.value||gn.value),Fr=U(()=>le.value&&Er.value&&!v.value&&ni.value&&!wr.value),Ir=U(()=>me.value&&(Er.value||vn.value||W.value)&&!ir.value&&!Dr.value&&vt.width.value>=150&&!wr.value),Lr=U(()=>kn.value===`play`||kn.value===`idle`&&hr.value),Rr=U(()=>P.value&&ni.value&&_r.value),zr=U(()=>fe.value&&un.value),Br=U(()=>{let e=Wn.value.split(`/`);return{w:parseFloat(e[0])||16,h:parseFloat(e[1])||9}}),Vr=U(()=>{let e=(k.value,vt.width.value||0);if(!e)return 0;let t=e*(Br.value.h/Br.value.w);return k.value?Math.min(t,x.value*.5):t}),Hr=U(()=>x.value*.6),Ur=U(()=>{if(!k.value)return Xy;let e=vt.width.value||0;if(!e)return Xy;let t=Math.min(e*(Br.value.h/Br.value.w),x.value*.5);return t?Math.max(1,Math.min(Xy,Hr.value/t)):Xy}),Wr=U(()=>{if(!k.value)return 0;let e=vt.width.value||0;if(!e)return 0;let t=Math.min(e*(Br.value.h/Br.value.w),x.value*.5)*j.value;return Math.min(t,Hr.value)}),Gr=U(()=>{if(Z.isFullscreen.value||!k.value)return{};let e=Wr.value;return e?{height:`${e}px`}:{}}),Kr=U(()=>({width:yt.width.value||0,height:yt.height.value||0})),qr=U(()=>{let e=j.value;if(e<=1)return null;let t=A.value,n=vt.width.value,r=vt.height.value;if(!n||!r)return null;let{width:i,height:a}=Kr.value;if(!i||!a)return null;let o=i*e,s=a*e,c=o>n,l=s>r,u=c?n/o*100:100,d=l?r/s*100:100,f=c?(1-n/o)/2*100-t.x/o*100:0,p=l?(1-r/s)/2*100-t.y/s*100:0;return{width:`${u}%`,height:`${d}%`,left:`${f}%`,top:`${p}%`}}),Jr=U(()=>{if(!k.value)return{aspectRatio:Wn.value};let e=j.value,t=A.value;return e<=1?{aspectRatio:Wn.value}:{aspectRatio:Wn.value,transform:`scale(${e}) translate(${t.x/e}px, ${t.y/e}px)`,transformOrigin:`center center`,willChange:`transform`}}),Yr=U(()=>{let e=[];return Ue.value&&e.push({key:`ai-descriptions`,label:S(`components.player.ai_descriptions`),toggle:!0,toggleState:Qe.value,onClick:()=>{Qe.value=!Qe.value}}),Me.value&&(vr.value||yr.value)&&e.push({key:`detections`,label:S(`components.player.detections`),toggle:!0,toggleState:_n.value,disabled:jn.value,onClick:()=>Gi()}),He.value&&e.push({key:`zones`,label:S(`components.player.zones`),toggle:!0,toggleState:cn.value,onClick:()=>Ki()}),e.push({key:`edit-shortcuts`,label:S(`components.player.edit_shortcuts`),toggle:!0,toggleState:$t.value,onClick:()=>{$t.value?na():(N.value=!0,$t.value=!0)}}),(nn.value||!Ve.value)&&e.push({key:`export`,label:S(`components.player.export`),toggle:!0,toggleState:ln.value,onClick:()=>{ln.value=!ln.value}}),e.push({key:`heatmap`,label:S(`components.player.heatmap`),toggle:!0,toggleState:rn.value,onClick:()=>{rn.value=!rn.value}}),e}),Xr=U(()=>Yr.value.some(e=>e.toggle&&e.toggleState)),Zr=_.castTargets,Qr=U(()=>Zr.value.map(e=>({key:e.deviceId,label:e.name,onClick:()=>$r(e.deviceId,e.name)})));async function $r(e,t){let n=On.value?._id;if(!n)return;let r=An.value,i=jn.value&&r>0?Math.round(r/1e3):void 0;try{await x_({deviceId:e,cameraId:n,startMs:i}),h.add({severity:`success`,detail:S(`components.player.cast_sent`,{name:t}),life:2500})}catch{h.add({severity:`error`,detail:S(`components.player.cast_failed`),life:3e3})}}let ei=U(()=>{let e={body:{class:`w-full h-full p-0 overflow-hidden justify-center`,style:{backgroundColor:ce.value}},root:{class:{}},content:{class:`flex flex-col justify-center`}};return O.value&&(e.root.class={...e.root.class,"!rounded-none !border-0":!0}),pt(e,ie.value?.pt)}),ti=U(()=>vt.width.value<Zy),ni=U(()=>vt.width.value>=Qy),ri=U(()=>oe.value===`redirect`&&ae.value!==void 0),ii=U(()=>oe.value===`expand`&&D.value),Q=U(()=>ri.value||ii.value),ai=U(()=>oe.value!==`redirect`&&ae.value!==void 0),oi=U(()=>qn.value??`body`),si=U(()=>{let e=ni.value;return{rewind:{inline:e,inMenu:!e},fastForward:{inline:e,inMenu:!e},speed:{inline:e,inMenu:!e},speaker:{inline:e,inMenu:!e},expand:{inline:e,inMenu:!e},microphone:{inline:e,inMenu:!e},pip:{inline:!1,inMenu:!0},quality:{inline:!1,inMenu:!0},streamingMode:{inline:!1,inMenu:!0},activityMode:{inline:!1,inMenu:!0},ptz:{inline:!1,inMenu:!0}}}),ci=U(()=>{let e=si.value;return e.rewind.inMenu&&xe.value||e.fastForward.inMenu&&he.value||e.speed.inMenu||e.speaker.inMenu&&Se.value||e.expand.inMenu&&D.value&&!ii.value||e.microphone.inMenu&&ve.value||e.pip.inMenu&&ye.value||e.quality.inMenu&&Ce.value&&De.value||e.streamingMode.inMenu&&Ce.value&&Oe.value||e.activityMode.inMenu&&Ce.value&&Te.value||e.ptz.inMenu&&Ce.value&&Ee.value&&_r.value}),li=U(()=>Un.value);function ui(){Ct={...A.value}}function di(){let e=A.value.x-Ct.x,t=A.value.y-Ct.y;Math.hypot(e,t)>5||(ri.value?f.push(ae.value):ii.value&&xi())}function fi(){Z.toggleFullscreen()}function pi(){let e=f.options.history.state.back;typeof e==`string`&&e.startsWith(`/camview`)?f.back():f.push(`/home`)}function mi(){return o.value===`always-on`?S(`components.player.activity_mode_always_on`):o.value===`standby`?S(`components.player.activity_mode_standby`):S(`components.player.activity_mode_activity`)}function hi(){return $n.value===`mse`?S(`components.player.streaming_mode_mse`):$n.value===`webrtc`||$n.value===`webrtc/tcp`?S(`components.player.streaming_mode_webrtc`):$n.value===`webcodecs`?S(`components.player.streaming_mode_webcodecs`):S(`components.player.streaming_mode_unknown`)}function gi(){return li.value===`high-resolution`?S(`components.player.source_role_high`):li.value===`mid-resolution`?S(`components.player.source_role_mid`):li.value===`low-resolution`?S(`components.player.source_role_low`):S(`components.player.source_role_unknown`)}function _i(e){if(!at.value||e<=1)return{x:0,y:0};let t=at.value.getBoundingClientRect(),{width:n,height:r}=Kr.value,i=n*e,a=r*e;return{x:Math.max(0,(i-t.width)/2),y:Math.max(0,(a-t.height)/2)}}function vi(e,t){let n=_i(t);return{x:Math.max(-n.x,Math.min(n.x,e.x)),y:Math.max(-n.y,Math.min(n.y,e.y))}}function yi(e,t){let n=_i(t);return{x:Math.max(-n.x,Math.min(n.x,e.x)),y:Math.max(-n.y,Math.min(n.y,e.y))}}function bi(e){if(!at.value||Tt.value)return;let t=Ur.value,n=Math.max(1,Math.min(e.zoom,t));n<1.02&&(n=1);let r={x:e.pan.x,y:e.pan.y},i=wt.value,a=Math.abs(e.zoom-n)>.001;if(n<=1){wt.value=1,(A.value.x!==0||A.value.y!==0||j.value!==1)&&(Tt.value=!0,A.value={x:0,y:0},j.value=1,requestAnimationFrame(()=>setTimeout(()=>Tt.value=!1,150)));return}if(n<i&&i>1){let e=(n-1)/(i-1);r.x=A.value.x*e,r.y=A.value.y*e}wt.value=n;let o=vi(r,n);a?(Tt.value=!0,j.value=n,A.value=o,requestAnimationFrame(()=>setTimeout(()=>Tt.value=!1,100))):A.value=o}function xi(){if(!D.value)return;let e=!Sr.value;i.expanded===void 0&&(Ot.value=e),a(`expand`,e)}function Si(e){k.value&&(kt.value=!0,jt.value=e.clientY,Pt.value=j.value,document.addEventListener(`mousemove`,Ti),document.addEventListener(`mouseup`,Di))}function Ci(e){k.value&&(kt.value=!0,jt.value=e.touches[0].clientY,Pt.value=j.value,document.addEventListener(`touchmove`,Ei,{passive:!1}),document.addEventListener(`touchend`,Oi))}function wi(e){let t=Vr.value;if(!t)return Pt.value;let n=e/t;return Math.max(1,Math.min(Ur.value,Pt.value+n))}function Ti(e){if(!kt.value)return;let t=wi(e.clientY-jt.value);j.value=t,wt.value=t}function Ei(e){if(!kt.value)return;e.preventDefault();let t=wi(e.touches[0].clientY-jt.value);j.value=t,wt.value=t}function Di(){kt.value=!1,document.removeEventListener(`mousemove`,Ti),document.removeEventListener(`mouseup`,Di)}function Oi(){kt.value=!1,document.removeEventListener(`touchmove`,Ei),document.removeEventListener(`touchend`,Oi)}function ki(e){let t=e[0].clientX-e[1].clientX,n=e[0].clientY-e[1].clientY;return Math.sqrt(t*t+n*n)}function Ai(e){return{x:(e[0].clientX+e[1].clientX)/2,y:(e[0].clientY+e[1].clientY)/2}}function ji(e){if(k.value){if(It.value=!1,e.touches.length===2){Ft.value=!1,Ht.value=!0,Wt.value=ki(e.touches),Gt.value=j.value,Jt.value={...A.value},Yt.value=Ai(e.touches);return}e.touches.length===1&&j.value>1&&(Ft.value=!0,Lt.value={x:e.touches[0].clientX,y:e.touches[0].clientY},Rt.value={...A.value})}}function Mi(e){if(k.value){if(Ht.value&&e.touches.length===2){e.preventDefault();let t=ki(e.touches)/Wt.value,n=Math.max(1,Math.min(Ur.value,Gt.value*t));if(n>j.value&&(Dt.value=!0),at.value){let t=at.value.getBoundingClientRect(),r=Ai(e.touches),i=t.left+t.width/2,a=t.top+t.height/2,o=r.x-i,s=r.y-a,c=n/Gt.value,l={x:Jt.value.x-o*(c-1),y:Jt.value.y-s*(c-1)};j.value=n,wt.value=n,A.value=yi(l,n)}else j.value=n,wt.value=n;return}if(Ft.value&&e.touches.length===1){let t=e.touches[0].clientX-Lt.value.x,n=e.touches[0].clientY-Lt.value.y;(Math.abs(t)>10||Math.abs(n)>10)&&(It.value=!0);let r={x:Rt.value.x+t,y:Rt.value.y+n};A.value=yi(r,j.value)}}}function Ni(e){if(e.touches.length===1&&Ht.value){Ht.value=!1,Dt.value=!1,j.value>1&&(Ft.value=!0,It.value=!1,Lt.value={x:e.touches[0].clientX,y:e.touches[0].clientY},Rt.value={...A.value});return}if(e.touches.length===0&&e.changedTouches.length===1&&!It.value&&!Ht.value){let t=e.changedTouches[0],n=Date.now(),r={x:t.clientX,y:t.clientY},i=n-Zt.value,a=Math.sqrt((r.x-Qt.value.x)**2+(r.y-Qt.value.y)**2);i<Jy&&a<Yy?(Ri({clientX:r.x,clientY:r.y,preventDefault:()=>{},stopPropagation:()=>{}}),Zt.value=0,Qt.value={x:0,y:0}):(Zt.value=n,Qt.value=r)}Ft.value=!1,It.value=!1,Ht.value=!1,Dt.value=!1}function Pi(e){!k.value||j.value<=1||(document.removeEventListener(`mousemove`,Fi),document.removeEventListener(`mouseup`,Ii),Ft.value=!0,Lt.value={x:e.clientX,y:e.clientY},Rt.value={...A.value},document.addEventListener(`mousemove`,Fi),document.addEventListener(`mouseup`,Ii))}function Fi(e){if(!Ft.value)return;let t=e.clientX-Lt.value.x,n=e.clientY-Lt.value.y,r={x:Rt.value.x+t,y:Rt.value.y+n};A.value=yi(r,j.value)}function Ii(){Ft.value=!1,document.removeEventListener(`mousemove`,Fi),document.removeEventListener(`mouseup`,Ii)}function Li(e){if(!k.value)return;e.preventDefault();let t=-e.deltaY*.002,n=Math.max(1,Math.min(Ur.value,j.value+t));if(n<1.02&&(n=1),n===j.value)return;let r=j.value;if(n<=1)j.value=1,A.value={x:0,y:0};else if(n<r&&r>1){let e=(n-1)/(r-1),t={x:A.value.x*e,y:A.value.y*e};j.value=n,A.value=yi(t,n)}else j.value=n;wt.value=j.value}function Ri(e){if(ne.value&&!(!k.value&&!_t.value||nn.value||Rr.value||ir.value||Dr.value)){if(e.preventDefault(),e.stopPropagation(),Tt.value=!0,j.value>1.01)j.value=1,A.value={x:0,y:0},wt.value=1;else{if(!at.value)return;k.value&&(Dt.value=!0);let t=at.value.getBoundingClientRect(),n=e.clientX-t.left,r=e.clientY-t.top,i=t.width/2,a=t.height/2,o=Ur.value,s=(i-n)*(o-1),c=(a-r)*(o-1);if(j.value=o,wt.value=o,k.value){let e=Math.max(0,(t.width*o-t.width)/2);A.value={x:Math.max(-e,Math.min(e,s)),y:Math.max(-0,Math.min(0,c))}}else{let e=_i(o);A.value={x:Math.max(-e.x,Math.min(e.x,s)),y:Math.max(-e.y,Math.min(e.y,c))}}}setTimeout(()=>{Tt.value=!1,Dt.value=!1},200)}}function zi(e){Z.reportActivity(!!e?.length)}function Bi(e){e?.length&&(un.value=!0,ar())}function Vi(){Dr.value||Z.resumeFromStandby()}async function Hi(){let e=Tn.value.replace(/ /g,`_`).toLowerCase();if(jn.value){let t=await Y.value?.captureSnapshot();if(!t)return;let n=Y.value?.currentTimestamp.value;await kl({blob:t,filename:`${e}_${(n?new Date(n/1e3):new Date).toISOString()}.png`,mimeType:`image/png`});return}let t=Z.captureScreenshot();t&&await kl({dataUrl:t,filename:`${e}_${new Date().toISOString()}.png`,mimeType:`image/png`})}function Ui(){nt.value?.clear()}function Wi(e,t){!Yn.value||jn.value||nt.value?.draw(e,t)}function Gi(e){_n.value=e??!_n.value}function Ki(e){cn.value=e??!cn.value}function qi(e){mn.value=e===void 0?!mn.value:e,a(`muteChange`,mn.value)}async function Ji(e,t=!1){if(Qn.value)if(hn.value=e===void 0?!hn.value:e,hn.value)try{xt.value=await navigator.mediaDevices.getUserMedia({audio:!0});let e=xt.value.getAudioTracks()[0];mn.value=!t,await Z.setMicrophone(e),Rn()}catch(e){l.warn(Tn.value,e),hn.value=!1}else xt.value?.getTracks().forEach(e=>e.stop()),xt.value=void 0,await Z.setMicrophone(null),Ln()}function Yi(e){o.value=e||(o.value===`always-on`?`standby`:o.value===`standby`?`activity`:`always-on`)}async function Xi(e){bn=!0;try{if(e){s.value=e,await Z.setResolution(e);return}let t=[];if(Gn.value?.lowResolutionSource.value&&t.push(`low-resolution`),Gn.value?.midResolutionSource.value&&t.push(`mid-resolution`),Gn.value?.highResolutionSource.value&&t.push(`high-resolution`),t.length===0)return;let n=li.value,r=t[(t.indexOf(n)+1)%t.length];s.value=r,await Z.setResolution(r)}finally{setTimeout(()=>bn=!1,2e3)}}async function Zi(e){let t=$n.value,n=e||(t===`mse`?`webrtc`:`mse`);await Z.setMode(n),c.value=n}async function Qi(){Z.togglePip()}function $i(){if(kn.value!==`idle`){kn.value===`play`?Y.value?.pause():kn.value===`pause`?Y.value?.resume():kn.value===`scrub`&&Y.value?.play(An.value);return}Z.paused.value?Z.play():Z.pause()}function ea(){fi()}function ta(e){N.value=e===void 0?!N.value:e,N.value||($t.value=!1)}function na(){$t.value&&=(N.value=!0,!1)}function ra(){P.value=!P.value}function ia(){nn.value=!nn.value,nn.value||(ln.value=!1)}function aa(){if(Y.value){if(kn.value===`idle`){let e=Date.now()*1e3;Y.value.play(e-3e7);return}Y.value.seek(Y.value.currentTimestamp.value-3e7)}}function oa(){!Y.value||kn.value===`idle`||Y.value.seek(Y.value.currentTimestamp.value+3e7)}function sa(e){gn.value=e}function ca(e){dt.value?.hide(),en(()=>lt.value?.toggle(e))}function la(){let e=Gn.value?.id;if(!e)return;let t=(Gn.value?.sources.value??[]).filter(e=>e.role!==`snapshot`).map(e=>({_id:e._id,name:e.name,role:e.role}));m.openComponentDialog(rv,{data:{title:S(`shares.create_share`),confirmText:S(`shares.create`),contentProps:{cameraId:e,cameraName:Tn.value,sources:t}},dialogSize:{desktop:{width:`450px`}}})}return q(at,e=>{Z.fullscreenElement.value=e??void 0},{immediate:!0}),q(C_,e=>{!ot.value||e||(ot.value=!1,Z.paused.value&&Z.play())}),Kt(()=>{}),q(mn,e=>Z.setMuted(e),{immediate:!0}),q([Y,()=>Z.containerElement.value],([e,t])=>{wn?.(),wn=e&&t?e.claimContainer(t):null},{immediate:!0,flush:`post`}),q([Y,mn],([e,t])=>{e&&(e.muted.value=t)},{immediate:!0}),q(jn,e=>{Cn||(e?Z.stop():Z.start())},{flush:`sync`}),q([s,er],([e,t])=>{bn||e&&t&&e!==t&&(s.value=t)}),q([()=>jn.value,An],([e])=>{if(!e)return;let t=Z.containerElement.value;if(!t)return;let n=t.querySelector(`canvas`);n&&n.width>0&&n.height>0&&(Z.nativeWidth.value!==n.width||Z.nativeHeight.value!==n.height)&&(Z.nativeWidth.value=n.width,Z.nativeHeight.value=n.height)},{flush:`post`}),q(rr,async e=>{e&&await Ji(!1,!1)}),q(Nr,async e=>{e&&hn.value&&await Ji(!1,!1)}),q(Yn,e=>{e||Ui(),a(`streamFinishedLoading`,e)}),q(o,e=>{e&&Z.setActivityMode(e)}),q(()=>lr.value?.properties.detections,e=>{if(Je.value?.detectionZones.length===0)return;let t=e??[];zi(t),Bi(t),Wi(`motion`,t)},{deep:!0}),q(()=>ur.value?.properties.detections,e=>{if(Je.value?.detectionZones.length===0)return;let t=e??[];zi(t),Bi(t),Wi(`object`,t)},{deep:!0}),q(()=>dr.value?.properties.detections,e=>{Wi(`face`,e??[])},{deep:!0}),q(()=>fr.value?.properties.detections,e=>{Wi(`license_plate`,e??[])},{deep:!0}),q(pr,e=>{xn.forEach(e=>e()),xn=e.map(e=>q(()=>e.properties.detections,e=>{Wi(`classifier`,e??[])},{deep:!0}))}),q(v,()=>{v.value&&(nn.value=!1)}),q(k,()=>{j.value=1,A.value={x:0,y:0},wt.value=1,Ft.value=!1,kt.value=!1,Tt.value=!1,Dt.value=!1,document.removeEventListener(`mousemove`,Fi),document.removeEventListener(`mouseup`,Ii),document.removeEventListener(`mousemove`,Ti),document.removeEventListener(`mouseup`,Di),document.removeEventListener(`touchmove`,Ei),document.removeEventListener(`touchend`,Oi)}),q(()=>[_t.value,nn.value,Rr.value,ir.value,Dr.value],([e,t,n,r,i])=>{Ft.value||kt.value||C.value||(k.value?t||n||r||i:!e||t||n||r||i)&&(j.value!==1||A.value.x!==0||A.value.y!==0)&&(Tt.value=!0,j.value=1,A.value={x:0,y:0},wt.value=1,setTimeout(()=>Tt.value=!1,200))}),q(j,(e,t)=>{Tt.value||(e<=1?A.value={x:0,y:0}:e<t&&(A.value=yi(A.value,e)))}),q(Jn,e=>{e===`connecting`||e===`reconnecting`?St.value=!0:e===`connected`&&(St.value=!1)}),q(()=>Z.error.value,e=>{e&&l.error(Tn.value,e)}),q(Dr,(e,t)=>{t&&!e?Z.stream.value?.restart():!t&&e&&Z.stop()}),we(window,`blur`,()=>{Ft.value&&(Ft.value=!1,document.removeEventListener(`mousemove`,Fi),document.removeEventListener(`mouseup`,Ii)),kt.value&&(kt.value=!1,document.removeEventListener(`mousemove`,Ti),document.removeEventListener(`mouseup`,Di),document.removeEventListener(`touchmove`,Ei),document.removeEventListener(`touchend`,Oi))}),_e(`Escape`,()=>na()),zt(()=>{bt.value=f.currentRoute.value.path.includes(Tn.value),typeof T.value==`string`&&r.toggleQueryActivator(`getCameraQuery`,!0)}),yn(()=>{setTimeout(()=>fn.value=!1,1500)}),Xt(()=>{Cn=!0,A_(Xe),wn?.(),wn=null,document.removeEventListener(`mousemove`,Ti),document.removeEventListener(`mouseup`,Di),document.removeEventListener(`touchmove`,Ei),document.removeEventListener(`touchend`,Oi),document.removeEventListener(`mousemove`,Fi),document.removeEventListener(`mouseup`,Ii),xt.value?.getTracks().forEach(e=>e.stop()),xt.value=void 0,xn.forEach(e=>e()),xn=[]}),t({activeResolution:er,showControl:Ir,micActive:hn,streamHasIntercom:Mr,micButtonDisabled:Nr,isFullscreen:Z.isFullscreen,togglePlay:$i,toggleSourceRole:Xi,togglePictureInPicture:Qi,toggleActivityMode:Yi,toggleStreamingMode:Zi,toggleFs:ea,toggleMute:qi,toggleMicrophone:Ji,toggleShortcuts:ta,togglePtz:ra,toggleFastForward:oa,toggleRewind:aa,toggleBbox:Gi,toggleZones:Ki,toggleTimeline:ia,timelineState:nn,timelineScroll:sa,captureScreenshot:Hi,trimMode:ln}),(e,t)=>{let n=y_,r=te,i=Xl,s=Wl,c=re,l=g_,u=hu,f=Vg,m=jp,h=cp,g=Xf,_=Hf,v=Rl,b=Vf,x=Rf,S=Ff,C=Mf,w=kf,T=Ef,E=Cf,ne=bf,O=_f,ie=mf,oe=df,ce=cf,le=af,fe=tf,me=Qd,_e=Yd,we=Kd,Ae=Ud,Me=Bd,Le=d,He=Ld,Ue=Pd,We=jd,Ge=Od,Je=Td,Ye=Sd,et=yd,it=gd,st=pd,ut=ud,ft=sd,pt=id,mt=Ms,gt=td,vt=Qu,yt=Yu,xt=Ku,St=Uu,Ct=Bu,wt=Lu,Et=Pu,Ot=Zn,kt=Xs,At=Nt,jt=ju,Mt=de;return M(),z(`div`,{style:X({viewTransitionName:H(se)?`camera-card-${H(Tn).replace(/[^a-zA-Z0-9-_]/g,`-`)}`:void 0,viewTransitionClass:H(bt)&&H(se)?`active-transition`:void 0})},[K(At,{class:`cui-card`,pt:H(ei)},{content:F(()=>[H(ee)?(M(),G(r,{key:0,class:`dark-mode absolute top-[10px] left-4 z-6 bg-black/20 hover:bg-black/40 active:bg-black/60`,rounded:``,text:``,severity:`contrast`,onClick:pi},{icon:F(()=>[K(n,{class:`w-6 h-6`})]),_:1})):J(``,!0),L(`div`,{id:`video-container`,ref_key:`playerContainerRef`,ref:at,class:I([`bg-black flex items-center justify-center relative min-w-0`,{"detection-detected":H(zr),"edit-mode":H($t),"native-pip":H(ot),"overflow-visible":H(Dt),"overflow-hidden":!H(Dt),"resizable-mode":H(k)}]),style:X([H(Gr),{"--cam-ar-w":H(Br).w,"--cam-ar-h":H(Br).h}]),onClick:Vi},[K(qt,{name:`fade`},{default:F(()=>[H(Dr)&&!H(jn)?(M(),z(`div`,ny,[L(`div`,ry,[K(i,{class:`text-white/60 w-[50px] h-[50px]`}),H(ni)?(M(),z(`p`,iy,R(e.$t(`views.camera.camera_disabled`)),1)):J(``,!0),H(ni)?(M(),z(`p`,ay,R(e.$t(`views.camera.camera_disabled_hint`)),1)):J(``,!0)])])):J(``,!0),H(ir)&&!H(On)?.disabled?(M(),z(`div`,oy,[L(`div`,sy,[K(s,{class:`text-white w-[50px] h-[50px]`}),H(ni)?(M(),z(`p`,cy,R(e.$t(`components.player.stream_paused`)),1)):J(``,!0)])])):J(``,!0),H(Ar)&&!H(ir)&&!H(Dr)?(M(),z(`div`,ly,[K(c,{class:I([`w-[30px] h-[30px] m-0`,H(jn)?`nvr-spinner`:``]),"stroke-width":`5`},null,8,[`class`]),H(rr)&&!H(jn)&&H(ni)?(M(),z(`span`,uy,R(e.$t(`components.player.reconnecting`))+`...`,1)):J(``,!0)])):J(``,!0),H(Tr)&&!H(ir)&&!H(Dr)?(M(),z(`div`,dy,[L(`span`,fy,R(H(Tr)),1)])):J(``,!0),on(L(`div`,py,null,512),[[sn,H(nn)&&!H(Rr)&&!H(ir)&&!H(wr)&&!H(Z).isFullscreen.value]]),H(Rr)&&!H(nn)&&!H(ir)&&!H(wr)&&H(Gn)?(M(),z(`div`,{key:`ptz`,class:`absolute top-0 left-0 right-0 z-7`,style:X({bottom:H(Ir)?`48px`:`0px`,transition:`bottom 0.2s ease`})},[K(l,{ref_key:`ptzRef`,ref:rt,"camera-device":H(Gn)},null,8,[`camera-device`])],4)):J(``,!0)]),_:1}),K(En,{"enter-active-class":`transition-all duration-300 ease-out`,"enter-from-class":`opacity-0 -translate-y-2`,"enter-to-class":`opacity-100 translate-y-0`,"leave-active-class":`transition-all duration-200 ease-in`,"leave-from-class":`opacity-100 translate-y-0`,"leave-to-class":`opacity-0 -translate-y-2`},{default:F(()=>[H(Qe)&&H(Ke)?(M(),z(`div`,my,[K(u,{class:`w-4 h-4 text-white/90 shrink-0 mt-0.5`}),L(`div`,hy,[L(`p`,gy,R(H(Ke).title),1),L(`p`,_y,R(H(Ke).description),1)])])):J(``,!0)]),_:1}),K(H(Bt),{ref_key:`arBoxRef`,ref:ct,pan:H(A),"onUpdate:pan":t[1]||=e=>Dn(A)?A.value=e:null,zoom:H(j),"onUpdate:zoom":t[2]||=e=>Dn(j)?j.value=e:null,"data-native-pip-keep":``,disabled:H(k)||H(D)&&!H(Sr)||!H(_t)||H(nn)||H(Rr)||H(ir)||H(wr)||H(Dr),"pan-enabled":H(j)>1,"enable-control-button":!1,"dbl-click-enabled":!1,"min-zoom":1,"max-zoom":H(Ur),selector:H(k)?`disabled`:`[data-zoomable-content='${H(Xe)}']`,"zoom-origin":`pointer`,class:I([`ar-box flex items-center justify-center`,{"zoom-constraining":H(Tt),"touch-none":H(k)}]),style:X(H(mr)),onPanned:bi,onZoom:bi,onDblclick:Ri,onTouchstart:ji,onTouchmove:Mi,onTouchend:Ni,onMousedown:Pi,onWheel:Li},{default:F(()=>[L(`div`,{"data-zoomable-content":H(Xe),class:`relative h-full min-w-0`,style:X(H(Jr))},[L(`div`,yy,[!H(ir)&&!H(Dr)&&H(qe)?(M(),G(f,{key:0,"camera-name":H(Tn),visible:H(N),editing:H($t),"interaction-locked":H(j)>1},null,8,[`camera-name`,`visible`,`editing`,`interaction-locked`])):J(``,!0),H(pe)&&!H(ir)&&!H(jn)&&!H(Dr)?(M(),G(m,{key:1,ref_key:`detectionCanvasRef`,ref:nt,classes:H(Cr)},null,8,[`classes`])):J(``,!0),H(cn)&&!H(ir)&&!H(Dr)?(M(),G(h,{key:2,"camera-zones":H(br),"camera-lines":H(xr)},null,8,[`camera-zones`,`camera-lines`])):J(``,!0),H(ht)?.active.value&&!H(Dr)?(M(),G(g,{key:3,"model-value":H(ht).regions.value,"onUpdate:modelValue":t[0]||=e=>{H(ht)&&(H(ht).regions.value=e)}},null,8,[`model-value`])):J(``,!0),H(rn)&&H(On)&&!H(Dr)?(M(),G(_,{key:4,"camera-id":H(On)._id},null,8,[`camera-id`])):J(``,!0)]),H(Nn)||H(Mn)||H(zn)||H(Pn)?(M(),z(`div`,by,[L(`div`,xy,[H(On)?(M(),G(v,{key:0,camera:H(On),"show-loading-screen":!1,"image-style":{objectFit:`fill`}},null,8,[`camera`])):J(``,!0)]),L(`div`,Sy,[L(`div`,Cy,[H(Mn)?(M(),G(b,{key:0,class:`text-white w-[50px] h-[50px]`})):H(zn)?(M(),G(x,{key:1,class:`text-white w-[50px] h-[50px]`})):H(Pn)?(M(),G(S,{key:2,class:`text-white w-[50px] h-[50px]`})):(M(),G(C,{key:3,class:`text-white w-[50px] h-[50px]`})),H(ni)?(M(),z(`p`,wy,R(H(Mn)?e.$t(`components.player.license_required`):H(zn)?H(jn)?e.$t(`components.player.codec_unsupported_recording`):e.$t(`components.player.codec_unsupported`):H(Pn)?e.$t(`components.player.playback_failed`):e.$t(`components.player.no_recording`)),1)):J(``,!0)])])])):J(``,!0),H(On)?(M(),G(v,{key:`snapshot`,ref:`snapshotRef`,camera:H(On),"show-loading-screen":!1,class:I([`absolute inset-0 cursor-[inherit] z-0`,{"cursor-pointer":H(Q),"pointer-events-none":!H(Q)}]),"image-style":{objectFit:`fill`},onPointerdown:ui,onClick:di},null,8,[`camera`,`class`])):J(``,!0),L(`div`,{ref:e=>{e&&(H(Z).containerElement.value=e)},"data-player-id":H(Xe),class:I([`w-full h-full cursor-[inherit] relative z-1`,{"cursor-pointer":H(Q)}]),onPointerdown:ui,onClick:di},null,42,Ty)],12,vy)]),_:1},8,[`pan`,`zoom`,`disabled`,`pan-enabled`,`max-zoom`,`selector`,`style`,`class`]),!H(ir)&&(H(Fr)||H(ue)||H(Vn))?(M(),z(`div`,{key:0,class:I([`absolute top-0 w-full p-4 flex items-center gap-2 pointer-events-none`,H(Dr)?`z-9`:`z-6`])},[H(ue)?(M(),z(`div`,{key:0,class:I([`w-[10px] h-[10px] rounded-full shadow-md`,H(Dr)?`bg-gray-500`:H(jn)?`bg-sky-500`:H(Yn)?`bg-red-500`:`bg-gray-500`])},null,2)):J(``,!0),L(`div`,Ey,[H(Fr)?(M(),z(`span`,Dy,R(H(Tn)),1)):J(``,!0),H(Vn)?on((M(),G(w,{key:1,class:`w-5 h-5 text-red-500/70 drop-shadow-md pointer-events-auto`},null,512)),[[Mt,{value:H(Vn)},void 0,{bottom:!0}]]):J(``,!0)])],2)):J(``,!0),K(En,{name:`fade-2`},{default:F(()=>[H(Ir)&&!H(nn)?(M(),z(`div`,{key:0,class:I([`absolute bottom-0 inset-x-0 z-6 dark-mode`,{"control-bar-tiny":H(ti)}])},[t[29]||=L(`div`,{class:`control-bar-gradient pointer-events-none`},null,-1),L(`div`,Oy,[L(`div`,ky,[H(xe)&&H(si).rewind.inline?(M(),G(r,{key:0,disabled:!H(Y),fluid:``,text:``,severity:`contrast`,class:`control-bar-btn`,onClick:aa},{icon:F(()=>[K(T,{class:`w-[18px] h-[18px]`})]),_:1},8,[`disabled`])):J(``,!0),H(be)?(M(),G(r,{key:1,disabled:H(kr),fluid:``,text:``,severity:`contrast`,class:`control-bar-btn`,onClick:$i},{icon:F(()=>[H(Lr)?(M(),G(ne,{key:1,class:`w-[18px] h-[18px]`})):(M(),G(E,{key:0,class:`w-[18px] h-[18px]`}))]),_:1},8,[`disabled`])):J(``,!0),H(he)&&H(si).fastForward.inline?(M(),G(r,{key:2,disabled:H(kn)===`idle`,fluid:``,text:``,severity:`contrast`,class:`control-bar-btn`,onClick:oa},{icon:F(()=>[K(O,{class:`w-[18px] h-[18px]`})]),_:1},8,[`disabled`])):J(``,!0),H(si).speed.inline?(M(),G(r,{key:3,disabled:H(kn)===`idle`,fluid:``,text:``,severity:`contrast`,class:`control-bar-btn`,style:{"font-size":`12px`,"font-weight":`600`},onClick:t[3]||=e=>H(lt)?.toggle(e)},{icon:F(()=>[L(`span`,null,R(H(Y)?.speed.value??1)+`×`,1)]),_:1},8,[`disabled`])):J(``,!0)]),t[28]||=L(`div`,{class:`flex-1`},null,-1),L(`div`,Ay,[H(Se)&&H(si).speaker.inline?(M(),G(r,{key:0,disabled:!H(jr)||H(kr),fluid:``,text:``,severity:`contrast`,class:`control-bar-btn`,onClick:t[4]||=e=>qi()},{icon:F(()=>[H(mn)?(M(),G(oe,{key:1,class:`w-[18px] h-[18px]`})):(M(),G(ie,{key:0,class:`w-[18px] h-[18px]`}))]),_:1},8,[`disabled`])):J(``,!0),H(ve)&&H(si).microphone.inline?(M(),G(r,{key:1,disabled:H(Nr),fluid:``,text:``,severity:`contrast`,class:`control-bar-btn`,onClick:t[5]||=e=>Ji(void 0,!0)},{icon:F(()=>[H(hn)?(M(),G(ce,{key:0,class:`w-[18px] h-[18px]`})):(M(),G(le,{key:1,class:`w-[18px] h-[18px]`}))]),_:1},8,[`disabled`])):J(``,!0),H(D)&&H(si).expand.inline&&!H(ii)?on((M(),G(r,{key:2,fluid:``,text:``,severity:`contrast`,class:`control-bar-btn`,onClick:xi},{icon:F(()=>[H(Sr)?(M(),G(fe,{key:0,class:`w-[18px] h-[18px]`})):(M(),G(me,{key:1,class:`w-[18px] h-[18px]`}))]),_:1})),[[Mt,{value:H(Sr)?e.$t(`components.player.shrink`):e.$t(`components.player.expand`)},void 0,{top:!0}]]):J(``,!0),H(ci)?(M(),G(r,{key:3,fluid:``,text:``,severity:`contrast`,class:`control-bar-btn`,onClick:t[6]||=e=>H(dt)?.toggle(e)},{icon:F(()=>[K(_e,{class:`w-[18px] h-[18px]`})]),_:1})):J(``,!0),H(ge)?(M(),G(r,{key:4,disabled:H(kr),fluid:``,text:``,severity:`contrast`,class:`control-bar-btn`,onClick:ea},{icon:F(()=>[H(Z).isFullscreen.value?(M(),G(Ae,{key:1,class:`w-[18px] h-[18px]`})):(M(),G(we,{key:0,class:`w-[18px] h-[18px]`}))]),_:1},8,[`disabled`])):J(``,!0),H(ai)?on((M(),G(r,{key:5,fluid:``,text:``,severity:`contrast`,class:`control-bar-btn`,onClick:t[7]||=t=>e.$router.push(H(ae))},{icon:F(()=>[K(Me,{class:`w-[18px] h-[18px]`})]),_:1})),[[Mt,{value:e.$t(`components.player.open_camera`)},void 0,{top:!0}]]):J(``,!0)])]),K(Le,{ref_key:`speedPopoverRef`,ref:lt,class:`more-menu-popover`,"append-to":H(oi),onShow:t[8]||=e=>vn.value=!0,onHide:t[9]||=e=>vn.value=!1},{default:F(()=>[L(`div`,jy,[(M(),z(V,null,Vt(Ze,e=>L(`button`,{key:e,class:I([`more-menu-item justify-center`,{"more-menu-item-active":(H(Y)?.speed.value??1)===e}]),onClick:t=>{H(Y)?.setSpeed(e),H(lt)?.hide()}},R(e)+`× `,11,My)),64))])]),_:1},8,[`append-to`]),K(Le,{ref_key:`morePopoverRef`,ref:dt,class:`more-menu-popover`,"append-to":H(oi),onShow:t[22]||=e=>W.value=!0,onHide:t[23]||=e=>W.value=!1},{default:F(()=>[L(`div`,Ny,[H(xe)&&H(si).rewind.inMenu?(M(),z(`button`,{key:0,disabled:!H(Y),class:`more-menu-item`,onClick:t[10]||=e=>{aa(),H(dt)?.hide()}},[K(T,{class:`w-[18px] h-[18px] shrink-0`}),L(`span`,null,R(e.$t(`components.player.rewind`)),1)],8,Py)):J(``,!0),H(he)&&H(si).fastForward.inMenu?(M(),z(`button`,{key:1,disabled:H(kn)===`idle`,class:`more-menu-item`,onClick:t[11]||=e=>{oa(),H(dt)?.hide()}},[K(O,{class:`w-[18px] h-[18px] shrink-0`}),L(`span`,null,R(e.$t(`components.player.fast_forward`)),1)],8,Fy)):J(``,!0),H(si).speed.inMenu?(M(),z(`button`,{key:2,disabled:H(kn)===`idle`,class:`more-menu-item`,onClick:t[12]||=e=>ca(e)},[K(He,{class:`w-[18px] h-[18px] shrink-0`}),L(`span`,null,R(e.$t(`components.player.speed`))+` (`+R(H(Y)?.speed.value??1)+`×)`,1)],8,Iy)):J(``,!0),H(Se)&&H(si).speaker.inMenu?(M(),z(`button`,{key:3,disabled:!H(jr)||H(kr),class:`more-menu-item`,onClick:t[13]||=e=>{qi(),H(dt)?.hide()}},[H(mn)?(M(),G(oe,{key:1,class:`w-[18px] h-[18px] shrink-0`})):(M(),G(ie,{key:0,class:`w-[18px] h-[18px] shrink-0`})),L(`span`,null,R(H(mn)?e.$t(`components.form.tooltip.unmute`):e.$t(`components.form.tooltip.mute`)),1)],8,Ly)):J(``,!0),H(D)&&H(si).expand.inMenu&&!H(ii)?(M(),z(`button`,{key:4,class:`more-menu-item`,onClick:t[14]||=e=>{xi(),H(dt)?.hide()}},[H(Sr)?(M(),G(fe,{key:0,class:`w-[18px] h-[18px] shrink-0`})):(M(),G(me,{key:1,class:`w-[18px] h-[18px] shrink-0`})),L(`span`,null,R(H(Sr)?e.$t(`components.player.shrink`):e.$t(`components.player.expand`)),1)])):J(``,!0),H(ve)&&H(si).microphone.inMenu?(M(),z(`button`,{key:5,disabled:H(Nr),class:`more-menu-item`,onClick:t[15]||=e=>{Ji(void 0,!0),H(dt)?.hide()}},[H(hn)?(M(),G(ce,{key:0,class:`w-[18px] h-[18px] shrink-0`})):(M(),G(le,{key:1,class:`w-[18px] h-[18px] shrink-0`})),L(`span`,null,R(e.$t(`components.form.tooltip.intercom`)),1)],8,Ry)):J(``,!0),H(ye)&&H(si).pip.inMenu?(M(),z(`button`,{key:6,disabled:!H(y)||H(kr)||H(jn),class:`more-menu-item`,onClick:t[16]||=e=>{Qi(),H(dt)?.hide()}},[H(gr)?(M(),G(We,{key:1,class:`w-[18px] h-[18px] shrink-0`})):(M(),G(Ue,{key:0,class:`w-[18px] h-[18px] shrink-0`})),L(`span`,null,R(H(gr)?e.$t(`components.player.hide_pip`):e.$t(`components.player.show_pip`)),1)],8,zy)):J(``,!0),H(Ce)&&H(De)&&H(si).quality.inMenu?(M(),z(`button`,{key:7,disabled:H(kr),class:`more-menu-item`,onClick:t[17]||=e=>{Xi(),H(dt)?.hide()}},[H(li)===`low-resolution`?(M(),G(Ge,{key:0,class:`w-[18px] h-[18px] shrink-0`})):H(li)===`mid-resolution`?(M(),G(Je,{key:1,class:`w-[18px] h-[18px] shrink-0`})):(M(),G(Ye,{key:2,class:`w-[18px] h-[18px] shrink-0`})),L(`span`,null,R(gi()),1)],8,By)):J(``,!0),H(Ce)&&H(Oe)&&H(si).streamingMode.inMenu?(M(),z(`button`,{key:8,disabled:H(kr)||H(jn),class:`more-menu-item`,onClick:t[18]||=e=>{Zi(),H(dt)?.hide()}},[H($n)===`mse`?(M(),G(et,{key:0,class:`w-[18px] h-[18px] shrink-0`})):(M(),G(it,{key:1,class:`w-[18px] h-[18px] shrink-0`})),L(`span`,null,R(hi()),1)],8,Vy)):J(``,!0),H(Ce)&&H(Te)&&H(si).activityMode.inMenu?(M(),z(`button`,{key:9,disabled:H(kr)||H(jn),class:`more-menu-item`,onClick:t[19]||=e=>{Yi(),H(dt)?.hide()}},[o.value===`always-on`?(M(),G(st,{key:0,class:`w-[18px] h-[18px] shrink-0`})):o.value===`standby`?(M(),G(ut,{key:1,class:`w-[18px] h-[18px] shrink-0`})):(M(),G(ft,{key:2,class:`w-[18px] h-[18px] shrink-0`})),L(`span`,null,R(mi()),1)],8,Hy)):J(``,!0),H(Ce)&&H(Ee)&&H(_r)&&H(si).ptz.inMenu?(M(),z(`button`,{key:10,disabled:H(kr)||H(nn)||H(jn),class:I([`more-menu-item`,{"more-menu-item-active":H(P)}]),onClick:t[20]||=e=>{ra(),H(dt)?.hide()}},[K(pt,{class:`w-[18px] h-[18px] shrink-0`}),L(`span`,null,R(e.$t(`components.player.ptz`)),1)],10,Uy)):J(``,!0),H(P)&&H(_r)&&H(rt)?.hasHome?(M(),z(`button`,{key:11,disabled:H(kr)||H(rt)?.isLoading||H(jn),class:`more-menu-item`,onClick:t[21]||=e=>{H(rt)?.goToHome(),H(dt)?.hide()}},[K(mt,{class:`w-[18px] h-[18px] shrink-0`}),L(`span`,null,R(e.$t(`components.player.ptz_go_to_home`)),1)],8,Wy)):J(``,!0)])]),_:1},8,[`append-to`])],2)):J(``,!0)]),_:1}),K(En,{name:`fade-2`},{default:F(()=>[H(qr)?(M(),z(`div`,{key:0,class:I([`zoom-minimap`,{"zoom-minimap-raised":H(Ir)}])},[L(`div`,{class:`zoom-minimap-viewport`,style:X(H(qr))},null,4)],2)):J(``,!0)]),_:1})],6),H(ke)?(M(),z(`div`,{key:1,class:I([`relative w-full min-h-[60px] h-[60px] camera-toolbar-background border-t-[1px] border-color flex items-center justify-between py-2 px-4 gap-1 z-10`,H(je),{"pointer-events-none opacity-50":H(wr)}]),style:X([H(Be)])},[H(k)?(M(),z(`div`,{key:0,class:`absolute left-0 right-0 top-0.5 h-5 flex items-center justify-center cursor-ns-resize touch-none z-20`,onMousedown:Si,onTouchstartPassive:Ci},[...t[30]||=[L(`div`,{class:`w-9 h-1 rounded-full bg-surface-400/50`},null,-1)]],32)):J(``,!0),L(`div`,Gy,[H(Pr)?(M(),G(c,{key:0,"stroke-width":`5`,class:I([`w-[10px] h-[10px]`,H(jn)?`nvr-spinner`:``])},null,8,[`class`])):(M(),z(`div`,{key:1,class:I([`w-[10px] h-[10px] rounded-full`,H(Dr)&&!H(jn)?`bg-gray-500`:H(jn)?`bg-sky-500`:`bg-primary-500`])},null,2)),L(`span`,Ky,R(H(Tn)),1),H(Dr)?on((M(),G(i,{key:2,class:`w-4 h-4 text-red-400`},null,512)),[[Mt,{value:e.$t(`views.camera.camera_disabled`)},void 0,{top:!0}]]):H(Or)?on((M(),G(s,{key:3,class:`w-4 h-4 text-amber-400`},null,512)),[[Mt,{value:e.$t(`views.camera.camera_snoozed`)},void 0,{top:!0}]]):J(``,!0)]),t[31]||=L(`div`,{class:`ml-auto`},null,-1),H(Dr)?J(``,!0):(M(),z(V,{key:1},[H(Ie)&&(`hasPermission`in e?e.hasPermission:H($l))(void 0,`admin`)?on((M(),G(r,{key:0,fluid:``,text:``,severity:`contrast`,class:`cui-icon-lg not-hover:text-surface-400`,onClick:t[24]||=e=>la()},{icon:F(()=>[K(gt,{width:`100%`,height:`100%`})]),_:1})),[[Mt,{value:e.$t(`components.player.share_camera`)},void 0,{top:!0}]]):J(``,!0),H(Ne)?on((M(),G(r,{key:1,fluid:``,text:``,severity:`contrast`,class:I([`cui-icon-lg not-hover:text-surface-400 flipped-h`,{active:H(Pe)}]),onClick:t[25]||=e=>a(`togglePip`)},{icon:F(()=>[K(vt,{width:`100%`,height:`100%`})]),_:1},8,[`class`])),[[Mt,{value:e.$t(`components.player.toggle_pip`)},void 0,{top:!0}]]):J(``,!0),H(ze)?on((M(),G(r,{key:2,fluid:``,text:``,severity:`contrast`,class:`cui-icon-lg not-hover:text-surface-400`,onClick:Hi},{icon:F(()=>[K(yt,{width:`100%`,height:`100%`})]),_:1})),[[Mt,{value:e.$t(`components.player.capture_snapshot`)},void 0,{top:!0}]]):J(``,!0),H(Re)?on((M(),G(r,{key:3,fluid:``,text:``,severity:H($t)?`danger`:`contrast`,class:I([`cui-icon-lg`,{"not-hover:text-surface-400":!H($t),active:H(N)&&!H($t)}]),onClick:t[26]||=e=>H($t)?na():ta()},{icon:F(()=>[H($t)?(M(),G(xt,{key:0,width:`100%`,height:`100%`})):H(N)?(M(),G(St,{key:2,width:`100%`,height:`100%`})):(M(),G(St,{key:1,width:`100%`,height:`100%`}))]),_:1},8,[`severity`,`class`])),[[Mt,{value:H($t)?e.$t(`components.player.finish_editing`):e.$t(`components.player.shortcuts`)},void 0,{top:!0}]]):J(``,!0)],64)),H(Ve)?on((M(),G(r,{key:2,disabled:H(Rr),fluid:``,text:``,severity:`contrast`,class:I([`cui-icon-lg not-hover:text-surface-400`,{active:H(nn)}]),onClick:ia},{icon:F(()=>[H(nn)?(M(),G(wt,{key:1,width:`100%`,height:`100%`})):(M(),G(Ct,{key:0,width:`100%`,height:`100%`}))]),_:1},8,[`disabled`,`class`])),[[Mt,{value:H(nn)?e.$t(`components.player.hide_timeline`):e.$t(`components.player.show_timeline`)},void 0,{top:!0}]]):J(``,!0),H(Zr).length&&(`hasPermission`in e?e.hasPermission:H($l))(void 0,`admin`)?on((M(),G(r,{key:3,fluid:``,text:``,severity:`contrast`,class:`cui-icon-lg not-hover:text-surface-400`,onClick:H(tt)?.toggleMenu},{icon:F(()=>[K(Et,{width:`100%`,height:`100%`})]),_:1},8,[`onClick`])),[[Mt,{value:e.$t(`components.player.cast`)},void 0,{top:!0}]]):J(``,!0),H(Dr)?J(``,!0):on((M(),G(r,{key:4,fluid:``,text:``,severity:`contrast`,class:I([`cui-icon-lg`,H(Xr)?`!text-primary`:`not-hover:text-surface-400`]),onClick:H($e)?.toggleMenu},{icon:F(()=>[K(_e,{width:`100%`,height:`100%`})]),_:1},8,[`class`,`onClick`])),[[Mt,{value:e.$t(`components.player.options`)},void 0,{top:!0}]]),H(Fe)&&(`hasPermission`in e?e.hasPermission:H($l))(void 0,`admin`)?on((M(),G(r,{key:5,fluid:``,text:``,severity:`contrast`,class:I([`cui-icon-lg not-hover:text-surface-400`,{active:H(p).isOpen.value}]),onClick:t[27]||=e=>H(p).open({cameraName:H(Tn)})},{icon:F(()=>[H(p).isOpen.value?(M(),G(kt,{key:1,width:`100%`,height:`100%`})):(M(),G(Ot,{key:0,width:`100%`,height:`100%`}))]),_:1},8,[`class`])),[[Mt,{value:e.$t(`components.player.settings`)},void 0,{top:!0}]]):J(``,!0)],6)):J(``,!0)]),_:1},8,[`pt`]),K(jt,{ref_key:`streamMenuRef`,ref:$e,items:H(Yr),popover:{pt:{content:{class:`p-0! rounded-xl! overflow-hidden!`}}}},null,8,[`items`]),K(jt,{ref_key:`castMenuRef`,ref:tt,items:H(Qr),popover:{pt:{content:{class:`p-0! rounded-xl! overflow-hidden!`}}}},null,8,[`items`])],4)}}}),[[`__scopeId`,`data-v-023a62af`]]),eb={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function tb(e,t){return M(),z(`svg`,eb,[...t[0]||=[L(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M4 17v2a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-2M7 11l5 5l5-5m-5-7v12`},null,-1)]])}var nb=W({name:`tabler-download`,render:tb}),rb={class:`camera-stream-event-container`},ib={class:`stream-wrapper`},ab={key:0,class:`ai-description-overlay`},ob={class:`min-w-0`},sb={class:`text-sm font-semibold text-white`},cb={class:`text-xs text-white/85 mt-1`},lb=Dl(_n({__name:`CameraStreamEvent`,props:{camera:{},eventTimestamp:{}},setup(e,{expose:t}){let n=e,r=In(),i=ua(),a=E(),{t:o}=a,s=xr(),{mdBreakpoint:c}=vl(),l=dn(`dialogRefProps`),u=dn(`dialogHeaderToggles`,{}),{plugin:d}=kt(`@camera.ui/camera-ui-nvr`),{camera:f,eventTimestamp:p}=Sn(n),m=Ut(`cameraCardRef`),h=Ut(`cuiTimelineRef`),g=B(!1),_=B(),v=B(!1),y=!1,b=Ot(U(()=>f.value._id),{sourceRole:_}),x=U(()=>!!l.loading?.value),S=U(()=>u[0]??!1),C=U(()=>h.value?.currentEventDescription),w=U(()=>!!h.value?.currentEvent),T=U(()=>h.value?.isLive??!0),ee=U(()=>({locale:a.locale.value,dayNames:s.config.locale?.dayNames,dayNamesShort:s.config.locale?.dayNamesShort,monthNames:s.config.locale?.monthNames,monthNamesShort:s.config.locale?.monthNamesShort}));async function te(){if(v.value)return;let e=h.value?.currentEvent;if(!e)return;let t=d.value;if(t?.nvrExport){v.value=!0;try{let n=await t.nvrExport(e.cameraId,e.startMs*1e3,e.endMs*1e3);await kl({url:n.url,filename:n.filename})}catch(e){r.error(`Download failed:`,e),i.add({severity:`error`,summary:o(`views.recordings.download_failed`),detail:mE(e),life:5e3})}finally{v.value=!1}}}function ne(e){m.value?.timelineScroll(e)}function D(){let e=b.currentTimestamp.value>0?Math.floor(b.currentTimestamp.value/1e3):p.value;return e?`/cameras/${f.value.name}?startTs=${e}`:`/cameras/${f.value.name}`}return q([w,T,v],([e,t])=>{if(!l.headerActions)return;let n=[];n.push({icon:hu,tooltip:o(`components.player.ai_descriptions`),toggle:!0,onClick:()=>{}}),!t&&e&&d.value&&n.push({icon:nb,tooltip:o(`views.recordings.download`),onClick:te,loading:v.value}),l.headerActions.value=n},{immediate:!0}),p.value&&(b.mode.value=`play`,b.loading.value=!0),q([d,p],([e,t])=>{!e||!t||y||(y=!0,b.play(t*1e3))},{immediate:!0}),yn(()=>{setTimeout(()=>{g.value=!0},300)}),t({isLoading:x,resolveGoTo:D}),(e,t)=>{let n=$y,r=hu;return M(),z(`div`,rb,[L(`div`,ib,[(M(),G(n,{ref_key:`cameraCardRef`,ref:m,key:H(f).name,"source-role":H(_),"onUpdate:sourceRole":t[0]||=e=>Dn(_)?_.value=e:null,"streaming-mode":`webrtc`,"camera-info":H(f).name,"flat-card":``,"card-props":{pt:{root:{class:{"!rounded-md":!0}}}},"camera-name-overlay":!1,toolbar:!1,subcontrol:!0,"subcontrol-quality-button":!0,"subcontrol-activity-mode-button":!1,"subcontrol-ptz-button":!1,"subcontrol-streaming-mode-button":!1,"control-pip-button":!1,"control-microphone-button":!1},null,8,[`source-role`,`camera-info`])),K(En,{"enter-active-class":`transition-all duration-300 ease-out`,"enter-from-class":`opacity-0 -translate-y-2`,"enter-to-class":`opacity-100 translate-y-0`,"leave-active-class":`transition-all duration-200 ease-in`,"leave-from-class":`opacity-100 translate-y-0`,"leave-to-class":`opacity-0 -translate-y-2`},{default:F(()=>[H(C)&&H(S)?(M(),z(`div`,ab,[K(r,{class:`w-4 h-4 text-white/90 shrink-0 mt-0.5`}),L(`div`,ob,[L(`p`,sb,R(H(C).title),1),L(`p`,cb,R(H(C).description),1)])])):J(``,!0)]),_:1})]),(M(),G(H(je),{ref_key:`cuiTimelineRef`,ref:h,key:H(f).name,"camera-ids":[H(f)._id],"initial-timestamp":H(p),loading:!H(g),type:H(c)?`vertical`:`horizontal`,"ignore-bottom-safe-area":H(c),"show-segments":!1,"show-zoom":!1,"show-date":!1,"md-breakpoint":H(c),class:I([`flex w-full border-t-[1px] border-color shrink-0`,H(c)?`h-full`:`h-[200px]`]),"card-class":{"mt-auto":!H(c)},"flat-card":``,"locale-settings":H(ee),onScrolling:ne},null,8,[`camera-ids`,`initial-timestamp`,`loading`,`type`,`ignore-bottom-safe-area`,`md-breakpoint`,`class`,`card-class`,`locale-settings`]))])}}}),[[`__scopeId`,`data-v-7965d949`]]),ub={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function db(e,t){return M(),z(`svg`,ub,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M17.66 11.2c-.23-.3-.51-.56-.77-.82c-.67-.6-1.43-1.03-2.07-1.66C13.33 7.26 13 4.85 13.95 3c-.95.23-1.78.75-2.49 1.32c-2.59 2.08-3.61 5.75-2.39 8.9c.04.1.08.2.08.33c0 .22-.15.42-.35.5c-.23.1-.47.04-.66-.12a.6.6 0 0 1-.14-.17c-1.13-1.43-1.31-3.48-.55-5.12C5.78 10 4.87 12.3 5 14.47c.06.5.12 1 .29 1.5c.14.6.41 1.2.71 1.73c1.08 1.73 2.95 2.97 4.96 3.22c2.14.27 4.43-.12 6.07-1.6c1.83-1.66 2.47-4.32 1.53-6.6l-.13-.26c-.21-.46-.77-1.26-.77-1.26m-3.16 6.3c-.28.24-.74.5-1.1.6c-1.12.4-2.24-.16-2.9-.82c1.19-.28 1.9-1.16 2.11-2.05c.17-.8-.15-1.46-.28-2.23c-.12-.74-.1-1.37.17-2.06c.19.38.39.76.63 1.06c.77 1 1.98 1.44 2.24 2.8c.04.14.06.28.06.43c.03.82-.33 1.72-.93 2.27`},null,-1)]])}var fb=W({name:`mdi-fire`,render:db}),pb={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function mb(e,t){return M(),z(`svg`,pb,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M16 9v11a2 2 0 0 1-2 2h-4a2 2 0 0 1-2-2V9c0-1.86 1.27-3.43 3-3.87V4H9V2h6v2h-2v1.13c1.73.44 3 2.01 3 3.87`},null,-1)]])}var hb=W({name:`mdi-gas-cylinder`,render:mb}),gb={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function _b(e,t){return M(),z(`svg`,gb,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M8 7c-1.1 0-2 .9-2 2v6a2 2 0 0 0 2 2h3v-2H8V9h3V7zm6 0c-1.1 0-2 .9-2 2v6a2 2 0 0 0 2 2h2c1.11 0 2-.89 2-2V9a2 2 0 0 0-2-2zm0 2h2v6h-2z`},null,-1)]])}var vb=W({name:`mdi-molecule-co`,render:_b}),yb={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function bb(e,t){return M(),z(`svg`,yb,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M21 11c0 5.55-3.84 10.74-9 12c-5.16-1.26-9-6.45-9-12V5l9-4l9 4zm-9 10c3.75-1 7-5.46 7-9.78V6.3l-7-3.12L5 6.3v4.92C5 15.54 8.25 20 12 21M11 7h2v6h-2zm0 8h2v2h-2z`},null,-1)]])}var xb=W({name:`mdi-shield-alert-outline`,render:bb}),Sb={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Cb(e,t){return M(),z(`svg`,Sb,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M12 18a6 6 0 0 0 6-6c0-3.32-2.69-6-6-6c-3.32 0-6 2.68-6 6a6 6 0 0 0 6 6m7-15a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5c0-1.11.89-2 2-2zM8 12a4 4 0 0 1 4-4a4 4 0 0 1 4 4a4 4 0 0 1-4 4a4 4 0 0 1-4-4`},null,-1)]])}var wb=W({name:`mdi-smoke-detector`,render:Cb}),Tb={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Eb(e,t){return M(),z(`svg`,Tb,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`m20.79 13.95l-2.33.62l-2-1.13v-2.88l2-1.13l2.33.62l.52-1.93l-1.77-.47l.46-1.77l-1.93-.52l-.62 2.33l-2 1.13L13 7.38V5.12l1.71-1.71L13.29 2L12 3.29L10.71 2L9.29 3.41L11 5.12v2.26L8.5 8.82l-2-1.13l-.58-2.33L4 5.88l.47 1.77l-1.77.47l.52 1.93l2.33-.62l2 1.13v2.89l-2 1.13l-2.33-.62l-.52 1.93l1.77.47L4 18.12l1.93.52l.62-2.33l2-1.13L11 16.62v2.26l-1.71 1.71L10.71 22L12 20.71L13.29 22l1.41-1.41l-1.7-1.71v-2.26l2.5-1.45l2 1.13l.62 2.33l1.88-.51l-.47-1.77l1.77-.47zM9.5 10.56L12 9.11l2.5 1.45v2.88L12 14.89l-2.5-1.45z`},null,-1)]])}var Db=W({name:`mdi-snowflake`,render:Eb}),Ob={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function kb(e,t){return M(),z(`svg`,Ob,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M16 19H8V5h8m.5-2h-9A1.5 1.5 0 0 0 6 4.5v15A1.5 1.5 0 0 0 7.5 21h9a1.5 1.5 0 0 0 1.5-1.5v-15A1.5 1.5 0 0 0 16.5 3M19 17h2V7h-2m3 2v6h2V9M3 17h2V7H3m-3 8h2V9H0z`},null,-1)]])}var Ab=W({name:`mdi-vibrate`,render:kb}),jb={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Mb(e,t){return M(),z(`svg`,jb,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M10 3.25S4 10 4 14c0 3.31 2.69 6 6 6s6-2.69 6-6c0-4-6-10.75-6-10.75M10 18c-2.21 0-4-1.79-4-4c0-1.77 2-5.04 4-7.61c2 2.56 4 5.84 4 7.61c0 2.21-1.79 4-4 4M20 7v6h-2V7zm-2 10h2v-2h-2z`},null,-1)]])}var Nb=W({name:`mdi-water-alert-outline`,render:Mb}),Pb={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Fb(e,t){return M(),z(`svg`,Pb,[...t[0]||=[L(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M3 12h4l3 8l4-16l3 8h4`},null,-1)]])}var Ib=W({name:`tabler-activity`,render:Fb}),Lb={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Rb(e,t){return M(),z(`svg`,Lb,[...t[0]||=[L(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[L(`path`,{d:`M5 13a7 7 0 1 0 14 0a7 7 0 1 0-14 0`}),L(`path`,{d:`M12 10v3h2M7 4L4.25 6M17 4l2.75 2`})],-1)]])}var zb=W({name:`tabler-alarm`,render:Rb}),Bb={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Vb(e,t){return M(),z(`svg`,Bb,[...t[0]||=[L(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`m12.802 2.165l5.575 2.389c.48.206.863.589 1.07 1.07l2.388 5.574c.22.512.22 1.092 0 1.604l-2.389 5.575c-.206.48-.589.863-1.07 1.07l-5.574 2.388c-.512.22-1.092.22-1.604 0l-5.575-2.389a2.04 2.04 0 0 1-1.07-1.07l-2.388-5.574a2.04 2.04 0 0 1 0-1.604l2.389-5.575c.206-.48.589-.863 1.07-1.07l5.574-2.388a2.04 2.04 0 0 1 1.604 0M12 8v4m0 4h.01`},null,-1)]])}var Hb=W({name:`tabler-alert-octagon`,render:Vb}),Ub={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Wb(e,t){return M(),z(`svg`,Ub,[...t[0]||=[L(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M16 4h4v4m-5 1l5-5M4 20l5-5m7 5h4v-4M4 4l16 16`},null,-1)]])}var Gb=W({name:`tabler-arrows-cross`,render:Wb}),Kb={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function qb(e,t){return M(),z(`svg`,Kb,[...t[0]||=[L(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M6 19a2 2 0 1 0 4 0a2 2 0 1 0-4 0m10 0a2 2 0 1 0 4 0a2 2 0 1 0-4 0M2 5h2.5l1.632 4.897A6 6 0 0 0 11.825 14H14.5a5.5 5.5 0 0 0 0-11H14v6M6 9h14M9 17l1-3m6 0l1 3`},null,-1)]])}var Jb=W({name:`tabler-baby-carriage`,render:qb}),Yb={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Xb(e,t){return M(),z(`svg`,Yb,[...t[0]||=[L(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M10 5a2 2 0 0 1 4 0a7 7 0 0 1 4 6v3a4 4 0 0 0 2 3H4a4 4 0 0 0 2-3v-3a7 7 0 0 1 4-6M9 17v1a3 3 0 0 0 6 0v-1m6-10.273A11.05 11.05 0 0 0 18.206 3M3 6.727A11.05 11.05 0 0 1 5.792 3`},null,-1)]])}var Zb=W({name:`tabler-bell-ringing`,render:Xb}),Qb={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function $b(e,t){return M(),z(`svg`,Qb,[...t[0]||=[L(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M3 12h1m8-9v1m8 8h1M5.6 5.6l.7.7m12.1-.7l-.7.7M9 16a5 5 0 1 1 6 0a3.5 3.5 0 0 0-1 3a2 2 0 0 1-4 0a3.5 3.5 0 0 0-1-3m.7 1h4.6`},null,-1)]])}var ex=W({name:`tabler-bulb`,render:$b}),tx={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function nx(e,t){return M(),z(`svg`,tx,[...t[0]||=[L(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[L(`path`,{d:`M5 17a2 2 0 1 0 4 0a2 2 0 1 0-4 0m10 0a2 2 0 1 0 4 0a2 2 0 1 0-4 0`}),L(`path`,{d:`M5 17H3v-6l2-5h9l4 5h1a2 2 0 0 1 2 2v4h-2m-4 0H9m-6-6h15m-6 0V6`})],-1)]])}var rx=W({name:`tabler-car`,render:nx}),ix={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function ax(e,t){return M(),z(`svg`,ix,[...t[0]||=[L(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[L(`path`,{d:`M8 17a2 2 0 1 0 4 0a2 2 0 1 0-4 0`}),L(`path`,{d:`m7 6l4 5h1a2 2 0 0 1 2 2v4h-2m-4 0H3m0-6h8m-6 0V6m2 0H3m11 2V6m5 6h2m-3.5 3.5L19 17m-1.5-8.5L19 7`})],-1)]])}var ox=W({name:`tabler-car-crash`,render:ax}),sx={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function cx(e,t){return M(),z(`svg`,sx,[...t[0]||=[L(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[L(`path`,{d:`M20 3v10a8 8 0 1 1-16 0V3l3.432 3.432A7.96 7.96 0 0 1 12 5c1.769 0 3.403.574 4.728 1.546z`}),L(`path`,{d:`M2 16h5l-4 4m19-4h-5l4 4m-10-4a1 1 0 1 0 2 0a1 1 0 1 0-2 0m-2-5v.01m6-.01v.01`})],-1)]])}var lx=W({name:`tabler-cat`,render:cx}),ux={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function dx(e,t){return M(),z(`svg`,ux,[...t[0]||=[L(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[L(`path`,{d:`M11 5h2m6 7q-1 8-5 8h-4q-4 0-5-8`}),L(`path`,{d:`M11 16q0 1 1 1c1 0 1-.333 1-1zm1 2v2m-2-9v.01m4-.01v.01M5 4l6 .97l-6.238 6.688a1.02 1.02 0 0 1-1.41.111a.95.95 0 0 1-.327-.954zm14 0l-6 .97l6.238 6.688c.358.408.989.458 1.41.111a.95.95 0 0 0 .327-.954z`})],-1)]])}var fx=W({name:`tabler-dog`,render:dx}),px={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function mx(e,t){return M(),z(`svg`,px,[...t[0]||=[L(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M14 12v.01M3 21h18M6 21V5a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v16`},null,-1)]])}var hx=W({name:`tabler-door`,render:mx}),gx={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function _x(e,t){return M(),z(`svg`,gx,[...t[0]||=[L(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M12 10.941c2.333-3.308.167-7.823-1-8.941c0 3.395-2.235 5.299-3.667 6.706C5.903 10.114 5 12 5 14.294C5 17.998 8.134 21 12 21s7-3.002 7-6.706c0-1.712-1.232-4.403-2.333-5.588c-2.084 3.353-3.257 3.353-4.667 2.235`},null,-1)]])}var vx=W({name:`tabler-flame`,render:_x}),yx={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function bx(e,t){return M(),z(`svg`,yx,[...t[0]||=[L(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[L(`path`,{d:`M8 21h8m-4-5v5m5-16l1 6c0 .887-.233 1.685-.646 2.37m-2.083 1.886c-.941.48-2.064.744-3.271.744c-3.314 0-6-1.988-6-5l.711-4.268`}),L(`path`,{d:`M10.983 6.959q.494.04 1.017.041c2.761 0 5-.895 5-2s-2.239-2-5-2c-1.716 0-3.23.346-4.13.872M3 3l18 18`})],-1)]])}var xx=W({name:`tabler-glass-off`,render:bx}),Sx={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Cx(e,t){return M(),z(`svg`,Sx,[...t[0]||=[L(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M15 21H6a3 3 0 0 1-3-3v-1h10v2a2 2 0 0 0 4 0V5a2 2 0 1 1 2 2h-2m2-4H8a3 3 0 0 0-3 3v11M9 7h4m-4 4h4`},null,-1)]])}var wx=W({name:`tabler-license`,render:Cx}),Tx={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Ex(e,t){return M(),z(`svg`,Tx,[...t[0]||=[L(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M8 9h8m-8 4h6m4-9a3 3 0 0 1 3 3v8a3 3 0 0 1-3 3h-5l-5 3v-3H6a3 3 0 0 1-3-3V7a3 3 0 0 1 3-3z`},null,-1)]])}var Dx=W({name:`tabler-message`,render:Ex}),Ox={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function kx(e,t){return M(),z(`svg`,Ox,[...t[0]||=[L(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[L(`path`,{d:`M9 10h.01M15 10h.01M9.5 15.25a3.5 3.5 0 0 1 5 0m3.066 2.356a2 2 0 1 0 2.897.03L19 16z`}),L(`path`,{d:`M20.865 13.517A9 9 0 0 0 21 12a9 9 0 1 0-9 9c.69 0 1.36-.076 2-.222`})],-1)]])}var Ax=W({name:`tabler-mood-cry`,render:kx}),jx={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Mx(e,t){return M(),z(`svg`,jx,[...t[0]||=[L(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`m12 3l8 4.5v9L12 21l-8-4.5v-9zm0 9l8-4.5M12 12v9m0-9L4 7.5m12-2.25l-8 4.5`},null,-1)]])}var Nx=W({name:`tabler-package`,render:Mx}),Px={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Fx(e,t){return M(),z(`svg`,Px,[...t[0]||=[L(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[L(`path`,{d:`M12 3a12 12 0 0 0 8.5 3A12 12 0 0 1 12 21A12 12 0 0 1 3.5 6A12 12 0 0 0 12 3`}),L(`path`,{d:`M11 11a1 1 0 1 0 2 0a1 1 0 1 0-2 0m1 1v2.5`})],-1)]])}var Ix=W({name:`tabler-shield-lock`,render:Fx}),Lx={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Rx(e,t){return M(),z(`svg`,Lx,[...t[0]||=[L(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[L(`path`,{d:`M18 8a3 3 0 0 1 0 6m-8-6v11a1 1 0 0 1-1 1H8a1 1 0 0 1-1-1v-5`}),L(`path`,{d:`m12 8l4.524-3.77A.9.9 0 0 1 18 4.922v12.156a.9.9 0 0 1-1.476.692L12 14H4a1 1 0 0 1-1-1V9a1 1 0 0 1 1-1z`})],-1)]])}var zx=W({name:`tabler-speakerphone`,render:Rx}),Bx={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Vx(e,t){return M(),z(`svg`,Bx,[...t[0]||=[L(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[L(`path`,{d:`M6.5 7.5a1 1 0 1 0 2 0a1 1 0 1 0-2 0`}),L(`path`,{d:`M3 6v5.172a2 2 0 0 0 .586 1.414l7.71 7.71a2.41 2.41 0 0 0 3.408 0l5.592-5.592a2.41 2.41 0 0 0 0-3.408l-7.71-7.71A2 2 0 0 0 11.172 3H6a3 3 0 0 0-3 3`})],-1)]])}var Hx=W({name:`tabler-tag`,render:Vx}),Ux={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Wx(e,t){return M(),z(`svg`,Ux,[...t[0]||=[L(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[L(`path`,{d:`M6 12a2 2 0 1 0 4 0a2 2 0 1 0-4 0`}),L(`path`,{d:`M2 12a6 6 0 0 1 6-6h8a6 6 0 0 1 6 6a6 6 0 0 1-6 6H8a6 6 0 0 1-6-6`})],-1)]])}var Gx=W({name:`tabler-toggle-left`,render:Wx}),Kx={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function qx(e,t){return M(),z(`svg`,Kx,[...t[0]||=[L(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M8 7a4 4 0 1 0 8 0a4 4 0 0 0-8 0M6 21v-2a4 4 0 0 1 4-4h4a4 4 0 0 1 4 4v2`},null,-1)]])}var Jx=W({name:`tabler-user`,render:qx}),Yx={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Xx(e,t){return M(),z(`svg`,Yx,[...t[0]||=[L(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M15 8a5 5 0 0 1 0 8m2.7-11a9 9 0 0 1 0 14M6 15H4a1 1 0 0 1-1-1v-4a1 1 0 0 1 1-1h2l3.5-4.5A.8.8 0 0 1 11 5v14a.8.8 0 0 1-1.5.5z`},null,-1)]])}var Zx={motion:Ib,person:Jx,vehicle:rx,animal:fx,package:Nx,audio:W({name:`tabler-volume`,render:Xx}),face:$s,license_plate:wx,contact:hx,doorbell:Zb,switch:Gx,light:ex,siren:zx,security_system:Ix,"line-crossing":Gb,smoke:wb,gas:hb,carbonMonoxide:vb,heat:fb,leak:Nb,cold:Db,vibration:Ab,tamper:xb,problem:Ff,other:qc,glass_break:xx,speaking:Dx,gunshot:Hb,dog_bark:fx,baby_cry:Jb,alarm:zb,scream:Ax,cat:lx,car_alarm:ox,smoke_alarm:vx},Qx=Hx;function $x(){return{icons:Zx,generic:Qx}}var eS={class:`bg-neutral-900 w-[140px] h-[140px] rounded-xl overflow-hidden relative`},tS={key:2,class:`w-full h-full flex items-center justify-center bg-neutral-800/80`},nS={key:4,class:`absolute inset-0 z-[3] flex items-center justify-center pointer-events-none`},rS={key:5,class:`absolute top-1.5 left-1.5 z-[3] flex items-center gap-1`},iS={key:6,class:`absolute inset-0 bg-black/0 group-hover:bg-black/30 transition-colors duration-200 flex flex-col items-center justify-end pb-2 gap-1 z-[2] pointer-events-none`},aS={class:`flex items-center gap-1 opacity-0 group-hover:opacity-100 transition-opacity duration-200`},oS={key:0,class:`text-[10px] text-white/50 font-medium truncate max-w-[100px]`},sS={class:`text-xs text-white font-medium opacity-0 group-hover:opacity-100 transition-opacity duration-200 truncate max-w-[130px] px-1`},cS={class:`mt-2 text-center`},lS={class:`text-xs text-muted`},uS=1e4,dS=Dl(_n({__name:`CameraEvent`,props:{event:{},cameraName:{},camera:{},loadThumbnails:{type:Function},clickDisabled:{type:Boolean}},setup(e){let t=e,n=jv(),r=dn(mt,void 0),i=Ut(`previewCanvasRef`),a=Ut(`cardRef`),s=B(!1),c=B(void 0),l=B(void 0),u=B(Ct(t.event)),d=B(`loading`),f,p=!1,{icons:m,generic:h}=$x(),g=U(()=>m[u.value]??h),_=U(()=>new Date(t.event.startTime).toLocaleTimeString([],{hour:`2-digit`,minute:`2-digit`})),v=U(()=>t.event.state===`active`),y=U(()=>!v.value&&t.event.segments?.some(e=>e?.description)),b=U(()=>t.event.segments?.find(e=>e?.description)?.description?.title);function x(){if(!r||!t.event.endTime)return;let e=i.value;e&&(s.value=!0,r.onHoverStart(e,t.event.cameraId,t.event.id,t.event.startTime,t.event.endTime))}function S(){r&&(s.value=!1,r.onHoverEnd())}async function C(e=2){let n=await t.loadThumbnails(t.event.id,t.event.startTime);if(n){let e=vt(n,t.event);if(e.url){c.value=e.url,l.value=e.label,u.value=e.type,d.value=`loaded`;return}}if(e>0)return await new Promise(e=>setTimeout(e,500)),C(e-1);d.value=`empty`}function w(){if(t.clickDisabled||!t.camera)return;let e=v.value&&Date.now()-t.event.startTime<uS,r=t.event.segments?.find(e=>e?.description)?.description,i=[{icon:hu,toggle:!0,onClick:()=>{}}];f=n.openComponentDialog(lb,{data:{title:t.camera.name,stayActive:!0,hideCancelButton:!0,hideConfirmButton:!0,contentProps:{camera:t.camera,eventTimestamp:e?void 0:t.event.startTime},headerActions:r?i:void 0,draggable:!0,blockDragOnSelectors:[`.p-dialog-body`],dismissableMask:!1,modal:!1,dialogContentClass:`!px-0 h-full`,goTo:`/cameras/${t.camera.name}${e?``:`?startTs=${t.event.startTime}`}`},dialogSize:{desktop:{maxWidth:`800px`,maxHeight:`calc(100vh - max(1rem, env(safe-area-inset-top, 0px)) - max(1rem, env(safe-area-inset-bottom, 0px)))`,width:`50vw`}}})}let{stop:T}=De(a,([e])=>{e.isIntersecting&&!p&&(p=!0,T(),C())},{threshold:.1});return q(()=>t.event.state,(e,t)=>{t===`active`&&e===`ended`&&C()}),q(()=>t.event.lastUpdate,()=>{v.value&&p&&C()}),yn(()=>{requestAnimationFrame(()=>{if(!p&&a.value){let e=a.value.getBoundingClientRect();e.right>0&&e.left<window.innerWidth&&e.bottom>0&&e.top<window.innerHeight&&(p=!0,T(),C())}})}),Yt(()=>{T(),f?.close()}),(e,n)=>{let u=gu,f=o,p=Ol,m=re;return M(),z(`div`,{ref_key:`cardRef`,ref:a,class:`camera-event-card relative group cursor-pointer`,onClick:w,onMouseenter:x,onMouseleave:S},[H(b)?(M(),G(u,{key:0})):J(``,!0),L(`div`,eS,[H(d)===`loading`?(M(),G(f,{key:0,class:`w-full h-full rounded-xl`,width:`140px`,height:`140px`})):H(c)?(M(),G(p,{key:1,src:H(c),alt:t.cameraName,class:`pointer-events-none w-full h-full transition-transform duration-300 group-hover:scale-105`,"image-style":{objectFit:`cover`},width:`140px`,height:`140px`,"image-container-class":`w-full h-full`},null,8,[`src`,`alt`])):(M(),z(`div`,tS,[(M(),G(Fn(H(g)),{class:`w-8 h-8 text-white/20`}))])),H(r)?on((M(),z(`canvas`,{key:3,ref_key:`previewCanvasRef`,ref:i,class:`absolute inset-0 w-full h-full object-cover pointer-events-none z-[1]`},null,512)),[[sn,H(s)]]):J(``,!0),H(r)&&H(s)&&H(r).isLoading.value&&!H(y)?(M(),z(`div`,nS,[K(m,{class:`w-[24px] h-[24px] m-0`,"stroke-width":`3`})])):J(``,!0),H(v)?(M(),z(`div`,rS,[...n[0]||=[L(`span`,{class:`relative flex h-2.5 w-2.5`},[L(`span`,{class:`animate-ping absolute inline-flex h-full w-full rounded-full bg-green-400 opacity-75`}),L(`span`,{class:`relative inline-flex rounded-full h-2.5 w-2.5 bg-green-500`})],-1)]])):J(``,!0),H(c)?(M(),z(`div`,iS,[L(`div`,aS,[(M(),G(Fn(H(g)),{class:`w-3.5 h-3.5 text-white/50`})),H(l)?(M(),z(`span`,oS,R(H(l)),1)):J(``,!0)]),L(`span`,sS,R(t.cameraName),1)])):J(``,!0)]),L(`div`,cS,[L(`p`,lS,R(H(_)),1)])],544)}}}),[[`__scopeId`,`data-v-9b0b497e`]]),fS={key:0,class:`absolute top-[50px] left-[50%] translate-x-[-50%] z-2 px-3 py-2 text-shadow-md`},pS={class:`text-sm text-color font-medium`},mS=152,hS=172,gS=5,_S=_n({__name:`CuiCameraEvents`,props:{cameras:{}},setup(e){let t=e,{isTouch:n}=yl();if(!n.value&&typeof VideoDecoder<`u`){let e=Be({cacheSize:20});Zt(mt,e),Ne(()=>e.dispose())}let r,{cameras:i}=Sn(t),a=Ut(`containerRef`),s=Ut(`scrollContainerRef`),c=B(!0),l=B(!1),u=B({left:0,right:0}),d=B(0),{width:f}=w(a),p=U(()=>{let e=new Map;if(i.value)for(let t of i.value)e.set(t._id,t.name);return e}),m=U(()=>{let e=new Map;if(i.value)for(let t of i.value)e.set(t._id,t);return e}),h=U(()=>i.value?.map(e=>e._id)??[]),g=U(()=>{let e=f.value||800;return Math.ceil(e/mS)+10}),{events:_,isLoading:v,hasMore:y,loadMore:b,loadThumbnails:x}=Me({availableCameraIds:h,realtime:!0,pageSize:g.value,filter:{hasDetections:!0}}),{start:S}=Et(()=>{l.value=!1},100,{immediate:!1}),C=U(()=>_.value),T=U(()=>Math.ceil((f.value||800)/mS)),ee=U(()=>C.value.length<T.value&&y.value),E=U(()=>!v.value&&C.value.length===0&&!y.value),ne=U(()=>C.value.length===0?15:5),D=U(()=>{let{left:e}=u.value;return{left:`${-e}px`,width:`100dvw`,paddingLeft:`${e}px`}}),O=U(()=>{let e=u.value.left+50,t=Math.min(Math.round(45/e*100),100),n=Math.min(Math.round(58/e*100),100);return{top:`-10px`,height:`calc(100% + 20px)`,left:`${-u.value.left}px`,width:`${e}px`,background:`linear-gradient(270deg, transparent 0%, rgba(var(--ground-background-val), 0.8) ${t}%, rgba(var(--ground-background-val), 0.9) ${n}%, rgba(var(--ground-background-val), 0.95) 100%)`}}),re=U(()=>Math.max(0,Math.floor(d.value/mS)-gS)),k=U(()=>{let e=T.value;return Math.min(C.value.length,Math.ceil(d.value/mS)+e+gS)}),ie=U(()=>C.value.slice(re.value,k.value)),ae=U(()=>re.value*mS);function oe(){let e=a.value;if(!e)return;let t=e.getBoundingClientRect();u.value={left:t.left,right:window.innerWidth-t.right}}function se(){let e=s.value;e&&(d.value=0,en(()=>{e.scrollTo({left:0,behavior:`smooth`})}))}function ce(){let e=s.value;e&&(d.value=e.scrollLeft,c.value=e.scrollLeft<5)}function le(){Ke(s,{disableTextSelect:!0,threshold:10,onSwipe:e=>{C.value.length===0&&(v.value||ee.value||E.value)||(l.value=!0,s.value?.classList.add(`cursor-grabbing`),s.value?.scrollBy({left:-e.movementX,behavior:`smooth`}))},onSwipeEnd:()=>{s.value?.classList.remove(`cursor-grabbing`),S()}})}return we(window,`resize`,oe),we(s,`scroll`,ce,{passive:!0}),we(s,`wheel`,e=>{C.value.length===0&&(v.value||ee.value||E.value)||Math.abs(e.deltaY)>Math.abs(e.deltaX)&&(e.preventDefault(),s.value?.scrollBy({left:e.deltaY}))},{passive:!1}),xe(s,b,{distance:300,direction:`right`,canLoadMore:()=>y.value}),q(f,()=>oe()),q(()=>C.value[0]?.id,e=>{if(!e||e===r)return;let t=r===void 0;if(r=e,t)return;let n=s.value,i=n?.scrollLeft||0;en(i<5?()=>{s.value?.scrollTo({left:0,behavior:`smooth`})}:()=>{n&&(n.scrollLeft=i+mS)})}),q([ee,()=>v.value],([e,t])=>{e&&!t&&b()}),yn(()=>{oe();let e=document.getElementById(`container`);e&&we(e,`transitionend`,oe),n.value||le()}),(e,t)=>{let n=o,r=dS,i=fu,d=te;return M(),z(`div`,{ref_key:`containerRef`,ref:a,class:`relative min-w-0`,style:X({height:`${hS}px`})},[L(`div`,{ref_key:`scrollContainerRef`,ref:s,class:I([`absolute top-0 overflow-x-auto overflow-y-hidden hide-scrollbar overscroll-x-contain`,{"overflow-x-hidden!":H(C).length===0&&(H(v)||H(ee)||H(E))}]),style:X(H(D))},[L(`div`,{class:`relative`,style:X({width:`${H(C).length*mS}px`,height:`${hS}px`})},[L(`div`,{class:`absolute top-0 left-0 flex`,style:X({transform:`translateX(${H(ae)}px)`})},[H(C).length===0&&(H(v)||H(ee)||H(E))?(M(!0),z(V,{key:0},Vt(H(ne),e=>(M(),z(`div`,{key:`skeleton-${e}`,class:`event-card flex flex-col items-center justify-center w-[140px] mr-3`},[K(n,{class:`rounded-xl`,width:`140px`,height:`140px`,animation:H(E)?`none`:`wave`},null,8,[`animation`]),K(n,{class:`mt-2`,width:`50px`,height:`16px`,animation:H(E)?`none`:`wave`},null,8,[`animation`])]))),128)):(M(!0),z(V,{key:1},Vt(H(ie),e=>(M(),z(`div`,{key:e.id,class:`event-card flex-none w-[140px] mr-3`},[K(r,{event:e,"camera-name":H(p).get(e.cameraId),camera:H(m).get(e.cameraId),"load-thumbnails":H(x),"click-disabled":H(l)},null,8,[`event`,`camera-name`,`camera`,`load-thumbnails`,`click-disabled`])]))),128))],4)],4)],6),H(E)&&!H(v)&&!H(ee)?(M(),z(`div`,fS,[L(`span`,pS,R(e.$t(`components.camera_events.no_events`)),1)])):J(``,!0),!H(c)&&H(u).left>0?(M(),z(`div`,{key:1,class:`absolute pointer-events-none z-1`,style:X(H(O))},null,4)):J(``,!0),K(En,{name:`fade-2`},{default:F(()=>[!H(c)&&H(C).length>0?(M(),G(d,{key:0,rounded:``,severity:`secondary`,class:`absolute left-1 cui-icon-md shadow-md z-2 opacity-70 hover:opacity-100 transition-opacity`,style:{top:`70px`,transform:`translateY(-50%)`},onClick:se},{icon:F(()=>[K(i,{width:`100%`,height:`100%`})]),_:1})):J(``,!0)]),_:1})],4)}}}),vS=wn(new Map),yS=pn();function bS(){return{hasSlot:e=>(vS.get(e)||0)>0,registerSlot:e=>{vS.set(e,(vS.get(e)||0)+1),Yt(()=>{let t=vS.get(e)||0;t<=1?vS.delete(e):vS.set(e,t-1)})},registerScrollToTop:e=>{yS.value=e,Yt(()=>{yS.value===e&&(yS.value=void 0)})},scrollToTop:()=>{yS.value?yS.value():window.scrollTo({top:0,behavior:`smooth`})}}}var xS=_n({__name:`CuiTopbarSlot`,props:{position:{}},setup(e){let t=e,{smBreakpoint:n}=vl(),{registerSlot:r}=bS();return r(t.position),(t,r)=>H(n)?(M(),G(Cn,{key:0,to:`#cui-topbar-${e.position}`,defer:``},[Gt(t.$slots,`default`)],8,[`to`])):J(``,!0)}}),SS={viewBox:`0 0 12 12`,width:`1.2em`,height:`1.2em`};function CS(e,t){return M(),z(`svg`,SS,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M6 11A5 5 0 1 0 6 1a5 5 0 0 0 0 10M5 4h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1`},null,-1)]])}var wS=W({name:`fluent-record-stop-12-filled`,render:CS}),TS={viewBox:`0 0 20 20`,width:`1.2em`,height:`1.2em`};function ES(e,t){return M(),z(`svg`,TS,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M6 3a3 3 0 0 0-3 3v6a3 3 0 0 0 3 3h6a3 3 0 0 0 3-3V6a3 3 0 0 0-3-3zm6.33 3.624a.5.5 0 0 1 .046.705l-3.5 4a.5.5 0 0 1-.73.025l-2-2a.5.5 0 1 1 .708-.708l1.622 1.622l3.148-3.597a.5.5 0 0 1 .705-.047M5.753 16c.55.614 1.347 1 2.236 1h4.5a4.5 4.5 0 0 0 4.5-4.5V8c0-.884-.383-1.68-.991-2.228V11q0 .15-.01.299v1.2a3.5 3.5 0 0 1-3.5 3.5h-1.434l-.056.001z`},null,-1)]])}var DS=W({name:`fluent-select-all-on-20-filled`,render:ES}),OS={viewBox:`0 0 32 32`,width:`1.2em`,height:`1.2em`};function kS(e,t){return M(),z(`svg`,OS,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M2 10.5A4.5 4.5 0 0 1 6.5 6h10a4.5 4.5 0 0 1 4.5 4.5v11a4.5 4.5 0 0 1-4.5 4.5h-10A4.5 4.5 0 0 1 2 21.5zm27.996-.746c0-1.814-2.036-2.882-3.529-1.852l-3.967 2.74v10.716l3.968 2.74c1.492 1.03 3.528-.038 3.528-1.852z`},null,-1)]])}var AS=W({name:`fluent-video-32-filled`,render:kS}),jS={viewBox:`0 0 32 32`,width:`1.2em`,height:`1.2em`};function MS(e,t){return M(),z(`svg`,jS,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`m20.923 22.337l7.37 7.37a1 1 0 0 0 1.414-1.414l-26-26a1 1 0 0 0-1.414 1.414L4.884 6.3A4.5 4.5 0 0 0 2 10.5v11A4.5 4.5 0 0 0 6.5 26h10c2.2 0 4.03-1.578 4.423-3.663m1.577-3.374l5.52 5.519c1.056-.134 1.976-1.017 1.976-2.236V9.754c0-1.814-2.036-2.882-3.528-1.852l-3.968 2.74zM9.537 6L21 17.463V10.5A4.5 4.5 0 0 0 16.5 6z`},null,-1)]])}var NS=W({name:`fluent-video-off-32-filled`,render:MS}),PS={viewBox:`0 0 20 20`,width:`1.2em`,height:`1.2em`};function FS(e,t){return M(),z(`svg`,PS,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M10.5 4A2.5 2.5 0 0 1 13 6.5v7a2.5 2.5 0 0 1-2 2.45V12.5A3.5 3.5 0 0 0 7.5 9h-4c-.537 0-1.045.12-1.5.337V6.5A2.5 2.5 0 0 1 4.5 4zm3.5 8.082V7.93l2.77-2.313a.75.75 0 0 1 1.23.575v7.668a.75.75 0 0 1-1.236.57zM1 12.5A2.5 2.5 0 0 1 3.5 10h4a2.5 2.5 0 0 1 2.5 2.5v4A2.5 2.5 0 0 1 7.5 19h-4A2.5 2.5 0 0 1 1 16.5zm4.02.034a.45.45 0 0 0-.447-.037a.5.5 0 0 0-.156.108a.5.5 0 0 0-.145.357v3.075a.5.5 0 0 0 .145.358a.6.6 0 0 0 .158.11a.45.45 0 0 0 .323.02a.5.5 0 0 0 .13-.064l2.296-1.567a.47.47 0 0 0 .163-.185a.54.54 0 0 0-.003-.487a.5.5 0 0 0-.168-.182z`},null,-1)]])}var IS=W({name:`fluent-video-recording-20-filled`,render:FS}),LS={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function RS(e,t){return M(),z(`svg`,LS,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M6 19a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V7H6zM8 9h8v10H8zm7.5-5l-1-1h-5l-1 1H5v2h14V4z`},null,-1)]])}var zS=W({name:`mdi-delete-outline`,render:RS}),BS={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function VS(e,t){return M(),z(`svg`,BS,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M18 8a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V10a2 2 0 0 1 2-2h9V6a3 3 0 0 0-3-3a3 3 0 0 0-3 3H7a5 5 0 0 1 5-5a5 5 0 0 1 5 5v2zm-6 9a2 2 0 0 0 2-2a2 2 0 0 0-2-2a2 2 0 0 0-2 2a2 2 0 0 0 2 2`},null,-1)]])}var HS=W({name:`mdi-lock-open`,render:VS}),US={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function WS(e,t){return M(),z(`svg`,US,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M21 3H3c-.6 0-1 .4-1 1v6c0 .6.4 1 1 1h18c.6 0 1-.4 1-1V4c0-.6-.4-1-1-1m0 10H3c-.6 0-1 .4-1 1v6c0 .6.4 1 1 1h18c.6 0 1-.4 1-1v-6c0-.6-.4-1-1-1`},null,-1)]])}var GS=W({name:`mdi-view-agenda`,render:WS}),KS={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function qS(e,t){return M(),z(`svg`,KS,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M3 11h8V3H3m0 18h8v-8H3m10 8h8v-8h-8m0-10v8h8V3`},null,-1)]])}var JS=W({name:`mdi-view-grid`,render:qS}),YS={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function XS(e,t){return M(),z(`svg`,YS,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M7 12a2 2 0 1 1-4 0q0-.053.005-.102A1.996 1.996 0 0 1 5 10a2 2 0 0 1 2 2m7 0a2 2 0 1 1-4 0q0-.053.005-.102A1.996 1.996 0 0 1 12 10a2 2 0 0 1 2 2m7 0a2 2 0 1 1-4 0q0-.053.005-.102A1.996 1.996 0 0 1 19 10a2 2 0 0 1 2 2`},null,-1)]])}var ZS=W({name:`tabler-dots-filled`,render:XS}),QS={class:`flex flex-col`},$S={class:`flex flex-row items-center justify-center gap-2`},eC={key:0,class:`events-section mb-4`},tC={key:0,class:`page-title mb-2`},nC={class:`flex flex-col flex-1 overflow-x-hidden`},rC={key:0,class:`page-title`},iC={class:`flex flex-1 min-h-0 flex-col items-center justify-center w-full gap-4 py-16`,key:`no-cameras`},aC={class:`w-16 h-16 rounded-full bg-primary-500/10 flex items-center justify-center`},oC={class:`flex flex-col items-center gap-1 max-w-[400px] text-center`},sC={class:`text-color font-semibold text-base`},cC={class:`text-muted text-sm`},lC={key:`defaultView`},uC={key:`groupedView`,class:`flex flex-col gap-6`},dC={class:`text-sm font-semibold text-muted uppercase tracking-wide mb-2`},fC=300,pC=Dl(_n({__name:`Home`,setup(e){let t=gv(()=>N(()=>import(`./CameraConsole-CEARcJYc.js`),__vite__mapDeps([7,1,2,8,9,10,11,12,13]),import.meta.url)),n=new vg,r=cv(),i=jv(),a=ua(),s=Tn(),c=or(),{t:l}=E(),{smBreakpoint:u}=vl(),{isTouch:d}=yl(),{width:f,height:p}=gl(),m=cl(),{uiSettings:h}=rr(m),{data:g,isLoading:_}=n.getCamerasQuery({page:1,pageSize:-1}),v=pn({}),y=0,b=U(()=>_.value),x=U(()=>$l(void 0,`admin`)),S=U(()=>d.value?Dr:Tr),C=U(()=>d.value?{enableMouseEvents:!0}:void 0),w=U(()=>h.value.cameras.viewMode??`default`),T=U(()=>`repeat(auto-fill, minmax(${u.value?`100%`:`300px`}, 1fr))`),ee=U(()=>{let e=T.value;return D.value.length<2?`${e} 50%`:e}),ne=U(()=>{let e=u.value?1:Math.max(1,Math.floor(f.value/300)),t=f.value/e*9/16+8;return e*Math.max(1,Math.ceil(p.value/t))}),D=U(()=>g.value?.result?re(g.value.result,h.value.cameras.order||[]):[]),O=U(()=>{if(!g.value?.result)return[];let e=h.value.cameras.groupOrder||{},t=new Map;for(let e of g.value.result){let n=e.room||`Default`;t.has(n)||t.set(n,[]),t.get(n).push(e)}let n=[];for(let[r,i]of t){let t=e[r]||[];n.push({room:r,cameras:re(i,t)})}return n.sort((e,t)=>e.room===`Default`?-1:t.room===`Default`?1:e.room.localeCompare(t.room)),n});function re(e,t){return[...e].sort((e,n)=>{let r=t.indexOf(e._id),i=t.indexOf(n._id);return r!==-1&&i!==-1?r-i:r===-1?i===-1?e.name.localeCompare(n.name):1:-1})}function k(){h.value.cameras.viewMode=w.value==="default"?`grouped`:`default`}function ie(e){let t=D.value.find(t=>t._id===e);return{camera:t,index:t?D.value.indexOf(t):-1}}function ae(e,t){let{index:n}=ie(e);if(n===-1||n===t)return;let r=D.value.map(e=>e._id),[i]=r.splice(n,1);r.splice(t,0,i),h.value.cameras.order=r}function oe(e,t){let n=O.value.find(t=>t.room===e);if(!n)return{camera:void 0,index:-1};let r=n.cameras.find(e=>e._id===t);return{camera:r,index:r?n.cameras.indexOf(r):-1}}function se(e,t,n){let{index:r}=oe(e,t);if(r===-1||r===n)return;let i=O.value.find(t=>t.room===e);if(!i)return;let a=i.cameras.map(e=>e._id),[o]=a.splice(r,1);a.splice(n,0,o);let s={...h.value.cameras.groupOrder||{}};s[e]=a,h.value.cameras.groupOrder=s}let ce=B(!1),le=B(new Set),ue=B(!1),de=U(()=>D.value.filter(e=>le.value.has(e._id))),fe=U(()=>D.value.length>0&&D.value.every(e=>le.value.has(e._id))),pe=U(()=>de.value.length>0&&de.value.every(e=>e.disabled)),me=U(()=>de.value.length>0&&de.value.every(e=>e.detectionSettings?.snooze)),he=U(()=>de.value.length>0&&de.value.every(e=>e.recordingSettings?.enabled!==!1));function ge(){ce.value=!0}function _e(){ce.value=!1,le.value=new Set}function ve(){le.value=fe.value?new Set:new Set(D.value.map(e=>e._id))}function ye(){y=Date.now()}function be(e){if(Date.now()-y<fC)return;if(!ce.value){c.push(`/cameras/${e.name}`);return}let t=new Set(le.value);t.has(e._id)?t.delete(e._id):t.add(e._id),le.value=t}async function xe(e,t){if(!(!de.value.length||ue.value)){ue.value=!0;try{for(let t of de.value)await e(t);a.add({severity:`success`,detail:t,life:3e3})}catch(e){a.add({severity:`error`,detail:mE(e),life:4e3})}finally{ue.value=!1,await s.refetchQueries({queryKey:[`camerasList`]})}}}async function Se(){let e=!pe.value;await xe(t=>Zh({cameraname:t.name,cameraData:{disabled:e}}),l(`components.toast.camera_updated`))}async function Ce(){let e=!me.value;await xe(t=>Zh({cameraname:t.name,cameraData:{detectionSettings:{snooze:e}}}),l(`components.toast.camera_updated`))}async function we(){let e=!he.value;await xe(t=>Zh({cameraname:t.name,cameraData:{recordingSettings:{enabled:e}}}),l(`components.toast.camera_updated`))}function Te(){de.value.length&&i.openTextDialog({data:{title:l(`components.dialog.title.confirm`),contentText:l(`components.dialog.message.confirm_remove_selected`,{count:de.value.length}),confirmText:l(`components.form.button.remove`),confirmButtonProps:{severity:`danger`}},onConfirm:async()=>{await xe(e=>gg({cameraname:e.name}),l(`components.toast.cameras_removed`)),_e()}})}function Ee(e){i.openComponentDialog(t,{data:{title:l(`components.dialog.title.log`),confirmText:l(`components.form.button.download`),loading:b,stayActive:!0,contentProps:{cameraName:e},dialogContentClass:`not-md:px-0 h-full md:h-[50vh]`}})}return(e,t)=>{let n=xS,i=_S,a=o,s=jo,c=lu,l=te,d=ou,f=Cl,p=Sl;return M(),z(`div`,QS,[K(n,{position:`center`},{default:F(()=>[L(`div`,$S,[K(H(Nn),{src:H(oE)(`logo_animated.svg`),width:`18px`,height:`18px`,title:`camera.ui`,"aria-label":`camera.ui`},null,8,[`src`]),t[2]||=L(`span`,{class:`font-semibold text-xl truncate`},`camera.ui`,-1)])]),_:1}),H(h).cameras.showEvents&&(H(b)||H(D).length)?(M(),z(`div`,eC,[H(u)?J(``,!0):(M(),z(`h1`,tC,R(e.$t(`components.camera_events.title`)),1)),K(i,{cameras:H(g)?.result},null,8,[`cameras`])])):J(``,!0),L(`div`,nC,[H(b)||H(D).length?(M(),z(`h1`,rC,R(e.$t(`views.cameras.title`)),1)):J(``,!0),K(En,{name:`fade-2`,mode:`out-in`},{default:F(()=>[H(b)?(M(),z(`div`,{key:`loading`,class:`grid w-full gap-2`,style:X({gridTemplateColumns:H(T)})},[(M(!0),z(V,null,Vt(H(ne),e=>(M(),G(a,{key:e,class:`aspect-video !h-auto cui-card`}))),128))],4)):H(D).length?H(w)==="default"?(M(),z(`div`,lC,[L(`div`,{class:`grid w-full gap-1`,style:X({gridTemplateColumns:H(ee)})},[K(H(Cr),{backend:H(S),options:H(C)},{default:F(()=>[K(qt,{name:`list`},{default:F(()=>[(M(!0),z(V,null,Vt(H(D),e=>(M(),G(d,{key:e._id,camera:e,"find-card":ie,"move-card":ae,"no-drag":H(h).cameras.dragDisabled||H(ce),"selection-mode":H(ce),selected:H(le).has(e._id),"snapshot-ref":t=>H(v)[e.name]=t,class:`shadow-lg rounded-xl transition-transform`,"view-transition":``,onRefreshSnapshot:t=>H(v)[e.name]?.refresh(),onOpenConsole:t=>Ee(e.name),onOpenSettings:t=>H(r).open({cameraName:e.name}),onClick:t=>be(e),onDragEnd:ye},null,8,[`camera`,`no-drag`,`selection-mode`,`selected`,`snapshot-ref`,`onRefreshSnapshot`,`onOpenConsole`,`onOpenSettings`,`onClick`]))),128))]),_:1})]),_:1},8,[`backend`,`options`])],4)])):(M(),z(`div`,uC,[(M(!0),z(V,null,Vt(H(O),t=>(M(),z(`div`,{key:t.room},[L(`h2`,dC,R(t.room===`Default`?e.$t(`components.form.label.room_default`):t.room),1),L(`div`,{class:`grid w-full gap-1`,style:X({gridTemplateColumns:H(ee)})},[K(H(Cr),{backend:H(S),options:H(C)},{default:F(()=>[K(qt,{name:`list`},{default:F(()=>[(M(!0),z(V,null,Vt(t.cameras,e=>(M(),G(d,{key:e._id,camera:e,"find-card":e=>oe(t.room,e),"move-card":(e,n)=>se(t.room,e,n),"no-drag":H(h).cameras.dragDisabled||H(ce),"selection-mode":H(ce),selected:H(le).has(e._id),"snapshot-ref":t=>H(v)[e.name]=t,class:`shadow-lg rounded-xl transition-transform`,"view-transition":``,onRefreshSnapshot:t=>H(v)[e.name]?.refresh(),onOpenConsole:t=>Ee(e.name),onOpenSettings:t=>H(r).open({cameraName:e.name}),onClick:t=>be(e),onDragEnd:ye},null,8,[`camera`,`find-card`,`move-card`,`no-drag`,`selection-mode`,`selected`,`snapshot-ref`,`onRefreshSnapshot`,`onOpenConsole`,`onOpenSettings`,`onClick`]))),128))]),_:2},1024)]),_:2},1032,[`backend`,`options`])],4)]))),128))])):(M(),z(`div`,iC,[L(`div`,aC,[K(s,{class:`w-8 h-8 text-primary-500`})]),L(`div`,oC,[L(`span`,sC,R(e.$t(`views.cameras.no_cameras`)),1),L(`span`,cC,R(e.$t(`views.cameras.no_cameras_hint`)),1)]),H(x)?(M(),G(l,{key:0,class:`cui-button-medium mt-2`,label:e.$t(`views.cameras.get_started`),onClick:t[0]||=t=>e.$router.push(`/cameras`)},{icon:F(()=>[K(c,{class:`w-4 h-4`})]),_:1},8,[`label`])):J(``,!0)]))]),_:1})]),H(D).length>1?(M(),G(p,{key:1,"force-visible":H(ce)},{default:F(()=>[H(ce)?(M(),z(V,{key:1},[K(f,{grouped:``,"tooltip-props":{value:e.$t(`components.form.tooltip.cancel_selection`)},"button-props":{severity:`secondary`},icon:H(Or),"icon-props":{width:`100%`,height:`100%`},onClick:_e},null,8,[`tooltip-props`,`icon`]),K(f,{grouped:``,"tooltip-props":{value:H(fe)?e.$t(`components.form.tooltip.deselect_all`):e.$t(`components.form.tooltip.select_all`)},"button-props":{severity:H(fe)?`primary`:`secondary`},icon:H(DS),"icon-props":{width:`100%`,height:`100%`},onClick:ve},null,8,[`tooltip-props`,`button-props`,`icon`]),K(f,{grouped:``,"tooltip-props":{value:H(pe)?e.$t(`components.form.tooltip.enable_selected`):e.$t(`components.form.tooltip.disable_selected`)},"button-props":{severity:`secondary`,disabled:!H(le).size||H(ue)},icon:H(pe)?H(AS):H(NS),"icon-props":{width:`100%`,height:`100%`},onClick:Se},null,8,[`tooltip-props`,`button-props`,`icon`]),K(f,{grouped:``,"tooltip-props":{value:H(me)?e.$t(`components.form.tooltip.unsnooze_selected`):e.$t(`components.form.tooltip.snooze_selected`)},"button-props":{severity:`secondary`,disabled:!H(le).size||H(ue)},icon:H(Wl),"icon-props":{width:`100%`,height:`100%`},onClick:Ce},null,8,[`tooltip-props`,`button-props`,`icon`]),K(f,{grouped:``,"tooltip-props":{value:H(he)?e.$t(`components.form.tooltip.recording_off_selected`):e.$t(`components.form.tooltip.recording_on_selected`)},"button-props":{severity:`secondary`,disabled:!H(le).size||H(ue)},icon:H(he)?H(wS):H(IS),"icon-props":{width:`100%`,height:`100%`},onClick:we},null,8,[`tooltip-props`,`button-props`,`icon`]),K(f,{grouped:``,"tooltip-props":{value:e.$t(`components.form.tooltip.delete_selected`)},"button-props":{severity:`danger`,disabled:!H(le).size||H(ue)},icon:H(zS),"icon-props":{width:`100%`,height:`100%`},onClick:Te},null,8,[`tooltip-props`,`button-props`,`icon`])],64)):(M(),z(V,{key:0},[K(f,{grouped:``,"tooltip-props":{value:H(w)==="default"?e.$t(`components.form.tooltip.view_grouped`):e.$t(`components.form.tooltip.view_default`)},"button-props":{severity:H(w)==="default"?`secondary`:`primary`},icon:H(w)==="default"?H(JS):H(GS),"icon-props":{width:`100%`,height:`100%`},onClick:k},null,8,[`tooltip-props`,`button-props`,`icon`]),K(f,{grouped:``,"tooltip-props":{value:H(h).cameras.dragDisabled?e.$t(`components.form.tooltip.enable_drag`):e.$t(`components.form.tooltip.disable_drag`)},"button-props":{severity:H(h).cameras.dragDisabled?`secondary`:`success`},icon:H(h).cameras.dragDisabled?H(Sh):H(HS),"icon-props":{width:`100%`,height:`100%`},onClick:t[1]||=e=>H(h).cameras.dragDisabled=!H(h).cameras.dragDisabled},null,8,[`tooltip-props`,`button-props`,`icon`]),H(x)?(M(),G(f,{key:0,grouped:``,"tooltip-props":{value:e.$t(`components.form.tooltip.select_cameras`)},"button-props":{severity:`secondary`},icon:H(ZS),"icon-props":{width:`100%`,height:`100%`},onClick:ge},null,8,[`tooltip-props`,`icon`])):J(``,!0)],64))]),_:1},8,[`force-visible`])):J(``,!0)])}}}),[[`__scopeId`,`data-v-145ef503`]]),mC={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function hC(e,t){return M(),z(`svg`,mC,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M6.5 20q-2.28 0-3.89-1.57Q1 16.85 1 14.58q0-1.95 1.17-3.48q1.18-1.53 3.08-1.95q.63-2.3 2.5-3.72Q9.63 4 12 4q2.93 0 4.96 2.04Q19 8.07 19 11q1.73.2 2.86 1.5q1.14 1.28 1.14 3q0 1.88-1.31 3.19T18.5 20m-12-2h12q1.05 0 1.77-.73q.73-.72.73-1.77t-.73-1.77Q19.55 13 18.5 13H17v-2q0-2.07-1.46-3.54Q14.08 6 12 6Q9.93 6 8.46 7.46Q7 8.93 7 11h-.5q-1.45 0-2.47 1.03Q3 13.05 3 14.5T4.03 17q1.02 1 2.47 1m5.5-6`},null,-1)]])}var gC=W({name:`mdi-cloud-outline`,render:hC}),_C={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function vC(e,t){return M(),z(`svg`,_C,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M20 11v2H8l5.5 5.5l-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5L8 11z`},null,-1)]])}var yC=W({name:`mdi-arrow-left`,render:vC}),bC={viewBox:`0 0 25 24`,width:`1.26em`,height:`1.2em`};function xC(e,t){return M(),z(`svg`,bC,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M25.418 12v.03c0 .543-.156 1.05-.425 1.479l.007-.012a2.77 2.77 0 0 1-1.112 1.021l-.016.007c.108.403.17.865.17 1.343v.018v-.001a6.33 6.33 0 0 1-1.518 4.08l.007-.009a10.2 10.2 0 0 1-4.052 2.936l-.069.024c-1.635.686-3.535 1.085-5.529 1.085L12.728 24h.008l-.146.001c-1.991 0-3.888-.399-5.617-1.121l.096.036a10.26 10.26 0 0 1-4.101-2.944l-.013-.016a6.3 6.3 0 0 1-1.51-4.069v-.007q.002-.707.161-1.366l-.008.04a2.86 2.86 0 0 1-1.156-1.029l-.007-.011a2.8 2.8 0 0 1-.44-1.512c0-.777.314-1.481.823-1.991a2.7 2.7 0 0 1 1.952-.83h.05h-.003h.039c.799 0 1.519.343 2.019.889l.002.002a13.14 13.14 0 0 1 7.296-2.298h.008l1.646-7.39a.48.48 0 0 1 .211-.296l.002-.001a.46.46 0 0 1 .372-.071l-.003-.001l5.234 1.149c.174-.353.435-.639.757-.838l.009-.005c.319-.2.707-.319 1.123-.319c.585 0 1.116.235 1.501.617c.385.369.624.888.624 1.463v.036v-.002v.03c0 .578-.239 1.1-.624 1.472l-.001.001a2.1 2.1 0 0 1-1.504.624a2.12 2.12 0 0 1-1.497-.617a2.03 2.03 0 0 1-.617-1.461v-.038v.002l-4.738-1.05l-1.475 6.694c2.747.02 5.293.865 7.407 2.3l-.047-.03a2.8 2.8 0 0 1 2.031-.865c.78 0 1.486.317 1.997.83c.509.496.825 1.189.825 1.955v.039V12zM5.929 14.822v.032c0 .576.236 1.097.617 1.471a2.02 2.02 0 0 0 1.463.624h.036h-.002a2.13 2.13 0 0 0 2.128-2.128v-.034c0-.575-.239-1.094-.624-1.462l-.001-.001a2.06 2.06 0 0 0-1.471-.617h-.034h.002a2.13 2.13 0 0 0-2.114 2.113v.001zm11.489 5.036a.513.513 0 0 0 0-.738a.48.48 0 0 0-.341-.142h-.014h.001h-.008a.53.53 0 0 0-.361.142a3.54 3.54 0 0 1-1.694.876l-.023.004a9.26 9.26 0 0 1-4.604-.014l.064.014a3.55 3.55 0 0 1-1.721-.882l.002.002a.53.53 0 0 0-.361-.142h-.019a.48.48 0 0 0-.341.142a.47.47 0 0 0-.16.352v.014c0 .146.061.278.16.372a4.2 4.2 0 0 0 1.65.957l.03.008a8 8 0 0 0 1.695.414l.043.005q.666.064 1.29.064t1.29-.064a8.4 8.4 0 0 0 1.796-.437l-.058.019a4.2 4.2 0 0 0 1.685-.966l-.002.002zm-.042-2.908h.034c.575 0 1.094-.239 1.462-.624l.001-.001c.381-.374.617-.895.617-1.471v-.034v.002a2.13 2.13 0 0 0-2.113-2.114h-.033c-.576 0-1.097.236-1.471.617a2.02 2.02 0 0 0-.624 1.463v.036v-.002a2.13 2.13 0 0 0 2.128 2.128z`},null,-1)]])}var SC=W({name:`fontisto-reddit`,render:xC}),CC={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function wC(e,t){return M(),z(`svg`,CC,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M19.27 5.33C17.94 4.71 16.5 4.26 15 4a.1.1 0 0 0-.07.03c-.18.33-.39.76-.53 1.09a16.1 16.1 0 0 0-4.8 0c-.14-.34-.35-.76-.54-1.09c-.01-.02-.04-.03-.07-.03c-1.5.26-2.93.71-4.27 1.33c-.01 0-.02.01-.03.02c-2.72 4.07-3.47 8.03-3.1 11.95c0 .02.01.04.03.05c1.8 1.32 3.53 2.12 5.24 2.65c.03.01.06 0 .07-.02c.4-.55.76-1.13 1.07-1.74c.02-.04 0-.08-.04-.09c-.57-.22-1.11-.48-1.64-.78c-.04-.02-.04-.08-.01-.11c.11-.08.22-.17.33-.25c.02-.02.05-.02.07-.01c3.44 1.57 7.15 1.57 10.55 0c.02-.01.05-.01.07.01c.11.09.22.17.33.26c.04.03.04.09-.01.11c-.52.31-1.07.56-1.64.78c-.04.01-.05.06-.04.09c.32.61.68 1.19 1.07 1.74c.03.01.06.02.09.01c1.72-.53 3.45-1.33 5.25-2.65c.02-.01.03-.03.03-.05c.44-4.53-.73-8.46-3.1-11.95c-.01-.01-.02-.02-.04-.02M8.52 14.91c-1.03 0-1.89-.95-1.89-2.12s.84-2.12 1.89-2.12c1.06 0 1.9.96 1.89 2.12c0 1.17-.84 2.12-1.89 2.12m6.97 0c-1.03 0-1.89-.95-1.89-2.12s.84-2.12 1.89-2.12c1.06 0 1.9.96 1.89 2.12c0 1.17-.83 2.12-1.89 2.12`},null,-1)]])}var TC=W({name:`ic-baseline-discord`,render:wC}),EC={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function DC(e,t){return M(),z(`svg`,EC,[...t[0]||=[L(`path`,{fill:`currentColor`,d:`M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5c.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34c-.46-1.16-1.11-1.47-1.11-1.47c-.91-.62.07-.6.07-.6c1 .07 1.53 1.03 1.53 1.03c.87 1.52 2.34 1.07 2.91.83c.09-.65.35-1.09.63-1.34c-2.22-.25-4.55-1.11-4.55-4.92c0-1.11.38-2 1.03-2.71c-.1-.25-.45-1.29.1-2.64c0 0 .84-.27 2.75 1.02c.79-.22 1.65-.33 2.5-.33s1.71.11 2.5.33c1.91-1.29 2.75-1.02 2.75-1.02c.55 1.35.2 2.39.1 2.64c.65.71 1.03 1.6 1.03 2.71c0 3.82-2.34 4.66-4.57 4.91c.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2`},null,-1)]])}var OC=W({name:`mdi-github`,render:DC}),kC={class:`flex justify-center items-center draggable-region`},AC={class:`card-background border-color relative w-full sm:w-[400px] sm:rounded-2xl sm:border-[1px] shadow-none sm:shadow-xl h-full sm:h-auto sm:my-4`},jC={class:`flex flex-col h-full p-10 non-draggable-region`},MC={class:`flex flex-col items-center justify-center mb-10`},NC={class:`flex justify-between items-center`},PC={class:`flex items-center gap-1 ml-auto`},FC=_n({__name:`CuiAuthCard`,props:{logoUrl:{}},setup(e){return(t,n)=>{let r=mr,i=OC,a=te,o=TC,s=SC;return M(),z(`div`,kC,[L(`div`,AC,[L(`div`,jC,[L(`div`,MC,[K(H(Nn),{src:e.logoUrl,height:`60px`,title:`camera.ui`,"aria-label":`camera.ui`,class:`hover:scale-105 active:scale-105 focus:scale-105 transition-all`},null,8,[`src`]),n[3]||=L(`span`,{class:`text-2xl ml-3 mt-2 font-bold text-color`},`camera.ui`,-1)]),Gt(t.$slots,`default`),K(r,{class:`mt-15`}),L(`div`,NC,[Gt(t.$slots,`footer-left`),L(`div`,PC,[K(a,{severity:`secondary`,class:`cui-icon-md`,text:``,rounded:``,onClick:n[0]||=e=>t.$router.absUrl(`https://github.com/cameraui/camera.ui`,!0)},{icon:F(()=>[K(i,{class:`text-muted`,width:`100%`,height:`100%`})]),_:1}),K(a,{severity:`secondary`,class:`cui-icon-md`,text:``,rounded:``,onClick:n[1]||=e=>t.$router.absUrl(`https://discord.gg/bBGnGcbz8N`,!0)},{icon:F(()=>[K(o,{class:`text-muted`,width:`100%`,height:`100%`})]),_:1}),K(a,{severity:`secondary`,class:`cui-icon-md`,text:``,rounded:``,onClick:n[2]||=e=>t.$router.absUrl(`https://reddit.com/r/cameraui/`,!0)},{icon:F(()=>[K(s,{class:`text-muted`,width:`100%`,height:`100%`})]),_:1})])])]),n[4]||=L(`div`,{class:`bg-primary-500 opacity-0 sm:opacity-100 absolute blur-[20px] w-[200px] h-[30px] left-[50%] -translate-x-[50%] bottom-[25px] -z-1`},null,-1)])])}}});async function IC(){return{available:!1,enrolled:!1}}async function LC(e){return!1}async function RC(e){}async function zC(e,t){return null}var BC=`cui_device_id`,VC=null,HC=null;async function UC(){if(VC)return VC;let e=localStorage.getItem(BC);if(e)return VC=e,e;let t=Ce();return localStorage.setItem(BC,t),VC=t,t}async function WC(){return HC||(HC=GC(navigator.userAgent),HC)}function GC(e){let t=/Edg\//.test(e)?`Edge`:/OPR\//.test(e)||/Opera/.test(e)?`Opera`:/Firefox\//.test(e)?`Firefox`:/Chrome\//.test(e)&&!/Chromium/.test(e)?`Chrome`:/Safari\//.test(e)&&!/Chrome\//.test(e)?`Safari`:`Browser`,n=/Windows NT/.test(e)?`Windows`:/Mac OS X/.test(e)?`macOS`:/Android/.test(e)?`Android`:/iPhone|iPad|iPod/.test(e)?`iOS`:/Linux/.test(e)?`Linux`:``;return n?`${t} on ${n}`:t}var KC=Bn({username:Vn().trim().min(1,`Username is required`),password:Vn().trim().min(1,`Password is required`),rememberMe:Hn().optional()}).strict(),qC=Jn,JC=Un,YC=Kn,XC=Z;function ZC(e){return`requires2fa`in e&&e.requires2fa===!0}async function QC(e){return(await Q.get(`/instances`,{signal:e})).data}async function $C(e){return(await Q.post(`/instances`,e)).data}async function ew({id:e,data:t}){return(await Q.put(`/instances/${e}`,t)).data}async function tw(e){await Q.delete(`/instances/${e}`)}async function nw(e){return(await Q.patch(`/instances/${e}/favorite`)).data}async function rw(e,t){return(await Q.post(`/instances/${e}/login`,t?{code:t}:{})).data}async function iw(e,t){return(await Q.get(`/instances/${e}/status`,{signal:t})).data}var aw=class{_queryClient=Tn();toast=ua();t=sa.global.t;listQuery(){return da({queryKey:[`instances`],queryFn:({signal:e})=>QC(e)})}statusQueries(e){return rn({queries:U(()=>vn(e).map(e=>({queryKey:[`instances`,e.id,`status`],queryFn:({signal:t})=>iw(e.id,t),refetchInterval:15e3,retry:!1})))})}createMutation(){return P({mutationFn:$C,onSuccess:async()=>{await this._queryClient.refetchQueries({queryKey:[`instances`]}),this.toast.add({severity:`success`,detail:this.t(`views.settings.instances.added`),life:3e3})}})}updateMutation(){return P({mutationFn:ew,onSuccess:async()=>{await this._queryClient.refetchQueries({queryKey:[`instances`]}),this.toast.add({severity:`success`,detail:this.t(`views.settings.instances.updated`),life:3e3})}})}deleteMutation(){return P({mutationFn:async e=>{await tw(e),await this._queryClient.cancelQueries({queryKey:[`instances`,e,`status`]}),this._queryClient.removeQueries({queryKey:[`instances`,e,`status`]})},onSuccess:async()=>{await this._queryClient.refetchQueries({queryKey:[`instances`]}),this.toast.add({severity:`success`,detail:this.t(`views.settings.instances.removed`),life:3e3})}})}toggleFavoriteMutation(){return P({mutationFn:nw,onSuccess:async()=>{await this._queryClient.refetchQueries({queryKey:[`instances`]})}})}loginMutation(){return P({mutationFn:e=>rw(e),onError:()=>{}})}},ow={class:`flex flex-col gap-6`},sw={class:`text-muted`},cw={class:`flex flex-col gap-2 justify-center items-center mt-2`},lw={class:`cui-label`},uw=_n({__name:`InstanceTwoFactorPrompt`,props:{instanceName:{}},setup(e,{expose:t}){let{instanceName:n}=Sn(e),r=B(``),i=U(()=>r.value.length<6);async function a(){return r.value.length<6?null:r.value}return t({isDisabled:i,onConfirm:a}),(e,t)=>{let i=br;return M(),z(`div`,ow,[L(`p`,sw,R(e.$t(`instances.two_factor_hint`,{name:H(n)})),1),L(`div`,cw,[L(`label`,lw,R(e.$t(`views.settings.security.enter_code`)),1),K(i,{modelValue:H(r),"onUpdate:modelValue":t[0]||=e=>Dn(r)?r.value=e:null,length:6,"integer-only":``,class:`justify-center`},null,8,[`modelValue`])])])}}}),dw=3e4,fw=5e3,pw=`__home__`,mw=new Set([`localhost`,`127.0.0.1`,`::1`]),$=In(`Instances`);async function hw(e,t){try{let n=AbortSignal.timeout(fw),r=t?AbortSignal.any([n,t]):n,i=await fetch(`${e}/api/health`,{signal:r});return $.debug(`[probe]`,`${e} → ${i.ok?`OK`:`HTTP ${i.status}`}`),i.ok}catch(t){let n=t instanceof Error?t.message:String(t);return $.debug(`[probe]`,`${e} → FAIL`,n),!1}}function gw(e){return{access:e.access_token,accessExpiresAt:e.access_token_expires_at,refresh:e.refresh_token,refreshExpiresAt:e.refresh_token_expires_at}}function _w(e,t){return{_id:t?._id??``,username:t?.username??``,email:t?.email,role:t?.role??``,firstLogin:t?.firstLogin,avatar:t?.avatar,language:`auto`,access_token:e.access,refresh_token:e.refresh??``,token_type:`Bearer`,access_token_expires_at:e.accessExpiresAt??0,refresh_token_expires_at:e.refreshExpiresAt??0,internalAddresses:[],externalAddresses:[]}}var vw=$n(`instances`,()=>{let e=eE(),t=ua(),n=jv(),r=Tn(),{t:i}=sa.global,a=ce(`instanceTokens`,{}),o=ce(`activeInstanceId`,null),s=B(!1),c=B(null),l=B(0),u=0,d=B(null),f=B([]),p=$e(`redirectInfo`,null,{serializer:{read:e=>e?JSON.parse(e):null,write:e=>JSON.stringify(e)}}),m=U(()=>o.value===null),h=U(()=>o.value===null?null:f.value.find(e=>e.id===o.value)?.url??null);async function g(){try{if(!$l(void 0,`admin`))return;let e=await QC();f.value=e.instances,d.value=e.homeId,$.debug(`[fetch]`,`loaded ${e.instances.length} instances`,{homeId:e.homeId})}catch(e){$.warn(`[fetch]`,`failed`,e)}}let _=U(()=>{let e=d.value;return f.value.filter(t=>!(e&&t.remoteHomeId&&t.remoteHomeId===e)).map(e=>{let t=a.value[e.id];return{id:e.id,name:e.name,url:e.url,hasCredentials:!!e.credentials,favorite:e.favorite??!0,userData:t?.userData??null,lastConnectedAt:t?.lastConnectedAt??null,isHome:!1}})});function v(){let e=a.value[pw],t=o.value===null?ei().target.value?.endpoint.url??e?.url??window.location.origin:e?.url??window.location.origin;return{id:`home`,name:i(`navigation.home`),url:t,hasCredentials:!1,favorite:!1,userData:e?.userData??null,lastConnectedAt:e?.lastConnectedAt??null,isHome:!0}}let y=U(()=>{if(o.value!==null){let e=_.value.find(e=>e.id===o.value);if(e)return e}return v()}),b=U(()=>_.value.filter(e=>e.favorite)),x=U(()=>b.value.length>0||o.value!==null||p.value!==null);function S(e){return f.value.find(t=>t.id===e)?.favorite??!0}async function C(e){let{favorite:t}=await nw(e),n=f.value.find(t=>t.id===e);n&&(n.favorite=t)}async function w(e){let t=await $C(e);return f.value=[...f.value,t],t}async function T(e){await tw(e),f.value=f.value.filter(t=>t.id!==e),delete a.value[e]}async function ee(e,t){let n=await ew({id:e,data:t}),r=f.value.findIndex(t=>t.id===e);r!==-1&&(f.value[r]=n)}async function E(e,t){let n=f.value.find(t=>t.id===e);return n?hw(n.url,t):!1}function te(){let t=ei().target.value;if(!t?.tokens.access){$.debug(`[save-tokens]`,`skipped — no live access token`);return}let n=o.value??pw;a.value[n]={userData:_w(t.tokens,e.user??void 0),lastConnectedAt:Date.now(),url:t.endpoint.url},$.debug(`[save-tokens]`,`slot=${n} url=${t.endpoint.url}`)}function ne(){if(o.value===null){Xr.value=null,$.debug(`[restore-override]`,`no active instance — home target`);return}let e=a.value[o.value],t=e?.url??e?.userData?.internalAddresses?.[0]??e?.userData?.externalAddresses?.[0]??null;Xr.value=t,$.debug(`[restore-override]`,`activeId=${o.value} → ${t??`no cached url`}`)}async function D(n){if(s.value){$.warn(`[switch]`,`ignored — another switch is already in progress`);return}let d=n===null?v():_.value.find(e=>e.id===n)??v();if(n!==null&&re(d.url)&&!await oe(d.name)){$.debug(`[switch]`,`URL handoff declined by user`);return}let f=++u;s.value=!0,c.value=d.name,$.debug(`[switch]`,`START targetId=${n??`home`} gen=${f}`),$.debug(`[switch]`,`target resolved — name="${d.name}" url=${d.url} hasCreds=${d.hasCredentials}`);try{if(n!==null){let e=await hw(d.url);if(f!==u){$.debug(`[switch]`,`aborted after probe — newer gen=${u}`);return}if(!e){$.warn(`[switch]`,`target unreachable — ${d.url}`),t.add({severity:`warn`,detail:i(`instances.unreachable`,{name:d.name}),life:3e3});return}}let c=null;if(n!==null&&d.hasCredentials)try{let e=await rw(n);if(ZC(e)){$.debug(`[switch]`,`remote requires 2FA — prompting for code`),s.value=!1;let t=await ie(n,d.name);if(f!==u)return;if(s.value=!0,!t){$.debug(`[switch]`,`2FA prompt cancelled — aborting switch`);return}e=t}ZC(e)||(c=e,$.debug(`[switch]`,`backend relay login OK`))}catch(e){$.warn(`[switch]`,`backend relay login FAILED — will try cached tokens`,e)}if(f!==u){$.debug(`[switch]`,`aborted after relay-login — newer gen=${u}`);return}te();let p=n??pw,m=c?gw(c):O(p);if($.debug(`[switch]`,`tokens source: ${c?`fresh`:m?`cached`:`none`} (slot=${p})`),n!==null&&re(d.url)){$.debug(`[switch]`,`URL handoff required — leaving SPA`),await se(d,c);return}let h=ei();if(h.reset(),$.debug(`[switch]`,`kernel RESET`),xt(),Oe(),Fe(),r.clear(),$.debug(`[switch]`,`vue-query cleared`),o.value=n,Xr.value=n===null?null:d.url,$.debug(`[switch]`,`activeId=${n} instanceOverride=${Xr.value??`null`}`),m&&c&&(a.value[p]={userData:c,lastConnectedAt:Date.now(),url:d.url},e.user={_id:c._id,username:c.username,role:c.role,firstLogin:c.firstLogin,avatar:c.avatar}),m){let e={url:d.url,mode:`direct-lan`,priority:0};$.debug(`[switch]`,`seedAndRetry → ${e.url}`),await Promise.race([h.seedAndRetry({endpoint:e,tokens:m},n??`home`),new Promise((e,t)=>setTimeout(()=>t(Error(`switch_timeout`)),dw))])}else{$.warn(`[switch]`,`no tokens — boot + route to login`),h.boot(n??`home`),e.user=null,qT.push(`/`);return}if(f!==u){$.debug(`[switch]`,`aborted after seedAndRetry — newer gen=${u}`);return}l.value++;let g=WT();$.debug(`[switch]`,`DONE gen=${f} → ${g}`),qT.push(g)}catch(e){(e instanceof Error?e.message:String(e))===`switch_timeout`?($.error(`[switch]`,`TIMEOUT after ${dw}ms`),t.add({severity:`error`,detail:i(`instances.switch_timeout`,{name:c.value??``}),life:3e3})):($.error(`[switch]`,`failed`,e),t.add({severity:`error`,detail:e,life:3e3}))}finally{f===u&&(s.value=!1,c.value=null)}}function O(e){let t=a.value[e];return t?.userData?.access_token?gw(t.userData):null}function re(e){try{let t=new URL(e),n=new URL(window.location.origin),r=n.protocol===`https:`&&t.protocol===`http:`,i=mw.has(t.hostname)&&!mw.has(n.hostname);return r||i}catch{return!1}}function k(e){return new Promise(t=>{let r=!1,a=e=>{r||(r=!0,t(e))};n.openComponentDialog(uw,{data:{title:i(`instances.two_factor_title`),confirmText:i(`views.login.2fa_verify`),contentProps:{instanceName:e}},onConfirm:async e=>a(e??null),onCancel:async()=>a(null)})})}async function ie(e,n){for(;;){let r=await k(n);if(!r)return null;try{let t=await rw(e,r);if(!ZC(t))return t}catch(e){$.warn(`[2fa]`,`verification failed`,e),t.add({severity:`error`,detail:i(`instances.two_factor_failed`),life:3e3})}}}async function ae(e,n){return await ie(e,n)?(t.add({severity:`success`,detail:i(`instances.two_factor_completed`,{name:n}),life:3e3}),await g().catch(()=>{}),!0):!1}function oe(e){return $.warn(`[switch]`,`target "${e}" requires URL handoff — asking user confirmation`),new Promise(t=>{let r=!1,a=e=>{r||(r=!0,t(e))};n.openTextDialog({data:{title:i(`instances.insecure_handoff_title`),confirmText:i(`instances.insecure_handoff_confirm`),contentText:i(`instances.insecure_handoff_message`,{name:e}),confirmButtonProps:{severity:`danger`}},onConfirm:()=>a(!0),onCancel:()=>a(!1)})})}async function se(e,t){let n={_reset:!0,_sourceUrl:window.location.origin,_instanceName:e.name};t&&Object.assign(n,t);let r=encodeURIComponent(btoa(JSON.stringify(n))),i=`${e.url.split(`#`)[0]}#auth=${r}`;$.debug(`[url-handoff]`,`→ ${e.url} (with token=${t?`yes`:`no`})`),window.location.href=i}function le(){a.value={},o.value=null,Xr.value=null,p.value=null,f.value=[],d.value=null,$.debug(`[reset]`,`store cleared`)}return{instances:_,activeInstance:y,activeId:o,activeUrl:h,isHomeActive:m,isMultiInstance:x,isSwitching:On(s),switchTargetName:On(c),switchKey:On(l),serverHomeId:d,redirectInfo:p,serverInstances:f,instanceTokens:a,favoriteInstances:b,isFavorite:S,toggleFavorite:C,fetchInstances:g,addInstance:w,removeInstance:T,updateInstance:ee,switchInstance:D,probeInstance:E,complete2FALogin:ae,reset:le,saveCurrentTokens:te,restoreActiveOverride:ne}}),yw={key:`connecting`,class:`flex flex-col items-center justify-center h-full gap-4`},bw={class:`text-muted text-sm text-center`},xw={class:`flex flex-col gap-10 sm:gap-6 w-full mt-10 sm:mt-0`},Sw={for:`username`,class:`cui-label`},Cw={for:`password`,class:`cui-label`},ww={class:`flex flex-col gap-6 mt-10`},Tw={class:`flex items-center field-checkbox-gap`},Ew={for:`rememberMe`,class:`cui-label-checkbox`},Dw={key:`2fa`,class:`flex flex-col h-full`},Ow={class:`flex flex-col items-center text-center mt-10 sm:mt-0`},kw={class:`text-lg font-semibold mb-2`},Aw={class:`text-muted text-sm`},jw={class:`flex flex-col items-center mt-10`},Mw={class:`flex flex-col gap-3 mt-auto pt-10`},Nw=6,Pw=8,Fw=Dl(_n({__name:`Login`,setup(e){In();let t=ua();jv();let{t:n}=E(),r=bE(),i=ta(),{isNeedsAuth:o,isOnline:s,inTrouble:c}=i,l=eE(),{loginLoading:u,requires2FA:d}=rr(l),f=vw(),p=Ut(`formRef`),m=B(``),h=B(``),g=B(!1),_=B(``),v=B(``),y=B(!1),b=B(!1),x=B(!1);B(!1);let S=U(()=>!f.isHomeActive||f.redirectInfo!==null),C=U(()=>y.value?v.value.trim().length===Pw:_.value.length===Nw),w=U(()=>r===`cloud`&&f.isHomeActive),T=U(()=>!s.value&&!o.value&&!u.value&&!d.value),ee=U(()=>c.value?n(`connection.unreachable`):n(`connection.connecting_remote`)),ne=U(()=>!1);function D(){i.retry()}function O(){if(f.redirectInfo){let e=f.redirectInfo.sourceUrl;f.redirectInfo=null,window.location.href=e;return}f.switchInstance(null)}async function ie(e){try{let[t,n]=await Promise.all([UC(),WC()]);return await l.login({username:e.username,password:e.password,kind:`web`,persistent:g.value,device:{id:t,name:n}}),!0}catch(e){return t.add({severity:`error`,detail:e,life:3e3}),!1}}async function ae(){await ie({username:m.value,password:h.value})&&await ce({username:m.value,password:h.value})}async function oe(){let e=await se();if(e){b.value=!0;try{let t=await zC(e,n(`views.login.biometric_reason`));if(!t)return;m.value=t.username,h.value=t.password,await ie(t)||(await RC(e),x.value=!1)}finally{b.value=!1}}}async function se(){return null}async function ce(e){}async function le(){window.location.href=pi}function ue(){y.value=!y.value,_.value=``,v.value=``}async function de(){if(C.value)try{await l.verify2FA(y.value?v.value.trim():_.value)}catch(e){t.add({severity:`error`,detail:mE(e)??n(`views.login.2fa_invalid_code`),life:3e3}),_.value=``,v.value=``}}function fe(){l.cancel2FA(),_.value=``,v.value=``,y.value=!1}return yn(async()=>{}),(e,t)=>{let n=yC,r=te,i=gC,o=re,s=Ze,l=pr,f=yr,x=k,E=$s,ie=br,se=a;return M(),G(FC,{"logo-url":H(oE)(`logo_animated.svg`)},Y({default:F(()=>[K(En,{name:`slide-fade`,mode:`out-in`},{default:F(()=>[H(T)?(M(),z(`div`,yw,[K(o,{"stroke-width":`4`,class:`!w-12 !h-12`}),L(`p`,bw,R(H(ee)),1),H(c)?(M(),G(r,{key:0,size:`small`,severity:`secondary`,label:e.$t(`connection.retry`),onClick:D},null,8,[`label`])):J(``,!0)])):H(d)?on((M(),z(`div`,Dw,[L(`div`,Ow,[L(`h2`,kw,R(e.$t(`views.login.2fa_title`)),1),L(`p`,Aw,R(H(y)?e.$t(`views.login.2fa_backup_description`):e.$t(`views.login.2fa_description`)),1)]),L(`div`,jw,[H(y)?(M(),G(s,{key:1,modelValue:H(v),"onUpdate:modelValue":t[4]||=e=>Dn(v)?v.value=e:null,size:`large`,autocapitalize:`characters`,autocomplete:`one-time-code`,spellcheck:`false`,maxlength:Pw,placeholder:e.$t(`views.login.2fa_backup_placeholder`),class:`text-center font-mono tracking-[0.3em] uppercase`,onKeyup:Qt(de,[`enter`])},null,8,[`modelValue`,`placeholder`])):(M(),G(ie,{key:0,modelValue:H(_),"onUpdate:modelValue":t[3]||=e=>Dn(_)?_.value=e:null,length:Nw,"integer-only":``,size:`large`,onComplete:de},null,8,[`modelValue`])),K(r,{severity:`secondary`,text:``,size:`small`,class:`mt-4 text-xs`,label:H(y)?e.$t(`views.login.2fa_use_app`):e.$t(`views.login.2fa_backup_hint`),onClick:ue},null,8,[`label`])]),L(`div`,Mw,[K(r,{class:`text-white font-semibold cui-button-large`,loading:H(u),disabled:!H(C),label:e.$t(`views.login.2fa_verify`),fluid:``,onClick:de},null,8,[`loading`,`disabled`,`label`]),K(r,{severity:`secondary`,class:`cui-button-large`,text:``,label:e.$t(`components.form.button.cancel`),fluid:``,onClick:fe},null,8,[`label`])])])),[[se]]):(M(),G(H(un),{key:`login`,ref_key:`formRef`,ref:p,"validation-schema":H(KC),class:`flex flex-col h-full`,onSubmit:ae},{default:F(()=>[L(`div`,xw,[K(H(Pn),{modelValue:H(m),"onUpdate:modelValue":t[0]||=e=>Dn(m)?m.value=e:null,modelModifiers:{trim:!0},name:`username`,as:`div`,class:`flex flex-col field-gap`},{default:F(({field:t,errors:n})=>[L(`label`,Sw,R(e.$t(`components.form.label.username`)),1),K(l,null,{default:F(()=>[K(s,Mn({invalid:n.length>0,type:`text`,size:`large`,loading:H(u)},t),null,16,[`invalid`,`loading`])]),_:2},1024),K(En,{name:`fade`},{default:F(()=>[K(H(kn),{name:`username`,class:`cui-input-error`})]),_:1})]),_:1},8,[`modelValue`]),K(H(Pn),{modelValue:H(h),"onUpdate:modelValue":t[1]||=e=>Dn(h)?h.value=e:null,name:`password`,as:`div`,class:`flex flex-col field-gap`},{default:F(({field:t,errors:n})=>[L(`label`,Cw,R(e.$t(`components.form.label.password`)),1),K(l,null,{default:F(()=>[K(f,Mn({invalid:n.length>0,size:`large`,loading:H(u),feedback:!1,"toggle-mask":``},t),null,16,[`invalid`,`loading`])]),_:2},1024),K(En,{name:`fade`},{default:F(()=>[K(H(kn),{name:`password`,class:`cui-input-error`})]),_:1})]),_:1},8,[`modelValue`])]),L(`div`,ww,[H(!1)?J(``,!0):(M(),G(H(Pn),{key:0,"model-value":H(g),name:`rememberMe`,type:`checkbox`,"checked-value":!0,"unchecked-value":!1,as:`div`,class:`flex flex-col field-gap`},{default:F(({field:n,errors:r})=>[L(`div`,Tw,[K(x,Mn({"model-value":H(g)},n,{invalid:r.length>0,class:`mr-2`,binary:``,loading:H(u),onValueChange:t[2]||=e=>g.value=e}),null,16,[`model-value`,`invalid`,`loading`]),L(`label`,Ew,R(e.$t(`components.form.label.remember_me`)),1)]),K(En,{name:`fade`},{default:F(()=>[K(H(kn),{name:`rememberMe`,class:`cui-input-checkbox-error`})]),_:1})]),_:1},8,[`model-value`])),K(r,{type:`submit`,class:`text-white font-semibold cui-button-large`,loading:H(u),label:e.$t(`components.form.button.login`),fluid:``},null,8,[`loading`,`label`]),H(ne)?(M(),G(r,{key:1,type:`button`,severity:`secondary`,class:`cui-button-large`,text:``,loading:H(b),label:e.$t(`components.form.button.biometric_login`),fluid:``,onClick:oe},{icon:F(()=>[K(E,{class:`w-5 h-5 mr-2`})]),_:1},8,[`loading`,`label`])):J(``,!0)])]),_:1},8,[`validation-schema`]))]),_:1})]),_:2},[H(S)||H(w)?{name:`footer-left`,fn:F(()=>[H(S)?(M(),G(r,{key:0,severity:`secondary`,text:``,size:`small`,class:`text-muted`,label:e.$t(`components.instance_switcher.go_back`),onClick:O},{icon:F(()=>[K(n,{class:`w-4 h-4`})]),_:1},8,[`label`])):(M(),G(r,{key:1,severity:`secondary`,text:``,size:`small`,class:`text-muted`,label:e.$t(`views.login.pick_server`),onClick:le},{icon:F(()=>[K(i,{class:`w-4 h-4`})]),_:1},8,[`label`]))]),key:`0`}:void 0]),1032,[`logo-url`])}}}),[[`__scopeId`,`data-v-65d1a94f`]]),Iw=$n(`routerState`,()=>{let e=B(!0),t=B(),n=B(),r=B(),i=B(),a=B(!1);function o(e,a){r.value=t.value,i.value=n.value,t.value=e,n.value=a}return{routerLoading:e,routeFrom:t,routeTo:n,previousRouteFrom:r,previousRouteTo:i,isTransitioning:a,setRoutes:o}}),Lw=`false`,Rw=`false`,zw=Lw===`true`,Bw=Rw===`true`;function Vw(e={}){let{immediate:t=!1,onNeedReload:n,onNeedRefresh:r,onOfflineReady:i,onRegistered:a,onRegisteredSW:o,onRegisterError:s}=e,c,l,u,d=async(e=!0)=>{await l,zw||u?.()};async function f(){if(`serviceWorker`in navigator){if(c=await N(async()=>{let{Workbox:e}=await import(`./workbox-window.prod.es5-Dlqax_Po.js`);return{Workbox:e}},__vite__mapDeps([14,1,2]),import.meta.url).then(({Workbox:e})=>new e(`./sw.js`,{scope:`./`,type:`classic`})).catch(e=>{s?.(e)}),!c)return;if(u=()=>{c?.messageSkipWaiting()},!Bw)if(zw)c.addEventListener(`activated`,e=>{(e.isUpdate||e.isExternal)&&(n?n():window.location.reload())}),c.addEventListener(`installed`,e=>{e.isUpdate||i?.()});else{let e=!1,t=()=>{e=!0,c?.addEventListener(`controlling`,e=>{e.isUpdate&&(n?n():window.location.reload())}),r?.()};c.addEventListener(`installed`,n=>{n.isUpdate===void 0?n.isExternal===void 0?!e&&i?.():n.isExternal?t():!e&&i?.():n.isUpdate||i?.()}),c.addEventListener(`waiting`,t)}c.register({immediate:t}).then(e=>{o?o(`./sw.js`,e):a?.(e)}).catch(e=>{s?.(e)})}}return l=f(),d}function Hw(e={}){let{immediate:t=!0,onNeedReload:n,onNeedRefresh:r,onOfflineReady:i,onRegistered:a,onRegisteredSW:o,onRegisterError:s}=e,c=B(!1),l=B(!1);return{updateServiceWorker:Vw({immediate:t,onNeedReload:n,onNeedRefresh(){c.value=!0,r?.()},onOfflineReady(){l.value=!0,i?.()},onRegistered:a,onRegisteredSW:o,onRegisterError:s}),offlineReady:l,needRefresh:c}}var Uw=`updateChannel`;`${pi}`;var Ww=ce(Uw,`production`);async function Gw(){}function Kw(){return{channel:Ww,isBeta:U(()=>Ww.value===`beta`),ensureLoaded:async()=>{},setChannel:async e=>{e!==Ww.value&&(Ww.value=e,await Gw())}}}var qw=In(`AppUpdate`),Jw=36e5,Yw=`cui-sw-updated`,Xw=B(!1),Zw=B(!1),Qw=async()=>{},$w;async function eT(){if(!(!$w||$w.installing||!navigator.onLine))try{await $w.update()}catch{}}async function tT(){if(!(Zw.value||!Xw.value)){Zw.value=!0;try{await Qw()}catch(e){qw.error(`apply failed`,e),Zw.value=!1}}}function nT(){return{updateAvailable:Xw,isApplying:Zw,applyUpdate:tT}}function rT(){!Xw.value||Zw.value||tT()}function iT(){Ma()||aT()}function aT(){let{t:e}=sa.global,t=ua(),{needRefresh:n,updateServiceWorker:r}=Hw({immediate:!0,onRegisteredSW(e,t){$w=t,$w&&setInterval(()=>eT(),Jw)}});we(document,`visibilitychange`,()=>{document.visibilityState===`visible`&&eT()});let i=ta();if(q(()=>i.isOnline.value,(e,t)=>{e&&!t&&eT()}),q(n,e=>{e&&(Qw=async()=>{sessionStorage.setItem(Yw,`1`);let e=!1,t=()=>{e||(e=!0,window.location.reload())};navigator.serviceWorker?.addEventListener(`controllerchange`,t,{once:!0}),await r(!1),setTimeout(t,2e4)},Xw.value=!0)}),sessionStorage.getItem(Yw)){sessionStorage.removeItem(Yw);let n=new MutationObserver(()=>{document.querySelector(`[data-sonner-toaster]`)&&(n.disconnect(),t.add({severity:`success`,summary:e(`components.toast.title_success`),detail:e(`components.toast.update_installed_detail`),life:3e3}))});n.observe(document.body,{childList:!0,subtree:!0})}}var oT=()=>N(()=>import(`./404-pb2fRn1r.js`),__vite__mapDeps([15,9,2,1,16]),import.meta.url),sT=()=>N(()=>import(`./FirstSteps-DWT6Tt_T.js`),__vite__mapDeps([17,9,2,1,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34]),import.meta.url),cT=()=>N(()=>import(`./Cameras-C0oHuoTR.js`),__vite__mapDeps([35,9,2,1,18,25,36,20,37,38,19,30,39,40,41,26,27,28,42,43,44,45]),import.meta.url),lT=()=>N(()=>import(`./Sensors-Vwr7MYz6.js`),__vite__mapDeps([46,9,2,1,19,20,37,47,48,26,27,28,49,50,51,52,53,54,43,55,56,44,57,58]),import.meta.url),uT=()=>N(()=>import(`./Camera-BfvpjkW3.js`),__vite__mapDeps([59,9,2,1,18,19,20,60,61,62,63]),import.meta.url),dT=()=>N(()=>import(`./Camview-DArvg940.js`),__vite__mapDeps([64,9,2,1,18,19,20,65,37,66,40,67,61,62,68,69,42,70,71,72,73]),import.meta.url),fT=()=>N(()=>import(`./Recordings-AD78njIA.js`),__vite__mapDeps([74,9,2,1,20,42,75,18,76,55,77,78]),import.meta.url),pT=()=>N(()=>import(`./Faces-BeeZrFV-.js`),__vite__mapDeps([79,9,2,1,20,37,80,67,54,43,56]),import.meta.url),mT=()=>N(()=>import(`./Plugins-CQJhji6o.js`),__vite__mapDeps([81,9,2,1,19,20,37,80,26,27,28,50,82,83,84,85,86,87,88,89,90,91,92,13,93,54,43,55,56,94,36,25,95,96,97,98,99,57]),import.meta.url),hT=()=>N(()=>import(`./Plugin-8dbt_8iG.js`),__vite__mapDeps([100,9,2,1,18,36,25,52,19,20,38,37,30,39,80,101,102,40,103,4,5,6,54,94,92,13,95,96,97,98,99,104]),import.meta.url),gT=()=>N(()=>import(`./Adminpanel-BtQdiyre.js`),__vite__mapDeps([105,9,2,1,36,25,22,23,80,32,54,106,19,20,30,27,107,108]),import.meta.url),_T=()=>N(()=>import(`./Config-Ccp5Acpv.js`),__vite__mapDeps([109,2,9,1,18,19,20,22,23,30,93,54,60,68,37,69,42,70,110]),import.meta.url),vT=()=>N(()=>import(`./Logs-8onUmCYX.js`),__vite__mapDeps([111,9,2,1,19,20,22,80,50,8,10,11,12,13,54,60,68,37,69,42,70,112,113]),import.meta.url),yT=()=>N(()=>import(`./Terminal-DuJHIlLe.js`),__vite__mapDeps([114,9,2,1,18,19,20,10,11,54,55,60,68,37,69,42,70,113,115]),import.meta.url),bT=()=>N(()=>import(`./Automations-DBjwNb3F.js`),__vite__mapDeps([116,9,2,1,19,20,37,117,118,52,83,119,120,121,122,50,123,54,43,56]),import.meta.url),xT=()=>N(()=>import(`./Automation-DOiLJcU_.js`),__vite__mapDeps([124,9,2,1,19,20,37,49,117,118,52,83,119,120,121,125,36,25,122,126,127,128,129,54,43,130,55,131]),import.meta.url),ST=()=>N(()=>import(`./Instances-CJlFo8ni.js`),__vite__mapDeps([132,9,2,1,20,37,50,54,43,56,97,133]),import.meta.url),CT=()=>N(()=>import(`./Workers-fV_NEZ7U.js`),__vite__mapDeps([134,9,2,1,20,135,80,26,19,27,28,54,106,30,107,108,133,98,136]),import.meta.url),wT=()=>N(()=>import(`./Settings-8yG5ny5r.js`),__vite__mapDeps([137,9,2,1,19,54,77,138]),import.meta.url),TT=()=>N(()=>import(`./Menu-DP0aMICW.js`),__vite__mapDeps([139,9,2,1,19,140,102,141]),import.meta.url),ET=()=>N(()=>import(`./About-eljMnDub.js`),__vite__mapDeps([142,9,2,1,20,135,143,18,54]),import.meta.url),DT=()=>N(()=>import(`./Console-C6yUdEaM.js`),__vite__mapDeps([144,9,2,1,20,145,50,54,68,37,69,42,70,112]),import.meta.url),OT=()=>N(()=>import(`./SettingsAccount-BBsivYFf.js`),__vite__mapDeps([146,24,9,2,1,25,19,20,26,27,28,29,18,30,31,32,33]),import.meta.url),kT=()=>N(()=>import(`./SettingsAppearance-Qh1cw9iX.js`),__vite__mapDeps([147,34,9,2,1,19,20,30]),import.meta.url),AT=()=>N(()=>import(`./SettingsBackup-DNDDU6a1.js`),__vite__mapDeps([148,9,2,1,20,21,22,23,48,103,90,149]),import.meta.url),jT=()=>N(()=>import(`./SettingsRecordings-B4DDJSKe.js`),__vite__mapDeps([150,9,2,1,20,38,18,36,25,19,37,30,39,26,27,28,151,107,95,96]),import.meta.url),MT=()=>N(()=>import(`./SettingsRemote-Bib7kXto.js`),__vite__mapDeps([152,9,2,1,18,36,25,20,22,29,30,19,31,153]),import.meta.url),NT=()=>N(()=>import(`./SettingsMqtt-BYVV1Mew.js`),__vite__mapDeps([154,9,2,1,36,25,20,155]),import.meta.url),PT=()=>N(()=>import(`./SettingsList-tFKUMnsB.js`),__vite__mapDeps([156,9,2,1,141]),import.meta.url),FT=()=>N(()=>import(`./SettingsSystem-DIe7CSgH.js`),__vite__mapDeps([157,9,2,1,18,20,22,23,135,143]),import.meta.url),IT=()=>N(()=>import(`./SettingsUsers-BtT17FNe.js`),__vite__mapDeps([158,9,2,1,18,20,67,26,19,27,28]),import.meta.url),LT=()=>N(()=>import(`./SettingsNotifications-BVGmt0eF.js`),__vite__mapDeps([159,9,2,1,18,20,160,67,26,19,27,28,161]),import.meta.url),RT=()=>N(()=>import(`./SettingsPermissions-BPqDIjVt.js`),__vite__mapDeps([162,9,2,1,20,161,18]),import.meta.url),{smBreakpoint:zT}=vl(),BT=[{name:`NotFound`,path:`/:pathMatch(.*)*`,component:oT,meta:{name:`notfound`,auth:{requiresAuth:!1,role:`none`}}},{name:`Login`,path:`/login`,alias:`/`,component:Fw,meta:{name:`login`,auth:{requiresAuth:!1,role:`none`},ui:{background:U(()=>zT.value?`var(--card-background)`:void 0)}}},{name:`FirstSteps`,path:`/first-steps`,component:sT,meta:{name:`firststeps`,auth:{requiresAuth:!0,role:`user`}}},{name:`Home`,path:`/home`,component:pC,meta:{name:`home`,auth:{requiresAuth:!0,role:`user`},ui:{containerSettings:{showTitle:!0,padding:!0,allowOverflowX:!0},showNavbar:!0,showTopbar:!0,showBottombar:!0,showRouterLoading:!0},navbar:{position:`top`,icon:{default:ks,active:Ms}},bottombar:{icon:{default:ks,active:Ms}}}},{name:`Cameras`,path:`/cameras`,component:cT,meta:{name:`cameras`,auth:{requiresAuth:!0,role:`admin`},ui:{containerSettings:{showTitle:!0,padding:!0},showNavbar:!0,showTopbar:!0,showBottombar:!0,showRouterLoading:!0},navbar:{position:`top`,icon:{default:yo,active:jo}},bottombar:{icon:{default:yo,active:jo}}}},{name:`Sensors`,path:`/sensors`,component:lT,meta:{name:`sensors`,auth:{requiresAuth:!0,role:`admin`},ui:{containerSettings:{showTitle:!0,padding:!0},showNavbar:!0,showTopbar:!0,showBottombar:!0,showRouterLoading:!0},navbar:{position:`top`,icon:{default:So,active:To}},menu:{icon:{default:So,active:To}}}},{name:`Camera`,path:`/cameras/:cameraname`,component:uT,meta:{name:`camera`,auth:{requiresAuth:!0,role:`user`},ui:{containerSettings:{disableScroll:!0,ignoreSafeAreaBottom:U(()=>zT.value),noExtraPadding:U(()=>zT.value)},showNavbar:!0,showTopbar:U(()=>!zT.value),showBottombar:U(()=>!zT.value),showRouterLoading:!0}}},{name:`Camview`,path:`/camview`,component:dT,meta:{name:`camview`,auth:{requiresAuth:!0,role:`user`},ui:{containerSettings:{disableScroll:!0},background:`#000000`,showNavbar:!0,showTopbar:!0,showBottombar:!0,showRouterLoading:!0},navbar:{position:`top`,icon:{default:Cc,active:bc}},bottombar:{icon:{default:Cc,active:bc}}}},{name:`Recordings`,path:`/recordings`,component:fT,meta:{name:`recordings`,auth:{requiresAuth:!0,role:`user`},ui:{containerSettings:{showTitle:!1,padding:!1},showNavbar:!0,showTopbar:!0,showBottombar:!0,showRouterLoading:!0},navbar:{position:`top`,icon:{default:kc,active:Ec}},bottombar:{icon:{default:kc,active:Ec}}}},{name:`About`,path:`/about`,component:ET,meta:{name:`about`,auth:{requiresAuth:!0,role:`user`},ui:{containerSettings:{showTitle:!0,padding:!0},showNavbar:!0,showTopbar:!0,showBottombar:!0,showRouterLoading:!0}}},{name:`Faces`,path:`/faces`,component:pT,meta:{name:`faces`,auth:{requiresAuth:!0,role:`admin`},ui:{containerSettings:{showTitle:!0,padding:!0},showNavbar:!0,showTopbar:!0,showBottombar:!0,showRouterLoading:!0},menu:{icon:{default:$s,active:$s}},navbar:{position:`top`,icon:{default:$s,active:$s}}}},{name:`Plugins`,path:`/plugins`,component:mT,meta:{name:`plugins`,auth:{requiresAuth:!0,role:`admin`},ui:{containerSettings:{showTitle:!0,padding:!0},showNavbar:!0,showTopbar:!0,showBottombar:!0,showRouterLoading:!0},navbar:{position:`top`,icon:{default:qc,active:Xc}},menu:{icon:{default:qc,active:Xc}}}},{name:`ScopedPlugin`,path:`/plugins/:scope/:pluginname`,component:hT,meta:{name:`plugin`,auth:{requiresAuth:!0,role:`admin`},ui:{containerSettings:{padding:!0},showNavbar:!0,showTopbar:!0,showBottombar:!0,showRouterLoading:!0}}},{name:`Plugin`,path:`/plugins/:pluginname`,component:hT,meta:{name:`plugin`,auth:{requiresAuth:!0,role:`admin`},ui:{containerSettings:{padding:!0},showNavbar:!0,showTopbar:!0,showBottombar:!0,showRouterLoading:!0}}},{name:`Adminpanel`,path:`/admin`,component:gT,meta:{name:`adminpanel`,auth:{requiresAuth:!0,role:`admin`},ui:{containerSettings:{showTitle:!0,padding:!0},showNavbar:!0,showTopbar:!0,showBottombar:!0,showRouterLoading:!0},navbar:{position:`bottom`,group:`more`,icon:{default:Wc,active:Vc}},menu:{icon:{default:Wc,active:Vc}}}},{name:`Config`,path:`/config`,component:_T,meta:{name:`config`,auth:{requiresAuth:!0,role:`admin`},ui:{containerSettings:{disableScroll:!0},showNavbar:!0,showTopbar:!0,showBottombar:!0,showRouterLoading:!0},navbar:{position:`bottom`,group:`more`,icon:{default:ac,active:nc}},menu:{icon:{default:ac,active:nc}}}},{name:`Logs`,path:`/logs`,component:vT,meta:{name:`logs`,auth:{requiresAuth:!0,role:`admin`},ui:{background:`#000000`,containerSettings:{disableScroll:!0},showNavbar:!0,showTopbar:!0,showBottombar:!0,showRouterLoading:!0},navbar:{position:`bottom`,group:`more`,icon:{default:Qo,active:ls}},menu:{icon:{default:Qo,active:ls}}}},{name:`Console`,path:`/console`,component:DT,meta:{name:`console`,auth:{requiresAuth:!0,role:`user`},ui:{background:`#000000`,containerSettings:{disableScroll:!0},showNavbar:!0,showTopbar:!0,showBottombar:!0,showRouterLoading:!0},navbar:{position:`bottom`,group:`more`,icon:{default:qs,active:Ws}},menu:{icon:{default:qs,active:Ws}}}},{name:`Terminal`,path:`/terminal`,component:yT,meta:{name:`terminal`,disabledInElectron:!0,auth:{requiresAuth:!0,role:`admin`},ui:{background:`#000000`,containerSettings:{disableScroll:!0},showNavbar:!0,showTopbar:!0,showBottombar:!0,showRouterLoading:!0},navbar:{position:`bottom`,group:`more`,icon:{default:ts,active:ms}},menu:{icon:{default:ts,active:ms}}}},{name:`Automations`,path:`/automations`,component:bT,meta:{name:`automations`,auth:{requiresAuth:!0,role:`admin`},ui:{containerSettings:{showTitle:!0,padding:!0},showNavbar:!0,showTopbar:!0,showBottombar:!0,showRouterLoading:!0},navbar:{position:`bottom`,group:`more`,icon:{default:bs,active:_s}},menu:{icon:{default:bs,active:_s}}}},{name:`Automation`,path:`/automations/:id`,component:xT,meta:{name:`automation`,auth:{requiresAuth:!0,role:`admin`},ui:{containerSettings:{disableScroll:!0,paddingBottom:!1},showNavbar:!0,showTopbar:!0,showBottombar:!0}}},{name:`Instances`,path:`/instances`,component:ST,meta:{name:`instances`,auth:{requiresAuth:!0,role:`admin`},ui:{containerSettings:{showTitle:!0,padding:!0},showNavbar:!0,showTopbar:!0,showBottombar:!0,showRouterLoading:!0},navbar:{position:`bottom`,group:`more`,icon:{default:Oo,active:Po}},menu:{icon:{default:Oo,active:Po}}}},{name:`Workers`,path:`/workers`,component:CT,meta:{name:`workers`,auth:{requiresAuth:!0,role:`admin`},ui:{containerSettings:{showTitle:!0,padding:!0},showNavbar:!0,showTopbar:!0,showBottombar:!0,showRouterLoading:!0},navbar:{position:`bottom`,group:`more`,icon:{default:Yo,active:is}},menu:{icon:{default:Yo,active:is}}}},{name:`Menu`,path:`/menu`,component:TT,meta:{name:`menu`,auth:{requiresAuth:!0,role:`user`},ui:{containerSettings:{padding:!1},showNavbar:!1,showTopbar:!0,showBottombar:!0,showRouterLoading:!0,minifiedTopbar:!0},bottombar:{icon:{default:Rc,active:Rc}}}},{name:`Settings`,path:`/settings`,component:wT,meta:{name:`settings`,path:`/settings/account`,auth:{requiresAuth:!0,role:`user`},navbar:{position:`bottom`,icon:{default:Zn,active:Xs}},menu:{icon:{default:Zn,active:Xs}}},children:[{name:`SettingsList`,path:``,component:PT,meta:{name:`settings`,auth:{requiresAuth:!0,role:`user`},ui:{showNavbar:!0,showTopbar:!0,showBottombar:!0,showRouterLoadingSub:!0}}},{name:`SettingsAccount`,path:`account`,component:OT,meta:{name:`account`,description:`account_description`,auth:{requiresAuth:!0,role:`user`},ui:{showNavbar:!0,showTopbar:!0,showBottombar:!0,showRouterLoadingSub:!0},settingsBar:{icon:{default:Rs,active:Fs}}}},{name:`SettingsAppearance`,path:`appearance`,component:kT,meta:{name:`appearance`,description:`appearance_description`,auth:{requiresAuth:!0,role:`user`},ui:{showNavbar:!0,showTopbar:!0,showBottombar:!0,showRouterLoadingSub:!0},settingsBar:{icon:{default:Uo,active:Ko}}}},{name:`SettingsUsers`,path:`user`,component:IT,meta:{name:`user`,description:`user_description`,auth:{requiresAuth:!0,role:`admin`},ui:{showNavbar:!0,showTopbar:!0,showBottombar:!0,showRouterLoadingSub:!0},settingsBar:{icon:{default:_c,active:mc}}}},{name:`SettingsNotifications`,path:`notifications`,component:LT,meta:{name:`notifications`,description:`notifications_description`,auth:{requiresAuth:!0,role:`user`},ui:{showNavbar:!0,showTopbar:!0,showBottombar:!0,showRouterLoadingSub:!0},settingsBar:{icon:{default:Yn,active:Vs}}}},{name:`SettingsPermissions`,path:`permissions`,component:RT,meta:{name:`permissions`,description:`permissions_description`,auth:{requiresAuth:!0,role:`user`},ui:{showNavbar:!0,showTopbar:!0,showBottombar:!0,showRouterLoadingSub:!0},settingsBar:{icon:{default:dc,active:cc}}}},{name:`SettingsRecordings`,path:`recordings`,component:jT,meta:{name:`recordings`,description:`recordings_description`,auth:{requiresAuth:!0,role:`admin`},ui:{showNavbar:!0,showTopbar:!0,showBottombar:!0,showRouterLoadingSub:!0},settingsBar:{icon:{default:kc,active:Ec}}}},{name:`SettingsRemote`,path:`remote`,component:MT,meta:{name:`remote`,description:`remote_access_description`,auth:{requiresAuth:!0,role:`admin`},ui:{showNavbar:!0,showTopbar:!0,showBottombar:!0,showRouterLoadingSub:!0},settingsBar:{icon:{default:Es,active:Cs}}}},{name:`SettingsMqtt`,path:`mqtt`,component:NT,meta:{name:`mqtt`,description:`mqtt_description`,auth:{requiresAuth:!0,role:`admin`},ui:{showNavbar:!0,showTopbar:!0,showBottombar:!0,showRouterLoadingSub:!0},settingsBar:{icon:{default:Xn,active:Xn}}}},{name:`SettingsBackup`,path:`backup`,component:AT,meta:{name:`backup`,description:`backup_description`,auth:{requiresAuth:!0,role:`admin`},ui:{showNavbar:!0,showTopbar:!0,showBottombar:!0,showRouterLoadingSub:!0},settingsBar:{icon:{default:Lo,active:Bo}}}},{name:`SettingsSystem`,path:`system`,component:FT,meta:{name:`system`,description:`system_description`,auth:{requiresAuth:!0,role:`admin`},ui:{showNavbar:!0,showTopbar:!0,showBottombar:!0,showRouterLoadingSub:!0},settingsBar:{icon:{default:Fc,active:Mc}}}}]}],VT=[`/home`,`/camview`,`/cameras`,`/recordings`,`/faces`,`/automations`,`/plugins`,`/settings`,`/config`,`/logs`,`/terminal`,`/instances`,`/workers`,`/admin`];function HT(){try{return!!Tn().getQueryData([`api`])?.electron}catch{return!1}}function UT(){let e=HT();return VT.flatMap(t=>{let n=BT.find(e=>e.path===t);return!n||!$l(n)||n.meta?.disabledInElectron&&e?[]:[n]})}function WT(){let e=cl().uiSettings.interface.landingPage;return e&&UT().some(t=>t.path===e)?e:`/home`}function GT(e){let t=e.toLowerCase();return t===`/home`?{group:`main`,key:`home`,ignore:`camview`}:t===`/camview`?{group:`main`,key:`camview`,ignore:`home`}:t.startsWith(`/cameras/`)?{group:`main`,key:`cameras`}:t===`/menu`?{group:`menu`,key:`menu`,depth:0}:t===`/faces`?{group:`menu`,key:`faces`,depth:1}:t===`/plugins`?{group:`menu`,key:`plugins`,depth:1}:t.startsWith(`/plugins/`)?{group:`menu`,key:`plugin-detail`,depth:2}:t===`/settings`?{group:`menu`,key:`settings`,depth:1}:t.startsWith(`/settings/`)?{group:`menu`,key:`settings-detail`,depth:2}:t===`/admin`?{group:`menu`,key:`admin`,depth:1}:t===`/config`?{group:`menu`,key:`config`,depth:1}:t===`/console`?{group:`menu`,key:`console`,depth:1}:t===`/terminal`?{group:`menu`,key:`terminal`,depth:1}:t===`/instances`?{group:`menu`,key:`instances`,depth:1}:t===`/workers`?{group:`menu`,key:`workers`,depth:1}:t===`/automations`?{group:`menu`,key:`automations`,depth:1}:t===`/about`?{group:`menu`,key:`about`,depth:1}:t.startsWith(`/automations/`)?{group:`menu`,key:`automation-detail`,depth:2}:null}var KT=new Map,qT=er({history:nr(ja()),routes:BT,scrollBehavior:async(e,t,n)=>{if(n)return n;if(t.path===e.path||e.path===`/`)return{top:0,left:0};await x(10);let r=KT.get(e.path);return r===void 0?{top:0,left:0,behavior:`smooth`}:(KT.delete(e.path),{top:r,left:0})}});qT.absUrl=(e=`#`,t=!0)=>{let n=document.createElement(`a`);n.href=e,n.target=t&&e!==`#`?`_blank`:``,t&&(n.rel=`noopener noreferrer`),n.click()},qT.beforeEach(async(e,t)=>{let n=Tn(),r=eE(),i=Iw();if(e.meta.disabledInElectron&&n.getQueryData([`api`])?.electron)return WT();let a=e.name.toLowerCase();if(i.routerLoading=!0,i.setRoutes(t.fullPath,e.fullPath),KT.set(t.path,window.scrollY),r.user){if(e.path!==t.path&&n.cancelQueries(void 0,{revert:!1}),r.user.firstLogin&&e.path!==`/first-steps`)return`/first-steps`;if(!r.user.firstLogin&&e.path===`/first-steps`||e.meta.auth?.requiresAuth&&e.meta.auth.role&&r.user.role!==e.meta.auth.role&&r.user.role!==`admin`&&r.user.role!==`master`||a===`login`)return WT();if(e.path===`/settings`&&window.innerWidth>=640){let e=cl().uiSettings.interface.selectedSettingsView;return`/settings/${ol.includes(e)?e:`account`}`}}else if(a!==`login`)return`/`}),qT.beforeResolve(async(e,t)=>{let n=GT(t.path),r=GT(e.path);if(!n||!r||n.group!==r.group||n.key===r.key||n.ignore===r.key||r.ignore===n.key)return;if(n.group===`menu`&&n.depth!==void 0&&r.depth!==void 0){if(window.innerWidth>640||n.depth===r.depth)return;let e=r.depth>n.depth?`forward`:`back`;document.documentElement.dataset.menuDirection=e}if(e.path===`/home`&&!Tn().getQueriesData({queryKey:[`camerasList`]}).some(([,e])=>e!=null))return;let i=!!document.documentElement.dataset.menuDirection,a=Iw();a.isTransitioning=!0;let o=nn();await o.captured,o.finished.finally(()=>{a.isTransitioning=!1,i&&delete document.documentElement.dataset.menuDirection})});function JT(e){let t=e instanceof Error?e.message:String(e);return/dynamically imported module|importing a module script failed|failed to (load|fetch) module script|expected a javascript|chunkloaderror|loading( css)? chunk/i.test(t)}qT.afterEach(()=>{let e=Iw();e.routerLoading=!1,ta().bannerMode.value===null&&rT()}),qT.onError((e,t)=>{let n=Iw();n.routerLoading=!1,JT(e)&&el(()=>window.location.assign(t.fullPath))});var YT={de:cn,en:gn},XT=`selectedLanguage`;function ZT(){let e=localStorage.getItem(XT);if(!e)return null;try{let t=JSON.parse(e);return typeof t==`string`?t:null}catch{return e}}function QT(){return typeof window>`u`?null:new URLSearchParams(window.location.search).get(`cui_lang`)||(Fa()?ZT():null)}var $T=$n(`locale`,()=>{let e=eE(),t=xr(),{electron:n}=zn(),r=sa.global,i=ce(`language`,`auto`),a=U(()=>i.value===`auto`?aa():i.value),o=U(()=>[{label:r.t(`components.form.label.language_system`),value:`auto`},...ra.map(e=>({label:ia[e],value:e}))]),s=null;function c(e){n?.send(`change-language`,e),r.locale.value=e}async function l(e){let n=YT[e];n&&(t.config.locale=n)}function u(e){s=e,i.value=e}function d(e){u(aa(e))}q(i,t=>{t!==s&&(s=t,e.isLoggedIn&&e.updateUser({preferences:{language:t}}))}),q(a,e=>{c(e),l(e)});let f=QT();return f&&d(f),Fa()&&typeof window<`u`&&window.addEventListener(`storage`,e=>{if(e.key!==XT)return;let t=ZT();t&&d(t)}),c(a.value),l(a.value),io(`/camera.ui`).on(`user-language`,e=>{e?.language&&u(e.language)}),{language:i,languageOptions:o,locale:a,applyServerLanguage:u,applyHostLanguage:d,setI18Nlocale:c,setPrimeVueLocale:l}}),eE=$n(`auth`,()=>{let e=new Aa,t=ta(),n=ce(`user`,null,{serializer:{read:e=>e?JSON.parse(e):null,write:e=>JSON.stringify(e)}}),r=B(null),i=B(!1),a=B(!1),o=B(!1),{mutateAsync:s,isPending:c}=e.patchUserQuery(),l=U(()=>n.value!==null&&!t.isNeedsAuth.value),u=U(()=>r.value!==null),d=U(()=>i.value||a.value||o.value||c.value);function f(e){!e?._id||!e.username||!e.role||(n.value={_id:e._id,username:e.username,email:e.email,role:e.role,firstLogin:e.firstLogin,avatar:e.avatar},e.language&&$T().applyServerLanguage(e.language))}async function p(e){if(!l.value){i.value=!0;try{let t=await Wa(e);if(Va(t)){r.value={tempToken:t.tempToken};return}f(t.user),qT.push(WT())}finally{i.value=!1}}}async function m(e){if(r.value){a.value=!0;try{f((await Ga(r.value.tempToken,e)).user),r.value=null,qT.push(WT())}finally{a.value=!1}}}function h(){r.value=null}async function g(){o.value=!0;try{await Ka()}finally{n.value=null,r.value=null,o.value=!1,fl(),qT.push(`/`)}}async function _(e,t){n.value&&(e&&await s({username:n.value.username,userData:e}),t&&await s({username:n.value.username,userData:t},{onSuccess:()=>{let e=t.get(`upload`);if(e&&n.value){let t=e.type.split(`/`).pop();n.value.avatar=`${n.value._id}_avatar.${t}`}}}))}return q(n,(e,n)=>{i.value||o.value||e===null&&n!==null&&(r.value=null,fl(),t.isNeedsAuth.value||(t.reset(),t.boot(`default`)),qT.push(`/`))}),q(()=>t.isNeedsAuth.value,e=>{e&&n.value!==null&&(n.value=null)}),{user:n,isLoggedIn:l,requires2FA:u,pending2FA:r,loginLoading:d,login:p,logout:g,verify2FA:m,cancel2FA:h,updateUser:_,setUserFromLogin:f}});function tE(){let e=ta().proxySession.value;return e?`&session=${encodeURIComponent(e)}`:``}function nE(e){if(Wt.isCancel(e))return!0;if(e instanceof Error){let t=e;if(t.code===`ERR_CANCELED`||t.code===`ECONNABORTED`||t.message===`Request aborted`||t.message===`canceled`)return!0}return!1}function rE(e){let t=e instanceof Date?e:new Date(e);if(Number.isNaN(t.getTime()))return``;let n=Math.round((t.getTime()-Date.now())/1e3),r=new Intl.RelativeTimeFormat(void 0,{numeric:`auto`});for(let[e,t]of[[`year`,31536e3],[`month`,2592e3],[`week`,604800],[`day`,86400],[`hour`,3600],[`minute`,60],[`second`,1]])if(Math.abs(n)>=t||e===`second`)return r.format(Math.round(n/t),e);return r.format(0,`second`)}function iE(e){return new Intl.NumberFormat(void 0,{notation:`compact`,maximumFractionDigits:1}).format(e)}function aE(e){if(!e?.startsWith(`/api/`))return;let t=ta(),n=t.accessToken.value;if(n)return`${t.endpoint.value??location.origin}${e}?token=${n}${tE()}`}function oE(e=`logo-512.png`){if(e.startsWith(`data:`)||e.startsWith(`blob:`)||e.startsWith(`http:`)||e.startsWith(`https:`))return e;let t=eE(),n=ta(),r=n.endpoint.value??location.origin,i=n.accessToken.value;if(e.startsWith(location.origin))return r+e;if((e===`ERROR`||e===``)&&(e=`logo-256.png`),e===`avatar`){let n=t.user?.avatar;if(i&&n&&n!==`logo-256.png`)return`${r}/api/files/${n}?token=${i}${tE()}`;e=`logo-256.png`}if(e.includes(`avatar`)){if(i)return`${r}/api/files/${e}?token=${i}${tE()}`;e=`logo-256.png`}let a=`/src/assets/images/${e}`,o=Object.assign({"/src/assets/css/extras.css":jr,"/src/assets/css/inter.css":Mr,"/src/assets/css/main.css":Nr,"/src/assets/css/markdown.css":Pr,"/src/assets/css/overrides.css":Fr,"/src/assets/css/tailwind.css":Ar,"/src/assets/css/theme.css":Ir,"/src/assets/css/transitions.css":Lr,"/src/assets/css/utils.css":Rr,"/src/assets/images/camera-preview.png":Ri,"/src/assets/images/error-256.png":Bi,"/src/assets/images/logo-256.png":Hi,"/src/assets/images/logo-512.png":Wi,"/src/assets/images/logo.png":Ki,"/src/assets/images/logo.svg":Ji,"/src/assets/images/logo_animated.svg":Xi,"/src/assets/images/logo_loading_circle.svg":Qi});return o[a]?o[a].default:``}async function sE(e){return new Promise(t=>{e.preventDefault();let n=e.target?.files;if(n){let e=n[0],r=new FileReader;e?(r.onload=e=>{t(e.target?.result?e.target?.result:void 0)},r.readAsDataURL(e)):t(void 0)}})}function cE(e=10){return Array.from({length:e},()=>Math.floor(Math.random()*25+10).toString(36)).join(``)}function lE(e,t=new WeakMap){if(typeof e!=`object`||!e)return e;if(t.has(e))return t.get(e);if(Array.isArray(e)){let n=[];return t.set(e,n),e.forEach((e,r)=>{n[r]=lE(e,t)}),n}let n={};return t.set(e,n),Object.keys(e).forEach(r=>{n[r]=lE(e[r],t)}),n}function uE(e){switch(e){case`error`:return`error`;case`info`:return`info`;case`success`:return`success`;case`warning`:return`warn`;default:return`info`}}function dE(e){let t=document.createElement(`textarea`);t.value=e,t.setAttribute(`inputmode`,`none`),t.style.position=`fixed`,t.style.top=`0`,t.style.left=`-9999px`,t.style.fontSize=`12pt`,document.body.appendChild(t),t.focus({preventScroll:!0}),t.select(),t.setSelectionRange(0,e.length);let n=!1;try{n=document.execCommand(`copy`)}catch{n=!1}return t.remove(),n}function fE(e){if(!e)return!1;let t=dE(e);return navigator.clipboard?.writeText(e).catch(()=>{}),t}async function pE(e){if(!e)return!1;let t=dE(e),n=!1;if(navigator.clipboard?.writeText)try{await navigator.clipboard.writeText(e),n=!0}catch{n=!1}return t||n}function mE(e,t){if(typeof e==`object`&&e){let t=e.response?.data;if(typeof t?.message==`string`)return t.message;if(`message`in e&&typeof e.message==`string`)return e.message}return t??String(e)}function hE(e,t){return async n=>{let r=n.endpoint.url,i=n.lastTokens?.access??``;try{if(await e.authCheck(r,i,n.signal),!n.lastTokens?.access)throw ft(`needs-auth`,`no tokens`);return n.lastTokens}catch(e){if(h(e)||n.signal.aborted)throw e;if(nE(e))throw ft(`aborted`,`request canceled`);let i=Wt.isAxiosError(e)?e.response?.status:void 0;if(!n.lastTokens?.access)throw typeof i==`number`?ft(`needs-auth`,`no tokens`):ft(`transient`,e instanceof Error?e.message:`auth/check failed`);if(i===401&&n.lastTokens.refresh)try{let e=await t.getFreshTokens({endpoint:r,refreshToken:n.lastTokens.refresh,base:n.lastTokens,signal:n.signal});return{...n.lastTokens,...e}}catch(e){if(n.signal.aborted)throw e;if(nE(e))throw ft(`aborted`,`refresh canceled`);let t=Wt.isAxiosError(e)?e.response?.status:void 0;throw t===401||t===403?ft(`needs-auth`,`refresh rejected`):ft(`transient`,e instanceof Error?e.message:`refresh failed`)}throw i===401||i===403?ft(`needs-auth`,`tokens expired`):ft(`transient`,e instanceof Error?e.message:`auth/check failed`)}}}function gE(e){let t=Si(),n=ao(e.initialSession),r=_i(),i=lo({api:t,cloudSession:n,readL1AccessToken:void 0,onL1Unavailable:async()=>{window.location.href=e.initialSession.cloudApiBase?`${e.initialSession.cloudApiBase}/`:`/`},logger:e.logger}),a=vi(),o=e.initialSession.serverId,s=Li({api:t,cloudSession:n,cloudSessionLifecycle:i,storage:a,serverId:o,logger:e.logger}),c=to(t);return{options:{adapters:{storage:a,visibilitySource:yi(),networkSource:r.networkSource,networkChangeSource:r.networkChangeSource},callbacks:{discover:s,probe:hE(t,c),refresh:c.refresh,bindRefresh:c.bindCoordination,onConnectionReset:c.clear,onWake:()=>i.wake()},storageNamespace:o,logger:e.logger},api:t,cloudSession:n,cloudSessionLifecycle:i}}var _E=null;async function vE(e={}){if(_E)return _E;let t=await Za();if(t.mode===`cloud`){if(!t.cloudSession)throw window.location.href=pi,Error(`cloud handoff incomplete — bouncing to cloud frontend`);let{options:n,api:r,cloudSession:i}=gE({initialSession:t.cloudSession,logger:e.logger});return _E={connection:$r(n),api:r,mode:`cloud`,cloudSession:i},_E}if(!t.directEndpointUrl)throw Error(`direct mode detected but no endpoint URL resolved`);let{options:n,api:r}=no(t.directEndpointUrl,e.logger);return _E={connection:$r(n),api:r,mode:`direct`},_E}function yE(){if(!_E)throw Error(`getBootResult(): app not booted — call bootApp() first`);return _E}function bE(){return yE().mode}var xE=3,SE=5,CE=null;function wE(){return CE||(CE=TE().finally(()=>{CE=null}),CE)}async function TE(){let e=yE();if(e.mode!==`cloud`||!e.cloudSession)return null;let t=e.cloudSession.state.value;if(!t)return null;let n=null;if(t.proxyRefreshToken&&t.cloudApiBase)try{n=await e.api.refreshProxy(t.cloudApiBase,t.proxyRefreshToken)}catch{}if(!n)return null;e.cloudSession.set({...t,proxyUrl:n.proxyUrl,proxyToken:n.proxyToken,proxyRefreshToken:n.proxyRefreshToken??t.proxyRefreshToken,proxyTokenExpiresAt:n.proxyTokenExpiresAt,proxyRefreshTokenExpiresAt:n.proxyRefreshTokenExpiresAt??t.proxyRefreshTokenExpiresAt});let r=e.connection.kernel,i=r.phase,a=i.kind===`online`?i.target:null;return a&&r.dispatch({type:`TOKENS_REFRESHED`,tokens:{...a.tokens,proxySession:n.proxyToken,proxySessionExpiresAt:n.proxyTokenExpiresAt,proxyRefresh:n.proxyRefreshToken??a.tokens.proxyRefresh}}),n.proxyToken}function EE(){let e=ii();e.interceptors.response.use(e=>e,async t=>{let n=t.config,r=si(t);if(t.response?.status===401&&r?.message===`Session expired`&&typeof r.redirect==`string`&&n&&!n._proxyRetry){let r=await wE();return r?(n._proxyRetry=!0,n.headers&&(n.headers[`X-Proxy-Session`]=r),e(n)):Promise.reject(t)}if(ui(t)||di(t))return await go(),Promise.reject(t);if(li(t)&&n){let r=n._tunnelRetries??0;if(n._tunnelRetries=r+1,r>=xE)return Promise.reject(t);let i=t.response?.headers?.[`retry-after`],a=Number.parseInt(i??``,10)||SE;return await new Promise(e=>setTimeout(e,a*1e3)),e(n)}return Promise.reject(t)})}export{$y as $,Na as $n,Bu as $t,XC as A,bc as An,Ym as At,xS as B,ts as Bn,cf as Bt,Kw as C,ll as Cn,gh as Ct,qC as D,tl as Dn,ih as Dt,aw as E,el as En,sh as Et,yC as F,Vs as Fn,Tm as Ft,Db as G,yo as Gn,Ud as Gt,$x as H,jo as Hn,tf as Ht,gC as I,Es as In,jp as It,vb as J,mo as Jn,Sd as Jt,wb as K,go as Kn,Od as Kt,ZS as L,Cs as Ln,Xf as Lt,RC as M,$s as Mn,Um as Mt,LC as N,Xs as Nn,Bm as Nt,YC as O,Xc as On,th as Ot,OC as P,Ws as Pn,Lm as Pt,nb as Q,Ba as Qn,ud as Qt,zS as R,_s as Rn,Ff as Rt,nT as S,pl as Sn,yh as St,vw as T,cl as Tn,uh as Tt,Nb as U,Oo as Un,Qd as Ut,bS as V,Po as Vn,af as Vt,Ab as W,So as Wn,Kd as Wt,fb as X,ho as Xn,gd as Xt,hb as Y,fo as Yn,yd as Yt,lb as Z,io as Zn,pd as Zt,$T as _,vl as _n,Xr as _r,Ph as _t,fE as a,hu as an,ua as ar,sv as at,BT as b,_l as bn,Th as bt,iE as c,ql as cn,Yi as cr,iv as ct,nE as d,Rl as dn,gi as dr,P_ as dt,Lu as en,Ma as er,ty as et,aE as f,kl as fn,hi as fr,vg as ft,eE as g,Sl as gn,ti as gr,Lh as gt,sE as h,Cl as hn,ei as hr,Jh as ht,pE as i,gu as in,ca as ir,dv as it,IC as j,cc as jn,Km as jt,JC as k,Ec as kn,Qm as kt,rE as l,Wl as ln,Oi as lr,V_ as lt,cE as m,Dl as mn,Q as mr,Kh as mt,vE as n,Eu as nn,Aa as nr,jv as nt,lE as o,$l as on,sa as or,cv as ot,uE as p,Ol as pn,fi as pr,Gh as pt,xb as q,po as qn,Td as qt,bE as r,Tu as rn,da as rr,gv as rt,mE as s,Xl as sn,ta as sr,av as st,EE as t,ju as tn,Fa as tr,ey as tt,oE as u,Vl as un,pi as ur,L_ as ut,UT as v,bl as vn,ni as vr,jh as vt,Iw as w,ol as wn,ph as wt,iT as x,gl as xn,Sh as xt,qT as y,yl as yn,Yr as yr,Oh as yt,DS as z,is as zn,Cf as zt};