@camera.ui/server 2.4.0 → 2.4.1

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 (1424) hide show
  1. package/dist/interface/assets/404-DX4XH2LB.js +1 -0
  2. package/dist/interface/assets/404-DX4XH2LB.js.br +0 -0
  3. package/dist/interface/assets/404-DX4XH2LB.js.gz +0 -0
  4. package/dist/interface/assets/About-TKX85HMQ.js +1 -0
  5. package/dist/interface/assets/About-TKX85HMQ.js.br +0 -0
  6. package/dist/interface/assets/About-TKX85HMQ.js.gz +0 -0
  7. package/dist/interface/assets/Assistant-DoIUDprL.js +1 -0
  8. package/dist/interface/assets/Assistant-DoIUDprL.js.br +0 -0
  9. package/dist/interface/assets/Assistant-DoIUDprL.js.gz +0 -0
  10. package/dist/interface/assets/Automation-txjKQVyV.js +3 -0
  11. package/dist/interface/assets/Automation-txjKQVyV.js.br +0 -0
  12. package/dist/interface/assets/Automation-txjKQVyV.js.gz +0 -0
  13. package/dist/interface/assets/AutomationImport-C64Ut7T_.js +2 -0
  14. package/dist/interface/assets/AutomationImport-C64Ut7T_.js.br +0 -0
  15. package/dist/interface/assets/AutomationImport-C64Ut7T_.js.gz +0 -0
  16. package/dist/interface/assets/AutomationStore-Q01bLhts.js +2 -0
  17. package/dist/interface/assets/AutomationStore-Q01bLhts.js.br +0 -0
  18. package/dist/interface/assets/AutomationStore-Q01bLhts.js.gz +0 -0
  19. package/dist/interface/assets/AutomationStoreDetail-BaoJ9HK2.js +2 -0
  20. package/dist/interface/assets/AutomationStoreDetail-BaoJ9HK2.js.br +0 -0
  21. package/dist/interface/assets/AutomationStoreDetail-BaoJ9HK2.js.gz +0 -0
  22. package/dist/interface/assets/Automations-DrbmawaF.js +2 -0
  23. package/dist/interface/assets/Automations-DrbmawaF.js.br +0 -0
  24. package/dist/interface/assets/Automations-DrbmawaF.js.gz +0 -0
  25. package/dist/interface/assets/BackupRestore-28xfEYA4.js +1 -0
  26. package/dist/interface/assets/BackupRestore-28xfEYA4.js.br +0 -0
  27. package/dist/interface/assets/BackupRestore-28xfEYA4.js.gz +0 -0
  28. package/dist/interface/assets/Camera-BWG1t1eV.js +2 -0
  29. package/dist/interface/assets/Camera-BWG1t1eV.js.br +0 -0
  30. package/dist/interface/assets/Camera-BWG1t1eV.js.gz +0 -0
  31. package/dist/interface/assets/CameraConsole-DTU2a_Ts.js +7 -0
  32. package/dist/interface/assets/CameraConsole-DTU2a_Ts.js.br +0 -0
  33. package/dist/interface/assets/CameraConsole-DTU2a_Ts.js.gz +0 -0
  34. package/dist/interface/assets/Cameras-D_Mile0G.js +651 -0
  35. package/dist/interface/assets/Cameras-D_Mile0G.js.br +0 -0
  36. package/dist/interface/assets/Cameras-D_Mile0G.js.gz +0 -0
  37. package/dist/interface/assets/Camview-O9fMv2IM.js +1 -0
  38. package/dist/interface/assets/Camview-O9fMv2IM.js.br +0 -0
  39. package/dist/interface/assets/Camview-O9fMv2IM.js.gz +0 -0
  40. package/dist/interface/assets/Config-Z5OwrRYV.js +2 -0
  41. package/dist/interface/assets/Config-Z5OwrRYV.js.br +0 -0
  42. package/dist/interface/assets/Config-Z5OwrRYV.js.gz +0 -0
  43. package/dist/interface/assets/ConfigActionAssistant-CQCL2Am2.js +1 -0
  44. package/dist/interface/assets/ConfigActionAssistant-CQCL2Am2.js.br +0 -0
  45. package/dist/interface/assets/ConfigActionAssistant-CQCL2Am2.js.gz +0 -0
  46. package/dist/interface/assets/ConfigActionCameraControl-D_-J3WO0.js +1 -0
  47. package/dist/interface/assets/ConfigActionCameraControl-D_-J3WO0.js.br +0 -0
  48. package/dist/interface/assets/ConfigActionCameraControl-D_-J3WO0.js.gz +0 -0
  49. package/dist/interface/assets/ConfigActionMqtt-C0XsqWGy.js +1 -0
  50. package/dist/interface/assets/ConfigActionMqtt-C0XsqWGy.js.br +0 -0
  51. package/dist/interface/assets/ConfigActionMqtt-C0XsqWGy.js.gz +0 -0
  52. package/dist/interface/assets/ConfigActionNotification-CtiiN-5F.js +1 -0
  53. package/dist/interface/assets/ConfigActionNotification-CtiiN-5F.js.br +0 -0
  54. package/dist/interface/assets/ConfigActionNotification-CtiiN-5F.js.gz +0 -0
  55. package/dist/interface/assets/ConfigActionNotificationControl-DD8Irm7I.js +1 -0
  56. package/dist/interface/assets/ConfigActionNotificationControl-DD8Irm7I.js.br +0 -0
  57. package/dist/interface/assets/ConfigActionNotificationControl-DD8Irm7I.js.gz +0 -0
  58. package/dist/interface/assets/ConfigActionPlugin-CIesNnFQ.js +1 -0
  59. package/dist/interface/assets/ConfigActionPlugin-CIesNnFQ.js.br +0 -0
  60. package/dist/interface/assets/ConfigActionPlugin-CIesNnFQ.js.gz +0 -0
  61. package/dist/interface/assets/ConfigActionSensor-BcYL0qkL.js +1 -0
  62. package/dist/interface/assets/ConfigActionSensor-BcYL0qkL.js.br +0 -0
  63. package/dist/interface/assets/ConfigActionSensor-BcYL0qkL.js.gz +0 -0
  64. package/dist/interface/assets/ConfigActionSnapshot-DJdvQulG.js +1 -0
  65. package/dist/interface/assets/ConfigActionSnapshot-DJdvQulG.js.br +0 -0
  66. package/dist/interface/assets/ConfigActionSnapshot-DJdvQulG.js.gz +0 -0
  67. package/dist/interface/assets/ConfigConditionSensorState-Cwn8aC7y.js +1 -0
  68. package/dist/interface/assets/ConfigConditionSensorState-Cwn8aC7y.js.br +0 -0
  69. package/dist/interface/assets/ConfigConditionSensorState-Cwn8aC7y.js.gz +0 -0
  70. package/dist/interface/assets/ConfigTriggerDetection-D0g5ZMbd.js +1 -0
  71. package/dist/interface/assets/ConfigTriggerDetection-D0g5ZMbd.js.br +0 -0
  72. package/dist/interface/assets/ConfigTriggerDetection-D0g5ZMbd.js.gz +0 -0
  73. package/dist/interface/assets/ConfigTriggerGeofence-eWJC6ILP.js +1 -0
  74. package/dist/interface/assets/ConfigTriggerGeofence-eWJC6ILP.js.br +0 -0
  75. package/dist/interface/assets/ConfigTriggerGeofence-eWJC6ILP.js.gz +0 -0
  76. package/dist/interface/assets/ConfigTriggerMqtt-DiKTbPu6.js +1 -0
  77. package/dist/interface/assets/ConfigTriggerMqtt-DiKTbPu6.js.br +0 -0
  78. package/dist/interface/assets/ConfigTriggerMqtt-DiKTbPu6.js.gz +0 -0
  79. package/dist/interface/assets/ConfigTriggerSensor-CS8gsL0m.js +1 -0
  80. package/dist/interface/assets/ConfigTriggerSensor-CS8gsL0m.js.br +0 -0
  81. package/dist/interface/assets/ConfigTriggerSensor-CS8gsL0m.js.gz +0 -0
  82. package/dist/interface/assets/ConfigTriggerSystem-CmuIY_0y.js +1 -0
  83. package/dist/interface/assets/ConfigTriggerSystem-CmuIY_0y.js.br +0 -0
  84. package/dist/interface/assets/ConfigTriggerSystem-CmuIY_0y.js.gz +0 -0
  85. package/dist/interface/assets/ConfigTriggerWebhook-BMFuGGYj.js +1 -0
  86. package/dist/interface/assets/ConfigTriggerWebhook-BMFuGGYj.js.br +0 -0
  87. package/dist/interface/assets/ConfigTriggerWebhook-BMFuGGYj.js.gz +0 -0
  88. package/dist/interface/assets/Console-BymhygMI.js +1 -0
  89. package/dist/interface/assets/Console-BymhygMI.js.br +0 -0
  90. package/dist/interface/assets/Console-BymhygMI.js.gz +0 -0
  91. package/dist/interface/assets/CuiAssistantConversation-Beennkmh.js +5 -0
  92. package/dist/interface/assets/CuiAssistantConversation-Beennkmh.js.br +0 -0
  93. package/dist/interface/assets/CuiAssistantConversation-Beennkmh.js.gz +0 -0
  94. package/dist/interface/assets/CuiAutomationRunsDialog-BUkNp6wR.js +1 -0
  95. package/dist/interface/assets/CuiAutomationRunsDialog-BUkNp6wR.js.br +0 -0
  96. package/dist/interface/assets/CuiAutomationRunsDialog-BUkNp6wR.js.gz +0 -0
  97. package/dist/interface/assets/CuiBottomSheet-Clh6xrtY.js +1 -0
  98. package/dist/interface/assets/CuiBottomSheet-Clh6xrtY.js.br +1 -0
  99. package/dist/interface/assets/CuiBottomSheet-Clh6xrtY.js.gz +0 -0
  100. package/dist/interface/assets/CuiBottomSheet-DHzBdeKE.js +1 -0
  101. package/dist/interface/assets/CuiBottomSheet-DHzBdeKE.js.br +0 -0
  102. package/dist/interface/assets/CuiBottomSheet-DHzBdeKE.js.gz +0 -0
  103. package/dist/interface/assets/CuiCameraPipCard-DV9NVvdU.js +1 -0
  104. package/dist/interface/assets/CuiCameraPipCard-DV9NVvdU.js.br +0 -0
  105. package/dist/interface/assets/CuiCameraPipCard-DV9NVvdU.js.gz +0 -0
  106. package/dist/interface/assets/CuiCameraRecordings-Dgabyi8C.js +1 -0
  107. package/dist/interface/assets/CuiCameraRecordings-Dgabyi8C.js.br +0 -0
  108. package/dist/interface/assets/CuiCameraRecordings-Dgabyi8C.js.gz +0 -0
  109. package/dist/interface/assets/CuiCameraShares-D-CEbeu7.js +1 -0
  110. package/dist/interface/assets/CuiCameraShares-D-CEbeu7.js.br +0 -0
  111. package/dist/interface/assets/CuiCameraShares-D-CEbeu7.js.gz +0 -0
  112. package/dist/interface/assets/CuiCameraTable-CQmKrbaK.js +1 -0
  113. package/dist/interface/assets/CuiCameraTable-CQmKrbaK.js.br +1 -0
  114. package/dist/interface/assets/CuiCameraTable-CQmKrbaK.js.gz +0 -0
  115. package/dist/interface/assets/CuiCameraTable-DJ6BT3GR.js +2 -0
  116. package/dist/interface/assets/CuiCameraTable-DJ6BT3GR.js.br +0 -0
  117. package/dist/interface/assets/CuiCameraTable-DJ6BT3GR.js.gz +0 -0
  118. package/dist/interface/assets/CuiChartTable-D74cis32.js +1 -0
  119. package/dist/interface/assets/CuiChartTable-D74cis32.js.br +0 -0
  120. package/dist/interface/assets/CuiChartTable-D74cis32.js.gz +0 -0
  121. package/dist/interface/assets/CuiConsole-CEckyUH_.js +5 -0
  122. package/dist/interface/assets/CuiConsole-CEckyUH_.js.br +0 -0
  123. package/dist/interface/assets/CuiConsole-CEckyUH_.js.gz +0 -0
  124. package/dist/interface/assets/CuiDataTable-D2CX_Dae.js +1 -0
  125. package/dist/interface/assets/CuiDataTable-D2CX_Dae.js.br +0 -0
  126. package/dist/interface/assets/CuiDataTable-D2CX_Dae.js.gz +0 -0
  127. package/dist/interface/assets/CuiLightControl-DwC2A1_z.js +1 -0
  128. package/dist/interface/assets/CuiLightControl-DwC2A1_z.js.br +0 -0
  129. package/dist/interface/assets/CuiLightControl-DwC2A1_z.js.gz +0 -0
  130. package/dist/interface/assets/CuiMoveCodeForm-9uLXz6E4.js +1 -0
  131. package/dist/interface/assets/CuiMoveCodeForm-9uLXz6E4.js.br +0 -0
  132. package/dist/interface/assets/CuiMoveCodeForm-9uLXz6E4.js.gz +0 -0
  133. package/dist/interface/assets/CuiPluginCard-7Zaj4gGb.js +2 -0
  134. package/dist/interface/assets/CuiPluginCard-7Zaj4gGb.js.br +0 -0
  135. package/dist/interface/assets/CuiPluginCard-7Zaj4gGb.js.gz +0 -0
  136. package/dist/interface/assets/CuiPluginCategoryChip-NZO3F0dE.js +1 -0
  137. package/dist/interface/assets/CuiPluginCategoryChip-NZO3F0dE.js.br +0 -0
  138. package/dist/interface/assets/CuiPluginCategoryChip-NZO3F0dE.js.gz +0 -0
  139. package/dist/interface/assets/CuiPluginOAuthButton-BtXeLBCE.js +2 -0
  140. package/dist/interface/assets/CuiPluginOAuthButton-BtXeLBCE.js.br +0 -0
  141. package/dist/interface/assets/CuiPluginOAuthButton-BtXeLBCE.js.gz +0 -0
  142. package/dist/interface/assets/CuiPluginTrustBadge-DhTB-x34.js +1 -0
  143. package/dist/interface/assets/CuiPluginTrustBadge-DhTB-x34.js.br +0 -0
  144. package/dist/interface/assets/CuiPluginTrustBadge-DhTB-x34.js.gz +0 -0
  145. package/dist/interface/assets/CuiQRCode-CqGj0s6U.js +1 -0
  146. package/dist/interface/assets/CuiQRCode-CqGj0s6U.js.br +0 -0
  147. package/dist/interface/assets/CuiQRCode-CqGj0s6U.js.gz +0 -0
  148. package/dist/interface/assets/CuiSchema-BTF_3aRE.js +1 -0
  149. package/dist/interface/assets/CuiSchema-BTF_3aRE.js.br +0 -0
  150. package/dist/interface/assets/CuiSchema-BTF_3aRE.js.gz +0 -0
  151. package/dist/interface/assets/CuiTopNavbarItem-BWcrLyui.js +1 -0
  152. package/dist/interface/assets/CuiTopNavbarItem-BWcrLyui.js.br +0 -0
  153. package/dist/interface/assets/CuiTopNavbarItem-BWcrLyui.js.gz +0 -0
  154. package/dist/interface/assets/Faces-CSuw4tlQ.js +1 -0
  155. package/dist/interface/assets/Faces-CSuw4tlQ.js.br +0 -0
  156. package/dist/interface/assets/Faces-CSuw4tlQ.js.gz +0 -0
  157. package/dist/interface/assets/FirstSteps-D8MXHO4s.js +1 -0
  158. package/dist/interface/assets/FirstSteps-D8MXHO4s.js.br +0 -0
  159. package/dist/interface/assets/FirstSteps-D8MXHO4s.js.gz +0 -0
  160. package/dist/interface/assets/Floorplan-CJvf82Yr.js +1 -0
  161. package/dist/interface/assets/Floorplan-CJvf82Yr.js.br +0 -0
  162. package/dist/interface/assets/Floorplan-CJvf82Yr.js.gz +0 -0
  163. package/dist/interface/assets/Instances-CGmnFbAU.js +1 -0
  164. package/dist/interface/assets/Instances-CGmnFbAU.js.br +0 -0
  165. package/dist/interface/assets/Instances-CGmnFbAU.js.gz +0 -0
  166. package/dist/interface/assets/Logs-DzRjFZwp.js +6 -0
  167. package/dist/interface/assets/Logs-DzRjFZwp.js.br +0 -0
  168. package/dist/interface/assets/Logs-DzRjFZwp.js.gz +0 -0
  169. package/dist/interface/assets/Menu-CBDRm_I7.js +1 -0
  170. package/dist/interface/assets/Menu-CBDRm_I7.js.br +0 -0
  171. package/dist/interface/assets/Menu-CBDRm_I7.js.gz +0 -0
  172. package/dist/interface/assets/Metrics-DyvjZEl4.js +12 -0
  173. package/dist/interface/assets/Metrics-DyvjZEl4.js.br +0 -0
  174. package/dist/interface/assets/Metrics-DyvjZEl4.js.gz +0 -0
  175. package/dist/interface/assets/OAuthDeviceFlow-CDjuIKJO.js +1 -0
  176. package/dist/interface/assets/OAuthDeviceFlow-CDjuIKJO.js.br +0 -0
  177. package/dist/interface/assets/OAuthDeviceFlow-CDjuIKJO.js.gz +0 -0
  178. package/dist/interface/assets/Plugin-CXtetRIB.js +1 -0
  179. package/dist/interface/assets/Plugin-CXtetRIB.js.br +0 -0
  180. package/dist/interface/assets/Plugin-CXtetRIB.js.gz +0 -0
  181. package/dist/interface/assets/PluginConsole-6TRc3i3n.js +7 -0
  182. package/dist/interface/assets/PluginConsole-6TRc3i3n.js.br +0 -0
  183. package/dist/interface/assets/PluginConsole-6TRc3i3n.js.gz +0 -0
  184. package/dist/interface/assets/PluginDetail-DBYTEg5y.js +2 -0
  185. package/dist/interface/assets/PluginDetail-DBYTEg5y.js.br +0 -0
  186. package/dist/interface/assets/PluginDetail-DBYTEg5y.js.gz +0 -0
  187. package/dist/interface/assets/PluginSchema-BW_3Fyqe.js +1 -0
  188. package/dist/interface/assets/PluginSchema-BW_3Fyqe.js.br +0 -0
  189. package/dist/interface/assets/PluginSchema-BW_3Fyqe.js.gz +0 -0
  190. package/dist/interface/assets/PluginSearch--ZnY67-0.js +2 -0
  191. package/dist/interface/assets/PluginSearch--ZnY67-0.js.br +0 -0
  192. package/dist/interface/assets/PluginSearch--ZnY67-0.js.gz +0 -0
  193. package/dist/interface/assets/PluginSearch-C53VwojP.js +1 -0
  194. package/dist/interface/assets/PluginSearch-C53VwojP.js.br +0 -0
  195. package/dist/interface/assets/PluginSearch-C53VwojP.js.gz +0 -0
  196. package/dist/interface/assets/PluginUpdateProgress-DwkFjcgH.js +1 -0
  197. package/dist/interface/assets/PluginUpdateProgress-DwkFjcgH.js.br +0 -0
  198. package/dist/interface/assets/PluginUpdateProgress-DwkFjcgH.js.gz +0 -0
  199. package/dist/interface/assets/Plugins-CV1x_hss.js +1 -0
  200. package/dist/interface/assets/Plugins-CV1x_hss.js.br +0 -0
  201. package/dist/interface/assets/Plugins-CV1x_hss.js.gz +0 -0
  202. package/dist/interface/assets/Recordings-BNByf_Or.js +1 -0
  203. package/dist/interface/assets/Recordings-BNByf_Or.js.br +0 -0
  204. package/dist/interface/assets/Recordings-BNByf_Or.js.gz +0 -0
  205. package/dist/interface/assets/SensorEdit-DBpz5jrO.js +1 -0
  206. package/dist/interface/assets/SensorEdit-DBpz5jrO.js.br +0 -0
  207. package/dist/interface/assets/SensorEdit-DBpz5jrO.js.gz +0 -0
  208. package/dist/interface/assets/SensorHistory-DwQQ6nFI.js +1 -0
  209. package/dist/interface/assets/SensorHistory-DwQQ6nFI.js.br +0 -0
  210. package/dist/interface/assets/SensorHistory-DwQQ6nFI.js.gz +0 -0
  211. package/dist/interface/assets/Sensors-DTIZnOsc.js +2 -0
  212. package/dist/interface/assets/Sensors-DTIZnOsc.js.br +0 -0
  213. package/dist/interface/assets/Sensors-DTIZnOsc.js.gz +0 -0
  214. package/dist/interface/assets/Settings-BpmZZZ5X.js +1 -0
  215. package/dist/interface/assets/Settings-BpmZZZ5X.js.br +0 -0
  216. package/dist/interface/assets/Settings-BpmZZZ5X.js.gz +0 -0
  217. package/dist/interface/assets/SettingsAccount-BZvGNzRb.js +1 -0
  218. package/dist/interface/assets/SettingsAccount-BZvGNzRb.js.br +0 -0
  219. package/dist/interface/assets/SettingsAccount-BZvGNzRb.js.gz +0 -0
  220. package/dist/interface/assets/SettingsAccount-jb4-Xc6f.js +1 -0
  221. package/dist/interface/assets/SettingsAccount-jb4-Xc6f.js.br +0 -0
  222. package/dist/interface/assets/SettingsAccount-jb4-Xc6f.js.gz +0 -0
  223. package/dist/interface/assets/SettingsAppearance-B5785pDk.js +1 -0
  224. package/dist/interface/assets/SettingsAppearance-B5785pDk.js.br +0 -0
  225. package/dist/interface/assets/SettingsAppearance-B5785pDk.js.gz +0 -0
  226. package/dist/interface/assets/SettingsAppearance-BxlHCftL.js +1 -0
  227. package/dist/interface/assets/SettingsAppearance-BxlHCftL.js.br +0 -0
  228. package/dist/interface/assets/SettingsAppearance-BxlHCftL.js.gz +0 -0
  229. package/dist/interface/assets/SettingsAssistant-BqvP2AP3.js +1 -0
  230. package/dist/interface/assets/SettingsAssistant-BqvP2AP3.js.br +0 -0
  231. package/dist/interface/assets/SettingsAssistant-BqvP2AP3.js.gz +0 -0
  232. package/dist/interface/assets/SettingsBackup-BJqeVFG4.js +1 -0
  233. package/dist/interface/assets/SettingsBackup-BJqeVFG4.js.br +0 -0
  234. package/dist/interface/assets/SettingsBackup-BJqeVFG4.js.gz +0 -0
  235. package/dist/interface/assets/SettingsList-Dy_mA9K2.js +1 -0
  236. package/dist/interface/assets/SettingsList-Dy_mA9K2.js.br +0 -0
  237. package/dist/interface/assets/SettingsList-Dy_mA9K2.js.gz +0 -0
  238. package/dist/interface/assets/SettingsMqtt-BYvn5IYr.js +1 -0
  239. package/dist/interface/assets/SettingsMqtt-BYvn5IYr.js.br +0 -0
  240. package/dist/interface/assets/SettingsMqtt-BYvn5IYr.js.gz +0 -0
  241. package/dist/interface/assets/SettingsNotifications-BGaX9Ksi.js +1 -0
  242. package/dist/interface/assets/SettingsNotifications-BGaX9Ksi.js.br +0 -0
  243. package/dist/interface/assets/SettingsNotifications-BGaX9Ksi.js.gz +0 -0
  244. package/dist/interface/assets/SettingsRecordings-DYKsAGHM.js +1 -0
  245. package/dist/interface/assets/SettingsRecordings-DYKsAGHM.js.br +0 -0
  246. package/dist/interface/assets/SettingsRecordings-DYKsAGHM.js.gz +0 -0
  247. package/dist/interface/assets/SettingsRemote-Dq65gMYr.js +2 -0
  248. package/dist/interface/assets/SettingsRemote-Dq65gMYr.js.br +0 -0
  249. package/dist/interface/assets/SettingsRemote-Dq65gMYr.js.gz +0 -0
  250. package/dist/interface/assets/SettingsSystem-Ct8hqB0Q.js +2 -0
  251. package/dist/interface/assets/SettingsSystem-Ct8hqB0Q.js.br +0 -0
  252. package/dist/interface/assets/SettingsSystem-Ct8hqB0Q.js.gz +0 -0
  253. package/dist/interface/assets/SettingsUsers-BaY-mpI0.js +1 -0
  254. package/dist/interface/assets/SettingsUsers-BaY-mpI0.js.br +0 -0
  255. package/dist/interface/assets/SettingsUsers-BaY-mpI0.js.gz +0 -0
  256. package/dist/interface/assets/Terminal-BwZVJsrs.js +4 -0
  257. package/dist/interface/assets/Terminal-BwZVJsrs.js.br +0 -0
  258. package/dist/interface/assets/Terminal-BwZVJsrs.js.gz +0 -0
  259. package/dist/interface/assets/Training-Bn0X2TTy.js +1 -0
  260. package/dist/interface/assets/Training-Bn0X2TTy.js.br +0 -0
  261. package/dist/interface/assets/Training-Bn0X2TTy.js.gz +0 -0
  262. package/dist/interface/assets/Updates-C7F84E2k.js +2 -0
  263. package/dist/interface/assets/Updates-C7F84E2k.js.br +0 -0
  264. package/dist/interface/assets/Updates-C7F84E2k.js.gz +0 -0
  265. package/dist/interface/assets/VersionsHandler-DLKfxVjW.js +7 -0
  266. package/dist/interface/assets/VersionsHandler-DLKfxVjW.js.br +0 -0
  267. package/dist/interface/assets/VersionsHandler-DLKfxVjW.js.gz +0 -0
  268. package/dist/interface/assets/VirtualSensorCreate-rTcEcAhh.js +1 -0
  269. package/dist/interface/assets/VirtualSensorCreate-rTcEcAhh.js.br +0 -0
  270. package/dist/interface/assets/VirtualSensorCreate-rTcEcAhh.js.gz +0 -0
  271. package/dist/interface/assets/Workers-BmCpS11X.js +2 -0
  272. package/dist/interface/assets/Workers-BmCpS11X.js.br +0 -0
  273. package/dist/interface/assets/Workers-BmCpS11X.js.gz +0 -0
  274. package/dist/interface/assets/api-BnIHl_ph.js +1 -0
  275. package/dist/interface/assets/api-BnIHl_ph.js.br +2 -0
  276. package/dist/interface/assets/api-BnIHl_ph.js.gz +0 -0
  277. package/dist/interface/assets/api-Cr35WxQ9.js +4 -0
  278. package/dist/interface/assets/api-Cr35WxQ9.js.br +0 -0
  279. package/dist/interface/assets/api-Cr35WxQ9.js.gz +0 -0
  280. package/dist/interface/assets/assistant-D3LA-H2B.js +1 -0
  281. package/dist/interface/assets/assistant-D3LA-H2B.js.br +0 -0
  282. package/dist/interface/assets/assistant-D3LA-H2B.js.gz +0 -0
  283. package/dist/interface/assets/auth-H0IrVJ07.js +1 -0
  284. package/dist/interface/assets/auth-H0IrVJ07.js.br +0 -0
  285. package/dist/interface/assets/auth-H0IrVJ07.js.gz +0 -0
  286. package/dist/interface/assets/automations-DVloYi1F.js +1 -0
  287. package/dist/interface/assets/automations-DVloYi1F.js.br +0 -0
  288. package/dist/interface/assets/automations-DVloYi1F.js.gz +0 -0
  289. package/dist/interface/assets/cloudHandoff-7kajbWnb.js +1 -0
  290. package/dist/interface/assets/cloudHandoff-7kajbWnb.js.br +1 -0
  291. package/dist/interface/assets/cloudHandoff-7kajbWnb.js.gz +0 -0
  292. package/dist/interface/assets/config-CYPq0jKV.js +1 -0
  293. package/dist/interface/assets/config-CYPq0jKV.js.br +0 -0
  294. package/dist/interface/assets/config-CYPq0jKV.js.gz +0 -0
  295. package/dist/interface/assets/main-DkZ5J9f-.js +3 -0
  296. package/dist/interface/assets/main-DkZ5J9f-.js.br +0 -0
  297. package/dist/interface/assets/main-DkZ5J9f-.js.gz +0 -0
  298. package/dist/interface/assets/mqtt-awK-0sPa.js +1 -0
  299. package/dist/interface/assets/mqtt-awK-0sPa.js.br +3 -0
  300. package/dist/interface/assets/mqtt-awK-0sPa.js.gz +0 -0
  301. package/dist/interface/assets/notifications-C3dI-Mb2.js +1 -0
  302. package/dist/interface/assets/notifications-C3dI-Mb2.js.br +0 -0
  303. package/dist/interface/assets/notifications-C3dI-Mb2.js.gz +0 -0
  304. package/dist/interface/assets/plugins-DNe-IpyD.js +1 -0
  305. package/dist/interface/assets/plugins-DNe-IpyD.js.br +0 -0
  306. package/dist/interface/assets/plugins-DNe-IpyD.js.gz +0 -0
  307. package/dist/interface/assets/rooms-aZ-1yqux.js +1 -0
  308. package/dist/interface/assets/rooms-aZ-1yqux.js.br +0 -0
  309. package/dist/interface/assets/rooms-aZ-1yqux.js.gz +0 -0
  310. package/dist/interface/assets/sensorIcons-B2n8mSA1.js +1 -0
  311. package/dist/interface/assets/sensorIcons-B2n8mSA1.js.br +0 -0
  312. package/dist/interface/assets/sensorIcons-B2n8mSA1.js.gz +0 -0
  313. package/dist/interface/assets/sensors-WvDabknx.js +1 -0
  314. package/dist/interface/assets/sensors-WvDabknx.js.br +0 -0
  315. package/dist/interface/assets/sensors-WvDabknx.js.gz +0 -0
  316. package/dist/interface/assets/server-CS00Piad.js +1 -0
  317. package/dist/interface/assets/server-CS00Piad.js.br +0 -0
  318. package/dist/interface/assets/server-CS00Piad.js.gz +0 -0
  319. package/dist/interface/assets/theme-Pa8YlYGw.js +1 -0
  320. package/dist/interface/assets/theme-Pa8YlYGw.js.br +0 -0
  321. package/dist/interface/assets/theme-Pa8YlYGw.js.gz +0 -0
  322. package/dist/interface/assets/types-CVAA-zJR.js +1 -0
  323. package/dist/interface/assets/types-CVAA-zJR.js.br +0 -0
  324. package/dist/interface/assets/types-CVAA-zJR.js.gz +0 -0
  325. package/dist/interface/assets/updates-B_2JKJzB.js +2 -0
  326. package/dist/interface/assets/updates-B_2JKJzB.js.br +0 -0
  327. package/dist/interface/assets/updates-B_2JKJzB.js.gz +0 -0
  328. package/dist/interface/assets/useAppVersion-CuEpmZ_O.js +1 -0
  329. package/dist/interface/assets/useAppVersion-CuEpmZ_O.js.br +0 -0
  330. package/dist/interface/assets/useAppVersion-CuEpmZ_O.js.gz +0 -0
  331. package/dist/interface/assets/useCameraOptions-CRwLXMIc.js +1 -0
  332. package/dist/interface/assets/useCameraOptions-CRwLXMIc.js.br +0 -0
  333. package/dist/interface/assets/useCameraOptions-CRwLXMIc.js.gz +0 -0
  334. package/dist/interface/assets/useKeyboardInset-e2TuYFch.js +1 -0
  335. package/dist/interface/assets/useKeyboardInset-e2TuYFch.js.br +0 -0
  336. package/dist/interface/assets/useKeyboardInset-e2TuYFch.js.gz +0 -0
  337. package/dist/interface/assets/useLogsSocket-DApiCIRx.js +1 -0
  338. package/dist/interface/assets/useLogsSocket-DApiCIRx.js.br +0 -0
  339. package/dist/interface/assets/useLogsSocket-DApiCIRx.js.gz +0 -0
  340. package/dist/interface/assets/useNavLayout-DDcpWBKr.js +1 -0
  341. package/dist/interface/assets/useNavLayout-DDcpWBKr.js.br +0 -0
  342. package/dist/interface/assets/useNavLayout-DDcpWBKr.js.gz +0 -0
  343. package/dist/interface/assets/usePlacementLabel-CeAIoypC.js +1 -0
  344. package/dist/interface/assets/usePlacementLabel-CeAIoypC.js.br +4 -0
  345. package/dist/interface/assets/usePlacementLabel-CeAIoypC.js.gz +0 -0
  346. package/dist/interface/assets/usePlacementSocket-BdUxTN8u.js +1 -0
  347. package/dist/interface/assets/usePlacementSocket-BdUxTN8u.js.br +0 -0
  348. package/dist/interface/assets/usePlacementSocket-BdUxTN8u.js.gz +0 -0
  349. package/dist/interface/assets/usePluginUpdates-CzJHo-c7.js +1 -0
  350. package/dist/interface/assets/usePluginUpdates-CzJHo-c7.js.br +0 -0
  351. package/dist/interface/assets/usePluginUpdates-CzJHo-c7.js.gz +0 -0
  352. package/dist/interface/assets/usePluginsSocket-ClsgHCK0.js +1 -0
  353. package/dist/interface/assets/usePluginsSocket-ClsgHCK0.js.br +0 -0
  354. package/dist/interface/assets/usePluginsSocket-ClsgHCK0.js.gz +0 -0
  355. package/dist/interface/assets/usePushRegistration-CXChru-H.js +2 -0
  356. package/dist/interface/assets/usePushRegistration-CXChru-H.js.br +0 -0
  357. package/dist/interface/assets/usePushRegistration-CXChru-H.js.gz +0 -0
  358. package/dist/interface/assets/useServerRestart-CjwXpwtq.js +1 -0
  359. package/dist/interface/assets/useServerRestart-CjwXpwtq.js.br +0 -0
  360. package/dist/interface/assets/useServerRestart-CjwXpwtq.js.gz +0 -0
  361. package/dist/interface/assets/useTabSwipe-D7mGV0pr.js +1 -0
  362. package/dist/interface/assets/useTabSwipe-D7mGV0pr.js.br +0 -0
  363. package/dist/interface/assets/useTabSwipe-D7mGV0pr.js.gz +0 -0
  364. package/dist/interface/assets/useUpdateChannel-Ba1im3eb.js +1 -0
  365. package/dist/interface/assets/useUpdateChannel-Ba1im3eb.js.br +0 -0
  366. package/dist/interface/assets/useUpdateChannel-Ba1im3eb.js.gz +0 -0
  367. package/dist/interface/assets/useUpdatesSocket-D37pbc6H.js +1 -0
  368. package/dist/interface/assets/useUpdatesSocket-D37pbc6H.js.br +0 -0
  369. package/dist/interface/assets/useUpdatesSocket-D37pbc6H.js.gz +0 -0
  370. package/dist/interface/assets/useUserOptions-CDYyeM93.js +1 -0
  371. package/dist/interface/assets/useUserOptions-CDYyeM93.js.br +0 -0
  372. package/dist/interface/assets/useUserOptions-CDYyeM93.js.gz +0 -0
  373. package/dist/interface/ha/404-BywY4Jvr.js +60 -0
  374. package/dist/interface/ha/404-BywY4Jvr.js.br +0 -0
  375. package/dist/interface/ha/404-BywY4Jvr.js.gz +0 -0
  376. package/dist/interface/ha/About-8PFRh-Sf.js +55 -0
  377. package/dist/interface/ha/About-8PFRh-Sf.js.br +0 -0
  378. package/dist/interface/ha/About-8PFRh-Sf.js.gz +0 -0
  379. package/dist/interface/ha/Assistant-C77OjjFX.js +11071 -0
  380. package/dist/interface/ha/Assistant-C77OjjFX.js.br +0 -0
  381. package/dist/interface/ha/Assistant-C77OjjFX.js.gz +0 -0
  382. package/dist/interface/ha/Automation-BJMHiGPH.js +2009 -0
  383. package/dist/interface/ha/Automation-BJMHiGPH.js.br +0 -0
  384. package/dist/interface/ha/Automation-BJMHiGPH.js.gz +0 -0
  385. package/dist/interface/ha/AutomationImport-BHuK66Kc.js +206 -0
  386. package/dist/interface/ha/AutomationImport-BHuK66Kc.js.br +0 -0
  387. package/dist/interface/ha/AutomationImport-BHuK66Kc.js.gz +0 -0
  388. package/dist/interface/ha/AutomationStore-CGod8A1N.js +336 -0
  389. package/dist/interface/ha/AutomationStore-CGod8A1N.js.br +0 -0
  390. package/dist/interface/ha/AutomationStore-CGod8A1N.js.gz +0 -0
  391. package/dist/interface/ha/AutomationStoreDetail-6I678hDH.js +121 -0
  392. package/dist/interface/ha/AutomationStoreDetail-6I678hDH.js.br +0 -0
  393. package/dist/interface/ha/AutomationStoreDetail-6I678hDH.js.gz +0 -0
  394. package/dist/interface/ha/Automations-9ppBO6CN.js +423 -0
  395. package/dist/interface/ha/Automations-9ppBO6CN.js.br +0 -0
  396. package/dist/interface/ha/Automations-9ppBO6CN.js.gz +0 -0
  397. package/dist/interface/ha/Camera-DjAyDYgY.js +740 -0
  398. package/dist/interface/ha/Camera-DjAyDYgY.js.br +0 -0
  399. package/dist/interface/ha/Camera-DjAyDYgY.js.gz +0 -0
  400. package/dist/interface/ha/CameraConsole-BM5rWzey.js +52 -0
  401. package/dist/interface/ha/CameraConsole-BM5rWzey.js.br +0 -0
  402. package/dist/interface/ha/CameraConsole-BM5rWzey.js.gz +0 -0
  403. package/dist/interface/ha/Cameras-CBRTfWbL.js +1934 -0
  404. package/dist/interface/ha/Cameras-CBRTfWbL.js.br +0 -0
  405. package/dist/interface/ha/Cameras-CBRTfWbL.js.gz +0 -0
  406. package/dist/interface/ha/Camview-B5cIFdGC.js +1368 -0
  407. package/dist/interface/ha/Camview-B5cIFdGC.js.br +0 -0
  408. package/dist/interface/ha/Camview-B5cIFdGC.js.gz +0 -0
  409. package/dist/interface/ha/Config-DhSdVsF7.js +354 -0
  410. package/dist/interface/ha/Config-DhSdVsF7.js.br +0 -0
  411. package/dist/interface/ha/Config-DhSdVsF7.js.gz +0 -0
  412. package/dist/interface/ha/ConfigActionAssistant-Bw4vlUC0.js +182 -0
  413. package/dist/interface/ha/ConfigActionAssistant-Bw4vlUC0.js.br +0 -0
  414. package/dist/interface/ha/ConfigActionAssistant-Bw4vlUC0.js.gz +0 -0
  415. package/dist/interface/ha/ConfigActionCameraControl-RrZvG6KM.js +152 -0
  416. package/dist/interface/ha/ConfigActionCameraControl-RrZvG6KM.js.br +0 -0
  417. package/dist/interface/ha/ConfigActionCameraControl-RrZvG6KM.js.gz +0 -0
  418. package/dist/interface/ha/ConfigActionHttp-CEiCUR_V.js +134 -0
  419. package/dist/interface/ha/ConfigActionHttp-CEiCUR_V.js.br +0 -0
  420. package/dist/interface/ha/ConfigActionHttp-CEiCUR_V.js.gz +0 -0
  421. package/dist/interface/ha/ConfigActionImageInput-BO0wSY56.js +170 -0
  422. package/dist/interface/ha/ConfigActionImageInput-BO0wSY56.js.br +0 -0
  423. package/dist/interface/ha/ConfigActionImageInput-BO0wSY56.js.gz +0 -0
  424. package/dist/interface/ha/ConfigActionMqtt-CCtnhVk9.js +78 -0
  425. package/dist/interface/ha/ConfigActionMqtt-CCtnhVk9.js.br +0 -0
  426. package/dist/interface/ha/ConfigActionMqtt-CCtnhVk9.js.gz +0 -0
  427. package/dist/interface/ha/ConfigActionNotification-70DQpmHo.js +198 -0
  428. package/dist/interface/ha/ConfigActionNotification-70DQpmHo.js.br +0 -0
  429. package/dist/interface/ha/ConfigActionNotification-70DQpmHo.js.gz +0 -0
  430. package/dist/interface/ha/ConfigActionNotificationControl-DK-3aXGI.js +111 -0
  431. package/dist/interface/ha/ConfigActionNotificationControl-DK-3aXGI.js.br +0 -0
  432. package/dist/interface/ha/ConfigActionNotificationControl-DK-3aXGI.js.gz +0 -0
  433. package/dist/interface/ha/ConfigActionOutput-B0ib6a16.js +98 -0
  434. package/dist/interface/ha/ConfigActionOutput-B0ib6a16.js.br +0 -0
  435. package/dist/interface/ha/ConfigActionOutput-B0ib6a16.js.gz +0 -0
  436. package/dist/interface/ha/ConfigActionPlugin-QkF9yHeH.js +171 -0
  437. package/dist/interface/ha/ConfigActionPlugin-QkF9yHeH.js.br +0 -0
  438. package/dist/interface/ha/ConfigActionPlugin-QkF9yHeH.js.gz +0 -0
  439. package/dist/interface/ha/ConfigActionSensor-CE1DOevQ.js +138 -0
  440. package/dist/interface/ha/ConfigActionSensor-CE1DOevQ.js.br +0 -0
  441. package/dist/interface/ha/ConfigActionSensor-CE1DOevQ.js.gz +0 -0
  442. package/dist/interface/ha/ConfigActionSnapshot-B7dlBztR.js +45 -0
  443. package/dist/interface/ha/ConfigActionSnapshot-B7dlBztR.js.br +0 -0
  444. package/dist/interface/ha/ConfigActionSnapshot-B7dlBztR.js.gz +0 -0
  445. package/dist/interface/ha/ConfigActionVariable-DErggfIp.js +88 -0
  446. package/dist/interface/ha/ConfigActionVariable-DErggfIp.js.br +0 -0
  447. package/dist/interface/ha/ConfigActionVariable-DErggfIp.js.gz +0 -0
  448. package/dist/interface/ha/ConfigConditionIfElse-BIeovH2W.js +124 -0
  449. package/dist/interface/ha/ConfigConditionIfElse-BIeovH2W.js.br +0 -0
  450. package/dist/interface/ha/ConfigConditionIfElse-BIeovH2W.js.gz +0 -0
  451. package/dist/interface/ha/ConfigConditionSensorState-CJpeowpG.js +190 -0
  452. package/dist/interface/ha/ConfigConditionSensorState-CJpeowpG.js.br +0 -0
  453. package/dist/interface/ha/ConfigConditionSensorState-CJpeowpG.js.gz +0 -0
  454. package/dist/interface/ha/ConfigConditionSwitch-CBbPCmwW.js +128 -0
  455. package/dist/interface/ha/ConfigConditionSwitch-CBbPCmwW.js.br +0 -0
  456. package/dist/interface/ha/ConfigConditionSwitch-CBbPCmwW.js.gz +0 -0
  457. package/dist/interface/ha/ConfigSensorValueInput-DQ34op2F.js +173 -0
  458. package/dist/interface/ha/ConfigSensorValueInput-DQ34op2F.js.br +0 -0
  459. package/dist/interface/ha/ConfigSensorValueInput-DQ34op2F.js.gz +0 -0
  460. package/dist/interface/ha/ConfigTriggerDetection-DRKhDMwq.js +241 -0
  461. package/dist/interface/ha/ConfigTriggerDetection-DRKhDMwq.js.br +0 -0
  462. package/dist/interface/ha/ConfigTriggerDetection-DRKhDMwq.js.gz +0 -0
  463. package/dist/interface/ha/ConfigTriggerGeofence-qIlay2IL.js +4836 -0
  464. package/dist/interface/ha/ConfigTriggerGeofence-qIlay2IL.js.br +0 -0
  465. package/dist/interface/ha/ConfigTriggerGeofence-qIlay2IL.js.gz +0 -0
  466. package/dist/interface/ha/ConfigTriggerMqtt-v4qtTZky.js +134 -0
  467. package/dist/interface/ha/ConfigTriggerMqtt-v4qtTZky.js.br +0 -0
  468. package/dist/interface/ha/ConfigTriggerMqtt-v4qtTZky.js.gz +0 -0
  469. package/dist/interface/ha/ConfigTriggerSensor-D41IjJmD.js +73 -0
  470. package/dist/interface/ha/ConfigTriggerSensor-D41IjJmD.js.br +0 -0
  471. package/dist/interface/ha/ConfigTriggerSensor-D41IjJmD.js.gz +0 -0
  472. package/dist/interface/ha/ConfigTriggerSystem-r8UntVtC.js +192 -0
  473. package/dist/interface/ha/ConfigTriggerSystem-r8UntVtC.js.br +0 -0
  474. package/dist/interface/ha/ConfigTriggerSystem-r8UntVtC.js.gz +0 -0
  475. package/dist/interface/ha/ConfigTriggerWebhook-BdB-5oa1.js +94 -0
  476. package/dist/interface/ha/ConfigTriggerWebhook-BdB-5oa1.js.br +0 -0
  477. package/dist/interface/ha/ConfigTriggerWebhook-BdB-5oa1.js.gz +0 -0
  478. package/dist/interface/ha/Console--T_nKTS8.js +347 -0
  479. package/dist/interface/ha/Console--T_nKTS8.js.br +0 -0
  480. package/dist/interface/ha/Console--T_nKTS8.js.gz +0 -0
  481. package/dist/interface/ha/CuiAutomationRunsDialog-Cf606jHZ.js +129 -0
  482. package/dist/interface/ha/CuiAutomationRunsDialog-Cf606jHZ.js.br +0 -0
  483. package/dist/interface/ha/CuiAutomationRunsDialog-Cf606jHZ.js.gz +0 -0
  484. package/dist/interface/ha/CuiBottomSheet-CJEhDFzJ.js +270 -0
  485. package/dist/interface/ha/CuiBottomSheet-CJEhDFzJ.js.br +0 -0
  486. package/dist/interface/ha/CuiBottomSheet-CJEhDFzJ.js.gz +0 -0
  487. package/dist/interface/ha/CuiCameraRecordings-CrmTwIX1.js +575 -0
  488. package/dist/interface/ha/CuiCameraRecordings-CrmTwIX1.js.br +0 -0
  489. package/dist/interface/ha/CuiCameraRecordings-CrmTwIX1.js.gz +0 -0
  490. package/dist/interface/ha/CuiCameraShares-Cr1pVgZz.js +120 -0
  491. package/dist/interface/ha/CuiCameraShares-Cr1pVgZz.js.br +0 -0
  492. package/dist/interface/ha/CuiCameraShares-Cr1pVgZz.js.gz +0 -0
  493. package/dist/interface/ha/CuiCameraTable-ZX4L7FCs.js +105 -0
  494. package/dist/interface/ha/CuiCameraTable-ZX4L7FCs.js.br +0 -0
  495. package/dist/interface/ha/CuiCameraTable-ZX4L7FCs.js.gz +0 -0
  496. package/dist/interface/ha/CuiChartTable-BW62b9Qq.js +6797 -0
  497. package/dist/interface/ha/CuiChartTable-BW62b9Qq.js.br +0 -0
  498. package/dist/interface/ha/CuiChartTable-BW62b9Qq.js.gz +0 -0
  499. package/dist/interface/ha/CuiConsole-DiwBwttJ.js +234 -0
  500. package/dist/interface/ha/CuiConsole-DiwBwttJ.js.br +0 -0
  501. package/dist/interface/ha/CuiConsole-DiwBwttJ.js.gz +0 -0
  502. package/dist/interface/ha/CuiDataTable-CV5ePNzg.js +8860 -0
  503. package/dist/interface/ha/CuiDataTable-CV5ePNzg.js.br +0 -0
  504. package/dist/interface/ha/CuiDataTable-CV5ePNzg.js.gz +0 -0
  505. package/dist/interface/ha/CuiMoveCodeForm-BWx1Cq-F.js +89 -0
  506. package/dist/interface/ha/CuiMoveCodeForm-BWx1Cq-F.js.br +0 -0
  507. package/dist/interface/ha/CuiMoveCodeForm-BWx1Cq-F.js.gz +0 -0
  508. package/dist/interface/ha/CuiPluginCard-BGDlbiOg.js +778 -0
  509. package/dist/interface/ha/CuiPluginCard-BGDlbiOg.js.br +0 -0
  510. package/dist/interface/ha/CuiPluginCard-BGDlbiOg.js.gz +0 -0
  511. package/dist/interface/ha/CuiPluginOAuthButton-BIHbzHVh.js +74 -0
  512. package/dist/interface/ha/CuiPluginOAuthButton-BIHbzHVh.js.br +0 -0
  513. package/dist/interface/ha/CuiPluginOAuthButton-BIHbzHVh.js.gz +0 -0
  514. package/dist/interface/ha/CuiPluginTrustBadge-zofcBVHD.js +122 -0
  515. package/dist/interface/ha/CuiPluginTrustBadge-zofcBVHD.js.br +0 -0
  516. package/dist/interface/ha/CuiPluginTrustBadge-zofcBVHD.js.gz +0 -0
  517. package/dist/interface/ha/CuiQRCode-Ci5CO-6f.js +86 -0
  518. package/dist/interface/ha/CuiQRCode-Ci5CO-6f.js.br +0 -0
  519. package/dist/interface/ha/CuiQRCode-Ci5CO-6f.js.gz +0 -0
  520. package/dist/interface/ha/CuiSchema-2zcLy55L.js +952 -0
  521. package/dist/interface/ha/CuiSchema-2zcLy55L.js.br +0 -0
  522. package/dist/interface/ha/CuiSchema-2zcLy55L.js.gz +0 -0
  523. package/dist/interface/ha/CuiTopNavbarItem-B0732iHw.js +141 -0
  524. package/dist/interface/ha/CuiTopNavbarItem-B0732iHw.js.br +0 -0
  525. package/dist/interface/ha/CuiTopNavbarItem-B0732iHw.js.gz +0 -0
  526. package/dist/interface/ha/Faces-B4aKBeyA.js +1659 -0
  527. package/dist/interface/ha/Faces-B4aKBeyA.js.br +0 -0
  528. package/dist/interface/ha/Faces-B4aKBeyA.js.gz +0 -0
  529. package/dist/interface/ha/FirstSteps-Ctp9YBZ6.js +254 -0
  530. package/dist/interface/ha/FirstSteps-Ctp9YBZ6.js.br +0 -0
  531. package/dist/interface/ha/FirstSteps-Ctp9YBZ6.js.gz +0 -0
  532. package/dist/interface/ha/Floorplan-CXzOZKsI.js +3707 -0
  533. package/dist/interface/ha/Floorplan-CXzOZKsI.js.br +0 -0
  534. package/dist/interface/ha/Floorplan-CXzOZKsI.js.gz +0 -0
  535. package/dist/interface/ha/Instances-CNsMxi15.js +670 -0
  536. package/dist/interface/ha/Instances-CNsMxi15.js.br +0 -0
  537. package/dist/interface/ha/Instances-CNsMxi15.js.gz +0 -0
  538. package/dist/interface/ha/Logs-EnUf7xcF.js +417 -0
  539. package/dist/interface/ha/Logs-EnUf7xcF.js.br +0 -0
  540. package/dist/interface/ha/Logs-EnUf7xcF.js.gz +0 -0
  541. package/dist/interface/ha/Menu-DuJ0iKHi.js +159 -0
  542. package/dist/interface/ha/Menu-DuJ0iKHi.js.br +0 -0
  543. package/dist/interface/ha/Menu-DuJ0iKHi.js.gz +0 -0
  544. package/dist/interface/ha/Metrics-CSnvk_qW.js +1484 -0
  545. package/dist/interface/ha/Metrics-CSnvk_qW.js.br +0 -0
  546. package/dist/interface/ha/Metrics-CSnvk_qW.js.gz +0 -0
  547. package/dist/interface/ha/OAuthDeviceFlow-JM34RDhw.js +112 -0
  548. package/dist/interface/ha/OAuthDeviceFlow-JM34RDhw.js.br +0 -0
  549. package/dist/interface/ha/OAuthDeviceFlow-JM34RDhw.js.gz +0 -0
  550. package/dist/interface/ha/Plugin-BIkF3weH.js +1746 -0
  551. package/dist/interface/ha/Plugin-BIkF3weH.js.br +0 -0
  552. package/dist/interface/ha/Plugin-BIkF3weH.js.gz +0 -0
  553. package/dist/interface/ha/PluginConsole-DPO3htV-.js +56 -0
  554. package/dist/interface/ha/PluginConsole-DPO3htV-.js.br +0 -0
  555. package/dist/interface/ha/PluginConsole-DPO3htV-.js.gz +0 -0
  556. package/dist/interface/ha/PluginDetail-Cud7M8Qx.js +804 -0
  557. package/dist/interface/ha/PluginDetail-Cud7M8Qx.js.br +0 -0
  558. package/dist/interface/ha/PluginDetail-Cud7M8Qx.js.gz +0 -0
  559. package/dist/interface/ha/PluginSearch-DpbGVKcN.js +462 -0
  560. package/dist/interface/ha/PluginSearch-DpbGVKcN.js.br +0 -0
  561. package/dist/interface/ha/PluginSearch-DpbGVKcN.js.gz +0 -0
  562. package/dist/interface/ha/PluginUpdateProgress-Cm8b1STp.js +34 -0
  563. package/dist/interface/ha/PluginUpdateProgress-Cm8b1STp.js.br +0 -0
  564. package/dist/interface/ha/PluginUpdateProgress-Cm8b1STp.js.gz +0 -0
  565. package/dist/interface/ha/Plugins-BmQpdq53.js +697 -0
  566. package/dist/interface/ha/Plugins-BmQpdq53.js.br +0 -0
  567. package/dist/interface/ha/Plugins-BmQpdq53.js.gz +0 -0
  568. package/dist/interface/ha/Recordings-DiyffWNR.js +1916 -0
  569. package/dist/interface/ha/Recordings-DiyffWNR.js.br +0 -0
  570. package/dist/interface/ha/Recordings-DiyffWNR.js.gz +0 -0
  571. package/dist/interface/ha/SensorEdit-7ooblzTY.js +1466 -0
  572. package/dist/interface/ha/SensorEdit-7ooblzTY.js.br +0 -0
  573. package/dist/interface/ha/SensorEdit-7ooblzTY.js.gz +0 -0
  574. package/dist/interface/ha/SensorHistory-BL5BX7az.js +54 -0
  575. package/dist/interface/ha/SensorHistory-BL5BX7az.js.br +0 -0
  576. package/dist/interface/ha/SensorHistory-BL5BX7az.js.gz +0 -0
  577. package/dist/interface/ha/Sensors-Cx69JhE8.js +1400 -0
  578. package/dist/interface/ha/Sensors-Cx69JhE8.js.br +0 -0
  579. package/dist/interface/ha/Sensors-Cx69JhE8.js.gz +0 -0
  580. package/dist/interface/ha/Settings-BOPHH2KY.js +218 -0
  581. package/dist/interface/ha/Settings-BOPHH2KY.js.br +0 -0
  582. package/dist/interface/ha/Settings-BOPHH2KY.js.gz +0 -0
  583. package/dist/interface/ha/SettingsAccount-CtLqZVdb.js +968 -0
  584. package/dist/interface/ha/SettingsAccount-CtLqZVdb.js.br +0 -0
  585. package/dist/interface/ha/SettingsAccount-CtLqZVdb.js.gz +0 -0
  586. package/dist/interface/ha/SettingsAppearance-uDWU75lw.js +201 -0
  587. package/dist/interface/ha/SettingsAppearance-uDWU75lw.js.br +0 -0
  588. package/dist/interface/ha/SettingsAppearance-uDWU75lw.js.gz +0 -0
  589. package/dist/interface/ha/SettingsAssistant-DvvdE6OG.js +2134 -0
  590. package/dist/interface/ha/SettingsAssistant-DvvdE6OG.js.br +0 -0
  591. package/dist/interface/ha/SettingsAssistant-DvvdE6OG.js.gz +0 -0
  592. package/dist/interface/ha/SettingsBackup-BmdfMnIU.js +1047 -0
  593. package/dist/interface/ha/SettingsBackup-BmdfMnIU.js.br +0 -0
  594. package/dist/interface/ha/SettingsBackup-BmdfMnIU.js.gz +0 -0
  595. package/dist/interface/ha/SettingsList-Da4qc9Bj.js +40 -0
  596. package/dist/interface/ha/SettingsList-Da4qc9Bj.js.br +0 -0
  597. package/dist/interface/ha/SettingsList-Da4qc9Bj.js.gz +0 -0
  598. package/dist/interface/ha/SettingsMqtt-CxvlT_-F.js +512 -0
  599. package/dist/interface/ha/SettingsMqtt-CxvlT_-F.js.br +0 -0
  600. package/dist/interface/ha/SettingsMqtt-CxvlT_-F.js.gz +0 -0
  601. package/dist/interface/ha/SettingsNotifications-e7seCZzS.js +514 -0
  602. package/dist/interface/ha/SettingsNotifications-e7seCZzS.js.br +0 -0
  603. package/dist/interface/ha/SettingsNotifications-e7seCZzS.js.gz +0 -0
  604. package/dist/interface/ha/SettingsRecordings-DsbNW8h3.js +152 -0
  605. package/dist/interface/ha/SettingsRecordings-DsbNW8h3.js.br +0 -0
  606. package/dist/interface/ha/SettingsRecordings-DsbNW8h3.js.gz +0 -0
  607. package/dist/interface/ha/SettingsRemote-BhOZCRFm.js +1523 -0
  608. package/dist/interface/ha/SettingsRemote-BhOZCRFm.js.br +0 -0
  609. package/dist/interface/ha/SettingsRemote-BhOZCRFm.js.gz +0 -0
  610. package/dist/interface/ha/SettingsSystem-BTjdaej-.js +382 -0
  611. package/dist/interface/ha/SettingsSystem-BTjdaej-.js.br +0 -0
  612. package/dist/interface/ha/SettingsSystem-BTjdaej-.js.gz +0 -0
  613. package/dist/interface/ha/SettingsUsers-66Bn-ZuP.js +370 -0
  614. package/dist/interface/ha/SettingsUsers-66Bn-ZuP.js.br +0 -0
  615. package/dist/interface/ha/SettingsUsers-66Bn-ZuP.js.gz +0 -0
  616. package/dist/interface/ha/Terminal-Gb4DqytJ.js +611 -0
  617. package/dist/interface/ha/Terminal-Gb4DqytJ.js.br +0 -0
  618. package/dist/interface/ha/Terminal-Gb4DqytJ.js.gz +0 -0
  619. package/dist/interface/ha/Training-B0_5KTik.js +1829 -0
  620. package/dist/interface/ha/Training-B0_5KTik.js.br +0 -0
  621. package/dist/interface/ha/Training-B0_5KTik.js.gz +0 -0
  622. package/dist/interface/ha/Updates-BChc7gSL.js +357 -0
  623. package/dist/interface/ha/Updates-BChc7gSL.js.br +0 -0
  624. package/dist/interface/ha/Updates-BChc7gSL.js.gz +0 -0
  625. package/dist/interface/ha/VariableInput-CF0npLOt.js +52 -0
  626. package/dist/interface/ha/VariableInput-CF0npLOt.js.br +2 -0
  627. package/dist/interface/ha/VariableInput-CF0npLOt.js.gz +0 -0
  628. package/dist/interface/ha/VersionsHandler-DpFooo74.js +221 -0
  629. package/dist/interface/ha/VersionsHandler-DpFooo74.js.br +0 -0
  630. package/dist/interface/ha/VersionsHandler-DpFooo74.js.gz +0 -0
  631. package/dist/interface/ha/VirtualSensorCreate-cGwMMnUa.js +102 -0
  632. package/dist/interface/ha/VirtualSensorCreate-cGwMMnUa.js.br +0 -0
  633. package/dist/interface/ha/VirtualSensorCreate-cGwMMnUa.js.gz +0 -0
  634. package/dist/interface/ha/Workers-0BvEZt5t.js +1270 -0
  635. package/dist/interface/ha/Workers-0BvEZt5t.js.br +0 -0
  636. package/dist/interface/ha/Workers-0BvEZt5t.js.gz +0 -0
  637. package/dist/interface/ha/api-BCqn9EdE.js +69075 -0
  638. package/dist/interface/ha/api-BCqn9EdE.js.br +0 -0
  639. package/dist/interface/ha/api-BCqn9EdE.js.gz +0 -0
  640. package/dist/interface/ha/api-BysLRFXx.js +29 -0
  641. package/dist/interface/ha/api-BysLRFXx.js.br +0 -0
  642. package/dist/interface/ha/api-BysLRFXx.js.gz +0 -0
  643. package/dist/interface/ha/assistant-A23QDBcR.js +349 -0
  644. package/dist/interface/ha/assistant-A23QDBcR.js.br +0 -0
  645. package/dist/interface/ha/assistant-A23QDBcR.js.gz +0 -0
  646. package/dist/interface/ha/auth-DhFoGtmO.js +271 -0
  647. package/dist/interface/ha/auth-DhFoGtmO.js.br +0 -0
  648. package/dist/interface/ha/auth-DhFoGtmO.js.gz +0 -0
  649. package/dist/interface/ha/automationBlueprint-DBXBbXBW.js +250 -0
  650. package/dist/interface/ha/automationBlueprint-DBXBbXBW.js.br +0 -0
  651. package/dist/interface/ha/automationBlueprint-DBXBbXBW.js.gz +0 -0
  652. package/dist/interface/ha/cameraui-cards.js +2 -2
  653. package/dist/interface/ha/cards-CHOFxf6N.js +13296 -0
  654. package/dist/interface/ha/cards-CHOFxf6N.js.br +0 -0
  655. package/dist/interface/ha/cards-CHOFxf6N.js.gz +0 -0
  656. package/dist/interface/ha/config-CMdrWwWe.js +116 -0
  657. package/dist/interface/ha/config-CMdrWwWe.js.br +0 -0
  658. package/dist/interface/ha/config-CMdrWwWe.js.gz +0 -0
  659. package/dist/interface/ha/mqtt-mSBMQfvC.js +56 -0
  660. package/dist/interface/ha/mqtt-mSBMQfvC.js.br +0 -0
  661. package/dist/interface/ha/mqtt-mSBMQfvC.js.gz +0 -0
  662. package/dist/interface/ha/notifications-Dm7vixDw.js +159 -0
  663. package/dist/interface/ha/notifications-Dm7vixDw.js.br +0 -0
  664. package/dist/interface/ha/notifications-Dm7vixDw.js.gz +0 -0
  665. package/dist/interface/ha/plugins-kJK_P4Pe.js +592 -0
  666. package/dist/interface/ha/plugins-kJK_P4Pe.js.br +0 -0
  667. package/dist/interface/ha/plugins-kJK_P4Pe.js.gz +0 -0
  668. package/dist/interface/ha/rooms-Bgn_uCWa.js +45 -0
  669. package/dist/interface/ha/rooms-Bgn_uCWa.js.br +0 -0
  670. package/dist/interface/ha/rooms-Bgn_uCWa.js.gz +0 -0
  671. package/dist/interface/ha/server-6F-1q6ok.js +244 -0
  672. package/dist/interface/ha/server-6F-1q6ok.js.br +0 -0
  673. package/dist/interface/ha/server-6F-1q6ok.js.gz +0 -0
  674. package/dist/interface/ha/speeddial-C2PO8aXW.js +941 -0
  675. package/dist/interface/ha/speeddial-C2PO8aXW.js.br +0 -0
  676. package/dist/interface/ha/speeddial-C2PO8aXW.js.gz +0 -0
  677. package/dist/interface/ha/types-DcpmATCY.js +1073 -0
  678. package/dist/interface/ha/types-DcpmATCY.js.br +0 -0
  679. package/dist/interface/ha/types-DcpmATCY.js.gz +0 -0
  680. package/dist/interface/ha/updates-D7suFAEb.js +414 -0
  681. package/dist/interface/ha/updates-D7suFAEb.js.br +0 -0
  682. package/dist/interface/ha/updates-D7suFAEb.js.gz +0 -0
  683. package/dist/interface/ha/useAppVersion-BOHQPGyU.js +22 -0
  684. package/dist/interface/ha/useAppVersion-BOHQPGyU.js.br +0 -0
  685. package/dist/interface/ha/useAppVersion-BOHQPGyU.js.gz +0 -0
  686. package/dist/interface/ha/useKeyboardInset-DqEXi6cU.js +27 -0
  687. package/dist/interface/ha/useKeyboardInset-DqEXi6cU.js.br +0 -0
  688. package/dist/interface/ha/useKeyboardInset-DqEXi6cU.js.gz +0 -0
  689. package/dist/interface/ha/useLogsSocket-BYndIF9P.js +74 -0
  690. package/dist/interface/ha/useLogsSocket-BYndIF9P.js.br +0 -0
  691. package/dist/interface/ha/useLogsSocket-BYndIF9P.js.gz +0 -0
  692. package/dist/interface/ha/useNavLayout-C6BUwrGr.js +125 -0
  693. package/dist/interface/ha/useNavLayout-C6BUwrGr.js.br +0 -0
  694. package/dist/interface/ha/useNavLayout-C6BUwrGr.js.gz +0 -0
  695. package/dist/interface/ha/usePlacementLabel-3Zm9fB6D.js +49 -0
  696. package/dist/interface/ha/usePlacementLabel-3Zm9fB6D.js.br +0 -0
  697. package/dist/interface/ha/usePlacementLabel-3Zm9fB6D.js.gz +0 -0
  698. package/dist/interface/ha/useTabSwipe-geIocKKy.js +45 -0
  699. package/dist/interface/ha/useTabSwipe-geIocKKy.js.br +0 -0
  700. package/dist/interface/ha/useTabSwipe-geIocKKy.js.gz +0 -0
  701. package/dist/interface/ha/useUpdateChannel-Czo47qYZ.js +22 -0
  702. package/dist/interface/ha/useUpdateChannel-Czo47qYZ.js.br +0 -0
  703. package/dist/interface/ha/useUpdateChannel-Czo47qYZ.js.gz +0 -0
  704. package/dist/interface/ha/useUpdatesSocket-JwSk5MXu.js +34 -0
  705. package/dist/interface/ha/useUpdatesSocket-JwSk5MXu.js.br +0 -0
  706. package/dist/interface/ha/useUpdatesSocket-JwSk5MXu.js.gz +0 -0
  707. package/dist/interface/ha/useUserOptions-BVYgtZEC.js +15 -0
  708. package/dist/interface/ha/useUserOptions-BVYgtZEC.js.br +0 -0
  709. package/dist/interface/ha/useUserOptions-BVYgtZEC.js.gz +0 -0
  710. package/dist/interface/index.html +22 -22
  711. package/dist/interface/sw.js +1 -1
  712. package/dist/server/assets/docs.json +1 -1
  713. package/dist/server/package.json +3 -3
  714. package/dist/server/requirements.txt +1 -1
  715. package/npm-shrinkwrap.json +53 -53
  716. package/package.json +3 -3
  717. package/dist/interface/assets/404-BMj79XjT.js +0 -1
  718. package/dist/interface/assets/404-BMj79XjT.js.br +0 -0
  719. package/dist/interface/assets/404-BMj79XjT.js.gz +0 -0
  720. package/dist/interface/assets/About-GuOorOsw.js +0 -1
  721. package/dist/interface/assets/About-GuOorOsw.js.br +0 -5
  722. package/dist/interface/assets/About-GuOorOsw.js.gz +0 -0
  723. package/dist/interface/assets/Assistant-BCmv7r12.js +0 -1
  724. package/dist/interface/assets/Assistant-BCmv7r12.js.br +0 -0
  725. package/dist/interface/assets/Assistant-BCmv7r12.js.gz +0 -0
  726. package/dist/interface/assets/Automation-DiCBllSc.js +0 -3
  727. package/dist/interface/assets/Automation-DiCBllSc.js.br +0 -0
  728. package/dist/interface/assets/Automation-DiCBllSc.js.gz +0 -0
  729. package/dist/interface/assets/AutomationImport-DxbW0MBD.js +0 -2
  730. package/dist/interface/assets/AutomationImport-DxbW0MBD.js.br +0 -0
  731. package/dist/interface/assets/AutomationImport-DxbW0MBD.js.gz +0 -0
  732. package/dist/interface/assets/AutomationStore-D2xJRXIr.js +0 -2
  733. package/dist/interface/assets/AutomationStore-D2xJRXIr.js.br +0 -0
  734. package/dist/interface/assets/AutomationStore-D2xJRXIr.js.gz +0 -0
  735. package/dist/interface/assets/AutomationStoreDetail-6UfqyhXv.js +0 -2
  736. package/dist/interface/assets/AutomationStoreDetail-6UfqyhXv.js.br +0 -0
  737. package/dist/interface/assets/AutomationStoreDetail-6UfqyhXv.js.gz +0 -0
  738. package/dist/interface/assets/Automations-B5D6uMR9.js +0 -2
  739. package/dist/interface/assets/Automations-B5D6uMR9.js.br +0 -0
  740. package/dist/interface/assets/Automations-B5D6uMR9.js.gz +0 -0
  741. package/dist/interface/assets/BackupRestore-CWYSA-p9.js +0 -1
  742. package/dist/interface/assets/BackupRestore-CWYSA-p9.js.br +0 -0
  743. package/dist/interface/assets/BackupRestore-CWYSA-p9.js.gz +0 -0
  744. package/dist/interface/assets/Camera-nAhvtDPM.js +0 -2
  745. package/dist/interface/assets/Camera-nAhvtDPM.js.br +0 -0
  746. package/dist/interface/assets/Camera-nAhvtDPM.js.gz +0 -0
  747. package/dist/interface/assets/CameraConsole-BubkOXIn.js +0 -7
  748. package/dist/interface/assets/CameraConsole-BubkOXIn.js.br +0 -0
  749. package/dist/interface/assets/CameraConsole-BubkOXIn.js.gz +0 -0
  750. package/dist/interface/assets/Cameras-_za6U1fG.js +0 -651
  751. package/dist/interface/assets/Cameras-_za6U1fG.js.br +0 -0
  752. package/dist/interface/assets/Cameras-_za6U1fG.js.gz +0 -0
  753. package/dist/interface/assets/Camview-Dz37ulQ3.js +0 -1
  754. package/dist/interface/assets/Camview-Dz37ulQ3.js.br +0 -0
  755. package/dist/interface/assets/Camview-Dz37ulQ3.js.gz +0 -0
  756. package/dist/interface/assets/Config-DJjqahmx.js +0 -2
  757. package/dist/interface/assets/Config-DJjqahmx.js.br +0 -0
  758. package/dist/interface/assets/Config-DJjqahmx.js.gz +0 -0
  759. package/dist/interface/assets/ConfigActionAssistant-DKrLo3aR.js +0 -1
  760. package/dist/interface/assets/ConfigActionAssistant-DKrLo3aR.js.br +0 -0
  761. package/dist/interface/assets/ConfigActionAssistant-DKrLo3aR.js.gz +0 -0
  762. package/dist/interface/assets/ConfigActionCameraControl-DQJouc3y.js +0 -1
  763. package/dist/interface/assets/ConfigActionCameraControl-DQJouc3y.js.br +0 -0
  764. package/dist/interface/assets/ConfigActionCameraControl-DQJouc3y.js.gz +0 -0
  765. package/dist/interface/assets/ConfigActionMqtt-nS3RS1Gk.js +0 -1
  766. package/dist/interface/assets/ConfigActionMqtt-nS3RS1Gk.js.br +0 -0
  767. package/dist/interface/assets/ConfigActionMqtt-nS3RS1Gk.js.gz +0 -0
  768. package/dist/interface/assets/ConfigActionNotification-CKHAbwQC.js +0 -1
  769. package/dist/interface/assets/ConfigActionNotification-CKHAbwQC.js.br +0 -0
  770. package/dist/interface/assets/ConfigActionNotification-CKHAbwQC.js.gz +0 -0
  771. package/dist/interface/assets/ConfigActionNotificationControl-BnSGHsU1.js +0 -1
  772. package/dist/interface/assets/ConfigActionNotificationControl-BnSGHsU1.js.br +0 -0
  773. package/dist/interface/assets/ConfigActionNotificationControl-BnSGHsU1.js.gz +0 -0
  774. package/dist/interface/assets/ConfigActionPlugin-bh6rI0um.js +0 -1
  775. package/dist/interface/assets/ConfigActionPlugin-bh6rI0um.js.br +0 -0
  776. package/dist/interface/assets/ConfigActionPlugin-bh6rI0um.js.gz +0 -0
  777. package/dist/interface/assets/ConfigActionSensor-O4MJd0M1.js +0 -1
  778. package/dist/interface/assets/ConfigActionSensor-O4MJd0M1.js.br +0 -0
  779. package/dist/interface/assets/ConfigActionSensor-O4MJd0M1.js.gz +0 -0
  780. package/dist/interface/assets/ConfigActionSnapshot-Bv1LvsN5.js +0 -1
  781. package/dist/interface/assets/ConfigActionSnapshot-Bv1LvsN5.js.br +0 -0
  782. package/dist/interface/assets/ConfigActionSnapshot-Bv1LvsN5.js.gz +0 -0
  783. package/dist/interface/assets/ConfigConditionSensorState-BvqEGzvU.js +0 -1
  784. package/dist/interface/assets/ConfigConditionSensorState-BvqEGzvU.js.br +0 -0
  785. package/dist/interface/assets/ConfigConditionSensorState-BvqEGzvU.js.gz +0 -0
  786. package/dist/interface/assets/ConfigTriggerDetection-CIiFBNYv.js +0 -1
  787. package/dist/interface/assets/ConfigTriggerDetection-CIiFBNYv.js.br +0 -0
  788. package/dist/interface/assets/ConfigTriggerDetection-CIiFBNYv.js.gz +0 -0
  789. package/dist/interface/assets/ConfigTriggerGeofence-DthsSDZs.js +0 -1
  790. package/dist/interface/assets/ConfigTriggerGeofence-DthsSDZs.js.br +0 -0
  791. package/dist/interface/assets/ConfigTriggerGeofence-DthsSDZs.js.gz +0 -0
  792. package/dist/interface/assets/ConfigTriggerMqtt-CmERgsUS.js +0 -1
  793. package/dist/interface/assets/ConfigTriggerMqtt-CmERgsUS.js.br +0 -0
  794. package/dist/interface/assets/ConfigTriggerMqtt-CmERgsUS.js.gz +0 -0
  795. package/dist/interface/assets/ConfigTriggerSensor-Cu6yNORc.js +0 -1
  796. package/dist/interface/assets/ConfigTriggerSensor-Cu6yNORc.js.br +0 -0
  797. package/dist/interface/assets/ConfigTriggerSensor-Cu6yNORc.js.gz +0 -0
  798. package/dist/interface/assets/ConfigTriggerSystem-GnAYuh6W.js +0 -1
  799. package/dist/interface/assets/ConfigTriggerSystem-GnAYuh6W.js.br +0 -0
  800. package/dist/interface/assets/ConfigTriggerSystem-GnAYuh6W.js.gz +0 -0
  801. package/dist/interface/assets/ConfigTriggerWebhook-BKLfeJO1.js +0 -1
  802. package/dist/interface/assets/ConfigTriggerWebhook-BKLfeJO1.js.br +0 -0
  803. package/dist/interface/assets/ConfigTriggerWebhook-BKLfeJO1.js.gz +0 -0
  804. package/dist/interface/assets/Console-B2LJUI0g.js +0 -1
  805. package/dist/interface/assets/Console-B2LJUI0g.js.br +0 -0
  806. package/dist/interface/assets/Console-B2LJUI0g.js.gz +0 -0
  807. package/dist/interface/assets/CuiAssistantConversation-CixQUjS9.js +0 -5
  808. package/dist/interface/assets/CuiAssistantConversation-CixQUjS9.js.br +0 -0
  809. package/dist/interface/assets/CuiAssistantConversation-CixQUjS9.js.gz +0 -0
  810. package/dist/interface/assets/CuiAutomationRunsDialog-6uaXrJS5.js +0 -1
  811. package/dist/interface/assets/CuiAutomationRunsDialog-6uaXrJS5.js.br +0 -0
  812. package/dist/interface/assets/CuiAutomationRunsDialog-6uaXrJS5.js.gz +0 -0
  813. package/dist/interface/assets/CuiBottomSheet-CAOO-nWU.js +0 -1
  814. package/dist/interface/assets/CuiBottomSheet-CAOO-nWU.js.br +0 -0
  815. package/dist/interface/assets/CuiBottomSheet-CAOO-nWU.js.gz +0 -0
  816. package/dist/interface/assets/CuiBottomSheet-Cs8U_ja7.js +0 -1
  817. package/dist/interface/assets/CuiBottomSheet-Cs8U_ja7.js.br +0 -1
  818. package/dist/interface/assets/CuiBottomSheet-Cs8U_ja7.js.gz +0 -0
  819. package/dist/interface/assets/CuiCameraPipCard-CIhq8eot.js +0 -1
  820. package/dist/interface/assets/CuiCameraPipCard-CIhq8eot.js.br +0 -0
  821. package/dist/interface/assets/CuiCameraPipCard-CIhq8eot.js.gz +0 -0
  822. package/dist/interface/assets/CuiCameraRecordings-DF_sMli8.js +0 -1
  823. package/dist/interface/assets/CuiCameraRecordings-DF_sMli8.js.br +0 -0
  824. package/dist/interface/assets/CuiCameraRecordings-DF_sMli8.js.gz +0 -0
  825. package/dist/interface/assets/CuiCameraShares-BFYlATKA.js +0 -1
  826. package/dist/interface/assets/CuiCameraShares-BFYlATKA.js.br +0 -0
  827. package/dist/interface/assets/CuiCameraShares-BFYlATKA.js.gz +0 -0
  828. package/dist/interface/assets/CuiCameraTable-Bnkb5yFU.js +0 -2
  829. package/dist/interface/assets/CuiCameraTable-Bnkb5yFU.js.br +0 -0
  830. package/dist/interface/assets/CuiCameraTable-Bnkb5yFU.js.gz +0 -0
  831. package/dist/interface/assets/CuiCameraTable-DFINjvlg.js +0 -1
  832. package/dist/interface/assets/CuiCameraTable-DFINjvlg.js.br +0 -1
  833. package/dist/interface/assets/CuiCameraTable-DFINjvlg.js.gz +0 -0
  834. package/dist/interface/assets/CuiChartTable-CGgKsEsq.js +0 -1
  835. package/dist/interface/assets/CuiChartTable-CGgKsEsq.js.br +0 -0
  836. package/dist/interface/assets/CuiChartTable-CGgKsEsq.js.gz +0 -0
  837. package/dist/interface/assets/CuiConsole-Bfg49Yzx.js +0 -5
  838. package/dist/interface/assets/CuiConsole-Bfg49Yzx.js.br +0 -0
  839. package/dist/interface/assets/CuiConsole-Bfg49Yzx.js.gz +0 -0
  840. package/dist/interface/assets/CuiDataTable-CfRZXOio.js +0 -1
  841. package/dist/interface/assets/CuiDataTable-CfRZXOio.js.br +0 -0
  842. package/dist/interface/assets/CuiDataTable-CfRZXOio.js.gz +0 -0
  843. package/dist/interface/assets/CuiLightControl-DJh1UfRy.js +0 -1
  844. package/dist/interface/assets/CuiLightControl-DJh1UfRy.js.br +0 -0
  845. package/dist/interface/assets/CuiLightControl-DJh1UfRy.js.gz +0 -0
  846. package/dist/interface/assets/CuiMoveCodeForm-Cbcc3Rds.js +0 -1
  847. package/dist/interface/assets/CuiMoveCodeForm-Cbcc3Rds.js.br +0 -0
  848. package/dist/interface/assets/CuiMoveCodeForm-Cbcc3Rds.js.gz +0 -0
  849. package/dist/interface/assets/CuiPluginCard-D5o7bz82.js +0 -2
  850. package/dist/interface/assets/CuiPluginCard-D5o7bz82.js.br +0 -0
  851. package/dist/interface/assets/CuiPluginCard-D5o7bz82.js.gz +0 -0
  852. package/dist/interface/assets/CuiPluginCategoryChip-DMxs_ZwE.js +0 -1
  853. package/dist/interface/assets/CuiPluginCategoryChip-DMxs_ZwE.js.br +0 -0
  854. package/dist/interface/assets/CuiPluginCategoryChip-DMxs_ZwE.js.gz +0 -0
  855. package/dist/interface/assets/CuiPluginOAuthButton-BZ5GiClf.js +0 -2
  856. package/dist/interface/assets/CuiPluginOAuthButton-BZ5GiClf.js.br +0 -0
  857. package/dist/interface/assets/CuiPluginOAuthButton-BZ5GiClf.js.gz +0 -0
  858. package/dist/interface/assets/CuiPluginTrustBadge-CXPARdCH.js +0 -1
  859. package/dist/interface/assets/CuiPluginTrustBadge-CXPARdCH.js.br +0 -0
  860. package/dist/interface/assets/CuiPluginTrustBadge-CXPARdCH.js.gz +0 -0
  861. package/dist/interface/assets/CuiQRCode-UBWUs5tI.js +0 -1
  862. package/dist/interface/assets/CuiQRCode-UBWUs5tI.js.br +0 -0
  863. package/dist/interface/assets/CuiQRCode-UBWUs5tI.js.gz +0 -0
  864. package/dist/interface/assets/CuiSchema-CWj38bGw.js +0 -1
  865. package/dist/interface/assets/CuiSchema-CWj38bGw.js.br +0 -0
  866. package/dist/interface/assets/CuiSchema-CWj38bGw.js.gz +0 -0
  867. package/dist/interface/assets/CuiTopNavbarItem-DVEK1s5d.js +0 -1
  868. package/dist/interface/assets/CuiTopNavbarItem-DVEK1s5d.js.br +0 -0
  869. package/dist/interface/assets/CuiTopNavbarItem-DVEK1s5d.js.gz +0 -0
  870. package/dist/interface/assets/Faces-Bo3AYgKe.js +0 -1
  871. package/dist/interface/assets/Faces-Bo3AYgKe.js.br +0 -0
  872. package/dist/interface/assets/Faces-Bo3AYgKe.js.gz +0 -0
  873. package/dist/interface/assets/FirstSteps-BGR7npQx.js +0 -1
  874. package/dist/interface/assets/FirstSteps-BGR7npQx.js.br +0 -0
  875. package/dist/interface/assets/FirstSteps-BGR7npQx.js.gz +0 -0
  876. package/dist/interface/assets/Floorplan-DEAXLv_l.js +0 -1
  877. package/dist/interface/assets/Floorplan-DEAXLv_l.js.br +0 -0
  878. package/dist/interface/assets/Floorplan-DEAXLv_l.js.gz +0 -0
  879. package/dist/interface/assets/Instances-BWRmmXbE.js +0 -1
  880. package/dist/interface/assets/Instances-BWRmmXbE.js.br +0 -0
  881. package/dist/interface/assets/Instances-BWRmmXbE.js.gz +0 -0
  882. package/dist/interface/assets/Logs-Dk47dJCa.js +0 -6
  883. package/dist/interface/assets/Logs-Dk47dJCa.js.br +0 -0
  884. package/dist/interface/assets/Logs-Dk47dJCa.js.gz +0 -0
  885. package/dist/interface/assets/Menu-ByNNjqJn.js +0 -1
  886. package/dist/interface/assets/Menu-ByNNjqJn.js.br +0 -0
  887. package/dist/interface/assets/Menu-ByNNjqJn.js.gz +0 -0
  888. package/dist/interface/assets/Metrics-dwRXd0D8.js +0 -12
  889. package/dist/interface/assets/Metrics-dwRXd0D8.js.br +0 -0
  890. package/dist/interface/assets/Metrics-dwRXd0D8.js.gz +0 -0
  891. package/dist/interface/assets/OAuthDeviceFlow-DN3VwFHC.js +0 -1
  892. package/dist/interface/assets/OAuthDeviceFlow-DN3VwFHC.js.br +0 -0
  893. package/dist/interface/assets/OAuthDeviceFlow-DN3VwFHC.js.gz +0 -0
  894. package/dist/interface/assets/Plugin-CIH0TF3a.js +0 -1
  895. package/dist/interface/assets/Plugin-CIH0TF3a.js.br +0 -0
  896. package/dist/interface/assets/Plugin-CIH0TF3a.js.gz +0 -0
  897. package/dist/interface/assets/PluginConsole-OUbDe_Qi.js +0 -7
  898. package/dist/interface/assets/PluginConsole-OUbDe_Qi.js.br +0 -0
  899. package/dist/interface/assets/PluginConsole-OUbDe_Qi.js.gz +0 -0
  900. package/dist/interface/assets/PluginDetail-DzDdyA_n.js +0 -2
  901. package/dist/interface/assets/PluginDetail-DzDdyA_n.js.br +0 -0
  902. package/dist/interface/assets/PluginDetail-DzDdyA_n.js.gz +0 -0
  903. package/dist/interface/assets/PluginSchema-CDiNUijO.js +0 -1
  904. package/dist/interface/assets/PluginSchema-CDiNUijO.js.br +0 -0
  905. package/dist/interface/assets/PluginSchema-CDiNUijO.js.gz +0 -0
  906. package/dist/interface/assets/PluginSearch-6nfv0rUZ.js +0 -1
  907. package/dist/interface/assets/PluginSearch-6nfv0rUZ.js.br +0 -1
  908. package/dist/interface/assets/PluginSearch-6nfv0rUZ.js.gz +0 -0
  909. package/dist/interface/assets/PluginSearch-CpjvGZ1K.js +0 -2
  910. package/dist/interface/assets/PluginSearch-CpjvGZ1K.js.br +0 -0
  911. package/dist/interface/assets/PluginSearch-CpjvGZ1K.js.gz +0 -0
  912. package/dist/interface/assets/PluginUpdateProgress-BpxK2MxE.js +0 -1
  913. package/dist/interface/assets/PluginUpdateProgress-BpxK2MxE.js.br +0 -0
  914. package/dist/interface/assets/PluginUpdateProgress-BpxK2MxE.js.gz +0 -0
  915. package/dist/interface/assets/Plugins-DRbDoh8f.js +0 -1
  916. package/dist/interface/assets/Plugins-DRbDoh8f.js.br +0 -0
  917. package/dist/interface/assets/Plugins-DRbDoh8f.js.gz +0 -0
  918. package/dist/interface/assets/Recordings-JmKjg1rv.js +0 -1
  919. package/dist/interface/assets/Recordings-JmKjg1rv.js.br +0 -0
  920. package/dist/interface/assets/Recordings-JmKjg1rv.js.gz +0 -0
  921. package/dist/interface/assets/SensorEdit-5iXuq1hX.js +0 -1
  922. package/dist/interface/assets/SensorEdit-5iXuq1hX.js.br +0 -0
  923. package/dist/interface/assets/SensorEdit-5iXuq1hX.js.gz +0 -0
  924. package/dist/interface/assets/SensorHistory-DvW4ylhc.js +0 -1
  925. package/dist/interface/assets/SensorHistory-DvW4ylhc.js.br +0 -0
  926. package/dist/interface/assets/SensorHistory-DvW4ylhc.js.gz +0 -0
  927. package/dist/interface/assets/Sensors-CJRgHg24.js +0 -2
  928. package/dist/interface/assets/Sensors-CJRgHg24.js.br +0 -0
  929. package/dist/interface/assets/Sensors-CJRgHg24.js.gz +0 -0
  930. package/dist/interface/assets/Settings-gP6KvlhW.js +0 -1
  931. package/dist/interface/assets/Settings-gP6KvlhW.js.br +0 -0
  932. package/dist/interface/assets/Settings-gP6KvlhW.js.gz +0 -0
  933. package/dist/interface/assets/SettingsAccount-DxBaSiP3.js +0 -1
  934. package/dist/interface/assets/SettingsAccount-DxBaSiP3.js.br +0 -0
  935. package/dist/interface/assets/SettingsAccount-DxBaSiP3.js.gz +0 -0
  936. package/dist/interface/assets/SettingsAccount-UyW8Rdbu.js +0 -1
  937. package/dist/interface/assets/SettingsAccount-UyW8Rdbu.js.br +0 -0
  938. package/dist/interface/assets/SettingsAccount-UyW8Rdbu.js.gz +0 -0
  939. package/dist/interface/assets/SettingsAppearance-CklnBo48.js +0 -1
  940. package/dist/interface/assets/SettingsAppearance-CklnBo48.js.br +0 -0
  941. package/dist/interface/assets/SettingsAppearance-CklnBo48.js.gz +0 -0
  942. package/dist/interface/assets/SettingsAppearance-CyRil5A6.js +0 -1
  943. package/dist/interface/assets/SettingsAppearance-CyRil5A6.js.br +0 -0
  944. package/dist/interface/assets/SettingsAppearance-CyRil5A6.js.gz +0 -0
  945. package/dist/interface/assets/SettingsAssistant-BpoC9nuP.js +0 -1
  946. package/dist/interface/assets/SettingsAssistant-BpoC9nuP.js.br +0 -0
  947. package/dist/interface/assets/SettingsAssistant-BpoC9nuP.js.gz +0 -0
  948. package/dist/interface/assets/SettingsBackup-qF_Tg4EV.js +0 -1
  949. package/dist/interface/assets/SettingsBackup-qF_Tg4EV.js.br +0 -0
  950. package/dist/interface/assets/SettingsBackup-qF_Tg4EV.js.gz +0 -0
  951. package/dist/interface/assets/SettingsList-DVIZe748.js +0 -1
  952. package/dist/interface/assets/SettingsList-DVIZe748.js.br +0 -0
  953. package/dist/interface/assets/SettingsList-DVIZe748.js.gz +0 -0
  954. package/dist/interface/assets/SettingsMqtt-B-vy3STG.js +0 -1
  955. package/dist/interface/assets/SettingsMqtt-B-vy3STG.js.br +0 -0
  956. package/dist/interface/assets/SettingsMqtt-B-vy3STG.js.gz +0 -0
  957. package/dist/interface/assets/SettingsNotifications-DxkB07uF.js +0 -1
  958. package/dist/interface/assets/SettingsNotifications-DxkB07uF.js.br +0 -0
  959. package/dist/interface/assets/SettingsNotifications-DxkB07uF.js.gz +0 -0
  960. package/dist/interface/assets/SettingsRecordings-yoLYy5Ye.js +0 -1
  961. package/dist/interface/assets/SettingsRecordings-yoLYy5Ye.js.br +0 -0
  962. package/dist/interface/assets/SettingsRecordings-yoLYy5Ye.js.gz +0 -0
  963. package/dist/interface/assets/SettingsRemote-Bl6CSoS0.js +0 -2
  964. package/dist/interface/assets/SettingsRemote-Bl6CSoS0.js.br +0 -0
  965. package/dist/interface/assets/SettingsRemote-Bl6CSoS0.js.gz +0 -0
  966. package/dist/interface/assets/SettingsSystem-CSXyXTlu.js +0 -2
  967. package/dist/interface/assets/SettingsSystem-CSXyXTlu.js.br +0 -0
  968. package/dist/interface/assets/SettingsSystem-CSXyXTlu.js.gz +0 -0
  969. package/dist/interface/assets/SettingsUsers-BWGACbPP.js +0 -1
  970. package/dist/interface/assets/SettingsUsers-BWGACbPP.js.br +0 -0
  971. package/dist/interface/assets/SettingsUsers-BWGACbPP.js.gz +0 -0
  972. package/dist/interface/assets/Terminal-B6u7U9CX.js +0 -4
  973. package/dist/interface/assets/Terminal-B6u7U9CX.js.br +0 -0
  974. package/dist/interface/assets/Terminal-B6u7U9CX.js.gz +0 -0
  975. package/dist/interface/assets/Training-Cn7kcb1P.js +0 -1
  976. package/dist/interface/assets/Training-Cn7kcb1P.js.br +0 -0
  977. package/dist/interface/assets/Training-Cn7kcb1P.js.gz +0 -0
  978. package/dist/interface/assets/Updates-BtcOsKwD.js +0 -2
  979. package/dist/interface/assets/Updates-BtcOsKwD.js.br +0 -0
  980. package/dist/interface/assets/Updates-BtcOsKwD.js.gz +0 -0
  981. package/dist/interface/assets/VersionsHandler-B11ImKTw.js +0 -7
  982. package/dist/interface/assets/VersionsHandler-B11ImKTw.js.br +0 -0
  983. package/dist/interface/assets/VersionsHandler-B11ImKTw.js.gz +0 -0
  984. package/dist/interface/assets/VirtualSensorCreate-Bk6dDT3N.js +0 -1
  985. package/dist/interface/assets/VirtualSensorCreate-Bk6dDT3N.js.br +0 -0
  986. package/dist/interface/assets/VirtualSensorCreate-Bk6dDT3N.js.gz +0 -0
  987. package/dist/interface/assets/Workers-BVY0gIZ6.js +0 -2
  988. package/dist/interface/assets/Workers-BVY0gIZ6.js.br +0 -0
  989. package/dist/interface/assets/Workers-BVY0gIZ6.js.gz +0 -0
  990. package/dist/interface/assets/api-CQ3LkXuk.js +0 -4
  991. package/dist/interface/assets/api-CQ3LkXuk.js.br +0 -0
  992. package/dist/interface/assets/api-CQ3LkXuk.js.gz +0 -0
  993. package/dist/interface/assets/api-D5pj1z4u.js +0 -1
  994. package/dist/interface/assets/api-D5pj1z4u.js.br +0 -2
  995. package/dist/interface/assets/api-D5pj1z4u.js.gz +0 -0
  996. package/dist/interface/assets/assistant-Ak1qQkQD.js +0 -1
  997. package/dist/interface/assets/assistant-Ak1qQkQD.js.br +0 -0
  998. package/dist/interface/assets/assistant-Ak1qQkQD.js.gz +0 -0
  999. package/dist/interface/assets/auth-C5r5IkMf.js +0 -1
  1000. package/dist/interface/assets/auth-C5r5IkMf.js.br +0 -0
  1001. package/dist/interface/assets/auth-C5r5IkMf.js.gz +0 -0
  1002. package/dist/interface/assets/automations-DCanZA4l.js +0 -1
  1003. package/dist/interface/assets/automations-DCanZA4l.js.br +0 -0
  1004. package/dist/interface/assets/automations-DCanZA4l.js.gz +0 -0
  1005. package/dist/interface/assets/cloudHandoff-gh1JjFoB.js +0 -1
  1006. package/dist/interface/assets/cloudHandoff-gh1JjFoB.js.br +0 -1
  1007. package/dist/interface/assets/cloudHandoff-gh1JjFoB.js.gz +0 -0
  1008. package/dist/interface/assets/config-CaeB2xoR.js +0 -1
  1009. package/dist/interface/assets/config-CaeB2xoR.js.br +0 -0
  1010. package/dist/interface/assets/config-CaeB2xoR.js.gz +0 -0
  1011. package/dist/interface/assets/main-81DFrOv-.js +0 -3
  1012. package/dist/interface/assets/main-81DFrOv-.js.br +0 -0
  1013. package/dist/interface/assets/main-81DFrOv-.js.gz +0 -0
  1014. package/dist/interface/assets/mqtt-dxw2twZb.js +0 -1
  1015. package/dist/interface/assets/mqtt-dxw2twZb.js.br +0 -0
  1016. package/dist/interface/assets/mqtt-dxw2twZb.js.gz +0 -0
  1017. package/dist/interface/assets/notifications-wddGMkjM.js +0 -1
  1018. package/dist/interface/assets/notifications-wddGMkjM.js.br +0 -0
  1019. package/dist/interface/assets/notifications-wddGMkjM.js.gz +0 -0
  1020. package/dist/interface/assets/plugins-BtRZhMzq.js +0 -1
  1021. package/dist/interface/assets/plugins-BtRZhMzq.js.br +0 -0
  1022. package/dist/interface/assets/plugins-BtRZhMzq.js.gz +0 -0
  1023. package/dist/interface/assets/rooms-BdUbpVQC.js +0 -1
  1024. package/dist/interface/assets/rooms-BdUbpVQC.js.br +0 -0
  1025. package/dist/interface/assets/rooms-BdUbpVQC.js.gz +0 -0
  1026. package/dist/interface/assets/sensorIcons-BqRrUC21.js +0 -1
  1027. package/dist/interface/assets/sensorIcons-BqRrUC21.js.br +0 -0
  1028. package/dist/interface/assets/sensorIcons-BqRrUC21.js.gz +0 -0
  1029. package/dist/interface/assets/sensors-vvTTj4i4.js +0 -1
  1030. package/dist/interface/assets/sensors-vvTTj4i4.js.br +0 -0
  1031. package/dist/interface/assets/sensors-vvTTj4i4.js.gz +0 -0
  1032. package/dist/interface/assets/server-tY100hue.js +0 -1
  1033. package/dist/interface/assets/server-tY100hue.js.br +0 -0
  1034. package/dist/interface/assets/server-tY100hue.js.gz +0 -0
  1035. package/dist/interface/assets/theme-BstpTBPu.js +0 -1
  1036. package/dist/interface/assets/theme-BstpTBPu.js.br +0 -0
  1037. package/dist/interface/assets/theme-BstpTBPu.js.gz +0 -0
  1038. package/dist/interface/assets/types-DY8IfyYP.js +0 -1
  1039. package/dist/interface/assets/types-DY8IfyYP.js.br +0 -0
  1040. package/dist/interface/assets/types-DY8IfyYP.js.gz +0 -0
  1041. package/dist/interface/assets/updates-Cy0UvDur.js +0 -2
  1042. package/dist/interface/assets/updates-Cy0UvDur.js.br +0 -0
  1043. package/dist/interface/assets/updates-Cy0UvDur.js.gz +0 -0
  1044. package/dist/interface/assets/useAppVersion-BDm52JIU.js +0 -1
  1045. package/dist/interface/assets/useAppVersion-BDm52JIU.js.br +0 -0
  1046. package/dist/interface/assets/useAppVersion-BDm52JIU.js.gz +0 -0
  1047. package/dist/interface/assets/useCameraOptions-qvQUXrOM.js +0 -1
  1048. package/dist/interface/assets/useCameraOptions-qvQUXrOM.js.br +0 -0
  1049. package/dist/interface/assets/useCameraOptions-qvQUXrOM.js.gz +0 -0
  1050. package/dist/interface/assets/useKeyboardInset-CQKU4-0b.js +0 -1
  1051. package/dist/interface/assets/useKeyboardInset-CQKU4-0b.js.br +0 -0
  1052. package/dist/interface/assets/useKeyboardInset-CQKU4-0b.js.gz +0 -0
  1053. package/dist/interface/assets/useLogsSocket-DW6j2kMx.js +0 -1
  1054. package/dist/interface/assets/useLogsSocket-DW6j2kMx.js.br +0 -0
  1055. package/dist/interface/assets/useLogsSocket-DW6j2kMx.js.gz +0 -0
  1056. package/dist/interface/assets/useNavLayout-Dst4SfJr.js +0 -1
  1057. package/dist/interface/assets/useNavLayout-Dst4SfJr.js.br +0 -0
  1058. package/dist/interface/assets/useNavLayout-Dst4SfJr.js.gz +0 -0
  1059. package/dist/interface/assets/usePlacementLabel-C2Prw5hU.js +0 -1
  1060. package/dist/interface/assets/usePlacementLabel-C2Prw5hU.js.br +0 -0
  1061. package/dist/interface/assets/usePlacementLabel-C2Prw5hU.js.gz +0 -0
  1062. package/dist/interface/assets/usePlacementSocket-xLhwFZgQ.js +0 -1
  1063. package/dist/interface/assets/usePlacementSocket-xLhwFZgQ.js.br +0 -0
  1064. package/dist/interface/assets/usePlacementSocket-xLhwFZgQ.js.gz +0 -0
  1065. package/dist/interface/assets/usePluginUpdates-9mTaq1uR.js +0 -1
  1066. package/dist/interface/assets/usePluginUpdates-9mTaq1uR.js.br +0 -0
  1067. package/dist/interface/assets/usePluginUpdates-9mTaq1uR.js.gz +0 -0
  1068. package/dist/interface/assets/usePluginsSocket-TdmWm307.js +0 -1
  1069. package/dist/interface/assets/usePluginsSocket-TdmWm307.js.br +0 -0
  1070. package/dist/interface/assets/usePluginsSocket-TdmWm307.js.gz +0 -0
  1071. package/dist/interface/assets/usePushRegistration-Bbf8WqlP.js +0 -2
  1072. package/dist/interface/assets/usePushRegistration-Bbf8WqlP.js.br +0 -0
  1073. package/dist/interface/assets/usePushRegistration-Bbf8WqlP.js.gz +0 -0
  1074. package/dist/interface/assets/useServerRestart-BqYQ-1Fg.js +0 -1
  1075. package/dist/interface/assets/useServerRestart-BqYQ-1Fg.js.br +0 -0
  1076. package/dist/interface/assets/useServerRestart-BqYQ-1Fg.js.gz +0 -0
  1077. package/dist/interface/assets/useTabSwipe-kd6jHGXB.js +0 -1
  1078. package/dist/interface/assets/useTabSwipe-kd6jHGXB.js.br +0 -0
  1079. package/dist/interface/assets/useTabSwipe-kd6jHGXB.js.gz +0 -0
  1080. package/dist/interface/assets/useUpdateChannel-Dfk91JvX.js +0 -1
  1081. package/dist/interface/assets/useUpdateChannel-Dfk91JvX.js.br +0 -0
  1082. package/dist/interface/assets/useUpdateChannel-Dfk91JvX.js.gz +0 -0
  1083. package/dist/interface/assets/useUpdatesSocket-fqaXJCdb.js +0 -1
  1084. package/dist/interface/assets/useUpdatesSocket-fqaXJCdb.js.br +0 -0
  1085. package/dist/interface/assets/useUpdatesSocket-fqaXJCdb.js.gz +0 -0
  1086. package/dist/interface/assets/useUserOptions-DyE_X9iJ.js +0 -1
  1087. package/dist/interface/assets/useUserOptions-DyE_X9iJ.js.br +0 -0
  1088. package/dist/interface/assets/useUserOptions-DyE_X9iJ.js.gz +0 -0
  1089. package/dist/interface/ha/404-GEJ7Ktz6.js +0 -60
  1090. package/dist/interface/ha/404-GEJ7Ktz6.js.br +0 -0
  1091. package/dist/interface/ha/404-GEJ7Ktz6.js.gz +0 -0
  1092. package/dist/interface/ha/About-DCpvPgLH.js +0 -55
  1093. package/dist/interface/ha/About-DCpvPgLH.js.br +0 -0
  1094. package/dist/interface/ha/About-DCpvPgLH.js.gz +0 -0
  1095. package/dist/interface/ha/Assistant-DW7Ji5Rq.js +0 -11071
  1096. package/dist/interface/ha/Assistant-DW7Ji5Rq.js.br +0 -0
  1097. package/dist/interface/ha/Assistant-DW7Ji5Rq.js.gz +0 -0
  1098. package/dist/interface/ha/Automation-igwD7Gn1.js +0 -2009
  1099. package/dist/interface/ha/Automation-igwD7Gn1.js.br +0 -0
  1100. package/dist/interface/ha/Automation-igwD7Gn1.js.gz +0 -0
  1101. package/dist/interface/ha/AutomationImport-ClhpDYCk.js +0 -206
  1102. package/dist/interface/ha/AutomationImport-ClhpDYCk.js.br +0 -0
  1103. package/dist/interface/ha/AutomationImport-ClhpDYCk.js.gz +0 -0
  1104. package/dist/interface/ha/AutomationStore-Cow2m1WS.js +0 -336
  1105. package/dist/interface/ha/AutomationStore-Cow2m1WS.js.br +0 -0
  1106. package/dist/interface/ha/AutomationStore-Cow2m1WS.js.gz +0 -0
  1107. package/dist/interface/ha/AutomationStoreDetail-DbgmNVZA.js +0 -121
  1108. package/dist/interface/ha/AutomationStoreDetail-DbgmNVZA.js.br +0 -0
  1109. package/dist/interface/ha/AutomationStoreDetail-DbgmNVZA.js.gz +0 -0
  1110. package/dist/interface/ha/Automations-DMoaF0m5.js +0 -423
  1111. package/dist/interface/ha/Automations-DMoaF0m5.js.br +0 -0
  1112. package/dist/interface/ha/Automations-DMoaF0m5.js.gz +0 -0
  1113. package/dist/interface/ha/Camera-CMJ5iJAs.js +0 -740
  1114. package/dist/interface/ha/Camera-CMJ5iJAs.js.br +0 -0
  1115. package/dist/interface/ha/Camera-CMJ5iJAs.js.gz +0 -0
  1116. package/dist/interface/ha/CameraConsole-DOG0ivnD.js +0 -52
  1117. package/dist/interface/ha/CameraConsole-DOG0ivnD.js.br +0 -0
  1118. package/dist/interface/ha/CameraConsole-DOG0ivnD.js.gz +0 -0
  1119. package/dist/interface/ha/Cameras-CTvWFekL.js +0 -1934
  1120. package/dist/interface/ha/Cameras-CTvWFekL.js.br +0 -0
  1121. package/dist/interface/ha/Cameras-CTvWFekL.js.gz +0 -0
  1122. package/dist/interface/ha/Camview-DhjdhCR6.js +0 -1368
  1123. package/dist/interface/ha/Camview-DhjdhCR6.js.br +0 -0
  1124. package/dist/interface/ha/Camview-DhjdhCR6.js.gz +0 -0
  1125. package/dist/interface/ha/Config-DvpZ-GkT.js +0 -354
  1126. package/dist/interface/ha/Config-DvpZ-GkT.js.br +0 -0
  1127. package/dist/interface/ha/Config-DvpZ-GkT.js.gz +0 -0
  1128. package/dist/interface/ha/ConfigActionAssistant-CYdWIg9z.js +0 -182
  1129. package/dist/interface/ha/ConfigActionAssistant-CYdWIg9z.js.br +0 -0
  1130. package/dist/interface/ha/ConfigActionAssistant-CYdWIg9z.js.gz +0 -0
  1131. package/dist/interface/ha/ConfigActionCameraControl-CxBJelQl.js +0 -152
  1132. package/dist/interface/ha/ConfigActionCameraControl-CxBJelQl.js.br +0 -0
  1133. package/dist/interface/ha/ConfigActionCameraControl-CxBJelQl.js.gz +0 -0
  1134. package/dist/interface/ha/ConfigActionHttp-B6gQwkvP.js +0 -134
  1135. package/dist/interface/ha/ConfigActionHttp-B6gQwkvP.js.br +0 -0
  1136. package/dist/interface/ha/ConfigActionHttp-B6gQwkvP.js.gz +0 -0
  1137. package/dist/interface/ha/ConfigActionImageInput-DJVauVUw.js +0 -170
  1138. package/dist/interface/ha/ConfigActionImageInput-DJVauVUw.js.br +0 -0
  1139. package/dist/interface/ha/ConfigActionImageInput-DJVauVUw.js.gz +0 -0
  1140. package/dist/interface/ha/ConfigActionMqtt-BUa-HrP3.js +0 -78
  1141. package/dist/interface/ha/ConfigActionMqtt-BUa-HrP3.js.br +0 -0
  1142. package/dist/interface/ha/ConfigActionMqtt-BUa-HrP3.js.gz +0 -0
  1143. package/dist/interface/ha/ConfigActionNotification-CHJDWRRJ.js +0 -198
  1144. package/dist/interface/ha/ConfigActionNotification-CHJDWRRJ.js.br +0 -0
  1145. package/dist/interface/ha/ConfigActionNotification-CHJDWRRJ.js.gz +0 -0
  1146. package/dist/interface/ha/ConfigActionNotificationControl-BKMaUQZT.js +0 -111
  1147. package/dist/interface/ha/ConfigActionNotificationControl-BKMaUQZT.js.br +0 -0
  1148. package/dist/interface/ha/ConfigActionNotificationControl-BKMaUQZT.js.gz +0 -0
  1149. package/dist/interface/ha/ConfigActionOutput-cEels_Xm.js +0 -98
  1150. package/dist/interface/ha/ConfigActionOutput-cEels_Xm.js.br +0 -0
  1151. package/dist/interface/ha/ConfigActionOutput-cEels_Xm.js.gz +0 -0
  1152. package/dist/interface/ha/ConfigActionPlugin-B-x3ZGbV.js +0 -171
  1153. package/dist/interface/ha/ConfigActionPlugin-B-x3ZGbV.js.br +0 -0
  1154. package/dist/interface/ha/ConfigActionPlugin-B-x3ZGbV.js.gz +0 -0
  1155. package/dist/interface/ha/ConfigActionSensor-2N2FUkVu.js +0 -138
  1156. package/dist/interface/ha/ConfigActionSensor-2N2FUkVu.js.br +0 -0
  1157. package/dist/interface/ha/ConfigActionSensor-2N2FUkVu.js.gz +0 -0
  1158. package/dist/interface/ha/ConfigActionSnapshot-DfNDWDx9.js +0 -45
  1159. package/dist/interface/ha/ConfigActionSnapshot-DfNDWDx9.js.br +0 -0
  1160. package/dist/interface/ha/ConfigActionSnapshot-DfNDWDx9.js.gz +0 -0
  1161. package/dist/interface/ha/ConfigActionVariable-v0e-sIMS.js +0 -88
  1162. package/dist/interface/ha/ConfigActionVariable-v0e-sIMS.js.br +0 -0
  1163. package/dist/interface/ha/ConfigActionVariable-v0e-sIMS.js.gz +0 -0
  1164. package/dist/interface/ha/ConfigConditionIfElse-C0WandPI.js +0 -124
  1165. package/dist/interface/ha/ConfigConditionIfElse-C0WandPI.js.br +0 -0
  1166. package/dist/interface/ha/ConfigConditionIfElse-C0WandPI.js.gz +0 -0
  1167. package/dist/interface/ha/ConfigConditionSensorState-BeLtrLOX.js +0 -190
  1168. package/dist/interface/ha/ConfigConditionSensorState-BeLtrLOX.js.br +0 -0
  1169. package/dist/interface/ha/ConfigConditionSensorState-BeLtrLOX.js.gz +0 -0
  1170. package/dist/interface/ha/ConfigConditionSwitch-B-M1Vqkg.js +0 -128
  1171. package/dist/interface/ha/ConfigConditionSwitch-B-M1Vqkg.js.br +0 -0
  1172. package/dist/interface/ha/ConfigConditionSwitch-B-M1Vqkg.js.gz +0 -0
  1173. package/dist/interface/ha/ConfigSensorValueInput-DtZnPmIW.js +0 -173
  1174. package/dist/interface/ha/ConfigSensorValueInput-DtZnPmIW.js.br +0 -0
  1175. package/dist/interface/ha/ConfigSensorValueInput-DtZnPmIW.js.gz +0 -0
  1176. package/dist/interface/ha/ConfigTriggerDetection-CgOWAkNy.js +0 -241
  1177. package/dist/interface/ha/ConfigTriggerDetection-CgOWAkNy.js.br +0 -0
  1178. package/dist/interface/ha/ConfigTriggerDetection-CgOWAkNy.js.gz +0 -0
  1179. package/dist/interface/ha/ConfigTriggerGeofence-BPRYWDZy.js +0 -4836
  1180. package/dist/interface/ha/ConfigTriggerGeofence-BPRYWDZy.js.br +0 -0
  1181. package/dist/interface/ha/ConfigTriggerGeofence-BPRYWDZy.js.gz +0 -0
  1182. package/dist/interface/ha/ConfigTriggerMqtt-DPUaal2K.js +0 -134
  1183. package/dist/interface/ha/ConfigTriggerMqtt-DPUaal2K.js.br +0 -0
  1184. package/dist/interface/ha/ConfigTriggerMqtt-DPUaal2K.js.gz +0 -0
  1185. package/dist/interface/ha/ConfigTriggerSensor-DJRM2X3t.js +0 -73
  1186. package/dist/interface/ha/ConfigTriggerSensor-DJRM2X3t.js.br +0 -0
  1187. package/dist/interface/ha/ConfigTriggerSensor-DJRM2X3t.js.gz +0 -0
  1188. package/dist/interface/ha/ConfigTriggerSystem-Df7sI0VY.js +0 -192
  1189. package/dist/interface/ha/ConfigTriggerSystem-Df7sI0VY.js.br +0 -0
  1190. package/dist/interface/ha/ConfigTriggerSystem-Df7sI0VY.js.gz +0 -0
  1191. package/dist/interface/ha/ConfigTriggerWebhook-W9NUmjTn.js +0 -94
  1192. package/dist/interface/ha/ConfigTriggerWebhook-W9NUmjTn.js.br +0 -0
  1193. package/dist/interface/ha/ConfigTriggerWebhook-W9NUmjTn.js.gz +0 -0
  1194. package/dist/interface/ha/Console-BwA46zsU.js +0 -347
  1195. package/dist/interface/ha/Console-BwA46zsU.js.br +0 -0
  1196. package/dist/interface/ha/Console-BwA46zsU.js.gz +0 -0
  1197. package/dist/interface/ha/CuiAutomationRunsDialog-B07r5tMe.js +0 -129
  1198. package/dist/interface/ha/CuiAutomationRunsDialog-B07r5tMe.js.br +0 -0
  1199. package/dist/interface/ha/CuiAutomationRunsDialog-B07r5tMe.js.gz +0 -0
  1200. package/dist/interface/ha/CuiBottomSheet-B5uQgEqB.js +0 -270
  1201. package/dist/interface/ha/CuiBottomSheet-B5uQgEqB.js.br +0 -0
  1202. package/dist/interface/ha/CuiBottomSheet-B5uQgEqB.js.gz +0 -0
  1203. package/dist/interface/ha/CuiCameraRecordings-xoThi8Kj.js +0 -575
  1204. package/dist/interface/ha/CuiCameraRecordings-xoThi8Kj.js.br +0 -0
  1205. package/dist/interface/ha/CuiCameraRecordings-xoThi8Kj.js.gz +0 -0
  1206. package/dist/interface/ha/CuiCameraShares-BzvAMAbb.js +0 -120
  1207. package/dist/interface/ha/CuiCameraShares-BzvAMAbb.js.br +0 -0
  1208. package/dist/interface/ha/CuiCameraShares-BzvAMAbb.js.gz +0 -0
  1209. package/dist/interface/ha/CuiCameraTable-BIgtm8mF.js +0 -105
  1210. package/dist/interface/ha/CuiCameraTable-BIgtm8mF.js.br +0 -0
  1211. package/dist/interface/ha/CuiCameraTable-BIgtm8mF.js.gz +0 -0
  1212. package/dist/interface/ha/CuiChartTable-DNcdhXqp.js +0 -6797
  1213. package/dist/interface/ha/CuiChartTable-DNcdhXqp.js.br +0 -0
  1214. package/dist/interface/ha/CuiChartTable-DNcdhXqp.js.gz +0 -0
  1215. package/dist/interface/ha/CuiConsole-CpD0nhAD.js +0 -234
  1216. package/dist/interface/ha/CuiConsole-CpD0nhAD.js.br +0 -0
  1217. package/dist/interface/ha/CuiConsole-CpD0nhAD.js.gz +0 -0
  1218. package/dist/interface/ha/CuiDataTable-CTRZF9Ia.js +0 -8860
  1219. package/dist/interface/ha/CuiDataTable-CTRZF9Ia.js.br +0 -0
  1220. package/dist/interface/ha/CuiDataTable-CTRZF9Ia.js.gz +0 -0
  1221. package/dist/interface/ha/CuiMoveCodeForm-B0MKxC53.js +0 -89
  1222. package/dist/interface/ha/CuiMoveCodeForm-B0MKxC53.js.br +0 -0
  1223. package/dist/interface/ha/CuiMoveCodeForm-B0MKxC53.js.gz +0 -0
  1224. package/dist/interface/ha/CuiPluginCard-CHZ4DaRv.js +0 -778
  1225. package/dist/interface/ha/CuiPluginCard-CHZ4DaRv.js.br +0 -0
  1226. package/dist/interface/ha/CuiPluginCard-CHZ4DaRv.js.gz +0 -0
  1227. package/dist/interface/ha/CuiPluginOAuthButton-uZT2viFR.js +0 -74
  1228. package/dist/interface/ha/CuiPluginOAuthButton-uZT2viFR.js.br +0 -0
  1229. package/dist/interface/ha/CuiPluginOAuthButton-uZT2viFR.js.gz +0 -0
  1230. package/dist/interface/ha/CuiPluginTrustBadge-1MhUw5es.js +0 -122
  1231. package/dist/interface/ha/CuiPluginTrustBadge-1MhUw5es.js.br +0 -0
  1232. package/dist/interface/ha/CuiPluginTrustBadge-1MhUw5es.js.gz +0 -0
  1233. package/dist/interface/ha/CuiQRCode-Grr7tjGw.js +0 -86
  1234. package/dist/interface/ha/CuiQRCode-Grr7tjGw.js.br +0 -0
  1235. package/dist/interface/ha/CuiQRCode-Grr7tjGw.js.gz +0 -0
  1236. package/dist/interface/ha/CuiSchema-BHm9vNRI.js +0 -952
  1237. package/dist/interface/ha/CuiSchema-BHm9vNRI.js.br +0 -0
  1238. package/dist/interface/ha/CuiSchema-BHm9vNRI.js.gz +0 -0
  1239. package/dist/interface/ha/CuiTopNavbarItem-KI3ljdF5.js +0 -141
  1240. package/dist/interface/ha/CuiTopNavbarItem-KI3ljdF5.js.br +0 -0
  1241. package/dist/interface/ha/CuiTopNavbarItem-KI3ljdF5.js.gz +0 -0
  1242. package/dist/interface/ha/Faces-Qjkjd__-.js +0 -1659
  1243. package/dist/interface/ha/Faces-Qjkjd__-.js.br +0 -0
  1244. package/dist/interface/ha/Faces-Qjkjd__-.js.gz +0 -0
  1245. package/dist/interface/ha/FirstSteps-CMPZcVGm.js +0 -254
  1246. package/dist/interface/ha/FirstSteps-CMPZcVGm.js.br +0 -0
  1247. package/dist/interface/ha/FirstSteps-CMPZcVGm.js.gz +0 -0
  1248. package/dist/interface/ha/Floorplan-CrozNTqV.js +0 -3707
  1249. package/dist/interface/ha/Floorplan-CrozNTqV.js.br +0 -0
  1250. package/dist/interface/ha/Floorplan-CrozNTqV.js.gz +0 -0
  1251. package/dist/interface/ha/Instances-DBwRzClE.js +0 -670
  1252. package/dist/interface/ha/Instances-DBwRzClE.js.br +0 -0
  1253. package/dist/interface/ha/Instances-DBwRzClE.js.gz +0 -0
  1254. package/dist/interface/ha/Logs-Ua7xzSrk.js +0 -417
  1255. package/dist/interface/ha/Logs-Ua7xzSrk.js.br +0 -0
  1256. package/dist/interface/ha/Logs-Ua7xzSrk.js.gz +0 -0
  1257. package/dist/interface/ha/Menu-BUIjRr5o.js +0 -159
  1258. package/dist/interface/ha/Menu-BUIjRr5o.js.br +0 -0
  1259. package/dist/interface/ha/Menu-BUIjRr5o.js.gz +0 -0
  1260. package/dist/interface/ha/Metrics-BHEKh6IC.js +0 -1484
  1261. package/dist/interface/ha/Metrics-BHEKh6IC.js.br +0 -0
  1262. package/dist/interface/ha/Metrics-BHEKh6IC.js.gz +0 -0
  1263. package/dist/interface/ha/OAuthDeviceFlow-C_bEkfff.js +0 -112
  1264. package/dist/interface/ha/OAuthDeviceFlow-C_bEkfff.js.br +0 -9
  1265. package/dist/interface/ha/OAuthDeviceFlow-C_bEkfff.js.gz +0 -0
  1266. package/dist/interface/ha/Plugin-CVxXmLva.js +0 -1746
  1267. package/dist/interface/ha/Plugin-CVxXmLva.js.br +0 -0
  1268. package/dist/interface/ha/Plugin-CVxXmLva.js.gz +0 -0
  1269. package/dist/interface/ha/PluginConsole-ChOzllUF.js +0 -56
  1270. package/dist/interface/ha/PluginConsole-ChOzllUF.js.br +0 -0
  1271. package/dist/interface/ha/PluginConsole-ChOzllUF.js.gz +0 -0
  1272. package/dist/interface/ha/PluginDetail-DkM9ow6C.js +0 -804
  1273. package/dist/interface/ha/PluginDetail-DkM9ow6C.js.br +0 -0
  1274. package/dist/interface/ha/PluginDetail-DkM9ow6C.js.gz +0 -0
  1275. package/dist/interface/ha/PluginSearch-CSCTK5iK.js +0 -462
  1276. package/dist/interface/ha/PluginSearch-CSCTK5iK.js.br +0 -0
  1277. package/dist/interface/ha/PluginSearch-CSCTK5iK.js.gz +0 -0
  1278. package/dist/interface/ha/PluginUpdateProgress-DaRg6gt1.js +0 -34
  1279. package/dist/interface/ha/PluginUpdateProgress-DaRg6gt1.js.br +0 -0
  1280. package/dist/interface/ha/PluginUpdateProgress-DaRg6gt1.js.gz +0 -0
  1281. package/dist/interface/ha/Plugins-BmIKxTQu.js +0 -697
  1282. package/dist/interface/ha/Plugins-BmIKxTQu.js.br +0 -0
  1283. package/dist/interface/ha/Plugins-BmIKxTQu.js.gz +0 -0
  1284. package/dist/interface/ha/Recordings-CU6D4Een.js +0 -1916
  1285. package/dist/interface/ha/Recordings-CU6D4Een.js.br +0 -0
  1286. package/dist/interface/ha/Recordings-CU6D4Een.js.gz +0 -0
  1287. package/dist/interface/ha/SensorEdit-BOQCEFrt.js +0 -1466
  1288. package/dist/interface/ha/SensorEdit-BOQCEFrt.js.br +0 -0
  1289. package/dist/interface/ha/SensorEdit-BOQCEFrt.js.gz +0 -0
  1290. package/dist/interface/ha/SensorHistory-Bslkq7Kj.js +0 -54
  1291. package/dist/interface/ha/SensorHistory-Bslkq7Kj.js.br +0 -0
  1292. package/dist/interface/ha/SensorHistory-Bslkq7Kj.js.gz +0 -0
  1293. package/dist/interface/ha/Sensors-uoK_jFo8.js +0 -1400
  1294. package/dist/interface/ha/Sensors-uoK_jFo8.js.br +0 -0
  1295. package/dist/interface/ha/Sensors-uoK_jFo8.js.gz +0 -0
  1296. package/dist/interface/ha/Settings-3vjjQ3o3.js +0 -218
  1297. package/dist/interface/ha/Settings-3vjjQ3o3.js.br +0 -0
  1298. package/dist/interface/ha/Settings-3vjjQ3o3.js.gz +0 -0
  1299. package/dist/interface/ha/SettingsAccount-DYU_xa5v.js +0 -968
  1300. package/dist/interface/ha/SettingsAccount-DYU_xa5v.js.br +0 -0
  1301. package/dist/interface/ha/SettingsAccount-DYU_xa5v.js.gz +0 -0
  1302. package/dist/interface/ha/SettingsAppearance-CpgnJYLf.js +0 -201
  1303. package/dist/interface/ha/SettingsAppearance-CpgnJYLf.js.br +0 -0
  1304. package/dist/interface/ha/SettingsAppearance-CpgnJYLf.js.gz +0 -0
  1305. package/dist/interface/ha/SettingsAssistant-CXrllafp.js +0 -2134
  1306. package/dist/interface/ha/SettingsAssistant-CXrllafp.js.br +0 -0
  1307. package/dist/interface/ha/SettingsAssistant-CXrllafp.js.gz +0 -0
  1308. package/dist/interface/ha/SettingsBackup-BbEfaQ1e.js +0 -1047
  1309. package/dist/interface/ha/SettingsBackup-BbEfaQ1e.js.br +0 -0
  1310. package/dist/interface/ha/SettingsBackup-BbEfaQ1e.js.gz +0 -0
  1311. package/dist/interface/ha/SettingsList-Dieayk1W.js +0 -40
  1312. package/dist/interface/ha/SettingsList-Dieayk1W.js.br +0 -0
  1313. package/dist/interface/ha/SettingsList-Dieayk1W.js.gz +0 -0
  1314. package/dist/interface/ha/SettingsMqtt-DagskW76.js +0 -512
  1315. package/dist/interface/ha/SettingsMqtt-DagskW76.js.br +0 -0
  1316. package/dist/interface/ha/SettingsMqtt-DagskW76.js.gz +0 -0
  1317. package/dist/interface/ha/SettingsNotifications-B3bcsE4m.js +0 -514
  1318. package/dist/interface/ha/SettingsNotifications-B3bcsE4m.js.br +0 -0
  1319. package/dist/interface/ha/SettingsNotifications-B3bcsE4m.js.gz +0 -0
  1320. package/dist/interface/ha/SettingsRecordings-UqTgc63f.js +0 -152
  1321. package/dist/interface/ha/SettingsRecordings-UqTgc63f.js.br +0 -0
  1322. package/dist/interface/ha/SettingsRecordings-UqTgc63f.js.gz +0 -0
  1323. package/dist/interface/ha/SettingsRemote-Biy7URGf.js +0 -1523
  1324. package/dist/interface/ha/SettingsRemote-Biy7URGf.js.br +0 -0
  1325. package/dist/interface/ha/SettingsRemote-Biy7URGf.js.gz +0 -0
  1326. package/dist/interface/ha/SettingsSystem-6geFXXRq.js +0 -382
  1327. package/dist/interface/ha/SettingsSystem-6geFXXRq.js.br +0 -0
  1328. package/dist/interface/ha/SettingsSystem-6geFXXRq.js.gz +0 -0
  1329. package/dist/interface/ha/SettingsUsers-BXUZX3Dv.js +0 -370
  1330. package/dist/interface/ha/SettingsUsers-BXUZX3Dv.js.br +0 -0
  1331. package/dist/interface/ha/SettingsUsers-BXUZX3Dv.js.gz +0 -0
  1332. package/dist/interface/ha/Terminal-CAsT_c5K.js +0 -611
  1333. package/dist/interface/ha/Terminal-CAsT_c5K.js.br +0 -0
  1334. package/dist/interface/ha/Terminal-CAsT_c5K.js.gz +0 -0
  1335. package/dist/interface/ha/Training-Cs-X3tTu.js +0 -1829
  1336. package/dist/interface/ha/Training-Cs-X3tTu.js.br +0 -0
  1337. package/dist/interface/ha/Training-Cs-X3tTu.js.gz +0 -0
  1338. package/dist/interface/ha/Updates-BRwFnbJd.js +0 -357
  1339. package/dist/interface/ha/Updates-BRwFnbJd.js.br +0 -0
  1340. package/dist/interface/ha/Updates-BRwFnbJd.js.gz +0 -0
  1341. package/dist/interface/ha/VariableInput-q03fAY9F.js +0 -52
  1342. package/dist/interface/ha/VariableInput-q03fAY9F.js.br +0 -0
  1343. package/dist/interface/ha/VariableInput-q03fAY9F.js.gz +0 -0
  1344. package/dist/interface/ha/VersionsHandler-DDk482uv.js +0 -221
  1345. package/dist/interface/ha/VersionsHandler-DDk482uv.js.br +0 -0
  1346. package/dist/interface/ha/VersionsHandler-DDk482uv.js.gz +0 -0
  1347. package/dist/interface/ha/VirtualSensorCreate-CdxwTlbd.js +0 -102
  1348. package/dist/interface/ha/VirtualSensorCreate-CdxwTlbd.js.br +0 -0
  1349. package/dist/interface/ha/VirtualSensorCreate-CdxwTlbd.js.gz +0 -0
  1350. package/dist/interface/ha/Workers-D4MZqg97.js +0 -1270
  1351. package/dist/interface/ha/Workers-D4MZqg97.js.br +0 -0
  1352. package/dist/interface/ha/Workers-D4MZqg97.js.gz +0 -0
  1353. package/dist/interface/ha/api-CNQ6bAly.js +0 -29
  1354. package/dist/interface/ha/api-CNQ6bAly.js.br +0 -0
  1355. package/dist/interface/ha/api-CNQ6bAly.js.gz +0 -0
  1356. package/dist/interface/ha/api-xWofDMK3.js +0 -69075
  1357. package/dist/interface/ha/api-xWofDMK3.js.br +0 -0
  1358. package/dist/interface/ha/api-xWofDMK3.js.gz +0 -0
  1359. package/dist/interface/ha/assistant-Dwelc7yC.js +0 -349
  1360. package/dist/interface/ha/assistant-Dwelc7yC.js.br +0 -0
  1361. package/dist/interface/ha/assistant-Dwelc7yC.js.gz +0 -0
  1362. package/dist/interface/ha/auth-CUnSYAeS.js +0 -271
  1363. package/dist/interface/ha/auth-CUnSYAeS.js.br +0 -0
  1364. package/dist/interface/ha/auth-CUnSYAeS.js.gz +0 -0
  1365. package/dist/interface/ha/automationBlueprint-ZizU2N5n.js +0 -250
  1366. package/dist/interface/ha/automationBlueprint-ZizU2N5n.js.br +0 -0
  1367. package/dist/interface/ha/automationBlueprint-ZizU2N5n.js.gz +0 -0
  1368. package/dist/interface/ha/cards-DZEFY6FW.js +0 -13296
  1369. package/dist/interface/ha/cards-DZEFY6FW.js.br +0 -0
  1370. package/dist/interface/ha/cards-DZEFY6FW.js.gz +0 -0
  1371. package/dist/interface/ha/config-nCVNp-au.js +0 -116
  1372. package/dist/interface/ha/config-nCVNp-au.js.br +0 -0
  1373. package/dist/interface/ha/config-nCVNp-au.js.gz +0 -0
  1374. package/dist/interface/ha/mqtt-D_nDqDyk.js +0 -56
  1375. package/dist/interface/ha/mqtt-D_nDqDyk.js.br +0 -3
  1376. package/dist/interface/ha/mqtt-D_nDqDyk.js.gz +0 -0
  1377. package/dist/interface/ha/notifications-BTJTCdXR.js +0 -159
  1378. package/dist/interface/ha/notifications-BTJTCdXR.js.br +0 -0
  1379. package/dist/interface/ha/notifications-BTJTCdXR.js.gz +0 -0
  1380. package/dist/interface/ha/plugins-C7XSgstR.js +0 -592
  1381. package/dist/interface/ha/plugins-C7XSgstR.js.br +0 -0
  1382. package/dist/interface/ha/plugins-C7XSgstR.js.gz +0 -0
  1383. package/dist/interface/ha/rooms-La0MdVF7.js +0 -45
  1384. package/dist/interface/ha/rooms-La0MdVF7.js.br +0 -0
  1385. package/dist/interface/ha/rooms-La0MdVF7.js.gz +0 -0
  1386. package/dist/interface/ha/server-CElgG4N0.js +0 -244
  1387. package/dist/interface/ha/server-CElgG4N0.js.br +0 -0
  1388. package/dist/interface/ha/server-CElgG4N0.js.gz +0 -0
  1389. package/dist/interface/ha/speeddial-C70QgR0r.js +0 -941
  1390. package/dist/interface/ha/speeddial-C70QgR0r.js.br +0 -0
  1391. package/dist/interface/ha/speeddial-C70QgR0r.js.gz +0 -0
  1392. package/dist/interface/ha/types-zKLgkZPc.js +0 -1073
  1393. package/dist/interface/ha/types-zKLgkZPc.js.br +0 -0
  1394. package/dist/interface/ha/types-zKLgkZPc.js.gz +0 -0
  1395. package/dist/interface/ha/updates-b6EERiem.js +0 -414
  1396. package/dist/interface/ha/updates-b6EERiem.js.br +0 -0
  1397. package/dist/interface/ha/updates-b6EERiem.js.gz +0 -0
  1398. package/dist/interface/ha/useAppVersion-DwqaMEI5.js +0 -22
  1399. package/dist/interface/ha/useAppVersion-DwqaMEI5.js.br +0 -0
  1400. package/dist/interface/ha/useAppVersion-DwqaMEI5.js.gz +0 -0
  1401. package/dist/interface/ha/useKeyboardInset-Crl1GPan.js +0 -27
  1402. package/dist/interface/ha/useKeyboardInset-Crl1GPan.js.br +0 -0
  1403. package/dist/interface/ha/useKeyboardInset-Crl1GPan.js.gz +0 -0
  1404. package/dist/interface/ha/useLogsSocket-BfmhLRN4.js +0 -74
  1405. package/dist/interface/ha/useLogsSocket-BfmhLRN4.js.br +0 -0
  1406. package/dist/interface/ha/useLogsSocket-BfmhLRN4.js.gz +0 -0
  1407. package/dist/interface/ha/useNavLayout-ue6sHO61.js +0 -125
  1408. package/dist/interface/ha/useNavLayout-ue6sHO61.js.br +0 -0
  1409. package/dist/interface/ha/useNavLayout-ue6sHO61.js.gz +0 -0
  1410. package/dist/interface/ha/usePlacementLabel-DZMzFDB5.js +0 -49
  1411. package/dist/interface/ha/usePlacementLabel-DZMzFDB5.js.br +0 -0
  1412. package/dist/interface/ha/usePlacementLabel-DZMzFDB5.js.gz +0 -0
  1413. package/dist/interface/ha/useTabSwipe-CZHGpGVQ.js +0 -45
  1414. package/dist/interface/ha/useTabSwipe-CZHGpGVQ.js.br +0 -0
  1415. package/dist/interface/ha/useTabSwipe-CZHGpGVQ.js.gz +0 -0
  1416. package/dist/interface/ha/useUpdateChannel-Rn843zLL.js +0 -22
  1417. package/dist/interface/ha/useUpdateChannel-Rn843zLL.js.br +0 -0
  1418. package/dist/interface/ha/useUpdateChannel-Rn843zLL.js.gz +0 -0
  1419. package/dist/interface/ha/useUpdatesSocket-CGOVegyc.js +0 -34
  1420. package/dist/interface/ha/useUpdatesSocket-CGOVegyc.js.br +0 -0
  1421. package/dist/interface/ha/useUpdatesSocket-CGOVegyc.js.gz +0 -0
  1422. package/dist/interface/ha/useUserOptions-ydSmcJA8.js +0 -15
  1423. package/dist/interface/ha/useUserOptions-ydSmcJA8.js.br +0 -0
  1424. package/dist/interface/ha/useUserOptions-ydSmcJA8.js.gz +0 -0
@@ -1,4 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./dist-DXT7SLOh.js","./vendor-core-MmTl_Z1W.js","./CuiMarkdownContent-DwziZJ1F.js","./CuiMarkdownContent-fBmULlgP.js","./vendor-markdown-DqzizdrD.js","./rolldown-runtime-BCiCTKAo.js","./vendor-markdown-DtOhvyRx.css","./CameraConsole-BubkOXIn.js","./CuiConsole-Bfg49Yzx.js","./CuiButton-D8WSVIyA.js","./vendor-openvue-Nei_CNv6.js","./content-copy-KSWHnrSP.js","./vendor-xterm-nte_nypa.js","./vendor-xterm-BrP-ENHg.css","./CuiConsole-Dshvh1_M.css","./useLogsSocket-DW6j2kMx.js","./RecentEventsFilter-BFlbTCVN.js","./vendor-cameraui-CFuqYfdj.js","./vendor-rpc-DodD4Gt-.js","./vendor-OmR5AQlH.js","./vendor-cameraui-zEcMwDN6.css","./eventLabels-Dlpiy-hp.js","./workbox-window.prod.es5-zq7mK_Xf.js","./404-BMj79XjT.js","./home-qo4gR7hb.js","./FirstSteps-BGR7npQx.js","./intercomService-CrNJqjSQ.js","./SettingsAccount-UyW8Rdbu.js","./vendor-zod-C41yjP6k.js","./CuiToggleRow-Bqy18LFg.js","./CuiDataTable-CfRZXOio.js","./CuiDataTable-DPIbKnvU.css","./CuiQRCode-UBWUs5tI.js","./theme-BstpTBPu.js","./CuiQRCode-BtErH65J.css","./auth-C5r5IkMf.js","./SettingsAccount-UaKygscf.css","./SettingsAppearance-CklnBo48.js","./useNavLayout-Dst4SfJr.js","./CuiMoveCodeForm-Cbcc3Rds.js","./Cameras-_za6U1fG.js","./types-OT17v6kT.js","./close-bM_cevmx.js","./eye-off-DlLqmIlU.js","./plus-UKNCoC7d.js","./CuiSchema-CWj38bGw.js","./CuiSchema-BYYeh269.css","./rooms-BdUbpVQC.js","./cameraSources-C-oeWnEa.js","./CuiCameraTable-Bnkb5yFU.js","./plus-CFRucFKI.js","./radar-BOWPXwpY.js","./Cameras-C2vSDkd6.css","./Sensors-CJRgHg24.js","./history-C6BdPgzJ.js","./sensors-vvTTj4i4.js","./trash-can-outline-qTDUc6pB.js","./sensorSlots-CZ1jzvW0.js","./search-B18aNDi9.js","./sensorIcons-BqRrUC21.js","./lightbulb-outline-C2lNjRle.js","./cube-scan-CQNaQH1t.js","./walk-BkGPYh2A.js","./back-filled-BO_fA5ZW.js","./settings-h4IWr_K9.js","./Sensors-Bhb3Sga4.css","./Assistant-BCmv7r12.js","./assistant-Ak1qQkQD.js","./CuiAssistantConversation-CixQUjS9.js","./chevron-up-DzJD0ULl.js","./chevron-down-ks3dM4iL.js","./clock-outline-grac_inY.js","./help-circle-outline-DlRaP-Ct.js","./assistantModels-0orQVJ3V.js","./refresh-Bh2gPZua.js","./check-circle-outline-BFVlOq0c.js","./source-branch-DoSEjE9P.js","./pencil-outline-BkrYuCFB.js","./microphone-vPC_Rj6u.js","./useKeyboardInset-CQKU4-0b.js","./brain-CXM2cxRq.js","./useAssistantActions-DYdBYsPG.js","./CuiAssistantConversation-CGxD30dd.css","./Assistant-Bj2bAUHD.css","./Camera-nAhvtDPM.js","./delete-BZaXoRfK.js","./utils-gctUU5q_.js","./zoom-in-hrOJ6qGr.js","./CuiCameraPipCard-CIhq8eot.js","./CuiCameraPipCard-Ct4Xl-_U.css","./Camera-CLJy90za.css","./Camview-Dz37ulQ3.js","./vendor-dnd-CH4VSYhx.js","./pencil-9OYkbEp7.js","./cctv-DXh8sF2b.js","./CuiTopNavbarItem-DVEK1s5d.js","./CuiTopNavbarItem-D7pL42xs.css","./vendor-gridstack-CCdzljUl.js","./vendor-gridstack-G-XCdywQ.css","./Camview-9PFie-5D.css","./Recordings-JmKjg1rv.js","./search-D4V8kFKp.js","./database-refresh-outline-Cm7DrpaU.js","./round-alt-arrow-left-bold-DCtujmoh.js","./Recordings-BISCOK4N.css","./Floorplan-DEAXLv_l.js","./minus-DPVH0_f5.js","./restore-C8Ep4eyl.js","./CuiBottomSheet-CAOO-nWU.js","./CuiBottomSheet-CvWSnYW9.css","./undo-BQWUIdaf.js","./vendor-vueflow-DP0n-nYI.js","./Floorplan-D0fU2fVb.css","./Faces-Bo3AYgKe.js","./upload-MVfVLoJ2.js","./exclamation-thick-hHfusWOu.js","./Training-Cn7kcb1P.js","./information-outline-D_v-AwRt.js","./cloud-check-tQmeNCU0.js","./Training-BGF-Owlk.css","./Plugins-DRbDoh8f.js","./useUpdatesSocket-fqaXJCdb.js","./plugins-BtRZhMzq.js","./usePlacementLabel-C2Prw5hU.js","./usePluginsSocket-TdmWm307.js","./PluginSearch-CpjvGZ1K.js","./CuiPluginTrustBadge-CXPARdCH.js","./CuiPluginTrustBadge-QHTLaN1n.css","./CuiPluginCategoryChip-DMxs_ZwE.js","./bell-ring-Dmk4LAD1.js","./CuiPluginCategoryChip-CdGrTCxH.css","./download-mULd0gyu.js","./PluginSearch-DuqQa-K9.css","./usePluginUpdates-9mTaq1uR.js","./config-CaeB2xoR.js","./dots-vertical-Bnl77edE.js","./CuiPluginCard-D5o7bz82.js","./CuiPluginOAuthButton-BZ5GiClf.js","./trash-fill-BJwlmOcp.js","./CuiPluginCard-DtG4wInc.css","./Plugin-CIH0TF3a.js","./PluginSchema-CDiNUijO.js","./close-circle-Dv0n4tNS.js","./Plugin-Dykehsbt.css","./Metrics-dwRXd0D8.js","./useServerRestart-BqYQ-1Fg.js","./server-tY100hue.js","./CuiChartTable-CGgKsEsq.js","./vendor-chart-Cx_N8F_a.js","./CuiChartTable-DCr_AsSw.css","./useTabSwipe-kd6jHGXB.js","./Metrics-7t2y-YVR.css","./Updates-BtcOsKwD.js","./check-circle-BDkzChg-.js","./alert-circle-DHs3omwX.js","./updates-Cy0UvDur.js","./Config-DJjqahmx.js","./Config-CbJm1vjo.css","./Logs-Dk47dJCa.js","./arrow-left-VqY0eTjJ.js","./trash-2-Mzqf-rOi.js","./Terminal-B6u7U9CX.js","./Terminal-Bb7U7IPt.css","./Automations-B5D6uMR9.js","./automations-DCanZA4l.js","./nodeDefinitions-dTPXusws.js","./webhook-rPxIu0Ze.js","./variable-CPMI9S1J.js","./types-Bo-NWCAC.js","./pause-BcK83-5G.js","./Automation-DiCBllSc.js","./flowSchema-DDR5Bkwp.js","./useCameraOptions-qvQUXrOM.js","./automationBlueprint-D0F9AHk9.js","./Automation-R5o9sXYY.css","./Instances-BWRmmXbE.js","./Workers-BVY0gIZ6.js","./api-D5pj1z4u.js","./usePlacementSocket-xLhwFZgQ.js","./Workers-h29Qiyax.css","./Settings-gP6KvlhW.js","./Settings-yBnNlMYX.css","./Menu-ByNNjqJn.js","./power-vLxb4TiM.js","./CuiList-1m2EO2pU.js","./About-GuOorOsw.js","./useAppVersion-BDm52JIU.js","./Console-B2LJUI0g.js","./trash2-BdA1uTMa.js","./SettingsAccount-DxBaSiP3.js","./SettingsAppearance-CyRil5A6.js","./SettingsBackup-qF_Tg4EV.js","./backup-restore-qthooE3_.js","./SettingsBackup-CX0rT0QJ.css","./SettingsRecordings-yoLYy5Ye.js","./SettingsRemote-Bl6CSoS0.js","./lan--mlbwLyw.js","./SettingsRemote-CK56LABT.css","./SettingsMqtt-B-vy3STG.js","./mqtt-dxw2twZb.js","./SettingsAssistant-BpoC9nuP.js","./SettingsAssistant-B4hl3jKR.css","./SettingsList-DVIZe748.js","./SettingsSystem-CSXyXTlu.js","./useUpdateChannel-Dfk91JvX.js","./SettingsUsers-BWGACbPP.js","./SettingsNotifications-DxkB07uF.js","./notifications-wddGMkjM.js","./usePushRegistration-Bbf8WqlP.js","./usePermissions-Bh_myrIK.js","./SettingsPermissions-GDUHm4Dy.js"])))=>i.map(i=>d[i]);
2
- import{o as e,r as t}from"./rolldown-runtime-BCiCTKAo.js";import{$ as n,A as r,An as i,At as a,B as o,Bn as s,Bt as c,C as l,Cn as u,Ct as d,D as f,Dn as p,Dt as m,E as h,Et as g,F as _,Fn as v,Ft as y,G as b,Gn as x,Gt as S,Hn as C,Ht as w,I as T,In as E,J as D,Jt as O,Kt as k,L as A,Ln as j,M as ee,Mn as te,Nn as ne,Nt as re,O as ie,On as ae,P as oe,Pn as M,Pt as se,Q as ce,Qt as le,R as ue,Rn as de,Rt as fe,Sn as N,T as pe,Tt as me,U as he,Un as ge,Vn as _e,W as ve,Wn as ye,Wt as be,X as xe,Xt as Se,Yn as Ce,Yt as we,Z as Te,Zt as Ee,_ as De,_t as Oe,an as ke,bt as Ae,cn as je,ct as Me,dt as Ne,fn as Pe,g as Fe,gt as Ie,ht as Le,i as Re,in as ze,it as Be,j as Ve,jn as He,jt as Ue,k as We,kn as Ge,kt as Ke,l as qe,m as Je,mn as Ye,mt as Xe,n as Ze,nn as Qe,nt as $e,o as et,on as tt,ot as nt,pn as rt,qt as it,rt as at,st as ot,t as st,tn as ct,u as lt,ut,xt as dt,yt as ft,z as pt,zn as mt,zt as ht}from"./vendor-cameraui-CFuqYfdj.js";import{$ as gt,$t as _t,A as vt,An as P,At as F,B as yt,Bn as bt,Ct as xt,D as St,Dn as Ct,Dt as wt,E as Tt,En as I,F as Et,Ft as Dt,G as Ot,H as kt,Hn as L,Ht as At,In as jt,It as Mt,J as Nt,Jt as Pt,K as Ft,L as It,Ln as R,Lt as z,Mt as B,N as Lt,Nn as Rt,O as zt,On as Bt,Ot as V,P as Vt,Pn as Ht,Pt as Ut,Q as Wt,Qt as Gt,R as Kt,Rn as H,Rt as qt,S as Jt,Sn as Yt,St as Xt,T as Zt,Tn as Qt,Tt as U,U as $t,Vn as W,Vt as en,W as tn,Wt as nn,X as rn,Xt as an,Y as on,Yt as sn,Z as cn,Zt as ln,_n as un,an as dn,bn as fn,cn as pn,ct as mn,en as hn,et as gn,fn as _n,ft as vn,g as yn,gn as G,h as bn,in as K,it as xn,jt as q,kn as Sn,kt as J,ln as Cn,lt as wn,mn as Tn,mt as En,nn as Y,on as Dn,p as On,pt as kn,q as An,qt as jn,rn as Mn,rt as Nn,sn as Pn,tn as Fn,ut as In,v as Ln,vt as Rn,w as zn,wt as Bn,x as Vn,xt as Hn,yn as X,yt as Un,z as Wn,zn as Z,zt as Gn}from"./vendor-core-MmTl_Z1W.js";import{E as Kn,F as qn,S as Jn,T as Yn,_ as Xn,g as Zn,h as Qn,k as $n,m as er,v as tr,w as nr,x as rr,y as ir}from"./vendor-OmR5AQlH.js";import{a as ar,i as or,n as sr,r as cr}from"./intercomService-CrNJqjSQ.js";import{i as lr,r as ur,t as dr}from"./vendor-zod-C41yjP6k.js";import{$ as fr,C as pr,M as mr,Q as hr,X as gr,Y as _r,Z as vr}from"./types-OT17v6kT.js";import{a as yr,i as br,n as xr,o as Sr,r as Cr,t as Q}from"./lightbulb-outline-C2lNjRle.js";import{C as wr,S as Tr,a as Er,g as Dr,l as Or,u as kr,x as Ar}from"./eventLabels-Dlpiy-hp.js";import{A as jr,D as Mr,F as Nr,H as Pr,I as Fr,J as Ir,K as Lr,L as Rr,M as zr,N as Br,O as Vr,P as Hr,W as Ur,X as Wr,Y as Gr,Z as Kr,a as qr,c as Jr,dt as Yr,ft as Xr,it as Zr,j as Qr,k as $r,lt as ei,nt as ti,q as ni,rt as ri,tt as ii,ut as ai,v as oi,z as si}from"./vendor-openvue-Nei_CNv6.js";import{t as ci}from"./CuiButton-D8WSVIyA.js";import{a as li,i as ui,n as di,r as fi,t as pi}from"./vendor-dnd-CH4VSYhx.js";import{t as mi}from"./close-bM_cevmx.js";import{t as hi}from"./vendor-draggabilly-wydAt7TH.js";var gi=t({}),_i=t({}),vi=t({}),yi=t({}),bi=t({}),xi=t({}),Si=t({}),Ci=t({}),wi=t({}),Ti=`path`;function Ei(){return{networkSource:window}}var Di=`wake`,Oi=`unlock`;function ki(){let e=typeof window<`u`?window.electron:void 0;if(!e)return;let t=new EventTarget;try{e.on(`power-resume`,(e,n)=>t.dispatchEvent(new Event(n===`unlock`?Oi:Di)))}catch{return}return t}var Ai=5;function ji(e=Date.now){let t=Rt([]);function n(e){let[n,...r]=t.value;n&&(t.value=[e(n),...r])}function r(t,n,r,i){return t.map(t=>t.url===n&&t.outcome===`pending`?{...t,outcome:r,reason:i,durationMs:e()-t.startedAt}:t)}function i(t,n,r){return t.map(t=>t.outcome===`pending`?{...t,outcome:n,reason:r,durationMs:e()-t.startedAt}:t)}return{rounds:t,roundStarted(){t.value=[{startedAt:e(),attempts:[]},...t.value].slice(0,Ai)},probeStarted(r,i){t.value.length===0&&this.roundStarted(),n(t=>({...t,attempts:[...t.attempts,{url:r,mode:i,startedAt:e(),outcome:`pending`}]}))},probeSucceeded(e){n(t=>({...t,result:`connected`,attempts:r(t.attempts,e,`connected`)}))},probeFailed(e,t){n(n=>{let i=n.result===`connected`||t.includes(`superseded`)?`superseded`:`failed`;return{...n,attempts:r(n.attempts,e,i,t)}})},roundFailed(e){n(t=>({...t,result:`failed`,reason:e,attempts:i(t.attempts,`failed`,e)}))},clear(){t.value=[]}}}var Mi={now:()=>Date.now(),setTimer:(e,t)=>setTimeout(e,t),clearTimer:e=>clearTimeout(e)};function Ni(e,t,n=Math.random){return new Proxy([...e],{get(e,r,i){if(typeof r==`string`&&/^\d+$/.test(r)){let i=e[Number(r)];return i===void 0?void 0:Math.round(i*(1+t*(2*n()-1)))}return Reflect.get(e,r,i)}})}function Pi(e,t,n=Mi){let r=-1/0,i;function a(){i!==void 0&&(n.clearTimer(i),i=void 0)}function o(){i=void 0,r=n.now(),t()}return{request(){if(i!==void 0)return;let t=r+e-n.now();t<=0?o():i=n.setTimer(o,t)},mark(){a(),r=n.now()},dispose(){a()}}}var Fi=15e3,Ii=[5e3,5e3,1e4,15e3],Li=.2,Ri=1500,zi=1e3,Bi=[3e3,8e3],Vi=3e4,Hi=2e3,Ui=2e3,Wi=null,Gi=new Set;function Ki(e){Wi=e,e||(Gi=new Set)}function qi(e){if(Gi.size===0)return!1;let t=Yi(e);return t!==null&&Gi.has(t)}async function Ji(e,t){if(!Wi||!e)return;let n=[...new Set(t.filter(e=>e.mode===`direct-lan`).map(e=>Yi(e.url)).filter(e=>!!e))];if(n.length!==0)try{await Wi(e,n),Gi=new Set(n)}catch{}}function Yi(e){try{let t=new URL(e).hostname;return t?t.startsWith(`[`)&&t.endsWith(`]`)?t.slice(1,-1):t:null}catch{return null}}function Xi(e){D(e,{enabled:!1,exclude:qi,request:async e=>{let{CapacitorHttp:t}=await zt(async()=>{let{CapacitorHttp:e}=await import(`./dist-DXT7SLOh.js`);return{CapacitorHttp:e}},__vite__mapDeps([0,1]),import.meta.url);return t.request(e)}})}var Zi={id:`http`,kind:`request`,phaseGating:!1},Qi={id:`socketio`,kind:`persistent`,phaseGating:!0},$i={id:`nats`,kind:`persistent`,phaseGating:!0},ea={id:`nats-bulk`,kind:`persistent`,phaseGating:!1},ta={id:`ws`,kind:`per-resource`,phaseGating:!1};Zi.id,Qi.id,$i.id,ea.id,ta.id;function na(e,t={}){let r=n({apiPrefix:e,spec:Zi,logger:new Ce(`HttpT`),...t.http});return Xi(r.client),{http:r,socketio:Te({spec:Qi,logger:new Ce(`SioT`),...t.socketio}),nats:ce({spec:$i,logger:new Ce(`NatsT`),...t.nats}),natsBulk:ce({clientName:`@camera.ui/transport/nats-bulk`,logger:new Ce(`NatsBulkT`),...t.nats,spec:ea}),ws:xe({spec:ta,logger:new Ce(`WsT`),...t.ws})}}var ra=`/api`,ia=`camera.ui:connection:target`,aa=`camera.ui:refresh`;function oa(e){let t=e.apiPrefix??ra,n=e.logger,r=e.storageNamespace?`${ia}:${e.storageNamespace}`:ia,a=e.storageNamespace?`${aa}:${e.storageNamespace}`:aa,o=e.callbacks.ownsEndpoint,c=de(),l=ji();function u(e,t,r,i=`debug`){c.record(e,t,r),r===void 0?n?.[i](e,t):n?.[i](e,t,r)}let d=s({context:{now:()=>Date.now()},onAction:(e,t,n)=>{n===t&&c.record(`kernel`,`${e.type} dropped`,`phase=${t.kind}`)}}),{http:f,socketio:m,nats:h,natsBulk:g,ws:_}=na(t,e.transportOptions),y=Rt(d.phase),b=Rt(null),x=mt({kernel:d,transports:[m,h]}),S=Rt(x.current),C=P(null),w=[],T=P(null),E=P(Date.now()),D,O=V(()=>T.value===null?0:E.value-T.value),k=P(!1),A=null,ee=0,re=null;function ie(e){let t=qn.isAxiosError(e)?e:e instanceof Error&&qn.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&&(re=r*1e3)}let oe=new Set;for(let e of[f,m,h,g,_]){let t=e.spec.id;w.push(e.on(`up`,()=>c.record(t,`up`))),w.push(e.on(`down`,({reason:e})=>c.record(t,`down`,e))),w.push(e.on(`auth-error`,e=>c.record(t,`auth-error`,e?.message??e?.status)))}w.push(x.subscribe(e=>{S.value=e,c.record(`signal`,e.kind,e.kind===`degraded`?e.channels.join(`,`):void 0)})),w.push(()=>x.dispose());let se=typeof navigator<`u`&&`locks`in navigator?(e,t)=>navigator.locks.request(a,t?{signal:t}:{},e):void 0,ce=He({kernel:d,storage:e.adapters.storage,key:r,onRestore:e=>{A=e,u(`persistence`,e?`restored — ${e.endpoint.url}`:`no stored target`)},onPersist:e=>u(`persistence`,`persisted — ${e.endpoint.url}`),onClear:()=>u(`persistence`,`cleared`),onError:(e,t)=>u(`persistence`,`${e} error`,t,`warn`)});w.push(ce.detach),e.callbacks.bindRefresh?.({acquireLock:se?e=>se(e,AbortSignal.timeout(Fi)):async e=>e(),getLatestTokens:()=>ce.peek()?.tokens??null}),w.push(ae({kernel:d,key:r,accept:o?e=>!e.endpoint||o(e.endpoint.url):void 0,absorb:e=>ce.absorb(e),onTokensReceived:()=>{u(`cross-tab`,`tokens received from another tab`);let e=d.phase.kind;e===`needs-auth`||e===`offline`?d.dispatch({type:`USER_RETRY`}):e===`idle`&&d.dispatch({type:`BOOT`,instanceId:`default`})},onTokensIgnored:e=>u(`cross-tab`,`tokens of another instance ignored`,e.endpoint?.url),onResetReceived:()=>u(`cross-tab`,`logout received from another tab`),onError:(e,t)=>u(`cross-tab`,`${e} error`,t,`warn`)})),w.push(d.subscribe((t,n,r)=>{if(y.value=t,u(`kernel`,`${n.kind} → ${t.kind}`,r.type),t.kind===`idle`&&n.kind!==`idle`&&e.callbacks.onConnectionReset?.(),t.kind===`online`?k.value=!0:t.kind===`idle`&&(k.value=!1),t.kind===`offline`&&re!==null){let e=re;re=null,u(`backoff`,`server hint: retry after ${Math.round(e/1e3)}s`),queueMicrotask(()=>d.dispatch({type:`BACKOFF_HINT`,retryAfterMs:e,source:`retry-after`}))}else t.kind===`online`&&(re=null);t.kind===`online`||t.kind===`idle`||t.kind===`needs-auth`?(T.value=null,D!==void 0&&(clearInterval(D),D=void 0)):T.value===null&&(T.value=Date.now(),E.value=T.value,D=setInterval(()=>{E.value=Date.now()},1e3))})),w.push(()=>{D!==void 0&&(clearInterval(D),D=void 0)}),w.push(v({kernel:d,transports:[f,m,h,g,_],onApplied:e=>{b.value=e,(e||d.phase.kind===`idle`||d.phase.kind===`needs-auth`)&&(A=null)},onError:(e,t,n)=>u(e.spec.id,`apply failed`,n,`error`)})),w.push(p({kernel:d,schedule:Ni(Ii,Li),firstAttemptDelayMs:()=>Date.now()-ee<15e3?Ri:null,onScheduled:(e,t)=>u(`backoff`,`attempt #${e} in ${Math.round(t/1e3)}s`),onFire:e=>u(`backoff`,`firing #${e}`),onCancelled:e=>u(`backoff`,`cancelled (${e})`)}));function le(){ee=Date.now(),we?.wake(),e.callbacks.onWake?.(),ue();for(let e of oe)try{e()}catch{}}function ue(){for(let e of[h,g,m]){let t=e.health();e.ensureAlive().then(n=>{(t.up!==n.up||!n.up)&&c.record(e.spec.id,`ensureAlive → ${n.up?`up`:`down`}`,n.lastError??t.lastError),x.recompute()}).catch(()=>{})}}function fe(){return d.phase.kind===`offline`}function N(){return[m,h].some(e=>e.health().up)}function pe(e){let t=dt();t>0&&u(`streams`,`restarted ${t} (${e})`)}let me=j({kernel:d,discover:async t=>{let n=await e.callbacks.discover(t);return l.roundStarted(),n},probe:async t=>{l.probeStarted(t.endpoint.url,t.endpoint.mode);try{let n=await e.callbacks.probe(t);return l.probeSucceeded(t.endpoint.url),n}catch(e){let n=e instanceof Error?e.message:String(e),r=e instanceof Error&&`kind`in e?e.kind:`unknown`;throw l.probeFailed(t.endpoint.url,`${r}: ${n}`),e}},lastTarget:()=>b.value??A??ce.peek(),ready:()=>ce.ready,prefer:e=>e.mode===`direct-lan`,preferGraceMs:zi,isCurrentHealthy:N,onResult:(e,t)=>u(`probe`,`background ${e}`,t)});w.push(()=>me.dispose());let he,ge,_e=Pi(Vi,()=>{ve()&&be(0)});function ve(){return d.phase.kind===`online`&&b.value?.endpoint.mode!==`direct-lan`}function ye(){ve()&&_e.request()}function be(e=Bi.length){_e.mark(),he!==void 0&&(clearTimeout(he),he=void 0),me.run().then(()=>{if(e<=0||d.phase.kind!==`online`||b.value?.endpoint.mode===`direct-lan`)return;let t=Bi[Bi.length-e];u(`probe`,`background retry in ${Math.round(t/1e3)}s (${e} left)`),he=setTimeout(()=>be(e-1),t)})}function xe(){ge!==void 0&&clearTimeout(ge),ge=setTimeout(()=>{ge=void 0,ye()},Hi)}if(w.push(()=>{he!==void 0&&clearTimeout(he),ge!==void 0&&clearTimeout(ge),_e.dispose()}),w.push(Ge({kernel:d,signal:x,ensureAll:ue,probe:()=>me.run(),isReachable:N,onEscalate:e=>u(`degraded-recovery`,`round #${e}`),onOffline:e=>u(`degraded-recovery`,e,void 0,`warn`),onHold:e=>u(`degraded-recovery`,e)})),w.push(te({kernel:d,visibilitySource:e.adapters.visibilitySource,networkSource:e.adapters.networkSource,onOnline:e=>{u(`presence`,`network online`),le(),fe()?e.dispatch({type:`USER_RETRY`}):e.phase.kind===`online`&&(pe(`network online`),be())},onOffline:()=>u(`presence`,`network offline`),onVisibilityVisible:e=>{u(`presence`,`tab visible`),le(),fe()?e.dispatch({type:`USER_RETRY`}):ye()},onVisibilityHidden:()=>u(`presence`,`tab hidden`)})),e.adapters.networkChangeSource){w.push(i({kernel:d,source:e.adapters.networkChangeSource,debounceMs:Ui,onChange:e=>{u(`network-change`,`connection type changed`),le(),e.phase.kind===`online`?(pe(`network change`),be()):e.phase.kind===`offline`&&(u(`network-change`,`re-discovering`),e.dispatch({type:`USER_RETRY`}))}}));let t=e.adapters.networkChangeSource;t.addEventListener(Ti,xe),w.push(()=>t.removeEventListener(Ti,xe))}function Se(e){let t=e.type===Di;u(`presence`,t?`system wake`:`screen unlock`),le(),fe()?d.dispatch({type:`USER_RETRY`}):d.phase.kind===`online`&&(t&&pe(`system wake`),ye())}let Ce=e.adapters.wakeSource;if(Ce)for(let e of[Di,Oi])Ce.addEventListener(e,Se),w.push(()=>Ce.removeEventListener(e,Se));let we=M({kernel:d,transports:[f,h,g,m,_],graceMs:5e3,maxTransientRetries:5,transientRetryDelayMs:2e3,isTransientError:e=>!!(qn.isAxiosError(e)&&(!e.response||e.response.status>=500)),isServerError:e=>qn.isAxiosError(e)&&(e.response?.status??0)>=500,maxServerErrorRetries:1,isReachable:N,refresh:e.callbacks.refresh,acquireRefreshLock:se,getLatestTokens:()=>ce.peek()?.tokens??null,onRefreshStart:e=>u(`token-lifecycle`,`refresh START (${e})`),onRefreshSuccess:(e,t)=>{let n=t.accessExpiresAt;u(`token-lifecycle`,`refresh OK (${e}) — new exp in ${typeof n==`number`?Math.round((n-Date.now())/1e3):`?`}s`)},onRefreshSkipped:e=>u(`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?u(`token-lifecycle`,`refresh ${i} (${e}) — ${r}`,void 0,`warn`):n.transient?u(`token-lifecycle`,`refresh ${i} give-up → rediscover (${e}) — ${r}`,void 0,`error`):u(`token-lifecycle`,`refresh permanent (${e}) — ${r}`,void 0,`error`)},onScheduled:(e,t)=>{u(`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`;u(`token-lifecycle`,`wake() → ${e.decision} (phase=${e.phase}, remaining=${t})`)},onTriggerSkipped:(e,t,n)=>{u(`token-lifecycle`,`trigger SKIP (${e}) — ${t} (phase=${n})`)}});w.push(()=>we.detach()),w.push(ne({kernel:d,discover:e.callbacks.discover,probe:e.callbacks.probe,prefer:e=>e.mode===`direct-lan`,lastTarget:()=>b.value??A??ce.peek(),ready:()=>ce.ready,onDiscoverStart:()=>{l.roundStarted(),u(`probe`,`discover start`)},onDiscoverSuccess:e=>u(`probe`,`discover OK — pool=${e.length}`),onDiscoverError:e=>{ie(e),u(`probe`,`discover FAILED`,e,`error`)},onProbeStart:e=>{l.probeStarted(e.url,e.mode),u(`probe`,`probe ${e.url}`)},onProbeSuccess:e=>{C.value=e.url,l.probeSucceeded(e.url),u(`probe`,`probe OK — ${e.url}`)},onProbeError:(e,t)=>{ie(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`)&&(C.value=e.url),l.probeFailed(e.url,`${r}: ${n}`),u(`probe`,`probe FAIL ${e.url} — [${r}] ${n}`,void 0,`warn`)},onAllFailed:e=>{l.roundFailed(e),u(`probe`,`all probes failed — ${e}`,void 0,`error`)}}));function Te(e){d.dispatch({type:`BOOT`,instanceId:e})}function Ee(){d.dispatch({type:`USER_RETRY`})}function De(){d.dispatch({type:`RESET`})}async function Oe(e,t=`default`){await ce.seed(e),A=null;let n=d.phase.kind;n===`idle`||n===`offline`||n===`needs-auth`?n===`idle`?d.dispatch({type:`BOOT`,instanceId:t}):d.dispatch({type:`USER_RETRY`}):n===`online`&&d.dispatch({type:`TOKENS_REFRESHED`,tokens:e.tokens})}async function ke(){for(let e of w.splice(0))try{e()}catch(e){n?.warn(`connection`,`cleanup error`,e)}await Promise.allSettled([f.dispose(),m.dispose(),h.dispose(),g.dispose(),_.dispose()]),d.dispose()}function Ae(e){return d.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=d.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 je(e){return oe.add(e),()=>oe.delete(e)}return{kernel:d,journal:c,attempts:l,phase:y,signal:S,target:b,http:f,socketio:m,nats:h,natsBulk:g,ws:_,lastReachableEndpoint:C,troubleElapsedMs:O,hasBeenOnline:k,boot:Te,retry:Ee,reset:De,detach:ke,seedAndRetry:Oe,onWake:je,whenOnline:Ae}}var sa=new Set,ca=Rt(null),la=null,ua=null;function da(e){if(la)throw Error(`bootConnectionInstance(): already booted — call detachConnectionInstance() first`);la=oa(e);let t=E({kernel:la.kernel,hosts:()=>Array.from(sa),listenForResyncRequests:!0,resolveServers:e.transportOptions?.nats?.resolveServers});return ua=t,la.onWake(()=>{la?.journal.record(`worker-bridge`,`revalidate (${sa.size} workers)`),t.revalidateWorkers()}),globalThis.__cameraui_journal=la.journal,la}function fa(){if(!la)throw Error(`getConnection(): connection not booted — call bootConnectionInstance() first`);return la}function pa(){if(!ua)throw Error(`getWorkerBridge(): connection not booted — call bootConnectionInstance() first`);return ua}function ma(){return la!==null}var ha=null;function ga(){return ha||(ha=fa().http.client,ha)}var $=new Proxy({},{get(e,t){return Reflect.get(ga(),t,ga())},set(e,t,n){return Reflect.set(ga(),t,n,ga())}}),_a=[`Tunnel unavailable`];function va(e){return typeof e==`object`&&!!e&&`isAxiosError`in e}function ya(e){return e?.response?.data}function ba(e){let t=ya(e);if(typeof t?.message==`string`)return t.message}function xa(e){if(!va(e)||e.response?.status!==503)return!1;let t=ba(e);return t?_a.some(e=>t.includes(e)):!1}function Sa(e){return va(e)?e.response?.status===404&&ba(e)===`Server not found`:!1}function Ca(e){return va(e)?e.response?.status===503&&ba(e)===`Server remote access is disabled`:!1}var wa=`FirstPageLink PrevPageLink PageLinks NextPageLink LastPageLink`,Ta=`https://cloud.cameraui.com`,Ea=`https://proxy.cameraui.com`,Da=`https://share.cameraui.com`,Oa=(()=>{try{return new URL(Ea).host}catch{return``}})(),ka=.7,Aa=.8;function ja(){return ge()}function Ma(){return globalThis.document}function Na(){let e=typeof window<`u`?window.__CUI_BASE__:void 0;return!e||!e.startsWith(`/`)?`/`:e.endsWith(`/`)?e:`${e}/`}function Pa(){return Na()!==`/`}function Fa(){let e=Na();return e===`/`?window.location.origin:new URL(e,window.location.origin).href.replace(/\/$/,``)}function Ia(){return(typeof window<`u`?window.__CUI_EMBED__:void 0)||null}function La(){return Ia()===`homeassistant`}function Ra(){return Ia()===`hassio`}function za(){return La()||Ra()}function Ba(){return typeof window<`u`&&window.__CUI_AUTH__===`proxy`}function Va(){let e=typeof window<`u`?window.__CUI_LOGOUT__:void 0;return Ba()&&e?e:null}function Ha(){return!Ra()&&(!Ba()||Va()!==null)}function Ua(){return typeof window<`u`&&window.__CUI_HA_CARDS__===!0}function Wa(e){return e&&!Ba()?{Authorization:`Bearer ${e}`}:{}}async function Ga(){return Wa(fa().target.value?.tokens?.access)}var Ka=ar(`AuthApi`),qa={id:`camera.ui-web`,name:`camera.ui-web`},Ja=[`.local`,`.lan`,`.home`,`.home.arpa`,`.internal`,`.localdomain`,`.fritz.box`],Ya=/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/,Xa=/^f[cd][0-9a-f]{2}:/;function Za(){let e=qn.create({timeout:1e4});Xi(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??qa},{signal:r});return oo(i.data)?{twoFactorPending:!0,tempToken:i.data.tempToken,raw:i.data}:{tokens:so(i.data),user:co(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:so(a.data),user:co(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:so(i.data),raw:i.data}}async function i(t,n,r){await e.get(`${t}/api/auth/check`,{headers:Wa(n),signal:r})}async function a(t,n){await e.post(`${t}/api/auth/logout`,null,{headers:Wa(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}),{internalAddresses:a,externalAddresses:o}=Qa(i.data.internalAddresses,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);Ka.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 lo((await e.post(`${t}/api/proxy/refresh`,{refresh_token:n},{signal:r,withCredentials:!0})).data)}async function c(t,n,r,i){return lo((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 Qa(e,t){let n=[],r=[];for(let t of to(e)){let e=no(t);e!==null&&(ao(e)?n:r).push(t)}let i=to(t).filter($a);return{internalAddresses:n,externalAddresses:[...new Set([...i,...r])]}}function $a(e){return no(e)!==null}function eo(e){let t=no(e);return t!==null&&ao(t)}function to(e){return Array.isArray(e)?e.filter(e=>typeof e==`string`):[]}function no(e){try{let t=new URL(e);return t.protocol!==`https:`&&t.protocol!==`http:`||io(t.hostname)?null:t.hostname}catch{return null}}function ro(e){let t=Ya.exec(e);return t?[Number(t[1]),Number(t[2])]:null}function io(e){let t=e.endsWith(`.`)?e.slice(0,-1):e;if(t===`localhost`||t.endsWith(`.localhost`)||e===`[::1]`||e===`[::]`||e.startsWith(`[::ffff:7f`))return!0;let n=ro(e);return n!==null&&(n[0]===127||n[0]===0)}function ao(e){if(e.startsWith(`[`))return Xa.test(e.slice(1,-1));let t=ro(e);if(t){let[e,n]=t;return e===10||e===172&&n>=16&&n<=31||e===192&&n===168}return e.endsWith(`.`)?!1:!e.includes(`.`)||Ja.some(t=>e.endsWith(t))}function oo(e){return typeof e==`object`&&!!e&&`requires2fa`in e&&e.requires2fa===!0}function so(e){return{access:e.access_token,accessExpiresAt:C(e.access_token,e.access_token_expires_at),refresh:e.refresh_token,refreshExpiresAt:e.refresh_token_expires_at}}function co(e){return{_id:e._id,username:e.username,role:e.role,firstLogin:e.firstLogin,avatar:e.avatar,language:e.language}}function lo(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:C(e.proxy_token,e.proxy_token_expires_at),proxyRefreshTokenExpiresAt:e.proxy_refresh_token_expires_at}}var uo=864e5,fo=`camera.ui:connection:discoverPool`;function po(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 mo(e){return e.filter(e=>$a(e.url)).map(e=>e.mode===`direct-lan`&&!eo(e.url)?{...e,mode:`direct-wan`,priority:1}:e)}function ho(){let e=ca.value;return e?[{url:e,mode:`direct-lan`,priority:0}]:null}function go(e){if(qn.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 _o(e){let t=[{url:e,mode:`direct-lan`,priority:0}];return async()=>ho()??t}function vo(e){let{api:t,cloudSession:n,cloudSessionLifecycle:r,storage:i,serverId:a,logger:o}=e,s=a?`${fo}:${a}`:fo,c=null,l=0,u,d=!1,f=!1;async function p(e,t){return await Ji(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),n=t?.pool?.length?mo(t.pool):[];n.length&&Date.now()-t.at<uo&&(c=n,l=t.at,u=t.ca)}catch{}}return async e=>{let a=ho();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=po(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=po(a))}if(m.length===0){if(c&&Date.now()-l<uo){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=qn.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<uo){let t=c;return c=null,l=0,o?.debug(`discover`,`tunnel/check failed (${go(e)}) — using cached pool fallback (${t.length} endpoints, single-use)`),p(t,u)}throw e}}}var yo=t({default:()=>bo}),bo=new URL(`camera-preview-C7GT5VHo.png`,import.meta.url).href,xo=t({default:()=>So}),So=new URL(`logo-512-DLKVOU2S.png`,import.meta.url).href,Co=t({default:()=>wo}),wo=new URL(`logo-256-BCQk9H1-.png`,import.meta.url).href,To=t({default:()=>Eo}),Eo=new URL(`logo-512-DLKVOU2S.png`,import.meta.url).href,Do=t({default:()=>Oo}),Oo=new URL(`logo-DmEiRk0z.png`,import.meta.url).href,ko=t({default:()=>Ao}),Ao=`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`,jo=t({default:()=>Mo}),Mo=`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`,No=t({default:()=>Po}),Po=`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`,Fo=3e4;function Io(){let e=fa(),t=V(()=>e.target.value?.endpoint.url),n=V(()=>e.target.value?.tokens.access),r=V(()=>e.target.value?.tokens.proxySession),i=V(()=>{let t=e.phase.value;return t.kind===`idle`?null:t.instanceId}),a=V(()=>e.phase.value.kind===`idle`),o=V(()=>e.phase.value.kind===`discovering`),s=V(()=>e.phase.value.kind===`online`),c=V(()=>e.phase.value.kind===`needs-auth`),l=V(()=>e.phase.value.kind===`offline`),u=V(()=>{let t=e.signal.value;return t.kind===`connecting`?e.hasBeenOnline.value?`reconnecting`:`connecting`:t.kind===`offline`?`reconnecting`:t.kind===`degraded`?`degraded`:null}),d=V(()=>e.troubleElapsedMs.value>=Fo),f=V(()=>{let t=e.phase.value;return t.kind===`offline`?t.nextRetryAt:null}),p=V(()=>{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 Lo={de:{components:{connection_details:{title:`Verbindungsdetails`,current:`Dieses Gerät`,server_view:`Was der Server sieht`,no_target:`Nicht verbunden`,last_attempt:`Letzter Versuch`,no_attempts:`Noch kein Verbindungsversuch aufgezeichnet.`,mode_lan:`Lokal`,mode_wan:`Internet`,outcome_connected:`verbunden`,outcome_reachable:`erreichbar, nicht benutzt`,outcome_timeout:`keine Antwort in der Zeit`,outcome_superseded:`abgebrochen, ein anderer war schneller`,outcome_pending:`läuft`,outcome_failed:`fehlgeschlagen`,copy:`Details kopieren`,copied:`Details kopiert`,copy_failed:`Details konnten nicht kopiert werden`},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_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.`,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_plugin_notification:`Plugin sendet eine Benachrichtigung`,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_assistant:`Assistent fragen`,action_assistant_desc:`Der Assistent schaut sich die Lage an und antwortet, als Push oder Gespräch.`,assistant_user:`Antwort für`,assistant_user_hint:`Bekommt die Antwort. Der Assistent nutzt seine Sprache und was er über ihn weiß.`,assistant_profile:`Profil`,assistant_profile_none:`Kein Profil`,assistant_profile_hint:`Modell, Werkzeuge und Anweisungen aus einem Profil dieses Nutzers.`,assistant_profile_missing:`Dieses Profil gibt es nicht mehr, es gelten die Standardwerte.`,assistant_prompt:`Frage oder Aufgabe`,assistant_prompt_placeholder:`Schau dir das Bild von {'{{camera.name}}'} an: ist das eine Lieferung? Antworte in einem Satz.`,assistant_prompt_hint:`Variablen des Flows werden eingesetzt. Gibt es nichts zu melden, bleibt der Assistent still und schickt nichts.`,assistant_image:`Bild`,assistant_image_hint:`Optional, etwa {'{{snapshot.base64}}'} nach einem Schnappschuss-Knoten. Das Modell sieht es nur, wenn es Bilder bekommt.`,assistant_deliver:`Zustellen als`,assistant_deliver_push:`Push-Benachrichtigung`,assistant_deliver_thread:`Gespräch im Assistenten`,assistant_deliver_both:`Push und Gespräch`,assistant_deliver_none:`Nur als Variable für die nächsten Knoten`,assistant_title:`Titel`,assistant_title_placeholder:`Standard ist der Name des Flows`,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, eine Kamera 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_camera:`Eine Kamera`,notification_control_scope_user:`Einen Nutzer`,notification_control_scope_global_hint:`Schaltet Push für alle Nutzer stumm oder wieder an.`,notification_control_scope_camera_hint:`Schaltet Push von der gewählten Kamera stumm oder wieder an. Andere Kameras melden weiter, und die Ereignisse landen trotzdem in der App.`,notification_control_scope_user_hint:`Schaltet Push nur für den gewählten Nutzer stumm oder wieder an.`,notification_control_camera:`Kamera`,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_embed_faces:`Gesichts-Embedding`,method_embed_persons:`Personen-Embedding`,method_segment:`Umrisse erkennen`,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_staticDetections:`Ruhende 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`,sensor_property_identities:`Erkannte Gesichter`,sensor_property_plates:`Erkannte Kennzeichen`,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_assistant_answer:`Antwort des Assistenten`,variable_assistant_replied:`Assistent hat geantwortet`,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_sources:`Aufgezeichnete Streams`,camera_prop_recording_mode:`Aufnahmemodus`,camera_prop_recording_prebuffer:`Aufnahme-Vorpuffer (s)`,camera_prop_ptz_autotrack:`PTZ Autotrack`,camera_prop_ptz_return_home:`PTZ Rückkehr zur Ausgangsposition`,camera_prop_ptz_target_labels:`PTZ verfolgte Objekt-Typen`,camera_prop_ptz_min_confidence:`PTZ Mindest-Konfidenz`,camera_prop_object_confidence_person:`Personen-Konfidenz`,camera_prop_object_confidence_vehicle:`Fahrzeug-Konfidenz`,camera_prop_object_confidence_animal:`Tier-Konfidenz`,camera_prop_suppress_static:`Unbewegte Objekte ignorieren`,camera_prop_object_timeout:`Objekt-Timeout (s)`,camera_prop_face_confidence:`Gesichts-Konfidenz`,camera_prop_face_match_sensitivity:`Gesichtserkennung`,camera_prop_plate_confidence:`Kennzeichen-Erkennungskonfidenz`,camera_prop_plate_ocr_confidence:`Kennzeichen-Lesekonfidenz`,camera_prop_plate_min_length:`Minimale Kennzeichenlänge`,camera_prop_main_stream_analysis:`Hauptstream-Analyse`,camera_prop_motion_timeout:`Bewegungs Timeout (s)`,option_continuous:`Durchgehend`,option_face_strict:`Streng`,option_face_balanced:`Ausgewogen`,option_face_relaxed:`Locker`,option_event:`Ereignis`,option_adhoc:`Manuell`,option_low:`Niedrig`,option_mid:`Mittel`,option_medium:`Mittel`,option_high:`Hoch`,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_snapshot_mode:`Neuer Snapshot`,camera_prop_snapshot_interval:`Snapshot-Intervall (s)`,camera_prop_snapshot_max_age:`Snapshot-Höchstalter (s)`,option_snapshot_interval:`Regelmäßig`,option_snapshot_on_view:`Beim Ansehen`,option_snapshot_on_demand:`Nur auf Anfrage`,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`,events_unavailable:`Ereignisse nicht verfügbar, das NVR-Plugin läuft nicht`,title:`Letzte Ereignisse`,filter:`Letzte Ereignisse filtern`,filter_hint:`Wähle die Kameras, deren Ereignisse hier erscheinen. Ausgeblendete Ereignisse werden weiter erkannt und aufgezeichnet.`,filter_all_cameras:`Alle Kameras`,filter_shown_on:`Auf {n} von {total} Kameras sichtbar`,filter_hidden_everywhere:`Auf allen Kameras ausgeblendet`},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_faceEmbedder:`Gesichtserkennung`,sensor_type_personEmbedder:`Personen-Wiedererkennung`,sensor_type_segmenter:`Segmentierung`,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`,sensor_offline:`Offline`,virtual_sensor_created:`Virtueller Sensor erstellt`,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.`,notifications:`Benachrichtigungen`,notifications_hint:`Legt fest, wofür diese Kamera aufs Handy meldet. Welche Erkennungen melden, stellst du pro Alarmzone ein.`,notify_audio_other:`Andere Geräusche`,recording_requires:`Kein NVR-Plugin zugewiesen. Die Einstellungen greifen, sobald eins installiert ist.`,zones_hint:`Ohne Zonen zählt das gesamte Bild. Bewegungs- und Objektzonen beschränken, wo Erkennungen zählen, Alarmzonen entscheiden, was dich benachrichtigt, Privatzonen verdecken einen Bereich, 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.`,frame_worker_location:`Decoder: {placement}`,zones_empty:`Noch keine Zonen oder Linien an dieser Kamera.`,zone_entry_motion:`Bewegungszone`,zone_entry_object:`Objektzone`,zone_entry_privacy:`Privatzone`,zone_entry_alert:`Alarmzone`,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_recognize_face:`Bild ablegen oder auswählen, um ein Gesicht zuzuordnen`,drop_or_select_image_of_person:`Bild einer Person ablegen oder auswählen`,drop_or_select_image_to_outline:`Bild ablegen oder auswählen, um seine Objekte zu umreißen`,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`},face_recognition_interface:{quality:`Landmarken-Sicherheit {value} %`,match:`Zuordnen`,no_match:`Niemand erkannt`,no_face:`Kein Gesicht in diesem Bild gefunden`,needs_nvr:`Zum Zuordnen wird das NVR-Plugin gebraucht, dort liegen die hinterlegten Personen`,sensitivity_strict:`Streng`,sensitivity_balanced:`Ausgewogen`,sensitivity_relaxed:`Locker`},person_embedding_interface:{no_vector:`Für dieses Bild kam kein Vektor`,search:`Ähnlich aussehende Personen suchen`},segmentation_interface:{no_mask:`Für dieses Bild kam kein Umriss`,no_outline:`Kein Umriss`,whole_picture:`Ganzes Bild`},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_delete_room:`Den Raum "{name}" löschen? Seine Kameras wechseln nach Default und er verschwindet aus dem Grundriss.`,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_undo_restore:`Damit kommt die Einrichtung von vor der letzten Wiederherstellung zurück. Änderungen seitdem gehen verloren.`,confirm_keep_running_here:`camera.ui startet neu und betreibt Kameras und Plugins wieder auf diesem Server. Hat der neue Server schon übernommen, schalten Sie einen der beiden ab.`,confirm_cancel_move:`Der Umzug wird abgebrochen, camera.ui betreibt Kameras und Plugins wieder auf diesem Server. Der neue Server kann das Backup dann nicht mehr holen.`,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:{reset_defaults:`Auf Standard zurücksetzen`,add:`Hinzufügen`,add_source:`Quelle hinzufügen`,create_room:`Neuen Raum erstellen`,delete_room:`Raum löschen`,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`,upload:`Hochladen`,reset:`Zurücksetzen`,restart:`Neustarten`,restore_backup_archive:`Backup-Archiv wiederherstellen`,restore:`Wiederherstellen`,retry:`Erneut versuchen`,review:`Ansehen`,discard:`Verwerfen`,undo_restore:`Rückgängig machen`,create_move_code:`Umzugscode erstellen`,new_move_code:`Neuer Code`,withdraw:`Zurückziehen`,keep_running_here:`Hier wieder laufen lassen`,cancel_move:`Umzug abbrechen`,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:{nav_settings_in_nav:`Zeigt die Settings-Seiten als eigene Gruppe in der Seitenleiste.`,nav_group_collapsible:`Die Gruppe {group} lässt sich in der Seitenleiste einklappen.`,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`,snapshot_mode_interval:`Ein Timer hält das Bild aktuell, Betrachter wecken die Kamera nie`,snapshot_mode_on_view:`Ein Betrachter bekommt ein neues Bild, sobald das gespeicherte älter ist als unten eingestellt`,snapshot_mode_on_demand:`Neue Bilder nur durch Automationen, den Aktualisieren-Button oder eine Anfrage, gut für Akkukameras`,snapshot_max_age:`Alter in Sekunden, ab dem ein Betrachter ein neues Bild bekommt`,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_person:`Mindest-Konfidenz für Personen`,confidence_vehicle:`Mindest-Konfidenz für Fahrzeuge`,confidence_animal:`Mindest-Konfidenz für Tiere`,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_quick_capacity:`Ab etwa vier gleichzeitigen Zuschauern von unterwegs läuft ein Named Tunnel stabiler.`,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.`,notify_enabled:`Erkennungen dieser Kamera aufs Handy schicken.`,notify_video:`Hängt einen kurzen Clip des Moments an. Braucht die Aufnahme, nutzt die niedrigste aufgezeichnete Qualität.`,notify_audio:`Welche erkannten Geräusche eine Benachrichtigung auslösen.`,notify_sensors:`Welche Sensor-Auslöser eine Benachrichtigung schicken.`,notify_speed:`Wie lange eine Benachrichtigung auf ein gutes Bild wartet. Sofort schickt direkt, ausgewogen wartet bis zu 2 Sekunden, beste bis zu 4.`,notify_cooldown:`Mindestabstand zwischen Benachrichtigungen dieser Kamera. Klingel und Alarme umgehen ihn.`,recording_mode:`Continuous zeichnet durchgehend auf, event rund um Erkennungen mit Pre-Buffer, adhoc verbindet sich erst, wenn eine Erkennung beginnt.`,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.`,ptz_autotrack_min_target_size:`Objekte, die weniger als diesen Anteil der Bildhöhe einnehmen, werden ignoriert. Sie sind meist zu weit weg. 0 schaltet die Grenze aus.`,ptz_autotrack_max_target_size:`Nicht mehr folgen, sobald ein Objekt mehr als diesen Anteil der Bildhöhe einnimmt. So nah sagt das Bild wenig, die Kamera bleibt stehen, bis das Objekt sich entfernt. 0 schaltet die Grenze aus.`,ptz_autotrack_active_hours:`Nur in diesen Stunden folgen, zum Beispiel nachts. Außerhalb bleibt die Kamera, wo sie ist.`,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.`,main_stream_analysis:`Mit Hardware-Beschleunigung wird der hochauflösende Stream bei Aktivität immer ausgewertet. Dieser Schalter erzwingt das auch auf reinen CPU-Systemen, was spürbar Rechenleistung kostet.`,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)`,object_timeout:`Wie lange eine Erkennung eines kamerabasierten Objekt-Sensors ohne Ende-Meldung aktiv bleibt (min. 10s). Frame-basierte Erkennung ignoriert das`,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`,face_match_sensitivity:`Streng heißt weniger falsche Namen, locker erkennt Personen öfter. Was als Treffer zählt, ist je Modell verschieden, deshalb eine Stufe statt einer Zahl.`,plate_confidence:`Kennzeichen, die mit weniger Konfidenz gefunden werden, werden gar nicht erst gelesen`,plate_ocr_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...`,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`,two_way_audio_disabled:`Entfernt den Rücksprechkanal dieser Quelle, der Mikrofon-Button verschwindet`,source_timeout:`Sekunden ohne Video, bevor der Stream neu verbunden wird. Leer lässt den Standard: 5 bei Kameras, 60 bei Plugin-Quellen`,source_handshake_timeout:`Sekunden, die die Kamera für jeden Verbindungsschritt bekommt. Für langsam aufwachende Kameras erhöhen. Leer bedeutet 5`,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:`Mit mehreren URLs lassen sich Codecs kombinieren, z. B. Video aus der einen und Audio aus der anderen, für bessere Wiedergabe`,server_addresses:`Welche IP-Adressen dieser Maschine Apps benutzen dürfen und wo Kamera-Streams angeboten werden. Leer bedeutet alle. Eine hier fehlende VPN-Adresse verhindert Streaming über dieses VPN.`,local_url:`Ein Name, den Ihr Netzwerk auflöst, etwa hinter einem Reverse Proxy. Apps bevorzugen ihn gegenüber der reinen IP, sobald er antwortet. Er braucht ein passendes Zertifikat und muss WebSocket-Verbindungen durchlassen. Kamera-Streams laufen weiter über die Adressen oben.`,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: hohe, mittlere oder niedrige Auflösung`,playback_source:`Aufnahmequalität für die Wiedergabe. Auto spielt die beste verfügbare Qualität und wechselt bei Bedarf`,activity_mode:`Wann der Live-Stream läuft. Immer an streamt durchgehend, Aktivität nur wenn etwas passiert, Standby wartet auf einen Tipp`,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`},option:{face_match_strict:`Streng`,face_match_balanced:`Ausgewogen`,face_match_relaxed:`Locker`},label:{nav_settings_in_nav:`Settings-Seiten in der Navigation`,nav_group_collapsible:`{group} einklappbar`,aspect_ratio:`Seitenverhältnis`,aspect_ratio_custom:`Eigenes Verhältnis`,audio_codec:`Audio Codec`,snapshot_mode:`Neues Bild`,snapshot_mode_interval:`Regelmäßig`,snapshot_mode_on_view:`Beim Ansehen`,snapshot_mode_on_demand:`Nur auf Anfrage`,snapshot_max_age:`Neues Bild nach`,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_person:`Personen-Konfidenz`,confidence_vehicle:`Fahrzeug-Konfidenz`,confidence_animal:`Tier-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`,notify_enabled:`Benachrichtigungen senden`,notify_video:`Video in der Benachrichtigung`,notify_audio:`Bei Geräuschen melden`,notify_sensors:`Bei Sensoren melden`,notify_speed:`Geschwindigkeit`,notify_cooldown:`Sperrzeit (Sekunden)`,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`,ptz_autotrack_min_target_size:`Kleinstes Objekt`,ptz_autotrack_max_target_size:`Größtes Objekt`,ptz_autotrack_active_hours:`Nur in diesen Stunden`,until:`bis`,disconnected:`Getrennt`,domain:`Domain`,enabled:`Aktiviert`,external_port:`Externer Port`,external_url:`Externe URL`,firmware_version:`Firmware Version`,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`,main_stream_analysis:`Hauptstream ohne GPU`,language:`Sprache`,language_system:`Systemstandard`,layout_name:`Layoutname`,manufacturer:`Hersteller`,model:`Modell`,motion_timeout:`Bewegungs Timeout`,object_timeout:`Objekt Timeout`,audio_timeout:`Audio-Timeout`,audio_min_decibels:`Min. Lautstärke (dBFS)`,audio_confidence:`Audio-Konfidenz`,face_confidence:`Gesichts-Konfidenz`,face_match_sensitivity:`Gesichter erkennen`,plate_confidence:`Kennzeichen-Erkennung`,plate_ocr_confidence:`Kennzeichen-Lesung`,plate_min_length:`Min. Kennzeichenlänge`,sensor_timeout:`Sensor-Timeout`,sensor_triggers:`Sensor-Trigger`,name:`Name`,room:`Raum`,room_default:`Standard`,room_no_level:`Ohne Ebene`,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`,password:`Passwort`,pip_source:`Bild-in-Bild Quelle`,port_forward:`Port-Weiterleitung`,preload:`Vorladen`,muted:`Audio stummschalten`,two_way_audio_disabled:`Gegensprechen deaktivieren`,source_timeout:`Stream-Timeout`,source_handshake_timeout:`Verbindungs-Timeout`,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`,local_url:`Lokale Adresse`,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`,playback_source:`Wiedergabe Quelle`,activity_mode:`Aktivitätsmodus`,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_per_camera:`Pro Kamera`,activity_mode_standby:`Standby`,clear:`Säubern`,console:`Konsole`,contain:`Objekt komplett in der Zone`,cancel_selection:`Auswahl abbrechen`,copied:`Kopiert`,copy_stream_json:`Stream-Details kopieren`,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_line:`Linie löschen`,delete_zone:`Zone löschen`,delete_selected:`Ausgewählte Kameras entfernen`,disable_selected:`Ausgewählte Kameras deaktivieren`,enable_selected:`Ausgewählte Kameras aktivieren`,lock_layout:`Layout sperren`,disabled:`Deaktiviert`,download:`Herunterladen`,edit:`Bearbeiten`,edit_layout:`Layout bearbeiten`,hide_on_home:`Auf der Startseite ausblenden`,show_on_home:`Auf der Startseite anzeigen`,view_default:`Alle Kameras anzeigen`,view_grouped:`Nach Raum gruppieren`,exclude:`Ausschließen`,finish:`Fertig`,detections:`Erkennungen`,detections_off:`Aus`,detections_on:`An`,fullscreen_off:`Vollbildmodus ausschalten`,fullscreen_on:`Vollbildmodus einschalten`,hide_timeline:`Zeitleiste ausblenden`,include:`Einschließen`,intercom:`Gegensprechanlage`,intersect:`Objekt berührt die Zone`,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`},polygon:{kind_motion:`Bewegung`,kind_object:`Objekt`,kind_alert:`Alarm`},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}`,quality_degraded:`Keine Aufnahme in {from} an dieser Stelle, 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`,ptz_presets:`Positionen`,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.`,stream_unavailable:`Stream nicht verfügbar`,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`,delete_range:`Aufnahmen löschen`,delete_selection:`Auswahl löschen`,delete_range_confirm:`Aufnahmen und Ereignisse im gewählten Bereich löschen? Gelöscht wird minutenweise, das lässt sich nicht rückgängig machen. Favoriten im Bereich werden ebenfalls gelöscht.`,delete_range_done:`Gewählter Bereich gelöscht`,delete_range_nothing:`Im gewählten Bereich gibt es nichts zu löschen`,delete_range_too_recent:`Die gewählten Minuten werden noch geschrieben. Versuch es in ein paar Minuten nochmal.`,zones:`Zonen`,heatmap:`Heatmap`,ask_assistant:`Assistenten fragen`,ask_assistant_prompt:`Was passiert gerade an der Kamera {camera}, und was hat sie heute gesehen?`,ask_assistant_prompt_playback:`Was ist an der Kamera {camera} um {time} passiert? Zeig mir das Bild von dem Moment und sag mir, was du siehst.`,more:`Mehr`,zoom_in:`Zoom rein`,zoom_out:`Zoom raus`},similar:{scanning:`Objekt wird erkannt`,searching:`Wird gesucht`,reading:`Wird gelesen`,no_detector:`Die Objekterkennung dieser Kamera kann kein Bild prüfen`,failed:`Das Bild ließ sich nicht auswerten`,search:`Objekt suchen`,pick_hint:`Person oder Fahrzeug auswählen`,find_hint:`Person oder Fahrzeug im Bild auswählen`,continue:`Weiter`,remove_pick:`Entfernen`,no_object_detection:`Keine Objekterkennung`,no_objects:`Hier ist keine Person und kein Fahrzeug`,unknown_face:`Unbekanntes Gesicht`,vehicle:`Fahrzeug`,no_face:`Kein Gesicht`,no_vehicle_features:`Nichts gespeichert`,no_face_notice:`Weder Gesicht noch Kleidung dieser Person ließen sich lesen`,no_vehicle_notice:`Zu diesem Fahrzeug ist nichts gespeichert, wonach sich suchen ließe`,more_precise:`Präziser`,more_broad:`Breiter`,show_all:`Alle in den Aufnahmen zeigen`,image_search_title:`Suche per Bild`,image_no_camera:`Keine Kamera hat eine Objekterkennung, die ein Bild prüfen kann`},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`},placement:{local:`Läuft auf dem Master`,pending:`Wird {worker} zugewiesen`,provisioning:`Wird auf {worker} installiert`,provisioning_version:`Version {version} wird auf {worker} installiert`,starting:`Startet auf {worker}`,adopting:`Verbindet sich wieder mit {worker}`,bound:`Läuft auf {worker}`,restarting:`Startet auf {worker} neu`,held:`Wartet seit {time} auf {worker}`,held_until:`Wartet bis {time} auf {worker}`,releasing:`Wird auf {worker} gestoppt`,failed:`Fehlgeschlagen auf {worker}`,waiting:`Wartet auf Worker {worker}`},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`},push_sync:{title:`Push-Nachrichten kommen nicht mehr an`,action:`Beheben`,dismiss:`Ausblenden`},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`,status_disabled:`Deaktiviert`,status_incompatible:`Inkompatibel`,status_update_required:`Braucht ein Plugin-Update`,status_server_update_required:`Braucht ein neueres camera.ui`,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:`Filter`,pick_date:`Datum wählen`,date_apply:`Springen`,date_cancel:`Abbrechen`,filter_events:`Ereignisse`,filter_cameras:`Kameras`,filter_zone:`Zone`,filter_zone_enable:`Nach Zone filtern`,filter_zone_hint:`Bereiche auf dem Kamerabild markieren.`,filter_search:`Suche`,filter_search_matches:`Nur Treffer`,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_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`,type_occupancy:`Belegung`,type_power:`Strom`,type_lock:`Schloss`,type_garage:`Garagentor`,live:`Live`,today:`Heute`,yesterday:`Gestern`,views:`Ansichten`},toast:{backup_downloaded:`Backup-Datei erfolgreich heruntergeladen`,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_invalid:`Prüfe die markierten Felder, gespeichert wurde nichts`,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`,metrics_reset:`Metriken zurückgesetzt`,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_restarting_on_worker:`Plugin startet auf seinem Worker neu`,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}`,assistant_updated:`Assistent-Einstellungen aktualisiert`,assistant_threads_deleted:`Alle Unterhaltungen gelöscht`,assistant_schedule_saved:`Geplanter Prompt gespeichert`,assistant_profile_saved:`Profil gespeichert`,assistant_schedule_ran:`Geplanter Prompt ist gelaufen`,assistant_schedule_failed:`Geplanter Prompt 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_incomplete:`Diese Zonen brauchen mindestens 3 Punkte: {zones}`,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`},training_editor:{hint:`Ziehen zeichnet eine Box, Tipp auf Box oder Label bearbeitet sie, Doppeltipp zoomt. Beschrifte alles Sichtbare, auch geparkte und angeschnittene Fahrzeuge.`,hint_wrong:`Korrigiere oder entferne falsche Boxen und bestätige trotzdem, eine Person auf Plakat oder Bildschirm ist keine Person. Ohne Boxen bestätigen markiert einen Fehlalarm.`,plate_text:`Kennzeichen`,sc_select:`Nächste Box wählen`,sc_move:`Box verschieben`,sc_resize:`Größe ändern`,sc_label:`Label wechseln`,sc_delete:`Box löschen`,sc_deselect:`Auswahl aufheben`,sc_verify:`Bestätigen & weiter`,sc_nav:`Bild zurück / vor (ohne Auswahl)`,sc_ghosts:`Boxen des vorherigen Bildes dieser Kamera`,sc_ghosts_all:`Alle übernehmen`,sc_hide:`Alle Boxen aus- oder einblenden`,ghosts_toggle:`Boxen des vorherigen Bildes dieser Kamera zeigen`,boxes_hide:`Boxen ausblenden`,boxes_show:`Boxen einblenden`,ghost_take:`Übernehmen`,suggestion_take:`Unsichere Erkennung übernehmen`,verify:`Bestätigen`,remove_box:`Box entfernen`,removed_meanwhile:`Dieses Bild wurde inzwischen entfernt.`,labels:{person:`Person`,vehicle:`Fahrzeug`,animal:`Tier`,package:`Paket`,face:`Gesicht`,license_plate:`Kennzeichen`}},training_submissions:{empty:`Noch keine Beiträge. Eingereichte Frames erscheinen hier.`,load_failed:`Beiträge konnten nicht geladen werden. Cloud-Verbindung prüfen.`,status_pool:`Eingereicht`,status_trained:`Im Training`,delete:`Beitrag löschen`,count:`{count} Beitrag | {count} Beiträge`},zone_editor:{base_labels:`Basis`,motion_hint:`Bewegungszonen legen fest, wo Bewegung zählt. Ohne eine zählt das ganze Bild.`,object_hint:`Objektzonen sagen, welche Typen wo zählen. Ohne Zone zählt jeder Typ überall. Mit Zone zählt ein Typ nur in einer Zone, die ihn listet, und eine Zone ohne Typen zählt jeden Typ.`,alert_hint:`Alarmzonen entscheiden, was dich benachrichtigt, an Erkennung und Aufnahme ändern sie nichts. Ohne Zone meldet jeder erkannte Typ. Mit Zone melden nur die hier gewählten Typen, und nur aus der Zone heraus.`,privacy_hint:`Privatzonen sind die Bereiche, die camera.ui verdeckt. Ohne eine wird nichts verdeckt. In einer werden Livebild, Aufnahme und Bilder verdeckt, und Erkennungen verworfen, sofern man sie nicht behält.`,lines_hint:`Eine Linie meldet Objekte, die sie in der gewählten Richtung überqueren. Ohne eine wird nichts gemeldet. Eine Linie filtert die Erkennung nie.`,object_labels_info:`Nur die gewählten Typen zählen in dieser Zone. Wähle keinen, dann zählt hier jeder Typ. Gesichter und Kennzeichen entscheiden, ob das, was hier zählt, auch einen Namen bekommt.`,alert_labels_info:`Die gewählten Typen melden nur, solange sie in dieser Zone sind. Wähle keinen, dann meldet hier jeder Typ.`,line_labels_info:`Nur die gewählten Typen lösen diese Linie aus. Wähle keinen, dann löst jeder Typ sie aus.`,identify_group:`Identifizierung`,identify_faces:`Gesichter erkennen`,identify_plates:`Kennzeichen lesen`,alert_attributes:`Wer oder was genau`,alert_faces:`Gesichter`,alert_faces_info:`Nichts ausgewählt heißt, jedes Gesicht meldet. Wähle Personen, um es einzugrenzen, "Unbekannt" deckt alle ab, die die Erkennung nicht benennen kann.`,alert_face_any_known:`Jedes bekannte Gesicht`,alert_face_unknown:`Unbekannte Gesichter`,alert_plates:`Kennzeichen`,alert_plates_info:`Nichts eingetragen heißt, jedes Kennzeichen meldet. Trage Kennzeichen ein, um es einzugrenzen.`,alert_plates_placeholder:`Kennzeichen eingeben und Enter drücken`,alert_conflict:`Diese Kamera erkennt {labels} nicht, diese Typen melden also nie. Nimm sie in eine Objektzone auf oder entferne sie hier.`,zone_match:`Gilt als drin, wenn`,object_match_info:`Legt fest, wann ein Objekt für diese Zone zählt. "Berührt" zählt es, sobald ein Teil hineinreicht, "ganz drin" erst, wenn die ganze Box in der Zone liegt.`,alert_match_info:`Legt fest, wann ein Objekt weit genug drin ist, um zu benachrichtigen. "Steht in" nimmt den Bodenpunkt, wer also mit dem Körper über die Zone ragt, aber mit den Füßen daneben steht, löst nichts aus. "Berührt" ist am lockersten, "ganz drin" am strengsten.`,match_anchor:`Das Objekt in der Zone steht`,match_intersect:`Das Objekt die Zone berührt`,match_contain:`Das Objekt ganz drin ist`,line_direction:`Überquerungsrichtung`,line_direction_info:`In welche Richtung ein Objekt die Linie überqueren muss, damit es gemeldet wird. Beide Richtungen meldet jede Überquerung, die Einbahn-Einstellungen nur diese eine.`,line_direction_both:`beide Richtungen`,privacy_drop:`Erkennungen darin`,privacy_drop_info:`Was mit Objekten passiert, die in dieser Zone gefunden werden. Verworfen heißt, sie werden nie zu einem Ereignis. Zählen weiter heißt, sie werden normal erkannt und nur das Bild wird abgedeckt.`,privacy_drop_on:`Werden verworfen`,privacy_drop_off:`Zählen weiter`,privacy_fallback:`Wenn ein Bild nicht verdeckt werden kann`,privacy_fallback_send:`Trotzdem senden`,privacy_fallback_drop:`Kein Bild senden`,privacy_fallback_info:`Manche Kameraformate lassen sich nicht maskieren. Entweder kommt das Bild unverdeckt an und du löschst es, oder es gibt für den Moment kein Bild.`,edit_zones:`Zonen bearbeiten`,zone:`Zone`,tab_motion:`Bewegung`,tab_object:`Objekte`,tab_alert:`Alarme`,tab_privacy:`Privat`,tab_lines:`Linien`}},connection:{offline:`Offline`,reconnected:`Verbunden`,reconnecting:`Verbinde...`,degraded:`Synchronisiere...`,restarting:`Starte neu...`,retry:`Erneut versuchen`,connecting_remote:`Verbinde mit Ihrem Server...`,connected_lan:`Verbunden über lokales Netzwerk`,connected_wan:`Verbunden über Internet`,unreachable:`Server nicht erreichbar`,pick_server:`Anderen Server wählen`,not_connected:`Nicht verbunden. Es wurde nichts gesendet.`,outdated_title:`Update empfohlen`,server_outdated:`Diese App braucht camera.ui {required} oder neuer, auf dem Server läuft {found}.`,nvr_outdated:`Diese App braucht das NVR-Plugin {required} oder neuer, der Server hat {found}.`,outdated_hint:`Bis dahin funktioniert nicht alles.`,outdated_dismiss:`Verstanden`},restore:{title:`Backup wiederherstellen`,title_ready:`Dieses Backup wiederherstellen?`,title_undo:`Wiederherstellung wird rückgängig gemacht`,title_move:`Umzug von einem anderen Server`,phase_uploading:`Backup wird hochgeladen...`,phase_checking:`Backup wird geprüft...`,phase_restoring:`Wird wiederhergestellt...`,phase_restarting:`Server wird neu gestartet...`,phase_plugins:`Plugins werden installiert...`,phase_starting:`camera.ui wird gestartet...`,phase_move_connecting:`Verbindung zum alten Server...`,phase_move_stopping:`Der alte Server stoppt Kameras und Plugins...`,phase_move_packing:`Der alte Server packt sein Backup...`,phase_move_receiving:`Backup wird empfangen...`,phase_move_checking:`Backup wird geprüft...`,move_from:`Von {source}`,dont_close:`Bitte schließen Sie dieses Fenster nicht.`,summary_created:`Erstellt`,summary_system:`System`,summary_version:`camera.ui {version} auf {platform}`,summary_cameras:`Kameras`,summary_plugins:`Plugins`,summary_accounts:`Anmelden mit`,summary_notes:`Hinweise`,platform_change:`Für dieses System auf {to} gesetzt, war {from}.`,platform_dropped:`Wird nicht übernommen, war {from}.`,mode_title:`Wie übernimmt dieser Server das Backup?`,mode_move:`Umzug`,mode_move_hint:`Dieser Server ersetzt den alten und behält seine Identität. Schalten Sie den alten Server ab.`,mode_copy:`Kopie`,mode_copy_hint:`Beide Server laufen weiter, dieser bekommt eine eigene Identität.`,mode_suggested:`empfohlen`,move_no_certificate:`Das Backup enthält keine Zertifizierungsstelle, Apps und Worker müssen neu gekoppelt werden.`,move_source_running:`Der alte Server läuft noch unter {address}. Schalten Sie ihn vor dem Umzug ab oder wählen Sie Kopie.`,move_source_unchecked_local_network:`camera.ui darf das lokale Netzwerk nicht durchsuchen und konnte nicht prüfen, ob der alte Server noch läuft. Erlauben Sie es unter Systemeinstellungen → Datenschutz & Sicherheit → Lokales Netzwerk.`,move_source_unchecked_network:`camera.ui konnte nicht prüfen, ob der alte Server noch läuft. Schalten Sie ihn vor dem Umzug ab oder wählen Sie Kopie.`,copy_workers:`Die Worker des alten Servers bleiben bei ihm ({count}).`,summary_replace:`Die aktuelle Einrichtung wird ersetzt, Aufnahmen bleiben. Sie können das 7 Tage lang rückgängig machen.`,confirm:`Wiederherstellen`,result_done:`Backup wiederhergestellt.`,result_undone:`Die Einrichtung von vor der Wiederherstellung ist zurück.`,result_problems:`Backup wiederhergestellt. Einige Plugins ließen sich nicht installieren.`,result_problems_hint:`Unter Einstellungen, Backup können Sie es erneut versuchen.`,result_cloud:`Melden Sie diesen Server unter Einstellungen, Remote Zugriff bei cameraui.com an.`,result_nvr:`Hat das NVR eine Lizenz, verbinden Sie es danach in seinen Einstellungen wieder mit cameraui.com.`,result_failed:`Das Backup konnte nicht wiederhergestellt werden.`,result_rolled_back:`camera.ui startete mit dem Backup nicht. Die vorherige Einrichtung ist zurück.`,result_unknown:`camera.ui läuft wieder. Melden Sie sich an, um das Ergebnis zu prüfen.`,to_login:`Zur Anmeldung`,move_code:`Umzugscode`,move_code_hint:`Erstellen Sie ihn auf dem alten Server unter Einstellungen, Backup.`,move_address:`Adresse des alten Servers`,move_address_hint:`Nur nötig, wenn der Code ihn nicht findet.`,move_fetch:`Backup holen`,move_code_offered:`Dieser Server bietet selbst einen Umzugscode an. Ziehen Sie ihn zurück, um hier ein Backup zu holen.`,moved_away:`Dieser Server ist auf einen neuen umgezogen. Kameras und Plugins sind hier gestoppt.`,title_key:`Backup-Schlüssel nötig`,key_required:`Dieses Backup ist verschlüsselt. Geben Sie den Backup-Schlüssel des Servers ein, von dem es stammt.`,key_wrong:`Dieser Schlüssel öffnet das Backup nicht.`,key_label:`Backup-Schlüssel`,key_hint:`Sie finden ihn auf dem alten Server unter Einstellungen, Backup, oder in der gespeicherten Schlüsseldatei.`,key_file:`Schlüsseldatei öffnen`,key_file_invalid:`Diese Datei enthält keinen Backup-Schlüssel.`,key_open:`Backup öffnen`,plugin_version:`Bekommt Version {version}, {saved} läuft auf dieser camera.ui nicht.`,plugin_platform:`Läuft auf diesem System nicht, seine Kameras behalten ihre Einstellungen. {reason}`,plugin_unavailable:`Lässt sich nicht installieren. {reason}`,plugin_worker:`Läuft weiter auf dem Worker {worker}.`,plugin_worker_copy:`Lief auf dem Worker {worker}, der beim alten Server bleibt. Seine Daten dort kommen nicht mit.`,plugin_not_in_backup:`Nicht im Backup. Es bleibt installiert, startet aber ohne seine Einstellungen.`,plugin_issue:{not_in_registry:`Es steht nicht in der Plugin-Registry.`,gone:`Version {version} ist nicht mehr in der Registry.`,blocked:`Version {version} ist gesperrt: {detail}`,needs_newer_server:`Version {version} braucht eine neuere camera.ui.`,built_for_older_server:`Version {version} wurde für eine ältere camera.ui gebaut.`,engine:`Version {version} braucht {engine} {required}.`,platform:`Es erfordert {platform}.`,no_other_version:`Keine andere Version läuft auf dieser camera.ui.`},summary_excluded:`Ordner, die nicht im Backup sind`,excluded_hint:`Kopieren Sie sie selbst, wenn Sie sie hier brauchen.`},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:{role_admin:`Admin`,role_user:`Benutzer`},navigation:{group_settings:`Einstellungen`,edit_nav:`Navigation anpassen`,group_main:`Start`,group_manage:`Verwalten`,group_system:`System`,sensors:`Sensoren`,about:`Über`,account:`Konto`,metrics:`Metrics`,appearance:`Erscheinungsbild`,backup:`Backup`,cameras:`Kameras`,camview:`Kameransicht`,config:`Konfiguration`,console:`Konsole`,logs:`Protokolle`,extras:`Extras`,home:`Startseite`,nvr:`NVR`,plugins:`Plugins`,faces:`Gesichter`,training:`Training`,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`,updates:`Updates`,floorplan:`Grundriss`,assistant:`Assistent`},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.`,assistant_description:`Mit den Kameras sprechen: Modell, Werkzeuge und Verhalten.`,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 Sitzungen.`},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`,needs_cloud:`Share-Links funktionieren nur mit Cloud-Zugriff. Unter Einstellungen, Remote Zugriff einschalten.`,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:{assistant:{title:`Assistent`,conversations:`Unterhaltungen`,new_conversation:`Neue Unterhaltung`,no_conversations:`Noch keine Unterhaltungen.`,delete_conversation:`Unterhaltung löschen`,open_assistant:`Assistent fragen`,open_full_view:`Vollansicht öffnen`,setting_on:`An. Frag noch einmal, dann nutzt der Assistent es.`,setting_needs_admin:`Ausgeschaltet. Ein Admin kann es unter Einstellungen, Assistent einschalten.`,setting_terminalEnabled_title:`Shell-Befehle`,setting_terminalEnabled_off:`Aus. Wenn an, prüft der Assistent Platte, Netz und Prozesse auf dem Server, jeden Befehl nach deiner Freigabe.`,setting_memoryEnabled_title:`Fakten über Nutzer merken`,setting_memoryEnabled_off:`Aus. Wenn an, behält der Assistent Fakten wie Namen über Gespräche hinweg.`,setting_sendImages_title:`Bilder an das Modell senden`,setting_sendImages_off:`Aus. Wenn an, sieht das Modell die Bilder und kann sie beschreiben. Bei Cloud-Modellen verlassen sie die Instanz.`,notice_vision_title:`{model} sieht keine Bilder`,notice_vision_text:`Die Bilder erscheinen hier, das Modell bekommt nur den Text der Werkzeugergebnisse.`,notice_vision_attach:`Plugin-Erkennungen laufen trotzdem auf angehängten Bildern, das Modell selbst sieht sie nicht.`,notice_tools_title:`{model} kann keine Werkzeuge aufrufen`,notice_tools_text:`Fragen zu Kameras, Aufnahmen und Einstellungen bleiben unbeantwortet. Wähle im Werkzeugmenü ein anderes Modell.`,model_label:`Modell`,download_clip:`Clip herunterladen`,drawer_minimize:`Kleines Fenster`,drawer_panel:`Seitenleiste`,delete_all_conversations:`Alle Unterhaltungen löschen`,delete_all_confirm:`Das entfernt jede Unterhaltung deines Kontos. Fortfahren?`,empty_title:`Frag deine Kameras`,empty_hint:`Was heute passiert ist, wer an der Tür war, ob alle Kameras online sind. Änderungen bestätigst du, bevor sie laufen.`,composer_placeholder:`Frag etwas…`,disclaimer:`Antworten stammen von einem Sprachmodell und können falsch sein. Im Zweifel die Aufnahme prüfen.`,thinking:`Denkt nach`,working:`Arbeitet`,tool_arguments:`Argumente`,tool_result:`Ergebnis`,tool_running:`läuft`,tool_waiting_approval:`wartet auf deine Bestätigung`,tool_rejected:`abgelehnt`,tool_failed:`fehlgeschlagen`,tool_unfinished:`nicht abgeschlossen`,approval_title:`„{tool}“ erlauben?`,approval_hint:`Der Assistent möchte etwas ändern. Details prüfen, dann bestätigen oder ablehnen.`,approval_edit:`Bearbeiten`,approval_edit_hint:`Werte ändern, mit denen das Werkzeug läuft, dann erlauben.`,approval_invalid_json:`Das ist kein gültiges JSON.`,approve:`Erlauben`,reject:`Ablehnen`,stop:`Stopp`,greeting_morning:`Guten Morgen.`,greeting_day:`Guten Tag.`,greeting_evening:`Guten Abend.`,greeting_night:`Noch wach.`,greeting_sub:`Was willst du über dein Zuhause wissen?`,search_placeholder:`Unterhaltungen durchsuchen`,no_matches:`Keine Unterhaltung passt zu dieser Suche.`,group_today:`Heute`,group_yesterday:`Gestern`,group_week:`Letzte 7 Tage`,group_month:`Letzte 30 Tage`,group_older:`Älter`,hide_sidebar:`Unterhaltungen ausblenden`,show_sidebar:`Unterhaltungen einblenden`,copy_answer:`Kopieren`,copied:`Kopiert`,hint_send:`senden`,hint_newline:`neue Zeile`,open_recording:`Aufnahme öffnen`,open_episode:`Episode öffnen`,open_camera:`Kamera öffnen`,reference_missing:`Diese Aufnahme ist nicht mehr verfügbar.`,disabled_title:`Der Assistent ist ausgeschaltet.`,unconfigured_title:`Der Assistent ist noch nicht eingerichtet.`,setup_hint_admin:`Ein Modell in den Einstellungen hinzufügen. Ein lokales Ollama braucht kein Konto.`,setup_hint_user:`Bitte einen Administrator, ihn einzurichten.`,open_settings:`Einstellungen öffnen`,suggestion_today:`Was ist heute zu Hause passiert?`,suggestion_offline:`Sind alle Kameras online?`,suggestion_sensors:`Welche Sensoren sind gerade aktiv?`,suggestion_tools:`Was kannst du?`,suggestion_week:`Zeig mir die Highlights dieser Woche, mit Bildern`,voice_start:`Sprechen statt tippen`,voice_stop:`Zuhören beenden`,voice_denied:`Diktieren ist nicht erlaubt. Prüfe die Berechtigungen für Mikrofon und Spracherkennung.`,voice_failed:`Diktieren fehlgeschlagen ({error})`,attach:`Bild, Audio oder Video anhängen`,attach_remove:`Entfernen`,attach_too_large:`Datei zu groß, erlaubt sind {max} MB`,attach_too_many:`Höchstens {max} Dateien pro Nachricht`,attach_unsupported:`Nur Bilder, Audio und Video`,attachment_audio:`Audiodatei`,attachment_video:`Videoclip`,usage_tokens:`{input} Eingabe, {output} Ausgabe`,usage_speed:`{n} T/s`,usage_cost:`ca. {cost}`,usage_details:`Modell {model}. {turns} Modellrunden, {tools} Werkzeugaufrufe, {cached} Tokens aus dem Cache, {reasoning} Denk-Tokens. Die Kosten sind eine Schätzung nach öffentlichen Listenpreisen.`,regenerate:`Neu erzeugen`,edit_message:`Bearbeiten`,edit_send:`Senden`,delete_exchange:`Frage und Antwort löschen`,branch_here:`Ab hier abzweigen`,branch_unsaved:`Dieses Gespräch ist noch nicht gespeichert, schick zuerst eine Nachricht.`,continue_answer:`Weiter`,answer_stopped:`Antwort abgebrochen.`,steps:`{n} Schritte`,tools_title:`Gesprächseinstellungen`,tools_count:`{n} Werkzeuge`,tools_label:`Werkzeuge`,tools_selected:`{n} Gruppen`,tools_none:`Keine Werkzeuge`,tool_group_core:`camera.ui`,tool_group_terminal:`Shell-Befehle`,tool_group_docs:`Dokumentation`,instructions_label:`Anweisungen`,instructions_placeholder:`In einem Satz antworten, nur die Gartenkamera betrachten.`,profiles_label:`Profil`,profile_none:`Kein Profil`,profile_save:`Als Profil speichern`,profile_update:`Profil aktualisieren`,profile_delete:`Profil löschen`,profile_name_placeholder:`Profilname`,profile_name_label:`Name`,profile_save_hint:`Speichert Modell, Werkzeuge und Anweisungen dieses Gesprächs.`,question_answer:`Antworten`,question_skip:`Überspringen`,question_from:`Von`,question_to:`Bis`,question_placeholder:`Oder eine Antwort eintippen`,queued_attachment:`Nachricht mit Anhang`,queue_cancel:`Aus der Warteschlange nehmen`,scroll_to_latest:`Zum Ende springen`,paused_elsewhere:`Dieses Gespräch wartet in einem anderen Fenster oder auf einem anderen Gerät auf eine Entscheidung.`,thread_reloaded:`Dieses Gespräch ging auf einem anderen Gerät weiter und zeigt jetzt den aktuellen Stand.`,thread_load_failed:`Dieses Gespräch konnte nicht geladen werden. Öffne es erneut, um es noch einmal zu versuchen.`,failure_overloaded:`Der Anbieter ist gerade überlastet. Versuch es gleich nochmal.`,failure_rate_limit:`Zu viele Anfragen an den Anbieter. Versuch es in einer Minute nochmal.`,failure_billing:`Das Konto beim Anbieter hat kein Guthaben mehr.`,failure_auth:`Der Anbieter hat den API-Schlüssel abgelehnt. Prüfe ihn in den Assistent-Einstellungen.`,failure_model:`Der Anbieter bietet dieses Modell nicht an.`,failure_too_long:`Dieses Gespräch ist zu lang für das Modell. Starte ein neues.`,failure_provider:`Beim Anbieter ist ein Fehler aufgetreten. Versuch es nochmal.`,memory_title:`Was der Assistent über dich weiß`,memory_empty:`Noch nichts. Fakten, die du erwähnst oder ihn merken lässt, erscheinen hier.`,memory_forget:`Vergessen`,memory_forget_all:`Alles vergessen`},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.`},metrics:{analysis:`Erkennung`,bench_calls:`Aufrufe`,bench_cameras:`Kameras`,bench_cpu:`CPU`,bench_gpu:`GPU`,bench_memory:`Arbeitsspeicher`,bench_os:`System`,bench_version:`camera.ui`,bench_concurrency:`Unterwegs`,bench_effective_concurrency:`Im Plugin gleichzeitig`,bench_duration:`Dauer`,bench_handler:`Im Plugin, mit Warteschlange`,bench_host:`Läuft auf`,bench_host_server:`Server`,bench_input:`Modelleingabe`,bench_model:`Modell`,bench_runtime:`Runtime`,bench_per_camera:`Je Kamera`,bench_rate:`Erkennungen`,benchmark:`Benchmark`,benchmark_confirm:`Der Benchmark lastet den Detektor mit Testbildern aus und misst, wie viele Erkennungen pro Sekunde er schafft. Währenddessen pausiert die Erkennung für alle Kameras und läuft danach weiter.`,benchmark_result_title:`Benchmark-Ergebnis`,benchmark_start:`Benchmark starten`,benchmark_total:`Alle Kameras`,camera_storage:`Kameraspeicher`,cameras:`Kameras`,chart_free:`Frei`,chart_nvr:`NVR`,chart_other:`Andere`,col_active:`Aktiv`,col_analysed:`Analysiert`,col_classifier:`Klassifizierer`,col_object:`Objekt`,col_camera:`Kamera`,col_clip:`CLIP`,col_days:`Tage`,col_decode:`Decode`,col_detections:`Erkennungen`,col_face:`Gesicht`,col_face_embed:`Erkennung`,col_person_embed:`Re-ID`,col_mode:`Modus`,col_motion:`Bewegung`,col_plate:`Kennzeichen`,col_processing:`Verarbeitung`,col_rate:`Rate`,col_size:`Größe`,col_transport:`Transport`,col_cross_host:`Netzwerk`,col_zoom:`Zoom`,col_bitrate_in:`Eingang`,col_bitrate_out:`Ausgang`,col_connections:`Verbindungen`,col_drops:`Verworfen`,col_source:`Quelle`,copied:`Kopiert`,copy:`Kopieren`,core:`Core`,days_count:`{count} Tage`,deselect_all:`Alle abwählen`,disk_critical:`Kritisch: Der Speicherplatz geht zur Neige. Die Aufnahme wurde pausiert, um Datenverlust zu vermeiden.`,disk_free:`Freier Speicher`,disk_small_volume:`Das Speichervolumen ist klein. Aufnahmen werden häufig rotiert, um Platz freizuhalten.`,disk_total:`Gesamtspeicher`,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.`,general:`Allgemein`,info_active:`Anteil der Zeit, in der diese Kamera überhaupt analysiert hat. Eine Frame-Schleife läuft bei 100%, eine Kamera mit eigener Bewegungsmeldung nur während Events.`,info_analysed:`Analysierte Bilder pro Sekunde: Analyse-Stream, dann hochauflösender Stream.`,info_decode:`Zeit für ein Bild: Analyse-Stream, dann hochauflösender Stream.`,info_detections:`Gefundene Objekte pro analysiertem Bild.`,info_object:`Zeit, die der Objekt-Detektor für ein Bild braucht, eigene Vor- und Nachverarbeitung plus Modell.`,info_motion:`Zeit, die ein bildbasiertes Bewegungs-Plugin pro Bild braucht. Bleibt -, wenn die Kamera Bewegung selbst meldet.`,info_processing:`Skalieren auf die Modellgröße und das Zurückrechnen der Boxen. Ohne Objekt-Detektor die Skalierung für Bewegung.`,info_secondary:`Zeit pro Erkennung für den zusätzlichen Schritt. Läuft nur, wenn ein Objekt gefunden wurde.`,info_face_embed:`Zeit pro Gesicht, um daraus einen Vektor zu machen. Läuft einmal je Person und nur bei Gesichtern, die groß genug sind.`,info_person_embed:`Zeit pro Person, um aus ihrem Aussehen einen Vektor zu machen. Läuft höchstens dreimal je Person.`,info_transport:`Zeit, die Bild und Ergebnis auf dem Weg zum Plugin und zurück brauchen.`,info_cross_host:`Bitrate der Bilder, die über das Netzwerk an Erkennungs-Plugins auf einer anderen Maschine gehen.`,info_zoom:`Anteil der Objekterkennungen, die auf gezoomte Bewegungsfenster statt aufs ganze Bild geschaut haben.`,info_bitrate_in:`Was die Kamera sendet.`,info_bitrate_out:`Was alle Verbindungen dieser Quelle zusammen empfangen.`,info_connections:`Alle Verbindungen zu dieser Quelle, auch interne wie Preload und Analyse.`,info_drops:`Pakete, die eine langsame Verbindung nicht rechtzeitig abgenommen hat.`,inference:`Inferenz`,no_cameras:`Keine Kameras verfügbar`,no_core:`Keine Core-Prozesse verfügbar`,no_plugins:`Keine Plugins verfügbar`,no_system:`Keine Systemdaten verfügbar`,nvr_usage:`NVR-Nutzung`,performance:`Performance`,plugins:`Plugins`,quota:`Kontingent`,reset:`Zurücksetzen`,reset_confirm:`Setzt alle gemessenen Werte zurück und beginnt von vorn. Sinnvoll nach einem Modellwechsel.`,retention:`Aufbewahrung`,select_all:`Alle auswählen`,show_inference:`Inferenz anzeigen`,show_performance:`Leistung anzeigen`,show_processes:`Prozesse anzeigen`,show_streams:`Streams anzeigen`,status_recording:`Aufnahme`,status_stopped:`Gestoppt`,storage_not_available:`Nicht verfügbar`,storage_overview:`Speicherübersicht`,storage_unreachable:`Die Aufnahme ist pausiert, der Speicherpfad ist nicht erreichbar. Schließe die Platte an oder wähle einen anderen Speicherpfad.`,tab_cameras:`Kameras`,tab_overview:`Übersicht`,tab_storage:`Speicher`,tip_analysis_stream:`Analyse-Stream`,tip_hit_rate:`Bilder mit Treffer`,tip_main:`Hochauflösender Stream`,tip_no_plugin:`Kein Plugin dafür`,tip_round_trip:`Rundreise, das Plugin meldet keine eigene Zeit`,tip_post:`Boxen und Zonen`,tip_scale:`Skalierung`,tip_motion_scale:`Skalierung Bewegung`,tip_worker:`Läuft auf Worker {name}`,tip_zoom_windows:`Fenster pro gezoomtem Bild`,title:`Metrics`,unlimited:`Unbegrenzt`},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`,find:`Suche`,recordings:`Aufnahmen`,shares:`Freigaben`,timeline:`Zeitleiste`,title:`Kamera`},cameras:{add_camera:`Kamera hinzufügen`,all_hidden:`Alle Kameras sind ausgeblendet. Bearbeiten Sie das Layout, um sie wieder anzuzeigen.`,events:`Ereignisse`,get_started:`Jetzt starten`,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`,card_fit:`Bild in der Karte`,card_fit_aspect:`Seitenverhältnis behalten`,card_fit_aspect_info:`Schwarze Balken, wenn die Karte anders geformt ist`,card_fit_contain:`Einpassen`,card_fit_contain_info:`Ganzes Bild in der Karte, schwarze Balken wo nötig`,card_fit_cover:`Zuschneiden`,card_fit_cover_info:`Füllt die Karte, schneidet die Ränder ab`,card_fit_fill:`Verzerren`,card_fit_fill_info:`Füllt die Karte, verzerrt das Bild`,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.`,adopted_title:`Übernommene Sensoren`,discovered_title:`Entdeckt`,status_discovered:`Entdeckt`,scanning:`Scanne...`,no_discovered:`Noch keine Sensoren entdeckt`,rescan:`Neu scannen`,adopt_title:`Sensor hinzufügen`,adopt_confirm:`"{name}" aus {plugin} hinzufügen? Er erscheint in der Sensorliste und kann Kameras zugewiesen werden.`,adopted:`"{name}" hinzugefügt.`,no_matches:`Keine Sensoren passen zur Suche oder zum aktiven Filter.`,name:`Name`,native_id:`ID`,type:`Typ`,plugin:`Plugin`,connected:`Verbunden`,disconnected:`Nicht verbunden`,state_unavailable:`Nicht verfügbar`,state_removed:`In {plugin} entfernt`,select:`Sensoren auswählen`,select_discovered:`Entdeckte Sensoren auswählen`,adopt_selected:`Auswahl hinzufügen`,adopt_selected_confirm:`{count} Sensoren hinzufügen? Sie erscheinen in der Sensorliste und können Kameras zugewiesen werden.`,adopt_selected_done:`{count} Sensoren hinzugefügt`,delete_selected:`Auswahl löschen`,delete_selected_confirm:`{count} Sensoren löschen? Verbundene Kamera-Sensoren werden übersprungen.`,delete_selected_done:`{count} Sensoren gelöscht`,bulk_failed:`{count} Sensoren fehlgeschlagen`,settings:`Sensor-Einstellungen`,hide_all_camera_bound:`Kamera-Sensoren ausblenden`,hide_all_camera_bound_hint:`Sensoren, die ein Plugin an einer Kamera registriert hat, nicht in der Liste zeigen.`,only_enabled_camera_bound:`Nur aktive Kamera-Sensoren zeigen`,only_enabled_camera_bound_hint:`Kamera-Sensoren ausblenden, deren Plugin auf der Kamera nicht in der passenden Kategorie aktiviert ist.`,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_camera_bound:`Kamera-Sensoren können nicht gelöscht werden, solange sie verbunden sind.`,delete_confirm:`Der Sensor und seine Zuweisungen werden entfernt. Bietet das Plugin ihn weiter an, erscheint er wieder als entdeckt.`,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?`,delete_selected_failed:`{count} Automatisierung(en) konnten nicht gelöscht werden`,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`,from_server:`Von anderem Server`,new_installation:`Neue Installation`,slogan:`Die moderne Lösung für professionelle Videoüberwachung.`,start:`Start`,start_message:`Starten Sie eine neue Installation, stellen Sie ein Backup wieder her oder übernehmen Sie einen anderen camera.ui Server.`,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`,face_recognition_tab_tooltip:`Gesichts-Zuordnung`,person_embedding_tab_tooltip:`Personen-Wiedererkennung`,segmentation_tab_tooltip:`Segmentierung`,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})`,updates_run_active:`Ein Update-Lauf läuft. Plugins bleiben bis zum Ende gestoppt und starten danach von selbst.`,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_actions:`Aktionen`,home_assistant:`Home Assistant Menü`},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.`,unavailable:`Gesichter nicht verfügbar, das NVR-Plugin läuft nicht.`,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`,few_pictures_hint:`Mindestens {count} Bilder empfohlen. Mit weniger wird diese Person oft nicht erkannt.`,marks_hint:`Markierte Bilder können die Erkennung verschlechtern. Tippen Sie auf eine Markierung, um den Grund zu sehen.`,card_marked:`{count} Bild kann die Erkennung verschlechtern | {count} Bilder können die Erkennung verschlechtern`,to_check:`{count} zu prüfen`,mark_filed_under:`Auch bei {names} hinterlegt, nur bei einer Person behalten`,mark_unclear:`Kein klares Gesicht, besser entfernen`,mark_unlike:`Die Erkennung kann es den anderen Bildern nicht zuordnen und nutzt es nicht`,mark_partly_visible:`Gesicht nur teilweise sichtbar, nur behalten, wenn bessere Bilder fehlen`,mark_same_as:`Doppelt vorhanden, ein Bild reicht`,assign_filed_under:`Schon bei {names} hinterlegt. | Schon bei {names} hinterlegt: {affected} von {total} Gesichtern.`,assign_partly_visible:`Dieses Gesicht ist nur teilweise sichtbar. | Nur teilweise sichtbar: {affected} von {total} Gesichtern.`,delete_person:`Person löschen`,name:`Name`,enter_name:`Name eingeben`,enter_or_pick_name:`Name wählen oder 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`,reindex:{title:`Gesichter neu einbetten`,button:`Gesichter neu einbetten`,start:`Starten`,stop:`Stoppen`,intro:`Bettet die hinterlegten Bilder für das aktuelle Erkennungsmodell neu ein. Bilder, die schon einen Vektor haben, werden übersprungen.`,up_to_date:`Alle hinterlegten Bilder sind aktuell. Es musste nichts eingebettet werden.`,running_intro:`Die hinterlegten Bilder werden eingebettet. Bis das durch ist, erkennt camera.ui nicht alles.`,checking:`Hinterlegte Bilder werden geprüft…`,progress:`{done}/{total} eingebettet`,result:`{done} von {total} Bildern eingebettet.`,skipped_pictures:`Auf einzelnen Bildern von {names} findet das Modell kein Gesicht, die wurden entfernt. Über ihre anderen Bilder werden sie weiter erkannt.`,unusable:`Kein brauchbares Bild für {names}. Leg ein näheres nach, sonst bleiben sie unerkannt.`},rescan_complete:`{count} Gesicht(er) in bestehenden Events aktualisiert`,rescan_no_matches:`Keine neuen Übereinstimmungen gefunden`,ignore:`Ignorieren`,ignore_cluster:`Gruppe ignorieren`,ungrouped_hint:`Sichtungen, die noch zu keiner Gruppe passen.`,ignored_faces:`Ignorierte Gesichter`,ignored_hint:`Diese Gesichter werden nicht mehr gesammelt. Zum Anzeigen wiederherstellen.`,restore:`Wiederherstellen`,face_ignored:`Gesicht wird ignoriert`,face_restored:`Gesicht wiederhergestellt`},training:{title:`Training`,no_candidates:`Noch keine Trainingskandidaten. Frames mit Erkennungen sammeln sich hier, sobald Events passieren.`,no_matches:`Keine Kandidaten passen zur Suche oder zum aktiven Filter.`,all_cameras:`Alle Kameras`,search:`Nach Kamera suchen…`,status_all:`Alle`,status_new:`Neu`,status_verified:`Bestätigt`,boxes:`Boxen`,candidate_verified:`Kandidat bestätigt`,candidate_ignored:`Kandidat ignoriert`,candidate_deleted:`Kandidat gelöscht`,delete_candidate:`Kandidat löschen`,select:`Kandidaten auswählen`,select_all:`Alle auswählen`,deselect_all:`Auswahl aufheben`,delete_selected:`Ausgewählte Kandidaten löschen`,delete_selected_confirm:`{count} Kandidaten löschen?`,delete_selected_done:`{count} Kandidaten gelöscht`,submit:`Einreichen`,submit_selected:`Auswahl in den Community-Pool einreichen`,submit_ready:`{count} bestätigten Frame einreichen | {count} bestätigte Frames einreichen`,submit_disabled:`Erst Bilder bestätigen`,verify_hint:`Bild öffnen, Boxen korrigieren und bestätigen. Bestätigte Bilder lassen sich danach unten rechts einreichen.`,upload_progress:`Lade {done} von {total} hoch…`,upload_failed_summary:`{count} fehlgeschlagen`,upload_queued:`Wartet`,upload_uploading:`Lädt hoch`,upload_failed:`Upload fehlgeschlagen`,submit_confirm:`{count} bestätigte Frames in den Community-Trainingspool einreichen? Bilder und Boxen sind deinem cameraui.com-Konto zugeordnet und können jederzeit wieder gelöscht werden.`,submit_done:`{count} Frame eingereicht | {count} Frames eingereicht`,submissions:`Meine Beiträge`,collection:`Sammlung`,collection_enabled:`Kandidaten sammeln`,collection_hint:`Frames mit Erkennungen für die Annotation speichern.`,per_camera_limit:`Frames pro Kamera`},recordings:{title:`Aufnahmen`,reindex:{title:`Suche neu indexieren`,button:`Suche neu indexieren`,start:`Starten`,stop:`Anhalten`,intro:`Baut den Suchindex für Ereignisse neu auf, deren Embeddings von einem älteren Erkennungsmodell stammen. Bereits aktuelle Ereignisse werden übersprungen.`,up_to_date:`Der Suchindex ist aktuell. Es musste nichts neu indexiert werden.`,running_intro:`Die Ereignisse werden neu indexiert. Die Suche funktioniert währenddessen weiter.`,checking:`Prüfe den Suchindex…`,progress:`{done}/{total} indexiert`,skipped:`{count} fehlgeschlagen`,result:`{done} von {total} Ereignissen neu indexiert.`,result_failed:`{done} von {total} Ereignissen neu indexiert, {skipped} fehlgeschlagen.`},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`,open_trace:`Erkennungsverlauf anzeigen`,ask_assistant:`Assistenten fragen`,ask_assistant_prompt:`Was ist in der Aufnahme von {camera} um {time} passiert? Ereignis-ID {id}. Zeig mir das Bild und sag mir, was du siehst.`,trace:{empty:`Für dieses Ereignis ist kein Verlauf gespeichert.`,unavailable:`Der Verlauf konnte nicht geladen werden.`,summary:`{loaded} von {total} Bildern geladen`,jump_to_time:`Zu einer Uhrzeit springen`,earlier:`Frühere Bilder`,loading_frames:`Bilder werden aus der Aufnahme geladen…`,bundle_hint:`Paket herunterladen`,bundle_failed:`Das Support-Paket konnte nicht erstellt werden`,playback:`Ereignis abspielen`,show_frame:`Zurück zum Bild`,play:`Abspielen`,pause:`Pause`,playback_failed:`Die Wiedergabe ist fehlgeschlagen.`,objects:`Objekte`,attributes:`Attribute`,motion_boxes:`Bewegungsboxen`,raw_detections:`Rohdetektionen`,camera_report:`Kamera-Meldung`,hint_witness:`{label} #{id} · bestätigt durch die Meldung der Kamera`,world_events:`Tracker-Ereignisse`,detector_idle:`Detektor lief nicht`,info:`Info`,scope_frame:`Bild`,scope_event:`Ereignis`,hint_below_threshold:`{label} · unter Schwelle {min}`,hint_plate_unsure:`{label} · gelesen mit {value}, nötig {min}`,hint_plate_short:`{label} · kürzer als {min} Zeichen`,hint_read_held:`{face} · als {name} gelesen, {votes} von {reads} Lesungen stimmen überein, noch kein Name`,hint_read_missed:`{face} · kein Treffer, {seen}`,hint_in_privacy:`{label} · in Privatzone`,hint_outside_zones:`{label} · außerhalb der Objektzonen`,hint_label_not_in_zone:`{label} · in {zones} nicht freigegeben`,hint_not_confirmed:`{label} · noch nicht bestätigt`,hint_tentative:`{label} #{id} · vorläufig, noch kein Segment`,hint_notifications_off:`Benachrichtigungen aus`,hint_motion_only:`nur Bewegung, keine Benachrichtigung`,hint_outside_alert_zones:`{labels} · außerhalb der Alarmzonen`,state_tentative:`vorläufig`,state_active:`aktiv`,state_stationary:`stehend`,state_lost:`verloren`,state_departed:`gegangen`,state_external:`Kamera-KI`,zones:`Zonen zum Zeitpunkt des Ereignisses`,motion_label:`Bewegung`,raw_label:`roh`,dropped_label:`verworfen`,face_reads:`Gelesene Gesichter`,read_no_match:`kein Treffer`,read_closest:`am nächsten {name} {score}`,read_between:`{name} {score} oder {runnerUp} {runnerUpScore}, zu nah beieinander`,read_votes:`{name} {votes} von {reads}`,read_named:`benannt: {name}`,read_single:`Kamera-KI, entscheidet allein`,last_sure:`zuletzt sicher {value}`,no_recording:`Keine Aufnahme deckt dieses Ereignis ab. Es werden nur die Erkennungsdaten gezeigt.`,unsupported:`Dieser Browser kann die Aufnahme nicht dekodieren. Es werden nur die Erkennungsdaten gezeigt.`,codec_fallback:`Dieser Browser kann den Hauptstream nicht dekodieren. Die Bilder kommen aus dem kleineren Stream und sind nach Zeit zugeordnet, nicht exakt.`,codec_fallback_short:`Bilder aus dem kleineren Stream, nach Zeit zugeordnet`,missing:`Kein Bild in der Aufnahme`,status_pending:`lädt`,status_exact:`exakt`,status_approx:`ungefähr`,status_missing:`kein Bild`},episode_trace:{title:`Episode`,open:`Episoden-Verlauf anzeigen`,empty:`Für diese Episode ist kein Verlauf gespeichert.`,unavailable:`Der Verlauf konnte nicht geladen werden.`,images_summary:`{count} Bilder für das Modell`,no_images:`Es wurden keine Bilder an das Modell gesendet.`,members:`Kandidaten`,links:`Verbindungen`,curation:`Kuration`,story:`Story`,cut:`Schnitt`,place:`Grundstück`,dropped_still:`nie bewegt`,dropped_prefilter:`kein gemeinsames Objekt`,dropped_unconnected:`nicht verbunden`,dropped_other_visit:`andere Episode`,dropped_curation:`von der Kuration verworfen`,pruned:`{count} Segmente entfernt`,coherent:`zusammenhängend`,not_coherent:`nicht zusammenhängend`,call_failed:`Aufruf fehlgeschlagen, alle Mitglieder behalten`,reused:`Story von der vorherigen Episode übernommen`,kept:`Behalten`,evidence:`Begründung`,instructions:`Deine Anweisungen`,observations:`Beobachtungen`,response:`Antwort`,attempts:`{count} Versuche`,second_angle:`Zweiter Winkel, nicht im Schnitt`,bundle_hint:`Paket herunterladen`,bundle_failed:`Das Support-Paket konnte nicht erstellt werden`},second_angle:`Zweiter Winkel`,no_preview:`Keine Vorschau`,prev_image:`Vorheriges Bild`,next_image:`Nächstes Bild`,filter_and:`UND`,filter_or:`ODER`,semantic_search:`KI-Suche`,semantic_search_placeholder:`Beschreiben Sie, was Sie suchen...`,assistant_search:`Assistent fragen`,assistant_search_placeholder:`z. B. Personen an der Haustür diese Woche`,assistant_search_button:`Suchen`,assistant_search_failed:`Der Assistent konnte die Suche nicht lesen`,image_search:`Suche per Bild`,image_search_drop:`Bild einer Person oder eines Fahrzeugs hier ablegen oder auswählen`,image_drop_overlay:`Bild ablegen, um die Person oder das Fahrzeug darin zu 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`,rooms:`Räume`,all_rooms:`Alle Räume`,only_with_recordings:`Nur mit Aufnahme`,favorites_only:`Nur Favoriten`,favorites_hint:`Favoriten werden nie automatisch gelöscht`,reassign_face:`Person korrigieren`,reassign_unknown:`Als unbekannt markieren`,reassign_done:`Person aktualisiert`,reassign_current:`Erkannt als`,reassign_new:`Richtige Person`,reassign_unknown_person:`Unbekannt`,reassign_unclear:`Kein klares Gesicht. Nur der Name ändert sich, das Bild wird nicht für die Erkennung verwendet.`,more_actions:`Weitere Aktionen`,favorite:`Zu Favoriten hinzufügen`,unfavorite:`Aus Favoriten entfernen`,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_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`,content_kind:`Anzeigen`,content_kind_all:`Alle`,content_kind_events:`Ereignisse`,content_kind_episodes:`Episoden`,content_kind_episodes_hint:`Für Episoden gelten nur Kamera, Zeitraum und die Ansichtsoptionen.`,confidence:`Konfidenz`,date:`Datum`,download:`Aufnahme herunterladen`,no_recordings:`Keine Aufnahmen gefunden`,load_failed:`Die Aufnahmen konnten nicht geladen werden.`,load_failed_retry:`Erneut versuchen`,recordings_unavailable:`Aufnahmen nicht verfügbar, das NVR-Plugin läuft nicht.`,select:`Ereignisse auswählen`,delete_selected_confirm:`{count} ausgewählte(s) Ereignis(se) löschen? Aufgenommenes Video bleibt bis zur normalen Bereinigung auf der Festplatte.`,delete_selected_done:`{count} Ereignis(se) gelöscht`,delete_event:`Ereignis löschen`,delete_event_confirm:`Dieses Ereignis löschen? Das Video bleibt bis zur normalen Bereinigung auf der Festplatte.`,delete_event_done:`Ereignis gelöscht`,delete_recording:`Aufnahme löschen`,delete_recording_confirm:`Dieses Ereignis und sein Video löschen? Gelöscht wird minutenweise, das lässt sich nicht rückgängig machen. Andere Ereignisse in diesen Minuten werden ebenfalls gelöscht.`,delete_recording_done:`Aufnahme gelöscht`,delete_recording_too_recent:`Das Video wird noch geschrieben. Versuch es in ein paar Minuten nochmal.`,no_semantic_results:`Keine passenden Aufnahmen für Ihre Suche gefunden`,ungroup:`Aufteilen`,ungroup_hint:`Eine Karte pro Moment statt pro Ereignis`,only_with_recordings_hint:`Blendet Ereignisse und Episoden ohne gespeicherte Aufnahme aus`,view_options:`Ansichtsoptionen`,result_count_recordings:`{count} Aufnahmen`,result_count_recordings_of:`{count} von {total} Aufnahmen`,result_count_episodes:`{count} Episoden`,result_count_episodes_of:`{count} von {total} Episoden`,semantic_results:`{count} KI-Treffer`,events_count:`{count} Ereignisse`,similar_searching:`Suche läuft`,similar_failed:`Suche fehlgeschlagen`,similar_face:`Momente mit {name}`,similar_unknown_face:`Momente mit diesem Gesicht`,similar_person:`Ähnliche Personen`,similar_plate:`Momente mit dem Kennzeichen {plate}`,similar_appearance:`Ähnliche Fahrzeuge`,similar_several:`Treffer für {count} Objekte`,similar_count:`Keine Treffer | 1 Treffer | {count} Treffer`,similar_best_first:`beste zuerst`,similar_surest_first:`sicherste zuerst`,similar_license:`Die Suche braucht eine aktive NVR-Lizenz`,similar_empty:`Keine weiteren Momente gefunden`,similar_clear:`Suche beenden`,vehicles:`Fahrzeuge`,vehicle_filter_hint:`Farbe und Typ werden aus dem Bild gelesen und können falsch sein.`,vehicle_filter_license:`Der Filter nach Farbe oder Fahrzeugtyp braucht eine aktive NVR-Lizenz.`,vehicle_color_white:`Weiß`,vehicle_color_gray:`Grau`,vehicle_color_yellow:`Gelb`,vehicle_color_red:`Rot`,vehicle_color_green:`Grün`,vehicle_color_blue:`Blau`,vehicle_color_black:`Schwarz`,vehicle_type_car:`Auto`,vehicle_type_van:`Transporter`,vehicle_type_truck:`Lkw`,vehicle_type_bus:`Bus`,vehicle_type_motorcycle:`Motorrad`,vehicle_type_bicycle:`Fahrrad`},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`,restore_running:`Ein Backup wird gerade wiederhergestellt. Melden Sie sich danach an.`,restore_done:`Backup wiederhergestellt. Melden Sie sich mit einem Konto aus dem Backup an.`},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.`,custom_certificate:`Eigenes Zertifikat`,custom_certificate_info:`Liefert dein eigenes Zertifikat für die Namen aus, die es abdeckt. Für alles andere bleibt camera.ui bei seinem eigenen, das die Apps und Worker prüfen. Erneuerungen greifen automatisch, sobald die Dateien auf der Platte ersetzt werden.`,certificate_restart_title:`Streaming-Dienst neu starten?`,certificate_restart_info:`camera.ui liefert das neue Zertifikat sofort aus. Der Streaming-Dienst hält eine eigene Kopie und übernimmt sie erst beim Neustart, der laufende Streams kurz unterbricht.`,certificate_restart_done:`Streaming-Dienst neu gestartet`,certificate_upload_title:`Zertifikat hochladen`,certificate_upload_info:`Zertifikat und Schlüssel sind Pflicht. Die Kette brauchst du nur, wenn dein Aussteller sie getrennt vom Zertifikat liefert.`,certificate_file_hint:`fullchain.pem oder dein .crt`,certificate_key_file_hint:`privkey.pem oder dein .key`,certificate_chain_file_hint:`chain.pem oder ca-bundle.crt`,certificate_chain_hint:`Optional, mit certbot bleibt das leer.`,certificate_missing_files:`Zertifikat und Schlüssel werden benötigt.`,certificate_file_too_large:`Diese Datei ist zu groß für ein Zertifikat.`,certificate_remove_title:`Zertifikat entfernen?`,certificate_remove_confirm:`camera.ui liefert dann für jeden Namen wieder sein eigenes aus. Wer den Server über die Domain aufruft, bekommt bis zum nächsten Upload eine Warnung.`,certificate_names:`Gilt für`,certificate_issuer:`Ausgestellt von`,certificate_valid_to:`Gültig bis`,certificate_none:`Kein eigenes Zertifikat hinterlegt.`,certificate_file:`Zertifikat (fullchain.pem)`,certificate_key_file:`Privater Schlüssel (privkey.pem)`,certificate_chain_file:`Kette (nur wenn dein Aussteller sie getrennt liefert)`,certificate_chain_missing:`Diese Datei enthält nur ein Zertifikat. Von einem öffentlichen Aussteller heißt das, die Zwischenzertifikate fehlen und Handys lehnen es ab, dann nimm fullchain.pem. Bei einer lokalen oder Firmen-CA, die direkt signiert, ist das normal.`,certificate_stored:`Zertifikat gespeichert und aktiv`,certificate_removed:`Zertifikat entfernt, es gilt wieder das eigene`,certificate_problem_key_mismatch:`Der Schlüssel gehört nicht zu diesem Zertifikat.`,certificate_problem_expired:`Dieses Zertifikat ist abgelaufen.`,certificate_problem_not_yet_valid:`Dieses Zertifikat ist noch nicht gültig.`,certificate_problem_no_key:`Der Schlüssel konnte nicht gelesen werden. Bei einem verschlüsselten Schlüssel muss die Passphrase entfernt werden.`,certificate_problem_no_certificate:`Diese Datei enthält kein Zertifikat.`,certificate_problem_unreadable:`Dieses Zertifikat konnte nicht gelesen werden.`,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 ist mit dem Backup-Schlüssel dieses Servers verschlüsselt und 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.`,backup_job_snapshot:`Datenbanken werden kopiert...`,backup_job_packing:`Backup wird gepackt...`,backup_job_lost:`Das Backup wurde abgebrochen, weil der Server neu gestartet ist.`,backup_last:`Letztes Backup`,backup_last_never:`noch keins`,backup_key:`Backup-Schlüssel`,backup_key_info:`Heruntergeladene und geplante Backups sind mit diesem Schlüssel verschlüsselt. Ein Restore auf diesem Server öffnet sie von selbst, ein anderer Server fragt nach dem Schlüssel. Ohne den Schlüssel kann niemand die Backups öffnen.`,backup_key_save:`Schlüsseldatei speichern`,backup_key_saved:`Gespeichert am {date}.`,backup_key_not_saved:`Bewahren Sie den Schlüssel außerhalb dieses Servers auf, zum Beispiel in einem Passwortmanager.`,backup_key_dialog_title:`Backup-Schlüssel aufbewahren`,backup_key_dialog_text:`Backups dieses Servers sind verschlüsselt. Geht dieser Server verloren, brauchen Sie diesen Schlüssel, um sie auf einem anderen zu öffnen. Speichern Sie ihn in einem Passwortmanager oder bewahren Sie die Schlüsseldatei auf.`,backup_key_dialog_confirm:`Schlüssel gespeichert`,backup_key_file:`Dieser Schlüssel öffnet die verschlüsselten Backups Ihres camera.ui Servers. Bewahren Sie ihn außerhalb des Servers auf.`,backup_encrypted:`verschlüsselt`,backup_foreign_key:`Schlüssel eines anderen Servers`,backup_saved_in:`Gespeichert in {path}`,backup_key_copied:`Kopiert`,edit:`Bearbeiten`,navigation:`Navigation`,debugging:`Debugging`,interface:`Interface`,invalid_domain:`Ungültige Domain`,locale:`Sprache`,network:`Netzwerk`,network_info:`Wie Apps und Browser diesen Server im Netzwerk erreichen. Die Adressen bestimmen auch, wo Kamera-Streams angeboten werden, die lokale Adresse nur, womit die Apps sprechen.`,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`,logged_in_users:`Derzeit angemeldete Benutzer`,no_sessions:`Keine angemeldeten 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`},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, die Aufnahmen auf diesem Server bleiben erhalten. Bevor sich etwas ändert, sehen Sie, was das Backup enthält.`,last_restore:`Letzte Wiederherstellung`,restore_waiting:`Ein Backup wartet auf Bestätigung.`,restore_running:`Eine Wiederherstellung läuft.`,restore_missing_plugins:`Fehlende Plugins aus dem Backup`,restore_previous:`Die Einrichtung von vor der letzten Wiederherstellung bleibt bis {date} erhalten.`,restore_from_server:`Oder holen Sie das Backup mit dem Umzugscode direkt von einem anderen camera.ui Server.`,move_server:`Diesen Server umziehen`,move_server_info:`Zieht diesen Server mit allen Einstellungen auf einen neuen um. Der neue Server holt alles von hier, danach stoppt dieser Server Kameras, Plugins und Worker.`,move_code_info:`Geben Sie diesen Code auf dem neuen Server ein, im Willkommensbildschirm oder unter Einstellungen, Backup.`,move_code_expires:`Gültig bis {time}.`,move_code_hidden:`Ein Umzugscode gilt bis {time}. Er wird nur einmal angezeigt, erstellen Sie bei Bedarf einen neuen.`,move_code_copied:`Kopiert`,move_taking_over:`Der neue Server unter {target} übernimmt. Kameras, Plugins und Worker sind hier gestoppt.`,move_done:`Dieser Server ist am {date} nach {target} umgezogen. Kameras, Plugins und Worker sind hier gestoppt.`,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_assistant:`Assistent`,title_appearance:`Erscheinungsbild`,title_backup:`Backup`,title_go2rtc:`Go2RTC`,title_notifications:`Benachrichtigungen`,title_settings:`Einstellungen`,section_personal:`Persönlich`,section_system:`System`,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_plugin_incompatible:`Plugin nicht mit dem Server kompatibel`,system_update_available:`Server-Update verfügbar`,system_app_update_available:`App-Update verfügbar`,system_worker_update_available:`Worker-Updates verfügbar`,system_cloud_reauth_required:`Cloud-Anmeldung erforderlich`,system_backup_failed:`Geplantes Backup fehlgeschlagen`,system_worker_offline:`Worker offline / wieder online`,system_remote_offline:`Fernzugriff ausgefallen / wieder da`,system_update_failed:`Update fehlgeschlagen`}},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).`,assistant_title:`Assistent`,assistant_state_ready:`Bereit`,assistant_state_unconfigured:`Nicht eingerichtet`,assistant_state_disabled:`Deaktiviert`,assistant_status_ready:`Modell {model}`,assistant_status_info:`Ein Modell hinzufügen, dann den Assistenten aktivieren.`,assistant_model:`Modelle`,assistant_enabled_info:`Nutzer können in der Ansicht Assistent mit dieser Instanz chatten.`,assistant_provider_label:`Anbieter`,assistant_provider_plugin:`{name} (Plugin)`,assistant_provider_hint:`Wo das Modell läuft: auf eigener Hardware, auf einem Server im Netzwerk, bei einem Cloud-Dienst mit Abrechnung pro Token oder in einem Plugin. Schlüssel werden verschlüsselt gespeichert.`,assistant_model_plugin_info:`Wähle eines der Modelle, die das Plugin anbietet.`,assistant_model_plugin_loading:`Das Plugin macht sein Modell noch bereit.`,assistant_model_plugin_none:`Dieses Plugin bietet gerade kein Modell an.`,assistant_model_context:`Kontext {tokens} Tokens.`,assistant_model_routing:`Werkzeuge vorab auswählen`,assistant_model_routing_info:`Für kleine Modelle. Eine kurze Zusatzanfrage wählt die Werkzeuge, die eine Frage braucht, damit das Modell nur diese wenigen sieht statt eines langen Katalogs. Kostet etwa eine Sekunde pro Frage, große Modelle brauchen das nicht.`,assistant_model_context_label:`Kontextfenster (Tokens)`,assistant_model_context_placeholder:`Aus der allgemeinen Einstellung`,assistant_model_context_info:`Wie viel dieses Modell fasst. Bei einem lokalen oder kleinen Modell eintragen, dann hält camera.ui Prompt, Werkzeuge und Verlauf in seinem Fenster. Leer nimmt das Kontextbudget aus den allgemeinen Einstellungen.`,assistant_base_url_label:`Server-URL`,assistant_api_key_label:`API-Schlüssel`,assistant_api_key_keep_hint:`Ein Schlüssel ist gespeichert. Leer lassen, um ihn zu behalten.`,assistant_api_key_optional:`Nur nötig, wenn der Server einen verlangt.`,assistant_model_label:`Modell`,assistant_model_placeholder:`Modellname eingeben oder Liste laden`,assistant_model_info:`Beim Speichern werden Werkzeuge und Bilder getestet.`,assistant_models_failed:`Modelle konnten nicht geladen werden: {message}`,assistant_models_info:`Das Standardmodell antwortet, wenn kein Profil und kein Gespräch ein anderes wählt.`,assistant_models_empty:`Noch keine Modelle.`,assistant_model_add:`Modell hinzufügen`,assistant_model_edit:`Modell bearbeiten`,assistant_model_delete:`Modell löschen`,assistant_model_delete_confirm:`{name} löschen? Profile und Plugins, die es nutzen, wechseln auf das Standardmodell.`,assistant_model_make_default:`Als Standard festlegen`,assistant_model_default:`Standard`,assistant_model_admins_only:`Nur Admins`,assistant_model_users:`Für Nutzer verfügbar`,assistant_model_users_info:`Wenn aus, nutzen nur Admins dieses Modell.`,assistant_model_name_label:`Name`,assistant_model_name_placeholder:`Wie das Modell`,assistant_api_key_new:`Neuer Schlüssel`,assistant_api_key_stored:`Gespeicherter Schlüssel`,assistant_api_key_from:`Schlüssel von {name}`,assistant_capability_tools:`Werkzeuge`,assistant_capability_no_tools:`Keine Werkzeuge`,assistant_capability_vision:`Bilder`,assistant_capability_no_vision:`Keine Bilder`,assistant_capability_untested:`Nicht getestet`,assistant_capability_failed:`Test fehlgeschlagen`,assistant_send_images_no_vision:`Das Modell hat den Bildtest nicht bestanden, das hat keine Wirkung.`,assistant_plugins:`Plugin-Zugriff`,assistant_plugins_info:`Plugins mit Zugriff nutzen das gewählte Modell über camera.ui. Der Schlüssel bleibt auf dem Server.`,assistant_plugins_empty:`Kein installiertes Plugin nutzt Modelle.`,assistant_plugin_no_access:`Kein Zugriff`,assistant_test_failed:`Test fehlgeschlagen: {message}`,assistant_test_tools_missing:`Das Modell hat das Testwerkzeug nicht aufgerufen. Ohne Werkzeuge kann der Assistent nur plaudern.`,assistant_test_tools_declared:`Dieses Modell kommt ohne Werkzeuge. Der Assistent kann damit nur plaudern.`,assistant_test_vision_missing:`Das Modell hat das Testbild abgelehnt. Es arbeitet ohne Bilder.`,assistant_behavior:`Verhalten`,assistant_memory:`Fakten über Nutzer merken`,assistant_memory_info:`Behält Fakten wie Namen und Vorlieben über Gespräche hinweg. Jeder Nutzer sieht und löscht seine Liste im Chat.`,assistant_terminal:`Shell-Befehle`,assistant_terminal_info:`Admins können den Assistenten Diagnosebefehle auf dem Host ausführen lassen. Jeder Befehl wartet auf ihre Freigabe.`,assistant_send_images:`Bilder an das Modell senden`,assistant_send_images_info:`Bei einem Cloud-Anbieter verlassen Schnappschüsse und Ereignisbilder diese Maschine.`,assistant_language_label:`Antwortsprache`,assistant_language_auto:`Wie die Oberfläche`,assistant_language_info:`Plugins nutzen sie auch, Englisch, wenn sie der Oberfläche folgt.`,assistant_reasoning_label:`Nachdenken`,assistant_reasoning_info:`Längeres Nachdenken kostet Tokens und Zeit. Nicht jedes Modell kennt jede Stufe.`,assistant_reasoning_default:`Modellstandard`,assistant_reasoning_off:`Aus`,assistant_reasoning_low:`Kurz`,assistant_reasoning_high:`Gründlich`,assistant_max_iterations_label:`Modellrunden pro Frage`,assistant_max_iterations_info:`Wie oft das Modell Werkzeuge aufrufen darf, bevor es antworten muss.`,assistant_max_tool_calls_label:`Werkzeugaufrufe pro Frage`,assistant_max_tool_calls_info:`Stoppt ein Modell, das in einer Schleife hängt.`,assistant_context_tokens_label:`Kontextbudget (Tokens)`,assistant_context_tokens_info:`Über dieser Größe fallen ältere Werkzeugergebnisse und Runden weg. Ollama bekommt ein Kontextfenster in dieser Größe plus Reserve, auf kleiner Hardware niedriger setzen. Ein Modell mit eigenem Kontextfenster nimmt seins.`,assistant_history_threads_label:`Gespräche pro Nutzer`,assistant_history_threads_info:`Die ältesten Gespräche fallen zuerst weg.`,assistant_history_images_label:`Bilder pro Gespräch`,assistant_history_images_info:`Die ältesten Bilder eines Gesprächs fallen zuerst weg.`,assistant_extra_prompt_label:`Zusätzliche Anweisungen`,assistant_extra_prompt_placeholder:`Die Kamera "Tor" zeigt auf die Straße, vorbeifahrende Autos ignorieren.`,assistant_extra_prompt_info:`Ergänzt die eingebauten Anweisungen, für Hausregeln und Kamera-Hinweise.`,assistant_tools:`Werkzeuge`,assistant_tools_empty:`Noch keine Werkzeuge registriert.`,assistant_tool_approval:`fragt nach`,assistant_tool_admin:`Admin`,assistant_tools_trusted_label:`Ohne Nachfrage ausführen`,assistant_tools_trusted_info:`Diese Werkzeuge laufen ohne Bestätigung, auch in geplanten Prompts.`,assistant_tools_trusted_none:`Keine`,assistant_tools_trusted_selected:`{n} Werkzeuge`,assistant_schedules:`Geplante Prompts`,assistant_schedules_info:`Prompts, die nach Zeitplan laufen und als Push, Gespräch oder beides ankommen. Werkzeuge mit Freigabe werden übersprungen.`,assistant_schedule_title_label:`Titel`,assistant_schedule_title_placeholder:`Tagesbericht`,assistant_schedule_prompt_label:`Prompt`,assistant_schedule_prompt_placeholder:`Was ist heute zu Hause passiert? Kurz und mit Kameranamen.`,assistant_schedule_when_label:`Wann`,assistant_schedule_time_label:`Uhrzeit`,assistant_schedule_cron_label:`Cron-Ausdruck`,assistant_schedule_profile_label:`Profil`,assistant_schedule_profile_none:`Kein Profil`,assistant_schedule_profile_missing:`Profil gelöscht`,assistant_schedule_model_label:`Modell`,assistant_schedule_model_default:`{name} (Standard)`,assistant_schedule_model_change:`Modell ändern`,assistant_schedule_model_hint:`Leer lassen, dann antwortet das Modell des Profils oder das Standardmodell.`,assistant_schedule_actions:`Aktionen`,assistant_schedule_deliver_label:`Zustellen als`,assistant_schedule_deliver_push:`Push`,assistant_schedule_deliver_thread:`Unterhaltung`,assistant_schedule_deliver_both:`Push und Unterhaltung`,assistant_schedule_preset_daily:`Jeden Tag`,assistant_schedule_preset_weekdays:`Wochentags`,assistant_schedule_preset_weekends:`Am Wochenende`,assistant_schedule_preset_weekly:`Jeden Sonntag`,assistant_schedule_preset_hourly:`Jede Stunde`,assistant_schedule_preset_custom:`Eigener Cron`,assistant_schedule_add:`Zeitplan anlegen`,assistant_schedule_run:`Jetzt ausführen`,assistant_schedule_delete:`Zeitplan löschen`,assistant_schedule_pause:`Pausieren`,assistant_schedule_resume:`Fortsetzen`,assistant_schedule_next:`Nächster Lauf {time}`,assistant_schedule_paused:`Pausiert`,assistant_schedule_last_success:`zuletzt {time}`,assistant_schedule_last_error:`fehlgeschlagen {time}`,assistant_text_alerts:`Textalarme`,assistant_text_alerts_info:`Der Assistent legt sie an, wenn du ihn bittest, auf etwas zu achten. Ein neues Ereignis, das passt, schickt einen Push mit dem Bild.`,assistant_text_alerts_empty:`Noch keine Textalarme. Frag den Assistenten, etwa „sag mir Bescheid, wenn ein Paket kommt“.`,assistant_text_alert_all_cameras:`Alle Kameras`,assistant_text_alert_until:`Bis {time}`,assistant_text_alert_delete:`Textalarm löschen`,assistant_text_alert_model_hint:`Prüft die Bilder vor dem Push. Leer lassen, dann prüft das Modell des NVR-Plugins aus Plugin-Zugriff.`,assistant_mcp:`MCP`,assistant_mcp_info:`MCP-Clients wie Claude Code oder Cursor nutzen diese Instanz mit ihrem eigenen Modell.`,assistant_mcp_enabled_label:`MCP-Endpunkt aktivieren`,assistant_mcp_enabled_info:`Braucht ein API-Token aus den Kontoeinstellungen.`,assistant_mcp_writes_label:`Änderungen erlauben`,assistant_mcp_writes_info:`Auch Werkzeuge anbieten, die etwas ändern.`,assistant_mcp_endpoint_label:`Endpunkt`,assistant_mcp_token_info:`Anmeldung mit einem API-Token als Bearer.`,assistant_mcp_token_link:`Unter Konto anlegen.`,assistant_mcp_client_label:`Einrichtung für`,assistant_mcp_snippet_info:`Ersetze <api token> durch dein Token. Die Werkzeuge folgen der Rolle des Token-Besitzers.`,assistant_usage:`Verbrauch`,assistant_usage_info:`Tokens und geschätzte Kosten pro Monat. Die Schätzung nutzt öffentliche Listenpreise.`,assistant_usage_empty:`Noch keine Läufe erfasst.`,assistant_usage_month:`Monat`,assistant_usage_user:`Nutzer`,assistant_usage_model:`Modell`,assistant_usage_runs:`Läufe`,assistant_usage_in:`Tokens rein`,assistant_usage_out:`Tokens raus`,assistant_usage_cost:`Kosten`,assistant_external:`Externe MCP-Server`,assistant_external_info:`Werkzeuge anderer Systeme mit MCP-Server nutzen, etwa Home Assistant. Bevor dort etwas geändert wird, fragt der Assistent nach.`,assistant_external_new:`Neuer Server`,assistant_external_add:`Server hinzufügen`,assistant_external_remove:`Server entfernen`,assistant_external_enabled_info:`Aus behält den Server, ohne sich zu verbinden.`,assistant_external_name:`Name`,assistant_external_url:`Server-URL`,assistant_external_token:`Zugangstoken`,assistant_external_token_info:`Wird als Bearer-Token gesendet, liegt verschlüsselt.`,assistant_external_token_set:`Ein Token ist gespeichert. Ein neues ersetzt es.`,assistant_external_state_connected:`verbunden, {n} Werkzeuge`,assistant_external_state_connecting:`verbindet`,assistant_external_state_error:`nicht erreichbar: {message}`,assistant_external_state_disabled:`aus`,assistant_external_insecure:`Selbstsigniertes Zertifikat akzeptieren`,assistant_external_insecure_info:`Überspringt die Zertifikatsprüfung. Nur für Server im eigenen Netzwerk.`,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.`,storage_unreachable:`Die Aufnahme ist pausiert, der Speicherpfad ist nicht erreichbar. Schließe die Platte an oder wähle einen anderen Speicherpfad.`,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.`,global_settings:`Einstellungen`,cloud_login_hint:`Nicht bei der camera.ui Cloud angemeldet. Über den grauen Cloud-Button darunter melden Sie sich an und registrieren diesen NVR mit Ihrem Account.`,group_info_license:`Ihr camera.ui Plan, die enthaltenen Aufnahme-Slots und welche Kameras gerade einen belegen. Die Werte kommen aus der Cloud und aktualisieren sich selbst.`,group_info_storage:`Wo Aufnahmen gespeichert werden, wie viel Speicherplatz sie belegen dürfen und wie lange sie aufbewahrt werden. Wird der Platz knapp, entscheidet der Aufbewahrungsmodus, ob alte Aufnahmen überschrieben werden oder die Aufnahme pausiert.`,group_info_faces:`Gesichtserkennung für bekannte Personen. Der Schwellwert bestimmt, wie streng ein Treffer sein muss, die Limits, wie viele Bilder fürs Training und wie viele Unbekannte behalten werden.`,group_info_genai:`Der KI-Anbieter, der die Ereignisbeschreibungen schreibt. Funktioniert mit Cloud-Anbietern oder einem lokalen Modell, die Verbindung lässt sich direkt hier testen.`,group_info_moments:`KI-Beschreibungen für die Momente eines Ereignisses. Sie ersetzen den einfachen Erkennungs-Push; die Verzögerung bestimmt, wie lange ein Ereignis ruhig bleiben muss, bevor die Zusammenfassung rausgeht.`,group_info_episodes:`Fasst zusammengehörige Sichtungen mehrerer Kameras zu einer Episode zusammen, mit einer Geschichte vom KI-Anbieter oder ohne ihn mit einem Titel. Die Zeiteinstellungen bestimmen, wann eine Episode endet.`,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.`},floorplan:{title:`Grundriss`,open_camera:`Kamera öffnen`,blind_spots:`Blinde Bereiche`,no_levels:`Noch keine Ebenen`,all_cameras_placed:`Alle Kameras sind platziert`,level:`Ebene`,add_level:`Ebene hinzufügen`,level_up:`Eine Ebene höher`,level_down:`Eine Ebene tiefer`,rename_level:`Ebene umbenennen`,remove_level:`Ebene entfernen`,new_level:`Neue Ebene`,level_name_placeholder:`z. B. Erdgeschoss`,add_room:`Raum hinzufügen`,add_camera:`Kamera hinzufügen`,new_room:`Neuer Raum`,new_camera:`Neue Kamera`,revert:`Änderungen verwerfen`,undo:`Rückgängig`,redo:`Wiederholen`,fit:`Einpassen`,clear_level:`Ebene leeren`,save:`Speichern`,saved:`Grundriss gespeichert`,lock:`Plan sperren`,unlock:`Plan entsperren`,zoom_in:`Vergrößern`,zoom_out:`Verkleinern`,unsaved_title:`Nicht gespeicherte Änderungen`,unsaved_message:`Deine Änderungen am Grundriss sind noch nicht gespeichert.`,discard:`Verwerfen`,changed_elsewhere:`Der Grundriss wurde auf einem anderen Gerät geändert.`,conflict_title:`Grundriss woanders geändert`,conflict_message:`Speichern überschreibt die anderen Änderungen. Verwirf deine, um sie zu laden.`,conflict_rooms_message:`Die Räume wurden auf einem anderen Gerät geändert. Verwirf deine Änderungen, um sie zu laden.`,save_anyway:`Trotzdem speichern`,section_connection:`Verbindung`,connection_type:`Art`,connection_type_hint:`Räume, die sich nur eine Wand teilen, sind nicht verbunden.`,connection_door:`Tür`,connection_opening:`Offener Durchgang`,connection_stairs:`Treppe`,connection_level_hint:`Zwischen zwei Ebenen ist die Verbindung immer eine Treppe.`,room_not_drawn:`Dieser Raum ist noch nicht gezeichnet.`,connection_width:`Breite ({value} m)`,connection_width_hint:`Auf der Wand verschieben, an den Punkten in der Breite ziehen.`,belongs_to:`Gehört zu`,room_kind:`Art`,room_kind_indoor:`Innen`,room_kind_outdoor:`Außen, auf dem Grundstück`,room_kind_public:`Außenwelt`,room_kind_indoor_hint:`Ein Raum im Gebäude.`,room_kind_outdoor_hint:`Gehört zum Grundstück, liegt aber im Freien.`,room_kind_public_hint:`Straße, Gehweg, Nachbargrundstück. Von hier kommt jemand, ohne vorher gesehen worden zu sein. Zeichne ein Tor dorthin, wo man hereinkommt.`,note:`Notiz`,note_hint:`Was der Plan nicht zeigt. Die KI liest das mit, wenn sie ein Ereignis beschreibt.`,room_detached:`Das Rechteck liegt jetzt allein und wurde zu "{name}".`,belongs_to_hint:`Mehrere Rechtecke können einen Raum bilden, etwa für einen L-förmigen Hof.`,room_parts:`Aus {count} Rechtecken gezeichnet.`,remove_connection:`Verbindung entfernen`,connect_hint:`Bei angrenzenden Räumen geht es auch über den Punkt auf der gemeinsamen Wand.`,palette:`Zum Plan hinzufügen`,section_cameras:`Kameras`,section_sensors:`Sensoren`,all_sensors_placed:`Alle Sensoren sind platziert.`,needs_level:`Lege zuerst eine Ebene an.`,north_hint:`Ziehen, um Norden festzulegen.`,north_reading:`Norden bei {value} Grad`,no_room_hint:`Ohne Raum trägt diese Kamera nichts zum räumlichen Kontext bei.`,section_room:`Raum`,section_camera:`Kamera`,section_sensor:`Sensor`,sensor_passage:`Gehört zu Durchgang`,sensor_toggle:`Schalten`,security_disarmed:`Unscharf`,security_stay:`Anwesend scharf`,security_away:`Abwesend scharf`,security_night:`Nacht scharf`,sensor_passage_hint:`Ein Kontakt oder ein Schloss sagt etwas über genau diese Tür.`,remove_sensor:`Sensor entfernen`,section_view:`Sicht`,size:`Größe`,no_room:`Kein Raum`,delete_room:`Raum löschen`,remove_camera:`Vom Plan nehmen`,room_name:`Raumname`,camera_name:`Kameraname`,assigned_room:`Raum`,assigned_room_hint:`Zieh die Kamera in einen Raum, dann folgt das hier mit.`,direction:`Blickrichtung ({value} Grad)`,fov:`Blickwinkel ({value} Grad)`,range:`Reichweite ({value} m)`,outdoor:`Außenbereich`,outdoor_hint:`Markiert die Fläche als außerhalb des Hauses.`,nothing_selected:`Nichts ausgewählt`,nothing_selected_hint:`Wähle einen Raum oder eine Kamera aus, um sie zu bearbeiten.`},updates:{title:`Updates`,all_up_to_date:`Alles ist aktuell`,blocked_desktop:`Aktualisiert sich mit der Desktop-App`,blocked_launcher:`Ohne Launcher, direkt auf seiner Maschine aktualisieren`,blocked_legacy:`Einmal direkt auf seiner Maschine aktualisieren`,blocked_offline:`Offline`,cancelling:`Wird abgebrochen...`,check_now:`Nach Updates suchen`,checked_at:`Zuletzt geprüft {time}`,indicator_done:`Updates abgeschlossen`,indicator_failed:`{count} Updates fehlgeschlagen`,indicator_preparing:`Updates werden vorbereitet...`,indicator_running:`Aktualisiere {name} ({done}/{total})`,indicator_running_many:`Installiere {count} Updates...`,left_behind_desktop:`aktualisiert sich mit der Desktop-App`,left_behind_failed:`sein Update ist fehlgeschlagen`,left_behind_launcher:`läuft ohne Launcher`,left_behind_legacy:`muss einmal direkt auf seiner Maschine aktualisiert werden`,left_behind_message:`Diese Worker behalten ihre Version und verbinden sich danach nicht mehr mit camera.ui v{version}:`,left_behind_offline:`offline`,left_behind_pending:`noch nicht aktualisiert`,left_behind_title:`Worker bleiben zurück`,left_behind_unknown:`camera.ui v{version} gibt nicht an, welche Worker es annimmt. Diese Worker behalten ihre Version und verbinden sich danach vielleicht nicht mehr:`,no_changelog:`Kein Changelog verfügbar`,pending_count:`Updates verfügbar: {count}`,retry:`Erneut versuchen`,run_preparing:`Vorbereiten...`,run_progress:`{done} von {total} erledigt`,run_server_last:`der Server kommt zuletzt und startet neu`,run_updating:`Aktualisiere {name}...`,section_plugins:`Plugins`,section_server:`Server`,section_workers:`Worker`,server_needs_node:`camera.ui v{version} braucht ein neueres Node.js`,summary_server_hint:`Der Server aktualisiert zuletzt und startet dabei neu.`,up_to_date:`Aktuell`,update_all:`Alle aktualisieren`,update_anyway:`Trotzdem aktualisieren`,updated_to:`Aktualisiert auf v{version}`},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 einer Kamera auf einen Worker aus, um CPU-Last zu verteilen. Mit „Lokal" bleibt das Decoding auf diesem Master. Die Erkennung läuft dort, wo das Erkennungs-Plugin läuft.`,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`,frame_link_hint:`Bilder gehen über das Netzwerk an {plugin} ({pluginHost}) für {types}.`,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`,edit_worker:`Worker bearbeiten`,server_addresses_hint:`Welche IP-Adressen des Workers die Plugins auf ihm nutzen, zum Beispiel HomeKit. Leer heißt alle.`,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}`,status:`Status`,state_expected:`Verbindet`,state_unreachable:`Nicht erreichbar seit {time}`,state_unreachable_short:`Nicht erreichbar`,state_no_answers:`Antworten kommen nicht an`,state_restarting:`Startet neu`,state_offline:`Offline seit {time}`,state_outdated:`Veraltet: v{version}, Update nötig`,state_outdated_short:`Veraltet`,state_releasing:`Wird freigegeben`,state_released:`Deaktiviert`,state_conflict:`Zwei Geräte nutzen die Identität von {name}`,state_conflict_short:`Identitätskonflikt`,state_moves_at:`Ab {time} läuft seine Arbeit woanders`,workloads:`Aufgaben`,workload_provisioning:`Installiert`,workload_spawning:`Startet`,workload_running:`Läuft`,workload_stopping:`Stoppt`,workload_backoff:`Wartet auf Neustart`,workload_stopped:`Gestoppt`,workload_failed:`Fehlgeschlagen`,update_installing:`Installiert das Update`,update_staged:`Update installiert, startet neu`,update_restarting:`Startet für das Update neu`,update_rolled_back:`Das Update auf {version} wurde zurückgenommen: {reason}`,update_swap_failed:`Das Update auf {version} wurde nicht übernommen: {reason}`,moving:`{name} zieht auf {host} um`,moving_local:`{name} zieht auf diesen Master um`,move_plugin:`Plugin verschieben`,move_plugins:`Plugins verschieben`,move_plugin_confirm:`{plugin} von {from} nach {to} verschieben? Dateien, die es auf {from} ablegt, bleiben dort, etwa geladene Modelle. Auf {to} startet es ohne sie.`,move_plugins_confirm:`{plugins} verschieben? Dateien, die sie auf ihrem bisherigen Host ablegen, bleiben dort, etwa geladene Modelle. Auf dem neuen Host starten sie ohne sie.`,move_plugin_item:`{plugin} von {from} nach {to}`,move:`Verschieben`,fallback:`Ausweichen`,fallback_hint:`Auf diesem Master laufen, solange der Worker weg ist`,fallback_unavailable:`Dieser Master kann dieses Plugin nicht ausführen`,fallback_no_worker:`Nur mit zugewiesenem Worker`,not_running:`Läuft nicht`,replaces:`Ersetzt`,replaces_none:`Neuer Worker`,replaces_hint:`Nur nötig, wenn ein Gerät mit der Identität eines noch verbundenen Workers auftaucht, etwa eine Kopie seines Volumes. Der Code übernimmt dann diesen Worker.`,ca_fingerprint:`Fingerabdruck des Masters`,ca_fingerprint_hint:`Der Worker schreibt beim Pairing denselben Fingerabdruck ins Log.`,pairing_expired:`Abgelaufen, erzeugen Sie einen neuen Code`,acceptor_error:`Worker können sich nicht verbinden: {error}. camera.ui versucht es weiter.`}}},en:{components:{connection_details:{title:`Connection details`,current:`This device`,server_view:`What the server sees`,no_target:`Not connected`,last_attempt:`Last attempt`,no_attempts:`No connection attempt recorded yet.`,mode_lan:`Local`,mode_wan:`Internet`,outcome_connected:`connected`,outcome_reachable:`reachable, not used`,outcome_timeout:`no answer in time`,outcome_superseded:`stopped, another one was faster`,outcome_pending:`running`,outcome_failed:`failed`,copy:`Copy details`,copied:`Details copied`,copy_failed:`Could not copy the details`},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_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.`,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_plugin_notification:`Plugin sends a notification`,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_assistant:`Ask the assistant`,action_assistant_desc:`Let the assistant look at the situation and answer, as push or conversation.`,assistant_user:`Answer for`,assistant_user_hint:`Receives the answer. The assistant uses their language and what it remembers about them.`,assistant_profile:`Profile`,assistant_profile_none:`No profile`,assistant_profile_hint:`Model, tools and instructions from a profile of this user.`,assistant_profile_missing:`This profile no longer exists, the defaults apply.`,assistant_prompt:`Question or task`,assistant_prompt_placeholder:`Look at the picture from {'{{camera.name}}'}: is this a delivery? Answer in one sentence.`,assistant_prompt_hint:`Variables of the flow are filled in. When nothing is worth reporting, the assistant stays silent and sends nothing.`,assistant_image:`Picture`,assistant_image_hint:`Optional, like {'{{snapshot.base64}}'} after a snapshot node. The model only sees it when it receives images.`,assistant_deliver:`Deliver as`,assistant_deliver_push:`Push notification`,assistant_deliver_thread:`Conversation in the assistant`,assistant_deliver_both:`Push and conversation`,assistant_deliver_none:`Only as variable for the next nodes`,assistant_title:`Title`,assistant_title_placeholder:`Defaults to the flow name`,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, one camera 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_camera:`One camera`,notification_control_scope_user:`One user`,notification_control_scope_global_hint:`Mutes or unmutes push for all users.`,notification_control_scope_camera_hint:`Mutes or unmutes push coming from the selected camera. Other cameras keep notifying, and the events still land in the app.`,notification_control_scope_user_hint:`Mutes or unmutes push for the selected user only.`,notification_control_camera:`Camera`,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_embed_faces:`Face Embedding`,method_embed_persons:`Person Re-ID Embedding`,method_segment:`Outline Objects`,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_staticDetections:`Settled 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`,sensor_property_identities:`Recognized faces`,sensor_property_plates:`Recognized plates`,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_assistant_answer:`Assistant answer`,variable_assistant_replied:`Assistant replied`,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_sources:`Recorded Streams`,camera_prop_recording_mode:`Recording Mode`,camera_prop_recording_prebuffer:`Recording Pre-Buffer (s)`,camera_prop_ptz_autotrack:`PTZ Autotrack`,camera_prop_ptz_return_home:`PTZ Return To Home`,camera_prop_ptz_target_labels:`PTZ Tracked Object Types`,camera_prop_ptz_min_confidence:`PTZ Minimum Confidence`,camera_prop_object_confidence_person:`Person Confidence`,camera_prop_object_confidence_vehicle:`Vehicle Confidence`,camera_prop_object_confidence_animal:`Animal Confidence`,camera_prop_suppress_static:`Ignore Stationary Objects`,camera_prop_object_timeout:`Object Timeout (s)`,camera_prop_face_confidence:`Face Confidence`,camera_prop_face_match_sensitivity:`Face Recognition`,camera_prop_plate_confidence:`Plate Detection Confidence`,camera_prop_plate_ocr_confidence:`Plate Reading Confidence`,camera_prop_plate_min_length:`Minimum Plate Length`,camera_prop_main_stream_analysis:`Main stream analysis`,camera_prop_motion_timeout:`Motion Timeout (s)`,option_continuous:`Continuous`,option_face_strict:`Strict`,option_face_balanced:`Balanced`,option_face_relaxed:`Relaxed`,option_event:`Event`,option_adhoc:`Adhoc`,option_low:`Low`,option_mid:`Mid`,option_medium:`Medium`,option_high:`High`,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_snapshot_mode:`New Snapshot`,camera_prop_snapshot_interval:`Snapshot Interval (s)`,camera_prop_snapshot_max_age:`Snapshot Max Age (s)`,option_snapshot_interval:`Regularly`,option_snapshot_on_view:`When viewed`,option_snapshot_on_demand:`Only on request`,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`,events_unavailable:`Events unavailable, the NVR plugin is not running`,title:`Recent Events`,filter:`Filter recent events`,filter_hint:`Select the cameras whose events show up here. Hidden events are still detected and recorded.`,filter_all_cameras:`All cameras`,filter_shown_on:`Shown on {n} of {total} cameras`,filter_hidden_everywhere:`Hidden on all cameras`},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_faceEmbedder:`Face Recognition`,sensor_type_personEmbedder:`Person Re-ID`,sensor_type_segmenter:`Segmentation`,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`,sensor_offline:`Offline`,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.`,notifications:`Notifications`,notifications_hint:`Decides what this camera pushes to your phone. Which detections notify you is set per alert zone.`,notify_audio_other:`Other sounds`,recording_requires:`No NVR plugin assigned. These settings apply as soon as one is installed.`,zones_hint:`Without zones, the whole image counts. Motion and object zones restrict where detections count, alert zones decide what notifies you, privacy zones cover an area, 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.`,frame_worker_location:`Decoder: {placement}`,zones_empty:`No zones or lines on this camera yet.`,zone_entry_motion:`Motion zone`,zone_entry_object:`Object zone`,zone_entry_privacy:`Privacy zone`,zone_entry_alert:`Alert 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_recognize_face:`Drop or select image to recognize a face`,drop_or_select_image_of_person:`Drop or select a picture of one person`,drop_or_select_image_to_outline:`Drop or select image to outline its objects`,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`},face_recognition_interface:{quality:`Landmark confidence {value}%`,match:`Match`,no_match:`Nobody recognized`,no_face:`No face found in this image`,needs_nvr:`Recognition needs the NVR plugin, it holds the enrolled people`,sensitivity_strict:`Strict`,sensitivity_balanced:`Balanced`,sensitivity_relaxed:`Relaxed`},person_embedding_interface:{no_vector:`No vector for this picture`,search:`Find people who look alike`},segmentation_interface:{no_mask:`No outline for this picture`,no_outline:`No outline`,whole_picture:`Whole picture`},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_delete_room:`Delete the room "{name}"? Its cameras move to Default and it leaves the floor plan.`,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_undo_restore:`This puts back the setup from before the last restore. Changes since then are lost.`,confirm_keep_running_here:`camera.ui restarts and runs its cameras and plugins on this server again. If the new server took over already, turn one of them off.`,confirm_cancel_move:`The move stops and camera.ui runs its cameras and plugins on this server again. The new server can no longer fetch the 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:{reset_defaults:`Reset to defaults`,add:`Add`,add_source:`Add source`,create_room:`Create new room`,delete_room:`Delete 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`,upload:`Upload`,reset:`Reset`,restart:`Restart`,restore_backup_archive:`Restore backup archive`,restore:`Restore`,retry:`Retry`,review:`Review`,discard:`Discard`,undo_restore:`Undo restore`,create_move_code:`Create move code`,new_move_code:`New code`,withdraw:`Withdraw`,keep_running_here:`Run here again`,cancel_move:`Cancel move`,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:{nav_settings_in_nav:`Shows the settings pages as their own group in the sidebar.`,nav_group_collapsible:`The {group} group can be collapsed in the sidebar.`,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`,snapshot_mode_interval:`A timer keeps the picture current, viewers never wake the camera`,snapshot_mode_on_view:`A viewer gets a new picture once the stored one is older than the age below`,snapshot_mode_on_demand:`New pictures only from automations, the refresh button or a request, good for battery cameras`,snapshot_max_age:`Age in seconds after which a viewer gets a new picture`,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_person:`Minimum confidence for person detections`,confidence_vehicle:`Minimum confidence for vehicle detections`,confidence_animal:`Minimum confidence for animal detections`,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_quick_capacity:`From about four people watching remotely at once, a named tunnel holds up better.`,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.`,notify_enabled:`Push detections from this camera to your phone.`,notify_video:`Attach a short clip of the moment. Needs recording, uses the lowest recorded quality.`,notify_audio:`Which detected sounds send a push.`,notify_sensors:`Which sensor triggers send a push.`,notify_speed:`How long a push waits for a good picture. Immediate sends right away, balanced waits up to 2 seconds, best up to 4.`,notify_cooldown:`Minimum time between pushes from this camera. Doorbell and alarms bypass it.`,recording_mode:`Continuous records around the clock, event around detections with a pre-buffer, adhoc connects only when a detection starts.`,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.`,ptz_autotrack_min_target_size:`Ignore objects smaller than this share of the picture height. They are usually too far away to follow. 0 turns the limit off.`,ptz_autotrack_max_target_size:`Stop following once an object fills more than this share of the picture height. That close the picture says little, so the camera holds still until the object backs off. 0 turns the limit off.`,ptz_autotrack_active_hours:`Only follow during these hours, for example at night. Outside them the camera stays where it is.`,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.`,main_stream_analysis:`With hardware acceleration the high-resolution stream is always analysed once something is detected. This switch forces it on CPU-only systems, which costs real processing power.`,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)`,object_timeout:`How long a detection reported by a camera-based object sensor stays active without an end report (min. 10s). Frame-based detection ignores this`,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`,face_match_sensitivity:`Strict gives fewer wrong names, relaxed recognizes people more often. What counts as a match differs per model, so this is a setting, not a number.`,plate_confidence:`Plates found with less confidence than this are not read at all`,plate_ocr_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...`,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`,two_way_audio_disabled:`Removes the talk channel of this source, the microphone button disappears`,source_timeout:`Seconds without video before the stream is reconnected. Empty keeps the default: 5 for cameras, 60 for plugin sources`,source_handshake_timeout:`Seconds the camera gets to answer each connection step. Raise it for cameras that wake up slowly. Empty means 5`,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 combine codecs, e.g. video from one and audio from another, for better playback`,streaming_mode:`Stream transport protocol for the user interface. In 'auto' mode, the best mode is automatically selected`,server_addresses:`Which of this machine's IP addresses apps may use, and where camera streams are offered. Empty means all of them. A VPN address left out here breaks streaming over that VPN.`,local_url:`A name your network resolves, for example behind a reverse proxy. Apps prefer it over the plain IP when it answers. It needs a certificate matching the name and must pass WebSocket connections through. Camera streams keep using the IP addresses above.`,streaming_source:`Camera source used for the stream: high, mid, or low resolution`,playback_source:`Recording quality for playback. Auto plays the best quality that has footage and switches when needed`,activity_mode:`When the live stream runs. Always on streams continuously, Activity only while something happens, Standby waits for a tap`,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`},option:{face_match_strict:`Strict`,face_match_balanced:`Balanced`,face_match_relaxed:`Relaxed`},label:{nav_settings_in_nav:`Settings pages in the navigation`,nav_group_collapsible:`{group} collapsible`,aspect_ratio:`Aspect ratio`,aspect_ratio_custom:`Custom ratio`,audio_codec:`Audio codec`,snapshot_mode:`New picture`,snapshot_mode_interval:`Regularly`,snapshot_mode_on_view:`When viewed`,snapshot_mode_on_demand:`Only on request`,snapshot_max_age:`Take a new one after`,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_person:`Person Confidence`,confidence_vehicle:`Vehicle Confidence`,confidence_animal:`Animal 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`,notify_enabled:`Send notifications`,notify_video:`Video in push`,notify_audio:`Notify for sounds`,notify_sensors:`Notify for sensors`,notify_speed:`Notification speed`,notify_cooldown:`Cooldown (seconds)`,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`,ptz_autotrack_min_target_size:`Smallest object`,ptz_autotrack_max_target_size:`Largest object`,ptz_autotrack_active_hours:`Only during these hours`,until:`until`,disconnected:`Disconnected`,domain:`Domain`,enabled:`Enabled`,external_port:`External port`,external_url:`External URL`,firmware_version:`Firmware version`,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`,main_stream_analysis:`Main stream without GPU`,language:`Language`,language_system:`System default`,layout_name:`Layout name`,manufacturer:`Manufacturer`,model:`Model`,motion_timeout:`Motion timeout`,object_timeout:`Object timeout`,audio_timeout:`Audio timeout`,audio_min_decibels:`Min. volume (dBFS)`,audio_confidence:`Audio confidence`,face_confidence:`Face confidence`,face_match_sensitivity:`Recognize faces`,plate_confidence:`Plate detection`,plate_ocr_confidence:`Plate reading`,plate_min_length:`Min. plate length`,sensor_timeout:`Sensor timeout`,sensor_triggers:`Sensor Triggers`,name:`Name`,room:`Room`,room_default:`Default`,room_no_level:`No level`,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`,password:`Password`,pip_source:`PiP Source`,port_forward:`Port forward`,preload:`Preload`,muted:`Mute audio`,two_way_audio_disabled:`Disable two-way audio`,source_timeout:`Stream timeout`,source_handshake_timeout:`Connection timeout`,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`,local_url:`Local address`,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`,playback_source:`Playback source`,activity_mode:`Activity mode`,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_per_camera:`Per Camera`,activity_mode_standby:`Standby`,clear:`Clear`,console:`Console`,contain:`Object fully inside the zone`,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_stream_json:`Copy stream details`,copy_all:`Copy all`,delete:`Delete`,delete_line:`Delete line`,delete_zone:`Delete zone`,delete_selected:`Remove selected cameras`,disable_selected:`Disable selected cameras`,enable_selected:`Enable selected cameras`,lock_layout:`Lock layout`,disabled:`Disabled`,download:`Download`,edit:`Edit`,edit_layout:`Edit layout`,hide_on_home:`Hide on Home`,show_on_home:`Show on Home`,view_default:`Show all cameras`,view_grouped:`Group by room`,exclude:`Exclude`,finish:`Finish`,detections:`Detections`,detections_off:`Off`,detections_on:`On`,fullscreen_off:`Fullscreen off`,fullscreen_on:`Fullscreen on`,hide_timeline:`Hide timeline`,include:`Include`,intercom:`Intercom`,intersect:`Object touches the zone`,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`},polygon:{kind_motion:`Motion`,kind_object:`Object`,kind_alert:`Alert`},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}`,quality_degraded:`No {from} recording 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`,ptz_presets:`Presets`,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.`,stream_unavailable:`Stream unavailable`,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`,delete_range:`Delete recordings`,delete_selection:`Delete selection`,delete_range_confirm:`Delete the recordings and events in the selected range? Deletion is per minute and cannot be undone. Favorites in the range are deleted too.`,delete_range_done:`Selected range deleted`,delete_range_nothing:`Nothing to delete in the selected range`,delete_range_too_recent:`The selected minutes are still being written. Try again in a few minutes.`,zones:`Zones`,heatmap:`Heatmap`,ask_assistant:`Ask the assistant`,ask_assistant_prompt:`What is happening at the camera {camera} right now, and what did it see today?`,ask_assistant_prompt_playback:`What happened at the camera {camera} around {time}? Show me the picture of that moment and tell me what you see.`,more:`More`,zoom_in:`Zoom in`,zoom_out:`Zoom out`},similar:{scanning:`Finding the object`,searching:`Searching`,reading:`Reading`,no_detector:`This camera's object detection cannot read a picture`,failed:`The picture could not be read`,search:`Find this object`,pick_hint:`Select a person or a vehicle`,find_hint:`Select a person or a vehicle in the picture`,continue:`Continue`,remove_pick:`Remove`,no_object_detection:`No object detection`,no_objects:`No person or vehicle here`,unknown_face:`Unknown face`,vehicle:`Vehicle`,no_face:`No face`,no_vehicle_features:`Nothing stored`,no_face_notice:`Neither the face nor the clothing of this person could be read`,no_vehicle_notice:`Nothing was stored about this vehicle to search by`,more_precise:`More precise`,more_broad:`Broader`,show_all:`Show all in Recordings`,image_search_title:`Search by picture`,image_no_camera:`No camera has an object detection that can read a picture`},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`},placement:{local:`Runs on the master`,pending:`Being placed on {worker}`,provisioning:`Installing on {worker}`,provisioning_version:`Installing {version} on {worker}`,starting:`Starting on {worker}`,adopting:`Reconnecting to {worker}`,bound:`Runs on {worker}`,restarting:`Restarting on {worker}`,held:`Waiting for {worker} since {time}`,held_until:`Waiting for {worker} until {time}`,releasing:`Stopping on {worker}`,failed:`Failed on {worker}`,waiting:`Waiting for worker {worker}`},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`},push_sync:{title:`Push notifications stopped working`,action:`Fix`,dismiss:`Dismiss`},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`,status_disabled:`Disabled`,status_incompatible:`Incompatible`,status_update_required:`Needs a plugin update`,status_server_update_required:`Needs a newer camera.ui`,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:`Filter`,pick_date:`Choose date`,date_apply:`Jump`,date_cancel:`Cancel`,filter_events:`Events`,filter_cameras:`Cameras`,filter_zone:`Zone`,filter_zone_enable:`Filter by zone`,filter_zone_hint:`Mark areas on the camera picture.`,filter_search:`Search`,filter_search_matches:`Matches only`,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_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`,type_occupancy:`Occupancy`,type_power:`Power`,type_lock:`Lock`,type_garage:`Garage`,live:`Live`,today:`Today`,yesterday:`Yesterday`,views:`Views`},toast:{backup_downloaded:`Backup file download 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_invalid:`Check the highlighted fields, nothing was saved`,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`,metrics_reset:`Metrics reset`,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_restarting_on_worker:`Plugin restarts on its worker`,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}`,assistant_updated:`Assistant settings updated`,assistant_threads_deleted:`All conversations deleted`,assistant_schedule_saved:`Scheduled prompt saved`,assistant_profile_saved:`Profile saved`,assistant_schedule_ran:`Scheduled prompt ran`,assistant_schedule_failed:`Scheduled prompt 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_incomplete:`These zones need at least 3 points: {zones}`,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`},training_editor:{hint:`Drag to draw a box, tap a box or its label to edit it, double tap to zoom. Label everything you see, parked and cut-off vehicles too.`,hint_wrong:`Correct or remove wrong boxes and verify anyway, a person on a poster or screen is not a person. Verify with no boxes to mark a false alarm.`,plate_text:`Plate text`,sc_select:`Select next box`,sc_move:`Move box`,sc_resize:`Resize box`,sc_label:`Cycle label`,sc_delete:`Delete box`,sc_deselect:`Deselect`,sc_verify:`Verify & next`,sc_nav:`Previous / next frame (no selection)`,sc_ghosts:`Boxes of this camera's previous image`,sc_ghosts_all:`Take over all of them`,sc_hide:`Hide or show all boxes`,ghosts_toggle:`Show boxes of this camera's previous image`,boxes_hide:`Hide boxes`,boxes_show:`Show boxes`,ghost_take:`Take over`,suggestion_take:`Add unsure detection`,verify:`Verify`,remove_box:`Remove box`,removed_meanwhile:`This picture was removed in the meantime.`,labels:{person:`Person`,vehicle:`Vehicle`,animal:`Animal`,package:`Package`,face:`Face`,license_plate:`License plate`}},training_submissions:{empty:`No contributions yet. Frames you submit stay listed here.`,load_failed:`Contributions could not be loaded. Check the cloud connection.`,status_pool:`Submitted`,status_trained:`In training`,delete:`Delete contribution`,count:`{count} contribution | {count} contributions`},zone_editor:{base_labels:`Base`,motion_hint:`Motion zones say where movement counts. Without one, the whole image counts.`,object_hint:`Object zones say which types count where. Without one, every type counts everywhere. With one, a type counts only inside a zone that lists it, and a zone without types counts every type.`,alert_hint:`Alert zones decide what notifies you, they never change detection or recording. Without one, every detected type notifies. With one, only the types selected here notify, and only from inside the zone.`,privacy_hint:`Privacy zones are the areas camera.ui covers. Without one, nothing is hidden. Inside one, live view, playback and pictures are covered, and detections are dropped unless you keep them.`,lines_hint:`A line reports objects crossing it in the chosen direction. Without one, nothing is reported. A line never filters detection.`,object_labels_info:`Only the selected types count inside this zone. Select none and every type counts here. Faces and plates decide whether what counts here also gets a name.`,alert_labels_info:`The selected types only notify while they are inside this zone. Select none and every type notifies from here.`,line_labels_info:`Only the selected types trigger this line. Select none and every type triggers it.`,identify_group:`Identification`,identify_faces:`Recognize faces`,identify_plates:`Read plates`,alert_attributes:`Who or what exactly`,alert_faces:`Faces`,alert_faces_info:`Nothing selected means every face notifies. Pick people to limit it, "Unknown" covers everyone the recognition cannot name.`,alert_face_any_known:`Any known face`,alert_face_unknown:`Unknown faces`,alert_plates:`Plates`,alert_plates_info:`Nothing entered means every plate notifies. Enter plates to limit it.`,alert_plates_placeholder:`Type a plate and press enter`,alert_conflict:`This camera does not detect {labels}, so these types never notify. Add them to an object zone or remove them here.`,zone_match:`Counts as inside when`,object_match_info:`Decides when an object counts for this zone. "Touches" accepts it as soon as any part reaches in, "fully inside" only once the whole box is in the zone.`,alert_match_info:`Decides when an object is inside far enough to notify. "Stands in" uses the point where the object meets the ground, so someone whose body reaches over the zone but whose feet are outside does not notify. "Touches" is the loosest, "fully inside" the strictest.`,match_anchor:`The object stands in the zone`,match_intersect:`The object touches the zone`,match_contain:`The object is fully inside`,line_direction:`Crossing direction`,line_direction_info:`Which way an object has to cross to be reported. Both ways reports every crossing, the one-way settings only report that direction.`,line_direction_both:`both ways`,privacy_drop:`Detections inside`,privacy_drop_info:`What happens to objects found inside this zone. Dropped means they never become an event, still count means they are detected as usual and only the picture is covered.`,privacy_drop_on:`Are dropped`,privacy_drop_off:`Still count`,privacy_fallback:`When a picture cannot be covered`,privacy_fallback_send:`Send it anyway`,privacy_fallback_drop:`Send no picture`,privacy_fallback_info:`Some camera formats cannot be masked. Either the picture arrives uncovered and you delete it, or there is no picture for that moment.`,edit_zones:`Edit zones`,zone:`Zone`,tab_motion:`Motion`,tab_object:`Objects`,tab_alert:`Alerts`,tab_privacy:`Privacy`,tab_lines:`Lines`}},connection:{offline:`Offline`,reconnected:`Reconnected`,reconnecting:`Reconnecting...`,degraded:`Syncing...`,restarting:`Restarting...`,retry:`Retry`,connecting_remote:`Connecting to your home server...`,connected_lan:`Connected via local network`,connected_wan:`Connected via internet`,unreachable:`Cannot reach your home server`,pick_server:`Pick another server`,not_connected:`Not connected. Nothing was sent.`,outdated_title:`Update recommended`,server_outdated:`This app needs camera.ui {required} or newer, the server runs {found}.`,nvr_outdated:`This app needs NVR plugin {required} or newer, the server has {found}.`,outdated_hint:`Some features may not work until then.`,outdated_dismiss:`Got it`},restore:{title:`Restoring backup`,title_ready:`Restore this backup?`,title_undo:`Undoing the restore`,title_move:`Moving from another server`,phase_uploading:`Uploading backup...`,phase_checking:`Checking backup...`,phase_restoring:`Restoring...`,phase_restarting:`Restarting server...`,phase_plugins:`Installing plugins...`,phase_starting:`Starting camera.ui...`,phase_move_connecting:`Connecting to the old server...`,phase_move_stopping:`The old server stops its cameras and plugins...`,phase_move_packing:`The old server packs its backup...`,phase_move_receiving:`Receiving the backup...`,phase_move_checking:`Checking backup...`,move_from:`From {source}`,dont_close:`Please don't close this window.`,summary_created:`Created`,summary_system:`System`,summary_version:`camera.ui {version} on {platform}`,summary_cameras:`Cameras`,summary_plugins:`Plugins`,summary_accounts:`Sign in with`,summary_notes:`Notes`,platform_change:`Set to {to} for this system, was {from}.`,platform_dropped:`Not carried over, was {from}.`,mode_title:`How should this server take over the backup?`,mode_move:`Move`,mode_move_hint:`This server replaces the old one and keeps its identity. Turn the old server off.`,mode_copy:`Copy`,mode_copy_hint:`Both servers keep running, this one gets its own identity.`,mode_suggested:`suggested`,move_no_certificate:`The backup has no certificate authority, apps and workers have to be paired again.`,move_source_running:`The old server still runs at {address}. Turn it off before the move, or choose Copy.`,move_source_unchecked_local_network:`camera.ui may not search the local network, so it could not check whether the old server still runs. Allow it under System Settings → Privacy & Security → Local Network.`,move_source_unchecked_network:`camera.ui could not check whether the old server still runs. Turn it off before the move, or choose Copy.`,copy_workers:`Workers of the old server stay with it ({count}).`,summary_replace:`This replaces the current setup, recordings stay. You can undo it for 7 days.`,confirm:`Restore`,result_done:`Backup restored.`,result_undone:`The setup from before the restore is back.`,result_problems:`Backup restored. Some plugins could not be installed.`,result_problems_hint:`You can retry them under Settings, Backup.`,result_cloud:`Sign this server in to cameraui.com under Settings, Remote Access.`,result_nvr:`If the NVR has a license, connect it to cameraui.com again in its settings afterwards.`,result_failed:`The backup could not be restored.`,result_rolled_back:`camera.ui did not start with the backup. The previous setup is back.`,result_unknown:`camera.ui is running again. Sign in to check the result.`,to_login:`Sign in`,move_code:`Move code`,move_code_hint:`Create it on the old server under Settings, Backup.`,move_address:`Address of the old server`,move_address_hint:`Only needed if the code does not find it.`,move_fetch:`Fetch backup`,move_code_offered:`This server offers a move code itself. Withdraw it to fetch a backup here.`,moved_away:`This server moved to a new one. Its cameras and plugins are stopped here.`,title_key:`Backup key needed`,key_required:`This backup is encrypted. Enter the backup key of the server it comes from.`,key_wrong:`This key does not open the backup.`,key_label:`Backup key`,key_hint:`You find it on the old server under Settings, Backup, or in the key file you saved.`,key_file:`Open key file`,key_file_invalid:`This file has no backup key.`,key_open:`Open backup`,plugin_version:`Gets version {version}, {saved} does not run on this camera.ui.`,plugin_platform:`Does not run on this system, its cameras keep their settings. {reason}`,plugin_unavailable:`Cannot be installed. {reason}`,plugin_worker:`Keeps running on the worker {worker}.`,plugin_worker_copy:`Ran on the worker {worker}, which stays with the old server. Its data there does not come along.`,plugin_not_in_backup:`Not in the backup. It stays installed but starts without its settings.`,plugin_issue:{not_in_registry:`It is not in the plugin registry.`,gone:`Version {version} is gone from the registry.`,blocked:`Version {version} is blocked: {detail}`,needs_newer_server:`Version {version} needs a newer camera.ui.`,built_for_older_server:`Version {version} was built for an older camera.ui.`,engine:`Version {version} needs {engine} {required}.`,platform:`It needs {platform}.`,no_other_version:`No other version runs on this camera.ui.`},summary_excluded:`Folders not in the backup`,excluded_hint:`Copy them yourself if you need them here.`},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:{role_admin:`Admin`,role_user:`User`},navigation:{group_settings:`Settings`,edit_nav:`Edit navigation`,group_main:`Main`,group_manage:`Manage`,group_system:`System`,about:`About`,sensors:`Sensors`,account:`Account`,metrics:`Metrics`,appearance:`Appearance`,backup:`Backup`,cameras:`Cameras`,camview:`Camview`,config:`Configuration`,console:`Console`,logs:`Logs`,extras:`Extras`,home:`Home`,nvr:`NVR`,plugins:`Plugins`,faces:`Faces`,training:`Training`,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`,updates:`Updates`,floorplan:`Floor Plan`,assistant:`Assistant`},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.`,assistant_description:`Chat with your cameras: model, tools and behavior.`,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 & sessions.`},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`,needs_cloud:`Share links only work with cloud access. Turn it on under Settings, Remote Access.`,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:{assistant:{title:`Assistant`,conversations:`Conversations`,new_conversation:`New conversation`,no_conversations:`No conversations yet.`,delete_conversation:`Delete conversation`,open_assistant:`Ask the assistant`,open_full_view:`Open full view`,setting_on:`On. Ask again and the assistant uses it.`,setting_needs_admin:`Switched off. An admin can turn it on under Settings, Assistant.`,setting_terminalEnabled_title:`Shell commands`,setting_terminalEnabled_off:`Off. When on, the assistant checks disk, network and processes on the server, each command after your approval.`,setting_memoryEnabled_title:`Remember facts about users`,setting_memoryEnabled_off:`Off. When on, the assistant keeps facts like names across conversations.`,setting_sendImages_title:`Send images to the model`,setting_sendImages_off:`Off. When on, the model sees the pictures and can describe them. With a cloud model they leave the instance.`,notice_vision_title:`{model} does not see pictures`,notice_vision_text:`The pictures show up here, the model only gets the text of the tool results.`,notice_vision_attach:`Plugin detectors still run on attached pictures, the model itself does not see them.`,notice_tools_title:`{model} cannot call tools`,notice_tools_text:`Questions about cameras, recordings and settings stay unanswered. Pick another model in the tools menu.`,model_label:`Model`,download_clip:`Download clip`,drawer_minimize:`Small window`,drawer_panel:`Side panel`,delete_all_conversations:`Delete all conversations`,delete_all_confirm:`This removes every conversation of your account. Continue?`,empty_title:`Ask your cameras`,empty_hint:`What happened today, who was at the door, is every camera online. Changes are confirmed by you before they run.`,composer_placeholder:`Ask something…`,disclaimer:`Answers come from a language model and can be wrong. Check the recording when it matters.`,thinking:`Thinking`,working:`Working`,tool_arguments:`Arguments`,tool_result:`Result`,tool_running:`running`,tool_waiting_approval:`waiting for your confirmation`,tool_rejected:`rejected`,tool_failed:`failed`,tool_unfinished:`not finished`,approval_title:`Allow "{tool}"?`,approval_hint:`The assistant wants to change something. Check the details, then confirm or reject.`,approval_edit:`Edit`,approval_edit_hint:`Change the values the tool runs with, then allow.`,approval_invalid_json:`This is not valid JSON.`,approve:`Allow`,reject:`Reject`,stop:`Stop`,greeting_morning:`Good morning.`,greeting_day:`Good afternoon.`,greeting_evening:`Good evening.`,greeting_night:`Still up.`,greeting_sub:`What do you want to know about your home?`,search_placeholder:`Search conversations`,no_matches:`No conversation matches this search.`,group_today:`Today`,group_yesterday:`Yesterday`,group_week:`Last 7 days`,group_month:`Last 30 days`,group_older:`Older`,hide_sidebar:`Hide conversations`,show_sidebar:`Show conversations`,copy_answer:`Copy`,copied:`Copied`,hint_send:`send`,hint_newline:`new line`,open_recording:`Open recording`,open_episode:`Open episode`,open_camera:`Open camera`,reference_missing:`This recording is not available any more.`,disabled_title:`The assistant is turned off.`,unconfigured_title:`The assistant is not set up yet.`,setup_hint_admin:`Add a model in the settings. A local Ollama needs no account.`,setup_hint_user:`Ask an administrator to set it up.`,open_settings:`Open settings`,suggestion_today:`What happened at home today?`,suggestion_offline:`Is every camera online?`,suggestion_sensors:`Which sensors are active right now?`,suggestion_tools:`What can you do?`,suggestion_week:`Show me the highlights of this week, with pictures`,voice_start:`Speak instead of typing`,voice_stop:`Stop listening`,voice_denied:`Dictation is not allowed. Check the microphone and speech recognition permissions.`,voice_failed:`Dictation failed ({error})`,attach:`Attach a picture, audio or video`,attach_remove:`Remove`,attach_too_large:`File too large, the limit is {max} MB`,attach_too_many:`At most {max} files per message`,attach_unsupported:`Only pictures, audio and video`,attachment_audio:`Audio file`,attachment_video:`Video clip`,usage_tokens:`{input} in, {output} out`,usage_speed:`{n} t/s`,usage_cost:`approx. {cost}`,usage_details:`Model {model}. {turns} model turns, {tools} tool calls, {cached} cached tokens, {reasoning} reasoning tokens. The cost is an estimate from public list prices.`,regenerate:`Regenerate`,edit_message:`Edit`,edit_send:`Send`,delete_exchange:`Delete question and answer`,branch_here:`Branch from here`,branch_unsaved:`This conversation is not saved yet, send a message first.`,continue_answer:`Continue`,answer_stopped:`Answer stopped.`,steps:`{n} steps`,tools_title:`Conversation settings`,tools_count:`{n} tools`,tools_label:`Tools`,tools_selected:`{n} groups`,tools_none:`No tools`,tool_group_core:`camera.ui`,tool_group_terminal:`Shell commands`,tool_group_docs:`Documentation`,instructions_label:`Instructions`,instructions_placeholder:`Answer in one sentence, only look at the garden camera.`,profiles_label:`Profile`,profile_none:`No profile`,profile_save:`Save as profile`,profile_update:`Update profile`,profile_delete:`Delete profile`,profile_name_placeholder:`Profile name`,profile_name_label:`Name`,profile_save_hint:`Saves the model, tools and instructions of this conversation.`,question_answer:`Answer`,question_skip:`Skip`,question_from:`From`,question_to:`To`,question_placeholder:`Or type an answer`,queued_attachment:`Message with attachment`,queue_cancel:`Remove from queue`,scroll_to_latest:`Jump to the latest`,paused_elsewhere:`This conversation is waiting for a decision in another window or on another device.`,thread_reloaded:`This conversation continued on another device, it now shows the latest state.`,thread_load_failed:`This conversation could not be loaded. Open it again to retry.`,failure_overloaded:`The provider is overloaded right now. Try again in a moment.`,failure_rate_limit:`Too many requests to the provider. Try again in a minute.`,failure_billing:`The provider account has no credit left.`,failure_auth:`The provider rejected the API key. Check it in the assistant settings.`,failure_model:`The provider does not offer this model.`,failure_too_long:`This conversation is too long for the model. Start a new one.`,failure_provider:`The provider had an error. Try again.`,memory_title:`What the assistant remembers about you`,memory_empty:`Nothing yet. Facts you mention or ask it to remember show up here.`,memory_forget:`Forget`,memory_forget_all:`Forget everything`},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.`},metrics:{analysis:`Detection`,bench_calls:`Calls`,bench_cameras:`Cameras`,bench_cpu:`CPU`,bench_gpu:`GPU`,bench_memory:`Memory`,bench_os:`System`,bench_version:`camera.ui`,bench_concurrency:`In flight`,bench_effective_concurrency:`In the plugin at once`,bench_duration:`Duration`,bench_handler:`Inside the plugin, with its queue`,bench_host:`Runs on`,bench_host_server:`Server`,bench_input:`Model input`,bench_model:`Model`,bench_runtime:`Runtime`,bench_per_camera:`Per camera`,bench_rate:`Detections`,benchmark:`Benchmark`,benchmark_confirm:`The benchmark loads the detector with test images and measures how many detections per second it manages. Detection pauses for all cameras while it runs and continues afterwards.`,benchmark_result_title:`Benchmark result`,benchmark_start:`Start benchmark`,benchmark_total:`All cameras`,camera_storage:`Camera Storage`,cameras:`Cameras`,chart_free:`Free`,chart_nvr:`NVR`,chart_other:`Other`,col_active:`Active`,col_analysed:`Analysed`,col_classifier:`Classifier`,col_object:`Object`,col_camera:`Camera`,col_clip:`CLIP`,col_days:`Days`,col_decode:`Decode`,col_detections:`Detections`,col_face:`Face`,col_face_embed:`Recognition`,col_person_embed:`Re-ID`,col_mode:`Mode`,col_motion:`Motion`,col_plate:`Plate`,col_processing:`Processing`,col_rate:`Rate`,col_size:`Size`,col_transport:`Transport`,col_cross_host:`Network`,col_zoom:`Zoom`,col_bitrate_in:`In`,col_bitrate_out:`Out`,col_connections:`Connections`,col_drops:`Drops`,col_source:`Source`,copied:`Copied`,copy:`Copy`,core:`Core`,days_count:`{count} days`,deselect_all:`Deselect all`,disk_critical:`Critical: disk space is running out. Recording is paused to prevent data loss.`,disk_free:`Disk Free`,disk_small_volume:`Storage volume is small. Recordings will rotate frequently to keep space free.`,disk_total:`Disk Total`,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.`,general:`General`,info_active:`Share of time this camera analysed at all. A frame loop runs at 100%, a camera that reports motion itself only during events.`,info_analysed:`Frames per second analysed: analysis stream, then high-resolution stream.`,info_decode:`Time to decode one frame: analysis stream, then high-resolution stream.`,info_detections:`Objects found per analysed frame.`,info_object:`Time the object detector needs for one frame, its own pre- and post-processing plus the model.`,info_motion:`Time a frame-based motion plugin needs per frame. Stays - when the camera reports motion itself.`,info_processing:`Scaling to the model input, and turning the results back into boxes. Without an object detector, the scaling for motion.`,info_secondary:`Time per detection for the extra step. Only runs when an object was found.`,info_face_embed:`Time per face to turn it into a vector. Runs once per person and only on faces big enough to recognize.`,info_person_embed:`Time per person to turn their appearance into a vector. Runs at most three times per person.`,info_transport:`Time the frame and the result spend on the way to the plugin and back.`,info_cross_host:`Bit rate of frames sent over the network to detection plugins on another machine.`,info_zoom:`Share of object detections that looked at zoomed motion windows instead of the whole frame.`,info_bitrate_in:`What the camera sends.`,info_bitrate_out:`What all connections of this source receive together.`,info_connections:`All connections to this source, internal ones like preload and analysis included.`,info_drops:`Packets a slow connection did not take in time.`,inference:`Inference`,no_cameras:`No cameras available`,no_core:`No core processes available`,no_plugins:`No plugins available`,no_system:`No system data available`,nvr_usage:`NVR Usage`,performance:`Performance`,plugins:`Plugins`,quota:`Quota`,reset:`Reset`,reset_confirm:`Clears all measured values and starts over. Useful after a model change.`,retention:`Retention`,select_all:`Select all`,show_inference:`Show inference`,show_performance:`Show performance`,show_processes:`Show processes`,show_streams:`Show streams`,status_recording:`Recording`,status_stopped:`Stopped`,storage_not_available:`Not available`,storage_overview:`Storage Overview`,storage_unreachable:`Recording is paused, the storage path can't be reached. Connect its disk or choose another storage path.`,tab_cameras:`Cameras`,tab_overview:`Overview`,tab_storage:`Storage`,tip_analysis_stream:`Analysis stream`,tip_hit_rate:`Frames with a hit`,tip_main:`High-resolution stream`,tip_no_plugin:`No plugin for this`,tip_round_trip:`round trip, the plugin reports no time of its own`,tip_post:`Boxes and zones`,tip_scale:`Scale`,tip_motion_scale:`Motion scale`,tip_worker:`Runs on worker {name}`,tip_zoom_windows:`Windows per zoomed frame`,title:`Metrics`,unlimited:`Unlimited`},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`,find:`Find`,recordings:`Recordings`,shares:`Shares`,timeline:`Timeline`,title:`Camera`},cameras:{add_camera:`Add camera`,all_hidden:`All cameras are hidden. Edit the layout to show them again.`,events:`Events`,get_started:`Get started`,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`,card_fit:`Picture in the card`,card_fit_aspect:`Keep aspect ratio`,card_fit_aspect_info:`Black bars when the card has a different shape`,card_fit_contain:`Fit inside`,card_fit_contain_info:`Whole picture in the card, black bars where needed`,card_fit_cover:`Crop to fit`,card_fit_cover_info:`Fills the card, cuts off the edges`,card_fit_fill:`Stretch to fit`,card_fit_fill_info:`Fills the card, distorts the picture`,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.`,adopted_title:`Adopted sensors`,discovered_title:`Discovered`,status_discovered:`Discovered`,scanning:`Scanning...`,no_discovered:`No sensors discovered yet`,rescan:`Rescan`,adopt_title:`Add sensor`,adopt_confirm:`Add "{name}" from {plugin}? It appears in the sensor list and can be assigned to cameras.`,adopted:`"{name}" added.`,name:`Name`,native_id:`ID`,type:`Type`,plugin:`Plugin`,connected:`Connected`,disconnected:`Not connected`,state_unavailable:`Unavailable`,state_removed:`Removed in {plugin}`,select:`Select sensors`,select_discovered:`Select discovered sensors`,adopt_selected:`Add selected`,adopt_selected_confirm:`Add {count} sensors? They appear in the sensor list and can be assigned to cameras.`,adopt_selected_done:`{count} sensors added`,delete_selected:`Delete selected`,delete_selected_confirm:`Delete {count} sensors? Connected camera sensors are skipped.`,delete_selected_done:`{count} sensors deleted`,bulk_failed:`{count} sensors failed`,settings:`Sensor settings`,hide_all_camera_bound:`Hide camera sensors`,hide_all_camera_bound_hint:`Keep sensors that a plugin registered on a camera out of the list.`,only_enabled_camera_bound:`Show only enabled camera sensors`,only_enabled_camera_bound_hint:`Hide camera sensors whose plugin is not enabled for the matching category on that camera.`,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_camera_bound:`Camera sensors cannot be deleted while connected.`,delete_confirm:`The sensor and its assignments are removed. If the plugin still offers it, it shows up as discovered again.`,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)?`,delete_selected_failed:`{count} automation(s) could not be deleted`,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`,from_server:`From Another Server`,new_installation:`New Installation`,slogan:`The modern solution for professional video surveillance.`,start:`Start`,start_message:`Start a new installation, restore a backup or take over another camera.ui server.`,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`,face_recognition_tab_tooltip:`Face Recognition`,person_embedding_tab_tooltip:`Person Re-ID`,segmentation_tab_tooltip:`Segmentation`,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})`,updates_run_active:`An update run is in progress. Plugins are stopped until it finishes and start again on their own.`,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_actions:`Actions`,home_assistant:`Home Assistant menu`},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.`,unavailable:`Faces are unavailable, the NVR plugin is not running.`,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`,few_pictures_hint:`At least {count} pictures are recommended. With fewer, this person is often missed.`,marks_hint:`Marked pictures can hurt recognition. Tap a mark to see why.`,card_marked:`{count} picture can hurt recognition | {count} pictures can hurt recognition`,to_check:`{count} to check`,mark_filed_under:`Also filed under {names}, keep it for one person`,mark_unclear:`No clear face, better remove it`,mark_unlike:`Recognition can't link it to the other pictures and doesn't use it`,mark_partly_visible:`Face partly visible, keep it only if better pictures are missing`,mark_same_as:`Same as another picture, one is enough`,assign_filed_under:`Already filed under {names}. | Already filed under {names}: {affected} of {total} faces.`,assign_partly_visible:`This face is only partly visible. | Only partly visible: {affected} of {total} faces.`,delete_person:`Delete Person`,name:`Name`,enter_name:`Enter name`,enter_or_pick_name:`Pick or enter a 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`,reindex:{title:`Re-embed faces`,button:`Re-embed faces`,start:`Start`,stop:`Stop`,intro:`Embeds the enrolled pictures again for the recognition model in use. Pictures that already have a vector are skipped.`,up_to_date:`Every enrolled picture is current. Nothing had to be embedded.`,running_intro:`The enrolled pictures are being embedded. Recognition is patchy until it finishes.`,checking:`Checking the enrolled pictures…`,progress:`Embedding {done}/{total}`,result:`{done} of {total} pictures embedded.`,skipped_pictures:`Some pictures of {names} show no face this model can read and were removed. They are still recognized from their other pictures.`,unusable:`No usable picture for {names}. Add a closer one, otherwise they stay unrecognized.`},rescan_complete:`{count} face(s) updated in existing events`,rescan_no_matches:`No new matches found`,ignore:`Ignore`,ignore_cluster:`Ignore group`,ungrouped_hint:`Sightings that don't fit a group yet.`,ignored_faces:`Ignored Faces`,ignored_hint:`These faces are no longer collected. Restore one to see it again.`,restore:`Restore`,face_ignored:`Face ignored`,face_restored:`Face restored`},training:{title:`Training`,no_candidates:`No training candidates yet. Frames with detections collect here as events happen.`,no_matches:`No candidates match the search or the active filter.`,all_cameras:`All cameras`,search:`Search by camera…`,status_all:`All`,status_new:`New`,status_verified:`Verified`,boxes:`boxes`,candidate_verified:`Candidate verified`,candidate_ignored:`Candidate ignored`,candidate_deleted:`Candidate deleted`,delete_candidate:`Delete candidate`,select:`Select candidates`,select_all:`Select all`,deselect_all:`Deselect all`,delete_selected:`Delete selected candidates`,delete_selected_confirm:`Delete {count} candidates?`,delete_selected_done:`{count} candidates deleted`,submit:`Submit`,submit_selected:`Submit selected to the community pool`,submit_ready:`Submit {count} verified frame | Submit {count} verified frames`,submit_disabled:`Verify frames first`,verify_hint:`Open a frame, correct its boxes and verify it. Verified frames can then be submitted with the button at the bottom right.`,upload_progress:`Uploading {done} of {total}…`,upload_failed_summary:`{count} failed`,upload_queued:`Queued`,upload_uploading:`Uploading`,upload_failed:`Upload failed`,submit_confirm:`Submit {count} verified frames to the community training pool? Images and boxes are tied to your cameraui.com account and can be deleted again at any time.`,submit_done:`{count} frame submitted | {count} frames submitted`,submissions:`My contributions`,collection:`Collection`,collection_enabled:`Collect candidates`,collection_hint:`Save frames with detections for annotation.`,per_camera_limit:`Frames per camera`},recordings:{title:`Recordings`,reindex:{title:`Reindex search`,button:`Reindex search`,start:`Start`,stop:`Stop`,intro:`Rebuilds the search index for events whose embeddings came from an older detection model. Events that are already current are skipped.`,up_to_date:`The search index is up to date. Nothing had to be reindexed.`,running_intro:`Events are being reindexed. Search keeps working while this runs.`,checking:`Checking the search index…`,progress:`Reindexing {done}/{total}`,skipped:`{count} failed`,result:`{done} of {total} events reindexed.`,result_failed:`{done} of {total} events reindexed, {skipped} failed.`},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`,open_trace:`Show detection trace`,ask_assistant:`Ask the assistant`,ask_assistant_prompt:`What happened in the recording of {camera} at {time}? Event id {id}. Show me the picture and tell me what you see.`,trace:{empty:`No trace stored for this event.`,unavailable:`The trace could not be loaded.`,summary:`{loaded} of {total} frames loaded`,jump_to_time:`Jump to a time`,earlier:`Earlier frames`,loading_frames:`Loading frames from the recording…`,bundle_hint:`Download bundle`,bundle_failed:`The support bundle could not be created`,playback:`Play the event`,show_frame:`Back to the frame`,play:`Play`,pause:`Pause`,playback_failed:`Playback failed.`,objects:`Objects`,attributes:`Attributes`,motion_boxes:`Motion boxes`,raw_detections:`Raw detections`,camera_report:`Camera report`,hint_witness:`{label} #{id} · confirmed by the camera's own report`,world_events:`Tracker events`,detector_idle:`detector did not run`,info:`Info`,scope_frame:`Frame`,scope_event:`Event`,hint_below_threshold:`{label} · under threshold {min}`,hint_plate_unsure:`{label} · read at {value}, needs {min}`,hint_plate_short:`{label} · shorter than {min} characters`,hint_read_held:`{face} · read as {name}, {votes} of {reads} reads agree, no name yet`,hint_read_missed:`{face} · no match, {seen}`,hint_in_privacy:`{label} · in privacy zone`,hint_outside_zones:`{label} · outside object zones`,hint_label_not_in_zone:`{label} · not allowed in {zones}`,hint_not_confirmed:`{label} · not confirmed yet`,hint_tentative:`{label} #{id} · tentative, no segment yet`,hint_notifications_off:`notifications off`,hint_motion_only:`motion only, no notification`,hint_outside_alert_zones:`{labels} · outside alert zones`,state_tentative:`tentative`,state_active:`active`,state_stationary:`stationary`,state_lost:`lost`,state_departed:`departed`,state_external:`camera AI`,zones:`Zones at the time of the event`,motion_label:`motion`,raw_label:`raw`,dropped_label:`dropped`,face_reads:`Face reads`,read_no_match:`no match`,read_closest:`closest {name} {score}`,read_between:`{name} {score} or {runnerUp} {runnerUpScore}, too close to tell apart`,read_votes:`{name} {votes} of {reads}`,read_named:`named {name}`,read_single:`camera AI, decides alone`,last_sure:`last sure {value}`,no_recording:`No recording covers this event. Only the detection data is shown.`,unsupported:`This browser cannot decode the recording. Only the detection data is shown.`,codec_fallback:`This browser cannot decode the main stream, so pictures come from the smaller stream and are matched by time, not exactly.`,codec_fallback_short:`Pictures from the smaller stream, matched by time`,missing:`No frame in the recording`,status_pending:`loading`,status_exact:`exact`,status_approx:`approx.`,status_missing:`no frame`},episode_trace:{title:`Episode`,open:`Show episode trace`,empty:`This episode kept no trace.`,unavailable:`The trace could not be loaded.`,images_summary:`{count} pictures for the model`,no_images:`No pictures were sent to the model.`,members:`Candidates`,links:`Connections`,curation:`Curation`,story:`Story`,cut:`Cut`,place:`Property`,dropped_still:`never moved`,dropped_prefilter:`no shared subject`,dropped_unconnected:`not connected`,dropped_other_visit:`other episode`,dropped_curation:`rejected by curation`,pruned:`{count} segments cut`,coherent:`coherent`,not_coherent:`not coherent`,call_failed:`call failed, all members kept`,reused:`story taken over from the episode before`,kept:`Kept`,evidence:`Evidence`,instructions:`Your instructions`,observations:`Observations`,response:`Response`,attempts:`{count} attempts`,second_angle:`Second angle, not in the cut`,bundle_hint:`Download bundle`,bundle_failed:`The support bundle could not be created`},second_angle:`Second angle`,no_preview:`No preview`,prev_image:`Previous image`,next_image:`Next image`,filter_and:`AND`,filter_or:`OR`,semantic_search:`AI Search`,semantic_search_placeholder:`Describe what you're looking for...`,assistant_search:`Ask the assistant`,assistant_search_placeholder:`e.g. people at the front door this week`,assistant_search_button:`Find`,assistant_search_failed:`The assistant could not read the search`,image_search:`Search by picture`,image_search_drop:`Drop a picture of a person or vehicle here, or choose one`,image_drop_overlay:`Drop the picture to find the person or vehicle in it`,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`,rooms:`Rooms`,all_rooms:`All rooms`,only_with_recordings:`Only with recording`,favorites_only:`Favorites only`,favorites_hint:`Favorites are never deleted automatically`,reassign_face:`Correct person`,reassign_unknown:`Mark as unknown`,reassign_done:`Person updated`,reassign_current:`Identified as`,reassign_new:`Correct person`,reassign_unknown_person:`Unknown`,reassign_unclear:`No clear face. Only the name changes, the picture is not used for recognition.`,more_actions:`More actions`,favorite:`Add to favorites`,unfavorite:`Remove from favorites`,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_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`,content_kind:`Show`,content_kind_all:`All`,content_kind_events:`Events`,content_kind_episodes:`Episodes`,content_kind_episodes_hint:`Only camera, time range and the view options apply to episodes.`,confidence:`Confidence`,date:`Date`,download:`Download recording`,no_recordings:`No recordings found`,load_failed:`The recordings could not be loaded.`,load_failed_retry:`Try again`,recordings_unavailable:`Recordings are unavailable, the NVR plugin is not running.`,select:`Select events`,delete_selected_confirm:`Delete {count} selected event(s)? Recorded video stays on disk until the normal cleanup removes it.`,delete_selected_done:`{count} event(s) deleted`,delete_event:`Delete event`,delete_event_confirm:`Delete this event? Its video stays on disk until the normal cleanup removes it.`,delete_event_done:`Event deleted`,delete_recording:`Delete recording`,delete_recording_confirm:`Delete this event and its video? Deletion is per minute and cannot be undone. Other events in these minutes are deleted too.`,delete_recording_done:`Recording deleted`,delete_recording_too_recent:`The video is still being written. Try again in a few minutes.`,no_semantic_results:`No matching recordings found for your search`,ungroup:`Ungroup`,ungroup_hint:`One card per moment instead of per event`,only_with_recordings_hint:`Hide events and episodes without saved footage`,view_options:`View options`,result_count_recordings:`{count} recordings`,result_count_recordings_of:`{count} of {total} recordings`,result_count_episodes:`{count} episodes`,result_count_episodes_of:`{count} of {total} episodes`,semantic_results:`{count} AI matches`,events_count:`{count} events`,similar_searching:`Searching`,similar_failed:`Search failed`,similar_face:`Moments with {name}`,similar_unknown_face:`Moments with this face`,similar_person:`Similar people`,similar_plate:`Moments with plate {plate}`,similar_appearance:`Similar vehicles`,similar_several:`Matches for {count} objects`,similar_count:`No matches | 1 match | {count} matches`,similar_best_first:`best first`,similar_surest_first:`surest first`,similar_license:`Search needs an active NVR license`,similar_empty:`No other moments found`,similar_clear:`End search`,vehicles:`Vehicles`,vehicle_filter_hint:`Color and type are read from the picture and can be wrong.`,vehicle_filter_license:`Filtering by vehicle color or type needs an active NVR license.`,vehicle_color_white:`White`,vehicle_color_gray:`Gray`,vehicle_color_yellow:`Yellow`,vehicle_color_red:`Red`,vehicle_color_green:`Green`,vehicle_color_blue:`Blue`,vehicle_color_black:`Black`,vehicle_type_car:`Car`,vehicle_type_van:`Van`,vehicle_type_truck:`Truck`,vehicle_type_bus:`Bus`,vehicle_type_motorcycle:`Motorcycle`,vehicle_type_bicycle:`Bicycle`},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`,restore_running:`A backup is being restored. Sign in once it is done.`,restore_done:`Backup restored. Sign in with an account from the backup.`},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.`,custom_certificate:`Own certificate`,custom_certificate_info:`Serve your own certificate for the names it covers. camera.ui keeps its own certificate for everything else, which is what the apps and workers verify. Renewals are picked up automatically when the files are replaced on disk.`,certificate_restart_title:`Restart streaming service?`,certificate_restart_info:`camera.ui serves the new certificate right away. The streaming service keeps its own copy and picks it up on a restart, which interrupts running streams for a moment.`,certificate_restart_done:`Streaming service restarted`,certificate_upload_title:`Upload certificate`,certificate_upload_info:`Certificate and key are required. The chain is only needed when your issuer ships it separately from the certificate.`,certificate_file_hint:`fullchain.pem or your .crt`,certificate_key_file_hint:`privkey.pem or your .key`,certificate_chain_file_hint:`chain.pem or ca-bundle.crt`,certificate_chain_hint:`Optional, certbot users can leave this empty.`,certificate_missing_files:`Certificate and key are required.`,certificate_file_too_large:`That file is too large for a certificate.`,certificate_remove_title:`Remove certificate?`,certificate_remove_confirm:`camera.ui serves its own certificate again for every name. Browsers reaching the server by domain will warn until you upload a new one.`,certificate_names:`Covers`,certificate_issuer:`Issued by`,certificate_valid_to:`Valid until`,certificate_none:`No own certificate stored.`,certificate_file:`Certificate (fullchain.pem)`,certificate_key_file:`Private key (privkey.pem)`,certificate_chain_file:`Chain (only when your issuer ships it separately)`,certificate_chain_missing:`This file holds a single certificate. From a public issuer that means the intermediates are missing and phones will refuse it, so upload fullchain.pem instead. From a local or company CA that signs directly, this is expected.`,certificate_stored:`Certificate stored and in use`,certificate_removed:`Certificate removed, the instance certificate is served again`,certificate_problem_key_mismatch:`The key does not belong to this certificate.`,certificate_problem_expired:`This certificate has expired.`,certificate_problem_not_yet_valid:`This certificate is not valid yet.`,certificate_problem_no_key:`The key could not be read. An encrypted key needs its passphrase removed.`,certificate_problem_no_certificate:`This file holds no certificate.`,certificate_problem_unreadable:`This certificate could not be read.`,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 is encrypted with the backup key of this server and 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.`,backup_job_snapshot:`Copying the databases...`,backup_job_packing:`Packing the backup...`,backup_job_lost:`The backup stopped because the server restarted.`,backup_last:`Last backup`,backup_last_never:`none yet`,backup_key:`Backup key`,backup_key_info:`Downloaded and scheduled backups are encrypted with this key. A restore on this server opens them by itself, another server asks for the key. Without the key nobody can open the backups.`,backup_key_save:`Save key file`,backup_key_saved:`Saved on {date}.`,backup_key_not_saved:`Keep the key outside this server, for example in a password manager.`,backup_key_dialog_title:`Keep your backup key`,backup_key_dialog_text:`Backups of this server are encrypted. If this server is lost, you need this key to open them on another one. Save it in a password manager or keep the key file.`,backup_key_dialog_confirm:`I saved the key`,backup_key_file:`This key opens the encrypted backups of your camera.ui server. Keep it outside the server.`,backup_encrypted:`encrypted`,backup_foreign_key:`key of another server`,backup_saved_in:`Saved in {path}`,backup_key_copied:`Copied`,edit:`Edit`,navigation:`Navigation`,debugging:`Debugging`,interface:`Interface`,invalid_domain:`Invalid domain`,locale:`Locale`,network:`Network`,network_info:`How apps and browsers reach this server on your network. The addresses also decide where camera streams are offered, the local address only decides what the apps talk to.`,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`,logged_in_users:`Logged in users`,no_sessions:`No logged in 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`},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, the ones on this server stay. Before anything changes, you see what the backup contains.`,last_restore:`Last restore`,restore_waiting:`A backup is waiting to be confirmed.`,restore_running:`A restore is running.`,restore_missing_plugins:`Plugins from the backup that are missing`,restore_previous:`The setup from before the last restore is kept until {date}.`,restore_from_server:`Or fetch the backup directly from another camera.ui server with its move code.`,move_server:`Move this server`,move_server_info:`Moves this server with all its settings to a new one. The new server fetches everything from here, then this server stops its cameras, plugins and workers.`,move_code_info:`Enter this code on the new server, in the welcome screen or under Settings, Backup.`,move_code_expires:`Valid until {time}.`,move_code_hidden:`A move code is valid until {time}. It is shown only once, create a new one if you need it again.`,move_code_copied:`Copied`,move_taking_over:`The new server at {target} takes over. Cameras, plugins and workers are stopped here.`,move_done:`This server moved to {target} on {date}. Cameras, plugins and workers are stopped here.`,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_assistant:`Assistant`,title_appearance:`Appearance`,title_backup:`Backup`,title_go2rtc:`Go2RTC`,title_notifications:`Notifications`,title_nvr:`NVR`,title_permissions:`Permissions`,title_recordings:`Recordings`,title_settings:`Settings`,section_personal:`Personal`,section_system:`System`,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_plugin_incompatible:`Plugin incompatible with server`,system_update_available:`Server update available`,system_app_update_available:`App update available`,system_worker_update_available:`Worker updates available`,system_cloud_reauth_required:`Cloud sign-in required`,system_backup_failed:`Scheduled backup failed`,system_worker_offline:`Worker offline / back online`,system_remote_offline:`Remote access down / restored`,system_update_failed:`Update failed`}},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.`,storage_unreachable:`Recording is paused, the storage path can't be reached. Connect its disk or choose another storage path.`,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.`,global_settings:`Settings`,cloud_login_hint:`Not signed in to the camera.ui cloud. Tap the gray cloud button below to sign in and register this NVR with your account.`,group_info_license:`Your camera.ui plan, the recording slots it includes and which cameras currently use one. The values come from the cloud and update on their own.`,group_info_storage:`Where recordings are stored, how much disk space they may use and how long they are kept. When space runs low, the retention mode decides whether old footage is overwritten or recording pauses.`,group_info_faces:`Face recognition for known people. The threshold decides how strict a match has to be, the limits control how many pictures are kept for training and how many unknown people are remembered.`,group_info_genai:`The AI provider that writes event descriptions. Works with cloud providers or a local model, and the connection can be tested right here.`,group_info_moments:`AI-written descriptions for the moments of an event. They replace the plain detection push; the delay decides how long an event has to stay calm before the summary goes out.`,group_info_episodes:`Combines related sightings from several cameras into one episode, with a story from the AI provider or a title without one. The timing settings shape when an episode closes.`,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).`,assistant_title:`Assistant`,assistant_state_ready:`Ready`,assistant_state_unconfigured:`Not configured`,assistant_state_disabled:`Disabled`,assistant_status_ready:`Model {model}`,assistant_status_info:`Add a model, then enable the assistant.`,assistant_model:`Models`,assistant_enabled_info:`Users can chat with this instance in the Assistant view.`,assistant_provider_label:`Provider`,assistant_provider_plugin:`{name} (plugin)`,assistant_provider_hint:`Where the model runs: on your own hardware, on a server in your network, in a cloud service billed per token, or in a plugin. Keys are stored encrypted.`,assistant_model_plugin_info:`Pick one of the models the plugin offers.`,assistant_model_plugin_loading:`The plugin is still getting its model ready.`,assistant_model_plugin_none:`This plugin offers no model right now.`,assistant_model_context:`Context {tokens} tokens.`,assistant_model_routing:`Pick the tools first`,assistant_model_routing_info:`For small models. A short extra request picks the tools a question needs, so the model sees those few instead of a long catalog. Costs about a second per question, large models do not need it.`,assistant_model_context_label:`Context window (tokens)`,assistant_model_context_placeholder:`From the general setting`,assistant_model_context_info:`What this model can hold. Set it for a local or small model, then camera.ui keeps prompt, tools and history inside its window. Empty uses the context budget from the general settings.`,assistant_base_url_label:`Server URL`,assistant_api_key_label:`API key`,assistant_api_key_keep_hint:`A key is stored. Leave empty to keep it.`,assistant_api_key_optional:`Only if the server asks for one.`,assistant_model_label:`Model`,assistant_model_placeholder:`Type a model name or load the list`,assistant_model_info:`Saving tests tool calls and pictures.`,assistant_models_failed:`Could not load models: {message}`,assistant_models_info:`The default model answers unless a profile or conversation picks another one.`,assistant_models_empty:`No models yet.`,assistant_model_add:`Add model`,assistant_model_edit:`Edit model`,assistant_model_delete:`Delete model`,assistant_model_delete_confirm:`Delete {name}? Profiles and plugins that use it switch to the default model.`,assistant_model_make_default:`Make default`,assistant_model_default:`Default`,assistant_model_admins_only:`Admins only`,assistant_model_users:`Available to users`,assistant_model_users_info:`When off, only admins can use this model.`,assistant_model_name_label:`Name`,assistant_model_name_placeholder:`Same as the model`,assistant_api_key_new:`New key`,assistant_api_key_stored:`Stored key`,assistant_api_key_from:`Key of {name}`,assistant_capability_tools:`Tools`,assistant_capability_no_tools:`No tools`,assistant_capability_vision:`Pictures`,assistant_capability_no_vision:`No pictures`,assistant_capability_untested:`Not tested`,assistant_capability_failed:`Test failed`,assistant_send_images_no_vision:`The model failed the picture test, this has no effect.`,assistant_plugins:`Plugin access`,assistant_plugins_info:`Plugins with access use the chosen model through camera.ui. The key stays on the server.`,assistant_plugins_empty:`No installed plugin uses models.`,assistant_plugin_no_access:`No access`,assistant_test_failed:`Test failed: {message}`,assistant_test_tools_missing:`The model did not call the test tool. Without tools the assistant can only chat.`,assistant_test_tools_declared:`This model comes without tools. The assistant can only chat with it.`,assistant_test_vision_missing:`The model rejected the test picture. It works without pictures.`,assistant_behavior:`Behavior`,assistant_memory:`Remember facts about users`,assistant_memory_info:`Keeps facts like names and preferences across conversations. Users see and clear their own list in the chat.`,assistant_terminal:`Shell commands`,assistant_terminal_info:`Admins can let the assistant run diagnostic commands on the host. Each command waits for their approval.`,assistant_send_images:`Send images to the model`,assistant_send_images_info:`With a cloud provider, snapshots and event pictures leave this machine.`,assistant_language_label:`Answer language`,assistant_language_auto:`Follow the user interface`,assistant_language_info:`Plugins use it too, English when it follows the interface.`,assistant_reasoning_label:`Thinking`,assistant_reasoning_info:`Longer thinking costs tokens and time. Not every model supports every level.`,assistant_reasoning_default:`Model default`,assistant_reasoning_off:`Off`,assistant_reasoning_low:`Brief`,assistant_reasoning_high:`Thorough`,assistant_max_iterations_label:`Model turns per question`,assistant_max_iterations_info:`How often the model may call tools before it has to answer.`,assistant_max_tool_calls_label:`Tool calls per question`,assistant_max_tool_calls_info:`Stops a model that is stuck in a loop.`,assistant_context_tokens_label:`Context budget (tokens)`,assistant_context_tokens_info:`Older tool results and turns are dropped above this size. Ollama gets a context window of this size plus headroom, lower it on small hardware. A model with its own context window set uses that instead.`,assistant_history_threads_label:`Conversations kept per user`,assistant_history_threads_info:`The oldest conversations are removed first.`,assistant_history_images_label:`Pictures kept per conversation`,assistant_history_images_info:`The oldest pictures of a conversation are removed first.`,assistant_extra_prompt_label:`Additional instructions`,assistant_extra_prompt_placeholder:`The "Gate" camera points at the street, ignore passing cars.`,assistant_extra_prompt_info:`Added to the built-in instructions, for house rules and camera hints.`,assistant_tools:`Tools`,assistant_tools_empty:`No tools registered yet.`,assistant_tool_approval:`asks first`,assistant_tool_admin:`admin`,assistant_tools_trusted_label:`Run without asking`,assistant_tools_trusted_info:`These tools run without confirmation, in scheduled prompts too.`,assistant_tools_trusted_none:`None`,assistant_tools_trusted_selected:`{n} tools`,assistant_schedules:`Scheduled prompts`,assistant_schedules_info:`Prompts that run on a schedule and arrive as push, conversation or both. Tools that need approval are skipped.`,assistant_schedule_title_label:`Title`,assistant_schedule_title_placeholder:`Daily summary`,assistant_schedule_prompt_label:`Prompt`,assistant_schedule_prompt_placeholder:`What happened at home today? Keep it short and name the cameras.`,assistant_schedule_when_label:`When`,assistant_schedule_time_label:`Time`,assistant_schedule_cron_label:`Cron expression`,assistant_schedule_profile_label:`Profile`,assistant_schedule_profile_none:`No profile`,assistant_schedule_profile_missing:`Profile deleted`,assistant_schedule_model_label:`Model`,assistant_schedule_model_default:`{name} (default)`,assistant_schedule_model_change:`Change model`,assistant_schedule_model_hint:`Leave empty to use the model of the profile, or the default model.`,assistant_schedule_actions:`Actions`,assistant_schedule_deliver_label:`Deliver as`,assistant_schedule_deliver_push:`Push`,assistant_schedule_deliver_thread:`Conversation`,assistant_schedule_deliver_both:`Push and conversation`,assistant_schedule_preset_daily:`Every day`,assistant_schedule_preset_weekdays:`Weekdays`,assistant_schedule_preset_weekends:`Weekends`,assistant_schedule_preset_weekly:`Every Sunday`,assistant_schedule_preset_hourly:`Every hour`,assistant_schedule_preset_custom:`Custom cron`,assistant_schedule_add:`Add schedule`,assistant_schedule_run:`Run now`,assistant_schedule_delete:`Delete schedule`,assistant_schedule_pause:`Pause`,assistant_schedule_resume:`Resume`,assistant_schedule_next:`Next run {time}`,assistant_schedule_paused:`Paused`,assistant_schedule_last_success:`last run {time}`,assistant_schedule_last_error:`failed {time}`,assistant_text_alerts:`Text alerts`,assistant_text_alerts_info:`The assistant saves them when you ask it to watch for something. A new event that matches sends a push with the picture.`,assistant_text_alerts_empty:`No text alerts yet. Ask the assistant, for example "let me know when a parcel arrives".`,assistant_text_alert_all_cameras:`All cameras`,assistant_text_alert_until:`Until {time}`,assistant_text_alert_delete:`Delete text alert`,assistant_text_alert_model_hint:`Checks the pictures before the push. Leave empty to use the model of the NVR plugin under Plugin access.`,assistant_mcp:`MCP`,assistant_mcp_info:`MCP clients like Claude Code or Cursor can use this instance with their own model.`,assistant_mcp_enabled_label:`Enable MCP endpoint`,assistant_mcp_enabled_info:`Needs an API token from the account settings.`,assistant_mcp_writes_label:`Allow changes`,assistant_mcp_writes_info:`Also offer tools that change something.`,assistant_mcp_endpoint_label:`Endpoint`,assistant_mcp_token_info:`Authenticate with an API token as bearer.`,assistant_mcp_token_link:`Create one under Account.`,assistant_mcp_client_label:`Setup for`,assistant_mcp_snippet_info:`Replace <api token> with your token. The tools follow the role of the token owner.`,assistant_usage:`Usage`,assistant_usage_info:`Tokens and estimated cost per month. The estimate uses public list prices.`,assistant_usage_empty:`No runs recorded yet.`,assistant_usage_month:`Month`,assistant_usage_user:`User`,assistant_usage_model:`Model`,assistant_usage_runs:`Runs`,assistant_usage_in:`Tokens in`,assistant_usage_out:`Tokens out`,assistant_usage_cost:`Cost`,assistant_external:`External MCP servers`,assistant_external_info:`Use the tools of other systems with an MCP server, like Home Assistant. The assistant asks before it changes something there.`,assistant_external_new:`New server`,assistant_external_add:`Add server`,assistant_external_remove:`Remove server`,assistant_external_enabled_info:`Off keeps the server here without connecting to it.`,assistant_external_name:`Name`,assistant_external_url:`Server URL`,assistant_external_token:`Access token`,assistant_external_token_info:`Sent as bearer token, stored encrypted.`,assistant_external_token_set:`A token is stored. Enter a new one to replace it.`,assistant_external_state_connected:`connected, {n} tools`,assistant_external_state_connecting:`connecting`,assistant_external_state_error:`not reachable: {message}`,assistant_external_state_disabled:`off`,assistant_external_insecure:`Accept a self-signed certificate`,assistant_external_insecure_info:`Skips the certificate check. Only for servers in your own network.`,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.`},floorplan:{title:`Floor Plan`,open_camera:`Open camera`,blind_spots:`Blind spots`,no_levels:`No levels yet`,all_cameras_placed:`All cameras are placed`,level:`Level`,add_level:`Add level`,level_up:`One floor up`,level_down:`One floor down`,rename_level:`Rename level`,remove_level:`Remove level`,new_level:`New level`,level_name_placeholder:`e.g. Ground Floor`,add_room:`Add room`,add_camera:`Add camera`,new_room:`New room`,new_camera:`New camera`,revert:`Discard changes`,undo:`Undo`,redo:`Redo`,fit:`Fit to screen`,clear_level:`Clear this level`,save:`Save`,saved:`Floor plan saved`,lock:`Lock the plan`,unlock:`Unlock the plan`,zoom_in:`Zoom in`,zoom_out:`Zoom out`,unsaved_title:`Unsaved changes`,unsaved_message:`Your changes to the floor plan are not saved yet.`,discard:`Discard`,changed_elsewhere:`The floor plan was changed on another device.`,conflict_title:`Floor plan changed elsewhere`,conflict_message:`Saving overwrites the other changes. Discard yours to load them instead.`,conflict_rooms_message:`The rooms were changed on another device. Discard your changes to load them.`,save_anyway:`Save anyway`,section_connection:`Connection`,connection_type:`Type`,connection_type_hint:`Rooms that only share a wall are not connected.`,connection_door:`Door`,connection_opening:`Open passage`,connection_stairs:`Stairs`,connection_level_hint:`Between two levels the connection is always stairs.`,room_not_drawn:`This room is not on the plan yet.`,connection_width:`Width ({value} m)`,connection_width_hint:`Drag it along the wall, drag the dots to widen it.`,belongs_to:`Belongs to`,room_kind:`Kind`,room_kind_indoor:`Inside`,room_kind_outdoor:`Outside, on the property`,room_kind_public:`Outside world`,room_kind_indoor_hint:`A room in the building.`,room_kind_outdoor_hint:`Part of the property, but out in the open.`,room_kind_public_hint:`Street, pavement, a neighbour. People come from here without having been seen before. Draw a gate where they get in.`,note:`Note`,note_hint:`What the plan cannot show. The AI reads this when it describes an event.`,room_detached:`The rectangle stands alone now and became "{name}".`,belongs_to_hint:`Several rectangles can form one room, an L-shaped yard for example.`,room_parts:`Drawn as {count} rectangles.`,remove_connection:`Remove connection`,connect_hint:`Rooms that touch also offer a marker on the shared wall.`,palette:`Add to the plan`,section_cameras:`Cameras`,section_sensors:`Sensors`,all_sensors_placed:`Every sensor is on the plan.`,needs_level:`Add a level first.`,north_hint:`Drag to set north.`,north_reading:`North at {value} degrees`,no_room_hint:`Without a room this camera adds nothing to the spatial context.`,section_room:`Room`,section_camera:`Camera`,section_sensor:`Sensor`,sensor_passage:`Belongs to passage`,sensor_toggle:`Toggle`,security_disarmed:`Disarmed`,security_stay:`Armed, home`,security_away:`Armed, away`,security_night:`Armed, night`,sensor_passage_hint:`A contact or a lock says something about this one door.`,remove_sensor:`Remove sensor`,section_view:`View`,size:`Size`,no_room:`No room`,delete_room:`Delete room`,remove_camera:`Remove from plan`,room_name:`Room name`,camera_name:`Camera name`,assigned_room:`Room`,assigned_room_hint:`Drop the camera into a room and this follows along.`,direction:`Direction ({value} degrees)`,fov:`Field of view ({value} degrees)`,range:`Range ({value} m)`,outdoor:`Outdoor area`,outdoor_hint:`Marks the area as outside the house.`,nothing_selected:`Nothing selected`,nothing_selected_hint:`Pick a room or a camera to edit it.`},updates:{title:`Updates`,all_up_to_date:`Everything is up to date`,blocked_desktop:`Updates with the desktop app`,blocked_launcher:`No launcher, update it on its own machine`,blocked_legacy:`Update it once on its own machine`,blocked_offline:`Offline`,cancelling:`Cancelling...`,check_now:`Check for updates`,checked_at:`Last checked {time}`,indicator_done:`Updates finished`,indicator_failed:`{count} updates failed`,indicator_preparing:`Preparing updates...`,indicator_running:`Updating {name} ({done}/{total})`,indicator_running_many:`Installing {count} updates...`,left_behind_desktop:`updates with the desktop app`,left_behind_failed:`its update failed`,left_behind_launcher:`runs without the launcher`,left_behind_legacy:`has to be updated once on its own machine`,left_behind_message:`These workers keep their version and would no longer connect to camera.ui v{version}:`,left_behind_offline:`offline`,left_behind_pending:`not updated yet`,left_behind_title:`Workers stay behind`,left_behind_unknown:`camera.ui v{version} does not say which workers it accepts. These workers keep their version and might no longer connect:`,no_changelog:`No changelog available`,pending_count:`Updates available: {count}`,retry:`Retry`,run_preparing:`Preparing...`,run_progress:`{done} of {total} done`,run_server_last:`the server updates last and restarts`,run_updating:`Updating {name}...`,section_plugins:`Plugins`,section_server:`Server`,section_workers:`Workers`,server_needs_node:`camera.ui v{version} needs a newer Node.js`,summary_server_hint:`The server updates last and restarts.`,up_to_date:`Up to date`,update_all:`Update all`,update_anyway:`Update anyway`,updated_to:`Updated to v{version}`},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 to a worker to spread CPU load. Leave on "Local" to decode on this master. Detection runs where the detection plugin runs.`,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`,frame_link_hint:`Frames go over the network to {plugin} ({pluginHost}) for {types}.`,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`,edit_worker:`Edit Worker`,server_addresses_hint:`Which of the worker's IP addresses the plugins running on it use, for example HomeKit. Empty means all of them.`,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}`,status:`Status`,state_expected:`Connecting`,state_unreachable:`Not reachable since {time}`,state_unreachable_short:`Not reachable`,state_no_answers:`Answers do not arrive`,state_restarting:`Restarting`,state_offline:`Offline since {time}`,state_outdated:`Outdated: v{version}, update needed`,state_outdated_short:`Outdated`,state_releasing:`Releasing`,state_released:`Disabled`,state_conflict:`Two devices use the identity of {name}`,state_conflict_short:`Identity conflict`,state_moves_at:`From {time} its work runs elsewhere`,workloads:`Workloads`,workload_provisioning:`Installing`,workload_spawning:`Starting`,workload_running:`Running`,workload_stopping:`Stopping`,workload_backoff:`Waiting to restart`,workload_stopped:`Stopped`,workload_failed:`Failed`,update_installing:`Installing the update`,update_staged:`Update installed, restarting`,update_restarting:`Restarting for the update`,update_rolled_back:`The update to {version} was rolled back: {reason}`,update_swap_failed:`The update to {version} did not apply: {reason}`,moving:`Moving {name} to {host}`,moving_local:`Moving {name} to this master`,move_plugin:`Move Plugin`,move_plugins:`Move Plugins`,move_plugin_confirm:`Move {plugin} from {from} to {to}? Files it keeps on {from} stay there, such as downloaded models. On {to} it starts without them.`,move_plugins_confirm:`Move {plugins}? Files they keep on their current host stay there, such as downloaded models. On the new host they start without them.`,move_plugin_item:`{plugin} from {from} to {to}`,move:`Move`,fallback:`Fallback`,fallback_hint:`Run on this master while the worker is away`,fallback_unavailable:`This master cannot run this plugin`,fallback_no_worker:`Only with a worker assigned`,not_running:`Not running`,replaces:`Replaces`,replaces_none:`New worker`,replaces_hint:`Only needed when a device shows up with the identity of a worker that is still online, such as a copy of its volume. The code then takes over that worker.`,ca_fingerprint:`Master fingerprint`,ca_fingerprint_hint:`The worker logs the same fingerprint when it pairs.`,pairing_expired:`Expired, generate a new code`,acceptor_error:`Workers cannot connect: {error}. camera.ui keeps trying.`}}}},Ro=[..._r],zo={de:`German (de)`,en:`English (en)`},Bo=e=>{let t=(e??(typeof window<`u`?window:void 0)?.navigator?.language??`en`).toLowerCase().split(`-`)[0];return Vo(t)},Vo=e=>Ro.find(t=>t===e)??`en`,Ho=Tt({locale:Bo(),fallbackLocale:`en`,legacy:!1,globalInjection:!0,messages:Lo}),Uo=kt(`cui-toast`);function Wo(e){return e instanceof Error}function Go(){let e=ar();return{add:t=>{if(t.severity===`error`&&qn.isCancel(t.detail)){if(!CL(t.detail))return;t.detail=Ho.global.t(`connection.not_connected`)}t.detail===``&&(t.detail=void 0),t.severity===`error`&&t.detail&&e.error(`Error detail:`,t.detail),Uo.emit({...t,detail:Wo(t.detail)?zL(t.detail):t.detail})},dismiss:e=>{Uo.emit({type:`dismiss`,id:e})}}}function Ko(e){let t=Kn(e),n=V(()=>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 qo({userData:e}){return(await $.post(`/users`,e)).data}async function Jo({username:e,signal:t}){return(await $.get(`/users/${e}`,{signal:t})).data}async function Yo({parameter:e,signal:t}){return(await $.get(`/users`,{params:e,signal:t})).data}async function Xo({username:e,userData:t}){return(await $.patch(`/users/${e}`,t)).data}async function Zo({username:e}){return(await $.delete(`/users/${e}`)).data}async function Qo(){return(await $.delete(`/users`)).data}async function $o({username:e,cameraname:t,shortcutData:n}){return(await $.post(`/users/${e}/preferences/cameras/${t}/shortcuts`,n)).data}async function es({username:e,cameraname:t,shortcutid:n,signal:r}){return(await $.get(`/users/${e}/preferences/cameras/${t}/shortcuts/${n}`,{signal:r})).data}async function ts({username:e,cameraname:t,signal:n}){return(await $.get(`/users/${e}/preferences/cameras/${t}/shortcuts`,{signal:n})).data}async function ns({username:e,cameraname:t,shortcutid:n,shortcutData:r}){return(await $.patch(`/users/${e}/preferences/cameras/${t}/shortcuts/${n}`,r)).data}async function rs({username:e,cameraname:t,shortcutid:n}){return(await $.delete(`/users/${e}/preferences/cameras/${t}/shortcuts/${n}`)).data}async function is({username:e,cameraname:t}){return(await $.delete(`/users/${e}/preferences/cameras/${t}/shortcuts`)).data}async function as({username:e,viewData:t}){return(await $.post(`/users/${e}/preferences/camview/views`,t)).data}async function os({username:e,viewid:t,signal:n}){return(await $.get(`/users/${e}/preferences/camview/views/${t}`,{signal:n})).data}async function ss({username:e,parameter:t,signal:n}){return(await $.get(`/users/${e}/preferences/camview/views`,{params:t,signal:n})).data}async function cs({username:e,viewid:t,viewData:n}){return(await $.patch(`/users/${e}/preferences/camview/views/${t}`,n)).data}async function ls({username:e,viewid:t}){return(await $.delete(`/users/${e}/preferences/camview/views/${t}`)).data}async function us({username:e}){return(await $.delete(`/users/${e}/preferences/camview/views`)).data}async function ds({username:e,signal:t}){return(await $.get(`/users/${e}/preferences/hidden-event-types`,{signal:t})).data}async function fs({username:e,hidden:t}){return(await $.put(`/users/${e}/preferences/hidden-event-types`,t)).data}var ps=class{_queryClient=$n();t=Ho.global.t;toast=Go();queryActivator=P([{name:`getUserQuery`,enabled:!0},{name:`getUsersQuery`,enabled:!0},{name:`getShortcutQuery`,enabled:!0},{name:`getShortcutsQuery`,enabled:!0},{name:`getViewQuery`,enabled:!0},{name:`getViewsQuery`,enabled:!0},{name:`getHiddenEventTypesQuery`,enabled:!0}]);get queryClient(){return this._queryClient}createUserQuery(){return nr({mutationFn:qo,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 Ko({queryKey:[`users`,e],queryFn:({signal:t})=>Jo({username:H(e),signal:t}),enabled:()=>!!H(e)&&this.queryActivator.value.some(e=>e.name===`getUserQuery`&&e.enabled)})}getUsersQuery(e){return Ko({queryKey:[`usersList`,e],queryFn:({signal:t})=>Yo({parameter:H(e),signal:t}),placeholderData:e=>e,enabled:()=>this.queryActivator.value.some(e=>e.name===`getUsersQuery`&&e.enabled)})}patchUserQuery(){return nr({mutationFn:async({username:e,userData:t})=>{await Xo({username:e,userData:t})},onSuccess:async(e,t)=>{await this._queryClient.refetchQueries({queryKey:[`users`,t.username]})}})}removeUserQuery(){return nr({mutationFn:Zo,onSuccess:async()=>{await this._queryClient.refetchQueries({queryKey:[`usersList`]}),this.toast.add({severity:`success`,detail:this.t(`components.toast.user_removed`),life:3e3})}})}removeUsersQuery(){return nr({mutationFn:Qo,onSuccess:async()=>{await this._queryClient.refetchQueries({queryKey:[`usersList`]}),this.toast.add({severity:`success`,detail:this.t(`components.toast.users_removed`),life:3e3})}})}getHiddenEventTypesQuery(e){return Ko({queryKey:[`hiddenEventTypes`,e],queryFn:({signal:t})=>ds({username:H(e),signal:t}),enabled:()=>!!H(e)&&this.queryActivator.value.some(e=>e.name===`getHiddenEventTypesQuery`&&e.enabled)})}putHiddenEventTypesQuery(){return nr({mutationFn:fs,onMutate:async({username:e,hidden:t})=>{let n=[`hiddenEventTypes`,e];await this._queryClient.cancelQueries({queryKey:n});let r=this._queryClient.getQueryData(n);return this._queryClient.setQueryData(n,t),{previous:r}},onError:(e,{username:t},n)=>{this._queryClient.setQueryData([`hiddenEventTypes`,t],n?.previous)},onSuccess:(e,{username:t})=>{this._queryClient.setQueryData([`hiddenEventTypes`,t],e)}})}createShortcutQuery(){return nr({mutationFn:$o,onSuccess:async(e,t)=>{await this._queryClient.refetchQueries({queryKey:[`shortcutsList`,t.username]})}})}getShortcutQuery(e,t,n){return Ko({queryKey:[`shortcutsList`,e,t,n],queryFn:({signal:r})=>es({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 Ko({queryKey:[`shortcutsList`,e,t],queryFn:({signal:n})=>ts({username:H(e),cameraname:H(t),signal:n}),placeholderData:e=>e,enabled:()=>this.queryActivator.value.some(e=>e.name===`getShortcutsQuery`&&e.enabled)})}patchShortcutQuery(){return nr({mutationFn:ns,onSuccess:async(e,t)=>{await this._queryClient.refetchQueries({queryKey:[`shortcutsList`,t.username]})}})}removeShortcutQuery(){return nr({mutationFn:rs,onSuccess:async(e,t)=>{await this._queryClient.refetchQueries({queryKey:[`shortcutsList`,t.username]})}})}removeShortcutsQuery(){return nr({mutationFn:is,onSuccess:async(e,t)=>{await this._queryClient.refetchQueries({queryKey:[`shortcutsList`,t.username]})}})}createViewQuery(){return nr({mutationFn:as,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 Ko({queryKey:[`viewsList`,e],queryFn:({signal:n})=>os({username:H(e),viewid:H(t),signal:n}),enabled:()=>this.queryActivator.value.some(e=>e.name===`getUserQuery`&&e.enabled)})}getViewsQuery(e,t){return Ko({queryKey:[`viewsList`,e,t],queryFn:({signal:n})=>ss({username:H(e),parameter:H(t),signal:n}),placeholderData:e=>e,enabled:()=>this.queryActivator.value.some(e=>e.name===`getViewsQuery`&&e.enabled)})}patchViewQuery(){return nr({mutationFn:cs,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 nr({mutationFn:cs,onSuccess:async(e,t)=>{await this._queryClient.invalidateQueries({queryKey:[`viewsList`,t.username],refetchType:`none`})}})}removeViewQuery(){return nr({mutationFn:ls,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 nr({mutationFn:us,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 ms(e){if(typeof e!=`string`)return null;try{let t=new URL(e);return t.protocol===`http:`||t.protocol===`https:`?t.origin:null}catch{return null}}async function hs(e,t={}){let n=window.location.hash.startsWith(`#`)?window.location.hash.substring(1):window.location.hash,r=new URLSearchParams(n),i=r.get(`auth`);if(!i)return!1;r.delete(`auth`);let a=r.toString(),o=a?`#${a}`:``;window.history.replaceState(null,``,window.location.pathname+window.location.search+o);let s;try{s=JSON.parse(atob(i))}catch{return!1}let c=ms(s._sourceUrl);c&&t.onRedirectInfo?.({sourceUrl:c,instanceName:s._instanceName??`Remote`});let l=!1;if(s.access_token&&s._id&&s.username&&s.role){let n={access:s.access_token,refresh:s.refresh_token,accessExpiresAt:C(s.access_token,s.access_token_expires_at),refreshExpiresAt:s.refresh_token_expires_at},r={url:Fa(),mode:`direct-lan`,priority:0};await e.seedAndRetry({endpoint:r,tokens:n},`home`),l=!0,t.onUser?.({_id:s._id,username:s.username,role:s.role,firstLogin:s.firstLogin,avatar:s.avatar})}return s._reset&&t.onReset?.(),l}var gs=31536e7,_s=3,vs=300,ys;async function bs(e,t=_s,n){for(let r=0;r<t;r++){try{let t=await fetch(e,{signal:n});if(t.ok)return await t.json();if(t.status===401||t.status===403)return null}catch{}r<t-1&&await ve(vs)}return null}function xs(e){return!!e?._id&&!!e.username&&!!e.role}function Ss(){return{access:`embed`,accessExpiresAt:Date.now()+gs}}function Cs(e){return{_id:e._id,username:e.username,role:e.role,firstLogin:e.firstLogin,avatar:e.avatar,navLayout:e.navLayout}}async function ws(e,t={}){ys=t.onUser;let n=Fa(),r=await bs(`${n}/api/auth/me`);if(!xs(r))return!1;let i={url:n,mode:`direct-lan`,priority:0};return await e.seedAndRetry({endpoint:i,tokens:Ss()},`home`),t.onUser?.(Cs(r)),!0}function Ts(e){return async t=>{try{return await e(t)}catch(e){if(!_e(e)||e.kind!==`needs-auth`)throw e;let n=await bs(`${t.endpoint.url}/api/auth/me`,1,t.signal);if(!xs(n))throw ye(`transient`,`embed session not ready`);return ys?.(Cs(n)),t.lastTokens?.access===`embed`?t.lastTokens:Ss()}}}function Es(e){return`twoFactorPending`in e&&e.twoFactorPending===!0}async function Ds(e,t,n,r){let i=await t.loginDirect(n,r);if(Es(i))return i;let a={url:n,mode:`direct-lan`,priority:0};return await e.seedAndRetry({endpoint:a,tokens:i.tokens}),i}async function Os(e,t,n,r){let i=await Ns(t,n,e),a=await t.loginDirect(i.endpoint.url,r);return Es(a)||await e.seedAndRetry({endpoint:i.endpoint,tokens:Fs(a.tokens,i.extraTokens)}),a}async function ks(e){let t=ZL();if(t.mode===`cloud`){if(!t.cloudSession)throw Error(`login(): cloud mode but cloudSession missing`);return Os(t.connection,t.api,t.cloudSession,e)}let n=ca.value??Fa();return Ds(t.connection,t.api,n,e)}async function As(e,t){let n=ZL(),r,i;if(n.mode===`cloud`){if(!n.cloudSession)throw Error(`verify2FA(): cloud mode but cloudSession missing`);let e=await Ns(n.api,n.cloudSession,n.connection);r=e.endpoint,i=e.extraTokens}else r={url:ca.value??Fa(),mode:`direct-lan`,priority:0};let a=await n.api.verify2FA(r.url,e,t);return await n.connection.seedAndRetry({endpoint:r,tokens:Fs(a.tokens,i)}),a}async function js(){let e=ZL();await Ms(e.connection,e.api)}async function Ms(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 Ns(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:Ps(e,t)})),...o.map(t=>({endpoint:{url:t,mode:`direct-wan`},run:Ps(e,t)}))];try{c=(await x(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 Ps(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 Fs(e,t){return t?{...e,...t}:e}var Is=1e4;async function Ls(){return Rs()?zs():{mode:`direct`,directEndpointUrl:Fa()}}function Rs(){return Oa?window.location.host===Oa:!1}async function zs(){try{let e=await fetch(`${Ta}/api/proxy/refresh`,{method:`POST`,credentials:`include`,signal:AbortSignal.timeout(Is)});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:C(t.proxy_token,t.proxy_token_expires_at),proxyRefreshTokenExpiresAt:t.proxy_refresh_token_expires_at,serverId:t.server_id??void 0,cloudApiBase:Ta}}:{mode:`cloud`}}catch{return{mode:`cloud`}}}var Bs=15e3;function Vs(e){let t=null,n=null,r=``,i=null,a;function o(e){return e.access!==a&&!!e.accessExpiresAt&&e.accessExpiresAt>Date.now()+Bs}async function s(a,s,c,l){if(r===a&&n&&o(n))return n;if(t)return t;let u=i?.getLatestTokens?.()??null;if(u&&o(u))return n=u,r=a,u;let d=u?.refresh??s;if(!d)throw Error(`no refresh token available`);t=(async()=>{let t=await e.refreshDirect(a,d,l),i={...c,...t.tokens};return n=i,r=a,i})();try{return await t}finally{t=null}}async function c(e,a,c,l){if(r===e&&n&&o(n))return n;if(t)return t;let u=i?.acquireLock;return u?u(()=>s(e,a,c,l)):s(e,a,c,l)}return{refresh:(e,t)=>(t===`auth-error`&&(a=e.tokens.access),s(e.endpoint.url,e.tokens.refresh,e.tokens)),getFreshTokens:({endpoint:e,refreshToken:t,base:n,signal:r})=>(n?.access&&(a=n.access),c(e,t,n,r)),bindCoordination:e=>{i=e},clear:()=>{n=null,r=``,t=null}}}function Hs(e,t){try{return new URL(e).origin===new URL(t).origin}catch{return!1}}function Us(e,t){let n=Za(),r=Ei(),i=Vs(n),a=qL(n,i);return{options:{adapters:{storage:ja(),visibilitySource:Ma(),networkSource:r.networkSource,networkChangeSource:r.networkChangeSource,wakeSource:ki()},callbacks:{discover:_o(e),probe:Ia()||Ba()?Ts(a):a,refresh:i.refresh,bindRefresh:i.bindCoordination,onConnectionReset:i.clear,ownsEndpoint:t=>Hs(t,ca.value??e)},transportOptions:Ba()?{http:{authorize:async()=>{}}}:void 0,logger:t,storageNamespace:Pa()?`embed:${Na()}`:void 0},api:n}}var Ws=3e4;function Gs(e){let t=fa(),n=Rt(!1),r=V(()=>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}function u(){let n=t.target.value?.endpoint.url;if(n&&i&&i===t.socketio.socket(e)||(l(),!n))return;let r=t.socketio.ensureSocket(e);r&&c(r)}let d=t.socketio.acquire(e),f=G([()=>t.target.value?.endpoint.url,t.signal],u,{immediate:!0}),p=t.socketio.onRebuild(u);mn(()=>{f(),p(),l(),a.clear(),d()});function m(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 h(e){return G(n,(t,n)=>{t&&!n&&e()},{immediate:!0})}function g(e,...t){i?.emit(e,...t)}function _(t,n,r){let a=i;if(!a||!a.connected)return Promise.reject(Error(`socket "${e}" not connected`));let o=r?.timeoutMs??Ws;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:m,onReady:h,emit:g,request:_}}function Ks(e){let t=Rt(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 qs=6e4;function Js(e,t=Date.now()){return!e.proxyTokenExpiresAt||e.proxyTokenExpiresAt>t+qs}function Ys(e,t=Date.now()){return e.proxyRefreshToken?!e.proxyRefreshTokenExpiresAt||e.proxyRefreshTokenExpiresAt>t:!1}function Xs(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&&Js(o))return;if(o&&Ys(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(!Zs(e))throw e;a?.warn(`cloud-session`,`RT rejected, falling through to L1`)}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;try{c=await t.remintProxyFromL1(o.cloudApiBase,o.serverId,s,e)}catch(e){throw Zs(e)&&await i?.(),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&&(Js(e)||s(new AbortController().signal).catch(()=>{}))}return{ensureFresh:s,wake:l}}function Zs(e){return qn.isAxiosError(e)&&(e.response?.status===401||e.response?.status===403)}var Qs=!1;function $s(){try{return ZL().cloudSession?.state.value?.serverId??null}catch{return null}}async function ec(){}async function tc(){try{ZL().cloudSession?.clear()}catch{}await ec()}function nc(){try{return ZL().mode===`cloud`}catch{return!1}}async function rc(){Qs||(Qs=!0,await tc(),window.location.host===Oa&&window.location.replace(Ta))}var ic={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function ac(e,t){return Y(),B(`svg`,ic,[...t[0]||=[J(`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 oc=I({name:`bx-cctv`,render:ac}),sc={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function cc(e,t){return Y(),B(`svg`,sc,[...t[0]||=[J(`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),J(`path`,{fill:`currentColor`,d:`M17 6h2v2h-2zm-3 0h2v2h-2zm3 10h2v2h-2zm-3 0h2v2h-2z`},null,-1)]])}var lc=I({name:`bx-server`,render:cc}),uc={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function dc(e,t){return Y(),B(`svg`,uc,[...t[0]||=[J(`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 fc=I({name:`bxs-cctv`,render:dc}),pc={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function mc(e,t){return Y(),B(`svg`,pc,[...t[0]||=[J(`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 hc=I({name:`bxs-server`,render:mc}),gc={viewBox:`0 0 36 36`,width:`1.2em`,height:`1.2em`};function _c(e,t){return Y(),B(`svg`,gc,[...t[0]||=[Dt(`<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 vc=I({name:`clarity-backup-restore-line`,render:_c}),yc={viewBox:`0 0 36 36`,width:`1.2em`,height:`1.2em`};function bc(e,t){return Y(),B(`svg`,yc,[...t[0]||=[J(`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),J(`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),J(`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),J(`path`,{fill:`none`,d:`M0 0h36v36H0z`},null,-1)]])}var xc=I({name:`clarity-backup-restore-solid`,render:bc}),Sc={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Cc(e,t){return Y(),B(`svg`,Sc,[...t[0]||=[J(`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 wc=I({name:`ic-outline-design-services`,render:Cc}),Tc={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Ec(e,t){return Y(),B(`svg`,Tc,[...t[0]||=[J(`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 Dc=I({name:`ic-round-design-services`,render:Ec}),Oc={viewBox:`0 0 48 48`,width:`1.2em`,height:`1.2em`};function kc(e,t){return Y(),B(`svg`,Oc,[...t[0]||=[J(`g`,{fill:`none`,stroke:`currentColor`,"stroke-width":`4`},[J(`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`}),J(`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 Ac=I({name:`icon-park-outline-circular-connection`,render:kc}),jc={viewBox:`0 0 48 48`,width:`1.2em`,height:`1.2em`};function Mc(e,t){return Y(),B(`svg`,jc,[...t[0]||=[J(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linejoin":`round`,"stroke-width":`4`},[J(`path`,{d:`M13 10h28v34H13z`}),J(`path`,{"stroke-linecap":`round`,d:`M35 10V4H8a1 1 0 0 0-1 1v33h6m8-16h12m-12 8h12`})],-1)]])}var Nc=I({name:`icon-park-outline-log`,render:Mc}),Pc={viewBox:`0 0 48 48`,width:`1.2em`,height:`1.2em`};function Fc(e,t){return Y(),B(`svg`,Pc,[...t[0]||=[J(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linejoin":`round`,"stroke-width":`4`},[J(`rect`,{width:`40`,height:`32`,x:`4`,y:`8`,rx:`2`}),J(`path`,{"stroke-linecap":`round`,d:`m12 18l7 6l-7 6m11 2h13`})],-1)]])}var Ic=I({name:`icon-park-outline-terminal`,render:Fc}),Lc={viewBox:`0 0 48 48`,width:`1.2em`,height:`1.2em`};function Rc(e,t){return Y(),B(`svg`,Lc,[...t[0]||=[J(`g`,{fill:`none`,stroke:`currentColor`,"stroke-width":`4`},[J(`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`}),J(`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 zc=I({name:`icon-park-solid-circular-connection`,render:Rc}),Bc={viewBox:`0 0 48 48`,width:`1.2em`,height:`1.2em`},Vc=[`id`],Hc=[`mask`];function Uc(e,t){return Y(),B(`svg`,Bc,[J(`defs`,null,[J(`mask`,{id:e.idMap.SVGzmZ6hexT},[...t[0]||=[J(`g`,{fill:`none`,"stroke-linejoin":`round`,"stroke-width":`4`},[J(`path`,{fill:`#fff`,stroke:`#fff`,d:`M13 10h28v34H13z`}),J(`path`,{stroke:`#fff`,"stroke-linecap":`round`,d:`M35 10V4H8a1 1 0 0 0-1 1v33h6`}),J(`path`,{stroke:`#000`,"stroke-linecap":`round`,d:`M21 22h12m-12 8h12`})],-1)]],8,Vc)]),J(`path`,{fill:`currentColor`,d:`M0 0h48v48H0z`,mask:`url(#`+e.idMap.SVGzmZ6hexT+`)`},null,8,Hc)])}var Wc=I({name:`icon-park-solid-log`,render:Uc,setup(){return{idMap:{SVGzmZ6hexT:`uicons-`+Math.random().toString(36).substr(2,10)}}}}),Gc={viewBox:`0 0 48 48`,width:`1.2em`,height:`1.2em`},Kc=[`id`],qc=[`mask`];function Jc(e,t){return Y(),B(`svg`,Gc,[J(`defs`,null,[J(`mask`,{id:e.idMap.SVGXE6zpcEE},[...t[0]||=[J(`g`,{fill:`none`,"stroke-linejoin":`round`,"stroke-width":`4`},[J(`rect`,{width:`40`,height:`32`,x:`4`,y:`8`,fill:`#fff`,stroke:`#fff`,rx:`2`}),J(`path`,{stroke:`#000`,"stroke-linecap":`round`,d:`m12 18l7 6l-7 6m11 2h13`})],-1)]],8,Kc)]),J(`path`,{fill:`currentColor`,d:`M0 0h48v48H0z`,mask:`url(#`+e.idMap.SVGXE6zpcEE+`)`},null,8,qc)])}var Yc=I({name:`icon-park-solid-terminal`,render:Jc,setup(){return{idMap:{SVGXE6zpcEE:`uicons-`+Math.random().toString(36).substr(2,10)}}}}),Xc={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Zc(e,t){return Y(),B(`svg`,Xc,[...t[0]||=[J(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-5M9 3v7m12 0h-7M3 15h9`},null,-1)]])}var Qc=I({name:`lucide-lab-floor-plan`,render:Zc}),$c={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function el(e,t){return Y(),B(`svg`,$c,[...t[0]||=[J(`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 tl=I({name:`material-symbols-automation`,render:el}),nl={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function rl(e,t){return Y(),B(`svg`,nl,[...t[0]||=[J(`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 il=I({name:`material-symbols-automation-outline`,render:rl}),al={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function ol(e,t){return Y(),B(`svg`,al,[...t[0]||=[J(`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 sl=I({name:`material-symbols-cloud`,render:ol}),cl={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function ll(e,t){return Y(),B(`svg`,cl,[...t[0]||=[J(`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 ul=I({name:`material-symbols-cloud-outline`,render:ll}),dl={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function fl(e,t){return Y(),B(`svg`,dl,[...t[0]||=[J(`path`,{fill:`currentColor`,d:`m18 22l3-3l-.7-.7l-1.8 1.8V16h-1v4.1l-1.8-1.8l-.7.7zm-6-11.15L6.075 7.425L5 8.05V9.1l7 4.05l7-4.05V8.05l-1.075-.625zm-1 10.875L4 17.7q-.475-.275-.737-.725t-.263-1v-7.95q0-.55.263-1T4 6.3l7-4.025Q11.475 2 12 2t1 .275L20 6.3q.475.275.738.725t.262 1v4.65q-.675-.325-1.437-.5T18 12q-2.9 0-4.95 2.05T11 19q0 .8.163 1.538t.487 1.412q-.175-.05-.337-.087T11 21.725m3.463.813Q13 21.075 13 19t1.463-3.537T18 14t3.538 1.463T23 19t-1.463 3.538T18 24t-3.537-1.463`},null,-1)]])}var pl=I({name:`material-symbols-deployed-code-update`,render:fl}),ml={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function hl(e,t){return Y(),B(`svg`,ml,[...t[0]||=[J(`path`,{fill:`currentColor`,d:`m18 22l3-3l-.7-.7l-1.8 1.8V16h-1v4.1l-1.8-1.8l-.7.7zM12 4L6.075 7.425L12 10.85l5.925-3.425zM3 15.975v-7.95q0-.55.263-1T4 6.3l7-4.025q.25-.125.488-.2T12 2t.525.075t.475.2L20 6.3q.475.275.738.725t.262 1V12h-2V9.1l-7.025 4.05L5 9.1v6.85l6 3.475v2.3L4 17.7q-.475-.275-.737-.725t-.263-1m11.463 6.563Q13 21.075 13 19t1.463-3.537T18 14t3.538 1.463T23 19t-1.463 3.538T18 24t-3.537-1.463M12 11.726`},null,-1)]])}var gl=I({name:`material-symbols-deployed-code-update-outline`,render:hl}),_l={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function vl(e,t){return Y(),B(`svg`,_l,[...t[0]||=[J(`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 yl=I({name:`material-symbols-home-iot-device`,render:vl}),bl={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function xl(e,t){return Y(),B(`svg`,bl,[...t[0]||=[J(`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 Sl=I({name:`material-symbols-home-iot-device-outline`,render:xl}),Cl={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function wl(e,t){return Y(),B(`svg`,Cl,[...t[0]||=[J(`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 Tl=I({name:`material-symbols-home-outline-rounded`,render:wl}),El={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Dl(e,t){return Y(),B(`svg`,El,[...t[0]||=[J(`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 Ol=I({name:`material-symbols-home-rounded`,render:Dl}),kl={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Al(e,t){return Y(),B(`svg`,kl,[...t[0]||=[J(`path`,{fill:`currentColor`,d:`M5.15 18.85q-1.025-1.2-1.588-2.687T3 13q0-3.75 2.625-6.375T12 4h.2l-1.6-1.6L12 1l4 4l-4 4l-1.425-1.425L12.15 6H12Q9.1 6 7.05 8.05T5 13q0 1.275.412 2.4t1.163 2.025zM11 18.5q0-.575-.387-1.137t-.863-1.175t-.862-1.275T8.5 13.5q0-1.45 1.025-2.475T12 10t2.475 1.025T15.5 13.5q0 .75-.387 1.413t-.863 1.274t-.862 1.175T13 18.5zm0 2.5v-1.5h2V21zm7.85-2.15l-1.425-1.425q.75-.9 1.163-2.025T19 13q0-1.65-.687-3.062t-1.888-2.363L17.85 6.15q1.45 1.25 2.3 3.013T21 13q0 1.675-.562 3.163T18.85 18.85`},null,-1)]])}var jl=I({name:`material-symbols-model-training`,render:Al}),Ml={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Nl(e,t){return Y(),B(`svg`,Ml,[...t[0]||=[J(`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 Pl=I({name:`mdi-account-circle`,render:Nl}),Fl={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Il(e,t){return Y(),B(`svg`,Fl,[...t[0]||=[J(`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 Ll=I({name:`mdi-account-circle-outline`,render:Il}),Rl={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function zl(e,t){return Y(),B(`svg`,Rl,[...t[0]||=[J(`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 Bl=I({name:`mdi-bell`,render:zl}),Vl={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Hl(e,t){return Y(),B(`svg`,Vl,[...t[0]||=[J(`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 Ul=I({name:`mdi-bug`,render:Hl}),Wl={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Gl(e,t){return Y(),B(`svg`,Wl,[...t[0]||=[J(`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 Kl=I({name:`mdi-bug-outline`,render:Gl}),ql={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Jl(e,t){return Y(),B(`svg`,ql,[...t[0]||=[J(`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 Yl=I({name:`mdi-cog`,render:Jl}),Xl={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Zl(e,t){return Y(),B(`svg`,Xl,[...t[0]||=[J(`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 Ql=I({name:`mdi-note-edit`,render:Zl}),$l={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function eu(e,t){return Y(),B(`svg`,$l,[...t[0]||=[J(`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 tu=I({name:`mdi-note-edit-outline`,render:eu}),nu={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function ru(e,t){return Y(),B(`svg`,nu,[...t[0]||=[J(`path`,{fill:`currentColor`,d:`M12 2a2 2 0 0 1 2 2c0 .74-.4 1.39-1 1.73V7h1a7 7 0 0 1 7 7h1a1 1 0 0 1 1 1v3a1 1 0 0 1-1 1h-1v1a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-1H2a1 1 0 0 1-1-1v-3a1 1 0 0 1 1-1h1a7 7 0 0 1 7-7h1V5.73c-.6-.34-1-.99-1-1.73a2 2 0 0 1 2-2M7.5 13A2.5 2.5 0 0 0 5 15.5A2.5 2.5 0 0 0 7.5 18a2.5 2.5 0 0 0 2.5-2.5A2.5 2.5 0 0 0 7.5 13m9 0a2.5 2.5 0 0 0-2.5 2.5a2.5 2.5 0 0 0 2.5 2.5a2.5 2.5 0 0 0 2.5-2.5a2.5 2.5 0 0 0-2.5-2.5`},null,-1)]])}var iu=I({name:`mdi-robot`,render:ru}),au={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function ou(e,t){return Y(),B(`svg`,au,[...t[0]||=[J(`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 su=I({name:`mdi-shield-check`,render:ou}),cu={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function lu(e,t){return Y(),B(`svg`,cu,[...t[0]||=[J(`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 uu=I({name:`mdi-shield-check-outline`,render:lu}),du={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function fu(e,t){return Y(),B(`svg`,du,[...t[0]||=[J(`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 pu=I({name:`mdi-users`,render:fu}),mu={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function hu(e,t){return Y(),B(`svg`,mu,[...t[0]||=[J(`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 gu=I({name:`mdi-users-outline`,render:hu}),_u={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function vu(e,t){return Y(),B(`svg`,_u,[...t[0]||=[J(`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 yu=I({name:`mingcute-grid-fill`,render:vu}),bu={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function xu(e,t){return Y(),B(`svg`,bu,[...t[0]||=[J(`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 Su=I({name:`mingcute-grid-line`,render:xu}),Cu={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function wu(e,t){return Y(),B(`svg`,Cu,[...t[0]||=[J(`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 Tu=I({name:`mingcute-photo-album-fill`,render:wu}),Eu={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Du(e,t){return Y(),B(`svg`,Eu,[...t[0]||=[J(`path`,{fill:`currentColor`,d:`M17 11a.5.5 0 1 1-1 0a.5.5 0 0 1 1 0`},null,-1),J(`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 Ou=I({name:`mingcute-photo-album-line`,render:Du}),ku={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Au(e,t){return Y(),B(`svg`,ku,[...t[0]||=[J(`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 ju=I({name:`mingcute-settings-2-fill`,render:Au}),Mu={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Nu(e,t){return Y(),B(`svg`,Mu,[...t[0]||=[J(`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 Pu=I({name:`mingcute-settings-2-line`,render:Nu}),Fu={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Iu(e,t){return Y(),B(`svg`,Fu,[...t[0]||=[Dt(`<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 Lu=I({name:`proicons-grid-dots`,render:Iu}),Ru={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function zu(e,t){return Y(),B(`svg`,Ru,[...t[0]||=[J(`path`,{fill:`currentColor`,"fill-rule":`evenodd`,d:`M3.46447 3.46447C2 4.92893 2 7.28595 2 12C2 16.714 2 19.0711 3.46447 20.5355C4.92893 22 7.28595 22 12 22C16.714 22 19.0711 22 20.5355 20.5355C22 19.0711 22 16.714 22 12C22 7.28595 22 4.92893 20.5355 3.46447C19.0711 2 16.714 2 12 2C7.28595 2 4.92893 2 3.46447 3.46447ZM17.5762 10.4801C17.8413 10.1619 17.7983 9.68901 17.4801 9.42383C17.1619 9.15866 16.689 9.20165 16.4238 9.51986L14.6269 11.6761C14.2562 12.1211 14.0284 12.3915 13.8409 12.5609C13.7539 12.6394 13.7023 12.6708 13.6775 12.6827C13.6725 12.6852 13.6689 12.6866 13.6667 12.6875C13.6667 12.6875 13.6624 12.6858 13.659 12.6842L13.6558 12.6827C13.6311 12.6708 13.5795 12.6394 13.4925 12.5609C13.3049 12.3915 13.0772 12.1211 12.7064 11.6761L12.414 11.3252C12.0855 10.931 11.7894 10.5756 11.5128 10.3258C11.2119 10.0541 10.8328 9.81205 10.3333 9.81205C9.83384 9.81205 9.45478 10.0541 9.15384 10.3258C8.87725 10.5756 8.58113 10.931 8.25267 11.3253L6.42383 13.5199C6.15866 13.8381 6.20165 14.311 6.51986 14.5762C6.83807 14.8413 7.31099 14.7983 7.57617 14.4801L9.37306 12.3239C9.74385 11.8789 9.97155 11.6085 10.1591 11.4391C10.2461 11.3606 10.2977 11.3292 10.3225 11.3173C10.3251 11.316 10.3274 11.315 10.3292 11.3142L10.3333 11.3125C10.3356 11.3134 10.3392 11.3148 10.3442 11.3173C10.3689 11.3292 10.4205 11.3606 10.5075 11.4391C10.6951 11.6085 10.9228 11.8789 11.2936 12.3239L11.586 12.6748C11.9145 13.069 12.2106 13.4244 12.4872 13.6742C12.7881 13.9459 13.1672 14.188 13.6667 14.188C14.1662 14.188 14.5452 13.9459 14.8462 13.6742C15.1228 13.4244 15.4189 13.069 15.7473 12.6748L17.5762 10.4801Z`,"clip-rule":`evenodd`},null,-1)]])}var Bu=I({name:`solar-graph-bold`,render:zu}),Vu={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Hu(e,t){return Y(),B(`svg`,Vu,[...t[0]||=[J(`g`,{fill:`currentColor`},[J(`path`,{d:`M17.5762 10.4801C17.8413 10.1619 17.7983 9.68901 17.4801 9.42383C17.1619 9.15866 16.689 9.20165 16.4238 9.51986L14.6269 11.6761C14.2562 12.1211 14.0284 12.3915 13.8409 12.5609C13.7539 12.6394 13.7023 12.6708 13.6775 12.6827C13.6725 12.6852 13.6689 12.6866 13.6667 12.6875C13.6644 12.6866 13.6608 12.6852 13.6558 12.6827C13.6311 12.6708 13.5795 12.6394 13.4925 12.5609C13.3049 12.3915 13.0772 12.1211 12.7064 11.6761L12.414 11.3252C12.0855 10.931 11.7894 10.5756 11.5128 10.3258C11.2119 10.0541 10.8328 9.81205 10.3333 9.81205C9.83385 9.81205 9.45478 10.0541 9.15384 10.3258C8.87725 10.5756 8.58113 10.931 8.25267 11.3253L6.42383 13.5199C6.15866 13.8381 6.20165 14.311 6.51986 14.5762C6.83807 14.8413 7.31099 14.7983 7.57617 14.4801L9.37306 12.3239C9.74385 11.8789 9.97155 11.6085 10.1591 11.4391C10.2461 11.3606 10.2977 11.3292 10.3225 11.3173C10.3275 11.3148 10.3311 11.3134 10.3333 11.3125C10.3356 11.3134 10.3392 11.3148 10.3442 11.3173C10.3689 11.3292 10.4205 11.3606 10.5075 11.4391C10.6951 11.6085 10.9228 11.8789 11.2936 12.3239L11.586 12.6748C11.9145 13.069 12.2106 13.4244 12.4872 13.6742C12.7881 13.9459 13.1672 14.188 13.6667 14.188C14.1662 14.188 14.5452 13.9459 14.8462 13.6742C15.1228 13.4244 15.4189 13.069 15.7473 12.6748L17.5762 10.4801Z`}),J(`path`,{"fill-rule":`evenodd`,d:`M11.9426 1.25C9.63423 1.24999 7.82519 1.24998 6.41371 1.43975C4.96897 1.63399 3.82895 2.03933 2.93414 2.93414C2.03933 3.82895 1.63399 4.96897 1.43975 6.41371C1.24998 7.82519 1.24999 9.63423 1.25 11.9426V12.0574C1.24999 14.3658 1.24998 16.1748 1.43975 17.5863C1.63399 19.031 2.03933 20.1711 2.93414 21.0659C3.82895 21.9607 4.96897 22.366 6.41371 22.5603C7.82519 22.75 9.63423 22.75 11.9426 22.75H12.0574C14.3658 22.75 16.1748 22.75 17.5863 22.5603C19.031 22.366 20.1711 21.9607 21.0659 21.0659C21.9607 20.1711 22.366 19.031 22.5603 17.5863C22.75 16.1748 22.75 14.3658 22.75 12.0574V11.9426C22.75 9.63423 22.75 7.82519 22.5603 6.41371C22.366 4.96897 21.9607 3.82895 21.0659 2.93414C20.1711 2.03933 19.031 1.63399 17.5863 1.43975C16.1748 1.24998 14.3658 1.24999 12.0574 1.25H11.9426ZM3.9948 3.9948C4.56445 3.42514 5.33517 3.09825 6.61358 2.92637C7.91356 2.75159 9.62178 2.75 12 2.75C14.3782 2.75 16.0864 2.75159 17.3864 2.92637C18.6648 3.09825 19.4355 3.42514 20.0052 3.9948C20.5749 4.56445 20.9018 5.33517 21.0736 6.61358C21.2484 7.91356 21.25 9.62178 21.25 12C21.25 14.3782 21.2484 16.0864 21.0736 17.3864C20.9018 18.6648 20.5749 19.4355 20.0052 20.0052C19.4355 20.5749 18.6648 20.9018 17.3864 21.0736C16.0864 21.2484 14.3782 21.25 12 21.25C9.62178 21.25 7.91356 21.2484 6.61358 21.0736C5.33517 20.9018 4.56445 20.5749 3.9948 20.0052C3.42514 19.4355 3.09825 18.6648 2.92637 17.3864C2.75159 16.0864 2.75 14.3782 2.75 12C2.75 9.62178 2.75159 7.91356 2.92637 6.61358C3.09825 5.33517 3.42514 4.56445 3.9948 3.9948Z`,"clip-rule":`evenodd`})],-1)]])}var Uu=I({name:`solar-graph-outline`,render:Hu}),Wu={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Gu(e,t){return Y(),B(`svg`,Wu,[...t[0]||=[J(`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 Ku=I({name:`tabler-puzzle-filled`,render:Gu}),qu=`cui-chunk-reload`,Ju=2,Yu=8e3;function Xu(e){let t=Number(sessionStorage.getItem(qu)??`0`)||0;t>=Ju||(sessionStorage.setItem(qu,String(t+1)),e())}function Zu(e=Yu){setTimeout(()=>sessionStorage.removeItem(qu),e)}var Qu=0,$u=!1,ed;function td(){return ed??window.scrollY-Qu}function nd(){return Qu!==0}function rd(){return ed!==void 0}function id(e){ed=void 0,dd(window.scrollY,e)}function ad(e=td()){ed===void 0&&dd($u?0:e,e)}function od(){$u=!0,ed===void 0&&dd(0,td())}function sd(){$u=!1,ad()}function cd(){if(ed!==void 0)return;let e=td();dd(0,0),ed=e}function ld(){if(ed===void 0)return;let e=ed;ed=void 0,ad(e)}function ud(){ed=void 0}function dd(e,t){Qu=e-t,Qu?(document.body.style.marginTop=`${Qu}px`,document.documentElement.style.paddingBottom=`${Math.max(screen.width,screen.height)}px`):(document.body.style.removeProperty(`margin-top`),document.documentElement.style.removeProperty(`padding-bottom`)),document.documentElement.classList.toggle(`cui-page-held`,Qu!==0),window.scrollY!==e&&window.scrollTo({top:e,behavior:`instant`})}var fd=Bt(new Map),pd=Rt();function md(){pd.value?pd.value():window.scrollTo({top:0,behavior:`smooth`})}function hd(){return{hasSlot:e=>(fd.get(e)||0)>0,registerSlot:e=>{fd.set(e,(fd.get(e)||0)+1),Fn(()=>{let t=fd.get(e)||0;t<=1?fd.delete(e):fd.set(e,t-1)})},registerScrollToTop:e=>{pd.value=e,Fn(()=>{pd.value===e&&(pd.value=void 0)})},scrollToTop:md}}function gd(){let e=An(`(min-width: 40rem)`),t=An(`(min-width: 48rem)`),n=An(`(min-width: 64rem)`),r=An(`(min-width: 80rem)`),i=An(`(min-width: 96rem)`);return{xxsBreakpoint:An(`(max-width: 360px)`),xsBreakpoint:An(`(max-width: 450px)`),shortBreakpoint:An(`(max-height: 500px)`),smBreakpoint:V(()=>!e.value),mdBreakpoint:V(()=>!t.value),xmdBreakpoint:V(()=>e.value&&!n.value),lgBreakpoint:V(()=>n.value),xlBreakpoint:V(()=>r.value),xxlBreakpoint:V(()=>i.value)}}function _d(){let e=V(()=>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=V(()=>typeof window>`u`?!1:[/Android/i].some(e=>navigator.userAgent.match(e))),n=V(()=>typeof window>`u`?!1:r.value||i.value),r=V(()=>typeof window>`u`?!1:[/iPhone/i].some(e=>navigator.userAgent.match(e))),i=V(()=>typeof window>`u`?!1:[/Macintosh/i].some(e=>navigator.userAgent.match(e)&&navigator.maxTouchPoints&&navigator.maxTouchPoints>1)),a=V(()=>typeof window>`u`?[0,0]:r.value&&navigator.userAgent.match(/OS [\d_]+/i)?.[0].substr(3).split(`_`).map(e=>parseInt(e))||[0,0]),o=V(()=>typeof window>`u`?!1:[/Safari/i].some(e=>navigator.userAgent.match(e))),s=V(()=>typeof window>`u`?null:navigator.userAgent.match(/Version\/(\d+).+Safari/)),c=V(()=>typeof window>`u`?!1:[/Firefox/i].some(e=>navigator.userAgent.match(e))),l=V(()=>typeof window>`u`?!1:[/Chrome/i].some(e=>navigator.userAgent.match(e))),u=V(()=>{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=V(()=>Fd(`(display-mode: standalone)`).value||window.navigator.standalone||document.referrer.includes(`android-app://`)),f=V(()=>{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:V(()=>{let e=`pictureInPictureEnabled`in document;return n.value&&d.value?!1:e}),isFsSupported:f}}var vd={HEIGHT:70},{isElectronApp:yd}=or(),bd={HEIGHT:60,ELECTRON_OFFSET:yd?30:0},xd=[`account`,`appearance`,`user`,`notifications`,`permissions`,`recordings`,`remote`,`backup`,`system`],Sd={cameras:{showEvents:!0,order:[],groupOrder:{},viewMode:`default`,dragDisabled:!0},camview:{dragDisabled:!1,detections:!0},config:{zoom:12},console:{zoom:12},interface:{showBottomBarOnMobile:!0,selectedSettingsView:`account`,navbarStayCollapsed:!0,landingPage:`/home`,tableRows:15},sensors:{hideAllCameraBound:!1,onlyEnabledCameraBound:!0},plugins:{view:`cards`},"cui-logger-debug":1,"cui-logger-recording":1},Cd=zn(`ui`,()=>{let e=Ft(`ui`,Sd,{mergeDefaults:!0});return e.value.interface.landingPage??=`/home`,e.value.interface.tableRows??=15,e.value.camview.detections??=!0,e.value.sensors.hideAllCameraBound??=!1,e.value.sensors.onlyEnabledCameraBound??=!0,{uiSettings:e}});function wd(){let e=Vn(),t=V(()=>e.meta.ui);return{ui:t,showNavbar:V(()=>!!R(t.value?.showNavbar)),showTopbar:V(()=>!!R(t.value?.showTopbar)),showBottombar:V(()=>!!R(t.value?.showBottombar)),showRouterLoading:V(()=>!!R(t.value?.showRouterLoading)),showRouterLoadingSub:V(()=>!!R(t.value?.showRouterLoadingSub)),minifiedTopbar:V(()=>!!R(t.value?.minifiedTopbar)),background:V(()=>R(t.value?.background)),padding:V(()=>!!R(t.value?.containerSettings?.padding)),paddingTop:V(()=>R(t.value?.containerSettings?.paddingTop)),paddingBottom:V(()=>R(t.value?.containerSettings?.paddingBottom)),paddingLeft:V(()=>R(t.value?.containerSettings?.paddingLeft)),paddingRight:V(()=>R(t.value?.containerSettings?.paddingRight)),showTitle:V(()=>!!R(t.value?.containerSettings?.showTitle)),fullwidth:V(()=>!!R(t.value?.containerSettings?.fullwidth)),disableScroll:V(()=>!!R(t.value?.containerSettings?.disableScroll)),flushBottom:V(()=>!!R(t.value?.containerSettings?.flushBottom)),allowOverflowX:V(()=>!!R(t.value?.containerSettings?.allowOverflowX))}}var Td=Symbol(`cui-app-bus`),Ed=Bt({navbarState:void 0,subbarState:void 0});function Dd(){Ed.navbarState=void 0,Ed.subbarState=void 0}function Od(){let e=kt(Td);return e.on(({subbarState:e,navbarState:t})=>{e&&e!==Ed.subbarState&&(Ed.subbarState=e),t&&t!==Ed.navbarState&&(Ed.navbarState=t)}),{state:Ed,bus:e}}function kd(){let e=Cd(),t=Vn(),n=wd(),{state:r}=Od(),{mdBreakpoint:i,smBreakpoint:a,xlBreakpoint:o}=Md(),{uiSettings:s}=Zt(e),c=V(()=>{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=V(()=>t.path.includes(`/settings`)?o.value?`opened`:r.subbarState?r.subbarState:`closed`:void 0),u=V(()=>n.showNavbar.value),d=V(()=>n.showBottombar.value&&s.value.interface.showBottomBarOnMobile&&a.value),f=V(()=>n.showTopbar.value),p=V(()=>f.value?n.minifiedTopbar.value?0:bd.HEIGHT:0);return{navbarState:c,subbarState:l,showBottombar:d,showNavbar:u,showTopbar:f,topbarHeight:p,topbarOffset:V(()=>f.value?p.value+bd.ELECTRON_OFFSET:0),bottombarHeight:V(()=>d.value?vd.HEIGHT:0)}}var Ad=xn(Nn),jd=xn(Nt),Md=xn(gd),Nd=xn(_d),Pd=xn(kd),Fd=xn(An),Id=10,Ld=24;function Rd(e){let t=P(!1),n=0,r=0;return G(()=>R(e),e=>{let i=e-n;n=e,e<=Id?(t.value=!1,r=0):i!==0&&(Math.sign(i)!==Math.sign(r)&&(r=0),r+=i,r>Ld?t.value=!0:r<-24&&(t.value=!1))}),t}var zd=Gn({__name:`CuiFloatingButtonGroup`,props:{direction:{default:`vertical`},right:{},forceVisible:{type:Boolean},scrollHidden:{type:Boolean,default:void 0}},setup(e){let t=e,{bottombarHeight:n}=Pd(),{direction:r,forceVisible:i}=jt(t),{y:a}=gt(window,{throttle:100}),o=Rd(a),s=V(()=>t.scrollHidden??o.value),c=V(()=>{let e=n.value>0?`calc(1.25rem + var(--safe-area-inset-bottom))`:`calc(max(8px, var(--safe-area-inset-bottom)) + 0px)`;return`calc(${n.value}px + ${e})`});return(t,n)=>(Y(),B(`div`,{class:Z([`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(s),"scale-100 opacity-100":H(i)||!H(s)}]),style:W({bottom:H(c),right:e.right||void 0})},[dn(t.$slots,`default`)],6))}}),Bd=Gn({__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}=Pd(),{buttonProps:a,tooltipProps:o,label:s,icon:c,iconProps:l,grouped:u,forceVisible:d}=jt(n),f=P(!1),{y:p}=gt(window,{throttle:100}),m=V(()=>p.value<=10),h=V(()=>{let e=i.value>0?`calc(1.25rem + var(--safe-area-inset-bottom))`:`calc(max(8px, var(--safe-area-inset-bottom)) + 0px)`;return`calc(${i.value}px + ${e})`});function g(e){f.value=e,r(`hover`,e)}return G(p,()=>{u?.value||(d?.value||m.value?r(`expand`):r(`shrink`))},{immediate:!0,deep:!0}),(e,t)=>{let n=ci,r=Pn(`tooltip`);return fn((Y(),B(`div`,{class:Z([`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(m),"scale-100 opacity-100":!H(u)&&(H(d)||H(m)),"scale-110":H(f)}]]),style:W(H(u)?void 0:{bottom:H(h)})},[z(n,sn(H(a),{rounded:``,onClick:t[0]||=t=>e.$emit(`click`),label:H(s),class:`shadow-lg`}),Ut({_:2},[H(c)?{name:`icon`,fn:X(()=>[(Y(),F(pn(H(c)),bt(en(H(l))),null,16))]),key:`0`}:void 0]),1040,[`label`])],6)),[[H(On),[g,{}]],[r,H(o),void 0,{left:!0}]])}}}),Vd={class:`w-full h-full flex items-center justify-center`},Hd={key:0,class:`cui-image-spinner`},Ud=[`src`,`alt`],Wd=[`src`,`alt`],Gd=Gn({__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}=jt(e),l=P(!1),u=new Image,d=P(),f=P(!1),p,m=V(()=>n.value?AL(n.value):void 0),h=V(()=>!!n.value&&!d.value&&!l.value&&f.value),g=V(()=>AL()),_=V(()=>(u.src=d.value||m.value||``,{width:u.width,height:u.height})),v=V(()=>r.value?typeof r.value==`number`?`${r.value}px`:r.value:`auto`),y=V(()=>i.value?typeof i.value==`number`?`${i.value}px`:i.value:`auto`);return G(m,e=>{if(l.value=!1,clearTimeout(p),f.value=!1,!e){d.value=void 0;return}if(e===d.value)return;let t=new Image;t.src=e,t.complete&&t.naturalWidth>0?d.value=e:(p=setTimeout(()=>{f.value=!0},150),t.decode().then(()=>{m.value===e&&(d.value=e,clearTimeout(p),f.value=!1)}).catch(()=>{m.value===e&&(l.value=!0,clearTimeout(p),f.value=!1)}))},{immediate:!0}),Fn(()=>clearTimeout(p)),t({snapshotDimensions:_}),(t,r)=>(Y(),B(`div`,Vd,[H(h)?(Y(),B(`div`,Hd)):q(``,!0),fn(J(`div`,{class:Z(H(s)),style:W(H(c))},[!H(l)&&H(d)?(Y(),B(`img`,{key:0,src:H(d),alt:e.alt,decoding:`async`,style:W([{width:H(v),height:H(y)},H(a)]),class:Z(H(o))},null,14,Ud)):q(``,!0),H(l)||!H(n)?(Y(),B(`img`,{key:1,src:H(g),alt:e.alt,decoding:`async`,style:W({width:H(v),height:H(y)}),class:`object-contain`},null,12,Wd)):q(``,!0)],6),[[Xt,!H(h)]])]))}}),Kd=(e,t)=>{let n=e.__vccOpts||e;for(let[e,r]of t)n[e]=r;return n},qd=Kd(Gd,[[`__scopeId`,`data-v-ad919a3a`]]);function Jd(){return{download:Yd}}async function Yd(e){e={...e,filename:Xd(e.filename)};let t=rf(),n=`url`in e?$d(e.url):null;if(n&&!t&&Zd(n)){await Qd(n),sf(n,e.filename);return}let r=await ef(e);t&&await af(r,e.filename)||of(r,e.filename)}function Xd(e){return e.replace(/[\\/:*?"<>|]/g,`_`)}function Zd(e){try{let t=new URL(e);return t.origin===window.location.origin&&/\/api\/download\/[^/]+$/.test(t.pathname)}catch{return!1}}async function Qd(e){nf(await fetch(e,{method:`HEAD`,cache:`no-store`}))}function $d(e){return/^https?:\/\//i.test(e)?e:`${fa().target.value?.endpoint.url??window.location.origin}${e.startsWith(`/`)?``:`/`}${e}`}async function ef(e){return`blob`in e?e.blob:`dataUrl`in e?(await fetch(e.dataUrl)).blob():(await tf($d(e.url))).blob()}async function tf(e){let t=await fetch(e,{headers:await Ga(),credentials:`include`});return nf(t),t}function nf(e){if(!e.ok)throw Error(`Download failed: ${e.status} ${e.statusText}`)}function rf(){return typeof window>`u`?!1:window.matchMedia(`(display-mode: standalone)`).matches?!0:!!window.navigator.standalone}async function af(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 of(e,t){let n=URL.createObjectURL(e);sf(n,t),setTimeout(()=>URL.revokeObjectURL(n),1e3)}function sf(e,t){let n=document.createElement(`a`);n.href=e,n.download=t,document.body.appendChild(n),n.click(),n.remove()}var cf={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`},lf=Gn({__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}=jt(n),{snapshotSrc:m,isLoading:h,snapshotTimestamp:g,refresh:_}=ht(r),v=n.showTimestamp?rn({scheduler:e=>vn(e,1e3)}):void 0,y=Tn(`cuiImageRef`),b=V(()=>typeof r.value==`object`&&r.value?.disabled===!0),x=V(()=>a.value||m.value),S=V(()=>!b.value&&(i.value||h.value)&&c.value&&!x.value),C=V(()=>d.value?d.value:{objectFit:l.value,aspectRatio:u.value,width:o.value,height:s.value}),w=V(()=>f.value||``),T=V(()=>{let e=r.value;return typeof e==`string`?e:e.name}),E=V(()=>y.value?.snapshotDimensions),D=V(()=>{if(v&&g.value)return O(v.value.getTime()-g.value)});function O(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 k(){if(x.value){let e=`${T.value.replace(/ /g,`_`).toLowerCase()}_${new Date().toISOString()}.png`;await Yd({dataUrl:x.value,filename:e,mimeType:`image/png`})}}return t({download:k,refresh:_,isLoading:S,snapshotSrc:x,snapshotDimensions:E}),(e,t)=>{let n=ti,r=qd;return Y(),B(`div`,{class:Z([`bg-black aspect-video flex items-center justify-center`,{relative:H(p)}]),style:W({width:`${H(o)}`,height:`${H(s)}`})},[H(S)?(Y(),F(n,{key:0,class:`m-0 max-w-[30px] max-h-[30px]`,"stroke-width":`5`,style:W({width:`calc(${H(o)} / 2)`,height:`calc(${H(s)} / 2)`})},null,8,[`style`])):H(b)?q(``,!0):(Y(),F(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)?(Y(),B(`span`,cf,L(H(D)),1)):q(``,!0)],6)}}}),uf={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function df(e,t){return Y(),B(`svg`,uf,[...t[0]||=[J(`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 ff=I({name:`material-symbols-refresh-rounded`,render:df}),pf={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function mf(e,t){return Y(),B(`svg`,pf,[...t[0]||=[J(`g`,{fill:`currentColor`},[J(`path`,{d:`M12 2C12.4626 2 12.5392 2.69313 12.1436 2.93262C10.2598 4.07091 9 6.13845 9 8.5C9 12.0899 11.9101 15 15.5 15C17.8615 15 19.9291 13.7402 21.0674 11.8564C21.3069 11.4608 22 11.5374 22 12C22 17.5228 17.5228 22 12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2Z`}),J(`path`,{d:`M16.5 7.25C16.8033 7.25 17.0773 7.43263 17.1934 7.71289C17.3094 7.99313 17.2448 8.31579 17.0303 8.53027L15.3105 10.25H16.5C16.9142 10.25 17.25 10.5858 17.25 11C17.25 11.4142 16.9142 11.75 16.5 11.75H13.5C13.1967 11.75 12.9227 11.5674 12.8066 11.2871C12.6906 11.0069 12.7553 10.6842 12.9697 10.4697L14.6895 8.75H13.5C13.0858 8.74999 12.75 8.41421 12.75 8C12.75 7.58579 13.0858 7.25001 13.5 7.25H16.5Z`}),J(`path`,{d:`M22 1.25C22.3033 1.25 22.5773 1.43263 22.6934 1.71289C22.8094 1.99313 22.7448 2.31579 22.5303 2.53027L19.8105 5.25H22C22.4142 5.25 22.75 5.58579 22.75 6C22.75 6.41421 22.4142 6.75 22 6.75H18C17.6967 6.74999 17.4227 6.56736 17.3066 6.28711C17.1906 6.00688 17.2553 5.6842 17.4697 5.46973L20.1895 2.75H18C17.5858 2.74999 17.25 2.41421 17.25 2C17.25 1.58579 17.5858 1.25001 18 1.25H22Z`})],-1)]])}var hf=I({name:`solar-moon-sleep-bold`,render:mf}),gf={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function _f(e,t){return Y(),B(`svg`,gf,[...t[0]||=[J(`path`,{fill:`currentColor`,d:`M21 7L9 19l-5.5-5.5l1.41-1.41L9 16.17L19.59 5.59z`},null,-1)]])}var vf=I({name:`mdi-check`,render:_f}),yf={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function bf(e,t){return Y(),B(`svg`,yf,[...t[0]||=[J(`path`,{fill:`currentColor`,d:`M12 9a3 3 0 0 1 3 3a3 3 0 0 1-3 3a3 3 0 0 1-3-3a3 3 0 0 1 3-3m0-4.5c5 0 9.27 3.11 11 7.5c-1.73 4.39-6 7.5-11 7.5S2.73 16.39 1 12c1.73-4.39 6-7.5 11-7.5M3.18 12a9.821 9.821 0 0 0 17.64 0a9.821 9.821 0 0 0-17.64 0`},null,-1)]])}var xf=I({name:`mdi-eye-outline`,render:bf}),Sf={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Cf(e,t){return Y(),B(`svg`,Sf,[...t[0]||=[J(`path`,{fill:`currentColor`,d:`M2 5.27L3.28 4L20 20.72L18.73 22l-3.08-3.08c-1.15.38-2.37.58-3.65.58c-5 0-9.27-3.11-11-7.5c.69-1.76 1.79-3.31 3.19-4.54zM12 9a3 3 0 0 1 3 3a3 3 0 0 1-.17 1L11 9.17A3 3 0 0 1 12 9m0-4.5c5 0 9.27 3.11 11 7.5a11.8 11.8 0 0 1-4 5.19l-1.42-1.43A9.86 9.86 0 0 0 20.82 12A9.82 9.82 0 0 0 12 6.5c-1.09 0-2.16.18-3.16.5L7.3 5.47c1.44-.62 3.03-.97 4.7-.97M3.18 12A9.82 9.82 0 0 0 12 17.5c.69 0 1.37-.07 2-.21L11.72 15A3.064 3.064 0 0 1 9 12.28L5.6 8.87c-.99.85-1.82 1.91-2.42 3.13`},null,-1)]])}var wf=I({name:`mdi-eye-off-outline`,render:Cf}),Tf={viewBox:`0 0 32 32`,width:`1.2em`,height:`1.2em`};function Ef(e,t){return Y(),B(`svg`,Tf,[...t[0]||=[J(`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 Df=I({name:`fluent-video-off32-filled`,render:Ef}),Of={user:0,admin:1,master:2};function kf(e,t){return(Of[e]??0)>=(Of[t]??0)}function Af(e,t,n){let{user:r}=Zt(xL()),i=r.value?.role??`user`;if(t&&!e)return n?i===t:kf(i,t);e??=Vn();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:kf(i,o)}var jf=zn(`routerState`,()=>{let e=P(!0),t=P(),n=P(),r=P(),i=P(),a=P(!1),o=V(()=>Mf(n.value)??Mf(t.value));function s(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,morphCamera:o,setRoutes:s}});function Mf(e){let t=e?.match(/^\/cameras\/([^/?#]+)/);if(t)try{return decodeURIComponent(t[1])}catch{return t[1]}}var Nf=[`data-camera-morph`,`draggable`],Pf={key:0,class:`absolute inset-0 z-2 flex items-center justify-center bg-black/80 pointer-events-none`},Ff={key:1,class:`absolute inset-0 z-2 bg-black/60 pointer-events-none`},If={key:3,class:`absolute top-3 left-3 z-4 pointer-events-none`},Lf={class:`w-full h-[60px] p-4 absolute bottom-0 z-3 flex items-center gap-1 justify-between pointer-events-none`},Rf={class:`text-xs font-semibold p-2 bg-black/60 rounded-full text-white flex items-center gap-1 min-w-0`},zf={class:`truncate`},Bf=300,Vf=Kd(Gn({__name:`CuiDraggableCameraCard`,props:{camera:{},noDrag:{type:Boolean},viewTransition:{type:Boolean},selectionMode:{type:Boolean},selected:{type:Boolean},editMode:{type:Boolean},hidden:{type:Boolean},findCard:{type:Function},moveCard:{type:Function},snapshotRef:{type:Function}},emits:[`refresh-snapshot`,`open-console`,`open-settings`,`toggle-hidden`,`click`,`drag-end`],setup(e,{emit:t}){let n=e,r=t,{x:i,y:a}=jd(),{isTouch:o}=Nd(),s=jf(),{camera:c,noDrag:l,viewTransition:u}=jt(n),d=Tn(`boxRef`),f=Rt(),p=Rt(null),m=P(0),h=P(0),g=P(!1),_=null,v=0,y=V(()=>!l.value),b=V(()=>n.findCard(c.value._id).index),x=V(()=>u.value&&s.morphCamera===c.value.name),[S,C]=ui(()=>({type:`camera-card`,canDrag(){return y.value},item:()=>(_=null,v=0,{id:c.value._id,originalIndex:b.value}),collect:e=>({isDragging:e.isDragging()}),end:(e,t)=>{let{id:i,originalIndex:a}=e;t.didDrop()||n.moveCard(i,a),r(`drag-end`)}})),[,w]=fi(()=>({accept:`camera-card`,hover({id:e}){if(e!==c.value._id){let t=Date.now();if(_===c.value._id&&t-v<Bf)return;let{index:r}=n.findCard(c.value._id),{index:i}=n.findCard(e);i!==r&&(_=c.value._id,v=t,n.moveCard(e,r))}}})),T=V(()=>S.value.isDragging),E=V(()=>T.value&&o.value);function D(){O(),g.value=!0;let e=d.value?.getBoundingClientRect();e&&(m.value=i.value-e.left,h.value=a.value-e.top,k())}function O(){g.value=!1,A(),m.value=0,h.value=0}function k(){if(A(),!d.value)return;let e=d.value.cloneNode(!0),t=d.value.getBoundingClientRect();e.style.width=`${t.width}px`,e.style.height=`${t.height}px`,e.classList.add(`drag-preview`),document.body.appendChild(e),p.value=e}function A(){p.value&&document.body.contains(p.value)&&document.body.removeChild(p.value),p.value=null}function j(){p.value&&g.value&&requestAnimationFrame(()=>{if(!p.value)return;let e=i.value-m.value,t=a.value-h.value;p.value.style.left=`${e}px`,p.value.style.top=`${t}px`})}function ee(e){f.value=C(w(e))}function te(e){o.value&&e.preventDefault()}return G(E,e=>{e?D():O()}),G([i,a],()=>{j()},{flush:`sync`}),Gt(()=>{O()}),(t,n)=>{let r=Df,i=wf,a=xf,s=ci,l=vf,u=hf,f=ff,p=Ic,m=Yl,h=lf,g=Pn(`tooltip`);return Y(),B(`div`,{ref_key:`boxRef`,ref:d,class:`camera-wrapper`},[J(`div`,{ref:ee,class:Z([`rounded-xl overflow-hidden border-[1px] border-color relative`,{"cursor-move":H(y)&&!H(T)}]),style:W({opacity:+!H(T),viewTransitionName:H(x)?`camera-morph`:void 0}),"data-camera-morph":H(x)||void 0,draggable:H(y)&&!H(o),onDragstart:te},[H(c).disabled?(Y(),B(`div`,Pf,[z(r,{class:`w-8 h-8 text-white/60`})])):e.hidden?(Y(),B(`div`,Ff)):q(``,!0),e.editMode&&!e.selectionMode?fn((Y(),F(s,{key:2,severity:`secondary`,rounded:``,class:`dark-mode cui-icon-md absolute top-3 left-3 z-4`,onClick:n[0]||=Bn(e=>t.$emit(`toggle-hidden`),[`stop`])},{icon:X(()=>[e.hidden?(Y(),F(i,{key:0,width:`100%`,height:`100%`})):(Y(),F(a,{key:1,width:`100%`,height:`100%`}))]),_:1})),[[g,{value:e.hidden?t.$t(`components.form.tooltip.show_on_home`):t.$t(`components.form.tooltip.hide_on_home`)},void 0,{right:!0}]]):q(``,!0),e.selectionMode?(Y(),B(`div`,If,[J(`div`,{class:Z([`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?(Y(),F(l,{key:0,class:`w-4 h-4 text-white`})):q(``,!0)],2)])):q(``,!0),J(`div`,Lf,[J(`span`,Rf,[J(`span`,zf,L(H(c).name),1),H(c).disabled?(Y(),F(r,{key:0,class:`w-3 h-3 text-red-400 shrink-0`})):H(c).detectionSettings?.snooze?(Y(),F(u,{key:1,class:`w-3 h-3 text-amber-400 shrink-0`})):q(``,!0)]),e.selectionMode?q(``,!0):(Y(),B(U,{key:0},[H(c).disabled?q(``,!0):(Y(),B(U,{key:0},[fn((Y(),F(s,{severity:`secondary`,rounded:``,class:`dark-mode cui-icon-md pointer-events-auto ml-auto`,onClick:n[1]||=Bn(e=>t.$emit(`refresh-snapshot`),[`stop`])},{icon:X(()=>[z(f,{width:`100%`,height:`100%`})]),_:1})),[[g,{value:t.$t(`components.player.refresh_snapshot`)},void 0,{top:!0}]]),(`hasPermission`in t?t.hasPermission:H(Af))(void 0,`admin`)?fn((Y(),F(s,{key:0,severity:`secondary`,rounded:``,class:`dark-mode cui-icon-md pointer-events-auto`,onClick:n[2]||=Bn(e=>t.$emit(`open-console`),[`stop`])},{icon:X(()=>[z(p,{width:`100%`,height:`100%`})]),_:1})),[[g,{value:t.$t(`components.player.log`)},void 0,{top:!0}]]):q(``,!0)],64)),(`hasPermission`in t?t.hasPermission:H(Af))(void 0,`admin`)?fn((Y(),F(s,{key:1,rounded:``,severity:`secondary`,class:Z([`dark-mode cui-icon-md pointer-events-auto`,{"ml-auto":H(c).disabled}]),onClick:n[3]||=Bn(e=>t.$emit(`open-settings`),[`stop`])},{icon:X(()=>[z(m,{width:`100%`,height:`100%`})]),_:1},8,[`class`])),[[g,{value:t.$t(`components.player.settings`)},void 0,{top:!0}]]):q(``,!0)],64))]),z(h,{ref:e.snapshotRef,camera:H(c),"show-timestamp":``,class:`cursor-pointer`,onClick:n[4]||=e=>t.$emit(`click`)},null,8,[`camera`])],46,Nf)],512)}}}),[[`__scopeId`,`data-v-ac5fc7df`]]),Hf={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Uf(e,t){return Y(),B(`svg`,Hf,[...t[0]||=[J(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M12 5v14m-7-7h14`},null,-1)]])}var Wf=I({name:`tabler-plus`,render:Uf}),Gf={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Kf(e,t){return Y(),B(`svg`,Gf,[...t[0]||=[J(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`m15 6l-6 6l6 6`},null,-1)]])}var qf=I({name:`tabler-chevron-left`,render:Kf}),Jf={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Yf(e,t){return Y(),B(`svg`,Jf,[...t[0]||=[J(`path`,{fill:`currentColor`,d:`M8.59 16.58L13.17 12L8.59 7.41L10 6l6 6l-6 6z`},null,-1)]])}var Xf=I({name:`mdi-chevron-right`,render:Yf}),Zf={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Qf(e,t){return Y(),B(`svg`,Zf,[...t[0]||=[J(`path`,{fill:`currentColor`,d:`M15.41 16.58L10.83 12l4.58-4.59L14 6l-6 6l6 6z`},null,-1)]])}var $f=I({name:`mdi-chevron-left`,render:Qf}),ep={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function tp(e,t){return Y(),B(`svg`,ep,[...t[0]||=[J(`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 np=I({name:`tabler-sparkles`,render:tp}),rp={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function ip(e,t){return Y(),B(`svg`,rp,[...t[0]||=[Dt(`<g stroke="currentColor"><circle cx="12" cy="12" r="9.5" fill="none" stroke-linecap="round" stroke-width="3"><animate attributeName="stroke-dasharray" calcMode="spline" dur="1.5s" keySplines="0.42,0,0.58,1;0.42,0,0.58,1;0.42,0,0.58,1" keyTimes="0;0.475;0.95;1" repeatCount="indefinite" values="0 150;42 150;42 150;42 150"></animate><animate attributeName="stroke-dashoffset" calcMode="spline" dur="1.5s" keySplines="0.42,0,0.58,1;0.42,0,0.58,1;0.42,0,0.58,1" keyTimes="0;0.475;0.95;1" repeatCount="indefinite" values="0;-16;-59;-59"></animate></circle><animateTransform attributeName="transform" dur="2s" repeatCount="indefinite" type="rotate" values="0 12 12;360 12 12"></animateTransform></g>`,1)]])}var ap=I({name:`svg-spinners-ring-resize`,render:ip}),op={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function sp(e,t){return Y(),B(`svg`,op,[...t[0]||=[J(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M11 12a1 1 0 1 0 2 0a1 1 0 1 0-2 0m0 7a1 1 0 1 0 2 0a1 1 0 1 0-2 0m0-14a1 1 0 1 0 2 0a1 1 0 1 0-2 0`},null,-1)]])}var cp=I({name:`tabler-dots-vertical`,render:sp}),lp={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function up(e,t){return Y(),B(`svg`,lp,[...t[0]||=[J(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`m12 17.75l-6.172 3.245l1.179-6.873l-5-4.867l6.9-1l3.086-6.253l3.086 6.253l6.9 1l-5 4.867l1.179 6.873z`},null,-1)]])}var dp=I({name:`tabler-star`,render:up}),fp={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function pp(e,t){return Y(),B(`svg`,fp,[...t[0]||=[J(`path`,{fill:`currentColor`,d:`m8.243 7.34l-6.38.925l-.113.023a1 1 0 0 0-.44 1.684l4.622 4.499l-1.09 6.355l-.013.11a1 1 0 0 0 1.464.944l5.706-3l5.693 3l.1.046a1 1 0 0 0 1.352-1.1l-1.091-6.355l4.624-4.5l.078-.085a1 1 0 0 0-.633-1.62l-6.38-.926l-2.852-5.78a1 1 0 0 0-1.794 0z`},null,-1)]])}var mp=I({name:`tabler-star-filled`,render:pp}),hp={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function gp(e,t){return Y(),B(`svg`,hp,[...t[0]||=[J(`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 _p=I({name:`mdi-delete-outline`,render:gp}),vp={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function yp(e,t){return Y(),B(`svg`,vp,[...t[0]||=[J(`path`,{fill:`currentColor`,d:`M13 19c0 .34.04.67.09 1H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h1l2 4h3L8 4h2l2 4h3l-2-4h2l2 4h3l-2-4h4v9.81c-.61-.35-1.28-.59-2-.72V10H5.76L4 6.47V18h9.09c-.05.33-.09.66-.09 1m9.54-2.12l-1.42-1.41L19 17.59l-2.12-2.12l-1.41 1.41L17.59 19l-2.12 2.12l1.41 1.42L19 20.41l2.12 2.13l1.42-1.42L20.41 19z`},null,-1)]])}var bp=I({name:`mdi-movie-remove-outline`,render:yp}),xp={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Sp(e,t){return Y(),B(`svg`,xp,[...t[0]||=[J(`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 Cp=I({name:`tabler-download`,render:Sp}),wp={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Tp(e,t){return Y(),B(`svg`,wp,[...t[0]||=[J(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M11 15a4 4 0 1 0 8 0a4 4 0 1 0-8 0m7.5 3.5L21 21M4 6h16M4 12h4m-4 6h4`},null,-1)]])}var Ep=I({name:`tabler-list-search`,render:Tp}),Dp={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Op(e,t){return Y(),B(`svg`,Dp,[...t[0]||=[J(`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-4h3.5m4.92.61a2.1 2.1 0 0 1 2.97 2.97L18 22h-3v-3z`},null,-1)]])}var kp=I({name:`tabler-user-edit`,render:Op}),Ap=null;function jp(e){Ap&&Ap!==e&&Ap(),Ap=e}function Mp(e){Ap===e&&(Ap=null)}function Np(e){if(!Ap||Ap===e)return;let t=Ap;Ap=null,t()}var Pp={class:`flex flex-col gap-4 w-full`},Fp={key:0,class:`flex justify-center`},Ip={class:`relative`},Lp=[`src`,`alt`],Rp={class:`flex flex-col gap-2 w-full`},zp={class:`cui-label`},Bp={class:`flex flex-col gap-2 w-full`},Vp={for:`reassignTarget`,class:`cui-label`},Hp=Gn({__name:`FaceReassign`,props:{cropUrl:{},oldName:{},eventId:{},segIndex:{},attrIndex:{},confidence:{}},setup(e,{expose:t}){let n=e,{t:r}=St(),{plugin:i}=y(`@camera.ui/camera-ui-nvr`),a=P(null),o=P([]),s=P(!0),c=P(),l=V(()=>n.oldName===`unknown`?r(`views.recordings.reassign_unknown_person`):n.oldName),u=V(()=>{let e=n.confidence??0;return e>=.9?`text-green-400`:e>=.7?`text-yellow-400`:`text-red-400`}),d=V(()=>{let e=c.value;if(!e||a.value===``)return``;let t=e.clarity??1;if(t<.7)return r(`views.recordings.reassign_unclear`);let i=(e.alsoFiledUnder??[]).filter(e=>e!==n.oldName&&e!==a.value),o=[];return i.length&&o.push(r(`views.faces.assign_filed_under`,{names:i.join(`, `)},1)),t<.8&&o.push(r(`views.faces.assign_partly_visible`,1)),o.join(` `)}),f=V(()=>{let e=o.value.filter(e=>e!==n.oldName).map(e=>({label:e,value:e}));return n.oldName!==`unknown`&&e.push({label:r(`views.recordings.reassign_unknown`),value:``}),e});async function p(e){try{let t=n.attrIndex===void 0?void 0:{attrIndex:n.attrIndex};c.value=await e.checkEventFace(n.eventId,n.segIndex,n.oldName,t)}catch{}}return G(i,async e=>{let t=e;if(t){p(t);try{let e=await t.listKnownFaceMeta();o.value=(e??[]).map(e=>e.name)}catch{}finally{s.value=!1}}},{immediate:!0}),t({onConfirm:async()=>a.value}),(e,t)=>{let r=Gr,i=Rr,o=Pr;return Y(),B(`div`,Pp,[n.cropUrl?(Y(),B(`div`,Fp,[J(`div`,Ip,[J(`img`,{src:n.cropUrl,alt:H(l),class:`w-36 h-36 rounded-xl object-cover bg-neutral-900`},null,8,Lp),n.confidence?(Y(),B(`span`,{key:0,class:Z([`absolute bottom-1 right-1 text-xs font-medium px-1 rounded bg-black/60`,H(u)])},L(Math.round(n.confidence*100))+`% `,3)):q(``,!0)])])):q(``,!0),J(`div`,Rp,[J(`label`,zp,L(e.$t(`views.recordings.reassign_current`)),1),z(r,{"model-value":H(l),class:`w-full`,fluid:``,disabled:``},null,8,[`model-value`])]),J(`div`,Bp,[J(`label`,Vp,L(e.$t(`views.recordings.reassign_new`)),1),z(i,{id:`reassignTarget`,modelValue:H(a),"onUpdate:modelValue":t[0]||=e=>Qt(a)?a.value=e:null,options:H(f),"option-label":`label`,"option-value":`value`,class:`w-full`,fluid:``,loading:H(s),disabled:H(s),placeholder:e.$t(`views.faces.enter_or_pick_name`)},null,8,[`modelValue`,`options`,`loading`,`disabled`,`placeholder`])]),H(d)?(Y(),F(o,{key:1,severity:`warn`,size:`small`,closable:!1},{default:X(()=>[Mt(L(H(d)),1)]),_:1})):q(``,!0)])}}}),Up={class:`group relative flex items-center w-full`},Wp={key:0,class:`flex items-center mr-3 pointer-events-auto`,"data-cui-slot-interactive":``},Gp={class:`flex-1 min-w-0 text-left`},Kp={class:`text-sm font-medium truncate`},qp=[`is-exact-active`],Jp=[`is-exact-active`],Yp={key:0,class:`w-full h-[1px] divider`},Xp={key:1,class:`w-full`},Zp=Kd(Gn({__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}=jt(n),[p,m]=vt();function h(e){i.value||e.target.closest(`[data-cui-slot-interactive]`)||r(`click`,e)}return(e,t)=>{let n=ci,r=Dn(`RouterLink`),g=Pn(`tooltip`);return Y(),B(`div`,Up,[z(H(p),null,{default:X(({isExactActive:t})=>[fn((Y(),F(n,sn({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:X(()=>[J(`div`,{class:Z([`relative z-10 flex items-center w-full px-3`,{"py-2":H(u)!==`large`,"py-3.5":H(u)===`large`}])},[e.$slots.prepend?(Y(),B(`div`,Wp,[dn(e.$slots,`prepend`,{isExactActive:t??!1},void 0,!0)])):q(``,!0),J(`div`,Gp,[J(`div`,Kp,[dn(e.$slots,`default`,{isExactActive:t??!1},void 0,!0)]),e.$slots.subtitle?(Y(),B(`div`,{key:0,"is-exact-active":t??!1,class:`text-sm text-muted mt-0.5`},[dn(e.$slots,`subtitle`,{},void 0,!0)],8,qp)):q(``,!0)]),e.$slots.append?(Y(),B(`div`,{key:1,"is-exact-active":t??!1,class:`flex items-center ml-auto pl-3 pointer-events-auto`,"data-cui-slot-interactive":``},[dn(e.$slots,`append`,{},void 0,!0)],8,Jp)):q(``,!0)],2)]),_:2},1040,[`disabled`,`class`])),[[g,{value:H(l)}]]),H(d)?(Y(),B(`div`,Yp)):q(``,!0)]),_:3}),H(o)?(Y(),F(r,{key:0,to:H(o),class:`block transition-all duration-300 w-full`},{default:X(({isExactActive:e})=>[z(H(m),{"is-exact-active":e},null,8,[`is-exact-active`])]),_:1},8,[`to`])):(Y(),B(`div`,Xp,[z(H(m))]))])}}}),[[`__scopeId`,`data-v-34528ec8`]]),Qp=Kd(Gn({__name:`CuiAvatar`,props:{src:{},showBorder:{type:Boolean,default:!0},size:{default:22}},setup(e){let{showBorder:t,size:n,src:r}=jt(e);return(e,i)=>{let a=qd;return Y(),B(`div`,{class:Z([`bg-neutral-900 overflow-hidden rounded-full shrink-0`,{"avatar-border":H(t)}]),style:W({width:`${H(n)}px`,height:`${H(n)}px`})},[z(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`]]),$p={autoHide:!0,dividers:`all`},em={class:`flex items-center gap-3`},tm={key:0,class:`flex items-center`},nm={key:0,class:`px-3 pt-3 pb-1 text-[0.7rem] font-semibold uppercase tracking-wider text-muted-color select-none`},rm=Gn({__name:`CuiMenu`,props:jn({items:{},autoHide:{type:Boolean},dividers:{},popover:{},sortList:{type:Boolean},maxHeight:{}},$p),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}=jt(r),[u,d]=vt(),f=Tn(`menuRef`),p=P(!1),m=P(),h=V(()=>{if(l.value!==void 0)return{maxHeight:typeof l.value==`number`?`${l.value}px`:l.value}}),g=V(()=>{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(()=>{let e=g.value.filter(e=>e.position===`header`),t=g.value.filter(e=>!e.position),n=g.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}),v=V(()=>{let e=[],t;for(let n of _.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 y(e){o.value&&C(),e.onClick?.(Ht(m.value)),i(`click:menu-item`,e)}function b(){jp(C),p.value=!0,i(`show`)}function x(){Mp(C),m.value=void 0,p.value=!1,i(`hide`)}function S(e,t,n){Np(C),m.value=n,f.value?.toggle(e,t)}function C(){f.value?.hide()}function w(e,t){Np(C),f.value?.show(e,t)}return t({menu:f,isOpen:p,data:Ht(m),toggleMenu:S,hide:C,show:w}),(t,n)=>{let r=Qp,i=ti,a=Fr,o=Zp,s=Kr,c=Lr;return Y(),F(c,sn({ref_key:`menuRef`,ref:f,class:`shadow-lg cui-rounded-corner`},e.popover,{onShow:b,onHide:x}),{default:X(()=>[z(H(u),null,{default:X(({item:e})=>[(Y(),F(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=>y(e)},Ut({default:X(({isExactActive:t})=>[J(`div`,em,[J(`span`,sn(e.labelProps,{class:{"text-primary":t||e.active,"!font-bold":e.avatarProps,"opacity-70":!e.disabled}}),L(e.label),17),e.loading?(Y(),B(`div`,tm,[z(i,{class:`!w-3 !h-3`,"stroke-width":`5`})])):e.badge?(Y(),B(`span`,sn({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`}),L(e.badge),17)):q(``,!0)])]),_:2},[e.avatarProps||e.icon?{name:`prepend`,fn:X(({isExactActive:t})=>[e.avatarProps?(Y(),F(r,bt(sn({key:0},e.avatarProps)),null,16)):q(``,!0),e.icon?(Y(),F(pn(e.icon),sn({key:1},e.iconProps,{class:{"text-primary":t||e.active,"opacity-70":!e.disabled}}),null,16,[`class`])):q(``,!0)]),key:`0`}:void 0,e.description?{name:`subtitle`,fn:X(()=>[J(`span`,sn(e.descriptionProps,{class:{"opacity-70":!e.disabled}}),L(e.description),17)]),key:`1`}:void 0,e.toggle?{name:`append`,fn:X(()=>[z(a,{"model-value":e.toggleState,disabled:e.disabled,"onUpdate:modelValue":t=>y(e)},null,8,[`model-value`,`disabled`,`onUpdate:modelValue`])]),key:`2`}:void 0]),1032,[`to`,`disabled`,`button-props`,`tooltip`,`divider`,`onClick`]))]),_:1}),z(s,{class:`cui-card border-0!`,pt:{body:{class:`p-0`}}},{content:X(()=>[J(`div`,{class:`overflow-y-auto overscroll-contain`,style:W(H(h))},[(Y(!0),B(U,null,K(H(v),(e,t)=>(Y(),B(U,{key:t},[e.type===`group`?(Y(),B(`div`,nm,L(e.label),1)):(Y(),F(H(d),{key:1,item:e.item},null,8,[`item`]))],64))),128))],4)]),_:1})]),_:1},16)}}});function im(e){let t=e.thumbnailAt;if(t){let n=0;for(let r of e.segments??[])r&&r.firstSeen<=t&&r.firstSeen>n&&(n=r.firstSeen);return n||t}return e.startTime}function am(e,t){return(e.segments?.[Number(t)])?.detections?.[0]?.label??`scene`}var om={viewBox:`0 0 16 16`,width:`1.2em`,height:`1.2em`};function sm(e,t){return Y(),B(`svg`,om,[...t[0]||=[J(`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 cm=I({name:`fluent-open16-filled`,render:sm}),lm={viewBox:`0 0 16 16`,width:`1.2em`,height:`1.2em`};function um(e,t){return Y(),B(`svg`,lm,[...t[0]||=[J(`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 dm=I({name:`octicon-chevron-left16`,render:um}),fm=null;function pm(){return fm??document.getElementById(`app`)}var mm=Gn({render(){return At(`div`,{class:`flex items-center justify-center w-full h-full min-h-[100px]`},[At(ti,{class:`w-[24px] h-[24px] m-0`,strokeWidth:`5`})])}});function hm(e,t){return qt({loader:e,loadingComponent:mm,delay:t?.delay??150})}var gm=Symbol(`DialogStepper`);function _m(e){let t=P(e),n=P(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:V(()=>!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 Mn(gm,s),s}var vm={class:`p-dialog-content non-draggable-region`},ym={key:0,class:`p-dialog-header-actions`},bm={class:`p-dialog-title truncate min-w-0 flex-1`},xm={class:`p-dialog-header-actions ml-auto gap-2`},Sm={key:0,class:`text-wrap`},Cm={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)`}},wm=Gn({__name:`CuiDialog`,setup(e){let t=hm(()=>zt(()=>import(`./CuiMarkdownContent-DwziZJ1F.js`),__vite__mapDeps([2,3,1,4,5,6]),import.meta.url)),n=Jt(),r=Go(),{t:i}=St(),{mdBreakpoint:a}=Md(),{width:o,height:s}=Ad(),{isElectronApp:c}=or(),l=nn(`dialogRef`),u=Tn(`dialogHeader`),d=jt(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:w,awaitConfirm:T,src:E,title:D,fullscreen:O,closable:k,tabs:A,goTo:j,draggable:ee,blockDragOnSelectors:te,rootId:ne,markdown:re,headerActions:ie,contentClickConfirms:ae}=d;Mn(`dialogRefProps`,d);let oe=Bt({});Mn(`dialogHeaderToggles`,oe);let M=l.value.options.templates,se=yt(pm()),ce=P(!1),le=P(null),ue=P(!1),de=P(D.value),fe=P(!1);Mn(`dialogTitle`,de);let N,{style:pe,x:me,y:he}=It(u,{disabled:!ee?.value,containerElement(){return pm()},onStart(e,t){let n=t.target;if(n){if(n.closest(`button`))return!1;for(let e of te?.value??[])if(n.closest(e))return!1}},onMove(){fe.value=!0}}),ge=V(()=>{let e=document.getElementById(ne?.value||``);if(!e)return 1/0;let t=e.offsetWidth;return se.width.value-t}),_e=V(()=>{let e=document.getElementById(ne?.value||``);if(!e)return 1/0;let t=e.offsetHeight;return se.height.value-t}),ve=V(()=>!!(ce.value||m?.value||R(le.value?.isLoading))),ye=V(()=>A.value!==void 0&&A.value.length>0),be=V(()=>S?.value?S.value:i(`components.form.button.close`)),xe=V(()=>C?.value?C.value:i(`components.form.button.save`)),Se=V(()=>({...g?.value,label:be.value,loading:void 0,size:`small`,severity:g?.value&&`severity`in g.value?g.value.severity:`secondary`,class:void 0})),Ce=V(()=>({..._?.value,label:xe.value,loading:void 0,size:`small`,severity:_?.value&&`severity`in _.value?_.value.severity:`success`,class:`ml-auto`,disabled:h.value}));function we(){ae?.value&&De()}function Te(e){let t=le.value?.resolveGoTo?.();l.value.close(),n.push(t??e)}async function Ee(){try{ce.value=!0;let e=await le.value?.onCancel?.();if(e===null)return;l.value.close({status:`cancel`,data:e})}catch(e){r.add({severity:`error`,detail:e,life:3e3})}finally{ce.value=!1}}async function De(){try{ce.value=!0;let e=await le.value?.onConfirm?.();if(e===null)return;T?.value?(await l.value.options.onConfirm?.(e),l.value.close({status:`settled`,data:e})):w?.value?l.value.options.onConfirm?.(e):l.value.close({status:`confirm`,data:e})}catch(e){r.add({severity:`error`,detail:e,life:3e3})}finally{ce.value=!1}}function Oe(){Am(ne?.value||``)}return ye.value&&(N=_m(A.value??[]),G(N.isMainTab,e=>{ue.value=!e},{immediate:!0}),N.on(`updateTabTitle`,({tabId:e,title:t})=>{N?.currentTab.value===e&&D?.value&&(de.value=t)}),N.on(`tabChange`,e=>{de.value=e?.title??D.value})),G([pe,o,s],()=>{if(!fe.value)return;let e=document.getElementById(ne?.value||``);if(e){let t=Math.max(0,Math.min(me.value,ge.value)),n=Math.max(0,Math.min(he.value,_e.value));e.style.left=`${t}px`,e.style.top=`${n}px`}}),hn(()=>{let e=document.getElementById(ne?.value||``)?.closest(`.p-dialog-mask`);e&&(e.addEventListener(`pointerdown`,Oe),Oe())}),Fn(()=>{let e=document.getElementById(ne?.value||``)?.closest(`.p-dialog-mask`);e&&e.removeEventListener(`pointerdown`,Oe)}),(e,n)=>{let r=dm,i=ci,o=cm,s=mi,d=qd,m=Pn(`tooltip`);return Y(),B(`div`,vm,[J(`div`,{ref_key:`dialogHeader`,ref:u,class:Z([`p-dialog-header justify-start gap-1`,{"cursor-move":H(ee),"pt-6!":H(c)&&(H(O)||H(a))}])},[z(Rn,{name:`slide-left`},{default:X(()=>[H(ue)?(Y(),B(`div`,ym,[z(i,{severity:`secondary`,text:``,rounded:``,class:`p-dialog-back-button`,onClick:H(N)?.goToMainTab},{icon:X(()=>[z(r,{width:`100%`,height:`100%`})]),_:1},8,[`onClick`])])):q(``,!0)]),_:1}),J(`span`,bm,L(H(de)),1),J(`div`,xm,[(Y(!0),B(U,null,K(H(ie)??[],(e,t)=>fn((Y(),F(i,{key:t,severity:`secondary`,text:``,rounded:``,loading:e.loading,disabled:e.disabled,class:Z([`p-dialog-close-button`,{"!text-primary":e.toggle&&H(oe)[t]}]),onClick:()=>{e.toggle&&(H(oe)[t]=!H(oe)[t]),e.onClick()}},{icon:X(()=>[(Y(),F(pn(e.icon),{width:`100%`,height:`100%`}))]),_:2},1032,[`loading`,`disabled`,`class`,`onClick`])),[[m,e.tooltip?{value:e.tooltip}:void 0,void 0,{bottom:!0}]])),128)),H(j)?fn((Y(),F(i,{key:0,severity:`secondary`,text:``,rounded:``,class:`p-dialog-close-button`,onClick:n[0]||=e=>Te(H(j))},{icon:X(()=>[z(o,{width:`100%`,height:`100%`})]),_:1})),[[m,{value:e.$t(`components.dialog.open`)},void 0,{bottom:!0}]]):q(``,!0),H(k)?(Y(),F(i,{key:1,severity:`secondary`,text:``,rounded:``,class:`p-dialog-close-button`,onClick:H(l).close},{icon:X(()=>[z(s,{width:`100%`,height:`100%`})]),_:1},8,[`onClick`])):q(``,!0)])],2),J(`div`,{class:Z([`p-dialog-body flex justify-center w-full overflow-y-auto px-5 py-1 text-balance`,{"h-full":H(O),"cursor-pointer":H(ae)},H(b)]),style:W(H(x)),onClick:we},[H(f)&&!H(re)?(Y(),B(`span`,Sm,L(H(f)),1)):H(f)&&H(re)?(Y(),F(H(t),{key:1,content:H(f)},null,8,[`content`])):H(E)?(Y(),F(d,{key:2,src:H(E),"image-container-class":`w-full h-full`},null,8,[`src`])):(Y(),F(pn(H(M)?.content),sn({key:3,ref_key:`componentRef`,ref:le,class:`w-full h-full relative`},H(p),Cn(H(l).options.events||{})),null,16))],6),n[2]||=J(`div`,{class:`mt-auto`},null,-1),!H(v)||!H(y)?(Y(),B(`div`,Cm,[H(v)?q(``,!0):(Y(),F(i,sn({key:0},H(Se),{loading:H(ve),class:`cui-button-medium`,onClick:Ee}),null,16,[`loading`])),n[1]||=J(`div`,{class:`ml-auto`},null,-1),H(y)?q(``,!0):(Y(),F(i,sn({key:1},H(Ce),{loading:H(ve),disabled:H(h),class:`cui-button-medium`,onClick:De}),null,16,[`loading`,`disabled`]))])):q(``,!0)])}}}),Tm={modal:!0,closable:!0,blockScroll:!0,draggable:!1,dismissableMask:!0,baseZIndex:1100,showHeader:!1},Em={pt:{root:{class:`p-dialog-maximized pt-safe border-none`}}},Dm={pt:{root:{class:`shadow-xl shadow-black/30 overflow-hidden`}}},Om={mobile:{textDialog:{style:{maxWidth:`none`,maxHeight:`100vh`},...Em},imageDialog:{style:{maxWidth:`none`,maxHeight:`100vh`},...Em},componentDialog:{style:{maxWidth:`none`,maxHeight:`100vh`},...Em},stepperDialog:{style:{maxWidth:`none`,maxHeight:`100vh`},...Em}},desktop:{textDialog:{style:{maxWidth:`1000px`,maxHeight:`90vh`,width:`auto`},...Dm},imageDialog:{style:{maxWidth:`1000px`,maxHeight:`90vh`,width:`70vw`},...Dm},componentDialog:{style:{maxWidth:`1000px`,maxHeight:`90vh`,width:`70vw`},...Dm},stepperDialog:{style:{maxWidth:`1000px`,maxHeight:`90vh`,width:`70vw`},...Dm}}},km=new Map;function Am(e){let t=document.getElementById(e)?.closest(`.p-dialog-mask`);if(!t)return;let n=Array.from(document.querySelectorAll(`.p-dialog-mask`)),r=0;for(let e of n){let t=parseInt(e.style.zIndex,10)||0;t>r&&(r=t)}(parseInt(t.style.zIndex,10)||0)<r&&(t.style.zIndex=String(r+1))}function jm(){return{open:(e,t)=>{let n={content:e&&I(e),options:t||{},data:t&&t.data,close:e=>{Nr.emit(`close`,{instance:n,params:e})}};return Nr.emit(`open`,{instance:n}),n}}}function Mm(){let e=jm(),{mdBreakpoint:t}=Md(),n=(e,t,n)=>{let r=Bt({...e});n&&(t.pt.root.class=(t.pt.root.class?t.pt.root.class+` `:``)+`fixed mt-0`),he(r.options.props,t)},r=(e,r,i,a)=>{let o={mobile:a?.mobile?{style:{...a.mobile},...Em}:void 0,desktop:a?.desktop?{style:{...a.desktop},...Dm}:void 0};return G(t,t=>{if(t)switch(r){case`text`:n(e,o.mobile??Om.mobile.textDialog,i);break;case`image`:n(e,o.mobile??Om.mobile.imageDialog,i);break;case`component`:n(e,o.mobile??Om.mobile.componentDialog,i);break;case`stepper`:n(e,o.mobile??Om.mobile.stepperDialog,i)}else switch(r){case`text`:n(e,o.desktop??Om.desktop.textDialog,i);break;case`image`:n(e,o.desktop??Om.desktop.imageDialog,i);break;case`component`:n(e,o.desktop??Om.desktop.componentDialog,i);break;case`stepper`:n(e,o.desktop??Om.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,p=H(s.dedupeKey);if(p){let e=km.get(p);if(e)return Am(e.rootId),e.instance}i();let m={content:o?I(o):void 0};a?.pt||(a={...a,pt:{root:{}}});let h=H(s.draggable)??!1;h&&(a.draggable=!0);let g=H(s.dismissableMask);g!==void 0&&(a.dismissableMask=g),H(s.closable)===!1&&(a.dismissableMask=!1,a.closeOnEscape=!1),H(s.blurMask)&&(a.pt.mask={class:`backdrop-blur-sm`});let _=H(s.modal);_!==void 0&&(a.modal=_);let v=H(s.rootId)??NL(10);a.pt.root.id=v;let y=e.open(wm,{data:jt(Bt({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,awaitConfirm:s.awaitConfirm??!1,fullscreen:s.fullscreen??!1,closable:s.closable??!0,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:v,...s})),props:a,templates:m,events:d,onConfirm:c,onCancel:l,onClose:e=>{if(p&&km.delete(p),e?.data?.status===`confirm`){let{status:t,...n}=e.data;c?.(n?.data??n)}else e?.data?.status!==`settled`&&l?.();u?.(e?.data?.data??e?.data)}});return p&&km.set(p,{instance:y,rootId:v}),s.fullscreen?y:r(y,t,h,f?.dialogSize)}function o(e){let{data:t,...n}=e,r=structuredClone(Tm);return r.style={...Tm.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 t={hideConfirmButton:!0,hideCancelButton:!1,...e.data},{data:n,...r}=e,i=structuredClone(Tm);return t.fullscreen&&(i.style={...i.style,maxWidth:`none`,maxHeight:`100vh`},i.pt={root:{class:`p-dialog-maximized pt-safe border-none`}}),a(`image`,{data:t,...r},i)}function c(e,t){let{data:n,...r}=t,i=structuredClone(Tm);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(Tm);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}}function Nm(){let e=Bt({});async function t(t,n){e[t]||(e[t]=!0,await an()),n()}return{mounted:e,toggleOverlay:t}}var Pm=350,Fm=1e3;function Im(e,t,n){let r=!1,i=!1,a=0;Vt(e,e=>{e.pointerType===`touch`&&(r=!0,i=!0,t())},{delay:Pm}),$t(()=>Et(e),[`pointerup`,`pointercancel`,`pointerleave`],e=>{e.pointerType===`touch`&&(a=Date.now()),r&&(r=!1,n())});function o(){let e=i;return i=!1,e}function s(){return Date.now()-a<Fm}return{consumesClick:o,blocksMouseEnter:s}}var Lm={key:0,class:`card-skeleton absolute inset-0 rounded-xl`},Rm={key:2,class:`w-full h-full flex items-center justify-center bg-neutral-800/80`},zm={class:`absolute top-0 left-0 right-0 p-2 bg-gradient-to-b from-black/80 to-transparent z-[3]`},Bm={class:`flex items-center gap-1.5`},Vm={class:`text-xs font-semibold text-white truncate min-w-0 flex-1`},Hm={key:0,class:`text-[10px] font-semibold text-white/80 bg-black/60 px-1.5 py-0.5 rounded-md shrink-0`},Um=[`title`],Wm=[`title`,`disabled`],Gm={class:`text-[10px] text-white/70`},Km=[`aria-label`],qm=[`aria-label`],Jm={class:`block text-[11px] text-white font-medium truncate bg-black/50 rounded-md px-2 py-0.5`},Ym={class:`flex items-center gap-1 min-w-0`},Xm=[`title`],Zm={key:0,class:`flex items-center gap-0.5 shrink-0 opacity-85 group-hover:opacity-100 transition-opacity duration-200`},Qm=[`onClick`],$m=[`src`,`alt`],eh={key:0,class:`text-[10px] text-white/60 font-medium`},th={key:6,class:`absolute inset-0 z-[4] flex items-center justify-center pointer-events-none`},nh={key:7,class:`absolute bottom-10 left-1/2 -translate-x-1/2 z-[4] pointer-events-none`},rh={class:`text-[10px] font-semibold text-white bg-black/60 px-1.5 py-0.5 rounded-md whitespace-nowrap`,style:{"font-variant-numeric":`tabular-nums`}},ih=24,ah=30,oh=22,sh=28,ch=8,lh=8,uh=3e4,dh=Kd(Gn({__name:`RecordingCard`,props:{event:{},cameraName:{},camera:{},semanticScore:{},segIndex:{},hideSegmentBadge:{type:Boolean},selectionMode:{type:Boolean},selected:{type:Boolean},siblingActive:{type:Boolean}},emits:[`scrollToEvent`,`select`,`openTrace`,`segmentHover`],setup(e,{emit:t}){let n=e,i=t,a=ar(),o=Go(),{t:s}=St(),c=Jt(),u=r(`@camera.ui/camera-ui-nvr`),{plugin:d}=y(`@camera.ui/camera-ui-nvr`),f=Mm(),{mounted:p,toggleOverlay:m}=Nm(),{pictures:h,state:g}=et(()=>n.event,()=>[{kind:`cover`,segIndex:n.segIndex},{kind:`tiles`,segIndex:n.segIndex}]),{icons:_}=Or(),v=nn(Re,void 0),b=Tn(`rootRef`),x=Tn(`previewCanvasRef`),S=Tn(`footerRef`),C=Tn(`cardMenuRef`),w=P(!1),T=Im(b,()=>Ue(!0),()=>Ve()),E=P(!1),D=P(!1),O=P(0),k=P(null),A=P(!1),j=P(!1),te=P(),ne=P(0),re=V(()=>Af(void 0,`admin`)),ie=V(()=>k.value??n.event.favorite??!1),ae=V(()=>{if(n.semanticScore==null)return;let e=Math.max(0,Math.min(1,n.semanticScore));return{pct:e,label:`${(e*100).toFixed(0)}%`,color:e>=.5?`bg-green-500/80`:e>=.25?`bg-yellow-500/80`:`bg-red-400/80`}}),M=V(()=>h.value?De(h.value,n.event,`card`,n.segIndex):null),se=V(()=>{let e=n.segIndex??M.value?.segIndex;return e===void 0?void 0:n.event.segments?.[e]}),ce=V(()=>M.value?.url),le=V(()=>ce.value?`loaded`:g.value===`loading`||n.event.state===`active`?`loading`:`empty`),ue=V(()=>M.value?.label),de=V(()=>M.value?.type??n.event.types[0]??`motion`),fe=V(()=>{if(n.hideSegmentBadge)return;let e=n.event.segments?.length??0;return n.segIndex!==void 0&&e>1?`${n.segIndex+1}/${e}`:void 0}),N=V(()=>{let e=h.value,t=M.value?.url;if(!e||!t)return[];let r=[{url:t,label:M.value?.label,type:de.value,crop:!1}];for(let t of Ze(e,n.segIndex,n.event))r.some(e=>e.url===t.url)||r.push({url:t.url,label:t.label,type:t.type,crop:!0,faceSeg:t.seg??-1,attrIndex:t.attrIndex});if(n.segIndex===void 0)for(let t of Object.keys(e.cards??e.strips??{}).sort((e,t)=>Number(e)-Number(t))){let i=l(e.cards?.[t]??e.strips?.[t]);if(!i||r.some(e=>e.url===i))continue;let a=am(n.event,t);r.push({url:i,label:a,type:a,crop:!1})}return r.length>1?r:[]}),pe=V(()=>N.value.length>1),me=V(()=>N.value.length?Math.min(O.value,N.value.length-1):0),he=V(()=>pe.value?N.value[me.value]:void 0),ge=V(()=>!!he.value?.crop),_e=V(()=>he.value?.url??ce.value),ve=V(()=>he.value?.label??ue.value),ye=V(()=>{let e=se.value;return(e?We(n.event,e):[...new Set(n.event.types)]).filter(e=>e!==`motion`&&e!==`audio`)}),be=V(()=>n.cameraName??n.event.cameraId),xe=V(()=>N.value.map(e=>({url:e.url,type:e.type}))),Se=V(()=>ye.value.slice(0,Ce.value.icons)),Ce=V(()=>{let e=ne.value;if(!e)return{icons:2,tiles:2};let t=e-ch;n.selectionMode&&(t-=sh);let r=xe.value.length>0?52:0,i=Le(ye.value.length,Math.max(0,t-r),ih),a=ye.value.length>0?Math.max(1,i):0,o=a*ih+(a<ye.value.length?oh:0);return{icons:a,tiles:Le(xe.value.length,Math.max(0,t-o),ah)}}),we=V(()=>ye.value.slice(Ce.value.icons)),Te=V(()=>xe.value.slice(0,Ce.value.tiles)),Ee=V(()=>xe.value.length-Ce.value.tiles),Oe=V(()=>TL(se.value?.firstSeen??n.event.thumbnailAt??n.event.startTime)),ke=V(()=>!!(d.value&&n.event.endTime&&n.event.hasRecording!==!1)),Ae=V(()=>!!(re.value&&d.value&&n.event.state===`ended`)),je=V(()=>Ae.value&&ke.value),Me=V(()=>v?w.value?s(`views.recordings.no_preview`):E.value?v.status.value===`unavailable`?s(`views.recordings.no_preview`):v.status.value===`playing`&&v.previewTimeMs.value?He(v.previewTimeMs.value):``:``:``),Ne=V(()=>{let e=he.value;if(e?.crop)return e.type===`face`?{seg:e.faceSeg??-1,label:e.label||`unknown`,attrIndex:e.attrIndex}:void 0;let t=n.segIndex??M.value?.segIndex;if(me.value>0||t===void 0)return;let r=se.value?.attributes??[],i=r.flatMap((e,t)=>e.type===`face`&&!e.unlisted?[t]:[]);return i.length===1?{seg:t,label:r[i[0]].label||`unknown`,attrIndex:i[0]}:void 0}),Pe=V(()=>{let e=[];return re.value&&Ne.value&&e.push({key:`reassign`,label:s(`views.recordings.reassign_face`),icon:kp,loading:A.value,onClick:()=>Ye()}),re.value&&n.camera&&e.push({key:`trace`,label:s(`views.recordings.open_trace`),icon:Ep,onClick:()=>i(`openTrace`,se.value?.firstSeen)}),e.push({key:`ask`,label:s(`views.recordings.ask_assistant`),icon:br,onClick:()=>Ie()}),ke.value&&e.push({key:`download`,label:s(`views.recordings.download`),icon:Cp,loading:D.value,onClick:()=>$e()}),Ae.value&&e.push({key:`delete_event`,label:s(`views.recordings.delete_event`),icon:_p,iconProps:{class:`text-red-500`},labelProps:{class:`text-red-500`},buttonProps:{severity:`danger`},loading:j.value,onClick:()=>tt(s(`views.recordings.delete_event_confirm`),nt)}),je.value&&e.push({key:`delete_recording`,label:s(`views.recordings.delete_recording`),icon:bp,iconProps:{class:`text-red-500`},labelProps:{class:`text-red-500`},buttonProps:{severity:`danger`},loading:j.value,onClick:()=>tt(s(`views.recordings.delete_recording_confirm`),rt)}),e});function Fe(){Np(C.value?.hide)}function Ie(){let e=s(`views.recordings.ask_assistant_prompt`,{camera:n.cameraName??n.camera?.name??n.event.cameraId,time:new Date(n.event.startTime).toLocaleString(),id:n.event.id});c.push({path:`/assistant`,query:{prompt:e}})}function Le(e,t,n){return e===0||t<n?0:e*n<=t?e:Math.max(0,Math.floor((t-oh)/n))}function ze(e){let t=N.value.length;t&&(Ve(),te.value=void 0,O.value=(me.value+e+t)%t)}function Be(e,t){pe.value&&(t.stopPropagation(),Ve(),te.value=void 0,O.value=e)}function Ve(){w.value=!1,v&&E.value&&(E.value=!1,v.onHoverEnd())}function He(e){let t=new Date(e);return`${String(t.getHours()).padStart(2,`0`)}:${String(t.getMinutes()).padStart(2,`0`)}:${String(t.getSeconds()).padStart(2,`0`)}`}function Ue(e=!1){if(!v||me.value>0)return;let t=x.value;if(!t)return;let r=lt(n.event);n.event.hasRecording===!1||!r?w.value=!0:(E.value=!0,v.onHoverStart(t,n.event.cameraId,n.event.id,n.event.startTime,r,n.camera?.zones?.privacy,oe(n.event),{immediate:e}))}function Ge(){i(`segmentHover`,n.segIndex===void 0?null:n.event.id),!T.blocksMouseEnter()&&Ue()}function Ke(){i(`segmentHover`,null),w.value=!1,v&&(E.value=!1,v.onHoverEnd())}function qe(){T.consumesClick()||(n.selectionMode?i(`select`):i(`scrollToEvent`,se.value?.firstSeen??im(n.event)))}async function Je(e){Ve(),await m(`menu`,()=>C.value?.toggleMenu(e))}function Ye(){let e=Ne.value;if(!e)return;let t=!!he.value?.crop;f.openComponentDialog(Hp,{data:{title:s(`views.recordings.reassign_face`),confirmText:s(`components.form.button.save`),contentProps:{cropUrl:he.value?.url,oldName:e.label,eventId:n.event.id,segIndex:e.seg,attrIndex:e.attrIndex,confidence:e.attrIndex===void 0?void 0:n.event.segments?.[e.seg]?.attributes?.[e.attrIndex]?.confidence}},onConfirm:n=>Xe(e,n,t)})}async function Xe(e,t,r){if(A.value)return;let i=d.value;if(i?.reassignEventFace){A.value=!0;try{let a=e.attrIndex===void 0?void 0:{attrIndex:e.attrIndex};await i.reassignEventFace(n.event.id,e.seg,e.label,t,a)>0&&(r&&(te.value={seg:e.seg,label:t||`unknown`,attrIndex:e.attrIndex}),ee(n.event.id)),o.add({severity:`success`,detail:s(`views.recordings.reassign_done`),life:3e3})}catch(e){o.add({severity:`error`,detail:zL(e),life:5e3})}finally{A.value=!1}}}async function Qe(){let e=!ie.value;k.value=e;try{await u.setEventFavorite(n.event.id,e)}catch(e){k.value=null,o.add({severity:`error`,detail:zL(e),life:5e3})}}async function $e(){if(D.value)return;let e=d.value;if(e?.nvrExport&&n.event.endTime){D.value=!0;try{let t=await e.nvrExport(n.event.cameraId,n.event.startTime*1e3,n.event.endTime*1e3);await Yd({url:t.url,filename:t.filename})}catch(e){a.error(`Download failed:`,e),o.add({severity:`error`,summary:s(`views.recordings.download_failed`),detail:zL(e),life:5e3})}finally{D.value=!1}}}function tt(e,t){f.openTextDialog({data:{title:s(`components.dialog.title.confirm`),contentText:e,confirmText:s(`components.form.button.remove`),confirmButtonProps:{severity:`danger`}},onConfirm:t})}async function nt(){if(j.value)return;let e=d.value;if(e?.deleteEvents){j.value=!0;try{await e.deleteEvents([n.event.id]),o.add({severity:`success`,detail:s(`views.recordings.delete_event_done`),life:3e3})}catch(e){o.add({severity:`error`,detail:zL(e),life:5e3})}finally{j.value=!1}}}async function rt(){if(j.value||!n.event.endTime)return;let e=d.value;if(e?.nvrDeleteRange){j.value=!0;try{let t=await e.nvrDeleteRange(n.event.cameraId,(n.event.startTime-uh)*1e3,(n.event.endTime+uh)*1e3);t.endMs>t.startMs?o.add({severity:`success`,detail:s(`views.recordings.delete_recording_done`),life:3e3}):o.add({severity:`info`,detail:s(`views.recordings.delete_recording_too_recent`),life:5e3})}catch(e){a.error(`Recording delete failed:`,e),o.add({severity:`error`,detail:zL(e),life:5e3})}finally{j.value=!1}}}return G(N,e=>{let t=te.value;if(!t)return;let n=e.findIndex(e=>e.crop&&e.faceSeg===t.seg&&(t.attrIndex===void 0?e.label===t.label:e.attrIndex===t.attrIndex));n<0||(O.value=n,te.value=void 0)}),Wt(S,e=>{let t=e[0]?.contentRect.width??0,n=Math.round(t/lh)*lh;n!==ne.value&&(ne.value=n)}),Fn(()=>Ve()),(t,n)=>{let r=qd,i=mp,a=dp,o=ap,s=cp,c=$f,l=Xf,u=vf;return Y(),B(`div`,{ref_key:`rootRef`,ref:b,class:`recording-card relative group cursor-pointer`,onClickCapture:Fe,onClick:qe,onMouseenter:Ge,onMouseleave:Ke},[J(`div`,{class:Z([`bg-neutral-900 w-full rounded-xl overflow-hidden relative transition-shadow duration-200`,{"ring-2 ring-inset ring-primary/70":e.siblingActive}]),style:{"aspect-ratio":`1/1`}},[H(le)===`loading`?(Y(),B(`div`,Lm)):H(_e)?(Y(),F(r,{key:1,src:H(_e),alt:H(be),class:`pointer-events-none w-full h-full transition-transform duration-300 group-hover:scale-105`,"image-style":{objectFit:H(ge)?`contain`:`cover`},"image-container-class":`w-full h-full`},null,8,[`src`,`alt`,`image-style`])):(Y(),B(`div`,Rm,[(Y(),F(pn(H(_)[H(de)]??H(_).motion),{class:`w-10 h-10 text-white/20`}))])),H(v)?fn((Y(),B(`canvas`,{key:3,ref_key:`previewCanvasRef`,ref:x,class:`absolute inset-0 w-full h-full object-cover pointer-events-none z-[1]`},null,512)),[[Xt,H(E)]]):q(``,!0),n[2]||=J(`div`,{class:`absolute inset-0 bg-transparent group-hover:bg-black/30 pointer-events-none transition-colors duration-200 z-[2]`},null,-1),J(`div`,zm,[J(`div`,Bm,[J(`p`,Vm,L(H(be)),1),H(fe)?(Y(),B(`span`,Hm,L(H(fe)),1)):q(``,!0),H(ae)?(Y(),B(`span`,{key:1,class:Z([`text-[10px] font-bold text-white px-1.5 py-0.5 rounded-md shrink-0`,H(ae).color])},L(H(ae).label),3)):q(``,!0),H(re)&&!e.selectionMode?(Y(),B(`button`,{key:2,title:H(ie)?t.$t(`views.recordings.unfavorite`):t.$t(`views.recordings.favorite`),type:`button`,class:`card-icon-button w-5 h-5 shrink-0`,onClick:Bn(Qe,[`stop`]),onMouseenter:Ve},[H(ie)?(Y(),F(i,{key:0,class:`w-3 h-3 text-yellow-400`})):(Y(),F(a,{key:1,class:`w-3 h-3 text-white`}))],40,Um)):q(``,!0),H(Pe).length>0&&!e.selectionMode?(Y(),B(`button`,{key:3,title:t.$t(`views.recordings.more_actions`),type:`button`,class:`card-icon-button w-5 h-5 shrink-0`,disabled:H(D)||H(A)||H(j),onClick:Bn(Je,[`stop`]),onMouseenter:Ve},[H(D)||H(A)||H(j)?(Y(),F(o,{key:0,class:`w-3 h-3 text-white`})):(Y(),F(s,{key:1,class:`w-3 h-3 text-white`}))],40,Wm)):q(``,!0)]),J(`p`,Gm,L(H(Oe)),1)]),H(N).length>1?(Y(),B(U,{key:4},[J(`button`,{type:`button`,class:`card-icon-button carousel-nav absolute left-1 top-1/2 -translate-y-1/2 z-[3] w-7 h-7 transition-opacity duration-200`,"aria-label":t.$t(`views.recordings.prev_image`),onClick:n[0]||=Bn(e=>ze(-1),[`stop`]),onMouseenter:Ve},[z(c,{class:`w-5 h-5 text-white`})],40,Km),J(`button`,{type:`button`,class:`card-icon-button carousel-nav absolute right-1 top-1/2 -translate-y-1/2 z-[3] w-7 h-7 transition-opacity duration-200`,"aria-label":t.$t(`views.recordings.next_image`),onClick:n[1]||=Bn(e=>ze(1),[`stop`]),onMouseenter:Ve},[z(l,{class:`w-5 h-5 text-white`})],40,qm)],64)):q(``,!0),H(ve)?(Y(),B(`div`,{key:5,class:Z([`absolute left-1/2 -translate-x-1/2 z-[3] max-w-[85%] pointer-events-none transition-all duration-200`,H(Me)?`bottom-16`:`bottom-10`])},[J(`span`,Jm,L(H(ve)),1)],2)):q(``,!0),J(`div`,{ref_key:`footerRef`,ref:S,class:`absolute bottom-2 left-2 right-2 flex items-center justify-between gap-2 z-[3]`},[J(`div`,Ym,[e.selectionMode?(Y(),B(`div`,{key:0,class:Z([`w-6 h-6 rounded-full border-2 flex items-center justify-center transition-colors shrink-0`,e.selected?`bg-primary border-primary`:`bg-black/40 border-white/80`])},[e.selected?(Y(),F(u,{key:0,class:`w-4 h-4 text-white`})):q(``,!0)],2)):q(``,!0),(Y(!0),B(U,null,K(H(Se),e=>(Y(),B(`div`,{key:e,class:`flex items-center justify-center w-5 h-5 rounded-md bg-black/60 shrink-0`},[(Y(),F(pn(H(_)[e]??H(_).motion),{class:`w-3 h-3 text-white/80`}))]))),128)),H(we).length>0?(Y(),B(`span`,{key:1,title:H(we).join(`, `),class:`text-[10px] text-white/60 font-medium shrink-0`},` +`+L(H(we).length),9,Xm)):q(``,!0)]),H(Te).length>0||H(Ee)>0?(Y(),B(`div`,Zm,[(Y(!0),B(U,null,K(H(Te),(e,t)=>(Y(),B(`div`,{key:t,class:Z([`w-7 h-7 rounded overflow-hidden border bg-neutral-800 cursor-pointer`,t===H(me)?`border-primary/80`:`border-white/20`]),onClick:e=>Be(t,e)},[J(`img`,{src:e.url,alt:e.type,decoding:`async`,loading:`lazy`,class:`w-full h-full object-cover`},null,8,$m)],10,Qm))),128)),H(Ee)>0?(Y(),B(`span`,eh,`+`+L(H(Ee)),1)):q(``,!0)])):q(``,!0)],512),H(v)&&H(E)&&H(v).isLoading.value?(Y(),B(`div`,th,[z(o,{class:`w-7 h-7 text-white`})])):q(``,!0),H(Me)?(Y(),B(`div`,nh,[J(`span`,rh,L(H(Me)),1)])):q(``,!0)],2),H(p).menu?(Y(),F(rm,{key:0,ref_key:`cardMenuRef`,ref:C,items:H(Pe),popover:{pt:{content:{class:`p-0! rounded-xl! overflow-hidden!`}}}},null,8,[`items`])):q(``,!0)],544)}}}),[[`__scopeId`,`data-v-6e0b4efe`]]);async function fh({cameraData:e}){return(await $.post(`/cameras`,e)).data}async function ph({cameraData:e}){return(await $.post(`/cameras/preview`,e)).data}async function mh({signal:e}){return(await $.get(`/cameras/rooms`,{signal:e})).data}async function hh({cameraname:e,signal:t}){return(await $.get(`/cameras/${e}`,{signal:t})).data}async function gh({cameraname:e}){return(await $.delete(`/cameras/${e}/log`)).data}async function _h({cameraname:e,signal:t}){return(await $.get(`/cameras/${e}/log/download`,{signal:t})).data}async function vh({cameraname:e,sourcename:t,signal:n}){return(await $.get(`/cameras/${e}/info/${t}`,{signal:n})).data}async function yh({cameraname:e,sourcename:t,probeConfig:n,force:r,signal:i}){return(await $.get(`/cameras/${e}/probe/${t}`,{params:{...n,...r?{refresh:!0}:{}},signal:i})).data}async function bh({cameraname:e,forceNew:t,signal:n}){return(await $.get(`/cameras/${e}/snapshot`,{signal:n,params:{forceNew:t},responseType:`arraybuffer`})).data}async function xh({parameter:e,signal:t}){return(await $.get(`/cameras`,{params:e,signal:t})).data}async function Sh({cameraname:e,cameraData:t}){return(await $.patch(`/cameras/${e}`,t)).data}async function Ch({cameranames:e,cameraData:t}){return(await $.patch(`/cameras`,{cameranames:e,cameraData:t})).data}async function wh({cameranames:e}){return(await $.delete(`/cameras`,{data:{cameranames:e}})).data}async function Th({cameraname:e,signal:t}){return(await $.get(`/cameras/${e}/extensions`,{signal:t})).data}async function Eh({cameraname:e,pluginname:t,signal:n}){return(await $.get(`/cameras/${e}/${t}/config`,{signal:n})).data}async function Dh({cameraname:e,pluginname:t,configData:n}){return(await $.patch(`/cameras/${e}/${t}/config`,n)).data}async function Oh({cameraname:e,pluginname:t,configData:n}){return(await $.put(`/cameras/${e}/${t}/config`,n)).data}async function kh({cameraname:e,pluginname:t,configData:n}){return(await $.post(`/cameras/${e}/${t}/config`,n)).data}async function Ah({cameraname:e,pluginname:t,sensorId:n,signal:r}){return(await $.get(`/cameras/${e}/${t}/sensor/${n}/config`,{signal:r})).data}async function jh({cameraname:e,pluginname:t,sensorId:n,configData:r}){return(await $.patch(`/cameras/${e}/${t}/sensor/${n}/config`,r)).data}async function Mh({cameraname:e,pluginname:t,sensorId:n,configData:r}){return(await $.put(`/cameras/${e}/${t}/sensor/${n}/config`,r)).data}async function Nh({cameraname:e,pluginname:t,sensorId:n,configData:r}){return(await $.post(`/cameras/${e}/${t}/sensor/${n}/config`,r)).data}async function Ph({cameraname:e,pluginname:t,type:n}){return(await $.put(`/cameras/${e}/${t}/enable`,null,{params:{type:n}})).data}async function Fh({cameraname:e,pluginname:t,type:n}){return(await $.put(`/cameras/${e}/${t}/disable`,null,{params:{type:n}})).data}async function Ih({cameraname:e,pluginname:t,type:n}){return(await $.post(`/cameras/${e}/${t}`,null,{params:{type:n}})).data}async function Lh({cameraname:e,pluginname:t,type:n}){return(await $.delete(`/cameras/${e}/${t}`,{params:{type:n}})).data}async function Rh({cameraname:e,pluginname:t}){return(await $.post(`/cameras/${e}/${t}/activate`)).data}async function zh({cameraname:e,pluginname:t}){return(await $.delete(`/cameras/${e}/${t}/deactivate`)).data}async function Bh({cameraname:e,zones:t}){return(await $.patch(`/cameras/${e}/zone-config`,t)).data}async function Vh({cameraname:e}){return(await $.delete(`/cameras/${e}`)).data}async function Hh(){return(await $.delete(`/cameras`)).data}var Uh=class{_queryClient=$n();t=Ho.global.t;toast=Go();queryActivator=P([{name:`getCameraQuery`,enabled:!0},{name:`getCamerasQuery`,enabled:!0},{name:`getCameraSnapshotQuery`,enabled:!0},{name:`getCameraExtensionsQuery`,enabled:!0},{name:`getCameraExtensionConfigQuery`,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 nr({mutationFn:fh,onSuccess:async()=>{await this._queryClient.refetchQueries({queryKey:[`camerasList`]}),this.toast.add({severity:`success`,detail:this.t(`components.toast.camera_added`),life:3e3})}})}previewCameraQuery(){return nr({mutationFn:ph})}getCameraQuery(e){return Ko({queryKey:[`cameras`,e],queryFn:({signal:t})=>hh({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 Ko({queryKey:[`camerasExtensions`,e],queryFn:({signal:t})=>Th({cameraname:H(e),signal:t}),enabled:()=>this.queryActivator.value.some(e=>e.name===`getCameraExtensionsQuery`&&e.enabled)})}streamSourceInfoQuery(e,t){return Ko({queryKey:[`cameras`,e,`info`,t],queryFn:({signal:n})=>vh({cameraname:H(e),sourcename:H(t),signal:n}),enabled:()=>this.queryActivator.value.some(e=>e.name===`streamSourceInfoQuery`&&e.enabled)})}probeCameraSourceQuery(e,t,n){return Ko({queryKey:[`cameras`,e,`probe`,t],queryFn:({signal:r})=>yh({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 Ko({queryKey:[`camerasSnapshot`,e],queryFn:({signal:n})=>bh({cameraname:H(e),forceNew:H(t),signal:n}),enabled:()=>this.queryActivator.value.some(e=>e.name===`getCameraSnapshotQuery`&&e.enabled),retry:!1})}ensureCamerasList(e){return this._queryClient.query({queryKey:[`camerasList`,e],queryFn:({signal:t})=>xh({parameter:e,signal:t}),staleTime:`static`})}getCamerasQuery(e){return Ko({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 Ko({queryKey:[`camerasRooms`],queryFn:({signal:e})=>mh({signal:e})})}patchCameraQuery(){return nr({mutationFn:Sh,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 Ko({queryKey:[`cameras`,`extensions`,e,t],queryFn:({signal:n})=>Eh({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 nr({mutationFn:Dh,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 nr({mutationFn:Oh,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 nr({mutationFn:kh,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 Ko({queryKey:[`cameras`,`sensor`,e,t,n],queryFn:({signal:r})=>Ah({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 nr({mutationFn:jh,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 nr({mutationFn:Mh,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 nr({mutationFn:Nh,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 nr({mutationFn:Ph,onSuccess:async(e,t)=>{await this._queryClient.refetchQueries({queryKey:[`cameras`,t.cameraname],exact:!0}),await this._queryClient.refetchQueries({queryKey:[`camerasExtensions`,t.cameraname]})}})}disableCameraExtensionQuery(){return nr({mutationFn:Fh,onSuccess:async(e,t)=>{await this._queryClient.refetchQueries({queryKey:[`cameras`,t.cameraname],exact:!0}),await this._queryClient.refetchQueries({queryKey:[`camerasExtensions`,t.cameraname]})}})}addCameraExtensionQuery(){return nr({mutationFn:Ih,onSuccess:async(e,t)=>{await this._queryClient.refetchQueries({queryKey:[`cameras`,t.cameraname],exact:!0}),await this._queryClient.refetchQueries({queryKey:[`camerasExtensions`,t.cameraname]})}})}activateCameraExtensionQuery(){return nr({mutationFn:Rh,onSuccess:async(e,t)=>{await this._queryClient.refetchQueries({queryKey:[`cameras`,t.cameraname],exact:!0}),await this._queryClient.refetchQueries({queryKey:[`camerasExtensions`,t.cameraname]})}})}deactivateCameraExtensionQuery(){return nr({mutationFn:zh,onSuccess:async(e,t)=>{await this._queryClient.refetchQueries({queryKey:[`cameras`,t.cameraname],exact:!0}),await this._queryClient.refetchQueries({queryKey:[`camerasExtensions`,t.cameraname]})}})}patchZoneConfigQuery(){return nr({mutationFn:Bh,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})}})}removeCameraExtensionQuery(){return nr({mutationFn:Lh,onSuccess:async(e,t)=>{await this._queryClient.refetchQueries({queryKey:[`cameras`,t.cameraname],exact:!0}),await this._queryClient.refetchQueries({queryKey:[`camerasExtensions`,t.cameraname]})}})}removeCameraQuery(){return nr({mutationFn:Vh,onSuccess:async()=>{await this._queryClient.refetchQueries({queryKey:[`camerasList`]}),this.toast.add({severity:`success`,detail:this.t(`components.toast.camera_removed`),life:3e3})}})}removeCamerasQuery(){return nr({mutationFn:Hh,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 Ko({queryKey:[`logs`,e],queryFn:({signal:t})=>_h({cameraname:H(e),signal:t}),enabled:()=>this.queryActivator.value.some(e=>e.name===`downloadLogQuery`&&e.enabled)})}clearLogQuery(){return nr({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}},Wh={name:`VirtualScroller`,components:{SpinnerIcon:ri},extends:{name:`BaseVirtualScroller`,extends:Zr,provide(){return{$pcVirtualScroller:this,$parentInstance:this}},props:{id:{type:String,default:null},style:null,class:null,items:{type:Array,default:null},itemSize:{type:[Number,Array],default:0},scrollHeight:null,scrollWidth:null,orientation:{type:String,default:`vertical`},rtl:{type:Boolean,default:!1},numToleratedItems:{type:Number,default:null},delay:{type:Number,default:0},resizeDelay:{type:Number,default:10},lazy:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},loaderDisabled:{type:Boolean,default:!1},columns:{type:Array,default:null},loading:{type:Boolean,default:!1},showSpacer:{type:Boolean,default:!0},showLoader:{type:Boolean,default:!1},tabindex:{type:Number,default:0},inline:{type:Boolean,default:!1},step:{type:Number,default:0},appendOnly:{type:Boolean,default:!1},autoSize:{type:Boolean,default:!1},itemKey:{type:[String,Function],default:null}},style:si,beforeMount(){si.loadCSS({nonce:this.$primevueConfig?.csp?.nonce})}},inheritAttrs:!1,emits:[`update:numToleratedItems`,`scroll`,`scroll-index-change`,`lazy-load`],data(){let e=this.isBoth();return{first:e?{rows:0,cols:0}:0,last:e?{rows:0,cols:0}:0,page:e?{rows:0,cols:0}:0,numItemsInViewport:e?{rows:0,cols:0}:0,lastScrollPos:e?{top:0,left:0}:0,d_numToleratedItems:this.numToleratedItems,d_loading:this.loading,loaderArr:[],spacerStyle:{},contentStyle:{},observedWidth:0,observedHeight:0}},element:null,content:null,lastScrollPos:null,scrollTimeout:null,resizeTimeout:null,defaultWidth:0,defaultHeight:0,defaultContentWidth:0,defaultContentHeight:0,isRangeChanged:!1,lazyLoadState:{},resizeListener:null,initialized:!1,computed:{containerClass(){return[`p-virtualscroller`,this.class,{"p-virtualscroller-inline":this.inline,"p-virtualscroller-both p-both-scroll":this.isBoth(),"p-virtualscroller-horizontal p-horizontal-scroll":this.isHorizontal(),"p-virtualscroller-rtl":this.rtl&&this.isHorizontal()}]},contentClass(){return[`p-virtualscroller-content`,{"p-virtualscroller-loading":this.d_loading}]},loaderClass(){return[`p-virtualscroller-loader`,{"p-virtualscroller-loader-mask":!this.$slots.loader}]},loadedItems(){return this.items&&!this.d_loading?this.isBoth()?this.items.slice(this.appendOnly?0:this.first.rows,this.last.rows).map(e=>this.columns?e:e.slice(this.appendOnly?0:this.first.cols,this.last.cols)):this.isHorizontal()&&this.columns?this.items:this.items.slice(this.appendOnly?0:this.first,this.last):[]},loadedRows(){return this.d_loading?this.loaderDisabled?this.loaderArr:[]:this.loadedItems},loadedColumns(){if(this.columns){let e=this.isBoth(),t=this.isHorizontal();if(e||t)return this.d_loading&&this.loaderDisabled?e?this.loaderArr[0]:this.loaderArr:this.columns.slice(e?this.first.cols:this.first,e?this.last.cols:this.last)}return this.columns}},watch:{numToleratedItems(e){this.d_numToleratedItems=e},loading(e,t){this.lazy&&e!==t&&e!==this.d_loading&&(this.d_loading=e)},items(e,t){(!t||t.length!==(e||[]).length)&&this.scheduleInit()},itemSize(){this.scheduleInit()},orientation(){this.lastScrollPos=this.isBoth()?{top:0,left:0}:0},scrollHeight(){this.scheduleInit()},scrollWidth(){this.scheduleInit()}},mounted(){this.viewInit(),this.lastScrollPos=this.isBoth()?{top:0,left:0}:0,this.lazyLoadState=this.lazyLoadState||{}},updated(){!this.initialized&&this.viewInit()},unmounted(){this.unbindResizeListener(),this.unbindSizeObserver(),this.initialized=!1},methods:{resolveItemKey(e,t){let n=this.itemKey;return typeof n==`function`?n(e,t)??t:typeof n==`string`&&typeof e==`object`&&e?e[n]??t:t},viewInit(){Yr(this.element)&&(this.setContentEl(this.content),this.bindSizeObserver(),this.init(),this.calculateAutoSize(),this.bindResizeListener(),this.defaultWidth=ei(this.element),this.defaultHeight=ai(this.element),this.defaultContentWidth=ei(this.content),this.defaultContentHeight=ai(this.content),this.initialized=!0)},init(){this.disabled||(this.setSize(),this.calculateOptions(),this.setSpacerSize())},scheduleInit(){this._initScheduled||(this._initScheduled=!0,Promise.resolve().then(()=>{this._initScheduled=!1,this.init(),this.calculateAutoSize()}))},isVertical(){return this.orientation===`vertical`},isHorizontal(){return this.orientation===`horizontal`},isBoth(){return this.orientation===`both`},scrollTo(e){this.element&&this.element.scrollTo(e)},scrollToIndex(e,t=`auto`){let n=this.isBoth(),r=this.isHorizontal(),i=this.rtl&&r;if(n?e.every(e=>e>-1):e>-1){let a=this.first,{scrollTop:o=0,scrollLeft:s=0}=this.element,{numToleratedItems:c}=this.calculateNumItems(),l=this.getContentPosition(),u=this.itemSize,d=(e=0,t)=>e<=t?0:e,f=(e,t,n)=>e*t+n,p=(e=0,n=0)=>{i&&(e=this.element.scrollWidth-this.element.clientWidth-e),this.scrollTo({left:e,top:n,behavior:t})},m=n?{rows:0,cols:0}:0,h=!1,g=!1;n?(m={rows:d(e[0],c[0]),cols:d(e[1],c[1])},p(f(m.cols,u[1],l.left),f(m.rows,u[0],l.top)),g=this.lastScrollPos.top!==o||this.lastScrollPos.left!==s,h=m.rows!==a.rows||m.cols!==a.cols):(m=d(e,c),r?p(f(m,u,l.left),o):p(s,f(m,u,l.top)),g=this.lastScrollPos!==(r?s:o),h=m!==a),this.isRangeChanged=h,g&&(this.first=m)}},scrollInView(e,t,n=`auto`){if(t){let r=this.isBoth(),i=this.isHorizontal();if(r?e.every(e=>e>-1):e>-1){let{first:a,viewport:o}=this.getRenderedRange(),s=(e=0,t=0)=>this.scrollTo({left:e,top:t,behavior:n}),c=t===`to-start`,l=t===`to-end`;if(c){if(r)o.first.rows-a.rows>e[0]?s(o.first.cols*this.itemSize[1],(o.first.rows-1)*this.itemSize[0]):o.first.cols-a.cols>e[1]&&s((o.first.cols-1)*this.itemSize[1],o.first.rows*this.itemSize[0]);else if(o.first-a>e){let e=(o.first-1)*this.itemSize;i?s(e,0):s(0,e)}}else if(l){if(r)o.last.rows-a.rows<=e[0]+1?s(o.first.cols*this.itemSize[1],(o.first.rows+1)*this.itemSize[0]):o.last.cols-a.cols<=e[1]+1&&s((o.first.cols+1)*this.itemSize[1],o.first.rows*this.itemSize[0]);else if(o.last-a<=e+1){let e=(o.first+1)*this.itemSize;i?s(e,0):s(0,e)}}}}else this.scrollToIndex(e,n)},getRenderedRange(){let e=(e,t)=>Math.floor(e/(t||e)),t=this.first,n=0;if(this.element){let r=this.isBoth(),i=this.isHorizontal(),{scrollTop:a,scrollLeft:o}=this.element;r?(t={rows:e(a,this.itemSize[0]),cols:e(o,this.itemSize[1])},n={rows:t.rows+this.numItemsInViewport.rows,cols:t.cols+this.numItemsInViewport.cols}):(t=e(i?o:a,this.itemSize),n=t+this.numItemsInViewport)}return{first:this.first,last:this.last,viewport:{first:t,last:n}}},calculateNumItems(){let e=this.isBoth(),t=this.isHorizontal(),n=this.itemSize,r=this.getContentPosition(),i=this.observedWidth||(this.element?this.element.offsetWidth:0),a=this.observedHeight||(this.element?this.element.offsetHeight:0),o=i?i-r.left:0,s=a?a-r.top:0,c=(e,t)=>Math.ceil(e/(t||e)),l=e=>Math.ceil(e/2),u=e?{rows:c(s,n[0]),cols:c(o,n[1])}:c(t?o:s,n);return{numItemsInViewport:u,numToleratedItems:this.d_numToleratedItems||(e?[l(u.rows),l(u.cols)]:l(u))}},calculateOptions(){let e=this.isBoth(),t=this.first,{numItemsInViewport:n,numToleratedItems:r}=this.calculateNumItems(),i=(e,t,n,r=!1)=>this.getLast(e+t+(e<n?2:3)*n,r),a=e?{rows:i(t.rows,n.rows,r[0]),cols:i(t.cols,n.cols,r[1],!0)}:i(t,n,r);this.last=a,this.numItemsInViewport=n,this.d_numToleratedItems=r,this.$emit(`update:numToleratedItems`,this.d_numToleratedItems),this.showLoader&&(this.loaderArr=e?Array.from({length:n.rows}).map(()=>Array.from({length:n.cols})):Array.from({length:n})),this.lazy&&Promise.resolve().then(()=>{this.lazyLoadState={first:this.step?e?{rows:0,cols:t.cols}:0:t,last:Math.min(this.step?this.step:a,this.items?.length-1||0)},this.$emit(`lazy-load`,this.lazyLoadState)})},calculateAutoSize(){this.autoSize&&!this.d_loading&&Promise.resolve().then(()=>{if(this.content){let e=this.isBoth(),t=this.isHorizontal(),n=this.isVertical();this.content.style.minHeight=this.content.style.minWidth=`auto`,this.content.style.position=`relative`,this.element.style.contain=`none`;let[r,i]=[ei(this.element),ai(this.element)];(e||t)&&(this.element.style.width=r<this.defaultWidth?r+`px`:this.scrollWidth||this.defaultWidth+`px`),(e||n)&&(this.element.style.height=i<this.defaultHeight?i+`px`:this.scrollHeight||this.defaultHeight+`px`),this.content.style.minHeight=this.content.style.minWidth=``,this.content.style.position=``,this.element.style.contain=``}})},getLast(e=0,t){return this.items?Math.min(t?(this.columns||this.items[0])?.length||0:this.items?.length||0,e):0},getContentPosition(){if(this.content){if(this.cachedContentPosition&&this.cachedContentElement===this.content)return this.cachedContentPosition;let e=getComputedStyle(this.content),t=parseFloat(e.paddingLeft)+Math.max(parseFloat(e.left)||0,0),n=parseFloat(e.paddingRight)+Math.max(parseFloat(e.right)||0,0),r=parseFloat(e.paddingTop)+Math.max(parseFloat(e.top)||0,0),i=parseFloat(e.paddingBottom)+Math.max(parseFloat(e.bottom)||0,0);return this.cachedContentElement=this.content,this.cachedContentPosition={left:t,right:n,top:r,bottom:i,x:t+n,y:r+i},this.cachedContentPosition}return{left:0,right:0,top:0,bottom:0,x:0,y:0}},setSize(){if(this.element){let e=this.isBoth(),t=this.isHorizontal(),n=this.element.parentElement,r=this.scrollWidth||`${this.element.offsetWidth||n.offsetWidth}px`,i=this.scrollHeight||`${this.element.offsetHeight||n.offsetHeight}px`,a=(e,t)=>this.element.style[e]=t;e||t?(a(`height`,i),a(`width`,r)):a(`height`,i)}},setSpacerSize(){let e=this.items;if(e){let t=this.isBoth(),n=this.isHorizontal(),r=this.getContentPosition(),i=(e,t,n,r=0)=>this.spacerStyle={...this.spacerStyle,[`${e}`]:e===`height`?`calc(${(t||[]).length*n+r}px + var(--cui-scroll-end, 0px))`:(t||[]).length*n+r+`px`};t?(i(`height`,e,this.itemSize[0],r.y),i(`width`,this.columns||e[1],this.itemSize[1],r.x)):n?i(`width`,this.columns||e,this.itemSize,r.x):i(`height`,e,this.itemSize,r.y)}},setContentPosition(e){if(this.content&&!this.appendOnly){let t=this.isBoth(),n=this.isHorizontal(),r=this.rtl&&n,i=e?e.first:this.first,a=(e,t)=>e*t,o=(e=0,t=0)=>{let n=r?-e:e;this.contentStyle={...this.contentStyle,transform:`translate3d(${n}px, ${t}px, 0)`}};if(t){let e=i.rows,t=i.cols,n=this.itemSize;o(a(t,n[1]),a(e,n[0]))}else{let e=i,t=this.itemSize,r=a(e,t);n?o(r,0):o(0,r)}}},onScrollPositionChange(e){let t=e.target,n=this.isBoth(),r=this.isHorizontal(),i=this.rtl&&r,a=this.getContentPosition(),o=(e,t)=>e?e>t?e-t:e:0,s=(e,t)=>Math.floor(e/(t||e)),c=o(t.scrollTop,a.top),l=o(t.scrollLeft,a.left);i&&l<0&&(l=Math.abs(l));let u=n?{rows:0,cols:0}:0,d=this.last,f=!1,p=this.lastScrollPos;if(n){let e=this.lastScrollPos.top<=c,n=this.lastScrollPos.left<=l;if(!this.appendOnly||this.appendOnly&&(e||n)){let r={rows:s(c,this.itemSize[0]),cols:s(l,this.itemSize[1])},i={rows:this.calculateTriggerIndex(r.rows,this.first.rows,this.last.rows,this.numItemsInViewport.rows,this.d_numToleratedItems[0],e),cols:this.calculateTriggerIndex(r.cols,this.first.cols,this.last.cols,this.numItemsInViewport.cols,this.d_numToleratedItems[1],n)};u={rows:this.calculateFirst(r.rows,i.rows,this.first.rows,this.last.rows,this.numItemsInViewport.rows,this.d_numToleratedItems[0],e),cols:this.calculateFirst(r.cols,i.cols,this.first.cols,this.last.cols,this.numItemsInViewport.cols,this.d_numToleratedItems[1],n,!0)},d={rows:this.calculateLast(r.rows,u.rows,this.last.rows,this.numItemsInViewport.rows,this.d_numToleratedItems[0]),cols:this.calculateLast(r.cols,u.cols,this.last.cols,this.numItemsInViewport.cols,this.d_numToleratedItems[1],!0)},f=u.rows!==this.first.rows||d.rows!==this.last.rows||u.cols!==this.first.cols||d.cols!==this.last.cols||this.isRangeChanged,p={top:c,left:t.scrollLeft}}}else{let e=r?l:c,t=this.lastScrollPos<=e;if(!this.appendOnly||this.appendOnly&&t){let n=s(e,this.itemSize),r=this.calculateTriggerIndex(n,this.first,this.last,this.numItemsInViewport,this.d_numToleratedItems,t);u=this.calculateFirst(n,r,this.first,this.last,this.numItemsInViewport,this.d_numToleratedItems,t),d=this.calculateLast(n,u,this.last,this.numItemsInViewport,this.d_numToleratedItems),f=u!==this.first||d!==this.last||this.isRangeChanged,p=e}}return{first:u,last:d,isRangeChanged:f,scrollPos:p}},calculateTriggerIndex(e,t,n,r,i,a){return e<=i?i:a?n-r-i:t+i-1},calculateFirst(e,t,n,r,i,a,o,s=!1){if(e<=a)return 0;let c=Math.max(0,o?e<t?n:e-a:e>t?n:e-2*a),l=this.getLast(c,s);return c>l?l-i:c},calculateLast(e,t,n,r,i,a=!1){let o=t+r+2*i;return e>=i&&(o+=i+1),this.getLast(o,a)},onScrollChange(e){let{first:t,last:n,isRangeChanged:r,scrollPos:i}=this.onScrollPositionChange(e);if(r){let e={first:t,last:n};if(this.setContentPosition(e),this.first=t,this.last=n,this.lastScrollPos=i,this.$emit(`scroll-index-change`,e),this.lazy&&this.isPageChanged(t)){let e={first:this.step?Math.min(this.getPageByFirst(t)*this.step,(this.items?.length||0)-this.step):t,last:Math.min(this.step?(this.getPageByFirst(t)+1)*this.step:n,this.items?.length-1||0)};(this.lazyLoadState.first!==e.first||this.lazyLoadState.last!==e.last)&&this.$emit(`lazy-load`,e),this.lazyLoadState=e}}},onScroll(e){if(this.$emit(`scroll`,e),this.delay){if(this.scrollTimeout&&clearTimeout(this.scrollTimeout),this.isPageChanged()){if(!this.d_loading&&this.showLoader){let{isRangeChanged:t}=this.onScrollPositionChange(e);(t||this.step&&this.isPageChanged())&&(this.d_loading=!0)}this.scrollTimeout=setTimeout(()=>{this.onScrollChange(e),this.d_loading&&this.showLoader&&(!this.lazy||this.loading===void 0)&&(this.d_loading=!1,this.page=this.getPageByFirst())},this.delay)}}else this.onScrollChange(e)},onResize(){this.resizeTimeout&&clearTimeout(this.resizeTimeout),this.resizeTimeout=setTimeout(()=>{if(Yr(this.element)){let e=this.isBoth(),t=this.isVertical(),n=this.isHorizontal(),[r,i]=[ei(this.element),ai(this.element)],[a,o]=[r!==this.defaultWidth,i!==this.defaultHeight];(e?a||o:n?a:t&&o)&&(this.d_numToleratedItems=this.numToleratedItems,this.defaultWidth=r,this.defaultHeight=i,this.defaultContentWidth=ei(this.content),this.defaultContentHeight=ai(this.content),this.init())}},this.resizeDelay)},bindResizeListener(){this.resizeListener||(this.resizeListener=this.onResize.bind(this),window.addEventListener(`resize`,this.resizeListener),window.addEventListener(`orientationchange`,this.resizeListener))},bindSizeObserver(){!this.sizeObserver&&this.element&&typeof ResizeObserver<`u`&&(this.sizeObserver=new ResizeObserver(e=>{let t=e[0]?.borderBoxSize?.[0];this.observedWidth=t?t.inlineSize:e[0]?.contentRect.width??0,this.observedHeight=t?t.blockSize:e[0]?.contentRect.height??0}),this.sizeObserver.observe(this.element))},unbindSizeObserver(){this.sizeObserver&&=(this.sizeObserver.disconnect(),null)},unbindResizeListener(){this.resizeListener&&=(window.removeEventListener(`resize`,this.resizeListener),window.removeEventListener(`orientationchange`,this.resizeListener),null)},getOptions(e){let t=(this.items||[]).length,n=this.isBoth()?this.first.rows+e:this.first+e;return{index:n,count:t,first:n===0,last:n===t-1,even:n%2==0,odd:n%2!=0}},getLoaderOptions(e,t){let n=this.loaderArr.length;return{index:e,count:n,first:e===0,last:e===n-1,even:e%2==0,odd:e%2!=0,...t}},getPageByFirst(e){return Math.floor(((e??this.first)+this.d_numToleratedItems*4)/(this.step||1))},isPageChanged(e){return this.step&&!this.lazy?this.page!==this.getPageByFirst(e??this.first):!0},setContentEl(e){this.content=e||this.content||Xr(this.element,`[data-pc-section="content"]`)},elementRef(e){this.element=e},contentRef(e){this.content=e}}},Gh=[`tabindex`];function Kh(e,t,n,r,i,a){let o=Dn(`SpinnerIcon`);return e.disabled?(Y(),B(U,{key:1},[dn(e.$slots,`default`),dn(e.$slots,`content`,{items:e.items,rows:e.items,columns:a.loadedColumns})],64)):(Y(),B(`div`,sn({key:0,ref:a.elementRef,class:a.containerClass,tabindex:e.tabindex,style:e.style},e.ptmi(`root`),{onScroll:t[0]||=(...e)=>a.onScroll&&a.onScroll(...e)}),[dn(e.$slots,`content`,{styleClass:a.contentClass,items:a.loadedItems,getItemOptions:a.getOptions,loading:i.d_loading,getLoaderOptions:a.getLoaderOptions,itemSize:e.itemSize,rows:a.loadedRows,columns:a.loadedColumns,contentRef:a.contentRef,spacerStyle:i.spacerStyle,contentStyle:i.contentStyle,vertical:a.isVertical(),horizontal:a.isHorizontal(),both:a.isBoth()},()=>[J(`div`,sn({ref:a.contentRef,class:a.contentClass,style:i.contentStyle},e.ptm(`content`)),[(Y(!0),B(U,null,K(a.loadedItems,(t,n)=>dn(e.$slots,`item`,{item:t,options:a.getOptions(n)},void 0,void 0,a.resolveItemKey(t,n))),128))],16)]),e.showSpacer?(Y(),B(`div`,sn({key:0,class:`p-virtualscroller-spacer`,style:i.spacerStyle},e.ptm(`spacer`)),null,16)):q(``,!0),!e.loaderDisabled&&e.showLoader&&i.d_loading?(Y(),B(`div`,sn({key:1,class:a.loaderClass},e.ptm(`loader`)),[e.$slots&&e.$slots.loader?(Y(!0),B(U,{key:0},K(i.loaderArr,(t,n)=>dn(e.$slots,`loader`,{options:a.getLoaderOptions(n,a.isBoth()&&{numCols:e.d_numItemsInViewport.cols})},void 0,void 0,n)),128)):q(``,!0),dn(e.$slots,`loadingicon`,{},()=>[z(o,sn({spin:``,class:`p-virtualscroller-loading-icon`},e.ptm(`loadingIcon`)),null,16)])],16)):q(``,!0)],16,Gh))}var qh=Kd(Wh,[[`render`,Kh]]),Jh={aspectRatio:1,gap:8,hasMore:!1,loadMore:void 0,itemKey:void 0},Yh={class:`recordings-row`},Xh={key:1,class:`pointer-events-none absolute bottom-2 left-1/2 -translate-x-1/2 z-10 rounded-full bg-black/60 p-1.5`},Zh=Kd(Gn({__name:`CuiRecordingsGrid`,props:jn({items:{},minItemWidth:{},aspectRatio:{},gap:{},hasMore:{type:Boolean},loadMore:{type:Function},itemKey:{type:Function}},Jh),setup(e,{expose:t}){let n=e,r=Tn(`containerRef`),{width:i,height:a}=yt(r),o=P(0),s=P(!1),c=null,l=!1,u=V(()=>a.value>0?`${a.value}px`:void 0),d=V(()=>{let e=i.value;return e?Math.max(1,Math.floor((e+n.gap)/(n.minItemWidth+n.gap))):0}),f=V(()=>{let e=i.value,t=d.value;return!e||!t?0:Math.floor((e-(t-1)*n.gap)/t)}),p=V(()=>f.value?Math.floor(f.value/n.aspectRatio):0),m=V(()=>p.value?p.value+n.gap:0),h=V(()=>{let e=d.value;if(!e)return[];let t=[];for(let r=0;r<n.items.length;r+=e)t.push(n.items.slice(r,r+e));return t});function g(e){if(n.itemKey)return n.itemKey(e);let t=e;return t.id??t.key??JSON.stringify(e)}function _(e){let t=e;if(t&&t.length!==0)return g(t[0])}async function v(){if(s.value||!n.hasMore||!n.loadMore||c!==null&&n.items.length===c)return;s.value=!0;let e=n.items.length;try{await Promise.resolve(n.loadMore())}finally{s.value=!1,c=n.items.length===e?e:null}}function y(e){let t=e.target;t&&(o.value=t.scrollTop,t.scrollTop+t.clientHeight>=t.scrollHeight-m.value*3&&v())}function b(){(r.value?.querySelector(`.recordings-scroll`))?.scrollTo({top:0,behavior:`smooth`})}return un(()=>{let e=r.value;e&&f.value&&(e.style.setProperty(`--cell-w`,`${f.value}px`),e.style.setProperty(`--cell-h`,`${p.value}px`),e.style.setProperty(`--cell-gap`,`${n.gap}px`))}),G([()=>n.items.length,a,m,()=>n.hasMore],()=>{l||(l=!0,an(()=>{l=!1,n.hasMore&&m.value&&a.value&&h.value.length*m.value<a.value+m.value&&v()}))},{flush:`post`}),t({scrollToTop:b,scrollY:o,loadingMore:s}),(e,t)=>{let n=qh,i=ap;return Y(),B(`div`,{ref_key:`containerRef`,ref:r,class:`recordings-grid-root relative`},[H(h).length>0&&H(f)>0?(Y(),F(n,{key:0,items:H(h),"item-size":H(m),"scroll-height":H(u),"num-tolerated-items":H(2),"item-key":_,orientation:`vertical`,class:`recordings-scroll`,onScroll:y},{item:X(({item:t})=>[J(`div`,Yh,[(Y(!0),B(U,null,K(t,t=>(Y(),B(`div`,{key:g(t),class:`recordings-cell`},[dn(e.$slots,`item`,{item:t},void 0,!0)]))),128))])]),_:3},8,[`items`,`item-size`,`scroll-height`,`num-tolerated-items`])):q(``,!0),H(s)?(Y(),B(`div`,Xh,[z(i,{width:`18px`,height:`18px`,class:`text-white`})])):q(``,!0)],512)}}}),[[`__scopeId`,`data-v-8517a005`]]);function Qh(e){if(typeof VideoDecoder>`u`)return;let t=A({cacheSize:e});Mn(Re,t),mn(()=>t.dispose())}var $h={person:[.4,.65],face:[.25,.45],appearance:[.8,.92]},eg={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function tg(e,t){return Y(),B(`svg`,eg,[...t[0]||=[J(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[J(`path`,{d:`M3 12a9 9 0 1 0 18 0a9 9 0 0 0-18 0m9-3h.01`}),J(`path`,{d:`M11 12h1v4h1`})],-1)]])}var ng=I({name:`tabler-info-circle`,render:tg}),rg={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function ig(e,t){return Y(),B(`svg`,rg,[...t[0]||=[J(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M3 19a2 2 0 1 0 4 0a2 2 0 0 0-4 0M19 7a2 2 0 1 0 0-4a2 2 0 0 0 0 4m-8 12h5.5a3.5 3.5 0 0 0 0-7h-8a3.5 3.5 0 0 1 0-7H13`},null,-1)]])}var ag=I({name:`tabler-route`,render:ig}),og={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function sg(e,t){return Y(),B(`svg`,og,[...t[0]||=[J(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[J(`path`,{d:`M13 20H5a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h1a2 2 0 0 0 2-2a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1a2 2 0 0 0 2 2h1a2 2 0 0 1 2 2v3.5`}),J(`path`,{d:`M9 13a3 3 0 1 0 6 0a3 3 0 0 0-6 0m10 3l-2 3h4l-2 3`})],-1)]])}var cg=I({name:`tabler-camera-bolt`,render:sg}),lg={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function ug(e,t){return Y(),B(`svg`,lg,[...t[0]||=[J(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[J(`path`,{d:`M10 12a2 2 0 1 0 4 0a2 2 0 0 0-4 0`}),J(`path`,{d:`M21 12q-3.6 6-9 6t-9-6q3.6-6 9-6t9 6`})],-1)]])}var dg=I({name:`tabler-eye`,render:ug}),fg={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function pg(e,t){return Y(),B(`svg`,fg,[...t[0]||=[J(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M4 8V6a2 2 0 0 1 2-2h2M4 16v2a2 2 0 0 0 2 2h2m8-16h2a2 2 0 0 1 2 2v2m-4 12h2a2 2 0 0 0 2-2v-2M9 10h.01M15 10h.01M9.5 15a3.5 3.5 0 0 0 5 0`},null,-1)]])}var mg=I({name:`tabler-face-id`,render:pg}),hg={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function gg(e,t){return Y(),B(`svg`,hg,[...t[0]||=[J(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[J(`path`,{d:`M3 7a3 3 0 0 1 3-3h12a3 3 0 0 1 3 3v10a3 3 0 0 1-3 3H6a3 3 0 0 1-3-3z`}),J(`path`,{d:`M7 10a2 2 0 1 0 4 0a2 2 0 1 0-4 0m8-2h2m-2 4h2M7 16h10`})],-1)]])}var _g=I({name:`tabler-id`,render:gg}),vg={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function yg(e,t){return Y(),B(`svg`,vg,[...t[0]||=[J(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M11 12a1 1 0 1 0 2 0a1 1 0 1 0-2 0M4 8V6a2 2 0 0 1 2-2h2M4 16v2a2 2 0 0 0 2 2h2m8-16h2a2 2 0 0 1 2 2v2m-4 12h2a2 2 0 0 0 2-2v-2`},null,-1)]])}var bg=I({name:`tabler-focus-centered`,render:yg}),xg={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Sg(e,t){return Y(),B(`svg`,xg,[...t[0]||=[J(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M5 12h14m-6 6l6-6m-6-6l6 6`},null,-1)]])}var Cg=I({name:`tabler-arrow-right`,render:Sg}),wg={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Tg(e,t){return Y(),B(`svg`,wg,[...t[0]||=[J(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[J(`path`,{d:`M15 8h.01M3 6a3 3 0 0 1 3-3h12a3 3 0 0 1 3 3v12a3 3 0 0 1-3 3H6a3 3 0 0 1-3-3z`}),J(`path`,{d:`m3 16l5-5c.928-.893 2.072-.893 3 0l5 5`}),J(`path`,{d:`m14 14l1-1c.928-.893 2.072-.893 3 0l3 3`})],-1)]])}var Eg=I({name:`tabler-photo`,render:Tg}),Dg={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Og(e,t){return Y(),B(`svg`,Dg,[...t[0]||=[J(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M7 4v16l13-8z`},null,-1)]])}var kg=I({name:`tabler-player-play`,render:Og}),Ag={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function jg(e,t){return Y(),B(`svg`,Ag,[...t[0]||=[J(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M6 6a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1zm8 0a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1z`},null,-1)]])}var Mg=I({name:`tabler-player-pause`,render:jg}),Ng={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Pg(e,t){return Y(),B(`svg`,Ng,[...t[0]||=[J(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M10 5a2 2 0 1 0 4 0a2 2 0 1 0-4 0m7 3a2 2 0 1 0 4 0a2 2 0 1 0-4 0M3 11a2 2 0 1 0 4 0a2 2 0 1 0-4 0m10 8a2 2 0 1 0 4 0a2 2 0 1 0-4 0M6.5 9.5l3.5-3m4-1L17 7m1.5 3L16 17m-2.5.5l-7-5`},null,-1)]])}var Fg=I({name:`tabler-polygon`,render:Pg}),Ig=[`id`],Lg=[`fill`],Rg=[`id`],zg=[`fill`],Bg=[`d`],Vg=[`d`],Hg=[`d`],Ug=[`d`],Wg=[`x1`,`y1`,`x2`,`y2`,`stroke`],Gg=[`x1`,`y1`,`x2`,`y2`,`stroke`,`marker-end`,`marker-start`],Kg=[`x`,`y`,`fill`],qg=[`x`,`y`],Jg=[`x`,`y`,`fill`],Yg=[`x`,`y`],Xg=[`x`,`y`,`width`,`fill`],Zg=[`x`,`y`],Qg=16,$g=6,e_=6,t_=Kd(Gn({__name:`CuiPolygon`,props:{cameraZones:{},cameraLines:{},privacyZones:{},motionZones:{},alertZones:{},showLabels:{type:Boolean}},setup(e){let t=e,{t:n}=St(),{cameraZones:r}=jt(t),i=Tn(`zoneRef`),a=yt(i),o=V(()=>!t.cameraZones.length&&!t.cameraLines?.length&&!t.motionZones?.length&&!t.alertZones?.length&&!!t.privacyZones?.length),s=V(()=>{let e=a.width.value,i=a.height.value;if(!e||!i)return[];let o=[],s=(t,r,a)=>{if(r.points.length<3)return;let s=r.points.reduce((e,t)=>t[1]<e[1]?t:e,r.points[0]),c=`${n(`components.polygon.kind_${t}`)} · ${r.name}`,l=c.length*e_+12,u=s[0]/100*e,d=s[1]/100*i,f=Math.min(Math.max(u,0),Math.max(e-l,0)),p=d>=18?d-Qg-2:d+2;o.push({key:`${t}-${a}`,text:c,color:r.color,x:f,y:p,width:l})};return t.motionZones?.forEach((e,t)=>s(`motion`,e,t)),r.value.forEach((e,t)=>s(`object`,e,t)),t.alertZones?.forEach((e,t)=>s(`alert`,e,t)),o});function c(e){if(!e)return``;let t=e.map(e=>`${Math.round(e[0]/100*a.width.value)},${Math.round(e[1]/100*a.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 l(e){let t=a.width.value,n=a.height.value,r=e.points[0][0]/100*t,i=e.points[0][1]/100*n,o=e.points[1][0]/100*t,s=e.points[1][1]/100*n,c=(r+o)/2,l=(i+s)/2,u=o-r,d=s-i,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:r,h1y:i,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(t,n)=>(Y(),B(`svg`,{ref_key:`zoneRef`,ref:i,width:`100%`,height:`100%`,class:Z([`zones-container polygon-container min-w-0`,{"no-fade":H(o)}])},[J(`defs`,null,[(Y(!0),B(U,null,K(e.cameraLines??[],(e,t)=>(Y(),B(`marker`,{id:`arrow-ab-${t}`,key:`marker-ab-${t}`,markerWidth:`6`,markerHeight:`5`,refX:`5`,refY:`2.5`,orient:`auto`,markerUnits:`strokeWidth`},[J(`path`,{d:`M0,0 L6,2.5 L0,5 Z`,fill:e.color},null,8,Lg)],8,Ig))),128)),(Y(!0),B(U,null,K(e.cameraLines??[],(e,t)=>(Y(),B(`marker`,{id:`arrow-ba-${t}`,key:`marker-ba-${t}`,markerWidth:`6`,markerHeight:`5`,refX:`1`,refY:`2.5`,orient:`auto`,markerUnits:`strokeWidth`},[J(`path`,{d:`M6,0 L0,2.5 L6,5 Z`,fill:e.color},null,8,zg)],8,Rg))),128))]),(Y(!0),B(U,null,K(e.motionZones??[],(e,t)=>(Y(),B(`path`,{key:`motion-${t}`,d:c(e.points.map(e=>e)),style:W({fill:`${e.color}33`,stroke:e.color,"stroke-width":`2`})},null,12,Bg))),128)),(Y(!0),B(U,null,K(H(r),(e,t)=>(Y(),B(`path`,{key:`zone-${t}`,d:c(e.points.map(e=>e)),class:Z({dash:e.type===`intersect`}),style:W({fill:`${e.color}4D`,stroke:e.color,"stroke-width":`2`})},null,14,Vg))),128)),(Y(!0),B(U,null,K(e.alertZones??[],(e,t)=>(Y(),B(`path`,{key:`alert-${t}`,d:c(e.points.map(e=>e)),class:`alert`,style:W({fill:`${e.color}26`,stroke:e.color,"stroke-width":`3`})},null,12,Hg))),128)),(Y(!0),B(U,null,K(e.privacyZones??[],(e,t)=>(Y(),B(`path`,{key:`privacy-${t}`,d:c(e.points.map(e=>e)),style:{fill:`#000`,stroke:`#000`,"stroke-width":`2`}},null,8,Ug))),128)),(Y(!0),B(U,null,K(e.cameraLines??[],(e,t)=>(Y(),B(U,{key:`line-${t}`},[J(`line`,{x1:l(e).h1x,y1:l(e).h1y,x2:l(e).h2x,y2:l(e).h2y,stroke:e.color,"stroke-width":`2`,"stroke-dasharray":`6,4`,opacity:`0.5`},null,8,Wg),J(`line`,{x1:l(e).ax,y1:l(e).ay,x2:l(e).bx,y2:l(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,Gg),J(`rect`,{x:l(e).labelAx-8,y:l(e).labelAy-8,width:`16`,height:`16`,rx:`3`,fill:e.color},null,8,Kg),J(`text`,{x:l(e).labelAx,y:l(e).labelAy,fill:`#fff`,"font-size":`10`,"font-weight":`bold`,"text-anchor":`middle`,"dominant-baseline":`central`},`A`,8,qg),J(`rect`,{x:l(e).labelBx-8,y:l(e).labelBy-8,width:`16`,height:`16`,rx:`3`,fill:e.color},null,8,Jg),J(`text`,{x:l(e).labelBx,y:l(e).labelBy,fill:`#fff`,"font-size":`10`,"font-weight":`bold`,"text-anchor":`middle`,"dominant-baseline":`central`},`B`,8,Yg)],64))),128)),e.showLabels?(Y(!0),B(U,{key:0},K(H(s),e=>(Y(),B(`g`,{key:e.key},[J(`rect`,{x:e.x,y:e.y,width:e.width,height:Qg,rx:`3`,fill:e.color},null,8,Xg),J(`text`,{x:e.x+$g,y:e.y+Qg/2,fill:`#fff`,"font-size":`10`,"font-weight":`bold`,"dominant-baseline":`central`},L(e.text),9,Zg)]))),128)):q(``,!0)],2))}}),[[`__scopeId`,`data-v-6d1775a1`]]),n_=300,r_=50;function i_(e,t){let n=P(1),r=P({x:0,y:0}),i=P(!1),a=yt(e),o=yt(t),s=1,c=0,l={x:0,y:0},u={x:0,y:0},d=V(()=>{if(n.value<=1)return null;let e=a.width.value,t=a.height.value,i=o.width.value*n.value,s=o.height.value*n.value;return!e||!t||!i||!s?null:{width:`${i>e?e/i*100:100}%`,height:`${s>t?t/s*100:100}%`,left:`${i>e?(1-e/i)/2*100-r.value.x/i*100:0}%`,top:`${s>t?(1-t/s)/2*100-r.value.y/s*100:0}%`}}),f=V(()=>{let e=o.width.value,t=o.height.value;return!e||!t?null:{aspectRatio:`${e} / ${t}`}});function p(e){return e<=1?{x:0,y:0}:{x:Math.max(0,(o.width.value*e-a.width.value)/2),y:Math.max(0,(o.height.value*e-a.height.value)/2)}}function m(e,t){let n=p(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 h(e){if(i.value)return;let t=Math.max(1,Math.min(e.zoom,5));t<1.02&&(t=1);let a=Math.abs(e.zoom-t)>.001;if(t<=1){s=1,(r.value.x!==0||r.value.y!==0||n.value!==1)&&(i.value=!0,r.value={x:0,y:0},n.value=1,requestAnimationFrame(()=>setTimeout(()=>i.value=!1,150)));return}let o={x:e.pan.x,y:e.pan.y};if(t<s&&s>1){let e=(t-1)/(s-1);o.x=r.value.x*e,o.y=r.value.y*e}s=t;let c=m(o,t);a?(i.value=!0,n.value=t,r.value=c,requestAnimationFrame(()=>setTimeout(()=>i.value=!1,100))):r.value=c}function g(t){if(t.preventDefault(),t.stopPropagation(),i.value=!0,n.value>1.01)n.value=1,r.value={x:0,y:0},s=1;else if(e.value){let i=e.value.getBoundingClientRect(),a=(i.width/2-(t.clientX-i.left))*4,o=(i.height/2-(t.clientY-i.top))*4;n.value=5,s=5,r.value=m({x:a,y:o},5)}setTimeout(()=>i.value=!1,200)}function _(e){e.touches.length===1&&(u={x:e.touches[0].clientX,y:e.touches[0].clientY})}function v(e){if(e.touches.length!==0||e.changedTouches.length!==1)return;let t=e.changedTouches[0];if(Math.hypot(t.clientX-u.x,t.clientY-u.y)>10)return;let n=Date.now(),r=Math.hypot(t.clientX-l.x,t.clientY-l.y);n-c<n_&&r<r_?(g({clientX:t.clientX,clientY:t.clientY,preventDefault:()=>{},stopPropagation:()=>{}}),c=0):(c=n,l={x:t.clientX,y:t.clientY})}function y(){n.value=1,r.value={x:0,y:0},s=1}return{zoom:n,pan:r,constraining:i,minimapStyle:d,minimapBoxStyle:f,onZoomPan:h,onDoubleClick:g,onTouchStart:_,onTouchEnd:v,reset:y}}var a_={viewBox:`0 0 16 16`,width:`1.2em`,height:`1.2em`};function o_(e,t){return Y(),B(`svg`,a_,[...t[0]||=[J(`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 s_=I({name:`bi-person-fill`,render:o_}),c_={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function l_(e,t){return Y(),B(`svg`,c_,[...t[0]||=[J(`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 u_=I({name:`fluent-animal-paw-print-24-filled`,render:l_}),d_={viewBox:`0 0 16 16`,width:`1.2em`,height:`1.2em`};function f_(e,t){return Y(),B(`svg`,d_,[...t[0]||=[J(`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_=I({name:`fluent-vehicle-car-16-filled`,render:f_}),m_={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function h_(e,t){return Y(),B(`svg`,m_,[...t[0]||=[J(`g`,{fill:`currentColor`},[J(`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`}),J(`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 g_=I({name:`healthicons-running-24px`,render:h_}),__={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function v_(e,t){return Y(),B(`svg`,__,[...t[0]||=[J(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[J(`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`}),J(`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 y_=I({name:`lucide-boxes`,render:v_}),b_={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function x_(e,t){return Y(),B(`svg`,b_,[...t[0]||=[J(`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 S_=I({name:`mdi-card-text-outline`,render:x_}),C_={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function w_(e,t){return Y(),B(`svg`,C_,[...t[0]||=[J(`path`,{fill:`currentColor`,d:`M21 16.5c0 .38-.21.71-.53.88l-7.9 4.44c-.16.12-.36.18-.57.18s-.41-.06-.57-.18l-7.9-4.44A.99.99 0 0 1 3 16.5v-9c0-.38.21-.71.53-.88l7.9-4.44c.16-.12.36-.18.57-.18s.41.06.57.18l7.9 4.44c.32.17.53.5.53.88zM12 4.15l-1.89 1.07L16 8.61l1.96-1.11zM6.04 7.5L12 10.85l1.96-1.1l-5.88-3.4zM5 15.91l6 3.38v-6.71L5 9.21zm14 0v-6.7l-6 3.37v6.71z`},null,-1)]])}var T_=I({name:`mdi-package-variant-closed`,render:w_}),E_={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function D_(e,t){return Y(),B(`svg`,E_,[...t[0]||=[J(`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 O_=I({name:`mdi-tag-multiple`,render:D_}),k_={motion:{color:`#A855F7`,highlight:`rgba(168, 85, 247, 0.1)`,icon:g_},animal:{color:`#22C55E`,highlight:`rgba(34, 197, 94, 0.1)`,icon:u_},person:{color:`#3B82F6`,highlight:`rgba(59, 130, 246, 0.1)`,icon:s_},vehicle:{color:`#EF4444`,highlight:`rgba(239, 68, 68, 0.1)`,icon:p_},face:{color:`#F59E0B`,highlight:`rgba(245, 158, 11, 0.1)`,icon:wr},package:{color:`#EC4899`,highlight:`rgba(236, 72, 153, 0.1)`,icon:T_},license_plate:{color:`#06B6D4`,highlight:`rgba(6, 182, 212, 0.1)`,icon:S_},classifier:{color:`#8B5CF6`,highlight:`rgba(139, 92, 246, 0.1)`,icon:O_},other:{color:`#CAC443`,highlight:`rgba(202, 196, 67, 0.1)`,icon:y_}};function A_(e){return k_[e]??k_.other}var j_=(()=>{let e=new Uint32Array(256);for(let t=0;t<256;t++){let n=t;for(let e=0;e<8;e++)n=n&1?3988292384^n>>>1:n>>>1;e[t]=n>>>0}return e})();function M_(e){let t=4294967295;for(let n of e)t=j_[(t^n)&255]^t>>>8;return(t^4294967295)>>>0}function N_(e){return{time:e.getHours()<<11|e.getMinutes()<<5|e.getSeconds()>>1,date:e.getFullYear()-1980<<9|e.getMonth()+1<<5|e.getDate()}}function P_(e,t=new Date){let n=new TextEncoder,r=N_(t),i=[],a=[],o=0;for(let t of e){let e=n.encode(t.name),s=M_(t.data),c=t.data.length,l=new DataView(new ArrayBuffer(30));l.setUint32(0,67324752,!0),l.setUint16(4,20,!0),l.setUint16(6,2048,!0),l.setUint16(8,0,!0),l.setUint16(10,r.time,!0),l.setUint16(12,r.date,!0),l.setUint32(14,s,!0),l.setUint32(18,c,!0),l.setUint32(22,c,!0),l.setUint16(26,e.length,!0),l.setUint16(28,0,!0),i.push(new Uint8Array(l.buffer),e,t.data);let u=new DataView(new ArrayBuffer(46));u.setUint32(0,33639248,!0),u.setUint16(4,20,!0),u.setUint16(6,20,!0),u.setUint16(8,2048,!0),u.setUint16(10,0,!0),u.setUint16(12,r.time,!0),u.setUint16(14,r.date,!0),u.setUint32(16,s,!0),u.setUint32(20,c,!0),u.setUint32(24,c,!0),u.setUint16(28,e.length,!0),u.setUint16(30,0,!0),u.setUint16(32,0,!0),u.setUint16(34,0,!0),u.setUint16(36,0,!0),u.setUint32(38,0,!0),u.setUint32(42,o,!0),a.push(new Uint8Array(u.buffer),e),o+=30+e.length+c}let s=a.reduce((e,t)=>e+t.length,0),c=new DataView(new ArrayBuffer(22));return c.setUint32(0,101010256,!0),c.setUint16(4,0,!0),c.setUint16(6,0,!0),c.setUint16(8,e.length,!0),c.setUint16(10,e.length,!0),c.setUint32(12,s,!0),c.setUint32(16,o,!0),c.setUint16(20,0,!0),new Blob([...i,...a,new Uint8Array(c.buffer)],{type:`application/zip`})}function F_(e){return e.map(([e,t])=>[e/100,t/100])}function I_(e,t){let n=!1;for(let r=0,i=t.length-1;r<t.length;i=r++){let[a,o]=t[r],[s,c]=t[i];o>e[1]!=c>e[1]&&e[0]<(s-a)*(e[1]-o)/(c-o)+a&&(n=!n)}return n}function L_(e,t,n){return Math.sign((t[1]-e[1])*(n[0]-t[0])-(t[0]-e[0])*(n[1]-t[1]))}function R_(e,t,n,r){return L_(e,t,n)!==L_(e,t,r)&&L_(n,r,e)!==L_(n,r,t)}function z_(e){return[[e.x,e.y],[e.x+e.width,e.y],[e.x+e.width,e.y+e.height],[e.x,e.y+e.height]]}function B_(e,t){let n=F_(t);return z_(e).every(e=>I_(e,n))}function V_(e,t){let n=F_(t),r=z_(e);if(r.some(e=>I_(e,n))||n.some(([t,n])=>t>=e.x&&t<=e.x+e.width&&n>=e.y&&n<=e.y+e.height))return!0;for(let e=0;e<r.length;e++){let t=r[e],i=r[(e+1)%r.length];for(let e=0;e<n.length;e++)if(R_(t,i,n[e],n[(e+1)%n.length]))return!0}return!1}function H_(e,t){return I_([e.x+e.width/2,e.y+e.height],F_(t))}function U_(e,t,n){if(t.length<3)return!1;switch(n){case`contain`:return B_(e,t);case`anchor`:return H_(e,t);default:return V_(e,t)}}var W_={class:`text-xs font-mono text-white tabular-nums shrink-0 ml-1`},G_={class:`relative w-full h-1.5 rounded-full bg-white/25`},K_={class:`text-xs font-mono text-white/70 tabular-nums shrink-0`},q_=Kd(Gn({__name:`EventTraceScrubber`,props:{frames:{},startMs:{},endMs:{},playhead:{type:Function}},emits:[`scrubDown`,`scrubMove`,`scrubUp`],setup(e,{emit:t}){let n=e,r=t,i=Tn(`scrubRef`),a=!1,o=V(()=>l(n.playhead())*100),s=V(()=>{let e=new Set;for(let t of n.frames)t.tick.world.length>0&&e.add(Math.round(l(t.tick.tMs)*1e3)/10);return[...e]});function c(e){let t=Math.max(e,0)/1e3,n=Math.floor(t/60);return`${n}:${(t-n*60).toFixed(1).padStart(4,`0`)}`}function l(e){let t=n.endMs-n.startMs;return t<=0?0:Math.min(Math.max((e-n.startMs)/t,0),1)}function u(e){let t=i.value.getBoundingClientRect(),r=Math.min(Math.max((e.clientX-t.left)/Math.max(t.width,1),0),1);return n.startMs+r*(n.endMs-n.startMs)}function d(e){i.value.setPointerCapture(e.pointerId),a=!0,r(`scrubDown`,u(e))}function f(e){a&&r(`scrubMove`,u(e))}function p(e){a&&(a=!1,r(`scrubUp`,u(e)))}return(t,n)=>(Y(),B(U,null,[J(`span`,W_,L(c(e.playhead()-e.startMs)),1),J(`div`,{ref_key:`scrubRef`,ref:i,class:`flex-1 h-6 flex items-center cursor-pointer touch-none select-none`,onPointerdown:d,onPointermove:f,onPointerup:p,onPointercancel:p},[J(`div`,G_,[(Y(!0),B(U,null,K(H(s),e=>(Y(),B(`div`,{key:e,class:`absolute top-0 bottom-0 w-px bg-white/60`,style:W({left:`${e}%`})},null,4))),128)),J(`div`,{class:`absolute inset-y-0 left-0 rounded-full bg-primary-500`,style:W({width:`${H(o)}%`})},null,4),J(`div`,{class:`scrub-knob`,style:W({left:`${H(o)}%`})},null,4)])],544),J(`span`,K_,L(c(e.endMs-e.startMs)),1)],64))}}),[[`__scopeId`,`data-v-4d90eb0f`]]);function J_(e){return!e.empty&&!e.failed&&(e.single===!0||e.reads!==void 0)}var Y_={class:`event-trace flex flex-col h-full min-h-0 overflow-hidden text-wrap`},X_={key:0,class:`flex items-center justify-center py-12`},Z_={key:1,class:`text-sm text-muted text-center py-12`},Q_={key:2,class:`text-sm text-muted text-center py-12`},$_=[`data-stage-zoom`],ev={key:0},tv={key:1},nv={key:2},rv={key:3},iv={key:1,class:`absolute inset-0 z-[4] flex items-center justify-center text-sm text-white/70 px-6 text-center bg-black/60`},av={class:`absolute top-2 right-2 z-[5] dark-mode`},ov={key:1,class:`absolute top-4 left-4 z-[5]`},sv={class:`absolute bottom-0 inset-x-0 z-[5] dark-mode`},cv={class:`relative flex items-center gap-2 px-3 pb-2 pt-6`},lv={class:`font-mono text-sm text-white ml-1`},uv={class:`text-xs text-white/70`},dv={class:`ml-auto text-[10px] font-mono text-white/50`},fv={class:`bg-black shrink-0`},pv={class:`flex items-center gap-2 h-7 px-4 pt-2 text-[10px] text-white/50 whitespace-nowrap overflow-hidden`},mv={class:`shrink-0`},hv={key:1,class:`ml-auto min-w-0 flex items-center gap-1 text-amber-400`},gv={class:`truncate`},_v={class:`relative`},vv=[`onClick`],yv={key:1,class:`w-full h-full flex items-center justify-center text-[10px] text-white/50 px-1 text-center`},bv={class:`flex-1 min-h-0 overflow-y-auto`},xv={class:`tile`},Sv={class:`tile-head`},Cv={class:`tile-value text-color`},wv={class:`tile`},Tv={class:`tile-head`},Ev={key:0,class:`chips`},Dv={key:1,class:`tile-empty`},Ov={class:`tile`},kv={class:`tile-head`},Av={key:0,class:`chips`},jv={key:1,class:`tile-empty`},Mv={key:0,class:`tile`},Nv={class:`tile-head`},Pv={class:`chips`},Fv={class:`tile`},Iv={class:`tile-head`},Lv={key:0,class:`chips`},Rv={key:1,class:`tile-empty`},zv={class:`tile`},Bv={class:`tile-head`},Vv={key:0,class:`chips`},Hv={key:1,class:`tile-empty`},Uv={class:`tile`},Wv={class:`tile-head`},Gv={key:0,class:`chips`},Kv={key:1,class:`tile-empty`},qv={class:`tile`},Jv={class:`tile-head`},Yv={key:0,class:`chips`},Xv={class:`text-muted`},Zv={key:1,class:`tile-empty`},Qv=144,$v=60,ey=4,ty=6e5,ny=250,ry=12,iy=4,ay=2e3,oy=120,sy=`rgba(168, 85, 247, 0.22)`,cy=`#e5e7eb`,ly=Kd(Gn({__name:`EventTrace`,props:{event:{},camera:{},startAtMs:{},openedAt:{}},setup(e){let t=e,n=ar(),r=Go(),{t:i}=St(),{mdBreakpoint:a}=Md(),o=nn(`dialogRefProps`),{plugin:s}=y(`@camera.ui/camera-ui-nvr`),c=Ve(V(()=>t.camera._id),{sourceRole:V(()=>t.camera.interfaceSettings?.playbackSource??`auto`)}),{trace:l,frames:u,total:d,hasMore:f,hasEarlier:p,status:m,framesStatus:h,codecFallback:g,load:_,loadMore:v,loadEarlier:b,jumpTo:x,allTicks:S,ensureFrames:C,fullFrame:w,hasFullFrame:T,exactFrames:E}=pe(),D={active:`#22c55e`,tentative:`#eab308`,stationary:`#9ca3af`,lost:`#ef4444`,departed:`#ef4444`,external:`#60a5fa`},O=A_(`motion`).color,k={face:A_(`face`).color,plate:A_(`license_plate`).color,class:A_(`classifier`).color},A=Tn(`stageCanvasRef`),j=Tn(`playerRef`),ee=Tn(`stripRef`),te=Tn(`stageRef`),ne=Tn(`frameRef`),re=new Map,ae=new WeakMap,oe=Rt(),M=Rt(),se=P(!1),ce=Rt(),le=Rt(),ue=P(0),de=P(!1),fe=P(!1),N=P(!1),me=P(t.event.startTime),he=P(!1),ge=P(!1),_e=P(!1),ve=P(),ye=P(!1),be=0,xe,Se,Ce=!1,we=t.startAtMs,Te=0,Ee=NL(),{zoom:De,pan:Oe,constraining:ke,minimapStyle:Ae,minimapBoxStyle:je,onZoomPan:Me,onDoubleClick:Ne,onTouchStart:Pe,onTouchEnd:Fe}=i_(te,ne),Ie=V(()=>u.value.findIndex(e=>e.tick===oe.value)),Le=V(()=>u.value[Ie.value]),Re=V(()=>{if(le.value)return le.value;let e=M.value??Le.value?.thumb??u.value.find(e=>e.thumb)?.thumb;return e?.width?{w:e.width,h:e.height}:{w:16,h:9}}),ze=V(()=>l.value?.config?.zones??t.camera.zones),Be=V(()=>ze.value?.privacy??[]),He=V(()=>ze.value?.object??[]),Ue=V(()=>ze.value?.motion??[]),We=V(()=>ze.value?.alert??[]),Ge=V(()=>Be.value.filter(e=>e.dropDetections!==!1)),Ke=V(()=>l.value?.config?.objectConfidences??t.camera.detectionSettings?.object?.confidences??{}),qe=V(()=>(Le.value?.tick.reads??[]).filter(J_)),Je=V(()=>{let e=Le.value?.tick;if(!e)return[];let n=[],r=e=>n.push({scope:`frame`,text:e}),a=e=>n.push({scope:`event`,text:e});if(e.objectRan!==!1)for(let t of e.detections){let n=[t.x,t.y,t.width,t.height];e.world.some(e=>Tt(e.box,n))||r(zt(t.label,t.confidence,{x:t.x,y:t.y,width:t.width,height:t.height}))}for(let t of e.world)t.state===`tentative`&&r(i(`views.recordings.trace.hint_tentative`,{label:t.label,id:t.id}));for(let t of e.attrs??[])t.weak&&r(Lt(t));for(let e of qe.value){let t=`face${e.parent===void 0?``:` #${e.parent}`}`;e.match&&!e.name&&!e.single?r(i(`views.recordings.trace.hint_read_held`,{face:t,name:e.match,votes:e.votes??0,reads:e.reads??0})):!e.match&&e.closest&&r(i(`views.recordings.trace.hint_read_missed`,{face:t,seen:It(e)}))}for(let t of e.events)t.kind===`objectEntered`&&t.attested&&r(i(`views.recordings.trace.hint_witness`,{label:t.label,id:t.id}));t.camera.notificationSettings?.enabled===!1&&a(i(`views.recordings.trace.hint_notifications_off`));let o=t.event.segments??[];if(o.length===0)return a(i(`views.recordings.trace.hint_motion_only`)),n;let s=o.flatMap(e=>e.detections),c=s.filter(e=>e.alert===!1).map(e=>e.label);return c.length>0&&!s.some(e=>e.alert!==!1)&&a(i(`views.recordings.trace.hint_outside_alert_zones`,{labels:[...new Set(c)].join(`, `)})),n}),Ye=V(()=>c.mode.value===`play`),Xe=V(()=>N.value?Ye.value?i(`views.recordings.trace.pause`):i(`views.recordings.trace.play`):i(`views.recordings.trace.playback`)),Ze=V(()=>N.value?c.noData.value?i(`views.recordings.trace.no_recording`):c.unsupported.value?i(`views.recordings.trace.unsupported`):c.playbackError.value?i(`views.recordings.trace.playback_failed`):``:``),Qe=V(()=>N.value&&c.mode.value!==`idle`&&!c.loading.value&&!Ze.value),$e=V(()=>t.event.endTime?t.event.endTime:(u.value[u.value.length-1]?.tick.tMs??t.event.startTime)+ay),et=kn(rt,150,!0);function tt(e){oe.value=u.value[e]?.tick,C(e-iy,e+ry)}function nt(){bt(`instant`),rt()}function rt(){let e=ee.value;if(!e)return;let t=Math.floor(e.scrollLeft/152),n=Math.ceil(e.clientWidth/152)+1;C(t-iy,t+n+ry),f.value&&t+n+ry>=u.value.length&&v().then(()=>an(rt)),p.value&&t===0&&e.scrollLeft<76&&it()}async function it(){if(!ye.value){ye.value=!0;try{let e=ee.value,t=e?.scrollLeft??0,n=await b();if(n===0)return;await an(),e&&(e.scrollLeft=t+n*152),rt()}finally{ye.value=!1}}}async function at(){let e=ve.value;if(!e)return;let n=new Date(t.event.startTime);n.setHours(e.getHours(),e.getMinutes(),e.getSeconds(),0);let r=n.getTime();r<t.event.startTime-1e3&&(r+=864e5),await ot(r)}async function ot(e){let n=Math.min(Math.max(e,t.event.startTime),t.event.endTime??Date.now());we=n,oe.value=void 0,re.clear(),await x(n),await an(),nt(),N.value&&Ut(n)}function st(e,t){if(t instanceof HTMLCanvasElement){re.set(e,t);let n=u.value[e];if(!n?.thumb||ae.get(t)===n.thumb)return;ct(t,n.thumb),ae.set(t,n.thumb)}else re.delete(e)}function ct(e,t){e.width=t.width,e.height=t.height;let n=e.getContext(`2d`);n&&(n.drawImage(t,0,0),vt(n,t.width,t.height))}async function lt(e){let t=++be;if(clearTimeout(Se),xe=void 0,!e){de.value=!1,dt(void 0,!1);return}de.value=!T(e),de.value&&(Se=setTimeout(()=>{t===be&&(xe=e,ut())},ny));let n=await w(e);t===be&&(clearTimeout(Se),de.value=!1,n?(xe=void 0,dt(n,!0,e)):(xe=e,ut()||dt(void 0,!1)))}function ut(){let e=xe,t=e&&u.value.find(t=>t.tick===e)?.thumb;return t?(M.value!==t&&dt(t,!1,e),!0):!1}function dt(e,t,n){!e!=!M.value&&ue.value++,e&&t&&(le.value={w:e.width,h:e.height}),se.value=t,M.value=e,ce.value=e?n:void 0}function ft(){let e=A.value,t=ce.value,n=M.value;e&&t&&n?.width&&(se.value?pt(e,n,t):ct(e,n))}function pt(e,t,n){let r=t.width,a=t.height;e.width=r,e.height=a;let o=e.getContext(`2d`);if(!o)return;o.drawImage(t,0,0),vt(o,r,a);let s=Math.max(.6,r/640);o.lineWidth=2*s,o.font=`${Math.round(12*s)}px sans-serif`,o.textBaseline=`top`,fe.value&&gt(o,r,a,s);for(let e of n.motion??[])ht(o,e,r,a,sy),mt(o,e,r,a,O),_t(o,e,r,a,O,i(`views.recordings.trace.motion_label`),s);o.setLineDash([5*s,3*s]);for(let e of n.detections){let t=[e.x,e.y,e.width,e.height];n.world.some(e=>Tt(e.box,t))||(mt(o,t,r,a,cy),_t(o,t,r,a,cy,`${e.label} ${wt(e.confidence)} ${i(`views.recordings.trace.raw_label`)}`,s,!0))}o.setLineDash([]);for(let e of n.world){let t=D[e.state]??`#ffffff`;mt(o,e.box,r,a,t),_t(o,e.box,r,a,t,At(e),s)}for(let e of n.attrs??[]){let t=k[e.type]??`#ffffff`;e.weak&&o.setLineDash([5*s,3*s]),mt(o,e.box,r,a,t),o.setLineDash([]),_t(o,e.box,r,a,t,`${e.type}:${e.label} ${wt(e.conf)}${e.weak?` ${i(`views.recordings.trace.dropped_label`)}`:``}`,s,!0)}}function mt(e,t,n,r,i){e.strokeStyle=i,e.strokeRect(t[0]*n,t[1]*r,t[2]*n,t[3]*r)}function ht(e,t,n,r,i){e.fillStyle=i,e.fillRect(t[0]*n,t[1]*r,t[2]*n,t[3]*r)}function gt(e,t,n,r){let a=(a,o,s,c)=>{if(o.points.length<3)return;e.beginPath();for(let[r,[i,a]]of o.points.entries()){let o=i/100*t,s=a/100*n;r===0?e.moveTo(o,s):e.lineTo(o,s)}e.closePath(),e.fillStyle=`${o.color}${c}`,e.fill(),e.setLineDash(s.map(e=>e*r)),e.strokeStyle=o.color,e.stroke(),e.setLineDash([]);let l=o.points.reduce((e,t)=>t[1]<e[1]?t:e,o.points[0]);_t(e,[l[0]/100,l[1]/100,0,0],t,n,o.color,`${i(`components.polygon.kind_${a}`)} · ${o.name}`,r)};for(let e of Ue.value)a(`motion`,e,[],`26`);for(let e of He.value)a(`object`,e,e.type===`intersect`?[5,5]:[],`33`);for(let e of We.value)a(`alert`,e,[2,4],`1f`)}function _t(e,t,n,r,i,a,o,s=!1){let c=3*o,l=14*o,u=e.measureText(a).width+c*2,d=Math.min(Math.max(t[0]*n,0),Math.max(n-u,0)),f=t[1]*r,p=s?f+t[3]*r:f-l;p<0&&(p=f),p+l>r&&(p=r-l),e.fillStyle=i,e.fillRect(d,p,u,l),e.fillStyle=`#000`,e.fillText(a,d+c,p+c*.5)}function vt(e,t,n){e.fillStyle=`#000`;for(let r of Be.value)if(!(r.points.length<3)){e.beginPath();for(let[i,[a,o]]of r.points.entries()){let r=a/100*t,s=o/100*n;i===0?e.moveTo(r,s):e.lineTo(r,s)}e.closePath(),e.fill()}}function yt(){for(let[e,t]of re){let n=u.value[e];n?.thumb&&ct(t,n.thumb)}}function bt(e){let t=ee.value?.children[Ie.value];t instanceof HTMLElement&&t.scrollIntoView({block:`nearest`,inline:`center`,behavior:e})}function Ct(e){return e.thumb?`${e.thumb.width} / ${e.thumb.height}`:`${Re.value.w} / ${Re.value.h}`}function wt(e){return`${Math.round(e*100)}%`}function Tt(e,t){let n=t[0]+t[2]/2,r=t[1]+t[3]/2;return n>=e[0]&&n<=e[0]+e[2]&&r>=e[1]&&r<=e[1]+e[3]}function I(e){return((e-t.event.startTime)/1e3).toFixed(1)}function Et(e){return new Date(e).toLocaleTimeString(void 0,{hour:`2-digit`,minute:`2-digit`,second:`2-digit`})}function Dt(e){let t=[];return e.src&&t.push(e.src),e.rtp!==void 0&&t.push(`rtp ${e.rtp}`),t.join(` · `)}function Ot(e){switch(e){case`exact`:return`bg-green-600/80 text-white`;case`approx`:return`bg-amber-500/80 text-black`;default:return`bg-white/20 text-white`}}function kt(e){return e.state===`external`?``:` #${e.id}`}function At(e){return`${e.label} ${wt(e.score??e.conf)}${kt(e)} ${i(`views.recordings.trace.state_${e.state}`,e.state)}${Nt(e,` (`,`)`)}`}function jt(e){return`${e.label}${kt(e)} · ${i(`views.recordings.trace.state_${e.state}`,e.state)} · ${wt(e.score??e.conf)}${Nt(e,` · `)}`}function Nt(e,t,n=``){return e.score===void 0?``:`${t}${i(`views.recordings.trace.last_sure`,{value:wt(e.conf)})}${n}`}function Pt(e){let t=e.state===`external`||e.state===`crossed`?``:` #${e.id}`;return`${e.kind} ${e.label}${t}`}function Ft(e){let t=e.weak?` · ${i(`views.recordings.trace.dropped_label`)}`:``;return`${e.type}:${e.label} ${wt(e.conf)}${e.parent===void 0?``:` (#${e.parent})`}${t}`}function It(e){let t={name:e.closest,score:wt(e.closestScore??0)};return e.runnerUp?i(`views.recordings.trace.read_between`,{...t,runnerUp:e.runnerUp,runnerUpScore:wt(e.runnerUpScore??0)}):i(`views.recordings.trace.read_closest`,t)}function R(e){let t=`face${e.parent===void 0?``:` #${e.parent}`}`,n=e.match?`${e.match} ${wt(e.score??0)}`:e.closest?It(e):i(`views.recordings.trace.read_no_match`),r=``;return e.single?r=i(`views.recordings.trace.read_single`):e.name?r=i(`views.recordings.trace.read_named`,{name:e.name}):e.leader&&(r=i(`views.recordings.trace.read_votes`,{name:e.leader,votes:e.votes??0,reads:e.reads??0})),`${t} · ${n}${r?` · ${r}`:``}`}function Lt(e){let n=l.value?.config,r=t.camera.detectionSettings;if(e.type===`face`){let e=n?.face?.confidence??r?.face?.confidence??.5;return i(`views.recordings.trace.hint_below_threshold`,{label:`face`,min:wt(e)})}let a=n?.licensePlate??r?.licensePlate,o=`plate ${e.label}`;return e.weak===`ocr`?i(`views.recordings.trace.hint_plate_unsure`,{label:o,value:wt(e.conf),min:wt(a?.ocrConfidence??.9)}):e.weak===`length`?i(`views.recordings.trace.hint_plate_short`,{label:o,min:a?.minLength??4}):i(`views.recordings.trace.hint_below_threshold`,{label:o,min:wt(a?.confidence??.3)})}function zt(e,t,n){let r=Ke.value[e];if(r!==void 0&&t<Math.fround(r))return i(`views.recordings.trace.hint_below_threshold`,{label:e,min:wt(r)});if(Ge.value.some(e=>V_(n,e.points)))return i(`views.recordings.trace.hint_in_privacy`,{label:e});if(He.value.length>0){let t=He.value.filter(e=>U_(n,e.points,e.type));if(t.length===0)return i(`views.recordings.trace.hint_outside_zones`,{label:e});if(!t.some(t=>t.labels.length===0||t.labels.some(t=>t.toLowerCase()===e.toLowerCase())))return i(`views.recordings.trace.hint_label_not_in_zone`,{label:e,zones:t.map(e=>e.name).join(`, `)})}return i(`views.recordings.trace.hint_not_confirmed`,{label:e})}function Bt(e){let t=-1,n=1/0;for(let[r,i]of u.value.entries()){let a=Math.abs(i.tick.tMs-e);a<n&&(t=r,n=a)}return t}function Vt(){if(N.value){let e=me.value;c.stop(),N.value=!1,ge.value=!1;let t=Bt(e);t>=0&&t!==Ie.value&&tt(t)}else me.value=Le.value?.tick.tMs??t.event.startTime,N.value=!0,ge.value=!1,c.play(me.value*1e3)}function Ht(){let e=c.mode.value;e===`play`?c.pause():ge.value?(ge.value=!1,me.value=t.event.startTime,c.play(me.value*1e3)):e===`pause`?c.resume():c.play(me.value*1e3)}function Ut(e){me.value=e,ge.value=!1,c.mode.value===`play`?c.seek(e*1e3):c.scrub(e*1e3,!0)}function Wt(){return me.value}function Kt(e){he.value=!0,Ce=c.mode.value===`play`,Jt(e,!0)}function qt(e){he.value=!1,me.value=e,ge.value=!1,Ce?c.play(e*1e3):c.scrub(e*1e3,!0)}function Jt(e,t=!1){me.value=e;let n=performance.now();!t&&n-Te<oy||(Te=n,c.scrub(e*1e3,!0))}async function Yt(){if(!_e.value){_e.value=!0;try{let e=new TextEncoder,n=l.value?.config??null,r=Zt(),[i,a,o]=await Promise.all([S(),en(r),Xt()]),s=[],c=a&&r?{clipStartMs:r.startMs,clipEndMs:r.endMs}:{};s.push({name:`event.json`,data:e.encode(JSON.stringify({camera:{id:t.camera._id,name:t.camera.name},event:t.event,...c},null,2))});let u=[JSON.stringify({setup:n,exportedAt:Date.now(),ticks:i.length,total:d.value}),...i.map(e=>JSON.stringify({tick:e}))];s.push({name:`trace.jsonl`,data:e.encode(`${u.join(`
3
- `)}\n`)}),a&&s.push({name:`clip.mp4`,data:a}),s.push(...o),await Yd({blob:P_(s),filename:`trace-${t.camera.name}-${t.event.id.slice(0,8)}.zip`})}catch(e){n.error(`Trace bundle failed:`,e),r.add({severity:`error`,summary:i(`views.recordings.trace.bundle_failed`),detail:zL(e),life:5e3})}finally{_e.value=!1}}}async function Xt(){let e=[...u.value.entries()].filter(([,e])=>{let t=e.tick;return t.world.length>0||!!t.attrs?.length||t.detections.length>0}),t=[];for(let n=0;n<e.length&&t.length<$v;n+=ey){let r=e.slice(n,n+ey),i=await E(r.map(([,e])=>e.tick));for(let[e,n]of r){let r=i.get(n.tick);if(r)try{if(t.length>=$v)continue;let i=document.createElement(`canvas`);pt(i,r.bitmap,n.tick);let a=await tn(i);if(!a)continue;let o=r.exact?`exact`:`approx`;t.push({name:`frames/${String(e).padStart(4,`0`)}_${I(n.tick.tMs)}s_${o}.jpg`,data:a})}finally{r.bitmap.close()}}}return t}function Zt(){let{startTime:e,endTime:n}=t.event;if(!n)return;if(n-e<=ty)return{startMs:e,endMs:n};let r=Le.value?.tick.tMs??e,i=Math.min(Math.max(r-ty/2,e),n-ty);return{startMs:i,endMs:i+ty}}async function en(e){let r=s.value;if(r?.nvrExport&&e)try{let n=await r.nvrExport(t.event.cameraId,e.startMs*1e3,e.endMs*1e3),i=await fetch(n.url,{credentials:`include`});return i.ok?new Uint8Array(await i.arrayBuffer()):void 0}catch(e){n.warn(`Clip export for the trace bundle failed:`,e);return}}function tn(e){return new Promise(t=>{e.toBlob(async e=>t(e?new Uint8Array(await e.arrayBuffer()):void 0),`image/jpeg`,.85)})}function rn(){o.headerActions&&(o.headerActions.value=[{icon:Cp,tooltip:i(`views.recordings.trace.bundle_hint`),onClick:()=>Yt(),loading:_e.value,disabled:m.value!==`ready`}])}return $t(ee,`wheel`,e=>{Math.abs(e.deltaY)>Math.abs(e.deltaX)&&(e.preventDefault(),ee.value?.scrollBy({left:e.deltaY}))},{passive:!1}),G(j,(e,t,n)=>{e&&n(c.claimContainer(e))},{immediate:!0}),vn(()=>{if(!N.value||he.value||c.mode.value===`idle`)return;let e=ie(c);if(e<=0)return;let n=e/1e3;c.mode.value===`play`&&n>=$e.value?(c.pause(),ge.value=!0,me.value=$e.value):me.value=Math.min(Math.max(n,t.event.startTime),$e.value)},100),G(u,e=>{Ie.value<0&&e.length>0&&(tt(we===void 0?0:Math.max(Bt(we),0)),we=void 0),an(()=>{yt(),ut()})}),G(oe,e=>{lt(e),an(()=>bt(`smooth`)),e&&(ve.value=new Date(e.tMs)),N.value&&e&&Ut(e.tMs)}),G([M,se,ce,A,fe],()=>an(ft)),G(m,e=>{e===`ready`&&an(nt),rn()},{immediate:!0}),G(_e,rn),G(()=>t.openedAt,()=>{t.startAtMs!==void 0&&m.value===`ready`&&ot(t.startAtMs)}),Gt(()=>{clearTimeout(Se),N.value&&c.stop()}),hn(()=>{_(t.event.cameraId,t.event.id,t.startAtMs)}),(t,n)=>{let r=ti,i=t_,o=Fg,s=ci,c=Mg,l=kg,f=Eg,_=Ir,v=Cg,y=xr,b=qf,x=kr,S=bg,C=_g,w=mg,T=dg,E=cg,O=ag,re=ng,ie=Pn(`tooltip`);return Y(),B(`div`,Y_,[H(m)===`loading`?(Y(),B(`div`,X_,[z(r,{class:`w-[30px] h-[30px] m-0`,"stroke-width":`5`})])):H(m)===`empty`?(Y(),B(`div`,Z_,L(t.$t(`views.recordings.trace.empty`)),1)):H(m)===`unavailable`?(Y(),B(`div`,Q_,L(t.$t(`views.recordings.trace.unavailable`)),1)):H(m)===`ready`?(Y(),B(U,{key:3},[J(`div`,{ref_key:`stageRef`,ref:te,class:`stage relative w-full bg-black shrink-0 overflow-hidden`},[z(H(rr),{pan:H(Oe),"onUpdate:pan":n[0]||=e=>Qt(Oe)?Oe.value=e:null,zoom:H(De),"onUpdate:zoom":n[1]||=e=>Qt(De)?De.value=e:null,"pan-enabled":H(De)>1,"enable-control-button":!1,"dbl-click-enabled":!1,"min-zoom":1,"max-zoom":`STAGE_MAX_ZOOM`in t?t.STAGE_MAX_ZOOM:H(5),selector:`[data-stage-zoom='${H(Ee)}']`,"zoom-origin":`pointer`,class:Z([`absolute inset-0 flex items-center justify-center`,{"zoom-constraining":H(ke)}]),onPanned:H(Me),onZoom:H(Me),onDblclick:H(Ne),onTouchstart:H(Pe),onTouchend:H(Fe)},{default:X(()=>[J(`div`,{ref_key:`frameRef`,ref:ne,"data-stage-zoom":H(Ee),class:`frame relative`,style:W({"--ar-w":H(Re).w,"--ar-h":H(Re).h})},[J(`div`,{ref_key:`playerRef`,ref:j,class:`absolute inset-0`},null,512),J(`div`,{class:Z([`absolute inset-0 z-[3] transition-opacity duration-500`,H(Qe)?`opacity-0`:`opacity-100`])},[z(Rn,{"enter-active-class":`transition-opacity duration-300 ease-out`,"enter-from-class":`opacity-0`,"enter-to-class":`opacity-100`,"leave-active-class":`transition-opacity duration-200 ease-in`,"leave-from-class":`opacity-100`,"leave-to-class":`opacity-0`,mode:`out-in`},{default:X(()=>[H(M)?(Y(),B(`canvas`,{key:H(ue),ref_key:`stageCanvasRef`,ref:A,class:`absolute inset-0 w-full h-full object-contain`})):(Y(),B(`div`,{key:`empty-${H(ue)}`,class:`absolute inset-0 flex items-center justify-center text-sm text-white/60 px-6 text-center`},[H(de)||H(Le)?.status===`pending`||H(h)===`loading`?(Y(),B(`span`,ev,L(t.$t(`views.recordings.trace.loading_frames`)),1)):H(h)===`nodata`?(Y(),B(`span`,tv,L(t.$t(`views.recordings.trace.no_recording`)),1)):H(h)===`unsupported`?(Y(),B(`span`,nv,L(t.$t(`views.recordings.trace.unsupported`)),1)):(Y(),B(`span`,rv,L(t.$t(`views.recordings.trace.missing`)),1))]))]),_:1})],2),H(N)?(Y(),F(i,{key:0,class:`absolute inset-0 z-[4] pointer-events-none`,"camera-zones":H(fe)?H(He):[],"motion-zones":H(fe)?H(Ue):[],"alert-zones":H(fe)?H(We):[],"privacy-zones":H(Be),"show-labels":H(fe)},null,8,[`camera-zones`,`motion-zones`,`alert-zones`,`privacy-zones`,`show-labels`])):q(``,!0),H(Ze)?(Y(),B(`div`,iv,L(H(Ze)),1)):q(``,!0)],12,$_)]),_:1},8,[`pan`,`zoom`,`pan-enabled`,`max-zoom`,`selector`,`class`,`onPanned`,`onZoom`,`onDblclick`,`onTouchstart`,`onTouchend`]),H(Ae)?(Y(),B(`div`,{key:0,class:`zoom-minimap`,style:W(H(je)??void 0)},[J(`div`,{class:`zoom-minimap-viewport`,style:W(H(Ae))},null,4)],4)):q(``,!0),J(`div`,av,[fn((Y(),F(s,{rounded:``,text:``,severity:`contrast`,class:Z(H(fe)?`bg-white/25 hover:bg-white/35`:`bg-black/30 hover:bg-black/50`),onClick:n[2]||=e=>fe.value=!H(fe)},{icon:X(()=>[z(o,{class:`w-5 h-5`})]),_:1},8,[`class`])),[[ie,{value:t.$t(`views.recordings.trace.zones`)},void 0,{bottom:!0}]])]),H(de)?(Y(),B(`div`,ov,[z(r,{class:`w-[18px] h-[18px] m-0`,"stroke-width":`6`})])):q(``,!0),J(`div`,sv,[n[6]||=J(`div`,{class:`absolute inset-0 bg-gradient-to-t from-black/70 to-transparent pointer-events-none`},null,-1),J(`div`,cv,[fn((Y(),F(s,{text:``,severity:`contrast`,class:`control-bar-btn`,onClick:n[3]||=e=>H(N)?Ht():Vt()},{icon:X(()=>[H(Ye)?(Y(),F(c,{key:0,class:`w-[18px] h-[18px]`})):(Y(),F(l,{key:1,class:`w-[18px] h-[18px]`}))]),_:1})),[[ie,{value:H(Xe)},void 0,{top:!0}]]),H(N)?(Y(),B(U,{key:0},[fn((Y(),F(s,{text:``,severity:`contrast`,class:`control-bar-btn`,onClick:Vt},{icon:X(()=>[z(f,{class:`w-[18px] h-[18px]`})]),_:1})),[[ie,{value:t.$t(`views.recordings.trace.show_frame`)},void 0,{top:!0}]]),z(q_,{frames:H(u),"start-ms":e.event.startTime,"end-ms":H($e),playhead:Wt,onScrubDown:Kt,onScrubMove:Jt,onScrubUp:qt},null,8,[`frames`,`start-ms`,`end-ms`])],64)):H(Le)?(Y(),B(U,{key:1},[J(`span`,lv,`+`+L(I(H(Le).tick.tMs))+`s`,1),J(`span`,uv,L(Et(H(Le).tick.tMs)),1),J(`span`,{class:Z([`text-[10px] px-1.5 py-0.5 rounded-md font-semibold`,Ot(H(Le).status)])},L(t.$t(`views.recordings.trace.status_${H(Le).status}`)),3),J(`span`,dv,L(Dt(H(Le).tick)),1)],64)):q(``,!0)])])],512),J(`div`,fv,[J(`div`,pv,[J(`span`,mv,L(t.$t(`views.recordings.trace.summary`,{loaded:H(u).length,total:H(d)})),1),J(`form`,{class:`flex items-center gap-1 shrink-0 dark-mode`,onSubmit:Bn(at,[`prevent`])},[fn(z(_,{modelValue:H(ve),"onUpdate:modelValue":n[4]||=e=>Qt(ve)?ve.value=e:null,"time-only":``,"show-seconds":``,"hour-format":`24`,size:`small`,"aria-label":t.$t(`views.recordings.trace.jump_to_time`),pt:{pcInputText:{root:{class:`!h-5 !w-[84px] !px-1.5 !py-0 !text-[11px] tabular-nums`}}},onKeydown:xt(Bn(at,[`prevent`]),[`enter`])},null,8,[`modelValue`,`aria-label`,`onKeydown`]),[[ie,{value:t.$t(`views.recordings.trace.jump_to_time`)},void 0,{top:!0}]]),z(s,{type:`submit`,text:``,severity:`contrast`,class:`control-bar-btn !w-5 !h-5`,disabled:!H(ve)},{icon:X(()=>[z(v,{class:`w-3.5 h-3.5`})]),_:1},8,[`disabled`])],32),H(h)===`loading`?fn((Y(),F(r,{key:0,class:`w-[12px] h-[12px] m-0 shrink-0`,"stroke-width":`6`},null,512)),[[ie,{value:t.$t(`views.recordings.trace.loading_frames`)},void 0,{top:!0}]]):q(``,!0),H(g)?fn((Y(),B(`span`,hv,[z(y,{class:`w-3.5 h-3.5 shrink-0`}),J(`span`,gv,L(t.$t(`views.recordings.trace.codec_fallback_short`)),1)])),[[ie,{value:t.$t(`views.recordings.trace.codec_fallback`)},void 0,{top:!0}]]):q(``,!0)]),J(`div`,_v,[H(p)?fn((Y(),F(s,{key:0,rounded:``,severity:`secondary`,class:`!absolute left-2 top-1/2 -translate-y-1/2 z-[2] cui-icon-md shadow-md opacity-80 hover:opacity-100`,loading:H(ye),onClick:it},{icon:X(()=>[z(b,{class:`w-4 h-4`})]),_:1},8,[`loading`])),[[ie,{value:t.$t(`views.recordings.trace.earlier`)},void 0,{top:!0}]]):q(``,!0),J(`div`,{ref_key:`stripRef`,ref:ee,class:`strip flex gap-2 px-4 pt-2 pb-3 overflow-x-auto`,onScrollPassive:n[5]||=(...e)=>H(et)&&H(et)(...e)},[(Y(!0),B(U,null,K(H(u),(e,t)=>fn((Y(),B(`button`,{key:e.tick.tMs,type:`button`,class:Z([`thumb shrink-0 rounded-md overflow-hidden bg-black border-2 transition cursor-pointer`,t===H(Ie)?`border-primary`:`border-transparent opacity-70 hover:opacity-100 hover:border-white/40`]),style:W({width:`${Qv}px`,aspectRatio:Ct(e)}),onClick:e=>tt(t)},[e.thumb?(Y(),B(`canvas`,{key:0,ref_for:!0,ref:e=>st(t,e),class:`block w-full h-full`},null,512)):(Y(),B(`div`,yv,`+`+L(I(e.tick.tMs))+`s`,1))],14,vv)),[[ie,{value:`+${I(e.tick.tMs)}s · ${Et(e.tick.tMs)}`},void 0,{top:!0}]])),128))],544)])]),J(`div`,bv,[H(Le)?(Y(),B(`div`,{key:0,class:Z([`flex flex-col gap-2 px-4 py-3`,{"pb-safe-offset-3":H(a)}])},[J(`div`,xv,[J(`div`,Sv,[z(x,{class:`w-3.5 h-3.5`}),J(`span`,null,L(t.$t(`views.recordings.trace.motion_boxes`)),1)]),J(`span`,Cv,L(H(Le).tick.motion?.length??0),1)]),J(`div`,wv,[J(`div`,Tv,[z(S,{class:`w-3.5 h-3.5`}),J(`span`,null,L(t.$t(`views.recordings.trace.objects`)),1)]),H(Le).tick.world.length?(Y(),B(`div`,Ev,[(Y(!0),B(U,null,K(H(Le).tick.world,(e,t)=>(Y(),B(`span`,{key:t,class:`chip`},[J(`span`,{class:`chip-dot`,style:W({background:D[e.state]??`#fff`})},null,4),Mt(` `+L(jt(e)),1)]))),128))])):(Y(),B(`span`,Dv,`–`))]),J(`div`,Ov,[J(`div`,kv,[z(C,{class:`w-3.5 h-3.5`}),J(`span`,null,L(t.$t(`views.recordings.trace.attributes`)),1)]),H(Le).tick.attrs?.length?(Y(),B(`div`,Av,[(Y(!0),B(U,null,K(H(Le).tick.attrs,(e,t)=>(Y(),B(`span`,{key:t,class:`chip`},[J(`span`,{class:`chip-dot`,style:W({background:k[e.type]??`#fff`})},null,4),Mt(` `+L(Ft(e)),1)]))),128))])):(Y(),B(`span`,jv,`–`))]),H(qe).length?(Y(),B(`div`,Mv,[J(`div`,Nv,[z(w,{class:`w-3.5 h-3.5`}),J(`span`,null,L(t.$t(`views.recordings.trace.face_reads`)),1)]),J(`div`,Pv,[(Y(!0),B(U,null,K(H(qe),(e,t)=>(Y(),B(`span`,{key:t,class:`chip`},[J(`span`,{class:`chip-dot`,style:W({background:k.face})},null,4),Mt(` `+L(R(e)),1)]))),128))])])):q(``,!0),J(`div`,Fv,[J(`div`,Iv,[z(T,{class:`w-3.5 h-3.5`}),J(`span`,null,L(t.$t(`views.recordings.trace.raw_detections`)),1)]),H(Le).tick.detections.length?(Y(),B(`div`,Lv,[(Y(!0),B(U,null,K(H(Le).tick.detections,(e,t)=>(Y(),B(`span`,{key:t,class:`chip`},L(e.label)+` `+L(wt(e.confidence)),1))),128))])):(Y(),B(`span`,Rv,L(H(Le).tick.objectRan===!1?t.$t(`views.recordings.trace.detector_idle`):`–`),1))]),J(`div`,zv,[J(`div`,Bv,[z(E,{class:`w-3.5 h-3.5`}),J(`span`,null,L(t.$t(`views.recordings.trace.camera_report`)),1)]),H(Le).tick.witness?.length?(Y(),B(`div`,Vv,[(Y(!0),B(U,null,K(H(Le).tick.witness,(e,t)=>(Y(),B(`span`,{key:t,class:`chip`},L(e),1))),128))])):(Y(),B(`span`,Hv,`–`))]),J(`div`,Uv,[J(`div`,Wv,[z(O,{class:`w-3.5 h-3.5`}),J(`span`,null,L(t.$t(`views.recordings.trace.world_events`)),1)]),H(Le).tick.events.length?(Y(),B(`div`,Gv,[(Y(!0),B(U,null,K(H(Le).tick.events,(e,t)=>(Y(),B(`span`,{key:t,class:`chip`},L(Pt(e)),1))),128))])):(Y(),B(`span`,Kv,`–`))]),J(`div`,qv,[J(`div`,Jv,[z(re,{class:`w-3.5 h-3.5`}),J(`span`,null,L(t.$t(`views.recordings.trace.info`)),1)]),H(Je).length?(Y(),B(`div`,Yv,[(Y(!0),B(U,null,K(H(Je),(e,n)=>(Y(),B(`span`,{key:n,class:`chip`},[J(`span`,Xv,L(t.$t(`views.recordings.trace.scope_${e.scope}`)),1),Mt(` `+L(e.text),1)]))),128))])):(Y(),B(`span`,Zv,`–`))])],2)):q(``,!0)])],64)):q(``,!0)])}}}),[[`__scopeId`,`data-v-8c24713d`]]);function uy(){let e=Mm();function t(t,n,r){let i=Date.now(),a=e.openComponentDialog(ly,{data:{title:n.name,dedupeKey:`event-trace:${t.id}`,stayActive:!0,hideCancelButton:!0,hideConfirmButton:!0,contentProps:{event:t,camera:n,startAtMs:r,openedAt:i},headerActions:[],draggable:!0,blockDragOnSelectors:[`.p-dialog-body`],dismissableMask:!1,modal:!1,dialogContentClass:`!px-0 h-full`,goTo:`/cameras/${n.name}?startTs=${t.startTime}`},dialogSize:{desktop:{maxWidth:`1100px`,maxHeight:`calc(100vh - max(1rem, var(--safe-area-inset-top)) - max(1rem, var(--safe-area-inset-bottom)))`,width:`70vw`}}}),o=a.data?.contentProps?.value;return o&&o.openedAt!==i&&(o.startAtMs=r,o.openedAt=i),a}return{openEventTrace:t}}var dy={key:0,class:`px-3 pb-3 shrink-0`},fy={class:`flex justify-between mt-2 text-xs text-muted`},py={class:`relative similar-cell`},my={key:2,class:`flex-1 min-h-0 flex items-center justify-center p-4 text-sm text-muted text-center`},hy={key:1},gy=Kd(Gn({__name:`SimilarResultsGrid`,props:Pt({items:{},scaled:{type:Boolean},searching:{type:Boolean},searched:{type:Boolean},layout:{default:`grid`},activeKey:{default:void 0}},{breadth:{required:!0},breadthModifiers:{}}),emits:Pt([`open`],[`update:breadth`]),setup(e,{emit:t}){let n=new Uh,r=e,i=t,a=_n(e,`breadth`),{t:o}=St(),{openEventTrace:s}=uy();nn(Re,void 0)||Qh(10);let{data:c}=n.getCamerasQuery({page:1,pageSize:-1}),l=Tn(`listRef`),u=P(0),d=V(()=>new Map((c.value?.result??[]).map(e=>[e._id,e]))),f=V(()=>r.layout===`strip`?{items:r.items,itemSize:u.value+8,orientation:`horizontal`,scrollHeight:`100%`,itemKey:p,style:{"--similar-card":`${u.value}px`,"--similar-gap":`8px`}}:{items:r.items,minItemWidth:180,gap:8,itemKey:p});function p(e){return e.key}function m(e){let t=l.value?.firstElementChild;r.layout!==`strip`||!t||Math.abs(e.deltaY)<=Math.abs(e.deltaX)||(e.preventDefault(),t.scrollLeft+=e.deltaY)}function h(e,t){let n=d.value.get(e.cameraId);n&&s(e,n,t)}return Wt(l,([e])=>{let t=Math.floor(e.contentRect.height);r.layout===`strip`&&t>0&&t!==u.value&&(u.value=t)}),(t,n)=>{let r=Ur,s=dh,c=ap;return Y(),B(U,null,[e.scaled&&e.layout===`grid`?(Y(),B(`div`,dy,[z(r,{modelValue:a.value,"onUpdate:modelValue":n[0]||=e=>a.value=e,min:0,max:100,"aria-label":H(o)(`components.similar.more_broad`)},null,8,[`modelValue`,`aria-label`]),J(`div`,fy,[J(`span`,null,L(H(o)(`components.similar.more_precise`)),1),J(`span`,null,L(H(o)(`components.similar.more_broad`)),1)])])):q(``,!0),e.items.length?(Y(),B(`div`,{key:1,ref_key:`listRef`,ref:l,class:Z([`flex-1 min-h-0 min-w-0`,e.layout===`strip`?`similar-strip`:`px-3`]),onWheel:m},[e.layout===`grid`||H(u)?(Y(),F(pn(e.layout===`strip`?qh:Zh),sn({key:0},H(f),{class:`h-full`}),{item:X(({item:n})=>[J(`div`,py,[z(s,{event:n.event,"camera-name":H(d).get(n.event.cameraId)?.name,camera:H(d).get(n.event.cameraId),"semantic-score":n.score,"seg-index":n.segIndex,"sibling-active":n.key===e.activeKey,onScrollToEvent:e=>i(`open`,{event:n.event,camera:H(d).get(n.event.cameraId),timestamp:e},n),onOpenTrace:e=>h(n.event,e)},null,8,[`event`,`camera-name`,`camera`,`semantic-score`,`seg-index`,`sibling-active`,`onScrollToEvent`,`onOpenTrace`]),dn(t.$slots,`badge`,{item:n},void 0,!0)])]),_:3},16)):q(``,!0)],34)):(Y(),B(`div`,my,[e.searching?(Y(),F(c,{key:0,class:`w-6 h-6`})):e.searched?(Y(),B(`span`,hy,L(H(o)(`views.recordings.similar_empty`)),1)):q(``,!0)]))],64)}}}),[[`__scopeId`,`data-v-f3eae718`]]),_y={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function vy(e,t){return Y(),B(`svg`,_y,[...t[0]||=[J(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M18 6L6 18M6 6l12 12`},null,-1)]])}var yy=I({name:`tabler-x`,render:vy}),by={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function xy(e,t){return Y(),B(`svg`,by,[...t[0]||=[J(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M8 11a3 3 0 1 0 6 0a3 3 0 0 0-6 0m8 5l-2.5-2.5M3 7V5a2 2 0 0 1 2-2h2M3 17v2a2 2 0 0 0 2 2h2M17 3h2a2 2 0 0 1 2 2v2m-4 14h2a2 2 0 0 0 2-2v-2`},null,-1)]])}var Sy=I({name:`tabler-zoom-scan`,render:xy}),Cy=[`name`,`face`,`plate`,`person`,`appearance`],wy=new Set([`person`,`appearance`]);function Ty(e,t){if(!e)return[];let n=new Map(e.events.map(e=>[e.id,e])),r=[],i=new Set;for(let a of e.matches){let o=n.get(a.eventId),s=Oy(e,a),c=s?s[1]-t/100*(s[1]-s[0]):0;if(!o||a.score<c)continue;let l=a.segment>=0&&o.segments[a.segment]?a.segment:void 0,u=l===void 0?o.id:`${o.id}:seg:${l}`;i.has(u)||(i.add(u),r.push({key:u,event:o,segIndex:l,score:s?a.score:void 0,kind:ky(e,a),time:a.time}))}return r}function Ey(e){return e?e.matches.some(t=>Oy(e,t)!==void 0):!1}function Dy(e){let t=e.flat().sort((e,t)=>Cy.indexOf(e.kind)-Cy.indexOf(t.kind)||Ay(e,t)),n=new Set,r=new Set,i=new Set;return t.filter(e=>{let t=e.event.id;return n.has(t)||i.has(e.key)||e.segIndex===void 0&&r.has(t)?!1:(i.add(e.key),(e.segIndex===void 0?n:r).add(t),!0)})}function Oy(e,t){return t.kind?$h[t.kind]:e.mode===`face`&&e.label?void 0:$h[e.mode]}function ky(e,t){return t.kind?t.kind:e.mode===`face`&&e.label?`name`:e.mode}function Ay(e,t){return wy.has(e.kind)?(t.score??0)-(e.score??0):t.time-e.time}var jy=Symbol(`FindObject`);function My(e,t){return Dy(e.map(e=>Ty(e.result,t).map(t=>({...t,pick:e}))))}function Ny(e){return e.request.query.faceName||e.request.query.plate||e.camera.name}var Py={class:`find-bar mx-3`},Fy={class:`flex items-start gap-2`},Iy={class:`flex flex-wrap gap-1.5 min-w-0 flex-1 py-1`},Ly=[`src`],Ry={class:`truncate`},zy=[`aria-label`,`onClick`],By={key:0,class:`block mt-1 text-xs text-muted truncate`},Vy=[`src`],Hy={class:`p-3 shrink-0`},Uy={key:2,class:`find-bar-pill shadow-md`},Wy=[`src`],Gy=[`aria-label`,`onClick`],Ky={key:1,class:`find-bar-count text-xs truncate min-w-0`},qy={class:`flex items-center gap-3 ml-auto shrink-0`},Jy=[`aria-label`],Yy=[`src`],Xy=Kd(Gn({__name:`CuiFindObjectView`,props:{layout:{}},emits:[`open`,`showAll`],setup(e,{emit:t}){let n={grid:`flex flex-col pt-2`,strip:`flex flex-row pb-2`,bar:`find-bar-row flex items-center w-full`},r=t,{t:i}=St(),a=nn(jy,void 0),o=V(()=>a?.picks.value??[]),s=V(()=>a?.items.value??[]),c=V(()=>a?.openedKey.value),l=V({get:()=>a?.breadth.value??100,set:e=>{a&&(a.breadth.value=e)}}),u=V(()=>o.value.some(e=>e.searching)),d=V(()=>o.value.some(e=>e.result)),f=V(()=>o.value.some(e=>Ey(e.result))),p=V(()=>{if(a?.licenseRequired.value)return i(`views.recordings.similar_license`);if(!d.value)return``;let e=i(`views.recordings.similar_count`,s.value.length),t=new Set(s.value.map(e=>e.kind));return t.size>1?`${e} · ${i(`views.recordings.similar_surest_first`)}`:t.has(`person`)||t.has(`appearance`)?`${e} · ${i(`views.recordings.similar_best_first`)}`:e});function m(){r(`showAll`,o.value.map(e=>e.request))}function h(e,t){a&&(a.openedKey.value=t.key),r(`open`,e,t.pick)}return(t,r)=>{let g=Sy,_=yy,v=ap,y=ci,b=gy,x=Ur,S=Pn(`tooltip`);return H(a)?(Y(),B(`div`,{key:0,class:Z([`h-full min-h-0`,n[e.layout]])},[!H(o).length&&e.layout!==`bar`?(Y(),B(`div`,{key:0,class:Z([`flex flex-1 min-h-0 flex-col items-center justify-center px-6 text-center text-muted`,e.layout===`strip`?`gap-2 text-xs`:`gap-4 text-sm`])},[H(a).pickable.value?(Y(),B(U,{key:0},[z(g,{class:Z(e.layout===`strip`?`w-8 h-8`:`w-12 h-12`)},null,8,[`class`]),J(`span`,null,L(H(i)(`components.similar.find_hint`)),1)],64)):q(``,!0)],2)):e.layout===`grid`?(Y(),B(U,{key:1},[J(`div`,Py,[J(`div`,Fy,[J(`div`,Iy,[(Y(!0),B(U,null,K(H(o),e=>(Y(),B(`span`,{key:e.id,class:`find-chip`},[e.request.crop?(Y(),B(`img`,{key:0,src:e.request.crop,alt:``,class:`find-chip-crop`},null,8,Ly)):q(``,!0),J(`span`,Ry,L(H(Ny)(e)),1),J(`button`,{type:`button`,class:`find-chip-remove`,"aria-label":H(i)(`components.similar.remove_pick`),onClick:t=>H(a).remove(e.id)},[z(_,{class:`w-3 h-3`})],8,zy)]))),128))]),H(u)?(Y(),F(v,{key:0,class:`w-4 h-4 shrink-0 self-center text-muted`})):q(``,!0),fn((Y(),F(y,{severity:`secondary`,text:``,rounded:``,class:`shrink-0`,"aria-label":H(i)(`views.recordings.similar_clear`),onClick:r[0]||=e=>H(a).endSearch()},{icon:X(()=>[z(_,{class:`w-4 h-4`})]),_:1},8,[`aria-label`])),[[S,{value:H(i)(`views.recordings.similar_clear`)},void 0,{bottom:!0}]])]),H(p)?(Y(),B(`span`,By,L(H(p)),1)):q(``,!0)]),z(b,{breadth:H(l),"onUpdate:breadth":r[1]||=e=>Qt(l)?l.value=e:null,items:H(s),scaled:H(f),searching:H(u),searched:H(d),"active-key":H(c),onOpen:h},{badge:X(({item:e})=>[H(o).length>1&&e.pick.request.crop?(Y(),B(`img`,{key:0,src:e.pick.request.crop,alt:``,class:`find-badge`},null,8,Vy)):q(``,!0)]),_:1},8,[`breadth`,`items`,`scaled`,`searching`,`searched`,`active-key`]),J(`div`,Hy,[z(y,{label:H(i)(`components.similar.show_all`),severity:`secondary`,size:`small`,class:`w-full`,onClick:m},null,8,[`label`])])],64)):e.layout===`bar`&&H(o).length?(Y(),B(`div`,Uy,[(Y(!0),B(U,null,K(H(o),e=>(Y(),B(`span`,{key:e.id,class:`find-bar-pick`},[e.request.crop?(Y(),B(`img`,{key:0,src:e.request.crop,alt:``,class:`w-full h-full object-cover rounded-full`},null,8,Wy)):(Y(),F(g,{key:1,class:`w-4 h-4`})),J(`button`,{type:`button`,class:`find-bar-pick-remove`,"aria-label":H(i)(`components.similar.remove_pick`),onClick:t=>H(a).remove(e.id)},[z(_,{class:`w-2.5 h-2.5`})],8,Gy)]))),128)),H(u)?(Y(),F(v,{key:0,class:`w-4 h-4 shrink-0`})):q(``,!0),H(p)?(Y(),B(`span`,Ky,L(H(p)),1)):q(``,!0),J(`div`,qy,[H(f)?(Y(),F(x,{key:0,modelValue:H(l),"onUpdate:modelValue":r[2]||=e=>Qt(l)?l.value=e:null,min:0,max:100,"aria-label":H(i)(`components.similar.more_broad`),class:`find-bar-breadth`},null,8,[`modelValue`,`aria-label`])):q(``,!0),J(`button`,{type:`button`,class:`find-bar-all`,onClick:m},L(H(i)(`components.similar.show_all`)),1),fn((Y(),B(`button`,{type:`button`,class:`find-bar-end`,"aria-label":H(i)(`views.recordings.similar_clear`),onClick:r[3]||=e=>H(a).endSearch()},[z(_,{class:`w-4 h-4`})],8,Jy)),[[S,{value:H(i)(`views.recordings.similar_clear`)},void 0,{bottom:!0}]])])])):e.layout===`strip`?(Y(),F(b,{key:3,breadth:H(l),"onUpdate:breadth":r[4]||=e=>Qt(l)?l.value=e:null,layout:`strip`,items:H(s),scaled:H(f),searching:H(u),searched:H(d),"active-key":H(c),onOpen:h},{badge:X(({item:e})=>[H(o).length>1&&e.pick.request.crop?(Y(),B(`img`,{key:0,src:e.pick.request.crop,alt:``,class:`find-badge`},null,8,Yy)):q(``,!0)]),_:1},8,[`breadth`,`items`,`scaled`,`searching`,`searched`,`active-key`])):q(``,!0)],2)):q(``,!0)}}}),[[`__scopeId`,`data-v-b4439672`]]),Zy={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Qy(e,t){return Y(),B(`svg`,Zy,[...t[0]||=[J(`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 $y=I({name:`mdi-cast`,render:Qy}),eb={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function tb(e,t){return Y(),B(`svg`,eb,[...t[0]||=[J(`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 nb=I({name:`mingcute-timeline-fill`,render:tb}),rb={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function ib(e,t){return Y(),B(`svg`,rb,[...t[0]||=[J(`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 ab=I({name:`mingcute-timeline-line`,render:ib}),ob={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function sb(e,t){return Y(),B(`svg`,ob,[...t[0]||=[Dt(`<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 cb=I({name:`lucide-layout-grid`,render:sb}),lb={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function ub(e,t){return Y(),B(`svg`,lb,[...t[0]||=[J(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-width":`1.5`},[J(`path`,{d:`M2 12C2 7.28595 2 4.92893 3.46447 3.46447C4.92893 2 7.28595 2 12 2C16.714 2 19.0711 2 20.5355 3.46447C22 4.92893 22 7.28595 22 12C22 16.714 22 19.0711 20.5355 20.5355C19.0711 22 16.714 22 12 22C7.28595 22 4.92893 22 3.46447 20.5355C2 19.0711 2 16.714 2 12Z`}),J(`circle`,{cx:`12`,cy:`12`,r:`4`})],-1)]])}var db=I({name:`solar-camera-square-linear`,render:ub}),fb={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function pb(e,t){return Y(),B(`svg`,fb,[...t[0]||=[J(`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 mb=I({name:`mdi-picture-in-picture-bottom-right`,render:pb}),hb={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function gb(e,t){return Y(),B(`svg`,hb,[...t[0]||=[J(`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 _b=I({name:`tabler-share`,render:gb}),vb=Gn({__name:`CuiCameraMinimapViewport`,props:{viewportStyle:{type:Function}},setup(e){let t=e,n=V(()=>t.viewportStyle());return(e,t)=>H(n)?(Y(),B(`div`,{key:0,style:W(H(n))},null,4)):q(``,!0)}}),yb={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function bb(e,t){return Y(),B(`svg`,yb,[...t[0]||=[J(`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 xb=I({name:`mdi-speedometer`,render:bb}),Sb={viewBox:`0 0 32 32`,width:`1.2em`,height:`1.2em`};function Cb(e,t){return Y(),B(`svg`,Sb,[...t[0]||=[J(`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 wb=I({name:`fluent-open32-filled`,render:Cb}),Tb={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Eb(e,t){return Y(),B(`svg`,Tb,[...t[0]||=[J(`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 Db=I({name:`mingcute-fullscreen-exit-fill`,render:Eb}),Ob={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function kb(e,t){return Y(),B(`svg`,Ob,[...t[0]||=[J(`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 Ab=I({name:`mingcute-fullscreen-fill`,render:kb}),jb={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Mb(e,t){return Y(),B(`svg`,jb,[...t[0]||=[J(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[J(`circle`,{cx:`12`,cy:`12`,r:`1`}),J(`circle`,{cx:`12`,cy:`5`,r:`1`}),J(`circle`,{cx:`12`,cy:`19`,r:`1`})],-1)]])}var Nb=I({name:`lucide-more-vertical`,render:Mb}),Pb={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Fb(e,t){return Y(),B(`svg`,Pb,[...t[0]||=[J(`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 Ib=I({name:`eva-expand-outline`,render:Fb}),Lb={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Rb(e,t){return Y(),B(`svg`,Lb,[...t[0]||=[J(`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 zb=I({name:`eva-collapse-outline`,render:Rb}),Bb={viewBox:`0 0 16 16`,width:`1.2em`,height:`1.2em`};function Vb(e,t){return Y(),B(`svg`,Bb,[...t[0]||=[J(`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 Hb=I({name:`fluent-picture-in-picture16-filled`,render:Vb}),Ub={viewBox:`0 0 16 16`,width:`1.2em`,height:`1.2em`};function Wb(e,t){return Y(),B(`svg`,Ub,[...t[0]||=[J(`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 Gb=I({name:`fluent-picture-in-picture16-regular`,render:Wb}),Kb={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function qb(e,t){return Y(),B(`svg`,Kb,[...t[0]||=[J(`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),J(`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 Jb=I({name:`mage-microphone-mute-fill`,render:qb}),Yb={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Xb(e,t){return Y(),B(`svg`,Yb,[...t[0]||=[J(`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),J(`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 Zb=I({name:`mage-microphone-fill`,render:Xb}),Qb={viewBox:`0 0 16 16`,width:`1.2em`,height:`1.2em`};function $b(e,t){return Y(),B(`svg`,Qb,[...t[0]||=[J(`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 ex=I({name:`heroicons-speaker-x-mark16-solid`,render:$b}),tx={viewBox:`0 0 16 16`,width:`1.2em`,height:`1.2em`};function nx(e,t){return Y(),B(`svg`,tx,[...t[0]||=[J(`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),J(`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 rx=I({name:`heroicons-speaker-wave16-solid`,render:nx}),ix={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function ax(e,t){return Y(),B(`svg`,ix,[...t[0]||=[J(`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 ox=I({name:`mdi-fast-forward30`,render:ax}),sx={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function cx(e,t){return Y(),B(`svg`,sx,[...t[0]||=[J(`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 lx=I({name:`basil-pause-solid`,render:cx}),ux={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function dx(e,t){return Y(),B(`svg`,ux,[...t[0]||=[J(`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 fx=I({name:`basil-play-solid`,render:dx}),px={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function mx(e,t){return Y(),B(`svg`,px,[...t[0]||=[J(`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 hx=I({name:`mdi-rewind30`,render:mx}),gx=Gn({__name:`CuiCameraZoomable`,props:{state:{}},setup(e){let{pan:t,zoom:n}=e.state;return(e,r)=>(Y(),F(H(rr),{pan:H(t),"onUpdate:pan":r[0]||=e=>Qt(t)?t.value=e:null,zoom:H(n),"onUpdate:zoom":r[1]||=e=>Qt(n)?n.value=e:null,"pan-enabled":H(n)>1},{default:X(()=>[dn(e.$slots,`default`)]),_:3},8,[`pan`,`zoom`,`pan-enabled`]))}}),_x={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function vx(e,t){return Y(),B(`svg`,_x,[...t[0]||=[J(`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 yx=I({name:`mdi-video-off`,render:vx}),bx={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function xx(e,t){return Y(),B(`svg`,bx,[...t[0]||=[J(`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 Sx=I({name:`mdi-movie-off`,render:xx}),Cx={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function wx(e,t){return Y(),B(`svg`,Cx,[...t[0]||=[J(`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 Tx=I({name:`mdi-license`,render:wx}),Ex={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Dx(e,t){return Y(),B(`svg`,Ex,[...t[0]||=[J(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M3 10a7 7 0 1 0 14 0a7 7 0 1 0-14 0m5-2l4 4m0-4l-4 4m13 9l-6-6`},null,-1)]])}var Ox=I({name:`tabler-zoom-cancel`,render:Dx}),kx=96,Ax=`rgb(0 0 0 / 0.5)`;function jx(e,t,n){let r=Math.round(t),i=Math.round(n);if(r<1||i<1||!e.width||!e.height)return;let a=document.createElement(`canvas`);a.width=e.width,a.height=e.height;let o=a.getContext(`2d`);if(!o)return;let s=o.createImageData(e.width,e.height);for(let t=0;t<e.width*e.height;t++)s.data.fill(255,t*4,t*4+3),s.data[t*4+3]=e.data[t]??0;o.putImageData(s,0,0);let c=document.createElement(`canvas`);c.width=r,c.height=i;let l=c.getContext(`2d`,{willReadFrequently:!0});if(!l)return;l.imageSmoothingQuality=`high`,l.drawImage(a,0,0,r,i);let u=l.getImageData(0,0,r,i);for(let e=3;e<u.data.length;e+=4)u.data[e]=(u.data[e]-kx)*255/64;return l.putImageData(u,0,0),c}function Mx(e,t,n){let r=window.devicePixelRatio||1,i=Math.round(e.clientWidth*r),a=Math.round(e.clientHeight*r);e.width=i,e.height=a;let o=e.getContext(`2d`),s=jx(t,t.box.width*i,t.box.height*a);if(!o||!s)return;let c=Math.round(t.box.x*i),l=Math.round(t.box.y*a);o.fillStyle=Ax,o.fillRect(0,0,i,a),o.globalCompositeOperation=`destination-out`,o.drawImage(s,c,l);let u=Math.max(2,Math.round(2*r)),d=Fx(s,u,n);d&&(o.globalCompositeOperation=`source-over`,o.shadowColor=n,o.shadowBlur=16*r,o.drawImage(d,c-u,l-u))}function Nx(e,t,n){let r=window.devicePixelRatio||1,i=Math.round(e.clientWidth*r),a=Math.round(e.clientHeight*r);e.width=i,e.height=a;let o=e.getContext(`2d`);if(!o)return;let s=Math.max(2,Math.round(2*r));for(let e of t){let t=jx(e,e.box.width*i,e.box.height*a),r=t&&Px(t,n),c=t&&Fx(t,s,n);if(!r||!c)continue;let l=Math.round(e.box.x*i),u=Math.round(e.box.y*a);o.globalAlpha=.3,o.drawImage(r,l,u),o.globalAlpha=1,o.drawImage(c,l-s,u-s)}}function Px(e,t){let n=document.createElement(`canvas`);n.width=e.width,n.height=e.height;let r=n.getContext(`2d`);if(r)return r.drawImage(e,0,0),r.globalCompositeOperation=`source-in`,r.fillStyle=t,r.fillRect(0,0,n.width,n.height),n}function Fx(e,t,n){let r=document.createElement(`canvas`);r.width=e.width+t*2,r.height=e.height+t*2;let i=r.getContext(`2d`);if(i){for(let n=-1;n<=1;n++)for(let r=-1;r<=1;r++)i.drawImage(e,t+n*t,t+r*t);return i.globalCompositeOperation=`source-in`,i.fillStyle=n,i.fillRect(0,0,r.width,r.height),i.globalCompositeOperation=`destination-out`,i.drawImage(e,t,t),r}}var Ix=[`src`],Lx={class:`truncate`},Rx={class:`text-sm truncate`},zx=3500,Bx=Kd(Gn({__name:`CuiSimilarPicker`,props:{camera:{},frame:{},point:{},still:{type:Boolean},continuable:{type:Boolean}},emits:[`pick`,`continue`],setup(e,{emit:t}){let n=e,r=t,{t:i}=St(),{status:a,object:o,objects:s,load:c,detectAll:l,pickAt:u,clear:d}=h(()=>({id:n.camera._id,assignments:n.camera.assignments,confidences:n.camera.detectionSettings?.object?.confidences,faceConfidence:n.camera.detectionSettings?.face?.confidence,faceSensitivity:n.camera.detectionSettings?.face?.matchSensitivity,plate:n.camera.detectionSettings?.licensePlate})),f=Tn(`outlineCanvas`),p=Rt(),m=Rt(),g=P(!0),_=P(!1),v=P(-1),y,b=!1,x=!1,S=!1,C=0,w=V(()=>a.value===`scanning`||a.value===`reading`),T=V(()=>!n.frame||_.value||w.value),E=V(()=>!!n.frame&&!w.value&&a.value!==`noDetector`&&a.value!==`failed`),D=V(()=>{switch(a.value){case`scanning`:return i(`components.similar.scanning`);case`reading`:return i(`components.similar.reading`);case`nothing`:return i(`components.similar.no_objects`);case`noDetector`:return i(`components.similar.no_detector`);case`failed`:return i(`components.similar.failed`);case`ready`:return o.value?.query?i(`components.similar.searching`):o.value?.label===`vehicle`?i(`components.similar.no_vehicle_notice`):i(`components.similar.no_face_notice`);default:return i(`components.similar.pick_hint`)}});function O({x:e,y:t,width:n,height:r}){return{left:`${e*100}%`,top:`${t*100}%`,width:`${n*100}%`,height:`${r*100}%`}}function k(){let e=f.value,t=o.value?.mask;e&&t&&Mx(e,t,getComputedStyle(e).color)}function A(e,t){return{x:(e.clientX-t.left)/t.width,y:(e.clientY-t.top)/t.height}}function j(e){let t=-1,n=1/0;return s.value.forEach(({box:r},i)=>{let a=r.width*r.height;e.x>=r.x&&e.x<=r.x+r.width&&e.y>=r.y&&e.y<=r.y+r.height&&a<n&&(t=i,n=a)}),t}function ee(e,t){if(j(e)>=0)return e;let n,r=16;for(let{box:i}of s.value){let a=Math.max(i.x-e.x,0,e.x-i.x-i.width)*t.width,o=Math.max(i.y-e.y,0,e.y-i.y-i.height)*t.height;Math.hypot(a,o)>r||(r=Math.hypot(a,o),n={x:i.x+i.width/2,y:i.y+i.height/2})}return n??e}function te(){x=!0}function ne(e){e.touches.length>1?S=!0:(S=!1,e.stopPropagation())}function re(e){if(e.pointerType===`touch`)return;let t=e.currentTarget.getBoundingClientRect();if(!t.width||!t.height)return;let n=j(A(e,t));n!==v.value&&(v.value=n)}async function ie(e){let t=x&&!S;if(x=!1,S=!1,!t||!E.value)return;let n=e.currentTarget.getBoundingClientRect();if(!n.width||!n.height)return;let r=A(e,n);await oe(e.pointerType===`touch`?ee(r,n):r)}async function ae(){let e=++C;_.value=!0;try{await l()}finally{e===C&&(_.value=!1)}}async function oe(e){p.value=e;let t=await u(e.x,e.y);t?.query&&r(`pick`,{...t,query:t.query})}return G(()=>n.frame,async e=>{p.value=void 0,v.value=-1,e?(await c(e),e===n.frame&&(ae(),n.point&&!b&&(b=!0,a.value===`waiting`&&oe(n.point)))):d()},{immediate:!0}),G(()=>n.still?n.frame:void 0,e=>{let t=m.value;m.value=e?URL.createObjectURL(e):void 0,t&&URL.revokeObjectURL(t)},{immediate:!0}),G([f,()=>o.value?.mask],k,{flush:`post`}),G([D,T],([,e])=>{clearTimeout(y),g.value=!0,!e&&a.value!==`noDetector`&&a.value!==`failed`&&(y=setTimeout(()=>g.value=!1,zx))},{immediate:!0}),Wt(f,k),Gt(()=>{clearTimeout(y),m.value&&URL.revokeObjectURL(m.value)}),(t,n)=>{let c=fx,l=ap,u=Sy;return Y(),B(`div`,{class:Z([`similar-picker absolute inset-0 overflow-hidden pointer-events-auto`,{"cursor-crosshair":H(E)}]),onPointerdown:Bn(te,[`stop`]),onMousedown:n[1]||=Bn(()=>{},[`stop`]),onTouchstart:ne,onDblclick:n[2]||=Bn(()=>{},[`stop`]),onClick:Bn(ie,[`stop`]),onPointermove:re,onPointerleave:n[3]||=e=>v.value=-1},[e.still&&H(m)?(Y(),B(`img`,{key:0,src:H(m),alt:``,draggable:`false`,class:`similar-still`},null,8,Ix)):q(``,!0),J(`div`,{class:Z([`similar-scrim`,{"opacity-0":H(o)}])},null,2),(Y(!0),B(U,null,K(H(s),(e,t)=>(Y(),B(`div`,{key:t,class:Z([`similar-found`,{"similar-found-hover":t===H(v)}]),style:W(O(e.box))},null,6))),128)),H(p)&&!H(o)?(Y(),B(`div`,{key:1,class:`similar-pulse`,style:W({left:`${H(p).x*100}%`,top:`${H(p).y*100}%`})},null,4)):q(``,!0),H(o)?.mask?(Y(),B(`canvas`,{key:2,ref_key:`outlineCanvas`,ref:f,class:`similar-outline`},null,512)):q(``,!0),H(o)?(Y(),B(`div`,{key:3,class:Z([`similar-box`,{"similar-box-outlined":H(o).mask}]),style:W(O(H(o).box))},[J(`span`,{class:Z([`similar-box-label`,{"similar-box-label-below":H(o).box.y<.1}])},L(H(a)===`ready`?H(Er)(H(o),H(i)):H(i)(`components.similar.reading`)),3)],6)):q(``,!0),e.continuable?(Y(),B(`button`,{key:4,type:`button`,class:`similar-continue`,onClick:n[0]||=Bn(e=>r(`continue`),[`stop`])},[z(c,{class:`w-3.5 h-3.5 shrink-0`}),J(`span`,Lx,L(H(i)(`components.similar.continue`)),1)])):q(``,!0),z(Rn,{name:`similar-bar`},{default:X(()=>[H(g)?(Y(),B(`div`,{key:0,class:Z([`similar-bar`,{"similar-bar-low":e.continuable}])},[H(T)?(Y(),F(l,{key:0,class:`w-4 h-4 shrink-0`})):(Y(),F(u,{key:1,class:`w-4 h-4 shrink-0`})),J(`span`,Rx,L(H(D)),1)],2)):q(``,!0)]),_:1})],34)}}}),[[`__scopeId`,`data-v-ba93d184`]]),Vx=Gn({__name:`CuiHeatmap`,props:{cameraId:{}},setup(e){let t=e,{plugin:n}=y(`@camera.ui/camera-ui-nvr`),r=Tn(`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=.15*Math.min(e.w??1,6),a=n.createRadialGradient(t,r,0,t,r,8);a.addColorStop(0,`rgba(255, 255, 255, ${i})`),a.addColorStop(1,`rgba(255, 255, 255, 0)`),n.fillStyle=a,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 G(n,e=>{e&&i()}),hn(()=>i()),(e,t)=>(Y(),B(`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))}}),Hx={class:`absolute inset-0 pointer-events-auto`,style:{"z-index":`10`}},Ux=[`viewBox`],Wx=[`x1`,`x2`,`y2`],Gx=[`y1`,`x2`,`y2`],Kx=[`x`,`y`,`width`,`height`],qx=[`x`,`y`,`width`,`height`],Jx=[`onClick`],Yx=Kd(Gn({__name:`CuiGridSearch`,props:{modelValue:{},cols:{default:10},rows:{default:11}},emits:[`update:modelValue`],setup(e,{emit:t}){let n=e,r=t,i=Tn(`svgRef`),a=P(!1),o=P(null),s=P(null),c=V(()=>{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=V(()=>!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=mi;return Y(),B(`div`,Hx,[(Y(),B(`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},[(Y(!0),B(U,null,K(e.cols-1,t=>(Y(),B(`line`,{key:`v${t}`,x1:t,y1:0,x2:t,y2:e.rows,class:`grid-line`},null,8,Wx))),128)),(Y(!0),B(U,null,K(e.rows-1,t=>(Y(),B(`line`,{key:`h${t}`,x1:0,y1:t,x2:e.cols,y2:t,class:`grid-line`},null,8,Gx))),128)),(Y(!0),B(U,null,K(e.modelValue,(e,t)=>(Y(),B(`rect`,{key:t,x:e.col,y:e.row,width:e.w,height:e.h,class:`grid-region`},null,8,Kx))),128)),H(l)?(Y(),B(`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,qx)):q(``,!0)],40,Ux)),(Y(!0),B(U,null,K(e.modelValue,(e,t)=>(Y(),B(`button`,{key:`rm-${t}`,class:`grid-remove-btn`,style:W(v(e)),onClick:Bn(e=>_(t),[`stop`]),onPointerdown:n[0]||=Bn(()=>{},[`stop`])},[z(r,{class:`w-[10px] h-[10px]`})],44,Jx))),128))])}}}),[[`__scopeId`,`data-v-8276ca40`]]),Xx={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Zx(e,t){return Y(),B(`svg`,Xx,[...t[0]||=[J(`path`,{fill:`currentColor`,d:`M12 20a7 7 0 0 1-7-7a7 7 0 0 1 7-7a7 7 0 0 1 7 7a7 7 0 0 1-7 7m7.03-12.61l1.42-1.42c-.45-.51-.9-.97-1.41-1.41L17.62 6c-1.55-1.26-3.5-2-5.62-2a9 9 0 0 0-9 9a9 9 0 0 0 9 9c5 0 9-4.03 9-9c0-2.12-.74-4.07-1.97-5.61M11 14h2V8h-2m4-7H9v2h6z`},null,-1)]])}var Qx=I({name:`mdi-timer-outline`,render:Zx}),$x={key:1,class:`label-text`},eS=Kd(Gn({__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}=jt(e),i=new Proxy({},{get:(e,t)=>A_(t)}),a=new Proxy({},{get:(e,t)=>({color:A_(t).highlight})}),o=new Map,s=Tn(`containerRef`),c=Rt([]),l=P(Date.now()),u,{width:d,height:f}=yt(s),p=V(()=>Math.min(d.value||800,f.value||600)),m=V(()=>p.value<200?.8:1),h=V(()=>e=>d.value?Math.round(e*d.value):0),g=V(()=>e=>f.value?Math.round(e*f.value):0),_=V(()=>e=>d.value?Math.round(e*d.value):0),v=V(()=>e=>f.value?Math.round(e*f.value):0),y=V(()=>e=>{let t=_.value(e.box.width),n=v.value(e.box.height);return Math.min(t,n)*(t<200?.3:t<400?.25:.2)}),b=V(()=>e=>{let t=30*m.value,n=g.value(e.box.y);if(n>=t)return`above`;let r=n+v.value(e.box.height);return f.value-r>=t?`below`:`inside`}),x=V(()=>e=>h.value(e.box.x)>d.value*.7),S=V(()=>e=>{let t=h.value(e.box.x);return x.value(e)?Math.max(40,t+_.value(e.box.width)-4):Math.max(40,d.value-t-4)});function C(){let e=c.value.some(e=>w(e));e&&u===void 0?u=setInterval(()=>{l.value=Date.now()},1e3):!e&&u!==void 0&&(clearInterval(u),u=void 0)}function w(e){return`stationarySince`in e&&typeof e.stationarySince==`number`}function T(e){let t=Math.max(0,Math.floor((l.value-e.stationarySince)/1e3));if(t<60)return`${t}s`;let n=Math.floor(t/60);return n<60?`${n}m ${t%60}s`:`${Math.floor(n/60)}h ${n%60}m`}function E(e){return e.attribute===`face`}function D(e){return e.attribute===`license_plate`}function O(e){return e.attribute!==`face`&&e.attribute!==`license_plate`&&`subAttribute`in e}function k(e){return E(e)?`face`:D(e)?`license_plate`:O(e)?`classifier`:e.label}function A(e){return i[e]??i.other}function j(e){return a[e]??a.other}function ee(e){return D(e)?e.plateText||`license plate`:E(e)?e.identity||`face`:O(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)),C()}function ne(e,t){t.length>0?o.set(e,t):o.delete(e),te()}function re(e){e?(o.delete(e),te()):(o.clear(),c.value=[],C())}return G(n,e=>{e.length&&ne(`props`,e)},{immediate:!0}),Fn(()=>{u!==void 0&&clearInterval(u)}),t({draw:ne,clear:re}),(t,n)=>(Y(),B(`div`,{ref_key:`containerRef`,ref:s,class:`bbox-container min-w-0`},[(Y(!0),B(U,null,K(H(c),(t,r)=>(Y(),B(`div`,{key:`trackId`in t?`t${t.trackId}`:r,class:Z([`bbox-corners`,{tracked:`trackId`in t,stationary:w(t)}]),style:W({left:`${H(h)(t.box.x)}px`,top:`${H(g)(t.box.y)}px`,width:`${H(_)(t.box.width)}px`,height:`${H(v)(t.box.height)}px`})},[J(`div`,{class:`w-full h-full`,style:W({background:e.highlightArea&&!w(t)?j(k(t)).color:void 0})},[(Y(),B(U,null,K([`tl`,`tr`,`bl`,`br`],e=>J(`div`,{key:e,class:Z([`corner-lines`,e]),style:W({"--corner-color":A(k(t)).color,"--corner-size":`${H(y)(t)}px`})},[...n[0]||=[J(`div`,{class:`line horizontal`},null,-1),J(`div`,{class:`line vertical`},null,-1)]],6)),64))],4),e.showLabel||e.showConfidence||e.showIcon?(Y(),B(`div`,{key:0,class:Z([`label z-1`,{"label-bottom":H(b)(t)===`below`,"label-inside":H(b)(t)===`inside`,"label-right":H(x)(t)}]),style:W({backgroundColor:w(t)?`${A(k(t)).color}B3`:A(k(t)).color,fontSize:`${12*H(m)}px`,padding:`${4*H(m)}px ${8*H(m)}px`,gap:`${4*H(m)}px`,maxWidth:`${H(S)(t)}px`})},[e.showIcon?(Y(),F(pn(A(k(t)).icon),{key:0})):q(``,!0),e.showLabel&&H(p)>250?(Y(),B(`span`,$x,L(ee(t))+L(`trackId`in t?`#${t.trackId}`:``),1)):q(``,!0),e.showConfidence&&H(p)>250?(Y(),B(`span`,{key:2,class:`confidence`,style:W({fontSize:`${11*H(m)}px`})},L((t.confidence*100).toFixed(1))+`% `,5)):q(``,!0),w(t)&&H(p)>250?(Y(),B(`span`,{key:3,class:`dwell`,style:W({fontSize:`${11*H(m)}px`})},[z(H(Qx),{class:`dwell-icon`}),Mt(` `+L(T(t)),1)],4)):q(``,!0)],6)):q(``,!0)],6))),128))],512))}}),[[`__scopeId`,`data-v-bd79c3ae`]]),tS={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function nS(e,t){return Y(),B(`svg`,tS,[...t[0]||=[J(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497zM15 5l4 4`},null,-1)]])}var rS=I({name:`lucide-pencil`,render:nS}),iS={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function aS(e,t){return Y(),B(`svg`,iS,[...t[0]||=[J(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M20 6L9 17l-5-5`},null,-1)]])}var oS=I({name:`lucide-check`,render:aS}),sS={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function cS(e,t){return Y(),B(`svg`,sS,[...t[0]||=[J(`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 lS=I({name:`mdi-battery`,render:cS}),uS={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function dS(e,t){return Y(),B(`svg`,uS,[...t[0]||=[J(`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 fS=I({name:`mdi-doorbell`,render:dS}),pS={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function mS(e,t){return Y(),B(`svg`,pS,[...t[0]||=[J(`path`,{fill:`currentColor`,d:`M22 9v11h-2v-9H4v9H2V9l10-4zm-3 3H5v2h14zm0 6H5v2h14zm0-3H5v2h14z`},null,-1)]])}var hS=I({name:`mdi-garage-variant`,render:mS}),gS={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function _S(e,t){return Y(),B(`svg`,gS,[...t[0]||=[J(`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 vS=I({name:`mdi-lock`,render:_S}),yS={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function bS(e,t){return Y(),B(`svg`,yS,[...t[0]||=[J(`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 xS=I({name:`mdi-alarm-light`,render:bS}),SS={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function CS(e,t){return Y(),B(`svg`,SS,[...t[0]||=[J(`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 wS=I({name:`lucide-power`,render:CS}),TS={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function ES(e,t){return Y(),B(`svg`,TS,[...t[0]||=[J(`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 DS=I({name:`lucide-lightbulb`,render:ES}),OS={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function kS(e,t){return Y(),B(`svg`,OS,[...t[0]||=[J(`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 AS=I({name:`mdi-water-alert`,render:kS}),jS={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function MS(e,t){return Y(),B(`svg`,jS,[...t[0]||=[J(`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 NS=I({name:`mdi-smoke-detector-variant`,render:MS}),PS={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function FS(e,t){return Y(),B(`svg`,PS,[...t[0]||=[J(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[J(`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`}),J(`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 IS=I({name:`lucide-droplets`,render:FS}),LS={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function RS(e,t){return Y(),B(`svg`,LS,[...t[0]||=[J(`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 zS=I({name:`lucide-thermometer`,render:RS}),BS={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function VS(e,t){return Y(),B(`svg`,BS,[...t[0]||=[J(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M19 21V5a2 2 0 0 0-2-2H7a2 2 0 0 0-2 2v16m-3 0h20M9 12h.01`},null,-1)]])}var HS=I({name:`lucide-door-closed`,render:VS}),US={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function WS(e,t){return Y(),B(`svg`,US,[...t[0]||=[J(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[J(`path`,{d:`M14 17H5M19 7h-9`}),J(`circle`,{cx:`17`,cy:`17`,r:`3`}),J(`circle`,{cx:`7`,cy:`7`,r:`3`})],-1)]])}var GS=I({name:`lucide-settings2`,render:WS}),KS={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function qS(e,t){return Y(),B(`svg`,KS,[...t[0]||=[J(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M5 12h14m-7-7v14`},null,-1)]])}var JS=I({name:`lucide-plus`,render:qS}),YS={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function XS(e,t){return Y(),B(`svg`,YS,[...t[0]||=[J(`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 ZS=I({name:`mdi-shield-moon`,render:XS}),QS={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function $S(e,t){return Y(),B(`svg`,QS,[...t[0]||=[J(`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 eC=I({name:`mdi-shield-lock`,render:$S}),tC={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function nC(e,t){return Y(),B(`svg`,tC,[...t[0]||=[J(`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 rC=I({name:`mdi-shield-home`,render:nC}),iC={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function aC(e,t){return Y(),B(`svg`,iC,[...t[0]||=[J(`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 oC=I({name:`mdi-shield-off-outline`,render:aC}),sC={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function cC(e,t){return Y(),B(`svg`,sC,[...t[0]||=[J(`g`,{fill:`none`},[J(`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`}),J(`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 lC=I({name:`mingcute-computer-camera-fill`,render:cC}),uC={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function dC(e,t){return Y(),B(`svg`,uC,[...t[0]||=[J(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[J(`path`,{d:`M10 21H2m8-18H7a2 2 0 0 0-2 2v16m9-9h.01`}),J(`path`,{d:`M19 21V5a2 2 0 0 0-1.675-1.974l-6.163-1.013A1 1 0 0 0 10 3v18a1 1 0 0 0 1.124.992zm3 0h-3`})],-1)]])}var fC=I({name:`lucide-door-open`,render:dC}),pC={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function mC(e,t){return Y(),B(`svg`,pC,[...t[0]||=[J(`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 hC=I({name:`mdi-battery-20`,render:mC}),gC={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function _C(e,t){return Y(),B(`svg`,gC,[...t[0]||=[J(`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 vC=I({name:`mdi-battery-40`,render:_C}),yC={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function bC(e,t){return Y(),B(`svg`,yC,[...t[0]||=[J(`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 xC=I({name:`mdi-battery-60`,render:bC}),SC={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function CC(e,t){return Y(),B(`svg`,SC,[...t[0]||=[J(`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 wC=I({name:`mdi-battery-80`,render:CC}),TC={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function EC(e,t){return Y(),B(`svg`,TC,[...t[0]||=[J(`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 DC=I({name:`mdi-battery-charging-100`,render:EC}),OC={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function kC(e,t){return Y(),B(`svg`,OC,[...t[0]||=[J(`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 AC=I({name:`mdi-battery-charging-20`,render:kC}),jC={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function MC(e,t){return Y(),B(`svg`,jC,[...t[0]||=[J(`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 NC=I({name:`mdi-battery-charging-40`,render:MC}),PC={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function FC(e,t){return Y(),B(`svg`,PC,[...t[0]||=[J(`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 IC=I({name:`mdi-battery-charging-60`,render:FC}),LC={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function RC(e,t){return Y(),B(`svg`,LC,[...t[0]||=[J(`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 zC=I({name:`mdi-battery-charging-80`,render:RC}),BC={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function VC(e,t){return Y(),B(`svg`,BC,[...t[0]||=[J(`path`,{fill:`currentColor`,d:`M16 20H8V6h8m.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 HC=I({name:`mdi-battery-outline`,render:VC}),UC={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function WC(e,t){return Y(),B(`svg`,UC,[...t[0]||=[J(`path`,{fill:`currentColor`,d:`M22 9v11h-2v-9H4v9H2V9l10-4zm-3 3H5v2h14z`},null,-1)]])}var GC=I({name:`mdi-garage-open-variant`,render:WC}),KC={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function qC(e,t){return Y(),B(`svg`,KC,[...t[0]||=[J(`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 JC=I({name:`mdi-lightbulb-on`,render:qC}),YC={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function XC(e,t){return Y(),B(`svg`,YC,[...t[0]||=[J(`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 ZC=I({name:`mdi-lock-open-outline`,render:XC}),QC={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function $C(e,t){return Y(),B(`svg`,QC,[...t[0]||=[J(`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 ew=I({name:`mdi-motion-sensor-off`,render:$C}),tw={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function nw(e,t){return Y(),B(`svg`,tw,[...t[0]||=[J(`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 rw=I({name:`mdi-shield-alert`,render:nw}),iw={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function aw(e,t){return Y(),B(`svg`,iw,[...t[0]||=[J(`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 ow=I({name:`mdi-smoke-detector-variant-off`,render:aw}),sw={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function cw(e,t){return Y(),B(`svg`,sw,[...t[0]||=[J(`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 lw=I({name:`mdi-water-off`,render:cw}),uw={light:{color:`rgb(250, 204, 21)`,glow:`rgba(250, 204, 21, 0.8)`},siren:{color:`rgb(239, 68, 68)`,glow:`rgba(239, 68, 68, 0.8)`},switch:{color:`rgb(34, 197, 94)`,glow:`rgba(34, 197, 94, 0.7)`},contact:{color:`rgb(251, 146, 60)`,glow:`rgba(251, 146, 60, 0.6)`},lock:{color:`rgb(34, 197, 94)`,glow:`rgba(34, 197, 94, 0.7)`},garage:{color:`rgb(251, 146, 60)`,glow:`rgba(251, 146, 60, 0.6)`},occupancy:{color:`rgb(59, 130, 246)`,glow:`rgba(59, 130, 246, 0.7)`},smoke:{color:`rgb(239, 68, 68)`,glow:`rgba(239, 68, 68, 0.8)`},leak:{color:`rgb(59, 130, 246)`,glow:`rgba(59, 130, 246, 0.8)`},doorbell:{color:`rgb(59, 130, 246)`,glow:`rgba(59, 130, 246, 0.8)`},securitySystem:{color:`rgb(34, 197, 94)`,glow:`rgba(34, 197, 94, 0.7)`},battery:{color:`rgb(239, 68, 68)`,glow:`rgba(239, 68, 68, 0.8)`}};function dw(e){return e?at(e)?e.getProperty(Pe.Detected)??!1:ut(e)?e.getProperty(Qe.On)??!1:e.type===u.Switch?e.getProperty(S.On)??!1:Ie(e)?e.getProperty(it.Active)??!1:Ne(e)?(e.getProperty(ct.TargetState)??0)===0:Xe(e)?e.getProperty(le.Detected)??!1:Oe(e)?e.getProperty(k.Detected)??!1:Me(e)?e.getProperty(ze.Detected)??!1:nt(e)?(e.getProperty(tt.TargetState)??1)===0:Be(e)?e.getProperty(je.Ring)??!1:Le(e)?(e.getProperty(O.TargetState)??we.Disarmed)!==we.Disarmed:$e(e)?e.getProperty(rt.Low)??!1:!1:!1}function fw(e,t){let n=dw(t);switch(e){case`contact`:return n?fC:HS;case`light`:return n?JC:Q;case`switch`:return wS;case`siren`:return xS;case`lock`:return n?vS:ZC;case`temperature`:return zS;case`humidity`:return IS;case`occupancy`:return n?Dr:ew;case`smoke`:return n?NS:ow;case`leak`:return n?AS:lw;case`garage`:return n?GC:hS;case`doorbell`:return fS;case`securitySystem`:return yw(t);case`battery`:return bw(t);default:return}}function pw(e,t){let n=uw[e];return!t||!n?{color:`var(--text-secondary-color)`}:{color:n.color,filter:`drop-shadow(0 0 8px ${n.glow})`}}function mw(e){if(e){if(ft(e)){let t=e.getProperty(be.Current);return typeof t==`number`?`${t.toFixed(1)} °C`:void 0}if(ot(e)){let t=e.getProperty(ke.Current);return typeof t==`number`?`${Math.round(t)} %`:void 0}if($e(e)){let t=e.getProperty(rt.Level);return typeof t==`number`?`${Math.round(t)} %`:void 0}}}async function hw(e){if(!e)return;let t=dw(e);if(ut(e))return await e.setProperty(Qe.On,!t);if(e.type===u.Switch)return await e.setProperty(S.On,!t);if(Ie(e))return await e.setProperty(it.Active,!t);if(Ne(e))return await e.setProperty(ct.TargetState,+!!t);if(nt(e))return await e.setProperty(tt.TargetState,+!!t);if(Be(e))return await e.setProperty(je.Ring,!0)}async function gw(e,t){e&&Le(e)&&await e.setProperty(O.TargetState,t)}function _w(e){return!e||!Le(e)?we.Disarmed:e.getProperty(O.CurrentState)??e.getProperty(O.TargetState)??we.Disarmed}function vw(e,t){let n=mw(t);if(n)return n;let r=dw(t);switch(e){case`contact`:return r?`open`:`closed`;case`lock`:return r?`locked`:`unlocked`;case`garage`:return r?`open`:`closed`;case`light`:case`switch`:case`siren`:return r?`on`:`off`;case`occupancy`:return r?`occupied`:`clear`;case`smoke`:case`leak`:return r?`alarm`:`clear`;case`securitySystem`:return r?`armed`:`disarmed`;default:return r?`active`:`idle`}}function yw(e){if(!e||!Le(e))return oC;switch(e.getProperty(O.CurrentState)??e.getProperty(O.TargetState)??we.Disarmed){case we.AlarmTriggered:return rw;case we.StayArm:return rC;case we.AwayArm:return eC;case we.NightArm:return ZS;default:return oC}}function bw(e){if(!e||!$e(e))return HC;let t=e.getProperty(rt.Level),n=typeof t==`number`?t:0,r=e.getProperty(rt.Charging)===Ye.Charging;return n>=90?r?DC:lS:n>=70?r?zC:wC:n>=50?r?IC:xC:n>=30?r?NC:vC:n>=15?r?AC:hC:HC}var xw=mr(),Sw=new Set(xw.map(e=>String(e))),Cw=new Set(xw.filter(e=>[N.Sensor,N.Info].includes(pr[e].category)).map(e=>String(e))),ww=new Set(xw.filter(e=>pr[e].category===N.Info).map(e=>String(e))),Tw=e(hi(),1),Ew={class:`snapshot-hover-container flex items-center justify-center relative`},Dw=[`onMouseenter`,`onMouseleave`],Ow={class:`flex flex-col gap-1 min-w-[160px]`},kw=[`onClick`],Aw=[`onClick`],jw=[`onClick`],Mw=[`onClick`],Nw={class:`sensor-tooltip`},Pw={class:`sensor-tooltip-name`},Fw={key:0,class:`sensor-tooltip-offline text-orange-500`},Iw={class:`shortcut-menu`},Lw=[`onClick`],Rw={key:0,class:`shortcut-menu-item-overlay`},zw={key:0,class:`shortcut-menu-empty`},Bw={class:`shortcut-menu-sensors`},Vw={class:`sensor-menu-icon`},Hw={key:1,class:`shortcut-menu-empty`},Uw=Kd(Gn({__name:`CuiShortcuts`,props:{cameraName:{},visible:{type:Boolean},editing:{type:Boolean},interactionLocked:{type:Boolean}},setup(e){let t=new Uh,n=new ps,r=e,i=ar(),a=Jt(),{cameraName:o,visible:s,editing:c,interactionLocked:l}=jt(r),{camera:f}=d(o),{sensors:p}=fe(f),m=g(),h=Fe(),v=Af(void 0,`admin`),y=nn(_,void 0),b=xL(),{user:x}=Zt(b);t.toggleQueryActivator(`getCamerasQuery`,!1);let{data:S,isBusy:C}=t.getCameraQuery(o),{data:w,isBusy:T}=t.getCamerasQuery({page:1,pageSize:-1}),{data:E,isBusy:D}=n.getShortcutsQuery(x.value?.username||``,o),{mutate:k,isPending:A}=n.patchShortcutQuery(),{mutate:j,isPending:ee}=n.createShortcutQuery(),{mutate:te,isPending:ne}=n.removeShortcutQuery(),re=new Map,ae=Tn(`placeholderRef`),oe=Tn(`shortcutContainerRef`),M=Tn(`camerasMenuRef`),se=Rt({}),ce=Rt({}),le=Rt({}),de=Rt({}),N=P({}),pe=P(!1),me=P(),he=P(!1),ge=P(!1),_e=P([]),ve=P({}),ye=P(!1),be=P(`cameras`),xe=P({}),Se=P(new Set),Ce=P(new Set),Te=yt(oe),Ee=V(()=>y?.isActive.value??!1),De=V(()=>_e.value.filter(e=>e.type===`camera`)),ke=V(()=>_e.value.filter(e=>e.type===`sensor`)),Ae=V(()=>p.value.filter(e=>at(e)||ft(e)||ot(e)||Xe(e)||Oe(e)||Me(e)||ut(e)||Ne(e)||nt(e)||e.type===u.Switch||Ie(e)||Be(e)||Le(e)||$e(e))),je=V(()=>{let e=p.value;return ke.value.map(t=>{let n=e.find(e=>e.id===t.sensorId);return{shortcut:t,sensor:n,isOnline:!!n}})}),Pe=V(()=>C.value||D.value||A.value||T.value||ee.value||ne.value),Re=V(()=>w.value?.result?w.value.result.filter(e=>e.name!==o.value):[]),ze=V(()=>x.value?.username??``),Ve=V(()=>{if(Ee.value)return De.value.find(e=>ve.value[e._id])});function He(e){let t=re.get(e._id);return t||(t=ue(V(()=>e.cameraId),{managed:!0,sourceRole:`scrub`,cameraUi:m,nvrCtx:h}),re.set(e._id,t),t)}function Ue(e){return ke.value.some(t=>t.sensorId===e.id)}function We(e){return De.value.some(t=>t.cameraId===e._id)}function Ge(e){switch(e){case u.Contact:return`Contact Sensor`;case u.Light:return`Light`;case u.Switch:return`Switch`;case u.Siren:return`Siren`;case u.Lock:return`Lock`;case u.Temperature:return`Temperature`;case u.Humidity:return`Humidity`;case u.Occupancy:return`Occupancy`;case u.Smoke:return`Smoke Sensor`;case u.Leak:return`Leak Sensor`;case u.Garage:return`Garage`;case u.Doorbell:return`Doorbell`;case u.SecuritySystem:return`Security System`;case u.Battery:return`Battery`;default:return`Sensor`}}function Ke(e){let t=String(e);return Sw.has(t)?t:`contact`}async function qe(e){if(v)try{await hw(p.value.find(t=>t.id===e.shortcut.sensorId))}catch(e){i.error(`Failed to toggle sensor:`,e)}}async function Je(e,t){if(v)try{await gw(p.value.find(t=>t.id===e.shortcut.sensorId),t)}catch(e){i.error(`Failed to set security system state:`,e)}}function Ze(e,t){return!e||!Le(e)?!1:e.getProperty(O.TargetState)===t}function Qe(e,t){e&&(le.value[t]=e)}function et(e){return ww.has(e)}function tt(e){if(!e||!Le(e))return`--`;switch(e.getProperty(O.TargetState)){case we.Disarmed:return`Disarmed`;case we.StayArm:return`Stay Arm`;case we.AwayArm:return`Away Arm`;case we.NightArm:return`Night Arm`;case we.AlarmTriggered:return`ALARM`;default:return`--`}}function it(e){return!e||!$e(e)?`--`:`${e.getProperty(rt.Level)??0}%${e.getProperty(rt.Charging)===Ye.Charging?` ⚡`:``}`}async function st(e){if(!Cw.has(e.shortcut.sensorType)&&v){if(e.shortcut.sensorType===`securitySystem`){Ce.value.has(e.shortcut._id)||(Ce.value.add(e.shortcut._id),await an());let t=le.value[e.shortcut._id],n=se.value[e.shortcut._id];t&&n&&t.toggle({currentTarget:n})}else qe(e)}}function ct(e,n){pe.value||(t.toggleQueryActivator(`getCamerasQuery`,n),ve.value[e]=!pe.value&&n,Ce.value.add(e),n&&Object.entries(ve.value).forEach(([t,n])=>{t!==e&&n&&(ve.value[t]=!1)}))}function lt(e){pe.value||(xe.value[e._id]=!0,I(e))}function dt(e,t){if(xe.value[t._id])delete xe.value[t._id];else if(!e){if(!ve.value[t._id])ct(t._id,!0);else{let e=Ee.value&&y?Math.floor(ie(y)/1e3):void 0;ct(t._id,!1),Ot(t.cameraId,e)}}}function pt(e,t){pe.value||(ve.value[e]=!pe.value&&t,Ce.value.add(e),t&&Object.entries(ve.value).forEach(([t,n])=>{t!==e&&n&&(ve.value[t]=!1)}))}function mt(e){pe.value||(xe.value[e._id]=!0,gt(e))}function ht(e){xe.value[e.shortcut._id]?delete xe.value[e.shortcut._id]:pe.value||!Cw.has(e.shortcut.sensorType)&&v&&st(e)}function gt(e){Se.value.add(e._id),ce.value[e._id]?.hide(),ve.value[e._id]=!1,de.value[e._id]?.destroy(),delete de.value[e._id],delete N.value[e._id],delete se.value[e._id],te({username:ze.value,cameraname:o.value,shortcutid:e._id},{onSettled:()=>{Se.value.delete(e._id)}})}function vt(){Object.entries(de.value).forEach(([e,t])=>{let n=oe.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;N.value[e]={x:Math.max(0,Math.min(a,100)),y:Math.max(0,Math.min(o,100))}})}function bt(){Object.entries(de.value).forEach(([e,t])=>{let n=N.value[e];if(!n)return;let r=oe.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)}),ge.value=!1}function xt(){Object.entries(N.value).forEach(([e,t])=>{N.value[e]={x:Math.max(0,Math.min(t.x,100)),y:Math.max(0,Math.min(t.y,100))}}),bt()}function St(){for(let[e,t]of Object.entries(de.value))_e.value.find(t=>t._id===e)||(t.destroy(),delete de.value[e],delete N.value[e]);for(let[e]of Object.entries(N.value))_e.value.find(t=>t._id===e)||delete N.value[e];for(let[e,t]of Object.entries(se.value)){let n=_e.value.find(t=>t._id===e);if(t&&n&&oe.value){de.value[n._id]&&de.value[n._id].destroy();let r=new Tw.default(t,{containment:oe.value});l.value&&r.disable(),de.value[n._id]=r;let[i,a]=n.points,s=oe.value.getBoundingClientRect(),c=i/100*s.width,u=a/100*s.height;r.setPosition(c,u),N.value[n._id]={x:i,y:a},r.on(`dragMove`,()=>{pe.value=!0,ce.value[e]?.alignOverlay()}),r.on(`dragEnd`,()=>{setTimeout(()=>{pe.value=!1},50),vt();let e=N.value[n._id];k({username:ze.value,cameraname:o.value,shortcutid:n._id,shortcutData:{points:[e.x,e.y]}})})}}bt()}function Ct(e){if(!c.value||!oe.value||l.value)return;he.value=!0;let t=oe.value.getBoundingClientRect();me.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 wt(e){if(!ae.value||!oe.value)return;let t=oe.value,n=ae.value,r=t.getBoundingClientRect(),i=n.getBoundingClientRect(),a=i.left-r.left,s=i.top-r.top,c=a/r.width*100,l=s/r.height*100;j({username:ze.value,cameraname:o.value,shortcutData:{_id:``,type:`camera`,points:[c,l],cameraId:e._id}},{onSettled:()=>{he.value=!1,me.value=void 0,M.value?.hide()}})}async function Tt(e){if(!ae.value||!oe.value)return;let t=oe.value,n=ae.value,r=t.getBoundingClientRect(),i=n.getBoundingClientRect(),a=i.left-r.left,s=i.top-r.top,c=a/r.width*100,l=s/r.height*100;j({username:ze.value,cameraname:o.value,shortcutData:{_id:``,type:`sensor`,points:[c,l],sensorId:e.id,sensorType:Ke(e.type)}},{onSettled:()=>{he.value=!1,me.value=void 0,M.value?.hide()}})}function I(e){Se.value.add(e._id),ce.value[e._id]?.hide(),ve.value[e._id]=!1,de.value[e._id]?.destroy(),delete de.value[e._id],delete N.value[e._id],delete se.value[e._id],te({username:ze.value,cameraname:o.value,shortcutid:e._id},{onSettled:()=>{Se.value.delete(e._id)}})}function Et(e,t){se.value[t]=e}function Dt(e,t){ce.value[t]=e}async function Ot(e,t){if(pe.value)return;let n=(await hh({cameraname:e,signal:new AbortController().signal})).name;n&&(t===void 0?a.push(`/cameras/${n}`):a.push({path:`/cameras/${n}`,query:{startTs:String(t)}}))}function kt(e){!e&&!he.value&&(me.value=void 0),ye.value=e,t.toggleQueryActivator(`getCamerasQuery`,e)}return G([E,S],()=>{E.value&&S.value&&(_e.value=PL(E.value))},{immediate:!0,deep:!0}),G([Te.width,Te.height],()=>{ge.value=!0,an(()=>{xt()})}),G(_e,()=>{an(()=>{St()})},{deep:!0,immediate:!0}),G(ge,e=>{e&&(me.value=void 0)}),G([ae,me],([e,t])=>{e&&t&&setTimeout(()=>{M.value?.show({currentTarget:e})},50)},{deep:!0}),G(ve,()=>{Object.entries(ve.value).forEach(([e,t])=>{if(t&&ce.value[e]){let t=se.value[e];t&&ce.value[e]?.show({currentTarget:t})}else ce.value[e]?.hide()})},{deep:!0,flush:`post`}),G(s,e=>{e||(Object.values(ce.value).forEach(e=>e?.hide()),Object.keys(ve.value).forEach(e=>{ve.value[e]=!1}))}),G(c,e=>{e||(me.value=void 0,he.value=!1,M.value?.hide())}),G(l,e=>{Object.values(de.value).forEach(t=>{e?t.disable():t.enable()}),e&&(me.value=void 0,he.value=!1)}),G(Ve,(e,t)=>{if(t&&re.get(t._id)?.stop(),e&&y&&Ee.value){let t=He(e);t.setSpeed(y.speed.value),t.play(ie(y),!0)}}),G(()=>y?.mode.value,e=>{if(!Ve.value||!y)return;let t=re.get(Ve.value._id);if(t)switch(e){case`idle`:t.stop();break;case`play`:t.play(ie(y),!0);break;case`pause`:t.pause()}}),G(()=>y?.currentTimestamp.value,e=>{Ve.value&&y&&e&&y.mode.value===`scrub`&&re.get(Ve.value._id)?.scrub(e,!0)}),G(()=>y?.speed.value,e=>{Ve.value&&e&&re.get(Ve.value._id)?.setSpeed(e)}),_t(()=>{se.value={}}),hn(()=>{an(()=>{St()})}),Fn(()=>{Object.values(de.value).forEach(e=>e.destroy())}),(e,t)=>{let n=lC,r=ci,i=ti,a=IO,o=Lr,d=oC,f=rC,p=eC,m=ZS,h=JS,g=$r,_=GS,y=jr,b=lf,x=oS,S=Qr,C=HS,T=zS,E=IS,D=Dr,O=NS,k=AS,A=DS,j=wS,ee=xS,te=vS,ne=hS,re=fS,ie=su,se=lS,ce=Zp,le=zr,ue=Br,de=Hr;return Y(),B(`div`,{ref_key:`shortcutContainerRef`,ref:oe,class:Z([`shortcut-container min-w-0`,{"!pointer-events-auto":H(c)&&!H(l),hidden:!H(s)}]),style:W({cursor:H(c)&&!H(l)?`pointer`:`default`}),onClick:Bn(Ct,[`self`])},[(Y(!0),B(U,null,K(H(De),e=>fn((Y(),B(`div`,{ref_for:!0,ref:t=>Et(t,e._id),key:e._id,onMousedown:t[0]||=Bn(()=>{},[`stop`]),onTouchstart:t[1]||=Bn(()=>{},[`stop`]),onWheel:t[2]||=Bn(()=>{},[`stop`]),class:`draggable absolute pointer-events-auto camera-shortcut`,style:W({background:H(ve)[e._id]?`#545454`:void 0})},[z(r,{severity:`secondary`,rounded:``,class:`cui-icon-lg shadow-sm pointer-events-auto`},{icon:X(()=>[z(n,{width:`100%`,height:`100%`})]),_:1}),H(Ce).has(e._id)?(Y(),F(o,{key:0,ref_for:!0,ref:t=>Dt(t,e._id),class:`shadow-lg cui-rounded-corner overflow-hidden`,pt:{content:{class:`p-0`}}},{default:X(()=>[J(`div`,Ew,[H(w)?.result.find(t=>t._id===e.cameraId)?(Y(),F(a,{key:1,"source-role":H(Ee)?void 0:`low-resolution`,"activity-mode":`always-on`,"streaming-mode":`auto`,"camera-info":H(w).result.find(t=>t._id===e.cameraId),"nvr-controller":H(Ee)?He(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`])):(Y(),F(i,{key:0,"stroke-width":`5`,class:`w-[30px] h-[30px]`}))])]),_:2},1536)):q(``,!0)],36)),[[Xt,!H(Se).has(e._id)],[H(On),[t=>ct(e._id,t),{delayEnter:0,delayLeave:1e3}]],[H(bn),[()=>lt(e),{distanceThreshold:24,delay:500,onMouseUp:(t,n,r)=>dt(r,e)}]]])),128)),(Y(!0),B(U,null,K(H(je),n=>fn((Y(),B(`div`,{ref_for:!0,ref:e=>Et(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]||=Bn(()=>{},[`stop`]),onTouchstart:t[4]||=Bn(()=>{},[`stop`]),onWheel:t[5]||=Bn(()=>{},[`stop`]),class:Z([`draggable absolute pointer-events-auto sensor-shortcut`,{"sensor-active":H(dw)(n.sensor),"sensor-offline":!n.isOnline,"sensor-readonly":H(Cw).has(n.shortcut.sensorType)||!H(v)}]),style:W({background:H(ve)[n.shortcut._id]?`#545454`:void 0})},[z(r,{severity:`secondary`,rounded:``,class:`cui-icon-lg shadow-sm pointer-events-auto`},{icon:X(()=>[(Y(),F(pn(H(fw)(n.shortcut.sensorType,n.sensor)),{width:`100%`,height:`100%`,style:W(H(pw)(n.shortcut.sensorType,H(dw)(n.sensor)))},null,8,[`style`]))]),_:2},1024),n.shortcut.sensorType===`securitySystem`&&H(Ce).has(n.shortcut._id)?(Y(),F(o,{key:0,ref_for:!0,ref:e=>Qe(e,n.shortcut._id),class:`shadow-lg cui-rounded-corner`,pt:{content:{class:`p-2`}},"append-to":`body`},{default:X(()=>[J(`div`,Ow,[J(`button`,{type:`button`,class:Z([`security-state-button`,{"security-state-button--active":Ze(n.sensor,H(we).Disarmed)}]),onClick:e=>Je(n,H(we).Disarmed)},[z(d,{class:`w-4 h-4`}),t[9]||=J(`span`,{class:`text-sm`},`Disarmed`,-1)],10,kw),J(`button`,{type:`button`,class:Z([`security-state-button`,{"security-state-button--active":Ze(n.sensor,H(we).StayArm)}]),onClick:e=>Je(n,H(we).StayArm)},[z(f,{class:`w-4 h-4`}),t[10]||=J(`span`,{class:`text-sm`},`Stay Arm`,-1)],10,Aw),J(`button`,{type:`button`,class:Z([`security-state-button`,{"security-state-button--active":Ze(n.sensor,H(we).AwayArm)}]),onClick:e=>Je(n,H(we).AwayArm)},[z(p,{class:`w-4 h-4`}),t[11]||=J(`span`,{class:`text-sm`},`Away Arm`,-1)],10,jw),J(`button`,{type:`button`,class:Z([`security-state-button`,{"security-state-button--active":Ze(n.sensor,H(we).NightArm)}]),onClick:e=>Je(n,H(we).NightArm)},[z(m,{class:`w-4 h-4`}),t[12]||=J(`span`,{class:`text-sm`},`Night Arm`,-1)],10,Mw)])]),_:2},1536)):q(``,!0),H(Ce).has(n.shortcut._id)?(Y(),F(o,{key:1,ref_for:!0,ref:e=>Dt(e,n.shortcut._id),class:`shadow-lg cui-rounded-corner`,pt:{content:{class:`p-2`}}},{default:X(()=>[J(`div`,Nw,[J(`div`,Pw,L(n.sensor?.displayName.value??e.$t(`components.camera_options.sensor_type_${n.shortcut.sensorType}`)),1),J(`div`,{class:Z([`sensor-tooltip-status`,{"text-color":et(n.shortcut.sensorType),"text-purple-500":n.shortcut.sensorType===`securitySystem`&&H(dw)(n.sensor)&&H(_w)(n.sensor)!==H(we).AlarmTriggered,"text-red-500":n.shortcut.sensorType===`securitySystem`&&H(_w)(n.sensor)===H(we).AlarmTriggered,"text-green-500":!et(n.shortcut.sensorType)&&n.shortcut.sensorType!==`securitySystem`&&H(dw)(n.sensor),"text-gray-400":!et(n.shortcut.sensorType)&&n.shortcut.sensorType!==`securitySystem`&&!H(dw)(n.sensor)}])},[n.shortcut.sensorType===`contact`?(Y(),B(U,{key:0},[Mt(L(H(dw)(n.sensor)?`Open`:`Closed`),1)],64)):n.shortcut.sensorType===`lock`?(Y(),B(U,{key:1},[Mt(L(H(dw)(n.sensor)?`Locked`:`Unlocked`),1)],64)):n.shortcut.sensorType===`temperature`?(Y(),B(U,{key:2},[Mt(L(n.sensor?.getProperty(`current`)??`--`)+`°C `,1)],64)):n.shortcut.sensorType===`humidity`?(Y(),B(U,{key:3},[Mt(L(n.sensor?.getProperty(`current`)??`--`)+`% `,1)],64)):n.shortcut.sensorType===`occupancy`?(Y(),B(U,{key:4},[Mt(L(H(dw)(n.sensor)?`Occupied`:`Empty`),1)],64)):n.shortcut.sensorType===`smoke`?(Y(),B(U,{key:5},[Mt(L(H(dw)(n.sensor)?`Smoke Detected`:`Clear`),1)],64)):n.shortcut.sensorType===`leak`?(Y(),B(U,{key:6},[Mt(L(H(dw)(n.sensor)?`Leak Detected`:`Clear`),1)],64)):n.shortcut.sensorType===`garage`?(Y(),B(U,{key:7},[Mt(L(H(dw)(n.sensor)?`Open`:`Closed`),1)],64)):n.shortcut.sensorType===`doorbell`?(Y(),B(U,{key:8},[Mt(L(H(dw)(n.sensor)?`Ringing`:`Ready`),1)],64)):n.shortcut.sensorType===`securitySystem`?(Y(),B(U,{key:9},[Mt(L(tt(n.sensor)),1)],64)):n.shortcut.sensorType===`battery`?(Y(),B(U,{key:10},[Mt(L(it(n.sensor)),1)],64)):(Y(),B(U,{key:11},[Mt(L(H(dw)(n.sensor)?`On`:`Off`),1)],64))],2),n.isOnline?q(``,!0):(Y(),B(`div`,Fw,`Offline`))])]),_:2},1536)):q(``,!0)],46,Dw)),[[Xt,!H(Se).has(n.shortcut._id)],[H(bn),[()=>mt(n.shortcut),{distanceThreshold:24,delay:500,onMouseUp:()=>ht(n)}]]])),128)),H(me)?(Y(),B(`div`,{key:0,ref_key:`placeholderRef`,ref:ae,class:`draggable absolute pointer-events-auto`,style:W(`left: ${H(me).x}px; top: ${H(me).y}px;`)},[z(r,{severity:`secondary`,rounded:``,class:`cui-icon-lg shadow-sm pointer-events-auto`},{icon:X(()=>[z(h,{width:`100%`,height:`100%`})]),_:1})],4)):q(``,!0),H(c)&&!H(pe)&&!H(ge)?(Y(),F(o,{key:1,ref_key:`camerasMenuRef`,ref:M,class:`shadow-lg cui-rounded-corner`,"auto-z-index":!0,"append-to":`body`,onShow:t[7]||=e=>ye.value=!0,onHide:t[8]||=e=>kt(!1)},{default:X(()=>[z(de,{value:H(be),"onUpdate:value":t[6]||=e=>Qt(be)?be.value=e:null,class:`shortcut-menu-tabs`},{default:X(()=>[z(y,{pt:{content:{class:`border-b border-color`}}},{default:X(()=>[z(g,{value:`cameras`,class:`flex items-center gap-2 px-3 py-2`},{default:X(()=>[z(n,{class:`w-4 h-4`}),t[13]||=J(`span`,{class:`text-sm`},`Cameras`,-1)]),_:1}),z(g,{value:`sensors`,class:`flex items-center gap-2 px-3 py-2`},{default:X(()=>[z(_,{class:`w-4 h-4`}),t[14]||=J(`span`,{class:`text-sm`},`Sensors`,-1)]),_:1})]),_:1}),z(ue,null,{default:X(()=>[z(S,{value:`cameras`},{default:X(()=>[J(`div`,Iw,[(Y(!0),B(U,null,K(H(Re),e=>(Y(),B(`div`,{key:e._id,class:Z([`shortcut-menu-item`,{"shortcut-menu-item-disabled":We(e)}]),onClick:Bn(t=>!We(e)&&wt(e),[`prevent`])},[z(b,{camera:e,width:`100%`,loading:H(Pe)},null,8,[`camera`,`loading`]),We(e)?(Y(),B(`div`,Rw,[z(x,{class:`w-6 h-6 text-green-500`})])):q(``,!0)],10,Lw))),128)),H(Re).length===0?(Y(),B(`div`,zw,`No other cameras available`)):q(``,!0)])]),_:1}),z(S,{value:`sensors`},{default:X(()=>[J(`div`,Bw,[H(Ae).length>0?(Y(!0),B(U,{key:0},K(H(Ae),(e,t)=>(Y(),B(U,{key:e.id},[z(ce,{disabled:Ue(e),onClick:t=>!Ue(e)&&Tt(e),"button-props":{class:`p-0!`}},Ut({prepend:X(()=>[J(`div`,Vw,[e.type===H(u).Contact?(Y(),F(C,{key:0,class:`w-5 h-5`})):e.type===H(u).Temperature?(Y(),F(T,{key:1,class:`w-5 h-5`})):e.type===H(u).Humidity?(Y(),F(E,{key:2,class:`w-5 h-5`})):e.type===H(u).Occupancy?(Y(),F(D,{key:3,class:`w-5 h-5`})):e.type===H(u).Smoke?(Y(),F(O,{key:4,class:`w-5 h-5`})):e.type===H(u).Leak?(Y(),F(k,{key:5,class:`w-5 h-5`})):e.type===H(u).Light?(Y(),F(A,{key:6,class:`w-5 h-5`})):e.type===H(u).Switch?(Y(),F(j,{key:7,class:`w-5 h-5`})):e.type===H(u).Siren?(Y(),F(ee,{key:8,class:`w-5 h-5`})):e.type===H(u).Lock?(Y(),F(te,{key:9,class:`w-5 h-5`})):e.type===H(u).Garage?(Y(),F(ne,{key:10,class:`w-5 h-5`})):e.type===H(u).Doorbell?(Y(),F(re,{key:11,class:`w-5 h-5`})):e.type===H(u).SecuritySystem?(Y(),F(ie,{key:12,class:`w-5 h-5`})):e.type===H(u).Battery?(Y(),F(se,{key:13,class:`w-5 h-5`})):q(``,!0)])]),subtitle:X(()=>[Mt(L(Ge(e.type)),1)]),default:X(()=>[Mt(` `+L(e.displayName.value)+` `,1)]),_:2},[Ue(e)?{name:`append`,fn:X(()=>[z(x,{class:`w-4 h-4 text-green-500`})]),key:`0`}:void 0]),1032,[`disabled`,`onClick`]),t<H(Ae).length-1?(Y(),F(le,{key:0,class:`!my-1`})):q(``,!0)],64))),128)):(Y(),B(`div`,Hw,`No sensors available`))])]),_:1})]),_:1})]),_:1},8,[`value`])]),_:1},512)):q(``,!0)],6)}}}),[[`__scopeId`,`data-v-bb6e3e8b`]]),Ww={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Gw(e,t){return Y(),B(`svg`,Ww,[...t[0]||=[J(`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 Kw=I({name:`material-symbols-info-outline`,render:Gw}),qw={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Jw(e,t){return Y(),B(`svg`,qw,[...t[0]||=[J(`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 Yw=I({name:`grommet-icons-pan`,render:Jw}),Xw={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Zw(e,t){return Y(),B(`svg`,Xw,[...t[0]||=[J(`path`,{fill:`currentColor`,d:`m10 19l-4.55 2.275q-.5.25-.975-.038T4 20.376V8q0-.825.588-1.412T6 6h8q.825 0 1.413.588T16 8v12.375q0 .575-.475.863t-.975.037zm8.288-1.287Q18 17.425 18 17V4H8q-.425 0-.712-.288T7 3t.288-.712T8 2h10q.825 0 1.413.588T20 4v13q0 .425-.288.713T19 18t-.712-.288`},null,-1)]])}var Qw=I({name:`material-symbols-bookmarks-rounded`,render:Zw}),$w={viewBox:`0 0 512 512`,width:`1.2em`,height:`1.2em`};function eT(e,t){return Y(),B(`svg`,$w,[...t[0]||=[J(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`48`,d:`m184 112l144 144l-144 144`},null,-1)]])}var tT=I({name:`ion-chevron-forward-outline`,render:eT}),nT={viewBox:`0 0 512 512`,width:`1.2em`,height:`1.2em`};function rT(e,t){return Y(),B(`svg`,nT,[...t[0]||=[J(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`48`,d:`M328 112L184 256l144 144`},null,-1)]])}var iT=I({name:`ion-chevron-back-outline`,render:rT}),aT={viewBox:`0 0 512 512`,width:`1.2em`,height:`1.2em`};function oT(e,t){return Y(),B(`svg`,aT,[...t[0]||=[J(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`48`,d:`m112 184l144 144l144-144`},null,-1)]])}var sT=I({name:`ion-chevron-down-outline`,render:oT}),cT={viewBox:`0 0 512 512`,width:`1.2em`,height:`1.2em`};function lT(e,t){return Y(),B(`svg`,cT,[...t[0]||=[J(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`48`,d:`m112 328l144-144l144 144`},null,-1)]])}var uT=I({name:`ion-chevron-up-outline`,render:lT}),dT={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function fT(e,t){return Y(),B(`svg`,dT,[...t[0]||=[J(`path`,{fill:`currentColor`,d:`M18 12.998H6a1 1 0 0 1 0-2h12a1 1 0 0 1 0 2`},null,-1)]])}var pT=I({name:`ic-round-minus`,render:fT}),mT={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function hT(e,t){return Y(),B(`svg`,mT,[...t[0]||=[J(`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 gT=I({name:`ic-round-plus`,render:hT}),_T={size:`small`};function vT(e){let t=ar(),{sensor:n}=se(e),r=V(()=>n.value?.hasCapability(Se.Pan)??!1),i=V(()=>n.value?.hasCapability(Se.Tilt)??!1),a=V(()=>n.value?.hasCapability(Se.Zoom)??!1),o=V(()=>n.value?.hasCapability(Se.Home)??!1),s=V(()=>r.value||i.value),c=V(()=>n.value?.getProperty(Ee.Presets)??[]),l=V(()=>(n.value?.hasCapability(Se.Presets)??!1)&&c.value.length>0);async function u(){try{await n.value?.setProperty(Ee.Position,{pan:0,tilt:0,zoom:0})}catch(e){t.error(`PTZ go home failed:`,e)}}async function d(e){try{await n.value?.setProperty(Ee.TargetPreset,e)}catch(e){t.error(`PTZ go to preset failed:`,e)}}return{sensor:n,hasPan:r,hasTilt:i,hasZoom:a,hasPanTilt:s,hasHome:o,hasPresets:l,presets:c,goToHome:u,goToPreset:d}}var yT={class:`relative w-full h-full`},bT={class:`absolute top-1`,style:{color:`#646464`}},xT={class:`absolute bottom-1`,style:{color:`#646464`}},ST={class:`absolute left-1`,style:{color:`#646464`}},CT={class:`absolute right-1`,style:{color:`#646464`}},wT=100,TT=.05,ET=.05,DT=.03,OT=Gn({__name:`CuiPTZControl`,props:jn({cameraDevice:{},size:{}},_T),emits:[`panTiltChange`,`zoomChange`],setup(e,{emit:t}){let n=e,r=t,{cameraDevice:i,size:a}=jt(n),o=ar(),{sensor:s,hasZoom:c,hasPanTilt:l}=vT(i),u=Tn(`panTiltRef`),d=Tn(`zoomRef`),f=Bt({x:0,y:0}),p=Bt({x:0,y:0}),m=Bt({x:0,y:0}),h=P(!1),g=P(!1),_=P(0),v=P(0),y=P(0),b=P(!1),x=P(0),S=P(0),C=P(0),w=P(0),T=P(0),E=P(0),D=P(0),O=P(`none`),k=P(0),A=P(0),j=P(0),ee=P(null),te=P(Date.now()),ne=V(()=>h.value||g.value),re=V(()=>a.value===`small`?26:60),ie=V(()=>a.value===`small`?10:15);function ae(e){return Math.round(e*100)/100}function oe(e){return ae(Math.max(0,Math.min(1,e)))}async function M(e){let t=Date.now();if(b.value&&t-x.value<wT)return;let n={panSpeed:ae(e.panSpeed),tiltSpeed:ae(e.tiltSpeed),zoomSpeed:ae(e.zoomSpeed)};b.value=!0,x.value=t;try{await s.value?.setProperty(Ee.Velocity,n)}catch(e){o.error(`PTZ continuous move failed:`,e)}finally{b.value=!1}}async function se(){let e=Date.now();b.value=!0,x.value=e;try{await s.value?.setProperty(Ee.Velocity,{panSpeed:0,tiltSpeed:0,zoomSpeed:0})}catch(e){o.error(`PTZ stop failed:`,e)}finally{b.value=!1}}function ce(){let e=Date.now(),t=(e-te.value)/1e3;te.value=e;let n=!1;if(h.value&&(Math.abs(T.value)>=TT||Math.abs(E.value)>=TT)){let e=T.value*ET*t*5,i=E.value*ET*t*5;k.value=Math.max(-1,Math.min(1,k.value+e)),A.value=Math.max(-1,Math.min(1,A.value+i));let a=ae(k.value),o=ae(A.value);(p.x!==a||p.y!==o)&&(p.x=a,p.y=o,r(`panTiltChange`,{x:p.x,y:p.y}),n=!0)}if(g.value&&Math.abs(D.value)>=TT){let e=D.value*DT*t*10;j.value=Math.max(0,Math.min(1,j.value+e));let i=ae(j.value);v.value!==i&&(v.value=i,r(`zoomChange`,i),n=!0)}if(n&&ne.value&&Date.now()-x.value>=200){if(h.value&&(Math.abs(T.value)>=TT||Math.abs(E.value)>=TT)){let e=ae(T.value),t=ae(E.value);O.value===`pan`?M({panSpeed:e,tiltSpeed:0,zoomSpeed:0}):O.value===`tilt`?M({panSpeed:0,tiltSpeed:t,zoomSpeed:0}):M({panSpeed:e,tiltSpeed:t,zoomSpeed:0})}else if(g.value&&Math.abs(D.value)>=TT){let e=oe(Math.abs(D.value));M({panSpeed:0,tiltSpeed:0,zoomSpeed:D.value>0?e:-e})}}ne.value&&(ee.value=requestAnimationFrame(ce))}function le(){ee.value!==null&&cancelAnimationFrame(ee.value),te.value=Date.now(),ee.value=requestAnimationFrame(ce)}function ue(){ee.value!==null&&(cancelAnimationFrame(ee.value),ee.value=null)}async function de(){await new Promise(e=>setTimeout(e,50)),!ne.value&&(Math.abs(S.value)>=TT||Math.abs(C.value)>=TT||Math.abs(w.value)>=TT)&&(T.value=0,E.value=0,D.value=0,O.value=`none`,S.value=0,C.value=0,w.value=0,await se(),ue())}async function fe(e){if(!d.value||!g.value)return;let t=d.value.getBoundingClientRect(),n=t.top+t.height/2,r=re.value,i=e-n;i=Math.max(-r,Math.min(r,i)),_.value=i;let a=-i/r;D.value=a;let o=ae(a);if(Math.abs(o)>=TT&&Math.abs(o-w.value)>=TT){w.value=o;let e=o>0,t=oe(Math.abs(o));await M({panSpeed:0,tiltSpeed:0,zoomSpeed:e?t:-t})}else g.value&&Math.abs(o)<TT&&Math.abs(w.value)>=TT&&(D.value=0,w.value=0,await se())}function N(e){g.value=!0,te.value=Date.now(),j.value=v.value,le(),e instanceof MouseEvent?fe(e.clientY):fe(e.touches[0].clientY)}async function pe(e,t){if(!u.value||!h.value)return;let n=u.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)-ie.value,c=Math.sqrt(a*a+o*o);c>s&&(a=a/c*s,o=o/c*s),f.x=a,f.y=o;let l=a/s,d=-o/s,p=Math.abs(l),g=Math.abs(d);p>=TT||g>=TT?p>g?(O.value=`pan`,T.value=l,E.value=0):(O.value=`tilt`,T.value=0,E.value=d):(O.value=`none`,T.value=0,E.value=0),(p>TT||g>TT)&&(m.x=T.value,m.y=E.value);let _=Math.abs(T.value-S.value),v=Math.abs(E.value-C.value),y=_>=TT||v>=TT,b=Math.abs(T.value)>=TT||Math.abs(E.value)>=TT;if(b&&y){S.value=T.value,C.value=E.value;let e=ae(T.value),t=ae(E.value);O.value===`pan`?await M({panSpeed:e,tiltSpeed:0,zoomSpeed:0}):O.value===`tilt`&&await M({panSpeed:0,tiltSpeed:t,zoomSpeed:0})}else h.value&&!b&&(Math.abs(S.value)>=TT||Math.abs(C.value)>=TT)&&(T.value=0,E.value=0,O.value=`none`,S.value=0,C.value=0,await se())}function me(e){h.value=!0,te.value=Date.now(),le(),e instanceof MouseEvent?pe(e.clientX,e.clientY):pe(e.touches[0].clientX,e.touches[0].clientY)}function he(e){h.value&&pe(e.clientX,e.clientY),g.value&&fe(e.clientY)}function ge(e){e.preventDefault(),h.value&&pe(e.touches[0].clientX,e.touches[0].clientY),g.value&&fe(e.touches[0].clientY)}function _e(){h.value&&(h.value=!1,f.x=0,f.y=0),g.value&&(y.value=v.value,g.value=!1,_.value=0),de()}return hn(()=>{window.addEventListener(`mousemove`,he),window.addEventListener(`mouseup`,_e),window.addEventListener(`touchmove`,ge,{passive:!1}),window.addEventListener(`touchend`,_e)}),Fn(()=>{window.removeEventListener(`mousemove`,he),window.removeEventListener(`mouseup`,_e),window.removeEventListener(`touchmove`,ge),window.removeEventListener(`touchend`,_e),ue(),se()}),(e,t)=>{let n=gT,r=pT,i=uT,o=sT,s=iT,p=tT;return Y(),B(`div`,yT,[H(c)?(Y(),B(`div`,{key:0,ref_key:`zoomRef`,ref:d,class:Z([`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(a)===`small`?`w-12 h-24`:`w-16 h-48`]]),onMousedown:N,onTouchstart:Bn(N,[`prevent`])},[J(`div`,{class:Z([`absolute text-muted`,H(a)===`small`?`top-1.5 text-sm`:`top-4 text-lg`])},[z(n)],2),J(`div`,{class:Z([`absolute text-muted`,H(a)===`small`?`bottom-1.5 text-sm`:`bottom-4 text-lg`])},[z(r)],2),J(`div`,{class:Z([`bg-white rounded-full absolute cursor-grab active:cursor-grabbing shadow-lg`,H(a)===`small`?`w-8 h-8`:`w-10 h-10`]),style:W({transform:`translateY(${H(_)}px)`})},null,6)],34)):q(``,!0),H(l)?(Y(),B(`div`,{key:1,ref_key:`panTiltRef`,ref:u,class:Z([`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(a)===`small`?`w-24 h-24`:`w-32 h-32`]]),onMousedown:me,onTouchstart:Bn(me,[`prevent`])},[J(`div`,bT,[z(i)]),J(`div`,xT,[z(o)]),J(`div`,ST,[z(s)]),J(`div`,CT,[z(p)]),J(`div`,{class:Z([`bg-white rounded-full absolute cursor-grab active:cursor-grabbing shadow-lg transform -translate-x-1/2 -translate-y-1/2`,H(a)===`small`?`w-8 h-8`:`w-10 h-10`]),style:W({left:`calc(50% + ${H(f).x}px)`,top:`calc(50% + ${H(f).y}px)`})},null,6)],34)):q(``,!0)])}}}),kT={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function AT(e,t){return Y(),B(`svg`,kT,[...t[0]||=[J(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`1.5`,d:`m14 7l-5 5l5 5`},null,-1)]])}var jT=I({name:`iconamoon-arrow-left2-light`,render:AT});async function MT(){return(await $.get(`/cast/targets`)).data}async function NT(e){await $.post(`/cast`,e)}var PT=ar(),FT=P(!1),IT=null,LT=!1,RT=new Map,zT=null;function BT(){return IT??=(async()=>({plugin:null}))(),IT}async function VT(e){LT||(LT=!0,await e.addListener(`pipChanged`,e=>{WT(e.active),e.active&&zT&&RT.get(zT)?.activate(!0)}),await e.addListener(`pipWillEnter`,()=>{WT(!0),zT&&RT.get(zT)?.activate(!0)}),await e.addListener(`pipEnterFailed`,()=>{WT(!1)}))}function HT(e){RT.delete(e)&&UT()}async function UT(){try{let{plugin:e}=await BT();if(!e)return;await VT(e);let t=RT.size===1?[...RT.entries()][0]:null;zT=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){PT.warn(`Pip.setAutoEnter failed`,e)}}function WT(e){FT.value=e,document.documentElement.classList.toggle(`cui-native-pip`,e)}var GT={class:`relative`},KT=Gn({__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}=jt(n),d=Tn(`buttonRef`),f=P(!1),p=Kt(d),{start:m}=En(()=>{f.value=!1},l,{immediate:!1}),h=V(()=>({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=ci;return Y(),B(`div`,{ref_key:`buttonRef`,ref:d,class:`relative`},[z(n,sn(H(s),{label:H(i),onClick:g}),Ut({_:2},[H(a)?{name:`icon`,fn:X(()=>[J(`div`,GT,[(Y(),F(pn(H(a)),{class:Z(H(o))},null,8,[`class`]))])]),key:`0`}:void 0]),1040,[`label`]),(Y(),F(wt,{to:`body`},[z(Rn,{name:`fade`},{default:X(()=>[H(f)?(Y(),F(n,sn({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`])):q(``,!0)]),_:1})]))],512)}}}),qT={viewBox:`0 0 16 16`,width:`1.2em`,height:`1.2em`};function JT(e,t){return Y(),B(`svg`,qT,[...t[0]||=[J(`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 YT=I({name:`fluent-copy-16-filled`,render:JT});async function XT({signal:e}){return(await $.get(`/remote`,{signal:e})).data}async function ZT(e){return(await $.patch(`/remote`,e)).data}async function QT(e){return(await $.post(`/remote/pair/init`,e?{name:e}:{})).data}async function $T({name:e}={}){return(await $.post(`/remote/pair/poll`,e?{name:e}:{})).data}async function eE(){await $.delete(`/remote/unregister`)}async function tE({signal:e}){return(await $.get(`/remote/status`,{signal:e})).data}async function nE(e){await $.patch(`/remote/name`,{name:e})}async function rE({signal:e}){return(await $.get(`/remote/tunnel`,{signal:e})).data}async function iE({signal:e}={}){return(await $.get(`/remote/connection-info`,{signal:e})).data}async function aE(e){return(await $.post(`/remote/test/${e}`)).data}async function oE({signal:e}={}){return(await $.get(`/remote/cloudflare/managed/status`,{signal:e})).data}async function sE(e){await $.post(`/remote/cloudflare/managed/connect`,{hostname:e})}async function cE(){await $.post(`/remote/cloudflare/managed/cancel`)}async function lE(){await $.post(`/remote/cloudflare/managed/disconnect`)}async function uE(){await $.post(`/remote/cloudflare/managed/logout`)}var dE=class{_queryClient=$n();t=Ho.global.t;toast=Go();queryActivator=P([{name:`getRemoteInfoQuery`,enabled:!0},{name:`getRegistrationStatusQuery`,enabled:!0},{name:`getTunnelStatusQuery`,enabled:!0},{name:`getConnectionInfoQuery`,enabled:!0},{name:`getCloudflareManagedStatusQuery`,enabled:!0}]);get queryClient(){return this._queryClient}getRemoteInfoQuery(){return Ko({queryKey:[`remote`],queryFn:({signal:e})=>XT({signal:e}),enabled:()=>this.queryActivator.value.some(e=>e.name===`getRemoteInfoQuery`&&e.enabled),staleTime:1e3})}patchRemoteInfoQuery(){return nr({mutationFn:ZT,onSuccess:async()=>{await this._queryClient.refetchQueries({queryKey:[`remote`],exact:!0}),this.toast.add({severity:`success`,detail:this.t(`components.toast.remote_updated`),life:3e3})}})}getRegistrationStatusQuery(){return Ko({queryKey:[`remote`,`status`],queryFn:({signal:e})=>tE({signal:e}),enabled:()=>this.queryActivator.value.some(e=>e.name===`getRegistrationStatusQuery`&&e.enabled),staleTime:1e3})}pairInitMutation(){return nr({mutationFn:QT})}pairPollMutation(){return nr({mutationFn:$T,onSuccess:async e=>{e.state===`confirmed`&&(await this._queryClient.refetchQueries({queryKey:[`remote`],exact:!0}),await this._queryClient.refetchQueries({queryKey:[`remote`,`status`],exact:!0}),this.toast.add({severity:`success`,detail:this.t(`components.toast.remote_registered`),life:3e3}))}})}unregisterServerQuery(){return nr({mutationFn:eE,onSuccess:async()=>{await this._queryClient.refetchQueries({queryKey:[`remote`],exact:!0}),await this._queryClient.refetchQueries({queryKey:[`remote`,`status`],exact:!0}),this.toast.add({severity:`success`,detail:this.t(`components.toast.remote_unregistered`),life:3e3})}})}getTunnelStatusQuery(e=()=>!0){return Ko({queryKey:[`remote`,`tunnel`],queryFn:({signal:e})=>rE({signal:e}),enabled:()=>e()&&this.queryActivator.value.some(e=>e.name===`getTunnelStatusQuery`&&e.enabled),refetchInterval:3e4,staleTime:1e4})}updateServerNameQuery(){return nr({mutationFn:nE,onSuccess:async()=>{await this._queryClient.refetchQueries({queryKey:[`remote`,`status`],exact:!0}),this.toast.add({severity:`success`,detail:this.t(`components.toast.server_name_updated`),life:3e3})}})}getConnectionInfoQuery(){return Ko({queryKey:[`remote`,`connection-info`],queryFn:({signal:e})=>iE({signal:e}),enabled:()=>this.queryActivator.value.some(e=>e.name===`getConnectionInfoQuery`&&e.enabled),refetchInterval:1e4})}testRemoteModeMutation(){return nr({mutationFn:aE})}getCloudflareManagedStatusQuery(){return Ko({queryKey:[`remote`,`cloudflare`,`managed`],queryFn:({signal:e})=>oE({signal:e}),enabled:()=>this.queryActivator.value.some(e=>e.name===`getCloudflareManagedStatusQuery`&&e.enabled),refetchInterval:e=>{let t=e.state.data?.state;return t===`awaiting_login`||t===`creating_tunnel`||t===`setting_dns`?2e3:!1},refetchOnWindowFocus:!0,staleTime:1e3})}cloudflareManagedConnectMutation(){return nr({mutationFn:sE,onSuccess:async()=>{await this._queryClient.refetchQueries({queryKey:[`remote`,`cloudflare`,`managed`],exact:!0})}})}cloudflareManagedCancelMutation(){return nr({mutationFn:cE,onSuccess:async()=>{await this._queryClient.refetchQueries({queryKey:[`remote`,`cloudflare`,`managed`],exact:!0})}})}cloudflareManagedDisconnectMutation(){return nr({mutationFn:lE,onSuccess:async()=>{await this._queryClient.refetchQueries({queryKey:[`remote`],exact:!0}),await this._queryClient.refetchQueries({queryKey:[`remote`,`cloudflare`,`managed`],exact:!0})}})}cloudflareManagedLogoutMutation(){return nr({mutationFn:uE,onSuccess:async()=>{await this._queryClient.refetchQueries({queryKey:[`remote`],exact:!0}),await this._queryClient.refetchQueries({queryKey:[`remote`,`cloudflare`,`managed`],exact:!0})}})}toggleQueryActivator(e,t){let n=this.queryActivator.value.find(t=>t.name===e);return n&&(n.enabled=t),this}};async function fE({shareData:e}){return(await $.post(`/shares`,e)).data}async function pE({camera:e,signal:t}){return(await $.get(`/shares`,{params:{camera:e},signal:t})).data}async function mE({token:e}){return(await $.delete(`/shares/${e}`)).data}var hE=class{_queryClient=$n();t=Ho.global.t;toast=Go();get queryClient(){return this._queryClient}getSharesQuery(e){return Ko({queryKey:[`shares`,e],queryFn:({signal:t})=>pE({camera:H(e),signal:t})})}createShareQuery(){return nr({mutationFn:fE,onSuccess:async()=>{await this._queryClient.refetchQueries({queryKey:[`shares`]}),this.toast.add({severity:`success`,detail:this.t(`shares.share_created`),life:3e3})}})}revokeShareQuery(){return nr({mutationFn:mE,onSuccess:async()=>{await this._queryClient.refetchQueries({queryKey:[`shares`]}),this.toast.add({severity:`success`,detail:this.t(`shares.share_revoked`),life:3e3})}})}},gE={class:`flex flex-col gap-6`},_E={key:0,class:`flex flex-col gap-4`},vE={class:`flex flex-col field-gap`},yE={class:`cui-label`},bE={class:`flex flex-col field-gap`},xE={class:`cui-label`},SE={class:`flex flex-col field-gap`},CE={class:`cui-label`},wE={class:`flex flex-col field-gap`},TE={class:`cui-label`},EE={key:1,class:`flex flex-col gap-4`},DE={class:`flex flex-col field-gap`},OE={class:`cui-label`},kE={class:`flex flex-col field-gap`},AE={class:`cui-label`},jE=Gn({__name:`ShareForm`,props:{cameraId:{},cameraName:{},sources:{}},setup(e,{expose:t}){let n=new hE,r=new dE,i=e,{t:a}=St(),o=nn(`dialogRefProps`),{mutateAsync:s,isPending:c}=n.createShareQuery(),{data:l}=r.getRemoteInfoQuery(),{data:u}=r.getRegistrationStatusQuery(),d=[{label:`1 `+a(`shares.hour`),value:1},{label:`24 `+a(`shares.hours`),value:24},{label:`7 `+a(`shares.days`),value:168},{label:`30 `+a(`shares.days`),value:720}],f=[{label:a(`shares.unlimited`),value:0},{label:`1`,value:1},{label:`5`,value:5},{label:`10`,value:10}],p=i.sources.map(e=>({label:e.name,value:e._id})),m=P(24),h=P(0),g=P(``),_=P(i.sources.find(e=>e.role===`high-resolution`)?._id??i.sources[0]?._id??``),v=P(null),y=V(()=>!!navigator.share),b=V(()=>!!(o.loading?.value||c.value)),x=V(()=>l.value?.remoteSettings.enabled===!1||u.value?.isRegistered===!1);async function S(){if(v.value)try{await navigator.share({title:a(`shares.share_title`),text:`${v.value.link}\n\n${a(`shares.code`)}: ${v.value.code}`})}catch{}}async function C(){if(v.value)return;let e;try{e=await s({shareData:{cameraId:i.cameraId,sourceId:_.value,ttlHours:m.value,maxViewers:h.value,label:g.value||void 0}})}catch{return null}return v.value=e,o.confirmText.value=a(`shares.done`),null}return t({isLoading:b,onConfirm:C}),(e,t)=>{let n=Pr,r=Rr,i=Gr,a=KT,o=Mr,s=Vr,c=ci;return Y(),B(`div`,gE,[H(v)?(Y(),B(`div`,EE,[J(`div`,DE,[J(`label`,OE,L(e.$t(`shares.link`)),1),z(s,null,{default:X(()=>[z(i,{"model-value":H(v).link,readonly:``,class:`w-full font-mono text-sm`},null,8,[`model-value`]),z(o,null,{default:X(()=>[z(a,{"action-text":e.$t(`components.form.tooltip.copied`),icon:H(YT),"button-props":{severity:`secondary`,text:!0},onAction:t[4]||=e=>H(RL)(H(v).link)},null,8,[`action-text`,`icon`])]),_:1})]),_:1})]),J(`div`,kE,[J(`label`,AE,L(e.$t(`shares.code`)),1),z(s,null,{default:X(()=>[z(i,{"model-value":H(v).code,readonly:``,class:`w-full font-mono text-lg tracking-widest text-center`},null,8,[`model-value`]),z(o,null,{default:X(()=>[z(a,{"action-text":e.$t(`components.form.tooltip.copied`),icon:H(YT),"button-props":{severity:`secondary`,text:!0},onAction:t[5]||=e=>H(RL)(H(v).code)},null,8,[`action-text`,`icon`])]),_:1})]),_:1}),z(n,{severity:`secondary`,variant:`simple`,size:`small`,class:`cui-input-hint`},{default:X(()=>[Mt(L(e.$t(`shares.code_save_hint`)),1)]),_:1})]),H(y)?(Y(),F(c,{key:0,label:e.$t(`shares.share`),class:`w-full cui-button-medium`,onClick:S},null,8,[`label`])):q(``,!0)])):(Y(),B(`div`,_E,[H(x)?(Y(),F(n,{key:0,severity:`warn`,variant:`simple`,size:`small`},{default:X(()=>[Mt(L(e.$t(`shares.needs_cloud`)),1)]),_:1})):q(``,!0),J(`div`,vE,[J(`label`,yE,L(e.$t(`shares.source`)),1),z(r,{modelValue:H(_),"onUpdate:modelValue":t[0]||=e=>Qt(_)?_.value=e:null,options:H(p),"option-label":`label`,"option-value":`value`,class:`w-full`},null,8,[`modelValue`,`options`])]),J(`div`,bE,[J(`label`,xE,L(e.$t(`shares.ttl`)),1),z(r,{modelValue:H(m),"onUpdate:modelValue":t[1]||=e=>Qt(m)?m.value=e:null,options:d,"option-label":`label`,"option-value":`value`,class:`w-full`},null,8,[`modelValue`])]),J(`div`,SE,[J(`label`,CE,L(e.$t(`shares.max_viewers`)),1),z(r,{modelValue:H(h),"onUpdate:modelValue":t[2]||=e=>Qt(h)?h.value=e:null,options:f,"option-label":`label`,"option-value":`value`,class:`w-full`},null,8,[`modelValue`])]),J(`div`,wE,[J(`label`,TE,L(e.$t(`shares.label`)),1),z(i,{modelValue:H(g),"onUpdate:modelValue":t[3]||=e=>Qt(g)?g.value=e:null,placeholder:e.$t(`shares.label_placeholder`),class:`w-full`},null,8,[`modelValue`,`placeholder`])])]))])}}}),ME=Symbol(`GridSearchState`),NE=1e3;function PE({mode:e,liveRunning:t,stillFrom:n,movedMs:r}){return e===`play`?`release`:e===`idle`?n===`playback`||t?`release`:`keep`:n===`live`||Math.abs(r)>NE?`follow`:`keep`}function FE({onPress:e,onTouchTap:t,delayMs:n=400,tolerancePx:r=10}){let i=new Set,a,o,s=!1;function c(){clearTimeout(o),o=void 0,a=void 0}function l(t){if(s=!1,t.button!==0||(t.isPrimary&&i.clear(),i.add(t.pointerId),c(),i.size>1))return;let r={clientX:t.clientX,clientY:t.clientY};a={...r,id:t.pointerId},o=setTimeout(()=>{o=void 0,a=void 0,s=!0,e(r)},n)}function u(e){a&&e.pointerId===a.id&&Math.hypot(e.clientX-a.clientX,e.clientY-a.clientY)>r&&c()}function d(e){if(i.delete(e.pointerId),a?.id!==e.pointerId)return;let n={clientX:e.clientX,clientY:e.clientY};c(),e.type!==`pointercancel`&&e.pointerType===`touch`&&t?.(n)&&(s=!0)}function f(){let e=s;return s=!1,e}return{down:l,move:u,up:d,cancel:c,takeClick:f}}async function IE(e,t){let n=t.filter(e=>e.points.length>=3);if(n.length===0)return typeof e==`string`?RE(e):e;let r=typeof e==`string`?e:URL.createObjectURL(e);try{let e=await LE(r),t=document.createElement(`canvas`);t.width=e.naturalWidth,t.height=e.naturalHeight;let i=t.getContext(`2d`);if(!i)return null;i.drawImage(e,0,0),i.fillStyle=`#000`;for(let e of n){i.beginPath();for(let[n,[r,a]]of e.points.entries()){let e=r/100*t.width,o=a/100*t.height;n===0?i.moveTo(e,o):i.lineTo(e,o)}i.closePath(),i.fill()}return await new Promise(e=>t.toBlob(e,`image/png`))}catch{return null}finally{typeof e!=`string`&&URL.revokeObjectURL(r)}}function LE(e){return new Promise((t,n)=>{let r=new Image;r.onload=()=>t(r),r.onerror=()=>n(Error(`image failed to load`)),r.src=e})}async function RE(e){return await(await fetch(e)).blob()}var zE={backButton:!1,doubleClickZoom:!0,expandableCard:!1,flatCard:!1,cardFit:`aspect`,resizable:!1,pipToggleButton:!1,cardClickAction:`redirect`,viewTransition:!1,timelineContainerId:`timeline-container`,cameraNameOverlay:!0,liveIndicatorOverlay:!1,detectionIndicatorOverlay:!1,detectionIconsOverlay:!1,boundingBoxOverlay:!0,privacyOverlay:!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,fullscreenShortcuts:!1,fullscreenTimeline:!1,embeddedTimeline:!1,subcontrol:!0,subcontrolPtzButton:!0},BE=kt(Symbol(`cui-camera-drawer`)),VE={position:`right`,showCloseIcon:!1,modal:!0,dismissable:!0,baseZIndex:1e3,blockScroll:!0,pt:{root:{class:`w-full sm:w-[400px]`}}};function HE(){let e=P(!1),t=V(()=>e.value);return BE.on(t=>{switch(t.type){case`close`:e.value=!1;break;case`open`:e.value=!0}}),{open:(t,n)=>{BE.emit({type:`open`,options:t,props:{...VE,...n}}),e.value=!0},close:()=>{BE.emit({type:`close`}),e.value=!1},isOpen:t,getEventBus:()=>BE}}var UE=`/pwa/favicon-64.ico`,WE=64,GE=`#ea5455`,KE=14,qE=null,JE=null,YE=null,XE=!1,ZE=0;function QE(){return qE??=Array.from(document.querySelectorAll(`link[rel="icon"]`)).map(e=>({el:e,href:e.href,type:e.type})),qE}function $E(){return JE??=new Promise((e,t)=>{let n=new Image;n.onload=()=>e(n),n.onerror=()=>t(Error(`failed to load ${UE}`)),n.src=UE}),JE}function eD(e){let t=document.createElement(`canvas`);t.width=WE,t.height=WE;let n=t.getContext(`2d`);return n?(n.drawImage(e,0,0,WE,WE),n.beginPath(),n.arc(49,49,KE,0,Math.PI*2),n.fillStyle=GE,n.fill(),t.toDataURL(`image/png`)):null}async function tD(e){if(typeof document>`u`)return;let t=++ZE;if(e===XE)return;let n=QE();if(n.length!==0){if(e){if(!YE)try{YE=eD(await $E())}catch{return}if(YE&&t===ZE){XE=!0;for(let{el:e}of n)e.href=YE,e.type=`image/png`}}else{XE=!1;for(let{el:e,href:t,type:r}of n)e.href=t,e.type=r}}}var nD=100,rD=Bt({notifications:[],castTargets:[]}),iD=null,aD=null,oD=!1;function sD(){return aD||(iD=Yt(!0),iD.run(()=>{let e=Gs(`/notifications`);aD=e,e.on(`notification`,e=>{if(e.tag){let t=rD.notifications.findIndex(t=>t.tag===e.tag);t!==-1&&rD.notifications.splice(t,1)}rD.notifications.unshift(e),rD.notifications.length>nD&&(rD.notifications.length=nD),uD(e)}),e.on(`history`,cD),e.on(`castTargets`,e=>{rD.castTargets=e}),e.onReady(()=>{pD(),fD()}),c().onTabVisible(()=>pD()),G(()=>rD.notifications.filter(e=>e.seenAt==null).length,lD)}),aD)}function cD(e){rD.notifications=e,oD=!0,lD()}function lD(){if(!oD)return;let e=rD.notifications.filter(e=>e.seenAt==null).length;dD(e),tD(e>0)}function uD(e){let{isElectronApp:t,electron:n}=or();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,silent:e.silent})}async function dD(e){let{isElectronApp:t,electron:n}=or();t&&n&&n.send(`set-badge-count`,e)}async function fD(){let e=xL().user?.role;if(e===`admin`||e===`master`)try{rD.castTargets=await MT()}catch{}}async function pD(){if(aD?.ready.value)try{cD(await aD.request(`get-notifications`))}catch{}}function mD(){function e(){sD()}function t(){}function n(e){let t=rD.notifications.findIndex(t=>t.id===e.id);t!==-1&&rD.notifications.splice(t,1),e.tag?aD?.emit(`remove-notification`,e.tag):aD?.emit(`remove-notification-id`,e.id)}function r(){rD.notifications.splice(0,rD.notifications.length),aD?.emit(`clear-notifications`)}function i(){let e=Date.now();for(let t of rD.notifications)t.seenAt??=e;aD?.emit(`mark-all-seen`)}function a(e){let t=rD.notifications.find(t=>t.id===e.id);t&&t.seenAt==null&&(t.seenAt=Date.now()),aD?.emit(`mark-seen`,e.id)}function o(e){rD.notifications.find(t=>t.id===e.id)||rD.notifications.unshift(e)}return{isConnected:V(()=>aD?.connected.value??!1),notifications:V(()=>rD.notifications),notificationCount:V(()=>rD.notifications.length),unreadCount:V(()=>rD.notifications.filter(e=>e.seenAt==null).length),castTargets:V(()=>rD.castTargets),connect:e,disconnect:t,fetchNotifications:pD,removeNotification:n,clearNotifications:r,markAllSeen:i,markSeen:a,addLocalNotification:o}}function hD(){iD?.stop(),iD=null,aD=null,oD=!1,rD.notifications=[],rD.castTargets=[],dD(0),tD(!1)}var gD=5e3,_D=Bt({streamStatus:{},streamConnections:{},streamCodecs:{}}),vD=null,yD=null,bD=0,xD=null;function SD(){yD?.emit(`get-stream-status`,{deltas:!0})}function CD(e){for(let[t,n]of Object.entries(e))n?(_D.streamStatus[t]=n.status,_D.streamConnections[t]=n.connections,n.codecs&&(_D.streamCodecs[t]=n.codecs)):(delete _D.streamStatus[t],delete _D.streamConnections[t],delete _D.streamCodecs[t])}function wD(){yD?.emit(`stream-status:unsubscribe`),vD?.stop(),vD=null,yD=null,_D.streamStatus={},_D.streamConnections={},_D.streamCodecs={}}function TD(){return yD||(vD=Yt(!0),vD.run(()=>{let e=Gs(`/camera.ui`);yD=e,e.on(`stream-status`,e=>{_D.streamStatus=e}),e.on(`stream-connections`,e=>{_D.streamConnections=e}),e.on(`stream-codecs`,e=>{_D.streamCodecs=e}),e.on(`stream-status-delta`,CD),e.onReady(()=>{SD()})}),yD)}function ED(e){let t=Object.values(e);if(t.length===0)return`idle`;let n=t.filter(e=>e===`connected`).length,r=t.filter(e=>e===`error`).length,i=t.filter(e=>e===`connecting`).length;return n===t.length?`connected`:r===t.length?`error`:i>0&&n===0&&r===0?`connecting`:n>0&&(r>0||t.some(e=>e===`idle`))?`partial`:n>0?`connected`:i>0?`connecting`:`idle`}function DD(){xD&&=(clearTimeout(xD),null),bD++;function e(){TD()}function t(){}function n(e){let t=_D.streamStatus[e];return t?ED(t):`idle`}function r(e){return _D.streamStatus[e]}function i(e,t){return _D.streamStatus[e]?.[t]??`idle`}function a(e,t){return _D.streamConnections[e]?.[t]??0}function o(e,t){return _D.streamCodecs[e]?.[t]}function s(e,t,n){let r;G(()=>{let n=R(e),r=R(t),i=n&&r?_D.streamCodecs[n]?.[r]:void 0;if(n&&r&&i)return[n,r,JSON.stringify([i.video.map(e=>e.codec),i.audio.map(e=>e.codec)])]},e=>{e&&(r?.[0]===e[0]&&r[1]===e[1]&&r[2]!==e[2]&&n(),r=e)},{immediate:!0})}return mn(()=>{bD--,!(bD>0)&&(bD=0,xD=setTimeout(()=>{xD=null,bD<=0&&wD()},gD))}),{streamStatus:V(()=>_D.streamStatus),getCameraStatus:n,getCameraSources:r,getSourceStatus:i,getSourceConnections:a,getSourceCodecs:o,onSourceCodecsChange:s,connect:e,disconnect:t,refresh:SD}}function OD(){let{locale:e}=St(),t=oi();return V(()=>({locale:e.value,dayNames:t.config.locale?.dayNames,dayNamesShort:t.config.locale?.dayNamesShort,monthNames:t.config.locale?.monthNames,monthNamesShort:t.config.locale?.monthNamesShort}))}function kD(){let e=Jt(),t=Vn(),n=V(()=>!t.query.similar||!Af(void 0,`admin`)?[]:[window.history.state?.similar??[]].flat().filter(e=>e.query));function r(t){e.push({path:`/recordings`,query:{similar:Date.now().toString(36)},state:{similar:JSON.parse(JSON.stringify(t))}})}function i(){let n={...t.query};delete n.similar,e.replace({query:n})}function a(t,n,r){e.push({path:`/cameras/${t}`,query:{startTs:String(n)},state:{similar:JSON.parse(JSON.stringify(r))}})}function o(){if(!Af(void 0,`admin`))return;let e=window.history.state;return e?.similar?.query?e.similar:void 0}function s(){window.history.replaceState({...window.history.state,similar:void 0},``)}return{requests:n,openSimilarSearch:r,closeSimilarSearch:i,openOnCamera:a,cameraSearch:o,forgetCameraSearch:s}}var AD=.1;async function jD(e,t,n,r=192){let i;try{i=await createImageBitmap(e);let{x:a,y:o,width:s,height:c}=n?.box??t,l=Math.max(0,a-s*AD)*i.width,u=Math.max(0,o-c*AD)*i.height,d=Math.min(1,a+s*1.1)*i.width,f=Math.min(1,o+c*1.1)*i.height,p=d-l,m=f-u;if(p<1||m<1)return;let h=Math.min(1,r/Math.max(p,m)),g=document.createElement(`canvas`);g.width=Math.max(1,Math.round(p*h)),g.height=Math.max(1,Math.round(m*h));let _=g.getContext(`2d`);if(!_)return;if(_.drawImage(i,l,u,p,m,0,0,g.width,g.height),!n)return g.toDataURL(`image/jpeg`,.85);let v=g.width/p,y=g.height/m,b=jx(n,n.box.width*i.width*v,n.box.height*i.height*y);return b&&(_.globalCompositeOperation=`destination-in`,_.drawImage(b,(n.box.x*i.width-l)*v,(n.box.y*i.height-u)*y)),g.toDataURL(`image/png`)}catch{return}finally{i?.close()}}var MD=250,ND=1e4;function PD(e){let t=e.find??nn(jy,void 0),n=Go(),{t:r}=St(),i=P(!1),a=Rt(),o=Rt(),s={from:`live`,atMs:0},c=0,l,u;function d(t,n){let r=e.box()?.getBoundingClientRect();r?.width&&r.height&&f({x:(t-r.left)/r.width,y:(n-r.top)/r.height})}function f(n){i.value||(i.value=!0,o.value=n,s=e.position(),l=t?.track({release:h}),e.pause(),p())}async function p(){let t=++c,o=e.position(),l=await _().catch(()=>null);i.value&&t===c&&(l?(s=o,a.value=l):a.value||(n.add({severity:`error`,detail:r(`components.similar.failed`),life:4e3}),h(!0)))}function m(){if(!i.value)return;clearTimeout(u);let t=++c;u=setTimeout(async()=>{await wn(e.settled).toBe(!0,{timeout:ND}),t===c&&i.value&&await p()},MD)}function h(t){i.value&&(c++,clearTimeout(u),i.value=!1,a.value=void 0,o.value=void 0,l?.(),l=void 0,t&&e.resume())}function g(){return s}async function _(){let t=await e.capture();return t?IE(t,e.privacyZones()):null}async function v(n){let r=e.camera();if(!r||!t)return;let i=a.value?await jD(a.value,n.box,n.mask):void 0;t.add(r,{query:n.query,objectLabel:n.label,crop:i})}return Ct(()=>{c++,clearTimeout(u),l?.()}),{frozen:i,still:a,point:o,freezeAt:d,follow:m,release:h,stillPosition:g,pick:v}}var FD=5,ID=300,LD=50;function RD(e){let{container:t,content:n,aspectRatio:r,enabled:i,canDoubleTap:a=()=>!0,onDoubleTap:o}=e,s=e.zoom??P(1),c=e.pan??P({x:0,y:0}),l=P(!1),u=P(!1),d=P(!1),{width:f,height:p}=yt(t),{width:m,height:h}=yt(n),{height:g}=Ad(),_=0,v=1,y=!1,b={x:0,y:0},x={x:0,y:0},S=!1,C=0,w=1,T={x:0,y:0},E=0,D={x:0,y:0},O=V(()=>{let[e,t]=R(r).split(`/`);return{w:parseFloat(e)||16,h:parseFloat(t)||9}}),k=V(()=>{let e=f.value;return e?Math.min(e*(O.value.h/O.value.w),g.value*.5):0}),A=V(()=>g.value*.6),j=V(()=>k.value?Math.max(1,Math.min(FD,A.value/k.value)):FD),ee=V(()=>Math.min(f.value,k.value*(O.value.w/O.value.h))),te=V(()=>u.value||d.value),ne=V(()=>{if(R(i)&&k.value)return{height:`${Math.min(k.value*s.value,A.value)}px`}}),re=V(()=>{if(!R(i)||!k.value)return;let e={width:`${ee.value}px`,height:`${k.value}px`};return s.value<=1?e:{...e,transform:`scale(${s.value}) translate(${c.value.x/s.value}px, ${c.value.y/s.value}px)`,transformOrigin:`center center`,willChange:`transform`}}),ie=V(()=>{let e=s.value,t=f.value,n=p.value,r=m.value,i=h.value;if(e<=1||!t||!n||!r||!i)return null;let a=r*e,o=i*e,l=a>t,u=o>n;return{width:`${l?t/a*100:100}%`,height:`${u?n/o*100:100}%`,left:`${l?(1-t/a)/2*100-c.value.x/a*100:0}%`,top:`${u?(1-n/o)/2*100-c.value.y/o*100:0}%`}});function ae(e){return Math.min(k.value*e,A.value)}function oe(e,t){let n=f.value;if(!n||!k.value||t<=1)return{x:0,y:0};let r=Math.max(0,(m.value*t-n)/2),i=Math.max(0,(h.value*t-ae(t))/2);return{x:Math.max(-r,Math.min(r,e.x)),y:Math.max(-i,Math.min(i,e.y))}}function M(){s.value=1,c.value={x:0,y:0},l.value=!1}function se(e){return Math.hypot(e[0].clientX-e[1].clientX,e[0].clientY-e[1].clientY)}function ce(e){return{x:(e[0].clientX+e[1].clientX)/2,y:(e[0].clientY+e[1].clientY)/2}}function le(e){R(i)&&(y=!1,e.touches.length===2?(u.value=!1,S=!0,C=se(e.touches),w=s.value,T={...c.value}):e.touches.length===1&&s.value>1&&(u.value=!0,b={x:e.touches[0].clientX,y:e.touches[0].clientY},x={...c.value}))}function ue(e){if(R(i)){if(S&&e.touches.length===2){e.preventDefault();let n=Math.max(1,Math.min(j.value,w*(se(e.touches)/C)));n>s.value&&(l.value=!0);let r=t.value?.getBoundingClientRect();if(r){let t=ce(e.touches),i=t.x-(r.left+r.width/2),a=t.y-(r.top+ae(s.value)/2),o=n/w;s.value=n,c.value=oe({x:T.x-i*(o-1),y:T.y-a*(o-1)},n)}else s.value=n}else if(u.value&&e.touches.length===1){let t=e.touches[0].clientX-b.x,n=e.touches[0].clientY-b.y;(Math.abs(t)>10||Math.abs(n)>10)&&(y=!0),c.value=oe({x:x.x+t,y:x.y+n},s.value)}}}function de(e){if(e.touches.length===1&&S)S=!1,l.value=!1,s.value>1&&(u.value=!0,y=!1,b={x:e.touches[0].clientX,y:e.touches[0].clientY},x={...c.value});else{if(e.touches.length===0&&e.changedTouches.length===1&&!y&&!S){let t=e.changedTouches[0],n=Date.now(),r=Math.hypot(t.clientX-D.x,t.clientY-D.y);n-E<ID&&r<LD?(o?o(t.clientX,t.clientY):R(i)&&a()&&N(t.clientX),E=0,D={x:0,y:0}):(E=n,D={x:t.clientX,y:t.clientY})}u.value=!1,y=!1,S=!1,l.value=!1}}function fe(e){R(i)&&a()&&(e.preventDefault(),e.stopPropagation(),N(e.clientX))}function N(e){if(s.value>1.01){M();return}let n=t.value?.getBoundingClientRect();if(!n)return;let r=j.value,i=Math.max(0,(n.width*r-n.width)/2),a=(n.width/2-(e-n.left))*(r-1);l.value=!0,s.value=r,c.value={x:Math.max(-i,Math.min(i,a)),y:0},setTimeout(()=>l.value=!1,200)}function pe(e){!R(i)||s.value<=1||(he(),u.value=!0,b={x:e.clientX,y:e.clientY},x={...c.value},document.addEventListener(`mousemove`,me),document.addEventListener(`mouseup`,he))}function me(e){u.value&&(c.value=oe({x:x.x+e.clientX-b.x,y:x.y+e.clientY-b.y},s.value))}function he(){u.value=!1,document.removeEventListener(`mousemove`,me),document.removeEventListener(`mouseup`,he)}function ge(e){if(!R(i))return;e.preventDefault();let t=Math.max(1,Math.min(j.value,s.value-e.deltaY*.002));if(t<1.02&&(t=1),t===s.value)return;let n=s.value;if(t<=1)M();else if(t<n&&n>1){let e=(t-1)/(n-1);s.value=t,c.value=oe({x:c.value.x*e,y:c.value.y*e},t)}else s.value=t}function _e(e){R(i)&&(d.value=!0,_=e.clientY,v=s.value,document.addEventListener(`mousemove`,be),document.addEventListener(`mouseup`,Se))}function ve(e){R(i)&&(d.value=!0,_=e.touches[0].clientY,v=s.value,document.addEventListener(`touchmove`,xe,{passive:!1}),document.addEventListener(`touchend`,Se))}function ye(e){k.value&&(s.value=Math.max(1,Math.min(j.value,v+(e-_)/k.value)),c.value=oe(c.value,s.value))}function be(e){d.value&&ye(e.clientY)}function xe(e){d.value&&(e.preventDefault(),ye(e.touches[0].clientY))}function Se(){d.value=!1,document.removeEventListener(`mousemove`,be),document.removeEventListener(`mouseup`,Se),document.removeEventListener(`touchmove`,xe),document.removeEventListener(`touchend`,Se)}return G(()=>R(i),()=>{he(),Se(),S=!1,M()}),$t(window,`blur`,()=>{he(),Se()}),mn(()=>{he(),Se()}),{zoom:s,pan:c,zoomingIn:l,interacting:te,maxZoom:j,containerStyle:ne,contentStyle:re,minimapStyle:ie,reset:M,onTouchStart:le,onTouchMove:ue,onTouchEnd:de,onDoubleClick:fe,onMouseDown:pe,onWheel:ge,onResizeStart:_e,onResizeTouchStart:ve}}var zD=[`data-camera-morph`],BD={key:`disabled`,class:`absolute inset-0 bg-black/80 flex items-center justify-center z-8 pointer-events-none`},VD={class:`flex flex-col items-center justify-center text-center gap-2`},HD={key:0,class:`text-white/50 text-sm max-w-xs`},UD={key:1,class:`text-white/30 text-xs max-w-xs`},WD={key:`sleep`,class:`absolute inset-0 bg-black/80 flex items-center justify-center z-7 pointer-events-none`},GD={class:`flex flex-col items-center justify-center text-center`},KD={key:0,class:`text-white/80 text-sm max-w-xs mt-3`},qD={key:`loading`,class:`absolute inset-0 flex flex-col items-center justify-center z-6 pointer-events-none`},JD={key:0,class:`mt-3 text-white text-sm text-shadow`},YD={key:`info`,class:`absolute w-full flex justify-center z-6 mt-4 pointer-events-none`},XD={class:`camera-card-info-box`},ZD=[`id`],QD={key:`ptz`,class:`flex items-center gap-1 rounded-full bg-black/40 p-1`},$D={key:0,class:`ai-description-overlay`},eO={class:`min-w-0`},tO={class:`text-sm font-semibold text-white`},nO={class:`text-xs text-white/85 mt-1`},rO=[`data-zoomable-content`],iO={class:`absolute inset-0 z-3 pointer-events-none`},aO={key:6,class:`find-unavailable`},oO={class:`find-unavailable-pill`},sO={class:`truncate`},cO={key:0,class:`absolute inset-0 z-3 pointer-events-none overflow-hidden`},lO={class:`w-full h-full blur-xs`},uO={class:`absolute inset-0 flex items-center justify-center bg-black/60`},dO={class:`flex flex-col items-center justify-center text-center`},fO={key:4,class:`text-white/80 text-sm max-w-xs mt-3`},pO={key:5,class:`text-white/50 text-xs max-w-xs mt-1 px-4 break-words line-clamp-3`},mO=[`data-player-id`],hO={key:1,class:`text-sm font-semibold p-2 bg-black/60 rounded-xl text-white truncate max-w-[60%]`},gO={class:`relative flex items-center gap-1 px-3 pb-3 pt-8`},_O={class:`flex items-center gap-0.5 pointer-events-auto`},vO={class:`flex items-center gap-0.5 pointer-events-auto`},yO={class:`flex flex-col min-w-[60px]`},bO=[`onClick`],xO={class:`flex flex-col`},SO=[`disabled`],CO=[`disabled`],wO=[`disabled`],TO=[`disabled`],EO=[`disabled`],DO=[`disabled`],OO={class:`flex items-center gap-2 min-w-0`},kO={class:`text-base font-semibold truncate`},AO=2e3,jO=5,MO=200,NO=350,PO=200,FO=1e4,IO=Kd(Gn({__name:`CuiCameraCard`,props:Pt(jn({cameraInfo:{},backButton:{type:Boolean},doubleClickZoom:{type:Boolean},expandableCard:{type:Boolean},expanded:{type:Boolean},flatCard:{type:Boolean},cardFit:{},resizable:{type:Boolean},cardProps:{},routerLink:{},cardClickAction:{},viewTransition:{type:Boolean},cardBackgroundColor:{},timelineContainerId:{},control:{type:Boolean},controlFastForwardButton:{type:Boolean},controlFsButton:{type:Boolean},controlMicrophoneButton:{type:Boolean},controlPipButton:{type:Boolean},controlPlayPauseButton:{type:Boolean},controlRewindButton:{type:Boolean},controlSpeakerButton:{type:Boolean},fullscreenShortcuts:{type:Boolean},fullscreenTimeline:{type:Boolean},embeddedTimeline:{type:Boolean},subcontrol:{type:Boolean},subcontrolPtzButton:{type:Boolean},cameraNameOverlay:{type:Boolean},liveIndicatorOverlay:{type:Boolean},modeOverlay:{type:Boolean},detectionIndicatorOverlay:{type:Boolean},detectionIconsOverlay:{type:Boolean},boundingBoxOverlay:{type:Boolean},privacyOverlay:{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:{},currentEvent:{},onOpenTrace:{type:Function},pipSourceRole:{},pipCamera:{},pipToggleButton:{type:Boolean},isolatedStream:{type:Boolean},nvrController:{}},zE),{activityMode:{},activityModeModifiers:{},sourceRole:{},sourceRoleModifiers:{},streamingMode:{},streamingModeModifiers:{}}),emits:Pt([`streamFinishedLoading`,`expand`,`togglePip`,`muteChange`,`fullscreen`],[`update:activityMode`,`update:sourceRole`,`update:streamingMode`]),setup(e,{expose:t,emit:n}){Hn(e=>({c882401e:H(br)}));let r=new Uh,i=e,s=n,c=_n(e,`activityMode`),l=_n(e,`sourceRole`),u=_n(e,`streamingMode`),f=ar(),p=Jt(),h=jf(),g=HE(),{mounted:v,toggleOverlay:y}=Nm(),b=Mm(),x=Go(),S=mD(),{connect:C,onSourceCodecsChange:T}=DD(),{mdBreakpoint:E}=Md(),{width:D,height:O}=Ad(),{isPipSupported:k,isAndroid:A}=Nd(),{t:j}=St(),ee=OD(),{pressed:te}=on(),{cameraInfo:ne,backButton:ae,doubleClickZoom:oe,expandableCard:M,flatCard:se,cardFit:ce,resizable:le,cardProps:ue,routerLink:de,cardClickAction:fe,viewTransition:N,cardBackgroundColor:pe,timelineContainerId:ge,cameraNameOverlay:_e,liveIndicatorOverlay:ve,detectionIndicatorOverlay:ye,detectionIconsOverlay:be,boundingBoxOverlay:xe,privacyOverlay:Se,control:Ce,controlFastForwardButton:we,controlFsButton:Te,controlMicrophoneButton:Ee,controlPipButton:De,controlPlayPauseButton:Oe,controlRewindButton:ke,controlSpeakerButton:Ae,fullscreenShortcuts:je,fullscreenTimeline:Me,embeddedTimeline:Ne,subcontrol:Pe,subcontrolPtzButton:Fe,toolbar:Ie,toolbarClass:Le,toolbarDetectionButton:Re,toolbarPipToggleButton:ze,toolbarPipToggleActive:Be,toolbarSettingsButton:Ve,toolbarShareButton:He,toolbarShortcutsButton:We,toolbarSnapshotButton:Ge,toolbarStyle:Je,toolbarTimelineButton:Ye,toolbarZoneButton:Xe,toolbarDescriptionButton:Ze,eventDescription:Qe,currentEvent:$e,showShortcuts:et}=jt(i);r.toggleQueryActivator(`getCameraQuery`,!1);let{data:tt,isBusy:nt}=r.getCameraQuery(typeof ne.value==`string`?ne.value:``),rt=[`timeline`],it=NL(),at=[.25,.5,1,2,4,8],ot=P(!1),st=Tn(`streamMenuRef`),ct=Tn(`castMenuRef`),lt=Tn(`ptzPresetMenuRef`),ut=Tn(`fullscreenMenuRef`),dt=Tn(`detectionCanvasRef`),ft=Tn(`embeddedTimelineRef`),pt=Tn(`playerContainerRef`),mt=Tn(`timelineDockRef`),ht=P(!1),gt=Tn(`arBoxRef`),_t=Tn(`videoBoxRef`),vt=Tn(`speedPopoverRef`),bt=Tn(`morePopoverRef`),xt=nn(qe,void 0),Ct=nn(_,void 0),Tt=nn(ME,void 0),I=nn(jy,void 0),{openOnCamera:Et,openSimilarSearch:Dt}=kD(),Ot=Wn(()=>Ce.value?pt.value:null,{delayLeave:1e3}),kt=Wn(pt,{delayLeave:0}),At=yt(pt),Mt=yt(gt),Nt=Rt(),Pt=P(!1),Ft=P({x:0,y:0}),It={x:0,y:0},R=P(1),zt={pan:Ft,zoom:R},Bt=P(1),Vt=P(!1),Ht=P(!1),Ut=P(!1),Wt=P(!1),Kt=P(!1),qt=P(!1),Yt=P(!1),Zt=P(!1),Qt=P(!1),$t=P([]),en=new Map,tn=P(!0),rn=P(!0),sn=P(!1),cn=P(!1),dn=P(),mn=P(!1),gn=P(!1),vn=P(!1),yn=!1,bn=[],xn=!1,Sn=null,Cn=0,{frozen:Dn,still:On,point:kn,freezeAt:An,follow:jn,release:Mn,stillPosition:Nn,pick:Fn}=PD({camera:()=>tr.value,box:()=>_t.value,capture:()=>lr.value?rr.value?.captureSnapshot():Q.captureScreenshot(),position:()=>({from:lr.value?`playback`:`live`,atMs:or.value/1e3}),privacyZones:()=>vi.value,pause:So,resume:Co,settled:()=>!pr.value&&!cn.value}),In=FE({onPress:({clientX:e,clientY:t})=>{Oi.value&&(An(e,t),I?.openView())},onTouchTap:({clientX:e,clientY:t})=>!ji.value||Fa()?!1:(An(e,t),!0)}),{zoomingIn:Ln,interacting:zn,maxZoom:Bn,containerStyle:Vn,onTouchStart:Gn,onTouchMove:Kn,onTouchEnd:qn,onDoubleClick:Jn,onMouseDown:Yn,onWheel:Xn,onResizeStart:Zn,onResizeTouchStart:Qn}=RD({container:pt,content:gt,aspectRatio:()=>br.value,enabled:le,zoom:R,pan:Ft,canDoubleTap:()=>oe.value&&!qt.value&&!wi.value&&!Ci.value,onDoubleTap:(e,t)=>Ka({clientX:e,clientY:t,preventDefault:()=>{},stopPropagation:()=>{}})}),$n=V(()=>typeof ne.value==`string`?ne.value:ne.value.name),er=V(()=>N.value&&h.morphCamera===$n.value),tr=V(()=>typeof ne.value==`string`?tt.value:ne.value),nr=V(()=>tr.value?._id),rr=V(()=>{if(i.nvrController)return i.nvrController;if(!i.isolatedStream){if(xt){let e=tr.value,t=e?xt.value.get(e._id):void 0;if(t)return t}return Ct}}),ir=V(()=>rr.value?.mode.value??`idle`),or=V(()=>rr.value?.currentTimestamp.value??0),lr=V(()=>ir.value!==`idle`),ur=V(()=>lr.value&&(rr.value?.licenseRequired.value??!1)),dr=V(()=>lr.value&&!ur.value&&(rr.value?.noData.value??!1)),fr=V(()=>lr.value&&!ur.value&&(rr.value?.playbackError.value??!1)),pr=V(()=>lr.value&&(rr.value?.loading.value??!1)),mr=V(()=>lr.value?rr.value?.unsupported.value??!1:Nr.value),hr=V(()=>lr.value?rr.value?.playbackDegraded.value??null:Mr.value?{from:Mr.value,to:jr.value,reason:`codec`}:null),gr=V(()=>{let e=hr.value;if(!e)return``;let t=e=>e.startsWith(`high`)?j(`components.player.source_role_high`):e.startsWith(`mid`)?j(`components.player.source_role_mid`):j(`components.player.source_role_low`),n=t(e.to);return e.reason===`coverage`?j(`components.player.quality_degraded`,{from:t(e.from),quality:n}):j(`components.player.codec_degraded`,{quality:n})}),_r=V(()=>u.value??tr.value?.interfaceSettings.streamingMode??`auto`),vr=V(()=>l.value??tr.value?.interfaceSettings.streamingSource??`high-resolution`),br=V(()=>tr.value?.interfaceSettings.aspectRatio.replace(`:`,`/`)??`16/9`),{camera:xr,isLoading:Sr}=d($n),Cr=w(),Q=me({camera:$n,mode:_r,resolution:vr,activityMode:()=>c.value??tr.value?.interfaceSettings.activityMode??`always-on`,activityConfig:{standbyTimeout:5e3,activityTimeout:5e3},autoStart:()=>ir.value===`idle`&&(tr.value?!tr.value.disabled:c.value!==void 0),isolated:i.isolatedStream}),{status:wr,isPlaying:Tr,hasAudio:Er,hasBackchannel:Dr,activeMode:kr,activeResolution:jr,degradedFrom:Mr,unsupported:Nr,isReconnecting:Pr,inStandby:Fr,stalled:Ir,error:Rr}=Q,{start:zr}=En(()=>{Qt.value=!1,en.clear(),$t.value=[]},AO,{immediate:!1}),Br=V(()=>!lr.value&&(xe.value&&mn.value||ye.value||be.value)),Vr=V(()=>Br.value?xr.value:void 0),Hr=V(()=>!lr.value&&Q.activityMode.value===`activity`),Ur=V(()=>Br.value||Hr.value?xr.value:void 0),{sensor:Wr}=Ue(Ur,()=>tr.value?.assignments?.motion?.id),{sensor:Gr}=re(Ur,()=>tr.value?.assignments?.object?.id),{sensor:qr}=Ke(Vr,()=>tr.value?.assignments?.face?.id),{sensor:Jr}=a(Vr,()=>tr.value?.assignments?.licensePlate?.id),{sensors:Yr}=m(Vr),Xr=V(()=>i.expanded??Ht.value),Zr=V(()=>ce.value!==`aspect`&&!Xr.value&&!Q.isFullscreen.value&&R.value<=1),Qr=V(()=>{if(!Zr.value||ce.value!==`cover`)return;let e=At.width.value,t=At.height.value,{w:n,h:r}=aa.value;if(!e||!t)return;let i=Math.max(e/n,t/r);return{width:`${n*i}px`,height:`${r*i}px`,maxWidth:`none`,maxHeight:`none`,flexShrink:0}}),$r=V(()=>{if(!Zr.value||ce.value!==`contain`)return;let e=At.width.value,t=At.height.value,{w:n,h:r}=aa.value;if(!e||!t)return;let i=Math.min(e/n,t/r);return{width:`${n*i}px`,height:`${r*i}px`,maxWidth:`none`,maxHeight:`none`,flexShrink:0}}),ei=V(()=>Qr.value?Qr.value:$r.value?$r.value:Zr.value?{width:`100%`,height:`100%`}:{height:Q.isFullscreen.value||la.value?`auto`:`100%`,aspectRatio:br.value}),ni=V(()=>!Q.paused.value),ri=V(()=>Q.isPip.value),ii=V(()=>(xr.value?.hasPtz.value??!1)&&Af(void 0,`admin`)),{hasHome:ai,hasPresets:oi,presets:si,goToHome:li,goToPreset:ui}=vT(xr),di=V(()=>si.value.map(e=>({key:e,label:e,onClick:()=>ui(e)}))),fi=V(()=>xr.value?.hasMotionSensor.value??!1),pi=V(()=>xr.value?.hasObjectSensor.value??!1),mi=V(()=>xr.value?.camera.value?.zones?.object??[]),hi=V(()=>xr.value?.camera.value?.zones?.motion??[]),gi=V(()=>xr.value?.camera.value?.zones?.alert??[]),_i=V(()=>xr.value?.camera.value?.zones?.lines??[]),vi=V(()=>xr.value?.camera.value?.zones?.privacy??[]),yi=V(()=>mn.value?[]:[`__none__`]),bi=V(()=>!!Tt?.active.value),xi=V(()=>void 0),Si=V(()=>(Ot.value||tn.value)&&Ce.value&&!Wt.value),Ci=V(()=>tr.value?.disabled===!0),wi=V(()=>Fr.value&&!lr.value),Ti=V(()=>!lr.value&&!Ci.value&&!wi.value&&wr.value===`error`),Ei=V(()=>Af(void 0,`admin`)&&!!tr.value?.assignments?.object&&!Ci.value),Di=V(()=>!!I?.pickable.value&&Ei.value&&Ce.value),Oi=V(()=>Di.value&&!Dn.value&&!wi.value&&!bi.value),ki=V(()=>I?.segment.value===`find`),Ai=V(()=>!!I?.armed.value&&Ce.value&&!Ci.value&&!tr.value?.assignments?.object),ji=V(()=>Oi.value&&!!(I?.armed.value||ea.value&&ki.value)),Mi=V(()=>I?I.views.value.filter(e=>e!==`find`||Di.value):rt),Ni=V(()=>!lr.value&&!Q.paused.value),Pi=V(()=>tr.value?.detectionSettings?.snooze===!0),Fi=V(()=>Ci.value?!1:lr.value?pr.value:Nr.value?!1:Sr.value||nt.value||!Tr.value||Pr.value),Ii=V(()=>Ci.value?!1:lr.value?pr.value:wr.value!==`error`&&(Fi.value||Ir.value)),Li=V(()=>lr.value?rr.value?.hasAudio.value??!1:Er.value&&wr.value!==`error`),Ri=V(()=>!!navigator.mediaDevices&&Dr.value),zi=V(()=>!Ri.value||Fi.value||lr.value),Bi=V(()=>lr.value?pr.value||cn.value:Ci.value||Nr.value||wr.value===`error`?!1:!Tr.value||cn.value),Vi=V(()=>_e.value&&Si.value&&!E.value&&_a.value&&!bi.value),Hi=V(()=>Ce.value&&(Si.value||gn.value||vn.value)&&!wi.value&&!Ci.value&&At.width.value>=150&&!bi.value),Ui=V(()=>ir.value===`play`||ir.value===`idle`&&ni.value),Wi=V(()=>Kt.value&&_a.value&&ii.value),Gi=V(()=>Hi.value&&ii.value&&Pe.value&&Fe.value&&_a.value&&!qt.value&&!lr.value),Ki=V(()=>ye.value&&Qt.value),qi=V(()=>et.value||je.value&&Q.isFullscreen.value),Ji=V(()=>qt.value&&!Wi.value&&!wi.value&&!bi.value&&(!Q.isFullscreen.value||Me.value)),Yi=V(()=>{if(!Q.isFullscreen.value)return!1;let e=D.value*aa.value.h/aa.value.w;return O.value-e>=400}),Xi=V(()=>Ji.value&&Q.isFullscreen.value&&!Yi.value),Zi=V(()=>Ji.value&&!Q.isFullscreen.value),Qi=V(()=>Yi.value?Cr.value:Q.isFullscreen.value?void 0:mt.value),$i=V(()=>Yi.value?{top:`auto`,bottom:`var(--safe-area-inset-bottom, 0px)`,height:`${PO}px`}:Q.isFullscreen.value?{bottom:Hi.value?`48px`:`0px`,transition:`bottom 0.2s ease`}:{bottom:`0px`}),ea=V(()=>Ne.value&&Ji.value&&!!nr.value),ta=V(()=>nr.value?[nr.value]:[]),{icons:na,generic:ra}=Or(),ia=V(()=>!be.value||!Qt.value?[]:$t.value.slice(0,3).map(e=>({kind:e,icon:na[e]??ra}))),aa=V(()=>{let e=br.value.split(`/`);return{w:parseFloat(e[0])||16,h:parseFloat(e[1])||9}}),oa=V(()=>le.value?Bn.value:jO),sa=V(()=>Zr.value?{height:`100%`}:Q.isFullscreen.value||!le.value?{}:Vn.value??{}),ca=V(()=>({width:Mt.width.value||0,height:Mt.height.value||0})),la=V(()=>R.value>1),ua=V(()=>{if(Zr.value)return{width:`100%`,height:`100%`};if(!le.value)return{aspectRatio:br.value};let e=R.value,t=Ft.value;return e<=1?{aspectRatio:br.value}:{aspectRatio:br.value,transform:`scale(${e}) translate(${t.x/e}px, ${t.y/e}px)`,transformOrigin:`center center`,willChange:`transform`}}),da=V(()=>{let e=[];return Ze.value&&e.push({key:`ai-descriptions`,label:j(`components.player.ai_descriptions`),toggle:!0,toggleState:ot.value,onClick:()=>{ot.value=!ot.value}}),Re.value&&(fi.value||pi.value)&&e.push({key:`detections`,label:j(`components.player.detections`),toggle:!0,toggleState:mn.value,disabled:lr.value,onClick:()=>to()}),Xe.value&&e.push({key:`zones`,label:j(`components.player.zones`),toggle:!0,toggleState:Zt.value,onClick:()=>no()}),e.push({key:`heatmap`,label:j(`components.player.heatmap`),toggle:!0,toggleState:Yt.value,onClick:()=>{Yt.value=!Yt.value}}),i.onOpenTrace&&lr.value&&Af(void 0,`admin`)&&e.push({key:`trace`,label:j(`views.recordings.open_trace`),disabled:!$e.value,onClick:()=>i.onOpenTrace?.()}),e.push({key:`ask`,label:j(`components.player.ask_assistant`),onClick:()=>p.push({path:`/assistant`,query:{prompt:Aa()}})}),e}),fa=V(()=>da.value.some(e=>e.toggle&&e.toggleState)),pa=S.castTargets,ma=V(()=>pa.value.map(e=>({key:e.deviceId,label:e.name,onClick:()=>ha(e.deviceId,e.name)})));async function ha(e,t){let n=tr.value?._id;if(!n)return;let r=or.value,i=lr.value&&r>0?Math.round(r/1e3):void 0;try{await NT({deviceId:e,cameraId:n,startMs:i}),x.add({severity:`success`,detail:j(`components.player.cast_sent`,{name:t}),life:2500})}catch{x.add({severity:`error`,detail:j(`components.player.cast_failed`),life:3e3})}}let ga=V(()=>{let e={body:{class:`w-full h-full p-0 overflow-hidden justify-center`,style:{backgroundColor:pe.value}},root:{class:{}},content:{class:Zr.value?`flex flex-col justify-center h-full`:`flex flex-col justify-center`}};return se.value&&(e.root.class={...e.root.class,"!rounded-none !border-0":!0}),he(e,ue.value?.pt)}),$=V(()=>At.width.value<MO),_a=V(()=>At.width.value>=NO),va=V(()=>fe.value===`redirect`&&de.value!==void 0),ya=V(()=>fe.value===`expand`&&M.value),ba=V(()=>va.value||ya.value),xa=V(()=>fe.value!==`redirect`&&de.value!==void 0),Sa=V(()=>Cr.value??`body`),Ca=V(()=>({appendTo:Sa.value,pt:{content:{class:`p-0! rounded-xl! overflow-hidden!`}}})),wa=V(()=>{let e=_a.value||Q.isFullscreen.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:e,inMenu:!e},search:{inline:e,inMenu:!e}}}),Ta=V(()=>{let e=[];return qi.value&&e.push({key:`shortcuts`,label:j(`components.player.shortcuts`),toggle:!0,toggleState:Ut.value,onClick:()=>uo()}),Me.value&&e.push({key:`timeline`,label:j(`views.camera.timeline`),toggle:!0,toggleState:qt.value,disabled:Wi.value,onClick:()=>go()}),ze.value&&e.push({key:`pip-source`,label:j(`components.form.label.pip_source`),toggle:!0,toggleState:Be.value,onClick:()=>s(`togglePip`)}),e}),Ea=V(()=>Q.isFullscreen.value&&Ta.value.length>0),Da=V(()=>Ta.value.some(e=>e.toggle&&e.toggleState)),Oa=V(()=>{let e=wa.value;return e.rewind.inMenu&&ke.value||e.fastForward.inMenu&&we.value||e.speed.inMenu||e.speaker.inMenu&&Ae.value||e.expand.inMenu&&M.value&&!ya.value||e.microphone.inMenu&&Ee.value||e.pip.inMenu&&De.value||e.search.inMenu&&Di.value}),ka=V(()=>vr.value);function Aa(){if(!lr.value||!or.value)return j(`components.player.ask_assistant_prompt`,{camera:$n.value});let e=new Date(or.value/1e3).toLocaleString();return j(`components.player.ask_assistant_prompt_playback`,{camera:$n.value,time:e})}function ja(e){It={...Ft.value},Oi.value&&In.down(e)}function Ma(e){In.move(e)}function Na(e){In.up(e)}function Pa(e){Di.value&&e.pointerType===`touch`&&e.preventDefault()}function Fa(){return Math.hypot(Ft.value.x-It.x,Ft.value.y-It.y)>5}function Ia(e){In.takeClick()||Fa()||(ji.value?An(e.clientX,e.clientY):va.value?La():ya.value&&!wi.value&&Ga())}function La(){let e=de.value;p.push(Ct?.isActive.value?`${e}?startTs=${Math.floor(ie(Ct)/1e3)}`:e)}function Ra(){Q.toggleFullscreen()}function za(){let e=p.options.history.state.back;typeof e==`string`&&e.startsWith(`/camview`)?p.back():p.push(`/home`)}function Ba(){let e=R.value;if(e<=1)return null;let t=Ft.value,n=At.width.value,r=At.height.value;if(!n||!r)return null;let{width:i,height:a}=ca.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}%`}}function Va(e){if(!pt.value||e<=1)return{x:0,y:0};let t=pt.value.getBoundingClientRect(),{width:n,height:r}=ca.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 Ha(e,t){let n=Va(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 Ua(e,t){let n=Va(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 Wa(e){if(!pt.value||Vt.value)return;let t=oa.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=Bt.value,a=Math.abs(e.zoom-n)>.001;if(n<=1){Bt.value=1,(Ft.value.x!==0||Ft.value.y!==0||R.value!==1)&&(Vt.value=!0,Ft.value={x:0,y:0},R.value=1,requestAnimationFrame(()=>setTimeout(()=>Vt.value=!1,150)));return}if(n<i&&i>1){let e=(n-1)/(i-1);r.x=Ft.value.x*e,r.y=Ft.value.y*e}Bt.value=n;let o=Ha(r,n);a?(Vt.value=!0,R.value=n,Ft.value=o,requestAnimationFrame(()=>setTimeout(()=>Vt.value=!1,100))):Ft.value=o}function Ga(){if(!M.value)return;let e=!Xr.value;i.expanded===void 0&&(Ht.value=e),s(`expand`,e)}function Ka(e){if(le.value)Jn(e);else if(oe.value&&!(!kt.value||qt.value||wi.value||Ci.value)){if(e.preventDefault(),e.stopPropagation(),Vt.value=!0,R.value>1.01)R.value=1,Ft.value={x:0,y:0},Bt.value=1;else{if(!pt.value)return;let t=pt.value.getBoundingClientRect(),n=e.clientX-t.left,r=e.clientY-t.top,i=t.width/2,a=t.height/2,o=oa.value,s=(i-n)*(o-1),c=(a-r)*(o-1);R.value=o,Bt.value=o;let l=Va(o);Ft.value={x:Math.max(-l.x,Math.min(l.x,s)),y:Math.max(-l.y,Math.min(l.y,c))}}setTimeout(()=>Vt.value=!1,200)}}function qa(e){Q.reportActivity(!!e?.length)}function Ja(e){e?.length&&(Qt.value=!0,zr())}function Ya(e){if(!be.value||!e.length)return;let t=Date.now();for(let n of e)en.set(n,t);for(let[e,n]of en)t-n>AO&&en.delete(e);let n=[...en.keys()],r=$t.value;(n.length!==r.length||n.some((e,t)=>e!==r[t]))&&($t.value=n)}function Xa(){Ci.value||lr.value||(Fr.value?Q.resumeFromStandby():Q.resetIdleTimer())}async function Za(){return Xa(),!Fr.value&&(await wn(()=>Tr.value||Fr.value).toBe(!0,{timeout:FO}),!Fr.value)}async function Qa(){let e=$n.value.replace(/ /g,`_`).toLowerCase();if(lr.value){let t=await rr.value?.captureSnapshot();if(!t)return;let n=await IE(t,vi.value);if(!n)return;let r=rr.value?.currentTimestamp.value;await Yd({blob:n,filename:`${e}_${(r?new Date(r/1e3):new Date).toISOString()}.png`,mimeType:`image/png`});return}let t=Q.captureScreenshot();if(!t)return;let n=await IE(t,vi.value);n&&await Yd({blob:n,filename:`${e}_${new Date().toISOString()}.png`,mimeType:`image/png`})}function $a(){dt.value?.clear()}function eo(e,t){Tr.value&&!lr.value&&dt.value?.draw(e,t)}function to(e){mn.value=e??!mn.value}function no(e){Zt.value=e??!Zt.value}function ro(e){rn.value=e===void 0?!rn.value:e,s(`muteChange`,rn.value)}async function io(e,t=!1){let n=e??!sn.value,r=++Cn;if(!(n&&Fr.value&&!await Za())&&r===Cn&&Dr.value){if(sn.value=n,sn.value)try{Nt.value=await navigator.mediaDevices.getUserMedia({audio:!0});let e=Nt.value.getAudioTracks()[0];rn.value=!t,await Q.setMicrophone(e),sr()}catch(e){f.warn($n.value,e),sn.value=!1}else Nt.value?.getTracks().forEach(e=>e.stop()),Nt.value=void 0,await Q.setMicrophone(null),cr()}}async function ao(e){yn=!0;try{if(e){l.value=e,await Q.setResolution(e);return}let t=[];if(xr.value?.lowResolutionSource.value&&t.push(`low-resolution`),xr.value?.midResolutionSource.value&&t.push(`mid-resolution`),xr.value?.highResolutionSource.value&&t.push(`high-resolution`),t.length===0)return;let n=ka.value,r=t[(t.indexOf(n)+1)%t.length];l.value=r,await Q.setResolution(r)}finally{setTimeout(()=>yn=!1,2e3)}}async function oo(e){let t=kr.value,n=e||(t===`mse`?`webrtc`:`mse`);await Q.setMode(n),u.value=n}async function so(){Q.togglePip()}function co(){Mn(!1),ir.value===`idle`?Fr.value?(Xa(),Q.paused.value&&Q.play()):Q.paused.value?Q.play():Q.pause():ir.value===`play`?rr.value?.pause():ir.value===`pause`?rr.value?.resume():ir.value===`scrub`&&rr.value?.play(or.value)}function lo(){Ra()}function uo(e){Ut.value=e===void 0?!Ut.value:e,Ut.value||(Wt.value=!1)}function fo(){Ut.value=!0,Wt.value=!0}function po(){Wt.value&&=(Ut.value=!0,!1)}function mo(){Kt.value=!Kt.value}function ho(e,t){let n=e,r=n.parentElement;r&&(n.style[t]=`${t===`left`?n.offsetLeft:r.clientWidth-n.offsetLeft-n.offsetWidth}px`,n.style.top=`${n.offsetTop}px`)}function go(){qt.value=!qt.value}function _o(){if(rr.value){if(ir.value===`idle`){let e=Date.now()*1e3;rr.value.play(e-3e7)}else rr.value.seek(rr.value.currentTimestamp.value-3e7)}}function vo(){rr.value&&ir.value!==`idle`&&rr.value.seek(rr.value.currentTimestamp.value+3e7)}function yo(){I?.toggleView()}function bo(e){I&&(I.segment.value=e)}function xo({event:e,camera:t,timestamp:n},r){e.cameraId===nr.value?(I?.releaseAll(!1),ft.value?.scrollToEvent(n,e.cameraId)):t&&Et(t.name,n,r.request)}function So(){ir.value===`play`?rr.value?.pause():Ni.value&&Q.pause()}function Co(){lr.value?rr.value?.resume():Q.paused.value&&Q.play()}function wo(e){cn.value=e}function To(e){bt.value?.hide(),an(()=>y(`speed`,()=>vt.value?.toggle(e)))}function Eo(){let e=xr.value?.id;if(!e)return;let t=(xr.value?.sources.value??[]).filter(e=>e.role!==`snapshot`).map(e=>({_id:e._id,name:e.name,role:e.role}));b.openComponentDialog(jE,{data:{title:j(`shares.create_share`),confirmText:j(`shares.create`),contentProps:{cameraId:e,cameraName:$n.value,sources:t}},dialogSize:{desktop:{width:`450px`}}})}function Do(e){return e.filter(e=>!e.box||e.box.x>0||e.box.y>0||e.box.width<1||e.box.height<1)}return G(pt,e=>{Q.fullscreenElement.value=e??void 0},{immediate:!0}),G(()=>Dn.value?{mode:ir.value,liveRunning:Ni.value,...Nn(),nowMs:or.value/1e3}:void 0,e=>{if(!e)return;let t=PE({mode:e.mode,liveRunning:e.liveRunning,stillFrom:e.from,movedMs:e.nowMs-e.atMs});t===`release`?Mn(!1):t===`follow`&&jn()}),G([rr,()=>Q.paused.value&&!lr.value],([e,t],[n])=>{n&&n!==e&&(n.livePausedAt.value=null),e&&(e.livePausedAt.value=t?e.livePausedAt.value??Date.now():null)},{immediate:!0}),G(FT,e=>{ht.value&&!e&&(ht.value=!1,Q.paused.value&&Q.play())}),un(()=>{}),G(rn,e=>Q.setMuted(e),{immediate:!0}),G([rr,()=>Q.containerElement.value],([e,t])=>{Sn?.(),Sn=e&&t?e.claimContainer(t):null},{immediate:!0,flush:`post`}),G([rr,rn],([e,t])=>{e&&(e.muted.value=t)},{immediate:!0}),G(lr,e=>{xn||(e?Q.stop():Q.start())},{flush:`sync`}),G([l,jr],([e,t])=>{yn||e&&t&&e!==t&&(l.value=t)}),G([()=>lr.value,or],([e])=>{if(!e)return;let t=Q.containerElement.value;if(!t)return;let n=t.querySelector(`canvas`);n&&n.width>0&&n.height>0&&(Q.nativeWidth.value!==n.width||Q.nativeHeight.value!==n.height)&&(Q.nativeWidth.value=n.width,Q.nativeHeight.value=n.height)},{flush:`post`}),G(Pr,async e=>{e&&await io(!1,!1)}),G(zi,async e=>{e&&sn.value&&await io(!1,!1)}),G(Tr,e=>{e||$a(),s(`streamFinishedLoading`,e)}),G(c,e=>{e&&Q.setActivityMode(e)}),i.expanded&&G([Fr,Tr],([e])=>{e&&Xa()},{once:!0}),G(()=>sn.value||Wi.value||Q.isFullscreen.value||ri.value||ht.value||gn.value||vn.value,e=>Q.setKeepAwake(e)),G(()=>Wr.value?.properties.detections,e=>{let t=e??[];qa(t),Ja(t),Ya(t.length?[`motion`]:[]),eo(`motion`,Do(t))},{deep:!0}),G(()=>Gr.value?.properties.detections,e=>{let t=e??[];qa(t),Ja(t),Ya(t.flatMap(e=>e.attribute?[e.label,e.attribute]:[e.label])),eo(`object`,Do(t))},{deep:!0}),G(()=>Gr.value?.properties.staticDetections,e=>{eo(`object-static`,e??[])},{deep:!0}),G(()=>qr.value?.properties.detections,e=>{eo(`face`,e??[])},{deep:!0}),G(()=>Jr.value?.properties.detections,e=>{eo(`license_plate`,e??[])},{deep:!0}),G(Yr,e=>{bn.forEach(e=>e()),bn=e.map(e=>G(()=>e.properties.detections,e=>{eo(`classifier`,e??[])},{deep:!0}))}),G(E,()=>{E.value&&(qt.value=!1)}),G(Ce,e=>{e||(Ot.value=!1)}),G(Q.isFullscreen,e=>{s(`fullscreen`,e),!e&&((!Ie.value||!Ye.value)&&(qt.value=!1),(!Ie.value||!We.value||!et.value)&&uo(!1))}),G(Ye,e=>{!e&&!Q.isFullscreen.value&&(qt.value=!1)}),G(ea,e=>{e&&(dn.value=lr.value&&or.value>0?Math.floor(or.value/1e3):void 0)}),G(ki,e=>{e&&Di.value&&Ne.value&&Q.isFullscreen.value&&!qt.value&&(qt.value=!0)}),G(le,()=>{Bt.value=1,Vt.value=!1}),G(()=>[qt.value,wi.value,Ci.value],([e,t,n])=>{zn.value||te.value||(e||t||n)&&(R.value!==1||Ft.value.x!==0||Ft.value.y!==0)&&(Vt.value=!0,R.value=1,Ft.value={x:0,y:0},Bt.value=1,setTimeout(()=>Vt.value=!1,200))}),G(R,(e,t)=>{Vt.value||(e<=1?Ft.value={x:0,y:0}:e<t&&(Ft.value=Ua(Ft.value,e)))}),G(wr,e=>{e===`connecting`||e===`reconnecting`?Pt.value=!0:e===`connected`&&(Pt.value=!1)}),G(()=>Q.error.value,e=>{e&&f.error($n.value,e)}),G(Ci,(e,t)=>{t&&!e?Fr.value||Q.stream.value?.restart():!t&&e&&Q.stop()}),T(nr,()=>Q.stream.value?.source.value?.name,()=>Q.stream.value?.invalidateProbe()),Lt(`Escape`,()=>po()),ln(()=>{typeof ne.value==`string`&&r.toggleQueryActivator(`getCameraQuery`,!0),C()}),hn(()=>{setTimeout(()=>tn.value=!1,1500)}),Gt(()=>{xn=!0,rr.value&&(rr.value.livePausedAt.value=null),Q.isFullscreen.value&&s(`fullscreen`,!1),HT(it),Sn?.(),Sn=null,Nt.value?.getTracks().forEach(e=>e.stop()),Nt.value=void 0,bn.forEach(e=>e()),bn=[]}),t({activeResolution:jr,videoBoxRef:_t,showControl:Hi,micActive:sn,streamHasIntercom:Ri,micButtonDisabled:zi,isFullscreen:Q.isFullscreen,videoContainer:pt,togglePlay:co,toggleSourceRole:ao,togglePictureInPicture:so,toggleStreamingMode:oo,toggleFs:lo,toggleMute:ro,toggleMicrophone:io,toggleShortcuts:uo,togglePtz:mo,toggleFastForward:vo,toggleRewind:_o,toggleBbox:to,toggleZones:no,toggleTimeline:go,timelineState:qt,timelineOverVideo:Xi,timelineDocked:Zi,timelineScroll:wo,captureScreenshot:Qa}),(e,t)=>{let n=jT,r=ci,i=Df,a=hf,c=ti,l=OT,u=Xy,d=Ol,f=Qw,p=Yw,m=Kw,h=np,_=Uw,b=oS,x=rS,S=eS,C=t_,w=Yx,T=Vx,D=Bx,O=Ox,A=lf,te=Tx,ne=Sx,re=Ar,ie=yx,oe=gx,se=hx,ce=fx,ue=lx,de=ox,fe=Sy,N=rx,pe=ex,me=Zb,he=Jb,_e=Gb,ye=Hb,be=zb,Ce=Ib,je=Nb,Me=Ab,Ne=Db,Pe=wb,Fe=Lr,Re=xb,Ue=vb,Ke=_b,qe=mb,Xe=db,Ze=cb,$e=ab,et=nb,tt=$y,nt=yr,rt=Yl,P=Kr,yt=rm,xt=Pn(`tooltip`);return Y(),B(`div`,{style:W({viewTransitionName:H(er)?`camera-morph`:void 0}),"data-camera-morph":H(er)||void 0},[z(P,{class:`cui-card`,pt:H(ga)},{content:X(()=>[H(ae)?(Y(),F(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:za},{icon:X(()=>[z(n,{class:`w-6 h-6`})]),_:1})):q(``,!0),J(`div`,{id:`video-container`,ref_key:`playerContainerRef`,ref:pt,class:Z([`bg-black flex items-center justify-center relative min-w-0`,{"detection-detected":H(Ki),"edit-mode":H(Wt),"native-pip":H(ht),"overflow-visible":H(Ln),"overflow-hidden":!H(Ln),"resizable-mode":H(le),"min-h-0":H(Zr)}]),style:W([H(sa),{"--cam-ar-w":H(aa).w,"--cam-ar-h":H(aa).h}]),onClick:Xa},[z(Un,{name:`fade`},{default:X(()=>[H(Ci)&&!H(lr)?(Y(),B(`div`,BD,[J(`div`,VD,[z(i,{class:`text-white/60 w-[50px] h-[50px]`}),H(_a)?(Y(),B(`p`,HD,L(e.$t(`views.camera.camera_disabled`)),1)):q(``,!0),H(_a)?(Y(),B(`p`,UD,L(e.$t(`views.camera.camera_disabled_hint`)),1)):q(``,!0)])])):q(``,!0),H(wi)&&!H(tr)?.disabled?(Y(),B(`div`,WD,[J(`div`,GD,[z(a,{class:`text-white w-[50px] h-[50px]`}),H(_a)?(Y(),B(`p`,KD,L(e.$t(`components.player.stream_paused`)),1)):q(``,!0)])])):q(``,!0),H(Ii)&&!H(wi)&&!H(Ci)?(Y(),B(`div`,qD,[z(c,{class:Z([`w-[30px] h-[30px] m-0`,H(lr)?`nvr-spinner`:``]),"stroke-width":`5`},null,8,[`class`]),H(Pr)&&!H(lr)&&H(_a)?(Y(),B(`span`,JD,L(e.$t(`components.player.reconnecting`))+`...`,1)):q(``,!0)])):q(``,!0),H(xi)&&!H(Fr)&&!H(Ci)?(Y(),B(`div`,YD,[J(`span`,XD,L(H(xi)),1)])):q(``,!0),H(Wi)&&!H(qt)&&!H(Fr)&&!H(bi)&&H(xr)?(Y(),B(`div`,{key:`ptz`,class:`absolute top-0 left-0 right-0 z-7 pointer-events-none transition-[bottom] duration-200`,style:W({bottom:H(Hi)?`48px`:`0px`})},[z(l,{"camera-device":H(xr)},null,8,[`camera-device`])],4)):q(``,!0)]),_:1}),(Y(),F(wt,{to:H(Qi),disabled:!H(Qi)},[z(Rn,{name:`fade`,persisted:``},{default:X(()=>[fn(J(`div`,{id:H(ge),class:`timeline-container absolute top-0 left-0 right-0 z-5`,style:W(H($i))},[H(ea)?(Y(),F(H(o),{key:0,ref_key:`embeddedTimelineRef`,ref:ft,"camera-ids":H(ta),"initial-timestamp":H(dn),type:`horizontal`,"flat-card":``,transparent:``,"dark-mode":H(Q).isFullscreen.value,segment:H(I)?.segment.value,views:H(Mi),"find-count":H(I)?.count.value,"only-events":H(I)?.keys.value,"overlay-class":H(Q).isFullscreen.value?`timeline-overlay !z-0`:void 0,"locale-settings":H(ee),"md-breakpoint":H(E),class:`absolute bottom-0 left-0 w-full h-[200px]`,"card-class":`h-[200px]`,onScrolling:wo,"onUpdate:segment":bo},{find:X(({layout:e})=>[z(u,{layout:e,onOpen:xo,onShowAll:H(Dt)},null,8,[`layout`,`onShowAll`])]),_:1},8,[`camera-ids`,`initial-timestamp`,`dark-mode`,`segment`,`views`,`find-count`,`only-events`,`overlay-class`,`locale-settings`,`md-breakpoint`])):q(``,!0)],12,ZD),[[Xt,H(Ji)]])]),_:1})],8,[`to`,`disabled`])),z(Un,{tag:`div`,name:`overlay-actions`,class:Z([`absolute top-[10px] h-8 z-9 flex items-center gap-1 pointer-events-none`,H(ae)?`left-16`:`left-4`]),onBeforeLeave:t[0]||=e=>ho(e,`left`)},{default:X(()=>[(Y(!0),B(U,null,K(H(ia),e=>(Y(),B(`div`,{key:e.kind,class:Z([`rounded-full flex items-center justify-center`,H(_a)?`w-7 h-7`:`w-6 h-6`]),style:{background:`color-mix(in srgb, var(--primary-500) 90%, transparent)`}},[(Y(),F(pn(e.icon),{class:Z([`text-white`,H(_a)?`w-4 h-4`:`w-3.5 h-3.5`])},null,8,[`class`]))],2))),128))]),_:1},8,[`class`]),z(Un,{tag:`div`,name:`overlay-actions`,class:`absolute top-[10px] right-4 z-9 flex items-center gap-2`,onBeforeLeave:t[2]||=e=>ho(e,`right`)},{default:X(()=>[H(Gi)?(Y(),B(`div`,QD,[H(ai)?fn((Y(),F(r,{key:0,class:`dark-mode cui-icon-lg hover:bg-black/40 active:bg-black/60`,rounded:``,text:``,severity:`contrast`,disabled:H(Fi),onClick:H(li)},{icon:X(()=>[z(d,{width:`100%`,height:`100%`})]),_:1},8,[`disabled`,`onClick`])),[[xt,{value:H(j)(`components.player.ptz_go_to_home`)},void 0,{bottom:!0}]]):q(``,!0),H(oi)?fn((Y(),F(r,{key:1,class:`dark-mode cui-icon-lg hover:bg-black/40 active:bg-black/60`,rounded:``,text:``,severity:`contrast`,disabled:H(Fi),onClick:t[1]||=e=>H(y)(`ptzPreset`,()=>H(lt)?.toggleMenu(e))},{icon:X(()=>[z(f,{width:`100%`,height:`100%`})]),_:1},8,[`disabled`])),[[xt,{value:H(j)(`components.player.ptz_presets`)},void 0,{bottom:!0}]]):q(``,!0),fn((Y(),F(r,{class:Z([`dark-mode cui-icon-lg hover:bg-black/40 active:bg-black/60`,{"bg-black/60":H(Kt)}]),rounded:``,text:``,severity:`contrast`,disabled:H(Fi)||H(qt),onClick:mo},{icon:X(()=>[z(p,{width:`100%`,height:`100%`})]),_:1},8,[`class`,`disabled`])),[[xt,{value:H(j)(`components.player.ptz`)},void 0,{bottom:!0}]])])):q(``,!0),H(gr)&&!H(Fr)?fn((Y(),F(m,{key:`codec-degraded`,class:`w-5 h-5 shrink-0 text-red-500/70 drop-shadow-md`},null,512)),[[xt,{value:H(gr)},void 0,{bottom:!0}]]):q(``,!0)]),_:1}),z(Rn,{"enter-active-class":`transition-opacity duration-300 ease-out`,"enter-from-class":`opacity-0`,"leave-active-class":`transition-opacity duration-200 ease-in`,"leave-to-class":`opacity-0`},{default:X(()=>[H(ot)&&H(Qe)?(Y(),B(`div`,$D,[z(h,{class:`w-4 h-4 text-white/90 shrink-0 mt-0.5`}),J(`div`,eO,[J(`p`,tO,L(H(Qe).title),1),J(`p`,nO,L(H(Qe).description),1)])])):q(``,!0)]),_:1}),z(oe,{ref_key:`arBoxRef`,ref:gt,state:zt,"data-native-pip-keep":``,disabled:H(le)||H(M)&&!H(Xr)||!H(kt)||H(qt)||H(wi)||H(bi)||H(Ci),"enable-control-button":!1,"dbl-click-enabled":!1,"min-zoom":1,"max-zoom":H(oa),selector:H(le)?`disabled`:`[data-zoomable-content='${H(it)}']`,"zoom-origin":`pointer`,class:Z([`ar-box flex items-center justify-center`,{"zoom-constraining":H(Vt),"touch-none":H(le)}]),style:W(H(ei)),onPanned:Wa,onZoom:Wa,onDblclick:Ka,onTouchstart:H(Gn),onTouchmove:H(Kn),onTouchend:H(qn),onMousedown:H(Yn),onWheel:H(Xn)},{default:X(()=>[J(`div`,{ref_key:`videoBoxRef`,ref:_t,"data-zoomable-content":H(it),class:`relative h-full min-w-0`,style:W(H(ua))},[J(`div`,{class:Z([`absolute inset-0 pointer-events-none`,H(Wi)||H(Xi)?`z-3`:`z-7`])},[!H(wi)&&!H(Ci)&&H(qi)?(Y(),F(_,{key:0,"camera-name":H($n),visible:H(Ut),editing:H(Wt),"interaction-locked":H(R)>1},null,8,[`camera-name`,`visible`,`editing`,`interaction-locked`])):q(``,!0),H(Ut)&&(!H(Wt)||H(Q).isFullscreen.value)&&H(qi)&&!H(bi)&&!H(Xi)&&!H(Wi)&&!H(wi)&&!H(Ci)?fn((Y(),F(r,{key:1,class:Z([`dark-mode pointer-events-auto absolute top-[10px] bg-black/20 hover:bg-black/40 active:bg-black/60`,H(ae)?`left-16`:`left-4`]),rounded:``,text:``,severity:`contrast`,onClick:t[3]||=e=>H(Wt)?po():fo()},{icon:X(()=>[H(Wt)?(Y(),F(b,{key:0,width:`100%`,height:`100%`})):(Y(),F(x,{key:1,width:`100%`,height:`100%`}))]),_:1},8,[`class`])),[[xt,{value:H(Wt)?H(j)(`components.player.finish_editing`):H(j)(`components.player.edit_shortcuts`)},void 0,{bottom:!0}]]):q(``,!0)],2),J(`div`,iO,[H(xe)&&!H(Fr)&&!H(lr)&&!H(Ci)&&!H(Dn)?(Y(),F(S,{key:0,ref_key:`detectionCanvasRef`,ref:dt,classes:H(yi)},null,8,[`classes`])):q(``,!0),H(Zt)&&!H(wi)&&!H(Ci)?(Y(),F(C,{key:1,"camera-zones":H(mi),"camera-lines":H(_i),"motion-zones":H(hi),"alert-zones":H(gi),"show-labels":``},null,8,[`camera-zones`,`camera-lines`,`motion-zones`,`alert-zones`])):q(``,!0),H(Se)&&H(vi).length&&!H(wi)?(Y(),F(C,{key:2,"camera-zones":[],"privacy-zones":H(vi)},null,8,[`privacy-zones`])):q(``,!0),H(Tt)?.active.value&&!H(Ci)?(Y(),F(w,{key:3,"model-value":H(Tt).regions.value,"onUpdate:modelValue":t[4]||=e=>{H(Tt)&&(H(Tt).regions.value=e)}},null,8,[`model-value`])):q(``,!0),H(Yt)&&H(tr)&&!H(Ci)?(Y(),F(T,{key:4,"camera-id":H(tr)._id},null,8,[`camera-id`])):q(``,!0),H(Dn)&&H(tr)?(Y(),F(D,{key:5,camera:H(tr),frame:H(On),point:H(kn),still:``,continuable:``,onPick:H(Fn),onContinue:t[5]||=e=>H(Mn)(!0)},null,8,[`camera`,`frame`,`point`,`onPick`])):q(``,!0),H(Ai)?(Y(),B(`div`,aO,[J(`span`,oO,[z(O,{class:`w-4 h-4 shrink-0`}),J(`span`,sO,L(e.$t(`components.similar.no_object_detection`)),1)])])):q(``,!0)]),H(dr)||H(ur)||H(mr)||H(fr)||H(Ti)?(Y(),B(`div`,cO,[J(`div`,lO,[H(tr)?(Y(),F(A,{key:0,camera:H(tr),"show-loading-screen":!1,"image-style":{objectFit:`fill`}},null,8,[`camera`])):q(``,!0)]),J(`div`,uO,[J(`div`,dO,[H(ur)?(Y(),F(te,{key:0,class:`text-white w-[50px] h-[50px]`})):H(mr)?(Y(),F(ne,{key:1,class:`text-white w-[50px] h-[50px]`})):H(fr)||H(Ti)?(Y(),F(re,{key:2,class:`text-white w-[50px] h-[50px]`})):(Y(),F(ie,{key:3,class:`text-white w-[50px] h-[50px]`})),H(_a)?(Y(),B(`p`,fO,L(H(ur)?e.$t(`components.player.license_required`):H(mr)?H(lr)?e.$t(`components.player.codec_unsupported_recording`):e.$t(`components.player.codec_unsupported`):H(fr)?e.$t(`components.player.playback_failed`):H(Ti)?e.$t(`components.player.stream_unavailable`):e.$t(`components.player.no_recording`)),1)):q(``,!0),H(_a)&&H(Ti)&&H(Rr)?(Y(),B(`p`,pO,L(H(Rr).message),1)):q(``,!0)])])])):q(``,!0),H(tr)?(Y(),F(A,{key:`snapshot`,ref:`snapshotRef`,camera:H(tr),"show-loading-screen":!1,class:Z([`absolute inset-0 cursor-[inherit] z-0`,{"cursor-pointer":H(ba)&&!H(ji),"cursor-crosshair":H(ji),"pointer-events-none":!H(ba)&&!H(Di)}]),"image-style":{objectFit:`fill`},onPointerdown:ja,onPointermove:Ma,onPointerup:Na,onPointercancel:Na,onContextmenu:Pa,onClick:Ia},null,8,[`camera`,`class`])):q(``,!0),J(`div`,{ref:e=>{e&&(H(Q).containerElement.value=e)},"data-player-id":H(it),class:Z([`w-full h-full cursor-[inherit] relative z-1`,{"cursor-pointer":H(ba)&&!H(ji),"cursor-crosshair":H(ji)}]),onPointerdown:ja,onPointermove:Ma,onPointerup:Na,onPointercancel:Na,onContextmenu:Pa,onClick:Ia},null,42,mO)],12,rO)]),_:1},8,[`disabled`,`max-zoom`,`selector`,`style`,`class`,`onTouchstart`,`onTouchmove`,`onTouchend`,`onMousedown`,`onWheel`]),!H(wi)&&(H(Vi)||H(ve))?(Y(),B(`div`,{key:0,class:Z([`absolute top-0 w-full p-4 flex items-center gap-2 pointer-events-none`,H(Ci)?`z-9`:`z-6`])},[H(ve)?(Y(),B(`div`,{key:0,class:Z([`w-[10px] h-[10px] rounded-full shadow-md shrink-0`,H(Ci)?`bg-gray-500`:H(lr)?`bg-sky-500`:H(Tr)?`bg-red-500`:`bg-gray-500`])},null,2)):q(``,!0),H(Vi)?(Y(),B(`span`,hO,L(H($n)),1)):q(``,!0)],2)):q(``,!0),z(Rn,{name:`fade-2`},{default:X(()=>[H(Hi)?(Y(),B(`div`,{key:0,class:Z([`absolute bottom-0 inset-x-0 z-6 dark-mode pointer-events-none`,{"control-bar-tiny":H($),"control-bar-docked":H(Xi)}])},[t[36]||=J(`div`,{class:`control-bar-gradient`},null,-1),J(`div`,gO,[J(`div`,_O,[H(ke)&&H(wa).rewind.inline?(Y(),F(r,{key:0,disabled:!H(rr),fluid:``,text:``,severity:`contrast`,class:`control-bar-btn`,onClick:_o},{icon:X(()=>[z(se,{class:`w-[18px] h-[18px]`})]),_:1},8,[`disabled`])):q(``,!0),H(Oe)?(Y(),F(r,{key:1,disabled:H(Fi),fluid:``,text:``,severity:`contrast`,class:`control-bar-btn`,onClick:co},{icon:X(()=>[H(Ui)?(Y(),F(ue,{key:1,class:`w-[18px] h-[18px]`})):(Y(),F(ce,{key:0,class:`w-[18px] h-[18px]`}))]),_:1},8,[`disabled`])):q(``,!0),H(we)&&H(wa).fastForward.inline?(Y(),F(r,{key:2,disabled:H(ir)===`idle`,fluid:``,text:``,severity:`contrast`,class:`control-bar-btn`,onClick:vo},{icon:X(()=>[z(de,{class:`w-[18px] h-[18px]`})]),_:1},8,[`disabled`])):q(``,!0),H(wa).speed.inline?(Y(),F(r,{key:3,disabled:H(ir)===`idle`,fluid:``,text:``,severity:`contrast`,class:`control-bar-btn`,style:{"font-size":`12px`,"font-weight":`600`},onClick:t[6]||=e=>H(y)(`speed`,()=>H(vt)?.toggle(e))},{icon:X(()=>[J(`span`,null,L(H(rr)?.speed.value??1)+`×`,1)]),_:1},8,[`disabled`])):q(``,!0)]),t[35]||=J(`div`,{class:`flex-1`},null,-1),J(`div`,vO,[H(Di)&&H(wa).search.inline?fn((Y(),F(r,{key:0,fluid:``,text:``,severity:`contrast`,class:Z([`control-bar-btn`,{"!text-primary":H(ki)}]),onClick:yo},{icon:X(()=>[z(fe,{class:`w-[18px] h-[18px]`})]),_:1},8,[`class`])),[[xt,{value:e.$t(`components.similar.search`)},void 0,{top:!0}]]):q(``,!0),H(Ae)&&H(wa).speaker.inline?(Y(),F(r,{key:1,disabled:!H(Li)||H(Fi),fluid:``,text:``,severity:`contrast`,class:`control-bar-btn`,onClick:t[7]||=e=>ro()},{icon:X(()=>[H(rn)?(Y(),F(pe,{key:1,class:`w-[18px] h-[18px]`})):(Y(),F(N,{key:0,class:`w-[18px] h-[18px]`}))]),_:1},8,[`disabled`])):q(``,!0),H(Ee)&&H(wa).microphone.inline?(Y(),F(r,{key:2,disabled:H(zi),fluid:``,text:``,severity:`contrast`,class:`control-bar-btn`,onClick:t[8]||=e=>io(void 0,!0)},{icon:X(()=>[H(sn)?(Y(),F(me,{key:0,class:`w-[18px] h-[18px]`})):(Y(),F(he,{key:1,class:`w-[18px] h-[18px]`}))]),_:1},8,[`disabled`])):q(``,!0),H(De)&&H(wa).pip.inline?(Y(),F(r,{key:3,disabled:!H(k)||H(Fi)||H(lr),fluid:``,text:``,severity:`contrast`,class:`control-bar-btn`,onClick:so},{icon:X(()=>[H(ri)?(Y(),F(ye,{key:1,class:`w-[18px] h-[18px]`})):(Y(),F(_e,{key:0,class:`w-[18px] h-[18px]`}))]),_:1},8,[`disabled`])):q(``,!0),H(M)&&H(wa).expand.inline&&!H(ya)?fn((Y(),F(r,{key:4,fluid:``,text:``,severity:`contrast`,class:`control-bar-btn`,onClick:Ga},{icon:X(()=>[H(Xr)?(Y(),F(be,{key:0,class:`w-[18px] h-[18px]`})):(Y(),F(Ce,{key:1,class:`w-[18px] h-[18px]`}))]),_:1})),[[xt,{value:H(Xr)?e.$t(`components.player.shrink`):e.$t(`components.player.expand`)},void 0,{top:!0}]]):q(``,!0),H(Ea)?(Y(),F(r,{key:5,fluid:``,text:``,severity:`contrast`,class:Z([`control-bar-btn`,{"!text-primary":H(Da)}]),onClick:t[9]||=e=>H(y)(`fullscreen`,()=>H(ut)?.toggleMenu(e))},{icon:X(()=>[z(je,{class:`w-[18px] h-[18px]`})]),_:1},8,[`class`])):q(``,!0),H(Oa)?(Y(),F(r,{key:6,fluid:``,text:``,severity:`contrast`,class:`control-bar-btn`,onClick:t[10]||=e=>H(y)(`more`,()=>H(bt)?.toggle(e))},{icon:X(()=>[z(je,{class:`w-[18px] h-[18px]`})]),_:1})):q(``,!0),H(Te)?(Y(),F(r,{key:7,disabled:H(Fi),fluid:``,text:``,severity:`contrast`,class:`control-bar-btn`,onClick:lo},{icon:X(()=>[H(Q).isFullscreen.value?(Y(),F(Ne,{key:1,class:`w-[18px] h-[18px]`})):(Y(),F(Me,{key:0,class:`w-[18px] h-[18px]`}))]),_:1},8,[`disabled`])):q(``,!0),H(xa)?fn((Y(),F(r,{key:8,fluid:``,text:``,severity:`contrast`,class:`control-bar-btn`,onClick:La},{icon:X(()=>[z(Pe,{class:`w-[18px] h-[18px]`})]),_:1})),[[xt,{value:e.$t(`components.player.open_camera`)},void 0,{top:!0}]]):q(``,!0)])]),H(v).speed?(Y(),F(Fe,{key:0,ref_key:`speedPopoverRef`,ref:vt,class:`more-menu-popover`,"append-to":H(Sa),onShow:t[11]||=e=>gn.value=!0,onHide:t[12]||=e=>gn.value=!1},{default:X(()=>[J(`div`,yO,[(Y(),B(U,null,K(at,e=>J(`button`,{key:e,class:Z([`more-menu-item justify-center`,{"more-menu-item-active":(H(rr)?.speed.value??1)===e}]),onClick:t=>{H(rr)?.setSpeed(e),H(vt)?.hide()}},L(e)+`× `,11,bO)),64))])]),_:1},8,[`append-to`])):q(``,!0),H(v).more?(Y(),F(Fe,{key:1,ref_key:`morePopoverRef`,ref:bt,class:`more-menu-popover`,"append-to":H(Sa),onShow:t[21]||=e=>vn.value=!0,onHide:t[22]||=e=>vn.value=!1},{default:X(()=>[J(`div`,xO,[H(Di)&&H(wa).search.inMenu?(Y(),B(`button`,{key:0,class:Z([`more-menu-item`,{"more-menu-item-active":H(ki)}]),onClick:t[13]||=e=>{yo(),H(bt)?.hide()}},[z(fe,{class:`w-[18px] h-[18px] shrink-0`}),J(`span`,null,L(e.$t(`components.similar.search`)),1)],2)):q(``,!0),H(ke)&&H(wa).rewind.inMenu?(Y(),B(`button`,{key:1,disabled:!H(rr),class:`more-menu-item`,onClick:t[14]||=e=>{_o(),H(bt)?.hide()}},[z(se,{class:`w-[18px] h-[18px] shrink-0`}),J(`span`,null,L(e.$t(`components.player.rewind`)),1)],8,SO)):q(``,!0),H(we)&&H(wa).fastForward.inMenu?(Y(),B(`button`,{key:2,disabled:H(ir)===`idle`,class:`more-menu-item`,onClick:t[15]||=e=>{vo(),H(bt)?.hide()}},[z(de,{class:`w-[18px] h-[18px] shrink-0`}),J(`span`,null,L(e.$t(`components.player.fast_forward`)),1)],8,CO)):q(``,!0),H(wa).speed.inMenu?(Y(),B(`button`,{key:3,disabled:H(ir)===`idle`,class:`more-menu-item`,onClick:t[16]||=e=>To(e)},[z(Re,{class:`w-[18px] h-[18px] shrink-0`}),J(`span`,null,L(e.$t(`components.player.speed`))+` (`+L(H(rr)?.speed.value??1)+`×)`,1)],8,wO)):q(``,!0),H(Ae)&&H(wa).speaker.inMenu?(Y(),B(`button`,{key:4,disabled:!H(Li)||H(Fi),class:`more-menu-item`,onClick:t[17]||=e=>{ro(),H(bt)?.hide()}},[H(rn)?(Y(),F(pe,{key:1,class:`w-[18px] h-[18px] shrink-0`})):(Y(),F(N,{key:0,class:`w-[18px] h-[18px] shrink-0`})),J(`span`,null,L(H(rn)?e.$t(`components.form.tooltip.unmute`):e.$t(`components.form.tooltip.mute`)),1)],8,TO)):q(``,!0),H(M)&&H(wa).expand.inMenu&&!H(ya)?(Y(),B(`button`,{key:5,class:`more-menu-item`,onClick:t[18]||=e=>{Ga(),H(bt)?.hide()}},[H(Xr)?(Y(),F(be,{key:0,class:`w-[18px] h-[18px] shrink-0`})):(Y(),F(Ce,{key:1,class:`w-[18px] h-[18px] shrink-0`})),J(`span`,null,L(H(Xr)?e.$t(`components.player.shrink`):e.$t(`components.player.expand`)),1)])):q(``,!0),H(Ee)&&H(wa).microphone.inMenu?(Y(),B(`button`,{key:6,disabled:H(zi),class:`more-menu-item`,onClick:t[19]||=e=>{io(void 0,!0),H(bt)?.hide()}},[H(sn)?(Y(),F(me,{key:0,class:`w-[18px] h-[18px] shrink-0`})):(Y(),F(he,{key:1,class:`w-[18px] h-[18px] shrink-0`})),J(`span`,null,L(e.$t(`components.form.tooltip.intercom`)),1)],8,EO)):q(``,!0),H(De)&&H(wa).pip.inMenu?(Y(),B(`button`,{key:7,disabled:!H(k)||H(Fi)||H(lr),class:`more-menu-item`,onClick:t[20]||=e=>{so(),H(bt)?.hide()}},[H(ri)?(Y(),F(ye,{key:1,class:`w-[18px] h-[18px] shrink-0`})):(Y(),F(_e,{key:0,class:`w-[18px] h-[18px] shrink-0`})),J(`span`,null,L(H(ri)?e.$t(`components.player.hide_pip`):e.$t(`components.player.show_pip`)),1)],8,DO)):q(``,!0)])]),_:1},8,[`append-to`])):q(``,!0)],2)):q(``,!0)]),_:1}),z(Rn,{name:`fade-2`},{default:X(()=>[H(la)?(Y(),B(`div`,{key:0,class:Z([`zoom-minimap`,{"zoom-minimap-raised":H(Hi),"zoom-minimap-centered":H(Wi)}])},[z(Ue,{class:`zoom-minimap-viewport`,"viewport-style":Ba})],2)):q(``,!0)]),_:1})],6),J(`div`,{ref_key:`timelineDockRef`,ref:mt,class:`timeline-dock`,style:W({height:H(Zi)?`${PO}px`:`0px`})},null,4),H(Ie)?(Y(),B(`div`,{key:1,class:Z([`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(Le),{"pointer-events-none opacity-50":H(bi)}]),style:W([H(Je)])},[H(le)?(Y(),B(`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:t[23]||=(...e)=>H(Zn)&&H(Zn)(...e),onTouchstartPassive:t[24]||=(...e)=>H(Qn)&&H(Qn)(...e)},[...t[37]||=[J(`div`,{class:`w-9 h-1 rounded-full bg-surface-400/50`},null,-1)]],32)):q(``,!0),J(`div`,OO,[H(Bi)?(Y(),F(c,{key:0,"stroke-width":`5`,class:Z([`w-[10px] h-[10px] shrink-0`,H(lr)?`nvr-spinner`:``])},null,8,[`class`])):(Y(),B(`div`,{key:1,class:Z([`w-[10px] h-[10px] rounded-full shrink-0`,H(Ci)&&!H(lr)?`bg-gray-500`:H(lr)?`bg-sky-500`:`bg-primary-500`])},null,2)),J(`span`,kO,L(H($n)),1),H(Ci)?fn((Y(),F(i,{key:2,class:`w-4 h-4 text-red-400 shrink-0`},null,512)),[[xt,{value:e.$t(`views.camera.camera_disabled`)},void 0,{top:!0}]]):H(Pi)?fn((Y(),F(a,{key:3,class:`w-4 h-4 text-amber-400 shrink-0`},null,512)),[[xt,{value:e.$t(`views.camera.camera_snoozed`)},void 0,{top:!0}]]):q(``,!0)]),t[38]||=J(`div`,{class:`ml-auto`},null,-1),H(Ci)?q(``,!0):(Y(),B(U,{key:1},[H(He)&&(`hasPermission`in e?e.hasPermission:H(Af))(void 0,`admin`)?fn((Y(),F(r,{key:0,fluid:``,text:``,severity:`contrast`,class:`cui-icon-lg not-hover:text-surface-400`,onClick:t[25]||=e=>Eo()},{icon:X(()=>[z(Ke,{width:`100%`,height:`100%`})]),_:1})),[[xt,{value:e.$t(`components.player.share_camera`)},void 0,{top:!0}]]):q(``,!0),H(ze)?fn((Y(),F(r,{key:1,fluid:``,text:``,severity:`contrast`,class:Z([`cui-icon-lg not-hover:text-surface-400 flipped-h`,{active:H(Be)}]),onClick:t[26]||=e=>s(`togglePip`)},{icon:X(()=>[z(qe,{width:`100%`,height:`100%`})]),_:1},8,[`class`])),[[xt,{value:e.$t(`components.player.toggle_pip`)},void 0,{top:!0}]]):q(``,!0),H(Ge)?fn((Y(),F(r,{key:2,fluid:``,text:``,severity:`contrast`,class:`cui-icon-lg not-hover:text-surface-400`,onClick:Qa},{icon:X(()=>[z(Xe,{width:`100%`,height:`100%`})]),_:1})),[[xt,{value:e.$t(`components.player.capture_snapshot`)},void 0,{top:!0}]]):q(``,!0),H(We)?fn((Y(),F(r,{key:3,fluid:``,text:``,severity:H(Wt)?`danger`:`contrast`,class:Z([`cui-icon-lg`,{"not-hover:text-surface-400":!H(Wt),active:H(Ut)&&!H(Wt)}]),onClick:t[27]||=e=>H(Wt)?po():uo()},{icon:X(()=>[H(Wt)?(Y(),F(b,{key:0,width:`100%`,height:`100%`})):H(Ut)?(Y(),F(Ze,{key:2,width:`100%`,height:`100%`})):(Y(),F(Ze,{key:1,width:`100%`,height:`100%`}))]),_:1},8,[`severity`,`class`])),[[xt,{value:H(Wt)?e.$t(`components.player.finish_editing`):e.$t(`components.player.shortcuts`)},void 0,{top:!0}]]):q(``,!0)],64)),H(Ye)?fn((Y(),F(r,{key:2,disabled:H(Wi),fluid:``,text:``,severity:`contrast`,class:Z([`cui-icon-lg not-hover:text-surface-400`,{active:H(qt)}]),onClick:go},{icon:X(()=>[H(qt)?(Y(),F(et,{key:1,width:`100%`,height:`100%`})):(Y(),F($e,{key:0,width:`100%`,height:`100%`}))]),_:1},8,[`disabled`,`class`])),[[xt,{value:H(qt)?e.$t(`components.player.hide_timeline`):e.$t(`components.player.show_timeline`)},void 0,{top:!0}]]):q(``,!0),H(pa).length&&(`hasPermission`in e?e.hasPermission:H(Af))(void 0,`admin`)?fn((Y(),F(r,{key:3,fluid:``,text:``,severity:`contrast`,class:`cui-icon-lg not-hover:text-surface-400`,onClick:t[28]||=e=>H(y)(`cast`,()=>H(ct)?.toggleMenu(e))},{icon:X(()=>[z(tt,{width:`100%`,height:`100%`})]),_:1})),[[xt,{value:e.$t(`components.player.cast`)},void 0,{top:!0}]]):q(``,!0),H(Ci)?q(``,!0):fn((Y(),F(r,{key:4,fluid:``,text:``,severity:`contrast`,class:Z([`cui-icon-lg`,H(fa)?`!text-primary`:`not-hover:text-surface-400`]),onClick:t[29]||=e=>H(y)(`stream`,()=>H(st)?.toggleMenu(e))},{icon:X(()=>[z(je,{width:`100%`,height:`100%`})]),_:1},8,[`class`])),[[xt,{value:e.$t(`components.player.options`)},void 0,{top:!0}]]),H(Ve)&&(`hasPermission`in e?e.hasPermission:H(Af))(void 0,`admin`)?fn((Y(),F(r,{key:5,fluid:``,text:``,severity:`contrast`,class:Z([`cui-icon-lg not-hover:text-surface-400`,{active:H(g).isOpen.value}]),onClick:t[30]||=e=>H(g).open({cameraName:H($n)})},{icon:X(()=>[H(g).isOpen.value?(Y(),F(rt,{key:1,width:`100%`,height:`100%`})):(Y(),F(nt,{key:0,width:`100%`,height:`100%`}))]),_:1},8,[`class`])),[[xt,{value:e.$t(`components.player.settings`)},void 0,{top:!0}]]):q(``,!0)],6)):q(``,!0)]),_:1},8,[`pt`]),H(v).stream?(Y(),F(yt,{key:0,ref_key:`streamMenuRef`,ref:st,items:H(da),popover:{pt:{content:{class:`p-0! rounded-xl! overflow-hidden!`}}}},null,8,[`items`])):q(``,!0),H(v).cast?(Y(),F(yt,{key:1,ref_key:`castMenuRef`,ref:ct,items:H(ma),popover:{pt:{content:{class:`p-0! rounded-xl! overflow-hidden!`}}}},null,8,[`items`])):q(``,!0),H(v).fullscreen?(Y(),F(yt,{key:2,ref_key:`fullscreenMenuRef`,ref:ut,items:H(Ta),popover:H(Ca),onShow:t[31]||=e=>gn.value=!0,onHide:t[32]||=e=>gn.value=!1},null,8,[`items`,`popover`])):q(``,!0),H(v).ptzPreset?(Y(),F(yt,{key:3,ref_key:`ptzPresetMenuRef`,ref:lt,items:H(di),onShow:t[33]||=e=>gn.value=!0,onHide:t[34]||=e=>gn.value=!1,popover:H(Ca)},null,8,[`items`,`popover`])):q(``,!0)],12,zD)}}}),[[`__scopeId`,`data-v-a80d8b1c`]]),LO=[];function RO(e={}){let t=ar(`FindObject`),{plugin:n}=y(`@camera.ui/camera-ui-nvr`),r=P(`timeline`),i=Rt([]),a=Rt(!1),o=Rt(),s=P(100),c=new Map,l=new Set,u=0,d=e.views??[`timeline`,`detections`],f=[...d,`find`],p=V(()=>!!n.value&&Af(void 0,`admin`)),m=V(()=>p.value&&R(e.searchable??!0)?f:d),h=V(()=>p.value&&r.value===`find`&&R(e.shown??!0)),g=V(()=>p.value&&R(e.pickable??!0)),_=V(()=>My(i.value,s.value)),v=V(()=>i.value.some(e=>e.result)),b=V(()=>v.value?_.value.map(e=>e.key):void 0),x=V(()=>v.value?_.value.length:void 0);function S(e,t){let n={id:++u,camera:e,request:t,searching:!0};i.value=[...i.value,n],r.value=`find`,j(n)}function C(e){c.delete(e),i.value=i.value.filter(t=>t.id!==e)}function w(){r.value=`find`}function E(){r.value=r.value===`find`?`timeline`:`find`}function D(){k(!0),c.clear(),i.value=[],s.value=100,a.value=!1,o.value=void 0}function O(e){return l.add(e),()=>l.delete(e)}function k(e){for(let t of[...l])t.release(e)}function A(e,t){i.value=i.value.map(n=>n.id===e?{...n,...t}:n)}async function j(e){let r=n.value;if(!r)return;let i=(c.get(e.id)??0)+1;c.set(e.id,i);try{let t=await r.searchSimilarQuery(e.request.query,{});if(c.get(e.id)!==i)return;A(e.id,{result:t,searching:!1}),a.value=!1}catch(n){if(c.get(e.id)!==i)return;A(e.id,{result:void 0,searching:!1}),String(n?.message??n).includes(`license verification required`)?a.value=!0:t.error(`Similar search failed:`,n)}}function ee(e){let t=e;return!!(t&&(t.isContentEditable||[`INPUT`,`TEXTAREA`,`SELECT`].includes(t.tagName)))}let te={segment:r,views:m,available:p,armed:h,pickable:g,picks:i,items:_,keys:b,count:x,breadth:s,licenseRequired:a,openedKey:o,add:S,remove:C,openView:w,toggleView:E,endSearch:D,track:O,releaseAll:k};return G(()=>!!n.value,e=>{if(e)for(let e of i.value)e.searching&&j(e)}),G(T(),()=>{i.value=i.value.map(e=>({...e,result:void 0,searching:!0}));for(let e of i.value)j(e)}),Lt([`f`,`F`,`Escape`],e=>{LO.at(-1)!==te||e.metaKey||e.ctrlKey||e.altKey||ee(e.target)||(e.key===`Escape`?k(!0):m.value.includes(`find`)&&(e.preventDefault(),E()))}),hn(()=>LO.push(te)),Gt(()=>{let e=LO.indexOf(te);e>=0&&LO.splice(e,1)}),te}var zO={class:`camera-stream-event-container`},BO={class:`stream-wrapper`},VO={key:0,class:`ai-description-overlay`},HO={class:`min-w-0`},UO={class:`text-sm font-semibold text-white`},WO={class:`text-xs text-white/85 mt-1`},GO=Kd(Gn({__name:`CameraStreamEvent`,props:{camera:{},eventTimestamp:{},similarPick:{}},setup(e,{expose:t}){let n=e,i=ar(),a=Go(),{t:s}=St(),c=OD(),{mdBreakpoint:l}=Md(),{plugin:u}=y(`@camera.ui/camera-ui-nvr`),{openEventTrace:d}=uy(),{openSimilarSearch:f}=kD(),p=r(`@camera.ui/camera-ui-nvr`),m=nn(`dialogRef`),h=nn(`dialogRefProps`),g=nn(`dialogHeaderToggles`,{}),_=nn(`dialogTitle`,void 0),v=Tn(`cameraCardRef`),b=Tn(`cuiTimelineRef`),x=Rt(n.camera),S=P(n.eventTimestamp),C=P(!1),w=P(),T=P(!1),E=RO({views:[`timeline`],searchable:()=>!!x.value?.assignments?.object}),{segment:D,views:O,keys:k,count:A}=E;Mn(jy,E),n.similarPick&&E.add(n.similarPick.camera,n.similarPick.request);let j=!1,ee=V(()=>x.value.interfaceSettings?.playbackSource??`auto`),te=Ve(V(()=>x.value._id),{sourceRole:ee}),ne=V(()=>!!h.loading?.value),re=V(()=>Af(void 0,`admin`)),ie=V(()=>g[0]??!1),ae=V(()=>b.value?.currentEventDescription),oe=V(()=>!!b.value?.currentEvent),M=V(()=>b.value?.isLive??!0);function se(){let e=b.value?.currentEvent,t=e?p.getEvent(e.id):void 0;if(!t)return;let n=te.currentTimestamp.value>0?Math.floor(te.currentTimestamp.value/1e3):void 0;d(t,x.value,n)}async function ce(){if(T.value)return;let e=b.value?.currentEvent;if(!e)return;let t=u.value;if(t?.nvrExport){T.value=!0;try{let n=await t.nvrExport(e.cameraId,e.startMs*1e3,e.endMs*1e3,{sourceRole:te.effectiveRole.value||void 0});await Yd({url:n.url,filename:n.filename})}catch(e){i.error(`Download failed:`,e),a.add({severity:`error`,summary:s(`views.recordings.download_failed`),detail:zL(e),life:5e3})}finally{T.value=!1}}}function le({event:e,camera:t,timestamp:n}){E.releaseAll(!1),e.cameraId===x.value._id?b.value?.scrollToEvent(n):t&&(x.value=t,S.value=n,_&&(_.value=t.name),te.play(n*1e3))}function ue(e){m.value.close(),f(e)}function de(e){v.value?.timelineScroll(e)}function fe(){let e=te.currentTimestamp.value>0?Math.floor(te.currentTimestamp.value/1e3):S.value;return e?`/cameras/${x.value.name}?startTs=${e}`:`/cameras/${x.value.name}`}return G([oe,M,T,u,re],([e,t])=>{if(!h.headerActions)return;let n=!t&&e&&!!u.value;h.headerActions.value=[{icon:np,tooltip:s(`components.player.ai_descriptions`),toggle:!0,onClick:()=>{}},...re.value?[{icon:Ep,tooltip:s(`views.recordings.open_trace`),onClick:se,disabled:!n}]:[],{icon:Cp,tooltip:s(`views.recordings.download`),onClick:ce,loading:T.value,disabled:!n}]},{immediate:!0}),S.value&&(te.mode.value=`play`,te.loading.value=!0),G([u,S],([e,t])=>{e&&t&&!j&&(j=!0,te.play(t*1e3))},{immediate:!0}),hn(()=>{setTimeout(()=>{C.value=!0},300)}),t({isLoading:ne,resolveGoTo:fe}),(e,t)=>{let n=IO,r=np,i=Xy;return Y(),B(`div`,zO,[J(`div`,BO,[(Y(),F(n,{ref_key:`cameraCardRef`,ref:v,key:H(x).name,"source-role":H(w),"onUpdate:sourceRole":t[0]||=e=>Qt(w)?w.value=e:null,"activity-mode":`always-on`,"streaming-mode":`auto`,"camera-info":H(x).name,"flat-card":``,resizable:H(l),"card-props":{pt:{root:{class:{"!rounded-md":!0}}}},"camera-name-overlay":!1,toolbar:!1,subcontrol:!0,"subcontrol-ptz-button":!1,"control-pip-button":!1,"control-microphone-button":!1},null,8,[`source-role`,`camera-info`,`resizable`])),z(Rn,{"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:X(()=>[H(ae)&&H(ie)?(Y(),B(`div`,VO,[z(r,{class:`w-4 h-4 text-white/90 shrink-0 mt-0.5`}),J(`div`,HO,[J(`p`,UO,L(H(ae).title),1),J(`p`,WO,L(H(ae).description),1)])])):q(``,!0)]),_:1})]),(Y(),F(H(o),{ref_key:`cuiTimelineRef`,ref:b,key:H(x).name,segment:H(D),"onUpdate:segment":t[1]||=e=>Qt(D)?D.value=e:null,views:H(O),"find-count":H(A),"camera-ids":[H(x)._id],"initial-timestamp":H(S),loading:!H(C),type:H(l)?`vertical`:`horizontal`,"ignore-bottom-safe-area":H(l),"show-zoom":!1,"show-date":!1,"md-breakpoint":H(l),"only-events":H(k),class:Z([`flex w-full border-t-[1px] border-color shrink-0`,H(l)?`h-full`:`h-[200px]`]),"card-class":{"mt-auto":!H(l)},"flat-card":``,"locale-settings":H(c),onScrolling:de},{find:X(({layout:e})=>[z(i,{layout:e,onOpen:le,onShowAll:ue},null,8,[`layout`])]),_:1},8,[`segment`,`views`,`find-count`,`camera-ids`,`initial-timestamp`,`loading`,`type`,`ignore-bottom-safe-area`,`md-breakpoint`,`only-events`,`class`,`card-class`,`locale-settings`]))])}}}),[[`__scopeId`,`data-v-b070cdee`]]),KO={class:`bg-neutral-900 w-[140px] h-[140px] rounded-xl overflow-hidden relative`},qO=[`src`],JO={key:2,class:`w-full h-full flex items-center justify-center bg-neutral-800/80`},YO={key:4,class:`absolute inset-0 z-[3] flex items-center justify-center pointer-events-none`},XO={key:5,class:`absolute bottom-1.5 left-1/2 -translate-x-1/2 z-[3] pointer-events-none`},ZO={class:`text-[10px] font-semibold text-white bg-black/60 px-1.5 py-0.5 rounded-md whitespace-nowrap`,style:{"font-variant-numeric":`tabular-nums`}},QO={key:6,class:`absolute top-1.5 left-1.5 z-[3] flex items-center gap-1`},$O={key:8,class:`absolute top-1 left-1/2 -translate-x-1/2 z-[2] max-w-[85%] pointer-events-none`},ek={class:`block text-[10px] text-white font-medium truncate bg-black/40 rounded px-1.5 py-0.5`},tk={key:9,class:`absolute bottom-1 left-1/2 -translate-x-1/2 z-[2] flex items-center gap-1 pointer-events-none`},nk={class:`flex items-center gap-1 opacity-0 group-hover:opacity-100 transition-opacity duration-200`},rk={class:`text-xs text-white font-medium opacity-0 group-hover:opacity-100 transition-opacity duration-200 truncate max-w-[130px] px-1`},ik={class:`mt-2 text-center`},ak={class:`text-xs text-muted`},ok=1e4,sk=Kd(Gn({__name:`CameraEvent`,props:{event:{},segIndex:{},segment:{},live:{type:Boolean},cameraName:{},camera:{},clickDisabled:{type:Boolean}},setup(e){let t=e,n=Mm(),{t:r}=St(),i=nn(Re,void 0),a=Tn(`previewCanvasRef`),o=Tn(`cardRef`),s=P(!1),c=P(0),u=P(!1),d=Rt(!1),f,{icons:p,generic:m}=Or(),h=Im(o,()=>ce(!0),()=>M()),g=V(()=>t.segment&&t.segIndex!==void 0?t.segIndex:void 0),{pictures:_,state:v}=et(()=>t.event,()=>[{kind:`cover`,segIndex:g.value},{kind:`tiles`,segIndex:g.value}],()=>d.value),y=V(()=>_.value?De(_.value,t.event,`card`,g.value):null),b=V(()=>{let e=_.value,n=y.value?.url;if(!e||!n)return[];let r=[{url:n,label:y.value?.label,type:y.value?.type??Je(t.event),crop:!1}];for(let n of Ze(e,g.value,t.event))r.some(e=>e.url===n.url)||r.push({url:n.url,label:n.label,type:n.type,crop:!0});if(g.value===void 0)for(let n of Object.keys(e.cards??e.strips??{}).sort((e,t)=>Number(e)-Number(t))){let i=l(e.cards?.[n]??e.strips?.[n]);if(!i||r.some(e=>e.url===i))continue;let a=am(t.event,n);r.push({url:i,label:a,type:a,crop:!1})}return r.length>1?r:[]}),x=V(()=>b.value.length?Math.min(c.value,b.value.length-1):0),S=V(()=>b.value.length>1?b.value[x.value]:void 0),C=V(()=>!!S.value?.crop),w=V(()=>S.value?.url??y.value?.url),T=V(()=>S.value?.label??y.value?.label),E=V(()=>S.value?.type??y.value?.type??Je(t.event)),D=V(()=>p[E.value]??m),O=V(()=>(t.segment?We(t.event,t.segment):[...new Set(t.event.types)]).filter(e=>e!==`motion`&&e!==`audio`)),k=V(()=>O.value.slice(0,4)),A=V(()=>new Date(t.segment?.firstSeen??t.event.thumbnailAt??t.event.startTime).toLocaleTimeString([],{hour:`2-digit`,minute:`2-digit`})),j=V(()=>t.segment?.firstSeen??im(t.event)),ee=V(()=>t.segment?t.live===!0:t.event.state===`active`),te=V(()=>y.value?.url?`loaded`:v.value===`loading`||ee.value?`loading`:`empty`),ne=V(()=>t.segment?t.segment.description:t.event.segments?.find(e=>e?.description)?.description),re=V(()=>!ee.value&&!!ne.value),ie=V(()=>i?u.value?r(`views.recordings.no_preview`):s.value?i.status.value===`unavailable`?r(`views.recordings.no_preview`):i.status.value===`playing`&&i.previewTimeMs.value?se(i.previewTimeMs.value):``:``:``);function ae(e){let t=b.value.length;t&&(M(),c.value=(x.value+e+t)%t)}function M(){u.value=!1,i&&s.value&&(s.value=!1,i.onHoverEnd())}function se(e){let t=new Date(e);return`${String(t.getHours()).padStart(2,`0`)}:${String(t.getMinutes()).padStart(2,`0`)}:${String(t.getSeconds()).padStart(2,`0`)}`}function ce(e=!1){if(!i||x.value>0)return;let n=a.value;if(!n)return;let r=t.segment?.firstSeen??t.event.startTime,o=t.segment?t.segment.lastSeen:lt(t.event);o?(s.value=!0,i.onHoverStart(n,t.event.cameraId,t.event.id,r,o,t.camera?.zones?.privacy,oe(t.event,g.value),{immediate:e})):u.value=!0}function le(){h.blocksMouseEnter()||ce()}function ue(){u.value=!1,i&&(s.value=!1,i.onHoverEnd())}function de(){if(h.consumesClick()||t.clickDisabled||!t.camera)return;let e=ee.value&&Date.now()-t.event.startTime<ok,r=ne.value,i=[{icon:np,toggle:!0,onClick:()=>{}}];f=n.openComponentDialog(GO,{data:{title:t.camera.name,dedupeKey:`camera-event:${t.camera._id}:${e?`live`:j.value}`,stayActive:!0,hideCancelButton:!0,hideConfirmButton:!0,contentProps:{camera:t.camera,eventTimestamp:e?void 0:j.value},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=${j.value}`}`},dialogSize:{desktop:{maxWidth:`800px`,maxHeight:`calc(100vh - max(1rem, var(--safe-area-inset-top)) - max(1rem, var(--safe-area-inset-bottom)))`,width:`50vw`}}})}let{stop:fe}=Ot(o,([e])=>{e.isIntersecting&&!d.value&&(d.value=!0,fe())},{threshold:.1});return hn(()=>{requestAnimationFrame(()=>{if(!d.value&&o.value){let e=o.value.getBoundingClientRect();e.right>0&&e.left<window.innerWidth&&e.bottom>0&&e.top<window.innerHeight&&(d.value=!0,fe())}})}),Fn(()=>{fe(),M(),f?.close()}),(e,n)=>{let r=ii,c=qd,l=ti,u=$f,d=ci,f=Xf;return Y(),B(`div`,{ref_key:`cardRef`,ref:o,class:`camera-event-card relative group cursor-pointer`,onClick:de,onMouseenter:le,onMouseleave:ue},[J(`div`,KO,[H(te)===`loading`?(Y(),F(r,{key:0,class:`w-full h-full rounded-xl`,width:`140px`,height:`140px`})):H(w)?(Y(),B(U,{key:1},[H(C)?(Y(),B(`img`,{key:0,src:H(w),"aria-hidden":`true`,class:`absolute inset-0 w-full h-full object-cover blur-xl scale-110 opacity-50 pointer-events-none`},null,8,qO)):q(``,!0),z(c,{src:H(w),alt:t.cameraName,class:`pointer-events-none w-full h-full transition-transform duration-300 group-hover:scale-105`,"image-style":{objectFit:H(C)?`contain`:`cover`},width:`140px`,height:`140px`,"image-container-class":`w-full h-full`},null,8,[`src`,`alt`,`image-style`])],64)):(Y(),B(`div`,JO,[(Y(),F(pn(H(D)),{class:`w-8 h-8 text-white/20`}))])),H(i)?fn((Y(),B(`canvas`,{key:3,ref_key:`previewCanvasRef`,ref:a,class:`absolute inset-0 w-full h-full object-cover pointer-events-none z-[1]`},null,512)),[[Xt,H(s)]]):q(``,!0),H(i)&&H(s)&&H(i).isLoading.value&&!H(re)?(Y(),B(`div`,YO,[z(l,{class:`w-[24px] h-[24px] m-0`,"stroke-width":`3`})])):q(``,!0),H(ie)?(Y(),B(`div`,XO,[J(`span`,ZO,L(H(ie)),1)])):q(``,!0),H(ee)?(Y(),B(`div`,QO,[...n[2]||=[J(`span`,{class:`relative flex h-2.5 w-2.5`},[J(`span`,{class:`animate-ping absolute inline-flex h-full w-full rounded-full bg-green-400 opacity-75`}),J(`span`,{class:`relative inline-flex rounded-full h-2.5 w-2.5 bg-green-500`})],-1)]])):q(``,!0),H(b).length>1?(Y(),B(U,{key:7},[z(d,{rounded:``,text:``,severity:`secondary`,class:`!absolute left-0.5 top-1/2 -translate-y-1/2 z-[3] !w-6 !h-6 !p-0 bg-black/40 hover:!bg-black/60`,"aria-label":e.$t(`views.recordings.prev_image`),onClick:n[0]||=Bn(e=>ae(-1),[`stop`]),onMouseenter:M},{icon:X(()=>[z(u,{class:`w-4 h-4 text-white`})]),_:1},8,[`aria-label`]),z(d,{rounded:``,text:``,severity:`secondary`,class:`!absolute right-0.5 top-1/2 -translate-y-1/2 z-[3] !w-6 !h-6 !p-0 bg-black/40 hover:!bg-black/60`,"aria-label":e.$t(`views.recordings.next_image`),onClick:n[1]||=Bn(e=>ae(1),[`stop`]),onMouseenter:M},{icon:X(()=>[z(f,{class:`w-4 h-4 text-white`})]),_:1},8,[`aria-label`])],64)):q(``,!0),H(w)&&H(T)?(Y(),B(`div`,$O,[J(`span`,ek,L(H(T)),1)])):q(``,!0),H(w)&&H(b).length>1?(Y(),B(`div`,tk,[(Y(!0),B(U,null,K(H(b),(e,t)=>(Y(),B(`span`,{key:t,class:Z([`w-1.5 h-1.5 rounded-full transition-colors duration-200`,t===H(x)?`bg-white`:`bg-white/40`])},null,2))),128))])):q(``,!0),H(w)?(Y(),B(`div`,{key:10,class:Z([`absolute inset-0 bg-black/0 group-hover:bg-black/30 transition-all duration-200 flex flex-col items-center justify-end gap-1 z-[2] pointer-events-none`,H(ie)?`pb-8`:`pb-3`])},[J(`div`,nk,[(Y(!0),B(U,null,K(H(k),e=>(Y(),F(pn(H(p)[e]??H(m)),{key:e,class:`w-3.5 h-3.5 text-white/50`}))),128))]),J(`span`,rk,L(t.cameraName),1)],2)):q(``,!0)]),J(`div`,ik,[J(`p`,ak,L(H(A)),1)])],544)}}}),[[`__scopeId`,`data-v-9ab83c7c`]]),ck={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function lk(e,t){return Y(),B(`svg`,ck,[...t[0]||=[J(`path`,{fill:`currentColor`,d:`M20 5h-3.17L15 3H9L7.17 5H4c-1.1 0-2 .9-2 2v12a2 2 0 0 0 2 2h16c1.11 0 2-.89 2-2V7a2 2 0 0 0-2-2m0 14H4V7h4.05l1.83-2h4.24L16 7h4zM5 12h2.1A4.997 4.997 0 0 1 13 8.1c.76.15 1.43.49 2 .9l-1.44 1.45c-.45-.28-.98-.45-1.56-.45c-1.26 0-2.4.8-2.82 2H11l-3 3zm11.91 2c-.55 2.71-3.19 4.45-5.91 3.9a5.4 5.4 0 0 1-2-.9l1.44-1.45c.46.28.99.45 1.56.45c1.27 0 2.41-.8 2.83-2H13l3-3l3 3z`},null,-1)]])}var uk=I({name:`mdi-camera-flip-outline`,render:lk}),dk={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function fk(e,t){return Y(),B(`svg`,dk,[...t[0]||=[J(`path`,{fill:`currentColor`,d:`M16 18h2V6h-2M6 18l8.5-6L6 6z`},null,-1)]])}var pk=I({name:`mdi-skip-next`,render:fk}),mk={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function hk(e,t){return Y(),B(`svg`,mk,[...t[0]||=[J(`path`,{fill:`currentColor`,d:`M6 18V6h2v12zm3.5-6L18 6v12z`},null,-1)]])}var gk=I({name:`mdi-skip-previous`,render:hk}),_k=6e3,vk=1e3;function yk(e){if(e.mode.value!==`idle`){if(e.licenseRequired.value)return`components.player.license_required`;if(e.unsupported.value)return`components.player.codec_unsupported_recording`;if(e.playbackError.value)return`components.player.playback_failed`;if(e.noData.value)return`components.player.no_recording`}}function bk(e){return yk(e)?!1:e.loading.value||e.mode.value===`play`&&e.frameTimestamp.value<=0}function xk(e,t,n){return e.mode.value===`idle`?!1:yk(e)?!0:!bk(e)&&t>0&&Math.abs(t-n)<_k}function Sk(e,t,n,r){return e.mode.value!==`play`||bk(e)||t<=0?`hold`:t<n.endMs?`follow`:r?r.cameraId===n.cameraId&&r.startMs-n.endMs<=vk?`continue`:`switch`:`end`}var Ck={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function wk(e,t){return Y(),B(`svg`,Ck,[...t[0]||=[J(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M12 18.5L9 17l-6 3V7l6-3l6 3l6-3v7.5M9 4v13m6-10v5.5m6.121 7.621a3 3 0 1 0-4.242 0Q17.506 20.749 19 22q1.577-1.335 2.121-1.879M19 18v.01`},null,-1)]])}var Tk=I({name:`tabler-map2`,render:wk}),Ek={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Dk(e,t){return Y(),B(`svg`,Ek,[...t[0]||=[J(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M4 17a3 3 0 1 0 6 0a3 3 0 1 0-6 0m10 0a3 3 0 1 0 6 0a3 3 0 1 0-6 0m-4.85-2.15L18 4M6 4l8.85 10.85`},null,-1)]])}var Ok=I({name:`tabler-cut`,render:Dk}),kk={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Ak(e,t){return Y(),B(`svg`,kk,[...t[0]||=[J(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M8 9h8m-8 4h6m-5 5H6a3 3 0 0 1-3-3V7a3 3 0 0 1 3-3h12a3 3 0 0 1 3 3v8a3 3 0 0 1-3 3h-3l-3 3z`},null,-1)]])}var jk=I({name:`tabler-message2`,render:Ak}),Mk={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Nk(e,t){return Y(),B(`svg`,Mk,[...t[0]||=[J(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M5 7a4 4 0 1 0 8 0a4 4 0 1 0-8 0M3 21v-2a4 4 0 0 1 4-4h4a4 4 0 0 1 4 4v2m1-17.87a4 4 0 0 1 0 7.75M21 21v-2a4 4 0 0 0-3-3.85`},null,-1)]])}var Pk=I({name:`tabler-users`,render:Nk}),Fk={class:`episode-trace flex flex-col h-full min-h-0 overflow-hidden text-wrap`},Ik={key:0,class:`flex items-center justify-center py-12`},Lk={key:1,class:`text-sm text-muted text-center py-12`},Rk={key:2,class:`text-sm text-muted text-center py-12`},zk=[`data-stage-zoom`,`src`],Bk={key:1,class:`text-sm text-white/60 px-6 text-center`},Vk={key:3,class:`absolute bottom-0 inset-x-0 z-[5] px-3 pb-2 pt-6 bg-gradient-to-t from-black/70 to-transparent pointer-events-none`},Hk={class:`text-xs text-white`},Uk={class:`bg-black shrink-0`},Wk={class:`flex items-center gap-2 h-7 px-4 pt-2 text-[10px] text-white/50 whitespace-nowrap overflow-hidden`},Gk={class:`shrink-0`},Kk=[`onClick`],qk=[`src`],Jk={class:`flex-1 min-h-0 overflow-y-auto`},Yk={class:`tile`},Xk={class:`tile-head`},Zk={class:`flex flex-col gap-1.5`},Qk={class:`font-semibold text-color`},$k={class:`font-mono text-muted`},eA={key:0,class:`chip text-muted`},tA={key:1,class:`chip chip-dropped`},nA={class:`tile`},rA={class:`tile-head`},iA={key:0,class:`flex flex-col gap-1 text-xs`},aA={class:`font-semibold text-color`},oA={class:`text-muted`},sA={key:1,class:`tile-empty`},cA={class:`tile`},lA={class:`tile-head`},uA={class:`chips`},dA={class:`chip`},fA={key:0,class:`text-xs text-color`},pA={class:`text-muted`},mA={key:1,class:`text-xs text-color`},hA={class:`text-muted`},gA={key:2,class:`text-xs text-red-400`},_A={key:3,class:`text-xs`},vA={class:`cursor-pointer text-muted`},yA={class:`call-text`},bA={key:4,class:`text-xs`},xA={class:`cursor-pointer text-muted`},SA={class:`call-text`},CA={key:1,class:`tile-empty`},wA={class:`tile`},TA={class:`tile-head`},EA={class:`chips`},DA={key:0,class:`chip`},OA={key:0,class:`text-xs text-color`},kA={class:`font-semibold`},AA={key:1,class:`text-xs text-red-400`},jA={key:2,class:`text-xs text-color`},MA={class:`text-muted`},NA={key:3,class:`text-xs`},PA={class:`cursor-pointer text-muted`},FA={class:`call-text`},IA={key:4,class:`text-xs`},LA={class:`cursor-pointer text-muted`},RA={class:`call-text`},zA={key:1,class:`tile-empty`},BA={class:`tile`},VA={class:`tile-head`},HA={key:0,class:`chips`},UA={key:1,class:`tile-empty`},WA={key:0,class:`tile`},GA={class:`tile-head`},KA={class:`text-xs text-color whitespace-pre-line`},qA=`#22c55e`,JA=`#ef4444`,YA=`#eab308`,XA=Kd(Gn({__name:`EpisodeTrace`,props:{episode:{},cameraById:{}},setup(e){let t=e,n=ar(),i=Go(),{t:a}=St(),{mdBreakpoint:o}=Md(),s=nn(`dialogRefProps`),{plugin:c}=y(`@camera.ui/camera-ui-nvr`),l=r(`@camera.ui/camera-ui-nvr`),u=Tn(`stripRef`),d=Tn(`stageRef`),f=Tn(`imageRef`),p=Rt(),m=Rt([]),h=P(`loading`),g=P(!1),_=P(0),v=P(!1),b=NL(),{zoom:x,pan:S,constraining:C,minimapStyle:w,minimapBoxStyle:T,onZoomPan:E,onDoubleClick:D,onTouchStart:O,onTouchEnd:k,reset:A}=i_(d,f),j=!1,ee=!1,te=[],ne=V(()=>m.value[_.value]),re=V(()=>{let e=p.value?.spatial;if(!e)return``;try{return JSON.parse(e).place??``}catch{return``}}),ie=V(()=>{let e=p.value?.curation;return e?e.error?a(`views.recordings.episode_trace.call_failed`):e.coherent?a(`views.recordings.episode_trace.coherent`):a(`views.recordings.episode_trace.not_coherent`):``}),ae=V(()=>{let e=p.value?.curation;return!e||e.error?YA:e.coherent?qA:JA});function oe(e){return t.cameraById.get(e)?.name??p.value?.cameras[e]??e}function M(e){let t=p.value?.members.find(t=>t.eventId===e);return t?oe(t.cameraId):e}function se(e){return a(`views.recordings.episode_trace.dropped_${e.replace(`-`,`_`)}`,e)}function ce(e){let t=[];return e.model&&t.push(e.model),e.attempts&&t.push(a(`views.recordings.episode_trace.attempts`,{count:e.attempts})),e.durationMs&&t.push(`${(e.durationMs/1e3).toFixed(1)}s`),t}function le(e){return new Date(e).toLocaleTimeString(void 0,{hour:`2-digit`,minute:`2-digit`,second:`2-digit`})}function ue(e){let n=Math.max(e-t.episode.startTime,0)/1e3,r=Math.floor(n/60),i=Math.floor(n-r*60);return`${r}:${String(i).padStart(2,`0`)}`}async function de(e){g.value=!0;let r=e.getEpisodeTraceImages(t.episode.id).catch(()=>[]);try{let n=await e.getEpisodeTrace(t.episode.id);if(!n){h.value=`empty`;return}p.value=n,h.value=`ready`;let i=await r;if(ee)return;m.value=i.filter(e=>e.data&&e.data.length>0).map(e=>{let t=new Uint8Array(e.data),n=URL.createObjectURL(new Blob([t],{type:`image/jpeg`}));return te.push(n),{note:e.note,data:t,url:n}})}catch(e){n.error(`Episode trace failed:`,e),h.value===`loading`&&(h.value=`unavailable`)}finally{g.value=!1}}async function fe(){let e=p.value,r=c.value;if(!v.value&&e&&r){v.value=!0;try{let n=new TextEncoder,i=[],a=Object.fromEntries([...t.cameraById.values()].map(e=>[e._id,e.name]));i.push({name:`episode.json`,data:n.encode(JSON.stringify({episode:t.episode,cameras:a},null,2))});let{fixture:o,spatial:s,images:c,...u}=e;i.push({name:`trace.json`,data:n.encode(JSON.stringify({...u,images:c.map(e=>e.note)},null,2))}),i.push({name:`input.json`,data:n.encode(o)}),s&&i.push({name:`spatial.json`,data:n.encode(s)});for(let[e,t]of m.value.entries())i.push({name:`images/${String(e+1).padStart(2,`0`)}.jpg`,data:t.data});m.value.length>0&&i.push({name:`images/notes.txt`,data:n.encode(`${m.value.map((e,t)=>`${t+1}. ${e.note}`).join(`
4
- `)}\n`)});let d=await l.loadEpisodeMosaic(t.episode.id);d&&i.push({name:`mosaic.jpg`,data:new Uint8Array(d)});let f=await N(r);f&&i.push({name:`clip.mp4`,data:f}),await Yd({blob:P_(i),filename:`episode-trace-${t.episode.id.slice(0,8)}.zip`})}catch(e){n.error(`Episode trace bundle failed:`,e),i.add({severity:`error`,summary:a(`views.recordings.episode_trace.bundle_failed`),detail:zL(e),life:5e3})}finally{v.value=!1}}}async function N(e){try{let n=await e.nvrExportEpisode(t.episode.id),r=await fetch(n.url,{credentials:`include`});return r.ok?new Uint8Array(await r.arrayBuffer()):void 0}catch(e){n.warn(`Clip export for the episode bundle failed:`,e);return}}function pe(){s.headerActions&&(s.headerActions.value=[{icon:Cp,tooltip:a(`views.recordings.episode_trace.bundle_hint`),onClick:()=>fe(),loading:v.value,disabled:h.value!==`ready`}])}return $t(u,`wheel`,e=>{Math.abs(e.deltaY)>Math.abs(e.deltaX)&&(e.preventDefault(),u.value?.scrollBy({left:e.deltaY}))},{passive:!1}),G(_,A),G(c,e=>{!e||j&&h.value!==`unavailable`||(j=!0,h.value=`loading`,de(e))},{immediate:!0}),G([h,v],pe,{immediate:!0}),Gt(()=>{ee=!0;for(let e of te)URL.revokeObjectURL(e)}),(e,t)=>{let n=ti,r=Pk,i=ag,a=np,s=jk,c=Ok,l=Tk,v=Pn(`tooltip`);return Y(),B(`div`,Fk,[H(h)===`loading`?(Y(),B(`div`,Ik,[z(n,{class:`w-[30px] h-[30px] m-0`,"stroke-width":`5`})])):H(h)===`empty`?(Y(),B(`div`,Lk,L(e.$t(`views.recordings.episode_trace.empty`)),1)):H(h)===`unavailable`?(Y(),B(`div`,Rk,L(e.$t(`views.recordings.episode_trace.unavailable`)),1)):H(h)===`ready`&&H(p)?(Y(),B(U,{key:3},[J(`div`,{ref_key:`stageRef`,ref:d,class:`stage relative w-full bg-black shrink-0 flex items-center justify-center overflow-hidden`},[H(ne)?(Y(),F(H(rr),{key:0,pan:H(S),"onUpdate:pan":t[0]||=e=>Qt(S)?S.value=e:null,zoom:H(x),"onUpdate:zoom":t[1]||=e=>Qt(x)?x.value=e:null,"pan-enabled":H(x)>1,"enable-control-button":!1,"dbl-click-enabled":!1,"min-zoom":1,"max-zoom":`STAGE_MAX_ZOOM`in e?e.STAGE_MAX_ZOOM:H(5),selector:`[data-stage-zoom='${H(b)}']`,"zoom-origin":`pointer`,class:Z([`absolute inset-0 flex items-center justify-center`,{"zoom-constraining":H(C)}]),onPanned:H(E),onZoom:H(E),onDblclick:H(D),onTouchstart:H(O),onTouchend:H(k)},{default:X(()=>[J(`img`,{ref_key:`imageRef`,ref:f,"data-stage-zoom":H(b),src:H(ne).url,class:`max-w-full max-h-full object-contain`,alt:``,draggable:`false`},null,8,zk)]),_:1},8,[`pan`,`zoom`,`pan-enabled`,`max-zoom`,`selector`,`class`,`onPanned`,`onZoom`,`onDblclick`,`onTouchstart`,`onTouchend`])):H(g)?q(``,!0):(Y(),B(`span`,Bk,L(e.$t(`views.recordings.episode_trace.no_images`)),1)),H(w)?(Y(),B(`div`,{key:2,class:`zoom-minimap`,style:W(H(T)??void 0)},[J(`div`,{class:`zoom-minimap-viewport`,style:W(H(w))},null,4)],4)):q(``,!0),H(ne)?(Y(),B(`div`,Vk,[J(`span`,Hk,L(H(_)+1)+`. `+L(H(ne).note),1)])):q(``,!0)],512),J(`div`,Uk,[J(`div`,Wk,[J(`span`,Gk,L(e.$t(`views.recordings.episode_trace.images_summary`,{count:H(m).length})),1),H(g)?(Y(),F(n,{key:0,class:`w-[12px] h-[12px] m-0 shrink-0`,"stroke-width":`6`})):q(``,!0)]),J(`div`,{ref_key:`stripRef`,ref:u,class:`strip flex gap-2 px-4 pt-2 pb-3 overflow-x-auto`},[(Y(!0),B(U,null,K(H(m),(e,t)=>fn((Y(),B(`button`,{key:t,type:`button`,class:Z([`shrink-0 w-[144px] aspect-video rounded-md overflow-hidden bg-black border-2 transition cursor-pointer`,t===H(_)?`border-primary`:`border-transparent opacity-70 hover:opacity-100 hover:border-white/40`]),onClick:e=>_.value=t},[J(`img`,{src:e.url,class:`block w-full h-full object-cover`,alt:``},null,8,qk)],10,Kk)),[[v,{value:e.note},void 0,{top:!0}]])),128))],512)]),J(`div`,Jk,[J(`div`,{class:Z([`flex flex-col gap-2 px-4 py-3`,{"pb-safe-offset-3":H(o)}])},[J(`div`,Yk,[J(`div`,Xk,[z(r,{class:`w-3.5 h-3.5`}),J(`span`,null,L(e.$t(`views.recordings.episode_trace.members`)),1)]),J(`div`,Zk,[(Y(!0),B(U,null,K(H(p).members,t=>(Y(),B(`div`,{key:t.eventId,class:Z([`flex flex-wrap items-center gap-1.5 text-xs`,{"opacity-60":t.dropped}])},[J(`span`,{class:`chip-dot`,style:W({background:t.dropped?JA:qA})},null,4),J(`span`,Qk,L(oe(t.cameraId)),1),J(`span`,$k,L(le(t.firstSeen))+`–`+L(le(t.lastSeen)),1),(Y(!0),B(U,null,K(t.labels,e=>(Y(),B(`span`,{key:e,class:`chip`},L(e),1))),128)),(Y(!0),B(U,null,K(t.identities,e=>(Y(),B(`span`,{key:e,class:`chip`},L(e),1))),128)),t.prunedSegments?.length?(Y(),B(`span`,eA,L(e.$t(`views.recordings.episode_trace.pruned`,{count:t.prunedSegments.length})),1)):q(``,!0),t.dropped?(Y(),B(`span`,tA,L(se(t.dropped)),1)):q(``,!0)],2))),128))])]),J(`div`,nA,[J(`div`,rA,[z(i,{class:`w-3.5 h-3.5`}),J(`span`,null,L(e.$t(`views.recordings.episode_trace.links`)),1)]),H(p).links.length?(Y(),B(`div`,iA,[(Y(!0),B(U,null,K(H(p).links,(e,t)=>(Y(),B(`div`,{key:t,class:`flex flex-wrap items-center gap-1.5`},[J(`span`,{class:`chip-dot`,style:W({background:e.linked?qA:JA})},null,4),J(`span`,aA,L(M(e.from))+` → `+L(M(e.to)),1),J(`span`,oA,L(e.why),1)]))),128))])):(Y(),B(`span`,sA,`–`))]),J(`div`,cA,[J(`div`,lA,[z(a,{class:`w-3.5 h-3.5`}),J(`span`,null,L(e.$t(`views.recordings.episode_trace.curation`)),1)]),H(p).curation?(Y(),B(U,{key:0},[J(`div`,uA,[J(`span`,dA,[J(`span`,{class:`chip-dot`,style:W({background:H(ae)})},null,4),Mt(` `+L(H(ie)),1)]),(Y(!0),B(U,null,K(ce(H(p).curation),e=>(Y(),B(`span`,{key:e,class:`chip text-muted`},L(e),1))),128))]),H(p).curation.kept?.length?(Y(),B(`p`,fA,[J(`span`,pA,L(e.$t(`views.recordings.episode_trace.kept`))+`:`,1),Mt(` `+L(H(p).curation.kept.map(M).join(`, `)),1)])):q(``,!0),H(p).curation.linkEvidence?(Y(),B(`p`,mA,[J(`span`,hA,L(e.$t(`views.recordings.episode_trace.evidence`))+`:`,1),Mt(` `+L(H(p).curation.linkEvidence),1)])):q(``,!0),H(p).curation.error?(Y(),B(`p`,gA,L(H(p).curation.error),1)):q(``,!0),H(p).curation.observations?(Y(),B(`details`,_A,[J(`summary`,vA,L(e.$t(`views.recordings.episode_trace.observations`)),1),J(`pre`,yA,L(H(p).curation.observations),1)])):q(``,!0),H(p).curation.raw?(Y(),B(`details`,bA,[J(`summary`,xA,L(e.$t(`views.recordings.episode_trace.response`)),1),J(`pre`,SA,L(H(p).curation.raw),1)])):q(``,!0)],64)):(Y(),B(`span`,CA,`–`))]),J(`div`,wA,[J(`div`,TA,[z(s,{class:`w-3.5 h-3.5`}),J(`span`,null,L(e.$t(`views.recordings.episode_trace.story`)),1)]),H(p).story?(Y(),B(U,{key:0},[J(`div`,EA,[H(p).story.reused?(Y(),B(`span`,DA,L(e.$t(`views.recordings.episode_trace.reused`)),1)):q(``,!0),(Y(!0),B(U,null,K(ce(H(p).story),e=>(Y(),B(`span`,{key:e,class:`chip text-muted`},L(e),1))),128))]),H(p).story.description?(Y(),B(`p`,OA,[J(`span`,kA,L(H(p).story.description.title),1),Mt(` `+L(H(p).story.description.description),1)])):q(``,!0),H(p).story.error?(Y(),B(`p`,AA,L(H(p).story.error),1)):q(``,!0),H(p).story.instructions?(Y(),B(`p`,jA,[J(`span`,MA,L(e.$t(`views.recordings.episode_trace.instructions`))+`:`,1),Mt(` `+L(H(p).story.instructions),1)])):q(``,!0),H(p).story.observations?(Y(),B(`details`,NA,[J(`summary`,PA,L(e.$t(`views.recordings.episode_trace.observations`)),1),J(`pre`,FA,L(H(p).story.observations),1)])):q(``,!0),H(p).story.raw?(Y(),B(`details`,IA,[J(`summary`,LA,L(e.$t(`views.recordings.episode_trace.response`)),1),J(`pre`,RA,L(H(p).story.raw),1)])):q(``,!0)],64)):(Y(),B(`span`,zA,`–`))]),J(`div`,BA,[J(`div`,VA,[z(c,{class:`w-3.5 h-3.5`}),J(`span`,null,L(e.$t(`views.recordings.episode_trace.cut`)),1)]),H(p).blocks.length?(Y(),B(`div`,HA,[(Y(!0),B(U,null,K(H(p).blocks,(t,n)=>fn((Y(),B(`span`,{key:n,class:Z([`chip`,{"text-muted":t.secondAngle}])},[Mt(L(oe(t.cameraId))+` `+L(ue(t.startMs))+`–`+L(ue(t.endMs)),1)],2)),[[v,t.secondAngle?{value:e.$t(`views.recordings.episode_trace.second_angle`)}:void 0,void 0,{top:!0}]])),128))])):(Y(),B(`span`,UA,`–`))]),H(re)?(Y(),B(`div`,WA,[J(`div`,GA,[z(l,{class:`w-3.5 h-3.5`}),J(`span`,null,L(e.$t(`views.recordings.episode_trace.place`)),1)]),J(`p`,KA,L(H(re)),1)])):q(``,!0)],2)])],64)):q(``,!0)])}}}),[[`__scopeId`,`data-v-2e02ffc7`]]);function ZA(){let e=Mm(),{t}=St();function n(n,r){let i=n.members[0],a=i?r.get(i.cameraId):void 0;return e.openComponentDialog(XA,{data:{title:n.description?.title??t(`views.recordings.episode_trace.title`),dedupeKey:`episode-trace:${n.id}`,stayActive:!0,hideCancelButton:!0,hideConfirmButton:!0,contentProps:{episode:n,cameraById:r},headerActions:[],draggable:!0,blockDragOnSelectors:[`.p-dialog-body`],dismissableMask:!1,modal:!1,dialogContentClass:`!px-0 h-full`,goTo:a?`/cameras/${a.name}?startTs=${n.startTime}`:void 0},dialogSize:{desktop:{maxWidth:`1000px`,maxHeight:`calc(100vh - max(1rem, var(--safe-area-inset-top)) - max(1rem, var(--safe-area-inset-bottom)))`,width:`70vw`}}})}return{openEpisodeTrace:n}}function QA(e,t){return e&&e!==`auto`&&e!==`none`?`calc(${e} + ${t}px)`:e}function $A(e,t){let n=nn(`dialogRef`,void 0),{mdBreakpoint:r}=Md(),i;function a(e){let r=n?.value.options.props?.style;if(r){if(i&&(r.width!==i.width||r.maxWidth!==i.maxWidth)&&(i=void 0),e&&!i){let e={width:r.width,maxWidth:r.maxWidth};r.width=QA(e.width,t),r.maxWidth=QA(e.maxWidth,t),i={width:r.width,maxWidth:r.maxWidth,from:e}}else!e&&i&&(r.width=i.from.width,r.maxWidth=i.from.maxWidth,i=void 0)}}G(()=>R(e)&&!r.value,a,{immediate:!0,flush:`post`}),Gt(()=>a(!1))}var ej=[`data-zoomable-content`],tj={key:0,class:`absolute inset-0 z-[3] flex items-center justify-center pointer-events-none`},nj={key:1,class:`absolute inset-0 z-[3] flex items-center justify-center pointer-events-none`},rj={class:`text-sm font-medium p-2 bg-black/60 rounded-xl text-white`},ij={key:0,class:`absolute top-0 left-0 right-0 p-3 z-[3] flex items-center gap-2 pointer-events-none`},aj={class:`text-sm font-semibold p-2 bg-black/60 rounded-xl text-white truncate`},oj={class:`ml-auto text-sm font-medium p-2 bg-black/60 rounded-xl text-white tabular-nums shrink-0`},sj={key:0,class:`absolute bottom-0 inset-x-0 z-[5] dark-mode`},cj={class:`relative flex items-center gap-1 px-3 pb-2 pt-6`},lj={class:`flex items-center gap-0.5`},uj={class:`relative px-3 pt-3 pb-2`},dj={key:0,class:`text-[10px] font-medium text-white/90 truncate px-1.5`},fj={class:`flex justify-between mt-1 text-[10px] text-muted tabular-nums`},pj={key:0,class:`w-full px-4 pb-3 flex gap-2 items-start`},mj={class:`flex-1 min-w-0 text-xs text-muted text-wrap`},hj=2e3,gj=1500,_j=1e4,vj=4e3,yj=4e3,bj=1200,xj=1500,Sj=1500,Cj=5e3,wj=5,Tj=Kd(Gn({__name:`EpisodePlayer`,props:{episode:{},cameraById:{}},setup(e,{expose:t}){Hn(e=>({v6c5267e2:p,a60a47d0:H(pt)}));let n=e,r=ar(),i=Go(),{t:a}=St(),o=nn(`dialogRef`),s=nn(`dialogRefProps`),c=nn(`dialogTitle`,void 0),{plugin:l}=y(`@camera.ui/camera-ui-nvr`),{openEpisodeTrace:u}=ZA(),{openSimilarSearch:d}=kD(),{mdBreakpoint:f}=Md(),p=`280px`,m=[...new Set(n.episode.members.map(e=>e.cameraId))],h=(n.episode.blocks??[]).filter(e=>e.secondAngle),g=Et(),_=Math.max(g.reduce((e,t)=>e+(t.endMs-t.startMs),0),1),v=g[0]?.startMs??n.episode.startTime,b=g[g.length-1]?.endMs??n.episode.endTime,x=Tn(`stageRef`),S=Tn(`stageContentRef`),C=Tn(`stripRef`),w=P(0),T=P(v),E=P(null),D=P(`idle`),O=P(!0),k=P(!1),A=P(!1),j=P({x:0,y:0}),ee=P(1),te=P(1),ne=P(!1),re=P(!1),ae=P(!0),oe=P(!1),M=P(!1),se=Rt(),ce=Tn(`matchViewRef`),le={x:0,y:0},de=RO(),fe=V(()=>de.segment.value===`find`);Mn(jy,de),$A(()=>fe.value,280);let N=yt(x),pe=Wn(x,{delayLeave:1e3}),me=yt(C).width,{zoomingIn:he,containerStyle:ge,contentStyle:_e,minimapStyle:ve,onTouchStart:ye,onTouchMove:be,onTouchEnd:xe,onDoubleClick:Se,onMouseDown:Ce,onWheel:we,onResizeStart:Te,onResizeTouchStart:Ee}=RD({container:x,content:S,aspectRatio:()=>pt.value,enabled:f,zoom:ee,pan:j}),De=new Map,Oe=[],ke=!1,Ae=!1,je=0,Me=0,Ne=0,Pe=0,Fe=NL(),Ie=V(()=>g[w.value]),Le=V(()=>Ie.value?.cameraId??m[0]??``),Re=P(Le.value),ze=V(()=>Ie.value?Ie.value.offsetMs+(T.value-Ie.value.startMs):0),Be=V(()=>{let e=Ie.value;if(!e)return;let t=T.value;return h.find(n=>n.cameraId!==e.cameraId&&n.startMs<=t&&t<=n.endMs)?.cameraId}),Ve=V(()=>{let e=ee.value,t=N.width.value,n=N.height.value;if(e<=1||!t||!n)return null;let r=j.value,i=t*e,a=n*e;return{width:`${t/i*100}%`,height:`${n/a*100}%`,left:`${(1-t/i)/2*100-r.x/i*100}%`,top:`${(1-n/a)/2*100-r.y/a*100}%`}}),He=V(()=>{let e=Ie.value,t=g[w.value+1];if(D.value===`play`&&e&&t&&t.cameraId!==Le.value)return e.endMs-T.value<=yj?t:void 0}),Ue=V(()=>E.value??Le.value),We=V(()=>E.value?[Le.value,E.value]:[Le.value]),Ge=V(()=>new Set([...We.value,Re.value,He.value?.cameraId])),Ke=new Map(m.map(e=>[e,ue(e,{sourceRole:`auto`})])),qe=V(()=>Ke.get(Ue.value)),Je=V(()=>Ke.get(Re.value)),Ye=V(()=>D.value===`play`),Xe=V(()=>n.cameraById.get(Re.value)),Ze=V(()=>Af(void 0,`admin`)),Qe=V(()=>de.available.value&&!!Xe.value?.assignments?.object),{frozen:$e,still:et,point:tt,freezeAt:nt,follow:rt,release:it,stillPosition:at,pick:ot}=PD({camera:()=>Xe.value,box:()=>S.value,capture:()=>Je.value?.captureSnapshot(),position:()=>({from:`playback`,atMs:T.value}),privacyZones:()=>Xe.value?.zones?.privacy??[],pause:()=>{D.value===`play`&&Lt()},resume:zt,settled:()=>{let e=Je.value;return!!(!A.value&&e&&e.frameTimestamp.value>0&&Math.abs(e.frameTimestamp.value/1e3-T.value)<Cj)},find:de}),st=V(()=>Qe.value&&!$e.value),ct=V(()=>st.value&&de.armed.value),lt=FE({onPress:({clientX:e,clientY:t})=>{st.value&&(nt(e,t),de.openView())},onTouchTap:({clientX:e,clientY:t})=>!ct.value||rn()?!1:(nt(e,t),!0)}),ut=V(()=>pe.value||ae.value),dt=V(()=>A.value?!1:D.value===`idle`||oe.value?!0:!!(qe.value&&bk(qe.value))),ft=V(()=>{let e=Je.value&&yk(Je.value);return e?a(e):``}),pt=V(()=>n.cameraById.get(Re.value)?.interfaceSettings.aspectRatio.replace(`:`,`/`)??`16/9`),mt=V(()=>f.value?ve.value:Ve.value),ht=V(()=>I(Re.value)),gt=V(()=>new Date(T.value).toLocaleTimeString([],{hour:`2-digit`,minute:`2-digit`,second:`2-digit`})),_t=V(()=>{let e=me.value,t=g.map(e=>e.endMs-e.startMs),n=Array(g.length).fill(0);if(e>0&&g.length>0){let r=Math.min(14,e/g.length),i=g.map((e,t)=>t);for(;;){let a=e-r*(g.length-i.length),o=i.reduce((e,n)=>e+t[n],0),s=i.filter(e=>t[e]/o*a<r);if(o<=0||i.length===0){for(let e of i)n[e]=a/Math.max(i.length,1);break}if(s.length===0){for(let e of i)n[e]=t[e]/o*a;break}for(let e of s)n[e]=r;i=i.filter(e=>!s.includes(e))}for(let e=0;e<n.length;e++)n[e]===0&&(n[e]=r)}let r=0;return n.map(e=>{let t={left:r,width:e};return r+=e,t})}),vt=V(()=>{let e=Ie.value,t=_t.value[w.value];if(!e||!t)return 0;let n=(T.value-e.startMs)/Math.max(e.endMs-e.startMs,1);return t.left+Tt(n,0,1)*t.width});function bt(){te.value=1,ee.value=1,j.value={x:0,y:0}}function xt(e){if(M.value||e.type!==`touchstart`&&e.pointerType===`mouse`&&ee.value<=1)return;M.value=!0;let t=()=>{M.value=!1,window.removeEventListener(`pointerup`,t),window.removeEventListener(`pointercancel`,t),window.removeEventListener(`touchend`,t),window.removeEventListener(`touchcancel`,t)};window.addEventListener(`pointerup`,t),window.addEventListener(`pointercancel`,t),window.addEventListener(`touchend`,t),window.addEventListener(`touchcancel`,t)}function Ct(e,t){let n=Math.max(0,(N.width.value*t-N.width.value)/2),r=Math.max(0,(N.height.value*t-N.height.value)/2);return{x:Math.max(-n,Math.min(n,e.x)),y:Math.max(-r,Math.min(r,e.y))}}function wt(e){if(ne.value)return;let t=Math.max(1,Math.min(e.zoom,wj));t<1.02&&(t=1);let n=Math.abs(e.zoom-t)>.001;if(t<=1){te.value=1,(j.value.x!==0||j.value.y!==0||ee.value!==1)&&(ne.value=!0,bt(),requestAnimationFrame(()=>setTimeout(()=>ne.value=!1,150)));return}let r={x:e.pan.x,y:e.pan.y};if(t<te.value&&te.value>1){let e=(t-1)/(te.value-1);r.x=j.value.x*e,r.y=j.value.y*e}te.value=t;let i=Ct(r,t);n?(ne.value=!0,ee.value=t,j.value=i,requestAnimationFrame(()=>setTimeout(()=>ne.value=!1,100))):j.value=i}function Tt(e,t,n){return Math.min(Math.max(e,t),n)}function I(e){return n.cameraById.get(e)?.name??e}function Et(){let e=n.episode.blocks?.filter(e=>!e.secondAngle&&e.endMs>e.startMs)??[],t=e.length?e.map(e=>({cameraId:e.cameraId,startMs:e.startMs,endMs:e.endMs})):Dt(),r=0;return t.map((e,n)=>{let i=n>0?e.startMs-t[n-1].endMs:1/0,a=n+1<t.length?t[n+1].startMs-e.endMs:1/0,o=e.startMs-Math.min(gj,Math.max(i/2,0)),s=e.endMs+Math.min(hj,Math.max(a/2,0)),c={cameraId:e.cameraId,startMs:o,endMs:s,offsetMs:r};return r+=s-o,c})}function Dt(){let e=new Map;for(let t of n.episode.members){let n=t.segmentSpans?.length?t.segmentSpans.map(e=>[e.firstSeen,e.lastSeen]):[[t.firstSeen,t.lastSeen]];e.set(t.cameraId,[...e.get(t.cameraId)??[],...n])}let t=[];for(let[n,r]of e){r.sort((e,t)=>e[0]-t[0]);let e={cameraId:n,startMs:r[0][0],endMs:r[0][1]};for(let[i,a]of r.slice(1))i-e.endMs<=_j?e.endMs=Math.max(e.endMs,a):(t.push(e),e={cameraId:n,startMs:i,endMs:a});t.push(e)}return t.sort((e,t)=>e.startMs-t.startMs||e.cameraId.localeCompare(t.cameraId)),Ot(t)}function Ot(e){if(e.length<2)return e;let t=[...new Set(e.flatMap(e=>[e.startMs,e.endMs]))].sort((e,t)=>e-t),n=[];for(let r=0;r+1<t.length;r++){let i=t[r],a=t[r+1],o=(i+a)/2,s=e.reduce((e,t)=>t.startMs<=o&&o<=t.endMs&&(!e||t.startMs>e.startMs)?t:e,void 0);if(!s)continue;let c=n[n.length-1];c&&c.cameraId===s.cameraId&&c.endMs===i?c.endMs=a:n.push({cameraId:s.cameraId,startMs:i,endMs:a})}return kt(n)}function kt(e){for(;;){let t=new Map;for(let n of e)t.set(n.cameraId,(t.get(n.cameraId)??0)+1);let n=e.findIndex(e=>e.endMs-e.startMs<vj&&(t.get(e.cameraId)??0)>1);if(n<0)break;n>0&&e[n-1].endMs===e[n].startMs&&(e[n-1].endMs=e[n].endMs),e.splice(n,1)}let t=[];for(let n of e){let e=t[t.length-1];e&&e.cameraId===n.cameraId&&e.endMs===n.startMs?e.endMs=n.endMs:t.push(n)}return t}function At(e){for(let t=g.length-1;t>=0;t--)if(e>=g[t].offsetMs)return t;return 0}function jt(e){return new Date(e).toLocaleTimeString([],{hour:`2-digit`,minute:`2-digit`,second:`2-digit`})}function Mt(e,t){t?De.set(e,t):De.delete(e)}function Nt(e){let t=Tt(e,0,_),n=At(t),r=g[n];r&&(r.cameraId!==Ie.value?.cameraId&&(E.value=null),w.value=n,T.value=Tt(r.startMs+(t-r.offsetMs),r.startMs,r.endMs))}function Pt(){return We.value.flatMap(e=>Ke.get(e)??[])}function Ft(){for(let[e,t]of Ke)!We.value.includes(e)&&t.mode.value===`play`&&t.pause()}function It(e){Nt(e),D.value=`play`,k.value=!1;for(let e of Pt())e.play(T.value*1e3);Ft()}function R(e){Nt(e),D.value=`scrub`,k.value=!1;for(let e of Pt())e.scrub(T.value*1e3,!0);Ft()}function Lt(){let e=qe.value,t=Ie.value;e&&t&&Ht(e,t),D.value=`pause`;for(let e of Pt())e.mode.value===`play`&&e.pause()}function zt(){D.value=`play`,k.value=!1;for(let e of Pt())e.mode.value===`pause`?e.resume():e.mode.value!==`play`&&e.play(T.value*1e3)}function Bt(){D.value=`idle`;for(let e of Ke.values())e.stop()}function Vt(){Kt(),R(0),k.value=!0}function Ht(e,t){let n=ie(e)/1e3,r=Sk(e,n,t,g[w.value+1]);return r===`follow`&&(T.value=Tt(n,t.startMs,t.endMs)),r}function Ut(){qt();let e=qe.value,t=Ie.value;if(A.value||D.value!==`play`||!e||!t)return;let n=Ht(e,t);n===`continue`?w.value+=1:n===`switch`?(Kt(),It(g[w.value+1].offsetMs)):n===`end`&&Vt()}function Wt(){let e=qe.value;if(!e||D.value===`idle`)return;let t=T.value*1e3,n=Math.abs(ie(e)-t)>Sj*1e3;D.value===`play`?(e.mode.value!==`play`||n)&&e.play(t):(e.mode.value===`idle`||n)&&e.scrub(t,!0)}function Gt(){let e=qe.value;return!e||xk(e,ie(e)/1e3,T.value)}function Kt(){oe.value=!0,Pe=performance.now()}function qt(){let e=Gt();Re.value!==Ue.value&&(e||performance.now()-Ne>bj)&&(Re.value=Ue.value),oe.value&&(e&&Re.value===Ue.value||performance.now()-Pe>xj)&&(oe.value=!1)}function Jt(){if(E.value)E.value=null;else{let e=Be.value;if(!e)return;E.value=e}Wt(),Kt()}function Yt(e,t=!1){t||D.value===`play`?It(e):R(e)}function Zt({event:e,camera:t,timestamp:n},r){it(!1);let i=g.find(t=>t.cameraId===e.cameraId&&n>=t.startMs&&n<=t.endMs);i?Yt(i.offsetMs+n-i.startMs,!0):t&&(se.value={camera:t,timestamp:n,pick:r},Bt(),c&&(c.value=t.name))}function $t(e){o.value.close(),d(e)}function en(e){le={...j.value},st.value&&lt.down(e)}function tn(e){Qe.value&&e.pointerType===`touch`&&e.preventDefault()}function rn(){return Math.hypot(j.value.x-le.x,j.value.y-le.y)>5}function an(e){lt.takeClick()||rn()||ct.value&&nt(e.clientX,e.clientY)}function on(){it(!1),D.value===`play`?Lt():k.value?It(0):D.value===`pause`?zt():It(ze.value)}function sn(e){let t=Ie.value;if(!t)return;if(Kt(),e===-1&&T.value-t.startMs>1500){Yt(t.offsetMs);return}let n=g[w.value+e];n&&Yt(n.offsetMs)}function cn(e){let t=C.value.getBoundingClientRect(),n=Tt(e.clientX-t.left,0,t.width);for(let e=_t.value.length-1;e>=0;e--){let t=_t.value[e];if(n<t.left&&e>0)continue;let r=Tt((n-t.left)/Math.max(t.width,1),0,1);return g[e].offsetMs+r*(g[e].endMs-g[e].startMs)}return 0}function ln(e){C.value&&(C.value.setPointerCapture(e.pointerId),A.value=!0,oe.value=!1,Ae=D.value===`play`,_n(cn(e),!0))}function dn(e){A.value&&_n(cn(e))}function pn(e){A.value&&gn(cn(e))}function mn(){A.value&&gn(Me)}function gn(e){A.value=!1,Ae?It(e):R(e)}function _n(e,t=!1){Me=e;let n=performance.now();!t&&n-je<120?Nt(e):(je=n,R(e))}async function yn(){if(re.value)return;let e=l.value;if(e?.nvrExportEpisode){re.value=!0;try{let t=await e.nvrExportEpisode(n.episode.id);await Yd({url:t.url,filename:t.filename})}catch(e){r.error(`Episode download failed:`,e),i.add({severity:`error`,summary:a(`views.recordings.download_failed`),detail:zL(e),life:5e3})}finally{re.value=!1}}}function bn(){if(se.value)return ce.value?.resolveGoTo();let e=n.cameraById.get(Le.value);if(e)return`/cameras/${e.name}?startTs=${Math.floor(T.value)}`}return G(Re,bt),un(()=>{for(let[e,t]of Ke)t.muted.value=O.value||e!==Re.value}),G(Be,e=>{E.value&&e!==E.value&&(E.value=null,Wt())}),G(Ue,()=>{Ne=performance.now(),qt()}),G(Ge,e=>{for(let[t,n]of Ke)!e.has(t)&&n.mode.value!==`idle`&&n.stop()}),G(He,e=>{e&&!We.value.includes(e.cameraId)&&Ke.get(e.cameraId)?.scrub(e.startMs*1e3,!0)}),G(l,e=>{e&&!ke&&(ke=!0,It(ze.value))},{immediate:!0}),G([l,re,Ze],([e])=>{s.headerActions&&(s.headerActions.value=[...Ze.value?[{icon:Ep,tooltip:a(`views.recordings.episode_trace.open`),onClick:()=>u(n.episode,n.cameraById),disabled:!e}]:[],{icon:Cp,tooltip:a(`views.recordings.download`),onClick:yn,loading:re.value,disabled:!e}])},{immediate:!0}),G(()=>$e.value?{mode:D.value,movedMs:T.value-at().atMs,cameraId:Re.value}:void 0,(e,t)=>{if(!e)return;let n=PE({mode:e.mode,liveRunning:!1,stillFrom:`playback`,movedMs:e.movedMs});n===`release`?it(!1):(n===`follow`||t&&e.cameraId!==t.cameraId)&&rt()}),vn(Ut,250),hn(()=>{for(let[e,t]of Ke){let n=De.get(e);n&&Oe.push(t.claimContainer(n))}setTimeout(()=>ae.value=!1,1500)}),Fn(()=>{Bt();for(let e of Oe)e()}),t({resolveGoTo:bn}),(t,n)=>{let r=GO,i=Bx,o=ti,s=gk,c=ci,l=lx,u=fx,d=pk,p=Sy,h=uk,_=rx,y=ex,T=np,D=Xy,k=Pn(`tooltip`);return H(se)?(Y(),F(r,{key:0,ref_key:`matchViewRef`,ref:ce,camera:H(se).camera,"event-timestamp":H(se).timestamp,"similar-pick":H(se).pick},null,8,[`camera`,`event-timestamp`,`similar-pick`])):(Y(),B(`div`,{key:1,class:Z([`episode-player-container`,{"with-similar":H(fe)&&!H(f)}])},[J(`div`,{ref_key:`stageRef`,ref:x,class:Z([`relative w-full bg-black`,H(f)&&H(he)?`overflow-visible`:`overflow-hidden`]),style:W(H(f)&&H(ge)||{aspectRatio:H(pt)})},[z(H(rr),{pan:H(j),"onUpdate:pan":n[4]||=e=>Qt(j)?j.value=e:null,zoom:H(ee),"onUpdate:zoom":n[5]||=e=>Qt(ee)?ee.value=e:null,disabled:H(f),"pan-enabled":H(ee)>1,"enable-control-button":!1,"dbl-click-enabled":!1,"min-zoom":1,"max-zoom":wj,selector:H(f)?`disabled`:`[data-zoomable-content='${H(Fe)}']`,"zoom-origin":`pointer`,class:Z([`absolute inset-0 flex items-center justify-center`,{"zoom-constraining":H(ne),"zoom-dragging":H(M),"resizable-mode touch-none":H(f)}]),onPanned:wt,onZoom:wt,onDblclick:n[6]||=e=>H(f)?H(Se)(e):bt(),onPointerdown:xt,onTouchstart:H(ye),onTouchmove:H(be),onTouchend:H(xe),onMousedown:H(Ce),onWheel:H(we)},{default:X(()=>[J(`div`,{ref_key:`stageContentRef`,ref:S,"data-zoomable-content":H(Fe),class:Z([`relative shrink-0`,{"w-full h-full":!H(f),"cursor-crosshair":H(ct)}]),style:W(H(f)?H(_e):void 0),onPointerdown:en,onPointermove:n[1]||=(...e)=>H(lt).move&&H(lt).move(...e),onPointerup:n[2]||=(...e)=>H(lt).up&&H(lt).up(...e),onPointercancel:n[3]||=(...e)=>H(lt).up&&H(lt).up(...e),onContextmenu:tn,onClick:an},[(Y(),B(U,null,K(m,e=>fn(J(`div`,{key:e,ref_for:!0,ref:t=>Mt(e,t),class:`absolute inset-0`},null,512),[[Xt,e===H(Re)]])),64)),H($e)&&H(Xe)?(Y(),F(i,{key:0,class:`z-[3]`,camera:H(Xe),frame:H(et),point:H(tt),still:``,continuable:``,onPick:H(ot),onContinue:n[0]||=e=>H(it)(!0)},null,8,[`camera`,`frame`,`point`,`onPick`])):q(``,!0)],46,ej)]),_:1},8,[`pan`,`zoom`,`disabled`,`pan-enabled`,`selector`,`class`,`onTouchstart`,`onTouchmove`,`onTouchend`,`onMousedown`,`onWheel`]),J(`div`,{class:Z([`absolute inset-0 z-[3] bg-black pointer-events-none transition-opacity duration-300`,H(oe)?`opacity-100`:`opacity-0`])},null,2),H(dt)?(Y(),B(`div`,tj,[z(o,{class:`w-[30px] h-[30px] m-0`,"stroke-width":`5`})])):H(ft)?(Y(),B(`div`,nj,[J(`span`,rj,L(H(ft)),1)])):q(``,!0),z(Rn,{name:`fade-2`},{default:X(()=>[H(mt)?(Y(),B(`div`,{key:0,class:Z([`zoom-minimap`,{"zoom-minimap-raised":H(ut)}])},[J(`div`,{class:`zoom-minimap-viewport`,style:W(H(mt))},null,4)],2)):q(``,!0)]),_:1}),z(Rn,{name:`fade-2`},{default:X(()=>[H(ut)&&!H($e)?(Y(),B(`div`,ij,[J(`span`,aj,L(H(ht)),1),J(`span`,oj,L(H(gt)),1)])):q(``,!0)]),_:1}),z(Rn,{name:`fade-2`},{default:X(()=>[H(ut)?(Y(),B(`div`,sj,[n[14]||=J(`div`,{class:`absolute inset-0 bg-gradient-to-t from-black/70 to-transparent pointer-events-none`},null,-1),J(`div`,cj,[J(`div`,lj,[z(c,{fluid:``,text:``,severity:`contrast`,class:`control-bar-btn`,onClick:n[7]||=e=>sn(-1)},{icon:X(()=>[z(s,{class:`w-[18px] h-[18px]`})]),_:1}),z(c,{fluid:``,text:``,severity:`contrast`,class:`control-bar-btn`,onClick:on},{icon:X(()=>[H(Ye)?(Y(),F(l,{key:0,class:`w-[18px] h-[18px]`})):(Y(),F(u,{key:1,class:`w-[18px] h-[18px]`}))]),_:1}),z(c,{fluid:``,text:``,severity:`contrast`,class:`control-bar-btn`,onClick:n[8]||=e=>sn(1)},{icon:X(()=>[z(d,{class:`w-[18px] h-[18px]`})]),_:1})]),n[13]||=J(`div`,{class:`flex-1`},null,-1),H(Qe)?fn((Y(),F(c,{key:0,fluid:``,text:``,severity:`contrast`,class:Z([`control-bar-btn`,{"!text-primary":H(fe)}]),onClick:n[9]||=e=>H(de).toggleView()},{icon:X(()=>[z(p,{class:`w-[18px] h-[18px]`})]),_:1},8,[`class`])),[[k,{value:H(a)(`components.similar.search`)},void 0,{top:!0}]]):q(``,!0),H(Be)||H(E)?fn((Y(),F(c,{key:1,fluid:``,text:``,severity:`contrast`,class:Z([`control-bar-btn`,{"angle-active":H(E)}]),onClick:Jt},{icon:X(()=>[z(h,{class:`w-[18px] h-[18px]`})]),_:1},8,[`class`])),[[k,{value:H(a)(`views.recordings.second_angle`)},void 0,{top:!0}]]):q(``,!0),z(c,{fluid:``,text:``,severity:`contrast`,class:`control-bar-btn`,onClick:n[10]||=e=>O.value=!H(O)},{icon:X(()=>[H(O)?(Y(),F(y,{key:1,class:`w-[18px] h-[18px]`})):(Y(),F(_,{key:0,class:`w-[18px] h-[18px]`}))]),_:1})])])):q(``,!0)]),_:1})],6),J(`div`,uj,[H(f)?(Y(),B(`div`,{key:0,class:`absolute left-0 right-0 top-0 h-3 flex items-center justify-center cursor-ns-resize touch-none z-20`,onMousedown:n[11]||=(...e)=>H(Te)&&H(Te)(...e),onTouchstartPassive:n[12]||=(...e)=>H(Ee)&&H(Ee)(...e)},[...n[15]||=[J(`div`,{class:`w-9 h-1 rounded-full bg-surface-400/50`},null,-1)]],32)):q(``,!0),J(`div`,{ref_key:`stripRef`,ref:C,class:`relative h-[36px] rounded-lg bg-white/5 cursor-pointer select-none touch-none overflow-hidden`,onPointerdown:ln,onPointermove:dn,onPointerup:pn,onPointercancel:mn},[(Y(!0),B(U,null,K(H(g),(e,t)=>(Y(),B(`div`,{key:t,class:Z([`absolute top-[3px] bottom-[3px] rounded-[4px] flex items-center justify-center overflow-hidden pointer-events-none`,t===H(w)?`bg-primary-500/60`:`bg-primary-500/25`]),style:W({left:`${H(_t)[t].left+1}px`,width:`${Math.max(H(_t)[t].width-2,2)}px`})},[H(_t)[t].width>26?(Y(),B(`span`,dj,L(I(e.cameraId)),1)):q(``,!0)],6))),128)),J(`div`,{class:`absolute top-0 bottom-0 w-[2px] bg-white z-[2] pointer-events-none rounded-full`,style:W({left:`${H(vt)}px`})},null,4)],544),J(`div`,fj,[J(`span`,null,L(jt(H(v))),1),J(`span`,null,L(jt(H(b))),1)])]),e.episode.description?.description?(Y(),B(`div`,pj,[z(T,{class:`w-4 h-4 shrink-0 mt-0.5 text-color`}),J(`p`,mj,L(e.episode.description.description),1)])):q(``,!0),H(fe)?(Y(),F(D,{key:1,layout:`grid`,class:Z(H(f)?`similar-below`:`similar-side`),onOpen:Zt,onShowAll:$t},null,8,[`class`])):q(``,!0)],2))}}}),[[`__scopeId`,`data-v-ad3feef8`]]);function Ej(){let e=Mm();function t(t,n){let r=t.members[0],i=r?n.get(r.cameraId):void 0;if(i)return e.openComponentDialog(Tj,{data:{title:t.description?.title??i.name,dedupeKey:`episode:${t.id}`,stayActive:!0,hideCancelButton:!0,hideConfirmButton:!0,contentProps:{episode:t,cameraById:n},headerActions:[],draggable:!0,blockDragOnSelectors:[`.p-dialog-body`],dismissableMask:!1,modal:!1,dialogContentClass:`!px-0 h-full`,goTo:`/cameras/${i.name}?startTs=${t.startTime}`},dialogSize:{desktop:{maxWidth:`900px`,maxHeight:`calc(100vh - max(1rem, var(--safe-area-inset-top)) - max(1rem, var(--safe-area-inset-bottom)))`,width:`60vw`}}})}return{openEpisodePlayer:t}}var Dj={key:0,class:`card-skeleton absolute inset-0 rounded-xl`},Oj={key:2,class:`w-full h-full flex items-center justify-center bg-neutral-800/80`},kj={key:4,class:`absolute top-0 left-0 right-0 p-2 bg-gradient-to-b from-black/80 to-transparent z-[3]`},Aj={class:`flex items-center gap-1.5`},jj={class:`text-xs font-semibold text-white truncate min-w-0 flex-1`},Mj=[`title`],Nj=[`title`,`disabled`],Pj={class:`text-[10px] text-white/70`},Fj={class:`text-xs text-white font-medium opacity-0 group-hover:opacity-100 transition-opacity duration-200 line-clamp-2 max-w-[130px] px-1 text-center`},Ij={key:6,class:`absolute inset-0 z-[4] flex items-center justify-center pointer-events-none`},Lj={key:7,class:`absolute bottom-2 inset-x-2 flex justify-center z-[4] pointer-events-none`},Rj={class:`flex max-w-full min-w-0 text-[10px] font-semibold text-white bg-black/60 px-1.5 py-0.5 rounded-md whitespace-nowrap`,style:{"font-variant-numeric":`tabular-nums`}},zj={class:`min-w-0 truncate`},Bj={class:`shrink-0`},Vj={key:0,class:`mt-2 text-center`},Hj={class:`text-xs text-muted`},Uj=Kd(Gn({__name:`EpisodeCard`,props:{episode:{},cameraById:{},clickDisabled:{type:Boolean},fluid:{type:Boolean}},setup(e){let t=e,n=ar(),i=Go(),{t:a}=St(),{openEpisodePlayer:o}=Ej(),{openEpisodeTrace:s}=ZA(),{plugin:c}=y(`@camera.ui/camera-ui-nvr`),u=r(`@camera.ui/camera-ui-nvr`),{mounted:d,toggleOverlay:f}=Nm(),p=nn(Re,void 0),m=Tn(`cardRef`),h=Tn(`previewCanvasRef`),g=Tn(`cardMenuRef`),_=P(void 0),v=P(`loading`),b=P(!1),x=P(!1),S=P(null),C=P(!1),w=Im(m,()=>se(!0),()=>ce()),T,E=!1,D=V(()=>Af(void 0,`admin`)),O=V(()=>S.value??t.episode.favorite??!1),k=V(()=>t.episode.description?.title??t.episode.group??``),A=V(()=>{let e=(t.episode.blocks??[]).filter(e=>!e.secondAngle);return e.length>0?e.map(e=>({cameraId:e.cameraId,startMs:e.startMs,endMs:e.endMs})):[...t.episode.members].sort((e,t)=>e.firstSeen-t.firstSeen).map(e=>({cameraId:e.cameraId,startMs:e.firstSeen,endMs:e.lastSeen}))}),j=V(()=>{let e=new Map;for(let n of A.value){let r=t.cameraById.get(n.cameraId)?.zones?.privacy;r?.length&&e.set(n.cameraId,r)}return e}),ee=V(()=>[...D.value?[{key:`trace`,label:a(`views.recordings.episode_trace.open`),icon:Ep,onClick:()=>N()}]:[],{key:`download`,label:a(`views.recordings.download`),icon:Cp,loading:b.value,onClick:()=>me()}]),te=V(()=>p?C.value?a(`views.recordings.no_preview`):x.value?p.status.value===`unavailable`?a(`views.recordings.no_preview`):p.status.value!==`playing`||!p.previewTimeMs.value?``:M(p.previewTimeMs.value):``:``),ne=V(()=>{if(p&&!C.value&&x.value&&p.status.value===`playing`)return t.cameraById.get(p.previewCameraId.value)?.name}),re=V(()=>TL(t.episode.startTime)),ie=V(()=>new Date(t.episode.startTime).toLocaleTimeString([],{hour:`2-digit`,minute:`2-digit`}));async function ae(e=3){let n=await u.loadEpisodeMosaic(t.episode.id);if(n)_.value=l(n),v.value=`loaded`;else{if(e>0)return await new Promise(e=>setTimeout(e,1e3)),ae(e-1);v.value=`empty`}}function oe(){Np(g.value?.hide)}function M(e){let t=new Date(e);return`${String(t.getHours()).padStart(2,`0`)}:${String(t.getMinutes()).padStart(2,`0`)}:${String(t.getSeconds()).padStart(2,`0`)}`}function se(e=!1){if(!p)return;let n=h.value;n&&(A.value.length===0?C.value=!0:(x.value=!0,p.onHoverStartSequence(n,`episode:${t.episode.id}`,A.value,j.value,{immediate:e})))}function ce(){C.value=!1,p&&x.value&&(x.value=!1,p.onHoverEnd())}function le(){w.blocksMouseEnter()||se()}function ue(){C.value=!1,p&&(x.value=!1,p.onHoverEnd())}function de(){w.consumesClick()||t.clickDisabled||(T=o(t.episode,t.cameraById))}async function fe(e){ce(),await f(`menu`,()=>g.value?.toggleMenu(e))}function N(){s(t.episode,t.cameraById)}async function pe(){let e=!O.value;S.value=e;try{await u.setEpisodeFavorite(t.episode.id,e)}catch(e){S.value=null,i.add({severity:`error`,detail:zL(e),life:5e3})}}async function me(){if(b.value)return;let e=c.value;if(e?.nvrExportEpisode){b.value=!0;try{let n=await e.nvrExportEpisode(t.episode.id);await Yd({url:n.url,filename:n.filename})}catch(e){n.error(`Episode download failed:`,e),i.add({severity:`error`,summary:a(`views.recordings.download_failed`),detail:zL(e),life:5e3})}finally{b.value=!1}}}let{stop:he}=Ot(m,([e])=>{e.isIntersecting&&!E&&(E=!0,he(),ae())},{threshold:.1});return Fn(()=>{he(),ce(),T?.close()}),(t,n)=>{let r=qd,i=ag,a=mp,o=dp,s=ap,c=cp;return Y(),B(`div`,{ref_key:`cardRef`,ref:m,class:`camera-event-card relative group cursor-pointer`,onClickCapture:oe,onClick:de,onMouseenter:le,onMouseleave:ue},[J(`div`,{class:Z([`bg-neutral-900 rounded-xl overflow-hidden relative`,e.fluid?`w-full aspect-square`:`w-[140px] h-[140px]`])},[H(v)===`loading`?(Y(),B(`div`,Dj)):H(_)?(Y(),F(r,{key:1,src:H(_),alt:e.episode.description?.title,class:`pointer-events-none w-full h-full transition-transform duration-300 group-hover:scale-105`,"image-style":{objectFit:`cover`},"image-container-class":`w-full h-full`},null,8,[`src`,`alt`])):(Y(),B(`div`,Oj,[z(i,{class:`w-8 h-8 text-white/20`})])),H(p)?fn((Y(),B(`canvas`,{key:3,ref_key:`previewCanvasRef`,ref:h,class:`absolute inset-0 w-full h-full object-cover pointer-events-none z-[1]`},null,512)),[[Xt,H(x)]]):q(``,!0),e.fluid?(Y(),B(`div`,kj,[J(`div`,Aj,[J(`p`,jj,L(H(k)),1),H(D)&&!e.clickDisabled?(Y(),B(`button`,{key:0,title:H(O)?t.$t(`views.recordings.unfavorite`):t.$t(`views.recordings.favorite`),type:`button`,class:`card-icon-button w-5 h-5 shrink-0`,onClick:Bn(pe,[`stop`]),onMouseenter:ce},[H(O)?(Y(),F(a,{key:0,class:`w-3 h-3 text-yellow-400`})):(Y(),F(o,{key:1,class:`w-3 h-3 text-white`}))],40,Mj)):q(``,!0),e.clickDisabled?q(``,!0):(Y(),B(`button`,{key:1,title:t.$t(`views.recordings.more_actions`),type:`button`,class:`card-icon-button w-5 h-5 shrink-0`,disabled:H(b),onClick:Bn(fe,[`stop`]),onMouseenter:ce},[H(b)?(Y(),F(s,{key:0,class:`w-3 h-3 text-white`})):(Y(),F(c,{key:1,class:`w-3 h-3 text-white`}))],40,Nj))]),J(`p`,Pj,L(H(re)),1)])):(Y(),B(`div`,{key:5,class:Z([`absolute inset-0 bg-black/0 group-hover:bg-black/40 transition-all duration-200 flex flex-col items-center justify-end gap-1 z-[2] pointer-events-none`,H(te)?`pb-8`:`pb-2`])},[J(`span`,Fj,L(e.episode.description?.title),1)],2)),H(p)&&H(x)&&H(p).isLoading.value?(Y(),B(`div`,Ij,[z(s,{class:`w-7 h-7 text-white`})])):q(``,!0),H(te)?(Y(),B(`div`,Lj,[J(`span`,Rj,[H(ne)?(Y(),B(U,{key:0},[J(`span`,zj,L(H(ne)),1),n[0]||=J(`span`,{class:`shrink-0 px-1`},`·`,-1)],64)):q(``,!0),J(`span`,Bj,L(H(te)),1)])])):q(``,!0)],2),e.fluid?q(``,!0):(Y(),B(`div`,Vj,[J(`p`,Hj,L(H(ie)),1)])),e.fluid&&H(d).menu?(Y(),F(rm,{key:1,ref_key:`cardMenuRef`,ref:g,items:H(ee),popover:{pt:{content:{class:`p-0! rounded-xl! overflow-hidden!`}}}},null,8,[`items`])):q(``,!0)],544)}}}),[[`__scopeId`,`data-v-632bf5f5`]]);function Wj(e,t,n={}){let{isTouch:r}=Nd(),i=P(0),a=P(0),o=P(!0),s=P(!1),{width:c}=yt(e),{start:l}=En(()=>{s.value=!1},100,{immediate:!1}),u=V(()=>({marginLeft:`${-i.value}px`,width:`100dvw`,paddingLeft:`${i.value}px`})),d=V(()=>{let e=i.value+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:`${-i.value}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%)`}});function f(){let t=e.value;t&&(i.value=t.getBoundingClientRect().left)}function p(){let e=t.value;e&&(a.value=e.scrollLeft,o.value=e.scrollLeft<5)}function m(){let e=t.value;e&&(a.value=0,an(()=>{e.scrollTo({left:0,behavior:`smooth`})}))}function h(){cn(t,{disableTextSelect:!0,threshold:10,onSwipe:e=>{R(n.disabled)||(s.value=!0,t.value?.classList.add(`cursor-grabbing`),t.value?.scrollBy({left:-e.movementX,behavior:`smooth`}))},onSwipeEnd:()=>{t.value?.classList.remove(`cursor-grabbing`),l()}})}return $t(window,`resize`,f),$t(t,`scroll`,p,{passive:!0}),$t(t,`wheel`,e=>{R(n.disabled)||Math.abs(e.deltaY)>Math.abs(e.deltaX)&&(e.preventDefault(),t.value?.scrollBy({left:e.deltaY}))},{passive:!1}),G(c,()=>f()),hn(()=>{f();let e=document.getElementById(`container`);e&&$t(e,`transitionend`,f),r.value||h()}),{containerWidth:c,bleedLeft:i,bleedStyle:u,fadeStyle:d,scrollLeft:a,isAtStart:o,isSwiping:s,scrollToStart:m}}var Gj={key:0,class:`absolute top-[50px] left-[50%] translate-x-[-50%] z-2 px-3 py-2 text-shadow-md`},Kj={class:`text-sm text-color font-medium`},qj=152,Jj=172,Yj=5,Xj=Gn({__name:`CuiCameraEvents`,props:{cameras:{},hiddenTypes:{},pending:{type:Boolean}},setup(e){let t=e;Qh(20);let n,{cameras:r}=jt(t),i=Tn(`containerRef`),a=Tn(`scrollContainerRef`),{containerWidth:o,bleedLeft:s,bleedStyle:c,fadeStyle:l,scrollLeft:u,isAtStart:d,isSwiping:f,scrollToStart:p}=Wj(i,a,{disabled:()=>C.value.length===0&&(y.value||T.value||E.value)}),m=V(()=>{let e=new Map;if(r.value)for(let t of r.value)e.set(t._id,t.name);return e}),h=V(()=>{let e=new Map;if(r.value)for(let t of r.value)e.set(t._id,t);return e}),g=V(()=>r.value?.map(e=>e._id)??[]),_=V(()=>{let e=o.value||800;return Math.ceil(e/qj)+10}),{segmentItems:v,isLoading:y,hasMore:b,loadMore:x,pluginUnavailable:S}=pt({availableCameraIds:g,realtime:!0,pageSize:_.value,filter:()=>({hasDetections:!0,hiddenTypes:t.hiddenTypes}),withEpisodes:!0,enabled:()=>!t.pending}),C=V(()=>v.value),w=V(()=>Math.ceil((o.value||800)/qj)),T=V(()=>C.value.length<w.value&&b.value),E=V(()=>!y.value&&C.value.length===0&&!b.value),D=V(()=>C.value.length===0?15:5),O=V(()=>Math.max(0,Math.floor(u.value/qj)-Yj)),k=V(()=>{let e=w.value;return Math.min(C.value.length,Math.ceil(u.value/qj)+e+Yj)}),A=V(()=>C.value.slice(O.value,k.value)),j=V(()=>O.value*qj);return tn(a,x,{distance:300,direction:`right`,canLoadMore:()=>b.value}),G(()=>C.value[0]?.key,e=>{if(!e||e===n)return;let t=n===void 0;if(n=e,t)return;let r=a.value,i=r?.scrollLeft||0;an(i<5?()=>{a.value?.scrollTo({left:0,behavior:`smooth`})}:()=>{r&&(r.scrollLeft=i+qj)})}),G([T,()=>y.value],([e,t])=>{e&&!t&&x()}),(e,t)=>{let n=ii,r=Uj,o=sk,u=qf,g=ci;return Y(),B(`div`,{ref_key:`containerRef`,ref:i,class:`relative min-w-0`,style:W({height:`${Jj}px`})},[J(`div`,{ref_key:`scrollContainerRef`,ref:a,class:Z([`absolute top-0 overflow-x-auto overflow-y-hidden hide-scrollbar overscroll-x-contain`,{"overflow-x-hidden!":H(C).length===0&&(H(y)||H(T)||H(E))}]),style:W(H(c))},[J(`div`,{class:`relative`,style:W({width:`${H(C).length*qj}px`,height:`${Jj}px`})},[J(`div`,{class:`absolute top-0 left-0 flex`,style:W({transform:`translateX(${H(j)}px)`})},[H(C).length===0&&(H(y)||H(T)||H(E))?(Y(!0),B(U,{key:0},K(H(D),e=>(Y(),B(`div`,{key:`skeleton-${e}`,class:`event-card flex flex-col items-center justify-center w-[140px] mr-3`},[z(n,{class:`rounded-xl`,width:`140px`,height:`140px`,animation:H(E)?`none`:`wave`},null,8,[`animation`]),z(n,{class:`mt-2`,width:`50px`,height:`16px`,animation:H(E)?`none`:`wave`},null,8,[`animation`])]))),128)):(Y(!0),B(U,{key:1},K(H(A),e=>(Y(),B(`div`,{key:e.key,class:`event-card flex-none w-[140px] mr-3`},[e.episode?(Y(),F(r,{key:0,episode:e.episode,"camera-by-id":H(h),"click-disabled":H(f)},null,8,[`episode`,`camera-by-id`,`click-disabled`])):(Y(),F(o,{key:1,event:e.event,"seg-index":e.segIndex,segment:e.segment,live:e.live,"camera-name":H(m).get(e.event.cameraId),camera:H(h).get(e.event.cameraId),"click-disabled":H(f)},null,8,[`event`,`seg-index`,`segment`,`live`,`camera-name`,`camera`,`click-disabled`]))]))),128))],4)],4)],6),H(E)&&!H(y)&&!H(T)?(Y(),B(`div`,Gj,[J(`span`,Kj,L(H(S)?e.$t(`components.camera_events.events_unavailable`):e.$t(`components.camera_events.no_events`)),1)])):q(``,!0),!H(d)&&H(s)>0?(Y(),B(`div`,{key:1,class:`absolute pointer-events-none z-1`,style:W(H(l))},null,4)):q(``,!0),z(Rn,{name:`fade-2`},{default:X(()=>[!H(d)&&H(C).length>0?(Y(),F(g,{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:H(p)},{icon:X(()=>[z(u,{width:`100%`,height:`100%`})]),_:1},8,[`onClick`])):q(``,!0)]),_:1})],4)}}}),Zj=Gn({__name:`CuiTopbarSlot`,props:{position:{}},setup(e){let t=e,{smBreakpoint:n}=Md(),{registerSlot:r}=hd();return r(t.position),(t,r)=>H(n)?(Y(),F(wt,{key:0,to:`#cui-topbar-${e.position}`,defer:``},[dn(t.$slots,`default`)],8,[`to`])):q(``,!0)}}),Qj={viewBox:`0 0 12 12`,width:`1.2em`,height:`1.2em`};function $j(e,t){return Y(),B(`svg`,Qj,[...t[0]||=[J(`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 eM=I({name:`fluent-record-stop-12-filled`,render:$j}),tM={viewBox:`0 0 20 20`,width:`1.2em`,height:`1.2em`};function nM(e,t){return Y(),B(`svg`,tM,[...t[0]||=[J(`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 rM=I({name:`fluent-select-all-on-20-filled`,render:nM}),iM={viewBox:`0 0 32 32`,width:`1.2em`,height:`1.2em`};function aM(e,t){return Y(),B(`svg`,iM,[...t[0]||=[J(`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 oM=I({name:`fluent-video-32-filled`,render:aM}),sM={viewBox:`0 0 32 32`,width:`1.2em`,height:`1.2em`};function cM(e,t){return Y(),B(`svg`,sM,[...t[0]||=[J(`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 lM=I({name:`fluent-video-off-32-filled`,render:cM}),uM={viewBox:`0 0 20 20`,width:`1.2em`,height:`1.2em`};function dM(e,t){return Y(),B(`svg`,uM,[...t[0]||=[J(`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 fM=I({name:`fluent-video-recording-20-filled`,render:dM}),pM={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function mM(e,t){return Y(),B(`svg`,pM,[...t[0]||=[J(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-miterlimit":`10`,"stroke-width":`1.5`,d:`M21.25 12H8.895m-4.361 0H2.75m18.5 6.607h-5.748m-4.361 0H2.75m18.5-13.214h-3.105m-4.361 0H2.75m13.214 2.18a2.18 2.18 0 1 0 0-4.36a2.18 2.18 0 0 0 0 4.36Zm-9.25 6.607a2.18 2.18 0 1 0 0-4.36a2.18 2.18 0 0 0 0 4.36Zm6.607 6.608a2.18 2.18 0 1 0 0-4.361a2.18 2.18 0 0 0 0 4.36Z`},null,-1)]])}var hM=I({name:`mage-filter`,render:mM}),gM={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function _M(e,t){return Y(),B(`svg`,gM,[...t[0]||=[J(`path`,{fill:`currentColor`,d:`M22 18.605a.75.75 0 0 1-.75.75h-5.1a2.93 2.93 0 0 1-5.66 0H2.75a.75.75 0 1 1 0-1.5h7.74a2.93 2.93 0 0 1 5.66 0h5.1a.75.75 0 0 1 .75.75m0-13.21a.75.75 0 0 1-.75.75H18.8a2.93 2.93 0 0 1-5.66 0H2.75a.75.75 0 1 1 0-1.5h10.39a2.93 2.93 0 0 1 5.66 0h2.45a.74.74 0 0 1 .75.75m0 6.6a.74.74 0 0 1-.75.75H9.55a2.93 2.93 0 0 1-5.66 0H2.75a.75.75 0 1 1 0-1.5h1.14a2.93 2.93 0 0 1 5.66 0h11.7a.75.75 0 0 1 .75.75`},null,-1)]])}var vM=I({name:`mage-filter-fill`,render:_M}),yM={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function bM(e,t){return Y(),B(`svg`,yM,[...t[0]||=[J(`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 xM=I({name:`mdi-lock-open`,render:bM}),SM={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function CM(e,t){return Y(),B(`svg`,SM,[...t[0]||=[J(`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 wM=I({name:`mdi-view-agenda`,render:CM}),TM={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function EM(e,t){return Y(),B(`svg`,TM,[...t[0]||=[J(`path`,{fill:`currentColor`,d:`M3 11h8V3H3m0 18h8v-8H3m10 8h8v-8h-8m0-10v8h8V3`},null,-1)]])}var DM=I({name:`mdi-view-grid`,render:EM}),OM={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function kM(e,t){return Y(),B(`svg`,OM,[...t[0]||=[J(`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 AM=I({name:`tabler-dots-filled`,render:kM});function jM(){let e=new ps,t=xL(),{user:n}=Zt(t),r=V(()=>n.value?.username??``),{data:i,isError:a}=e.getHiddenEventTypesQuery(r),{mutateAsync:o,isPending:s}=e.putHiddenEventTypesQuery(),c=V(()=>i.value??{}),l=V(()=>Object.values(c.value).some(e=>e.length>0)),u=V(()=>!r.value||i.value!==void 0||a.value);function d(e){return o({username:r.value,hidden:e})}return{hidden:c,active:l,ready:u,saving:s,save:d}}function MM(){let e=new ps,t=$n(),n=xL(),{user:r}=Zt(n),i=V(()=>r.value?.username??``),{data:a}=e.getUserQuery(i),o=P(),s=V(()=>new Set(o.value??a.value?.preferences?.home?.hiddenCameras??[]));async function c(e){let n=new Set(s.value);n.delete(e)||n.add(e),o.value=[...n];try{await Xo({username:i.value,userData:{preferences:{home:{hiddenCameras:o.value}}}}),await t.invalidateQueries({queryKey:[`users`,i.value]})}finally{o.value=void 0}}return{hiddenIds:s,toggle:c}}function NM(e,t){let n=P(!1),r=P(new Set),i=P(!1),a=V(()=>R(e).filter(e=>r.value.has(t(e)))),o=V(()=>{let n=R(e);return n.length>0&&n.every(e=>r.value.has(t(e)))});function s(){n.value=!0}function c(){n.value=!1,r.value=new Set}function l(){r.value=o.value?new Set:new Set(R(e).map(t))}function u(e){let t=new Set(r.value);t.has(e)?t.delete(e):t.add(e),r.value=t}return{selectionMode:n,selectedIds:r,selectedItems:a,allSelected:o,bulkBusy:i,enterSelectionMode:s,exitSelectionMode:c,toggleSelectAll:l,toggleSelection:u}}var PM={class:`flex flex-col`},FM={class:`flex flex-row items-center justify-center gap-2`},IM={key:0,class:`events-section mb-4`},LM={key:0,class:`page-title mb-2`},RM={class:`flex flex-col flex-1 overflow-x-hidden`},zM={key:0,class:`page-title`},BM={class:`flex flex-1 min-h-0 flex-col items-center justify-center w-full gap-4 py-16`,key:`no-cameras`},VM={class:`w-16 h-16 rounded-full bg-primary-500/10 flex items-center justify-center`},HM={class:`flex flex-col items-center gap-1 max-w-[400px] text-center`},UM={class:`text-color font-semibold text-base`},WM={class:`text-muted text-sm`},GM={key:`all-hidden`,class:`flex flex-1 min-h-0 items-center justify-center w-full py-16`},KM={class:`text-muted text-sm text-center max-w-[400px]`},qM={key:`defaultView`},JM={key:`groupedView`,class:`flex flex-col gap-6`},YM={class:`text-sm font-semibold text-muted uppercase tracking-wide mb-2`},XM=300,ZM=Kd(Gn({__name:`Home`,setup(e){let t=hm(()=>zt(()=>import(`./CameraConsole-BubkOXIn.js`),__vite__mapDeps([7,1,8,9,10,11,12,13,14,15]),import.meta.url)),n=hm(()=>zt(()=>import(`./RecentEventsFilter-BFlbTCVN.js`),__vite__mapDeps([16,17,1,18,5,19,10,20,21]),import.meta.url)),i=new Uh,a=HE(),o=Mm(),{openEpisodePlayer:s}=Ej(),c=r(`@camera.ui/camera-ui-nvr`),{plugin:l}=y(`@camera.ui/camera-ui-nvr`),u=Go(),d=$n(),f=Vn(),p=Jt(),{t:m}=St(),{smBreakpoint:h}=Md(),{isTouch:g}=Nd(),{width:_,height:v}=Ad(),{hidden:b,active:x,ready:S,saving:C,save:w}=jM(),{hiddenIds:T,toggle:E}=MM(),D=Cd(),{uiSettings:O}=Zt(D),{data:k,isLoading:A}=i.getCamerasQuery({page:1,pageSize:-1}),j=Rt({}),ee=0,te,ne,re=V(()=>A.value&&!k.value),ie=V(()=>Af(void 0,`admin`)),ae=V(()=>g.value?pi:di),oe=V(()=>g.value?{enableMouseEvents:!0}:void 0),M=V(()=>O.value.cameras.viewMode??`default`),se=V(()=>!O.value.cameras.dragDisabled),ce=V(()=>`repeat(auto-fill, minmax(${h.value?`100%`:`300px`}, 1fr))`),le=V(()=>{let e=ce.value;return fe.value.length<2?`${e} 50%`:e}),ue=V(()=>{let e=h.value?1:Math.max(1,Math.floor(_.value/300)),t=_.value/e*9/16+8;return e*Math.max(1,Math.ceil(v.value/t))}),de=V(()=>k.value?.result?pe(k.value.result,O.value.cameras.order||[]):[]),fe=V(()=>se.value?de.value:de.value.filter(e=>!T.value.has(e._id))),N=V(()=>{if(!k.value?.result)return[];let e=O.value.cameras.groupOrder||{},t=new Map;for(let e of k.value.result){if(!se.value&&T.value.has(e._id))continue;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:pe(i,t)})}return n.sort((e,t)=>e.room===`Default`?-1:t.room===`Default`?1:e.room.localeCompare(t.room)),n});function pe(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 me(){O.value.cameras.viewMode=M.value==="default"?`grouped`:`default`}function he(e){let t=de.value.find(t=>t._id===e);return{camera:t,index:t?de.value.indexOf(t):-1}}function ge(e,t){let{index:n}=he(e);if(n===-1||n===t)return;let r=de.value.map(e=>e._id),[i]=r.splice(n,1);r.splice(t,0,i),O.value.cameras.order=r}function _e(e,t){let n=N.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 ve(e,t,n){let{index:r}=_e(e,t);if(r===-1||r===n)return;let i=N.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={...O.value.cameras.groupOrder||{}};s[e]=a,O.value.cameras.groupOrder=s}let{selectionMode:ye,selectedIds:be,selectedItems:xe,allSelected:Se,bulkBusy:Ce,enterSelectionMode:we,exitSelectionMode:Te,toggleSelectAll:Ee,toggleSelection:De}=NM(fe,e=>e._id),Oe=V(()=>xe.value.length>0&&xe.value.every(e=>e.disabled)),ke=V(()=>xe.value.length>0&&xe.value.every(e=>e.detectionSettings?.snooze)),Ae=V(()=>xe.value.length>0&&xe.value.every(e=>e.recordingSettings?.enabled!==!1));function je(){ee=Date.now()}function Me(e){Date.now()-ee<XM||(ye.value?De(e._id):p.push(`/cameras/${e.name}`))}async function Ne(e){try{await E(e._id)}catch(e){u.add({severity:`error`,detail:zL(e),life:5e3})}}async function Pe(e,t){if(xe.value.length&&!Ce.value){Ce.value=!0;try{let n=await e();n.failed.length?u.add({severity:`error`,detail:n.failed.map(e=>`${e.id}: ${e.error}`).join(`, `),life:5e3}):u.add({severity:`success`,detail:t,life:3e3})}catch(e){u.add({severity:`error`,detail:zL(e),life:4e3})}finally{Ce.value=!1,await d.refetchQueries({queryKey:[`camerasList`]})}}}async function Fe(){let e=!Oe.value,t=xe.value.map(e=>e.name);await Pe(()=>Ch({cameranames:t,cameraData:{disabled:e}}),m(`components.toast.camera_updated`))}async function Ie(){let e=!ke.value,t=xe.value.map(e=>e.name);await Pe(()=>Ch({cameranames:t,cameraData:{detectionSettings:{snooze:e}}}),m(`components.toast.camera_updated`))}async function Le(){let e=!Ae.value,t=xe.value.map(e=>e.name);await Pe(()=>Ch({cameranames:t,cameraData:{recordingSettings:{enabled:e}}}),m(`components.toast.camera_updated`))}function Re(){xe.value.length&&o.openTextDialog({data:{title:m(`components.dialog.title.confirm`),contentText:m(`components.dialog.message.confirm_remove_selected`,{count:xe.value.length}),confirmText:m(`components.form.button.remove`),confirmButtonProps:{severity:`danger`}},onConfirm:async()=>{let e=xe.value.map(e=>e.name);await Pe(()=>wh({cameranames:e}),m(`components.toast.cameras_removed`)),Te()}})}function ze(){o.openComponentDialog(n,{data:{title:m(`components.camera_events.filter`),confirmText:m(`components.form.button.save`),loading:C,contentProps:{cameras:de.value,hidden:b.value}},onConfirm:async e=>{try{await w(e)}catch(e){u.add({severity:`error`,detail:zL(e),life:5e3})}}})}function Be(e){o.openComponentDialog(t,{data:{title:m(`components.dialog.title.log`),confirmText:m(`components.form.button.download`),loading:re,stayActive:!0,contentProps:{cameraName:e},dialogContentClass:`not-md:px-0 h-full md:h-[50vh]`}})}return G([()=>f.query.episodeId,l,k],async([e,t,n])=>{if(typeof e!=`string`||!e||!t||!n?.result?.length||te===e)return;te=e;let r=await c.loadEpisode(e);if(p.replace({query:{...f.query,episodeId:void 0}}),!r)return;let i=new Map(n.result.map(e=>[e._id,e]));s(r,i)},{immediate:!0}),G([()=>f.query.console,k],([e,t])=>{if(typeof e!=`string`||!e||!t?.result?.length||ne===e)return;ne=e,p.replace({query:{...f.query,console:void 0}});let n=t.result.find(t=>t._id===e);n&&Be(n.name)},{immediate:!0}),(e,t)=>{let n=Zj,r=Xj,i=ii,o=fc,s=Wf,c=ci,l=Vf,u=Bd,d=zd;return Y(),B(`div`,PM,[z(n,{position:`center`},{default:X(()=>[J(`div`,FM,[z(H(ir),{src:H(AL)(`logo_animated.svg`),width:`18px`,height:`18px`,title:`camera.ui`,"aria-label":`camera.ui`},null,8,[`src`]),t[2]||=J(`span`,{class:`font-semibold text-xl truncate`},`camera.ui`,-1)])]),_:1}),H(O).cameras.showEvents&&(H(re)||H(de).length)?(Y(),B(`div`,IM,[H(h)?q(``,!0):(Y(),B(`h1`,LM,L(e.$t(`components.camera_events.title`)),1)),z(r,{cameras:H(k)?.result,"hidden-types":H(b),pending:!H(S)},null,8,[`cameras`,`hidden-types`,`pending`])])):q(``,!0),J(`div`,RM,[H(re)||H(de).length?(Y(),B(`h1`,zM,L(e.$t(`views.cameras.title`)),1)):q(``,!0),z(Rn,{name:`fade-2`,mode:`out-in`},{default:X(()=>[H(re)?(Y(),B(`div`,{key:`loading`,class:`grid w-full gap-2`,style:W({gridTemplateColumns:H(ce)})},[(Y(!0),B(U,null,K(H(ue),e=>(Y(),F(i,{key:e,class:`aspect-video !h-auto cui-card`}))),128))],4)):H(de).length?H(fe).length?H(M)==="default"?(Y(),B(`div`,qM,[J(`div`,{class:`grid w-full gap-1`,style:W({gridTemplateColumns:H(le)})},[z(H(li),{backend:H(ae),options:H(oe)},{default:X(()=>[z(Un,{name:`list`},{default:X(()=>[(Y(!0),B(U,null,K(H(fe),e=>(Y(),F(l,{key:e._id,camera:e,"find-card":he,"move-card":ge,"no-drag":H(O).cameras.dragDisabled||H(ye),"selection-mode":H(ye),selected:H(be).has(e._id),"edit-mode":H(se),hidden:H(T).has(e._id),"snapshot-ref":t=>H(j)[e.name]=t,class:`shadow-lg rounded-xl transition-transform`,"view-transition":``,onRefreshSnapshot:t=>H(j)[e.name]?.refresh(),onOpenConsole:t=>Be(e.name),onOpenSettings:t=>H(a).open({cameraName:e.name}),onToggleHidden:t=>Ne(e),onClick:t=>Me(e),onDragEnd:je},null,8,[`camera`,`no-drag`,`selection-mode`,`selected`,`edit-mode`,`hidden`,`snapshot-ref`,`onRefreshSnapshot`,`onOpenConsole`,`onOpenSettings`,`onToggleHidden`,`onClick`]))),128))]),_:1})]),_:1},8,[`backend`,`options`])],4)])):(Y(),B(`div`,JM,[(Y(!0),B(U,null,K(H(N),t=>(Y(),B(`div`,{key:t.room},[J(`h2`,YM,L(t.room===`Default`?e.$t(`components.form.label.room_default`):t.room),1),J(`div`,{class:`grid w-full gap-1`,style:W({gridTemplateColumns:H(le)})},[z(H(li),{backend:H(ae),options:H(oe)},{default:X(()=>[z(Un,{name:`list`},{default:X(()=>[(Y(!0),B(U,null,K(t.cameras,e=>(Y(),F(l,{key:e._id,camera:e,"find-card":e=>_e(t.room,e),"move-card":(e,n)=>ve(t.room,e,n),"no-drag":H(O).cameras.dragDisabled||H(ye),"selection-mode":H(ye),selected:H(be).has(e._id),"edit-mode":H(se),hidden:H(T).has(e._id),"snapshot-ref":t=>H(j)[e.name]=t,class:`shadow-lg rounded-xl transition-transform`,"view-transition":``,onRefreshSnapshot:t=>H(j)[e.name]?.refresh(),onOpenConsole:t=>Be(e.name),onOpenSettings:t=>H(a).open({cameraName:e.name}),onToggleHidden:t=>Ne(e),onClick:t=>Me(e),onDragEnd:je},null,8,[`camera`,`find-card`,`move-card`,`no-drag`,`selection-mode`,`selected`,`edit-mode`,`hidden`,`snapshot-ref`,`onRefreshSnapshot`,`onOpenConsole`,`onOpenSettings`,`onToggleHidden`,`onClick`]))),128))]),_:2},1024)]),_:2},1032,[`backend`,`options`])],4)]))),128))])):(Y(),B(`div`,GM,[J(`span`,KM,L(e.$t(`views.cameras.all_hidden`)),1)])):(Y(),B(`div`,BM,[J(`div`,VM,[z(o,{class:`w-8 h-8 text-primary-500`})]),J(`div`,HM,[J(`span`,UM,L(e.$t(`views.cameras.no_cameras`)),1),J(`span`,WM,L(e.$t(`views.cameras.no_cameras_hint`)),1)]),H(ie)?(Y(),F(c,{key:0,class:`cui-button-medium mt-2`,label:e.$t(`views.cameras.get_started`),onClick:t[0]||=t=>e.$router.push(`/cameras`)},{icon:X(()=>[z(s,{class:`w-4 h-4`})]),_:1},8,[`label`])):q(``,!0)]))]),_:1})]),H(de).length?(Y(),F(d,{key:1,"force-visible":H(ye)},{default:X(()=>[H(ye)?(Y(),B(U,{key:1},[z(u,{grouped:``,"tooltip-props":{value:e.$t(`components.form.tooltip.cancel_selection`)},"button-props":{severity:`secondary`},icon:H(mi),"icon-props":{width:`100%`,height:`100%`},onClick:H(Te)},null,8,[`tooltip-props`,`icon`,`onClick`]),z(u,{grouped:``,"tooltip-props":{value:H(Se)?e.$t(`components.form.tooltip.deselect_all`):e.$t(`components.form.tooltip.select_all`)},"button-props":{severity:H(Se)?`primary`:`secondary`},icon:H(rM),"icon-props":{width:`100%`,height:`100%`},onClick:H(Ee)},null,8,[`tooltip-props`,`button-props`,`icon`,`onClick`]),z(u,{grouped:``,"tooltip-props":{value:H(Oe)?e.$t(`components.form.tooltip.enable_selected`):e.$t(`components.form.tooltip.disable_selected`)},"button-props":{severity:`secondary`,disabled:!H(be).size||H(Ce)},icon:H(Oe)?H(oM):H(lM),"icon-props":{width:`100%`,height:`100%`},onClick:Fe},null,8,[`tooltip-props`,`button-props`,`icon`]),z(u,{grouped:``,"tooltip-props":{value:H(ke)?e.$t(`components.form.tooltip.unsnooze_selected`):e.$t(`components.form.tooltip.snooze_selected`)},"button-props":{severity:`secondary`,disabled:!H(be).size||H(Ce)},icon:H(hf),"icon-props":{width:`100%`,height:`100%`},onClick:Ie},null,8,[`tooltip-props`,`button-props`,`icon`]),z(u,{grouped:``,"tooltip-props":{value:H(Ae)?e.$t(`components.form.tooltip.recording_off_selected`):e.$t(`components.form.tooltip.recording_on_selected`)},"button-props":{severity:`secondary`,disabled:!H(be).size||H(Ce)},icon:H(Ae)?H(eM):H(fM),"icon-props":{width:`100%`,height:`100%`},onClick:Le},null,8,[`tooltip-props`,`button-props`,`icon`]),z(u,{grouped:``,"tooltip-props":{value:e.$t(`components.form.tooltip.delete_selected`)},"button-props":{severity:`danger`,disabled:!H(be).size||H(Ce)},icon:H(_p),"icon-props":{width:`100%`,height:`100%`},onClick:Re},null,8,[`tooltip-props`,`button-props`,`icon`])],64)):(Y(),B(U,{key:0},[H(de).length>1?(Y(),F(u,{key:0,grouped:``,"tooltip-props":{value:H(M)==="default"?e.$t(`components.form.tooltip.view_grouped`):e.$t(`components.form.tooltip.view_default`)},"button-props":{severity:H(M)==="default"?`secondary`:`primary`},icon:H(M)==="default"?H(DM):H(wM),"icon-props":{width:`100%`,height:`100%`},onClick:me},null,8,[`tooltip-props`,`button-props`,`icon`])):q(``,!0),z(u,{grouped:``,"tooltip-props":{value:H(O).cameras.dragDisabled?e.$t(`components.form.tooltip.edit_layout`):e.$t(`components.form.tooltip.lock_layout`)},"button-props":{severity:H(O).cameras.dragDisabled?`secondary`:`success`},icon:H(O).cameras.dragDisabled?H(vS):H(xM),"icon-props":{width:`100%`,height:`100%`},onClick:t[1]||=e=>H(O).cameras.dragDisabled=!H(O).cameras.dragDisabled},null,8,[`tooltip-props`,`button-props`,`icon`]),H(O).cameras.showEvents?(Y(),F(u,{key:1,grouped:``,"tooltip-props":{value:e.$t(`components.camera_events.filter`)},"button-props":{severity:H(x)?`primary`:`secondary`},icon:H(x)?H(vM):H(hM),"icon-props":{width:`100%`,height:`100%`},onClick:ze},null,8,[`tooltip-props`,`button-props`,`icon`])):q(``,!0),H(ie)?(Y(),F(u,{key:2,grouped:``,"tooltip-props":{value:e.$t(`components.form.tooltip.select_cameras`)},"button-props":{severity:`secondary`},icon:H(AM),"icon-props":{width:`100%`,height:`100%`},onClick:H(we)},null,8,[`tooltip-props`,`icon`,`onClick`])):q(``,!0)],64))]),_:1},8,[`force-visible`])):q(``,!0)])}}}),[[`__scopeId`,`data-v-2d126c65`]]),QM={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function $M(e,t){return Y(),B(`svg`,QM,[...t[0]||=[J(`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 eN=I({name:`mdi-cloud-outline`,render:$M}),tN={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function nN(e,t){return Y(),B(`svg`,tN,[...t[0]||=[J(`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 rN=I({name:`mdi-arrow-left`,render:nN}),iN=3e5;async function aN(e){let t=await RN($.post(`/backup/download/link`,{localStorage:e},{timeout:iN}));return t?{url:t.url,filename:t.filename}:{blob:new Blob([await dN(e)])}}async function oN(e){return RN($.post(`/backup/jobs`,{localStorage:e}))}async function sN(){return yN(`/backup/jobs`)}async function cN(){return(await $.get(`/backup/key`)).data}async function lN(){return(await $.post(`/backup/key/confirm`)).data}async function uN(e){let t=await RN($.post(`/backup/scheduler/backups/${encodeURIComponent(e)}/link`));return t?{url:t.url,filename:t.filename}:{blob:new Blob([await IN(e)])}}async function dN(e){return(await $.post(`/backup/download`,{localStorage:e},{responseType:`arraybuffer`,timeout:iN})).data}async function fN(e,t){return(await $.post(`/backup/restore/uploads`,{size:e,name:t})).data}async function pN(e){return(await $.get(`/backup/restore/uploads/${e}`)).data}async function mN(e,t,n,r){return(await $.patch(`/backup/restore/uploads/${e}`,n,{headers:{"Content-Type":`application/octet-stream`,"Upload-Offset":String(t)},timeout:iN,onUploadProgress:e=>r?.(e.loaded)})).data}async function hN(e,t){return(await $.post(`/backup/restore/uploads/${e}/complete`,t?{key:t}:void 0,{timeout:iN})).data}async function gN(e){await $.delete(`/backup/restore/uploads/${e}`)}async function _N(e,t){return(await $.post(`/backup/scheduler/backups/${encodeURIComponent(e)}/restore`,t?{key:t}:void 0,{timeout:iN})).data}async function vN(){return(await $.get(`/backup/restore`)).data}async function yN(e,t){return RN($.get(e,t))}async function bN(e){return yN(`/backup/restore/status`,{headers:e?{"X-Restore-Ticket":e}:void 0,timeout:5e3})}async function xN(e){return(await $.post(`/backup/restore/confirm`,{mode:e})).data}async function SN(){return(await $.delete(`/backup/restore`)).data}async function CN(){return(await $.post(`/backup/restore/undo`)).data}async function wN(e){return(await $.post(`/backup/restore/plugins/retry`,{name:e},{timeout:iN})).data}async function TN(e){return(await $.post(`/backup/restore/plugins/discard`,{name:e})).data}async function EN(e,t){return(await $.post(`/backup/restore/move`,{code:e,address:t||void 0})).data}async function DN(){return yN(`/backup/restore/move`)}async function ON(){await $.delete(`/backup/restore/move`)}async function kN(e){return(await $.post(`/backup/move`,{hosts:e})).data}async function AN(){return yN(`/backup/move`)}async function jN(){return(await $.delete(`/backup/move`)).data}async function MN(){return(await yN(`/backup/move/state`,{timeout:5e3}))?.state??null}async function NN(){return(await $.get(`/backup/scheduler`)).data}async function PN(e){return(await $.patch(`/backup/scheduler`,e)).data}async function FN(){return(await $.post(`/backup/scheduler/run`)).data}async function IN(e){return(await $.get(`/backup/scheduler/backups/${encodeURIComponent(e)}`,{responseType:`arraybuffer`,timeout:iN})).data}async function LN(e){await $.delete(`/backup/scheduler/backups/${encodeURIComponent(e)}`)}async function RN(e){try{return(await e).data}catch(e){if(va(e)&&e.response?.status===404&&!Sa(e))return null;throw e}}var zN={viewBox:`0 0 25 24`,width:`1.26em`,height:`1.2em`};function BN(e,t){return Y(),B(`svg`,zN,[...t[0]||=[J(`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 VN=I({name:`fontisto-reddit`,render:BN}),HN={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function UN(e,t){return Y(),B(`svg`,HN,[...t[0]||=[J(`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 WN=I({name:`ic-baseline-discord`,render:UN}),GN={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function KN(e,t){return Y(),B(`svg`,GN,[...t[0]||=[J(`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 qN=I({name:`mdi-github`,render:KN}),JN={class:`flex justify-center items-center draggable-region`},YN={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`},XN={class:`flex flex-col h-full p-10 non-draggable-region`},ZN={class:`flex flex-col items-center justify-center mb-10`},QN={class:`flex justify-between items-center`},$N={class:`flex items-center gap-1 ml-auto`},eP=Gn({__name:`CuiAuthCard`,props:{logoUrl:{}},setup(e){return(t,n)=>{let r=zr,i=qN,a=ci,o=WN,s=VN;return Y(),B(`div`,JN,[J(`div`,YN,[J(`div`,XN,[J(`div`,ZN,[z(H(ir),{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]||=J(`span`,{class:`text-2xl ml-3 mt-2 font-bold text-color`},`camera.ui`,-1)]),dn(t.$slots,`default`),z(r,{class:`mt-15`}),J(`div`,QN,[dn(t.$slots,`footer-left`),J(`div`,$N,[z(a,{severity:`secondary`,class:`cui-icon-md`,text:``,rounded:``,onClick:n[0]||=e=>t.$router.absUrl(`https://github.com/cameraui/camera.ui`,!0)},{icon:X(()=>[z(i,{class:`text-muted`,width:`100%`,height:`100%`})]),_:1}),z(a,{severity:`secondary`,class:`cui-icon-md`,text:``,rounded:``,onClick:n[1]||=e=>t.$router.absUrl(`https://discord.gg/bBGnGcbz8N`,!0)},{icon:X(()=>[z(o,{class:`text-muted`,width:`100%`,height:`100%`})]),_:1}),z(a,{severity:`secondary`,class:`cui-icon-md`,text:``,rounded:``,onClick:n[2]||=e=>t.$router.absUrl(`https://reddit.com/r/cameraui/`,!0)},{icon:X(()=>[z(s,{class:`text-muted`,width:`100%`,height:`100%`})]),_:1})])])]),n[4]||=J(`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 tP(){return{available:!1,enrolled:!1}}async function nP(e){return!1}async function rP(e){}async function iP(e,t){return null}var aP=`cameraui:web-push-id`;async function oP(){let e=localStorage.getItem(aP);return e||(e=b(),localStorage.setItem(aP,e)),e}var sP=`cui_device_id`,cP=null,lP=null;async function uP(){if(cP)return cP;let e=localStorage.getItem(sP);if(e)return cP=e,e;let t=b();return localStorage.setItem(sP,t),cP=t,t}async function dP(){return lP||(lP=fP(navigator.userAgent),lP)}function fP(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 pP=ur({username:lr().trim().min(1,`Username is required`),password:lr().trim().min(1,`Password is required`),rememberMe:dr().optional()}).strict(),mP=gr,hP=hr,gP=vr,_P=fr,vP=`cui-restore`,yP=`cui-restore-upload`,bP=`cui-restore-login`,xP=`cui-restore-move`,SP=2e3,CP=5,wP=new Set([`done`,`done-with-problems`,`failed`,`rolled-back`,`cancelled`,`expired`]),TP=new Set([`confirmed`,`applied`,`done`,`done-with-problems`,`failed`,`rolled-back`]),EP=P(`idle`),DP=P(null),OP=P(0),kP=P(0),AP=P(null),jP=P(``),MP=P(!1),NP=P(null),PP=null,FP,IP=!1,LP=V(()=>EP.value!==`idle`);function RP(e){try{return JSON.parse(sessionStorage.getItem(e)??`null`)}catch{return null}}function zP(e,t){try{sessionStorage.setItem(e,JSON.stringify(t))}catch{}}function BP(e){try{sessionStorage.removeItem(e)}catch{}}function VP(e){e.theme&&localStorage.setItem(`theme`,JSON.stringify(e.theme)),e.language&&localStorage.setItem(`language`,e.language),e.ui&&localStorage.setItem(`ui`,JSON.stringify(e.ui))}function HP(e){return wP.has(e)}function UP(e){return e===`done`||e===`done-with-problems`}function WP(e){let t=va(e)?e.response?.status:void 0;return!t||t===409||t>=500}function GP(e){return new Promise(t=>setTimeout(t,e))}function KP(){clearTimeout(FP),EP.value=`idle`,DP.value=null,OP.value=0,kP.value=0,AP.value=null,MP.value=!1,NP.value=null,PP=null}function qP(e){if(!va(e)||e.response?.status!==422)return null;let t=e.response.data?.code;return t===`backup-key-required`||t===`backup-key-wrong`?t:null}async function JP(e,t){EP.value=`checking`;try{XP(`upload`in e?await hN(e.upload,t):await _N(e.filename,t)),PP=null,NP.value=null}catch(t){let n=qP(t);if(!n){YP(t);return}PP=e,NP.value=n,EP.value=`key`}}function YP(e){KP(),jP.value=zL(e),Go().add({severity:`error`,detail:jP.value,life:1e4})}function XP(e){zP(vP,{ticket:e.ticket,localStorage:e.localStorage}),DP.value=e.status,EP.value=`ready`}function ZP(e){if(DP.value={...DP.value,...e},HP(e.state)){EP.value=`finished`;let t=RP(vP);UP(e.state)&&t&&VP(t.localStorage)}}function QP(){clearTimeout(FP),FP=setTimeout(async()=>{try{let e=await bN(RP(vP)?.ticket);if(!e||e.id!==DP.value?.id){EP.value=`finished`;return}ZP(e)}catch{}EP.value===`applying`&&QP()},SP)}function $P(){clearTimeout(FP),FP=setTimeout(async()=>{try{let e=await DN();if(!e||e.state===`cancelled`){BP(xP),KP();return}if(AP.value=e,e.state===`staged`&&e.started){BP(xP),XP(e.started);return}if(e.state===`failed`){BP(xP),YP(Error(e.error));return}}catch{}EP.value===`moving`&&$P()},SP)}async function eF(e){let t=`${e.name}:${e.size}:${e.lastModified}`,n=RP(yP);if(n?.key===t)try{return await pN(n.id)}catch{}let r=await fN(e.size,e.name);return zP(yP,{key:t,id:r.id}),r}async function tF(e,t){let n=t.received,r=0;for(;n<e.size&&!IP;){let i=n;try{let a=e.slice(i,Math.min(i+t.chunkSize,e.size));n=(await mN(t.id,i,a,e=>kP.value=i+e)).received,r=0}catch(e){if(!WP(e)||++r>CP)throw e;await GP(r*1e3),n=await pN(t.id).then(e=>e.received).catch(()=>i)}kP.value=n}}function nF(){let e=V(()=>OP.value?Math.round(kP.value/OP.value*100):0),t=V(()=>AP.value?.size?Math.round(AP.value.received/AP.value.size*100):0);async function n(e){if(!LP.value){EP.value=`uploading`,jP.value=``,OP.value=e.size,kP.value=0,IP=!1;try{let t=await eF(e);if(await tF(e,t),IP){BP(yP),await gN(t.id).catch(()=>{}),KP();return}BP(yP),await JP({upload:t.id})}catch(e){YP(e)}}}function r(){IP=!0}async function i(e){LP.value||(jP.value=``,await JP({filename:e}))}async function a(e){PP&&await JP(PP,e)}async function o(){MP.value=!0,PP&&`upload`in PP&&await gN(PP.upload).catch(()=>{}),KP()}async function s(e,t){if(!LP.value){EP.value=`moving`,jP.value=``;try{AP.value=await EN(e,t),zP(xP,!0),$P()}catch(e){YP(e)}}}async function c(){MP.value=!0,await ON().catch(()=>{}),BP(xP),KP()}function l(e){LP.value||(DP.value=e,EP.value=`ready`)}async function u(e){MP.value=!0;try{ZP(await xN(e)),EP.value=`applying`,QP()}catch(e){Go().add({severity:`error`,detail:zL(e),life:1e4})}finally{MP.value=!1}}async function d(){MP.value=!0,await SN().catch(()=>{}),BP(vP),KP()}async function f(){if(!LP.value)try{let e=await CN();zP(vP,{ticket:e.ticket,localStorage:{}}),DP.value=e.status,EP.value=`applying`,QP()}catch(e){YP(e)}}async function p(){let e=UP(DP.value?.state),t=RP(vP);e&&t&&zP(bP,t.ticket),BP(vP),KP(),e&&await xL().logout()}async function m(){let e=RP(bP)??RP(vP)?.ticket;try{let t=await bN(e??void 0);return t||BP(bP),t&&TP.has(t.state)?t:null}catch{return null}}async function h(){if(LP.value)return;let e=RP(vP);if(!e)RP(xP)&&(EP.value=`moving`,$P());else try{let t=await bN(e.ticket);if(!t||t.state===`cancelled`||t.state===`expired`){BP(vP);return}ZP(t),t.state===`ready`?EP.value=`ready`:HP(t.state)||(EP.value=`applying`,QP())}catch{}}return{phase:EP,status:DP,uploadTotal:OP,uploadLoaded:kP,uploadPercent:e,pull:AP,movePercent:t,lastError:jP,busy:MP,keyProblem:NP,upload:n,cancelUpload:r,fetchFromServer:s,cancelFetch:c,stageScheduled:i,submitKey:a,cancelKey:o,showStaged:l,confirm:u,cancel:d,undo:f,close:p,resume:h,loginNotice:m}}function rF(e){return`requires2fa`in e&&e.requires2fa===!0}async function iF(e){return(await $.get(`/instances`,{signal:e})).data}async function aF(e){return(await $.post(`/instances`,e)).data}async function oF({id:e,data:t}){return(await $.put(`/instances/${e}`,t)).data}async function sF(e){await $.delete(`/instances/${e}`)}async function cF({ids:e}){return(await $.delete(`/instances`,{data:{ids:e}})).data}async function lF(e){return(await $.patch(`/instances/${e}/favorite`)).data}async function uF(e,t){return(await $.post(`/instances/${e}/login`,t?{code:t}:{})).data}async function dF(e,t){return(await $.get(`/instances/${e}/status`,{signal:t})).data}var fF=class{_queryClient=$n();toast=Go();t=Ho.global.t;listQuery(){return Ko({queryKey:[`instances`],queryFn:({signal:e})=>iF(e)})}statusQueries(e){return Yn({queries:V(()=>R(e).map(e=>({queryKey:[`instances`,e.id,`status`],queryFn:({signal:t})=>dF(e.id,t),refetchInterval:15e3,retry:!1})))})}createMutation(){return nr({mutationFn:aF,onSuccess:async()=>{await this._queryClient.refetchQueries({queryKey:[`instances`]}),this.toast.add({severity:`success`,detail:this.t(`views.settings.instances.added`),life:3e3})}})}updateMutation(){return nr({mutationFn:oF,onSuccess:async()=>{await this._queryClient.refetchQueries({queryKey:[`instances`]}),this.toast.add({severity:`success`,detail:this.t(`views.settings.instances.updated`),life:3e3})}})}deleteMutation(){return nr({mutationFn:async e=>{await sF(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})}})}bulkDeleteMutation(){return nr({mutationFn:async({ids:e})=>{let t=await cF({ids:e});for(let t of e)await this._queryClient.cancelQueries({queryKey:[`instances`,t,`status`]}),this._queryClient.removeQueries({queryKey:[`instances`,t,`status`]});return t},onSuccess:async()=>{await this._queryClient.refetchQueries({queryKey:[`instances`]})}})}toggleFavoriteMutation(){return nr({mutationFn:lF,onSuccess:async()=>{await this._queryClient.refetchQueries({queryKey:[`instances`]})}})}loginMutation(){return nr({mutationFn:e=>uF(e),onError:()=>{}})}},pF={class:`flex flex-col gap-6`},mF={class:`text-muted`},hF={class:`flex flex-col gap-2 justify-center items-center mt-2`},gF={class:`cui-label`},_F=Gn({__name:`InstanceTwoFactorPrompt`,props:{instanceName:{}},setup(e,{expose:t}){let{instanceName:n}=jt(e),r=P(``),i=V(()=>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=Jr;return Y(),B(`div`,pF,[J(`p`,mF,L(e.$t(`instances.two_factor_hint`,{name:H(n)})),1),J(`div`,hF,[J(`label`,gF,L(e.$t(`views.settings.security.enter_code`)),1),z(i,{modelValue:H(r),"onUpdate:modelValue":t[0]||=e=>Qt(r)?r.value=e:null,length:6,"integer-only":``,class:`justify-center`},null,8,[`modelValue`])])])}}}),vF=3e4,yF=5e3,bF=`__home__`,xF=new Set([`localhost`,`127.0.0.1`,`::1`]),SF=ar(`Instances`);async function CF(e,t){try{let n=AbortSignal.timeout(yF),r=t?AbortSignal.any([n,t]):n,i=await fetch(`${e}/api/health`,{signal:r});return SF.debug(`[probe]`,`${e} → ${i.ok?`OK`:`HTTP ${i.status}`}`),i.ok}catch(t){let n=t instanceof Error?t.message:String(t);return SF.debug(`[probe]`,`${e} → FAIL`,n),!1}}function wF(e){return{access:e.access_token,accessExpiresAt:e.access_token_expires_at,refresh:e.refresh_token,refreshExpiresAt:e.refresh_token_expires_at}}function TF(e){return{...e,access_token_expires_at:C(e.access_token,e.access_token_expires_at)??e.access_token_expires_at}}function EF(e,t){return{_id:t?._id??``,username:t?.username??``,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 DF=zn(`instances`,()=>{let e=xL(),t=Go(),n=Mm(),r=$n(),{t:i}=Ho.global,a=Ft(`instanceTokens`,{}),o=Ft(`activeInstanceId`,null),s=P(!1),c=P(null),l=P(0),u=0,d=new Map,p=P(null),m=P([]),h=gn(`redirectInfo`,null,{serializer:{read:e=>e?JSON.parse(e):null,write:e=>JSON.stringify(e)}}),g=V(()=>o.value===null),_=V(()=>o.value===null?null:m.value.find(e=>e.id===o.value)?.url??null);async function v(){try{if(!Af(void 0,`admin`))return;let e=await iF();m.value=e.instances,p.value=e.homeId,SF.debug(`[fetch]`,`loaded ${e.instances.length} instances`,{homeId:e.homeId})}catch(e){SF.warn(`[fetch]`,`failed`,e)}}let y=V(()=>{let e=p.value;return m.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 b(){let e=a.value[bF],t=o.value===null?fa().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 x=V(()=>{if(o.value!==null){let e=y.value.find(e=>e.id===o.value);if(e)return e}return b()}),S=V(()=>y.value.filter(e=>e.favorite)),C=V(()=>S.value.length>0||o.value!==null||h.value!==null);function w(e){return m.value.find(t=>t.id===e)?.favorite??!0}async function T(e){let{favorite:t}=await lF(e),n=m.value.find(t=>t.id===e);n&&(n.favorite=t)}async function E(e){let t=await aF(e);return m.value=[...m.value,t],t}async function D(e){await sF(e),m.value=m.value.filter(t=>t.id!==e),delete a.value[e],ee(e)}async function O(e,t){let n=await oF({id:e,data:t}),r=m.value.findIndex(t=>t.id===e);r!==-1&&(m.value[r]=n)}async function k(e,t){let n=m.value.find(t=>t.id===e);return n?CF(n.url,t):!1}function A(){let t=fa().target.value;if(!t?.tokens.access){SF.debug(`[save-tokens]`,`skipped — no live access token`);return}let n=o.value??bF;j(n,{userData:EF(t.tokens,e.user??void 0),lastConnectedAt:Date.now(),url:t.endpoint.url}),SF.debug(`[save-tokens]`,`slot=${n} url=${t.endpoint.url}`)}function j(e,t){a.value[e]=t}function ee(e){d.delete(e)}function te(){if(o.value===null){ca.value=null,SF.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;ca.value=t,SF.debug(`[restore-override]`,`activeId=${o.value} → ${t??`no cached url`}`)}async function ne(n){if(s.value){SF.warn(`[switch]`,`ignored — another switch is already in progress`);return}let a=n===null?b():y.value.find(e=>e.id===n)??b();if(n!==null&&ie(a.url)&&!await se(a.name)){SF.debug(`[switch]`,`URL handoff declined by user`);return}let d=++u;s.value=!0,c.value=a.name,SF.debug(`[switch]`,`START targetId=${n??`home`} gen=${d}`),SF.debug(`[switch]`,`target resolved — name="${a.name}" url=${a.url} hasCreds=${a.hasCredentials}`);try{if(n!==null){let e=await CF(a.url);if(d!==u){SF.debug(`[switch]`,`aborted after probe — newer gen=${u}`);return}if(!e){SF.warn(`[switch]`,`target unreachable — ${a.url}`),t.add({severity:`warn`,detail:i(`instances.unreachable`,{name:a.name}),life:3e3});return}}let c=null;if(n!==null&&a.hasCredentials)try{let e=await uF(n);if(rF(e)){SF.debug(`[switch]`,`remote requires 2FA — prompting for code`),s.value=!1;let t=await oe(n,a.name);if(d!==u)return;if(s.value=!0,!t){SF.debug(`[switch]`,`2FA prompt cancelled — aborting switch`);return}e=t}rF(e)||(c=TF(e),SF.debug(`[switch]`,`backend relay login OK`))}catch(e){SF.warn(`[switch]`,`backend relay login FAILED — will try cached tokens`,e)}if(d!==u){SF.debug(`[switch]`,`aborted after relay-login — newer gen=${u}`);return}A();let p=n??bF,m=c?wF(c):await re(p);if(SF.debug(`[switch]`,`tokens source: ${c?`fresh`:m?`cached`:`none`} (slot=${p})`),n!==null&&ie(a.url)){SF.debug(`[switch]`,`URL handoff required — leaving SPA`),await ce(a,c);return}let h=fa();if(h.reset(),SF.debug(`[switch]`,`kernel RESET`),Ae(),f(),st(),r.clear(),SF.debug(`[switch]`,`vue-query cleared`),o.value=n,ca.value=n===null?null:a.url,SF.debug(`[switch]`,`activeId=${n} instanceOverride=${ca.value??`null`}`),m&&c&&(j(p,{userData:c,lastConnectedAt:Date.now(),url:a.url}),e.user={_id:c._id,username:c.username,role:c.role,firstLogin:c.firstLogin,avatar:c.avatar}),m){let e={url:a.url,mode:`direct-lan`,priority:0};SF.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`)),vF))])}else{SF.warn(`[switch]`,`no tokens — boot + route to login`),h.boot(n??`home`),e.user=null,mL.push(`/`);return}if(d!==u){SF.debug(`[switch]`,`aborted after seedAndRetry — newer gen=${u}`);return}l.value++;let g=sL();SF.debug(`[switch]`,`DONE gen=${d} → ${g}`),mL.push(g)}catch(e){(e instanceof Error?e.message:String(e))===`switch_timeout`?(SF.error(`[switch]`,`TIMEOUT after ${vF}ms`),t.add({severity:`error`,detail:i(`instances.switch_timeout`,{name:c.value??``}),life:3e3})):(SF.error(`[switch]`,`failed`,e),t.add({severity:`error`,detail:e,life:3e3}))}finally{d===u&&(s.value=!1,c.value=null)}}async function re(e){let t=a.value[e];return t?.userData?.access_token?wF(t.userData):null}function ie(e){try{let t=new URL(e),n=new URL(window.location.origin),r=n.protocol===`https:`&&t.protocol===`http:`,i=xF.has(t.hostname)&&!xF.has(n.hostname);return r||i}catch{return!1}}function ae(e){return new Promise(t=>{let r=!1,a=e=>{r||(r=!0,t(e))};n.openComponentDialog(_F,{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 oe(e,n){for(;;){let r=await ae(n);if(!r)return null;try{let t=await uF(e,r);if(!rF(t))return t}catch(e){SF.warn(`[2fa]`,`verification failed`,e),t.add({severity:`error`,detail:i(`instances.two_factor_failed`),life:3e3})}}}async function M(e,n){return await oe(e,n)?(t.add({severity:`success`,detail:i(`instances.two_factor_completed`,{name:n}),life:3e3}),await v().catch(()=>{}),!0):!1}function se(e){return SF.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 ce(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}`;SF.debug(`[url-handoff]`,`→ ${e.url} (with token=${t?`yes`:`no`})`),window.location.href=i}function le(){for(let e of Object.keys(a.value))ee(e);a.value={},o.value=null,ca.value=null,h.value=null,m.value=[],p.value=null,SF.debug(`[reset]`,`store cleared`)}return{instances:y,activeInstance:x,activeId:o,activeUrl:_,isHomeActive:g,isMultiInstance:C,isSwitching:Sn(s),switchTargetName:Sn(c),switchKey:Sn(l),serverHomeId:p,redirectInfo:h,serverInstances:m,instanceTokens:a,favoriteInstances:S,isFavorite:w,toggleFavorite:T,fetchInstances:v,addInstance:E,removeInstance:D,updateInstance:O,switchInstance:ne,probeInstance:k,complete2FALogin:M,reset:le,saveCurrentTokens:A,restoreActiveOverride:te}}),OF={key:`connecting`,class:`flex flex-col items-center justify-center h-full gap-4`},kF={class:`text-muted text-sm text-center`},AF={class:`flex flex-col gap-1`},jF={key:0,class:`font-semibold select-text`},MF={class:`flex flex-col gap-10 sm:gap-6 w-full mt-10 sm:mt-0`},NF={for:`username`,class:`cui-label`},PF={for:`password`,class:`cui-label`},FF={class:`flex flex-col gap-6 mt-10`},IF={class:`flex items-center field-checkbox-gap`},LF={for:`rememberMe`,class:`cui-label-checkbox`},RF={key:`2fa`,class:`flex flex-col h-full`},zF={class:`flex flex-col items-center text-center mt-10 sm:mt-0`},BF={class:`text-lg font-semibold mb-2`},VF={class:`text-muted text-sm`},HF={class:`flex flex-col items-center mt-10`},UF={class:`flex flex-col gap-3 mt-auto pt-10`},WF=6,GF=8,KF=Kd(Gn({__name:`Login`,setup(e){ar();let t=Go();Mm();let{t:n}=St(),r=QL(),i=Io(),{isNeedsAuth:a,isOnline:o,inTrouble:s}=i,{loginNotice:c}=nF(),l=xL(),{loginLoading:u,requires2FA:d}=Zt(l),f=DF(),p=Tn(`formRef`),m=P(``),h=P(``),g=P(!1),_=P(``),v=P(``),y=P(!1),b=P(!1),x=P(!1);P(!1);let S=P(null),C=P(!1),w=V(()=>!f.isHomeActive||f.redirectInfo!==null),T=V(()=>y.value?v.value.trim().length===GF:_.value.length===WF),E=V(()=>r===`cloud`&&f.isHomeActive),D=V(()=>!o.value&&!a.value&&!u.value&&!d.value),O=V(()=>s.value?n(`connection.unreachable`):n(`connection.connecting_remote`)),k=V(()=>!1),A=V(()=>{switch(S.value?.state){case`done`:return`success`;case`confirmed`:case`applied`:return`info`;default:return`warn`}}),j=V(()=>{switch(S.value?.state){case`confirmed`:case`applied`:return n(`views.login.restore_running`);case`done`:case`done-with-problems`:return S.value.kind===`undo`?n(`restore.result_undone`):n(`views.login.restore_done`);case`failed`:return n(`restore.result_failed`);default:return n(`restore.result_rolled_back`)}}),ee=V(()=>{let e=S.value;return e?.kind===`undo`||e?.state!==`done`&&e?.state!==`done-with-problems`?``:e.summary?.accounts.map(e=>e.username).join(`, `)??``});function te(){i.retry()}function ne(){if(f.redirectInfo){let e=ms(f.redirectInfo.sourceUrl);if(f.redirectInfo=null,e){window.location.href=e;return}}f.switchInstance(null)}async function re(e){try{let[t,n]=await Promise.all([uP(),dP()]);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 ie(){await re({username:m.value,password:h.value})&&await M({username:m.value,password:h.value})}async function ae(){let e=await oe();if(e){b.value=!0;try{let t=await iP(e,n(`views.login.biometric_reason`));if(!t)return;m.value=t.username,h.value=t.password,await re(t)||(await rP(e),x.value=!1)}finally{b.value=!1}}}async function oe(){return null}async function M(e){}async function se(){window.location.href=Ta}function ce(){y.value=!y.value,_.value=``,v.value=``}async function le(){if(T.value)try{await l.verify2FA(y.value?v.value.trim():_.value)}catch(e){t.add({severity:`error`,detail:zL(e)??n(`views.login.2fa_invalid_code`),life:3e3}),_.value=``,v.value=``}}function ue(){l.cancel2FA(),_.value=``,v.value=``,y.value=!1}return G(_,e=>{e.length===WF&&le()}),G(()=>o.value||a.value,async e=>{e&&(C.value||=await MN().catch(()=>null)!==null,S.value||=await c())},{immediate:!0}),hn(async()=>{}),(e,t)=>{let n=rN,r=ci,i=eN,a=ti,o=Pr,c=Gr,l=Vr,f=qr,x=Wr,re=wr,oe=Jr,M=ni;return Y(),F(eP,{"logo-url":H(AL)(`logo_animated.svg`)},Ut({default:X(()=>[z(Rn,{name:`slide-fade`,mode:`out-in`},{default:X(()=>[H(D)?(Y(),B(`div`,OF,[z(a,{"stroke-width":`4`,class:`!w-12 !h-12`}),J(`p`,kF,L(H(O)),1),H(s)?(Y(),F(r,{key:0,size:`small`,severity:`secondary`,label:e.$t(`connection.retry`),onClick:te},null,8,[`label`])):q(``,!0)])):H(d)?fn((Y(),B(`div`,RF,[J(`div`,zF,[J(`h2`,BF,L(e.$t(`views.login.2fa_title`)),1),J(`p`,VF,L(H(y)?e.$t(`views.login.2fa_backup_description`):e.$t(`views.login.2fa_description`)),1)]),J(`div`,HF,[H(y)?(Y(),F(c,{key:1,modelValue:H(v),"onUpdate:modelValue":t[4]||=e=>Qt(v)?v.value=e:null,size:`large`,autocapitalize:`characters`,autocomplete:`one-time-code`,spellcheck:`false`,maxlength:GF,placeholder:e.$t(`views.login.2fa_backup_placeholder`),class:`text-center font-mono tracking-[0.3em] uppercase`,onKeyup:xt(le,[`enter`])},null,8,[`modelValue`,`placeholder`])):(Y(),F(oe,{key:0,modelValue:H(_),"onUpdate:modelValue":t[3]||=e=>Qt(_)?_.value=e:null,length:WF,"integer-only":``,size:`large`},null,8,[`modelValue`])),z(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:ce},null,8,[`label`])]),J(`div`,UF,[z(r,{class:`text-white font-semibold cui-button-large`,loading:H(u),disabled:!H(T),label:e.$t(`views.login.2fa_verify`),fluid:``,onClick:le},null,8,[`loading`,`disabled`,`label`]),z(r,{severity:`secondary`,class:`cui-button-large`,text:``,label:e.$t(`components.form.button.cancel`),fluid:``,onClick:ue},null,8,[`label`])])])),[[M]]):(Y(),F(H(tr),{key:`login`,ref_key:`formRef`,ref:p,"validation-schema":H(pP),class:`flex flex-col h-full`,onSubmit:ie},{default:X(()=>[H(C)?(Y(),F(o,{key:0,severity:`warn`,size:`small`,class:`mb-6`},{default:X(()=>[Mt(L(e.$t(`restore.moved_away`)),1)]),_:1})):q(``,!0),H(S)?(Y(),F(o,{key:1,severity:H(A),size:`small`,class:`mb-6`},{default:X(()=>[J(`div`,AF,[J(`span`,null,L(H(j)),1),H(ee)?(Y(),B(`span`,jF,L(H(ee)),1)):q(``,!0)])]),_:1},8,[`severity`])):q(``,!0),J(`div`,MF,[z(H(Xn),{modelValue:H(m),"onUpdate:modelValue":t[0]||=e=>Qt(m)?m.value=e:null,modelModifiers:{trim:!0},name:`username`,as:`div`,class:`flex flex-col field-gap`},{default:X(({field:t,errors:n})=>[J(`label`,NF,L(e.$t(`components.form.label.username`)),1),z(l,null,{default:X(()=>[z(c,sn({invalid:n.length>0,type:`text`,size:`large`,loading:H(u)},t),null,16,[`invalid`,`loading`])]),_:2},1024),z(Rn,{name:`fade`},{default:X(()=>[z(H(Zn),{name:`username`,class:`cui-input-error`})]),_:1})]),_:1},8,[`modelValue`]),z(H(Xn),{modelValue:H(h),"onUpdate:modelValue":t[1]||=e=>Qt(h)?h.value=e:null,name:`password`,as:`div`,class:`flex flex-col field-gap`},{default:X(({field:t,errors:n})=>[J(`label`,PF,L(e.$t(`components.form.label.password`)),1),z(l,null,{default:X(()=>[z(f,sn({invalid:n.length>0,size:`large`,loading:H(u),feedback:!1,"toggle-mask":``},t),null,16,[`invalid`,`loading`])]),_:2},1024),z(Rn,{name:`fade`},{default:X(()=>[z(H(Zn),{name:`password`,class:`cui-input-error`})]),_:1})]),_:1},8,[`modelValue`])]),J(`div`,FF,[H(!1)?q(``,!0):(Y(),F(H(Xn),{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:X(({field:n,errors:r})=>[J(`div`,IF,[z(x,sn({"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`]),J(`label`,LF,L(e.$t(`components.form.label.remember_me`)),1)]),z(Rn,{name:`fade`},{default:X(()=>[z(H(Zn),{name:`rememberMe`,class:`cui-input-checkbox-error`})]),_:1})]),_:1},8,[`model-value`])),z(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(k)?(Y(),F(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:ae},{icon:X(()=>[z(re,{class:`w-5 h-5 mr-2`})]),_:1},8,[`loading`,`label`])):q(``,!0)])]),_:1},8,[`validation-schema`]))]),_:1})]),_:2},[H(w)||H(E)?{name:`footer-left`,fn:X(()=>[H(w)?(Y(),F(r,{key:0,severity:`secondary`,text:``,size:`small`,class:`text-muted`,label:e.$t(`components.instance_switcher.go_back`),onClick:ne},{icon:X(()=>[z(n,{class:`w-4 h-4`})]),_:1},8,[`label`])):(Y(),F(r,{key:1,severity:`secondary`,text:``,size:`small`,class:`text-muted`,label:e.$t(`views.login.pick_server`),onClick:se},{icon:X(()=>[z(i,{class:`w-4 h-4`})]),_:1},8,[`label`]))]),key:`0`}:void 0]),1032,[`logo-url`])}}}),[[`__scopeId`,`data-v-e9f95e47`]]),qF=/<script\b([^>]*)>[\s\S]*?<\/script>/gi;function JF(e,t){for(let[,n]of e.matchAll(qF)){if(!/\btype=["']?module\b/i.test(n))continue;let e=/\bsrc=["']([^"']+)["']/i.exec(n)?.[1];if(e)return new URL(e,t).href}return null}var YF=`false`,XF=`false`,ZF=YF===`true`,QF=XF===`true`;function $F(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,ZF||u?.()};async function f(){if(`serviceWorker`in navigator){if(c=await zt(async()=>{let{Workbox:e}=await import(`./workbox-window.prod.es5-zq7mK_Xf.js`);return{Workbox:e}},__vite__mapDeps([22,19,5,1]),import.meta.url).then(({Workbox:e})=>new e(`/sw.js`,{scope:`/`,type:`classic`})).catch(e=>{s?.(e)}),!c)return;if(u=()=>{c?.messageSkipWaiting()},!QF){if(ZF)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 eI(e={}){let{immediate:t=!0,onNeedReload:n,onNeedRefresh:r,onOfflineReady:i,onRegistered:a,onRegisteredSW:o,onRegisterError:s}=e,c=P(!1),l=P(!1);return{updateServiceWorker:$F({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 tI=ar(`AppUpdate`),nI=36e5,rI=6e5,iI=`cui-sw-updated`,aI=1e4,oI=P(!1),sI=P(!1),cI=async()=>{},lI,uI=0;async function dI(){if(lI&&!lI.installing&&navigator.onLine){uI=Date.now();try{await lI.update()}catch{}}}async function fI(){let e=document.querySelector(`script[type="module"][src]`)?.src;if(!oI.value&&e){try{let t=new URL(Na(),window.location.origin).href,n=await fetch(t,{cache:`no-store`,signal:AbortSignal.timeout(aI)});if(!n.ok)return;let r=JF(await n.text(),n.url||t);if(!r||r===e)return}catch{return}cI=async()=>{sessionStorage.setItem(iI,`1`),window.location.reload()},oI.value=!0}}async function pI(){if(!sI.value&&oI.value){sI.value=!0;try{await cI()}catch(e){tI.error(`apply failed`,e),sI.value=!1}}}function mI(){return{updateAvailable:oI,isApplying:sI,applyUpdate:pI}}function hI(){oI.value&&!sI.value&&pI()}function gI(){Pa()||_I()}function _I(){let{t:e}=Ho.global,t=Go(),n=!(`serviceWorker`in navigator),{needRefresh:r,updateServiceWorker:i}=eI({immediate:!0,onRegisteredSW(e,t){lI=t,lI&&(uI=Date.now(),setInterval(()=>dI(),nI))},onRegisterError(){n=!0}});$t(document,`visibilitychange`,()=>{document.visibilityState===`visible`&&Date.now()-uI>=rI&&dI()});let a=Io(),o=a.isOnline.value;if(G(()=>a.isOnline.value,(e,t)=>{e&&!t&&(dI(),n&&o&&fI(),o=!0)}),G(r,e=>{e&&(cI=async()=>{sessionStorage.setItem(iI,`1`);let e=!1,t=()=>{e||(e=!0,window.location.reload())};navigator.serviceWorker?.addEventListener(`controllerchange`,t,{once:!0}),await i(!1),setTimeout(t,2e4)},oI.value=!0)}),sessionStorage.getItem(iI)){sessionStorage.removeItem(iI);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 vI=()=>zt(()=>import(`./404-BMj79XjT.js`),__vite__mapDeps([23,1,19,5,9,10,24]),import.meta.url),yI=()=>zt(()=>import(`./FirstSteps-BGR7npQx.js`),__vite__mapDeps([25,1,19,5,26,17,18,10,20,9,27,28,29,30,31,32,33,34,35,36,37,38,39]),import.meta.url),bI=()=>zt(()=>import(`./Cameras-_za6U1fG.js`),__vite__mapDeps([40,1,19,5,26,17,18,10,20,28,41,9,42,43,44,45,33,29,46,47,48,30,31,49,50,51,52]),import.meta.url),xI=()=>zt(()=>import(`./Sensors-CJRgHg24.js`),__vite__mapDeps([53,17,1,18,5,19,10,20,9,42,54,55,56,30,31,57,41,28,58,59,60,21,61,62,63,50,64,51,65]),import.meta.url),SI=()=>zt(()=>import(`./Assistant-BCmv7r12.js`),__vite__mapDeps([66,1,60,10,9,67,19,5,68,17,18,20,41,28,21,42,69,70,71,72,73,74,75,3,4,6,76,77,11,78,79,80,81,82,44,54,58,63,83]),import.meta.url),CI=()=>zt(()=>import(`./Camera-nAhvtDPM.js`),__vite__mapDeps([84,17,1,18,5,19,10,20,26,9,81,85,86,87,88,89,90]),import.meta.url),wI=()=>zt(()=>import(`./Camview-Dz37ulQ3.js`),__vite__mapDeps([91,17,1,18,5,19,10,20,26,21,9,92,42,78,44,93,85,94,88,89,95,70,96,97,98,99]),import.meta.url),TI=()=>zt(()=>import(`./Recordings-JmKjg1rv.js`),__vite__mapDeps([100,17,1,18,5,19,10,20,60,21,9,42,67,86,101,64,102,103,104]),import.meta.url),EI=()=>zt(()=>import(`./Floorplan-DEAXLv_l.js`),__vite__mapDeps([105,17,1,18,5,19,10,20,9,42,106,69,70,77,44,56,107,47,108,109,94,63,110,111,112]),import.meta.url),DI=()=>zt(()=>import(`./Faces-Bo3AYgKe.js`),__vite__mapDeps([113,17,1,18,5,19,10,20,21,9,42,106,43,74,11,85,114,63,50,115,102]),import.meta.url),OI=()=>zt(()=>import(`./Training-Cn7kcb1P.js`),__vite__mapDeps([116,1,19,5,10,9,42,70,72,44,56,117,58,118,63,64,119]),import.meta.url),kI=()=>zt(()=>import(`./Plugins-DRbDoh8f.js`),__vite__mapDeps([120,1,10,9,42,121,122,19,5,123,124,41,17,18,20,28,30,31,58,125,71,126,127,128,21,80,129,94,130,131,132,133,15,134,135,63,50,64,136,137,118,138,139]),import.meta.url),AI=()=>zt(()=>import(`./Plugin-CIH0TF3a.js`),__vite__mapDeps([140,17,1,18,5,19,10,20,26,41,28,60,21,9,3,4,6,44,45,42,33,29,46,122,141,124,117,142,62,63,136,121,123,133,15,137,118,138,139,143]),import.meta.url),jI=()=>zt(()=>import(`./Metrics-dwRXd0D8.js`),__vite__mapDeps([144,17,1,18,5,19,10,20,41,28,60,21,9,145,11,80,122,123,30,31,146,63,147,33,117,148,149,150,151]),import.meta.url),MI=()=>zt(()=>import(`./Updates-BtcOsKwD.js`),__vite__mapDeps([152,1,10,9,153,154,74,75,122,19,5,117,146,155,121,145,63]),import.meta.url),NI=()=>zt(()=>import(`./Config-DJjqahmx.js`),__vite__mapDeps([156,5,17,1,18,19,10,20,26,9,145,33,134,146,63,87,95,42,70,96,157]),import.meta.url),PI=()=>zt(()=>import(`./Logs-Dk47dJCa.js`),__vite__mapDeps([158,1,10,9,11,122,19,5,58,8,12,13,14,15,146,63,87,95,42,70,96,159,160]),import.meta.url),FI=()=>zt(()=>import(`./Terminal-B6u7U9CX.js`),__vite__mapDeps([161,17,1,18,5,19,10,20,26,9,79,12,13,63,64,87,95,42,70,96,160,162]),import.meta.url),II=()=>zt(()=>import(`./Automations-B5D6uMR9.js`),__vite__mapDeps([163,1,10,9,42,154,164,19,5,165,60,71,76,166,167,168,17,18,20,21,58,169,63,50]),import.meta.url),LI=()=>zt(()=>import(`./Automation-DiCBllSc.js`),__vite__mapDeps([170,17,1,18,5,19,10,20,9,42,54,164,165,60,71,76,166,167,171,41,28,172,168,21,108,109,173,63,110,50,111,115,64,174]),import.meta.url),RI=()=>zt(()=>import(`./Instances-BWRmmXbE.js`),__vite__mapDeps([175,17,1,18,5,19,10,20,9,42,77,58,63,50,138]),import.meta.url),zI=()=>zt(()=>import(`./Workers-BVY0gIZ6.js`),__vite__mapDeps([176,1,10,9,154,177,19,5,77,122,29,123,178,30,31,155,121,145,146,63,147,33,117,148,149,179]),import.meta.url),BI=()=>zt(()=>import(`./Settings-gP6KvlhW.js`),__vite__mapDeps([180,1,10,9,63,150,103,181]),import.meta.url),VI=()=>zt(()=>import(`./Menu-ByNNjqJn.js`),__vite__mapDeps([182,1,183,38,117,184,10]),import.meta.url),HI=()=>zt(()=>import(`./About-GuOorOsw.js`),__vite__mapDeps([185,1,10,9,177,19,5,186,26,17,18,20,63]),import.meta.url),UI=()=>zt(()=>import(`./Console-B2LJUI0g.js`),__vite__mapDeps([187,17,1,18,5,19,10,20,9,188,58,63,95,42,70,96,159]),import.meta.url),WI=()=>zt(()=>import(`./SettingsAccount-DxBaSiP3.js`),__vite__mapDeps([189,27,1,19,5,28,10,9,29,30,31,32,26,17,18,20,33,34,35,36]),import.meta.url),GI=()=>zt(()=>import(`./SettingsAppearance-CyRil5A6.js`),__vite__mapDeps([190,37,17,1,18,5,19,10,20,38,33,29]),import.meta.url),KI=()=>zt(()=>import(`./SettingsBackup-qF_Tg4EV.js`),__vite__mapDeps([191,1,10,9,145,192,33,74,29,19,5,56,142,131,39,193]),import.meta.url),qI=()=>zt(()=>import(`./SettingsRecordings-yoLYy5Ye.js`),__vite__mapDeps([194,17,1,18,5,19,10,20,60,21,45,26,41,28,9,42,33,29,46,137,118]),import.meta.url),JI=()=>zt(()=>import(`./SettingsRemote-Bl6CSoS0.js`),__vite__mapDeps([195,1,19,5,26,17,18,10,20,41,28,196,9,177,29,117,32,33,34,146,197]),import.meta.url),YI=()=>zt(()=>import(`./SettingsMqtt-B-vy3STG.js`),__vite__mapDeps([198,1,19,5,41,17,18,10,20,28,9,29,199]),import.meta.url),XI=()=>zt(()=>import(`./SettingsAssistant-BpoC9nuP.js`),__vite__mapDeps([200,17,1,18,5,19,10,20,41,28,9,70,67,73,77,11,80,44,29,107,30,31,135,169,201]),import.meta.url),ZI=()=>zt(()=>import(`./SettingsList-DVIZe748.js`),__vite__mapDeps([202,1,184,10]),import.meta.url),QI=()=>zt(()=>import(`./SettingsSystem-CSXyXTlu.js`),__vite__mapDeps([203,1,26,17,18,5,19,10,20,9,145,177,29,146,204,134,186]),import.meta.url),$I=()=>zt(()=>import(`./SettingsUsers-BWGACbPP.js`),__vite__mapDeps([205,1,19,5,26,17,18,10,20,9,85,30,31,35]),import.meta.url),eL=()=>zt(()=>import(`./SettingsNotifications-DxkB07uF.js`),__vite__mapDeps([206,1,26,17,18,5,19,10,20,9,207,208,29,85,30,31,209]),import.meta.url),tL=()=>zt(()=>import(`./SettingsPermissions-GDUHm4Dy.js`),__vite__mapDeps([210,1,10,9,29,19,5,209,26,17,18,20]),import.meta.url),{smBreakpoint:nL}=Md(),rL=[{name:`NotFound`,path:`/:pathMatch(.*)*`,component:vI,meta:{name:`notfound`,auth:{requiresAuth:!1,role:`none`}}},{name:`Login`,path:`/login`,alias:`/`,component:KF,meta:{name:`login`,auth:{requiresAuth:!1,role:`none`},ui:{background:V(()=>nL.value?`var(--card-background)`:void 0)}}},{name:`FirstSteps`,path:`/first-steps`,component:yI,meta:{name:`firststeps`,auth:{requiresAuth:!0,role:`user`}}},{name:`Home`,path:`/home`,component:ZM,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:Tl,active:Ol}},bottombar:{icon:{default:Tl,active:Ol}}}},{name:`Cameras`,path:`/cameras`,component:bI,meta:{name:`cameras`,auth:{requiresAuth:!0,role:`user`},ui:{containerSettings:{showTitle:!0,padding:!0},showNavbar:!0,showTopbar:!0,showBottombar:!0,showRouterLoading:!0},navbar:{position:`bottom`,group:`manage`,icon:{default:oc,active:fc}},bottombar:{icon:{default:oc,active:fc}}}},{name:`Assistant`,path:`/assistant`,component:SI,meta:{name:`assistant`,auth:{requiresAuth:!0,role:`user`},ui:{containerSettings:{showTitle:!1,padding:!1,disableScroll:!0,flushBottom:!0},showNavbar:!0,showTopbar:!0,showBottombar:!0,showRouterLoading:!0},navbar:{position:`bottom`,icon:{default:br,active:iu}},menu:{icon:{default:br,active:iu}}}},{name:`Sensors`,path:`/sensors`,component:xI,meta:{name:`sensors`,auth:{requiresAuth:!0,role:`admin`},ui:{containerSettings:{showTitle:!0,padding:!0},showNavbar:!0,showTopbar:!0,showBottombar:!0,showRouterLoading:!0},navbar:{position:`bottom`,group:`manage`,icon:{default:Sl,active:yl}},menu:{icon:{default:Sl,active:yl}}}},{name:`Camera`,path:`/cameras/:cameraname`,component:CI,meta:{name:`camera`,auth:{requiresAuth:!0,role:`user`},ui:{containerSettings:{disableScroll:!0,flushBottom:V(()=>nL.value)},showNavbar:!0,showTopbar:V(()=>!nL.value),showBottombar:V(()=>!nL.value),showRouterLoading:!0}}},{name:`Camview`,path:`/camview`,component:wI,meta:{name:`camview`,auth:{requiresAuth:!0,role:`user`},ui:{containerSettings:{disableScroll:!0,flushBottom:!0},background:`#000000`,showNavbar:!0,showTopbar:!0,showBottombar:!0,showRouterLoading:!0},navbar:{position:`top`,icon:{default:Su,active:yu}},bottombar:{icon:{default:Su,active:yu}}}},{name:`Recordings`,path:`/recordings`,component:TI,meta:{name:`recordings`,auth:{requiresAuth:!0,role:`user`},ui:{containerSettings:{showTitle:!1,padding:!1,disableScroll:!0,flushBottom:!0},showNavbar:!0,showTopbar:!0,showBottombar:!0,showRouterLoading:!0},navbar:{position:`top`,icon:{default:Ou,active:Tu}},bottombar:{icon:{default:Ou,active:Tu}}}},{name:`Floorplan`,path:`/floorplan`,component:EI,meta:{name:`floorplan`,auth:{requiresAuth:!0,role:`user`},ui:{containerSettings:{showTitle:!1,padding:!1,paddingBottom:!1,disableScroll:!0,flushBottom:!0},showNavbar:!0,showTopbar:!0,showBottombar:!0,showRouterLoading:!0},navbar:{position:`bottom`,group:`manage`,icon:{default:Qc,active:Qc}},menu:{icon:{default:Qc,active:Qc}}}},{name:`About`,path:`/about`,component:HI,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:DI,meta:{name:`faces`,auth:{requiresAuth:!0,role:`admin`},ui:{containerSettings:{showTitle:!0,padding:!0,allowOverflowX:!0},showNavbar:!0,showTopbar:!0,showBottombar:!0,showRouterLoading:!0},menu:{icon:{default:wr,active:wr}},navbar:{position:`bottom`,group:`manage`,icon:{default:wr,active:wr}}}},{name:`Training`,path:`/training`,component:OI,meta:{name:`training`,auth:{requiresAuth:!0,role:`admin`},ui:{containerSettings:{showTitle:!0,padding:!0,paddingBottom:!1,disableScroll:!0,flushBottom:!0},showNavbar:!0,showTopbar:!0,showBottombar:!0,showRouterLoading:!0},menu:{icon:{default:jl,active:jl}},navbar:{position:`bottom`,group:`manage`,icon:{default:jl,active:jl}}}},{name:`Plugins`,path:`/plugins`,component:kI,meta:{name:`plugins`,auth:{requiresAuth:!0,role:`admin`},ui:{containerSettings:{showTitle:!0,padding:!0},showNavbar:!0,showTopbar:!0,showBottombar:!0,showRouterLoading:!0},navbar:{position:`bottom`,group:`manage`,icon:{default:Tr,active:Ku}},menu:{icon:{default:Tr,active:Ku}}}},{name:`ScopedPlugin`,path:`/plugins/:scope/:pluginname`,component:AI,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:AI,meta:{name:`plugin`,auth:{requiresAuth:!0,role:`admin`},ui:{containerSettings:{padding:!0},showNavbar:!0,showTopbar:!0,showBottombar:!0,showRouterLoading:!0}}},{name:`Metrics`,path:`/metrics`,component:jI,meta:{name:`metrics`,auth:{requiresAuth:!0,role:`admin`},ui:{containerSettings:{showTitle:!0,padding:!0},showNavbar:!0,showTopbar:!0,showBottombar:!0,showRouterLoading:!0},navbar:{position:`bottom`,group:`system`,icon:{default:Uu,active:Bu}},menu:{icon:{default:Uu,active:Bu}}}},{path:`/admin`,redirect:`/metrics`},{name:`Updates`,path:`/updates`,component:MI,meta:{name:`updates`,auth:{requiresAuth:!0,role:`admin`},ui:{containerSettings:{showTitle:!0,padding:!0},showNavbar:!0,showTopbar:!0,showBottombar:!0,showRouterLoading:!0},navbar:{position:`bottom`,icon:{default:gl,active:pl}},menu:{icon:{default:gl,active:pl}}}},{name:`Config`,path:`/config`,component:NI,meta:{name:`config`,auth:{requiresAuth:!0,role:`admin`},ui:{containerSettings:{disableScroll:!0,flushBottom:V(()=>nL.value)},showNavbar:!0,showTopbar:!0,showBottombar:!0,showRouterLoading:!0},navbar:{position:`bottom`,group:`system`,icon:{default:tu,active:Ql}},menu:{icon:{default:tu,active:Ql}}}},{name:`Logs`,path:`/logs`,component:PI,meta:{name:`logs`,auth:{requiresAuth:!0,role:`admin`},ui:{background:`#000000`,containerSettings:{disableScroll:!0,flushBottom:V(()=>nL.value)},showNavbar:!0,showTopbar:!0,showBottombar:!0,showRouterLoading:!0},navbar:{position:`bottom`,group:`system`,icon:{default:Nc,active:Wc}},menu:{icon:{default:Nc,active:Wc}}}},{name:`Console`,path:`/console`,component:UI,meta:{name:`console`,auth:{requiresAuth:!0,role:`user`},ui:{background:`#000000`,containerSettings:{disableScroll:!0,flushBottom:V(()=>nL.value)},showNavbar:!0,showTopbar:!0,showBottombar:!0,showRouterLoading:!0},navbar:{position:`bottom`,group:`system`,icon:{default:Kl,active:Ul}},menu:{icon:{default:Kl,active:Ul}}}},{name:`Terminal`,path:`/terminal`,component:FI,meta:{name:`terminal`,disabledInElectron:!0,auth:{requiresAuth:!0,role:`admin`},ui:{background:`#000000`,containerSettings:{disableScroll:!0,flushBottom:V(()=>nL.value)},showNavbar:!0,showTopbar:!0,showBottombar:!0,showRouterLoading:!0},navbar:{position:`bottom`,group:`system`,icon:{default:Ic,active:Yc}},menu:{icon:{default:Ic,active:Yc}}}},{name:`Automations`,path:`/automations`,component:II,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:`manage`,icon:{default:il,active:tl}},menu:{icon:{default:il,active:tl}}}},{name:`Automation`,path:`/automations/:id`,component:LI,meta:{name:`automation`,auth:{requiresAuth:!0,role:`admin`},ui:{containerSettings:{disableScroll:!0,paddingBottom:!1,flushBottom:!0},showNavbar:!0,showTopbar:!0,showBottombar:!0}}},{name:`Instances`,path:`/instances`,component:RI,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:`manage`,icon:{default:lc,active:hc}},menu:{icon:{default:lc,active:hc}}}},{name:`Workers`,path:`/workers`,component:zI,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:`manage`,icon:{default:Ac,active:zc}},menu:{icon:{default:Ac,active:zc}}}},{name:`Menu`,path:`/menu`,component:VI,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:Lu,active:Lu}}}},{name:`Settings`,path:`/settings`,component:BI,meta:{name:`settings`,path:`/settings/account`,auth:{requiresAuth:!0,role:`user`},navbar:{position:`bottom`,icon:{default:yr,active:Yl}},menu:{icon:{default:yr,active:Yl}}},children:[{name:`SettingsList`,path:``,component:ZI,meta:{name:`settings`,auth:{requiresAuth:!0,role:`user`},ui:{showNavbar:!0,showTopbar:!0,showBottombar:!0,showRouterLoadingSub:!0}}},{name:`SettingsAccount`,path:`account`,component:WI,meta:{name:`account`,description:`account_description`,auth:{requiresAuth:!0,role:`user`},ui:{showNavbar:!0,showTopbar:!0,showBottombar:!0,showRouterLoadingSub:!0},settingsBar:{group:`personal`,icon:{default:Ll,active:Pl}}}},{name:`SettingsAppearance`,path:`appearance`,component:GI,meta:{name:`appearance`,description:`appearance_description`,auth:{requiresAuth:!0,role:`user`},ui:{showNavbar:!0,showTopbar:!0,showBottombar:!0,showRouterLoadingSub:!0},settingsBar:{group:`personal`,icon:{default:wc,active:Dc}}}},{name:`SettingsUsers`,path:`user`,component:$I,meta:{name:`user`,description:`user_description`,auth:{requiresAuth:!0,role:`admin`},ui:{showNavbar:!0,showTopbar:!0,showBottombar:!0,showRouterLoadingSub:!0},settingsBar:{group:`system`,icon:{default:gu,active:pu}}}},{name:`SettingsNotifications`,path:`notifications`,component:eL,meta:{name:`notifications`,description:`notifications_description`,auth:{requiresAuth:!0,role:`user`},ui:{showNavbar:!0,showTopbar:!0,showBottombar:!0,showRouterLoadingSub:!0},settingsBar:{group:`personal`,icon:{default:Sr,active:Bl}}}},{name:`SettingsPermissions`,path:`permissions`,component:tL,meta:{name:`permissions`,description:`permissions_description`,auth:{requiresAuth:!0,role:`user`},ui:{showNavbar:!0,showTopbar:!0,showBottombar:!0,showRouterLoadingSub:!0},settingsBar:{group:`personal`,icon:{default:uu,active:su}}}},{name:`SettingsRecordings`,path:`recordings`,component:qI,meta:{name:`recordings`,description:`recordings_description`,auth:{requiresAuth:!0,role:`admin`},ui:{showNavbar:!0,showTopbar:!0,showBottombar:!0,showRouterLoadingSub:!0},settingsBar:{group:`system`,icon:{default:Ou,active:Tu}}}},{name:`SettingsRemote`,path:`remote`,component:JI,meta:{name:`remote`,description:`remote_access_description`,auth:{requiresAuth:!0,role:`admin`},ui:{showNavbar:!0,showTopbar:!0,showBottombar:!0,showRouterLoadingSub:!0},settingsBar:{group:`system`,icon:{default:ul,active:sl}}}},{name:`SettingsMqtt`,path:`mqtt`,component:YI,meta:{name:`mqtt`,description:`mqtt_description`,auth:{requiresAuth:!0,role:`admin`},ui:{showNavbar:!0,showTopbar:!0,showBottombar:!0,showRouterLoadingSub:!0},settingsBar:{group:`system`,icon:{default:Cr,active:Cr}}}},{name:`SettingsAssistant`,path:`assistant`,component:XI,meta:{name:`assistant`,description:`assistant_description`,auth:{requiresAuth:!0,role:`admin`},ui:{showNavbar:!0,showTopbar:!0,showBottombar:!0,showRouterLoadingSub:!0},settingsBar:{group:`system`,icon:{default:br,active:iu}}}},{name:`SettingsBackup`,path:`backup`,component:KI,meta:{name:`backup`,description:`backup_description`,auth:{requiresAuth:!0,role:`admin`},ui:{showNavbar:!0,showTopbar:!0,showBottombar:!0,showRouterLoadingSub:!0},settingsBar:{group:`system`,icon:{default:vc,active:xc}}}},{name:`SettingsSystem`,path:`system`,component:QI,meta:{name:`system`,description:`system_description`,auth:{requiresAuth:!0,role:`admin`},ui:{showNavbar:!0,showTopbar:!0,showBottombar:!0,showRouterLoadingSub:!0},settingsBar:{group:`system`,icon:{default:Pu,active:ju}}}}]}],iL=[`/home`,`/camview`,`/cameras`,`/recordings`,`/faces`,`/automations`,`/plugins`,`/settings`,`/config`,`/logs`,`/terminal`,`/instances`,`/workers`,`/metrics`];function aL(){try{return!!$n().getQueryData([`api`])?.electron}catch{return!1}}function oL(){let e=aL();return iL.flatMap(t=>{let n=rL.find(e=>e.path===t);return!n||!Af(n)||n.meta?.disabledInElectron&&e?[]:[n]})}function sL(){let e=Cd().uiSettings.interface.landingPage;return e&&oL().some(t=>t.path===e)?e:`/home`}function cL(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===`/sensors`?{group:`menu`,key:`sensors`,depth:1}:t===`/floorplan`?{group:`menu`,key:`floorplan`,depth:1}:t===`/faces`?{group:`menu`,key:`faces`,depth:1}:t===`/training`?{group:`menu`,key:`training`,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===`/metrics`?{group:`menu`,key:`metrics`,depth:1}:t===`/updates`?{group:`menu`,key:`updates`,depth:1}:t===`/config`?{group:`menu`,key:`config`,depth:1}:t===`/logs`?{group:`menu`,key:`logs`,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===`/assistant`?{group:`menu`,key:`assistant`,depth:1}:t===`/about`?{group:`menu`,key:`about`,depth:1}:t.startsWith(`/automations/`)?{group:`menu`,key:`automation-detail`,depth:2}:null}var lL=new Map,uL=600,dL=150,fL=0;function pL(e){return new Promise(t=>{let n=!1,r=!1,i,a=new MutationObserver(c),o=setTimeout(u,uL),s=mL.afterEach(()=>{s(),n=!0,a.observe(document.body,{childList:!0,subtree:!0,attributes:!0,attributeFilter:[`class`,`style`,`data-camera-morph`]}),an(c)});function c(){if(!n||r)return;let t=Array.from(document.querySelectorAll(`[data-camera-morph]`)).find(e=>e.offsetWidth>0);t&&!t.closest(`[class*="-enter-"]`)?l(t):(clearTimeout(i),i=setTimeout(()=>{e.isFetching()||u()},dL))}function l(e){r=!0,a.disconnect(),clearTimeout(i);let t=Array.from(e.querySelectorAll(`img`)).map(e=>e.decode().catch(()=>void 0));Promise.all(t).then(u)}function u(){a.disconnect(),clearTimeout(i),clearTimeout(o),s(),t()}})}var mL=yn({history:Ln(Na()),routes:rL,scrollBehavior:async(e,t,n)=>{if(fL||nd())return!1;if(n)return n;if(e.fullPath===t.fullPath)return md(),!1;if(t.path===e.path||e.path===`/`)return{top:0,left:0};await ve(10);let r=lL.get(e.path);return r===void 0?{top:0,left:0,behavior:`smooth`}:(lL.delete(e.path),{top:r,left:0})}});mL.absUrl=(e=`#`,t=!0)=>{let n=document.createElement(`a`);n.href=e,n.target=t&&e!==`#`?`_blank`:``,t&&(n.rel=`noopener noreferrer`),n.click()},mL.beforeEach(async(e,t)=>{let n=$n(),r=xL(),i=jf();if(e.meta.disabledInElectron&&n.getQueryData([`api`])?.electron)return sL();let a=e.name.toLowerCase();if(i.routerLoading=!0,i.setRoutes(t.fullPath,e.fullPath),lL.set(t.path,td()),e.path!==t.path&&ud(),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 sL();if(e.path===`/settings`&&window.innerWidth>=640){let e=Cd().uiSettings.interface.selectedSettingsView;return`/settings/${xd.includes(e)?e:`account`}`}}else if(a!==`login`)return`/`}),mL.beforeResolve(async(e,t)=>{let n=cL(t.path),r=cL(e.path),i=r?.group===`main`&&!!R(e.meta.ui?.containerSettings?.disableScroll);if(!n||!r||n.group!==r.group||n.key===r.key||n.ignore===r.key||r.ignore===n.key){i||ad();return}let a=n.group===`main`;if(a||ad(),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}let o=!!document.documentElement.dataset.menuDirection,s=jf();s.isTransitioning=!0;let c=$n(),l=lL.get(e.path)??0;a&&(lL.delete(e.path),fL++);let u=Jn(a?()=>pL(c):void 0);await u.captured,a&&id(l),u.finished.finally(()=>{a&&(i||ad(l),fL--),s.isTransitioning=!1,o&&delete document.documentElement.dataset.menuDirection})});function hL(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)}mL.afterEach(()=>{let e=jf();e.routerLoading=!1,Io().bannerMode.value===null&&hI()}),mL.onError((e,t)=>{let n=jf();n.routerLoading=!1,hL(e)&&Xu(()=>window.location.assign(t.fullPath))});var gL={de:Qn,en:er},_L=`selectedLanguage`;function vL(){let e=localStorage.getItem(_L);if(!e)return null;try{let t=JSON.parse(e);return typeof t==`string`?t:null}catch{return e}}function yL(){return typeof window>`u`?null:new URLSearchParams(window.location.search).get(`cui_lang`)||(za()?vL():null)}var bL=zn(`locale`,()=>{let e=xL(),t=oi(),{electron:n}=or(),r=Ho.global,i=Ft(`language`,`auto`),a=V(()=>i.value===`auto`?Bo():i.value),o=V(()=>[{label:r.t(`components.form.label.language_system`),value:`auto`},...Ro.map(e=>({label:zo[e],value:e}))]),s=null;function c(e){n?.send(`change-language`,e),r.locale.value=e}async function l(e){let n=gL[e];n&&(t.config.locale=n)}function u(e){s=e,i.value=e}function d(e){u(Bo(e))}G(i,t=>{t!==s&&(s=t,e.isLoggedIn&&e.updateUser({preferences:{language:t}}))}),G(a,e=>{c(e),l(e)});let f=yL();return f&&d(f),za()&&typeof window<`u`&&window.addEventListener(`storage`,e=>{if(e.key!==_L)return;let t=vL();t&&d(t)}),c(a.value),l(a.value),Gs(`/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}}),xL=zn(`auth`,()=>{let e=new ps,t=Io(),n=Ft(Pa()?`user:${Na()}`:`user`,null,{serializer:{read:e=>e?JSON.parse(e):null,write:e=>JSON.stringify(e)}}),r=P(null),i=P(!1),a=P(!1),o=P(!1),{mutateAsync:s,isPending:c}=e.patchUserQuery(),l=V(()=>n.value!==null&&!t.isNeedsAuth.value),u=V(()=>r.value!==null),d=V(()=>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,role:e.role,firstLogin:e.firstLogin,avatar:e.avatar,navLayout:e.navLayout??null},e.language&&bL().applyServerLanguage(e.language))}async function p(e){if(!l.value){i.value=!0;try{let t=await ks(e);if(Es(t)){r.value={tempToken:t.tempToken};return}f(t.user),mL.push(sL())}finally{i.value=!1}}}async function m(e){if(r.value){a.value=!0;try{f((await As(r.value.tempToken,e)).user),r.value=null,mL.push(sL())}finally{a.value=!1}}}function h(){r.value=null}async function g(){o.value=!0;try{await js()}finally{n.value=null,r.value=null,o.value=!1,Dd();let e=Va();e?window.location.assign(e):mL.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 G(n,(e,n)=>{i.value||o.value||e===null&&n!==null&&(r.value=null,Dd(),t.isNeedsAuth.value||(t.reset(),t.boot(`default`)),mL.push(`/`))}),G(()=>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 SL(e){if(qn.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 CL(e){return qn.isCancel(e)&&e.message===`http-transport: no target`}function wL(e,t){let n=In(e,`HH:mm:ss`).value;return t&&(n=In(e,`HH:mm`).value),{timestamp:e,formattedTime:n}}function TL(e){let t=new Date(e),n=new Date,r=t.toLocaleTimeString([],{hour:`2-digit`,minute:`2-digit`});return t.toDateString()===n.toDateString()?r:`${t.toLocaleDateString([],{month:`short`,day:`numeric`})} ${r}`}function EL(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 DL(e){return new Intl.NumberFormat(void 0,{notation:`compact`,maximumFractionDigits:1}).format(e)}function OL(e){if(e<1024)return`${e} B`;let t=[`KB`,`MB`,`GB`,`TB`],n=e,r=-1;do n/=1024,r++;while(n>=1024&&r<t.length-1);return`${n.toFixed(1)} ${t[r]}`}function kL(e){if(!e)return;let t=e;if(!t.startsWith(`/`))try{let e=new URL(t);t=e.pathname+e.search}catch{return}if(!t.startsWith(`/api/`))return;let n=Io(),r=n.accessToken.value;if(!r)return;let i=n.endpoint.value??location.origin,a=t.includes(`?`)?`&`:`?`;return`${i}${t}${a}token=${r}`}function AL(e=`logo-512.png`){if(e.startsWith(`data:`)||e.startsWith(`blob:`)||e.startsWith(`http:`)||e.startsWith(`https:`))return e;let t=xL(),n=Io(),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}`;e=`logo-256.png`}if(e.includes(`avatar`)){if(i)return`${r}/api/files/${e}?token=${i}`;e=`logo-256.png`}let a=`/src/assets/images/${e}`,o=Object.assign({"/src/assets/css/extras.css":_i,"/src/assets/css/inter.css":vi,"/src/assets/css/main.css":yi,"/src/assets/css/markdown.css":bi,"/src/assets/css/overrides.css":xi,"/src/assets/css/tailwind.css":gi,"/src/assets/css/theme.css":Si,"/src/assets/css/transitions.css":Ci,"/src/assets/css/utils.css":wi,"/src/assets/images/camera-preview.png":yo,"/src/assets/images/error-256.png":xo,"/src/assets/images/logo-256.png":Co,"/src/assets/images/logo-512.png":To,"/src/assets/images/logo.png":Do,"/src/assets/images/logo.svg":ko,"/src/assets/images/logo_animated.svg":jo,"/src/assets/images/logo_loading_circle.svg":No});return o[a]?o[a].default:``}async function jL(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 ML(){if(typeof crypto.randomUUID==`function`)return crypto.randomUUID();let e=new Uint8Array(16);crypto.getRandomValues(e),e[6]=e[6]&15|64,e[8]=e[8]&63|128;let t=Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(``);return`${t.slice(0,8)}-${t.slice(8,12)}-${t.slice(12,16)}-${t.slice(16,20)}-${t.slice(20)}`}function NL(e=10){return Array.from({length:e},()=>Math.floor(Math.random()*25+10).toString(36)).join(``)}function PL(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]=PL(e,t)}),n}let n={};return t.set(e,n),Object.keys(e).forEach(r=>{n[r]=PL(e[r],t)}),n}function FL(e){switch(e){case`error`:return`error`;case`info`:return`info`;case`success`:return`success`;case`warning`:return`warn`;default:return`info`}}function IL(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 LL(e){if(!e)return!1;let t=IL(e);return navigator.clipboard?.writeText(e).catch(()=>{}),t}async function RL(e){if(!e)return!1;let t=IL(e),n=!1;if(navigator.clipboard?.writeText)try{await navigator.clipboard.writeText(e),n=!0}catch{n=!1}return t||n}function zL(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 BL(e,t){let n=Object.keys(e);return n.length===Object.keys(t).length&&n.every(n=>e[n]===t[n])}function VL(e,t,n){if(!e)return t;let r=new Map(e.map(e=>[n(e),e])),i=t.map(e=>{let t=r.get(n(e));return t&&BL(t,e)?t:e});return i.length===e.length&&i.every((t,n)=>t===e[n])?e:i}var HL=`cui-proxy-login-reload`;async function UL(e,t){try{return new URL(e).origin===window.location.origin&&(await fetch(`${e}/api/auth/check`,{redirect:`manual`,cache:`no-store`,signal:t})).type===`opaqueredirect`}catch{return!1}}function WL(){try{if(sessionStorage.getItem(HL))return!1;sessionStorage.setItem(HL,`1`)}catch{return!1}return window.location.reload(),!0}function GL(e){return e instanceof DOMException&&(e.name===`TimeoutError`||e.name===`AbortError`)}function KL(){try{sessionStorage.removeItem(HL)}catch{}}function qL(e,t){return async n=>{let r=n.endpoint.url,i=n.lastTokens?.access??``;try{if(await e.authCheck(r,i,n.signal),KL(),!n.lastTokens?.access)throw ye(`needs-auth`,`no tokens`);return n.lastTokens}catch(e){if(_e(e)||n.signal.aborted)throw e;if(SL(e))throw ye(`aborted`,`request canceled`);let i=qn.isAxiosError(e)?e.response?.status:void 0;if(typeof i==`number`)KL();else if(await UL(r,n.signal)&&WL())throw ye(`transient`,`login proxy redirect, reloading`);if(!n.lastTokens?.access)throw typeof i==`number`?ye(`needs-auth`,`no tokens`):ye(`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(GL(e))throw ye(`transient`,`refresh lock not granted in time`);if(SL(e))throw ye(`aborted`,`refresh canceled`);let t=qn.isAxiosError(e)?e.response?.status:void 0;throw t===401||t===403?ye(`needs-auth`,`refresh rejected`):ye(`transient`,e instanceof Error?e.message:`refresh failed`)}throw i===401||i===403?ye(`needs-auth`,`tokens expired`):ye(`transient`,e instanceof Error?e.message:`auth/check failed`)}}}function JL(e){let t=Za(),n=Ks(e.initialSession),r=Ei(),i=Xs({api:t,cloudSession:n,readL1AccessToken:void 0,onL1Unavailable:async()=>{window.location.href=e.initialSession.cloudApiBase?`${e.initialSession.cloudApiBase}/`:`/`},logger:e.logger}),a=ja(),o=e.initialSession.serverId,s=vo({api:t,cloudSession:n,cloudSessionLifecycle:i,storage:a,serverId:o,logger:e.logger}),c=Vs(t);return{options:{adapters:{storage:a,visibilitySource:Ma(),networkSource:r.networkSource,networkChangeSource:r.networkChangeSource,wakeSource:ki()},callbacks:{discover:s,probe:qL(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 YL=null;async function XL(e={}){if(YL)return YL;let t=await Ls();if(t.mode===`cloud`){if(!t.cloudSession)throw window.location.href=Ta,Error(`cloud handoff incomplete — bouncing to cloud frontend`);let{options:n,api:r,cloudSession:i}=JL({initialSession:t.cloudSession,logger:e.logger});return YL={connection:da(n),api:r,mode:`cloud`,cloudSession:i},YL}if(!t.directEndpointUrl)throw Error(`direct mode detected but no endpoint URL resolved`);let{options:n,api:r}=Us(t.directEndpointUrl,e.logger);return YL={connection:da(n),api:r,mode:`direct`},YL}function ZL(){if(!YL)throw Error(`getBootResult(): app not booted — call bootApp() first`);return YL}function QL(){return ZL().mode}function $L(e,t){let n=new AbortController;e.interceptors.request.use(e=>(e.signal??=n.signal,e)),t.subscribe((e,t)=>{e.kind!==t.kind&&(e.kind===`idle`||e.kind===`needs-auth`||t.kind===`needs-auth`)&&(n.abort(),n=new AbortController)})}var eR=3,tR=5,nR=null;function rR(){return nR||(nR=iR().finally(()=>{nR=null}),nR)}async function iR(){let e=ZL();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 aR(){let e=ga();$L(e,fa().kernel),e.interceptors.response.use(e=>e,async t=>{let n=t.config,r=ya(t);if(t.response?.status===401&&r?.message===`Session expired`&&typeof r.redirect==`string`&&n&&!n._proxyRetry){let r=await rR();return r?(n._proxyRetry=!0,n.headers&&(n.headers[`X-Proxy-Session`]=r),e(n)):Promise.reject(t)}if(Sa(t)||Ca(t))return await rc(),Promise.reject(t);if(xa(t)&&n){let r=n._tunnelRetries??0;if(n._tunnelRetries=r+1,r>=eR)return Promise.reject(t);let i=t.response?.headers?.[`retry-after`],a=Number.parseInt(i??``,10)||tR;return await new Promise(e=>setTimeout(e,a*1e3)),e(n)}return Promise.reject(t)})}export{AN as $,$f as $n,hc as $r,IS as $t,fF as A,Oa as Ai,uy as An,nd as Ar,YT as At,nP as B,Ki as Bi,vh as Bn,yu as Br,gw as Bt,bL as C,Ra as Ci,nb as Cn,Od as Cr,hD as Ct,gI as D,Ta as Di,Ty as Dn,bd as Dr,ME as Dt,rL as E,Ba as Ei,Dy as En,Cd as Er,zE as Et,hP as F,fa as Fi,Uh as Fn,sd as Fr,fw as Ft,jN as G,cm as Gn,Bl as Gr,ew as Gt,aN as H,Nm as Hn,iu as Hr,lw as Ht,_P as I,pa as Ii,gh as In,Xu as Ir,mw as It,kN as J,Zp as Jn,pl as Jr,GC as Jt,SN as K,rm as Kn,jl as Kr,ZC as Kt,oP as L,ca as Li,_h as Ln,Zu as Lr,dw as Lt,nF as M,wa as Mi,i_ as Mn,cd as Mr,Cw as Mt,mP as N,va as Ni,Qh as Nn,od as Nr,Sw as Nt,mI as O,Aa as Oi,Sy as On,vd as Or,hE as Ot,gP as P,$ as Pi,Zh as Pn,ld as Pr,_w as Pt,vN as Q,np as Qn,Ic as Qr,zS as Qt,tP as R,ma as Ri,xh as Rn,Ku as Rr,vw as Rt,xL as S,Ua as Si,ab as Sn,Ad as Sr,DD as St,mL as T,za as Ti,jy as Tn,xd as Tr,HE as Tt,sN as U,Mm as Un,Yl as Ur,ow as Ut,qN as V,dh as Vn,su as Vr,hw as Vt,cN as W,hm as Wn,Ul as Wr,rw as Wt,TN as X,_p as Xn,tl as Xr,oC as Xt,LN as Y,Cp as Yn,sl as Yr,fC as Yt,NN as Z,ap as Zn,zc as Zr,HS as Zt,kL as _,Io as _i,Ib as _n,Rd as _r,RO as _t,LL as a,tc as ai,hS as an,wf as ar,rN as at,NL as b,Ha as bi,xb as bn,Nd as br,kD as bt,OL as c,Gs as ci,rS as cn,hf as cr,AM as ct,EL as d,ms as di,Bx as dn,Yd as dr,rM as dt,fc as ei,NS as en,Xf as er,PN as et,wL as f,ps as fi,Nx as fn,Jd as fr,Zj as ft,VL as g,Ho as gi,zb as gn,zd as gr,GO as gt,CL as h,Go as hi,Jb as hn,Bd as hr,Ej as ht,RL as i,ec as ii,vS as in,Df as ir,oN as it,LP as j,Da as ji,A_ as jn,rd as jr,KT as jt,DF as k,ka as ki,yy as kn,hd as kr,dE as kt,TL as l,ws as li,eS as ln,ff as lr,vM as lt,SL as m,Uo as mi,Zb as mn,Kd as mr,Uj as mt,XL as n,oc as ni,wS as nn,jf as nr,FN as nt,PL as o,$s as oi,fS as on,xf as or,eN as ot,AL as p,Ko as pi,fx as pn,qd as pr,Wj as pt,lN as q,Qp as qn,Sl as qr,JC as qt,QL as r,rc as ri,xS as rn,Af as rr,uN as rt,zL as s,nc as si,oS as sn,vf as sr,NM as st,aR as t,lc as ti,AS as tn,qf as tr,wN as tt,DL as u,hs as ui,Yx as un,lf as ur,hM as ut,FL as v,Ao as vi,Ab as vn,Md as vr,IO as vt,oL as w,La as wi,Xy as wn,wd as wr,mD as wt,jL as x,Pa as xi,mb as xn,jd as xr,OD as xt,ML as y,Ga as yi,Db as yn,Pd as yr,jD as yt,rP as z,sa as zi,yh as zn,Tu as zr,pw as zt};