@fastybird/smart-panel-admin 1.1.0-alpha.41 → 1.1.0-alpha.43

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 (238) hide show
  1. package/dist/assets/{alert-I-oSc4A8.js → alert-Bc6ljXPb.js} +1 -1
  2. package/dist/assets/{card-add-form-CwVNfOa0.js → card-add-form-B4x7u0cp.js} +1 -1
  3. package/dist/assets/{card-edit-form-CSyu6tst.js → card-edit-form-Cf5VjS68.js} +1 -1
  4. package/dist/assets/{checkbox-CtqO8Xm5.js → checkbox-C8Q48mHi.js} +1 -1
  5. package/dist/assets/{clamp-_tCsf9IO.js → clamp-lVqf-YIx.js} +1 -1
  6. package/dist/assets/{col-CQn4VXnk.js → col-DG0Uk0fn.js} +1 -1
  7. package/dist/assets/{collapse-hdC45R5w.js → collapse-itpGQffm.js} +1 -1
  8. package/dist/assets/{common-D4Z2wgrj.js → common-Bn7l0dTZ.js} +26 -26
  9. package/dist/assets/components-0KOwvMX5.js +1 -0
  10. package/dist/assets/components-B96utdeD.js +1 -0
  11. package/dist/assets/components-BQk9ABpe.js +1 -0
  12. package/dist/assets/{components-DMv2ePKp.js → components-CpPrlrei.js} +2 -2
  13. package/dist/assets/{components-Cb3FBmz7.js → components-DRhJe95S.js} +2 -2
  14. package/dist/assets/components-DS0uNHCr.js +1 -0
  15. package/dist/assets/components-Dc4T4W8z.js +1 -0
  16. package/dist/assets/{components-EQDhXTcZ.js → components-Dsancsu8.js} +2 -2
  17. package/dist/assets/{components-CzhROY3R.js → components-dPbDseUH.js} +1 -1
  18. package/dist/assets/components-l2JsyjVX.js +1 -0
  19. package/dist/assets/composables-B8QvbgV62.js +1 -0
  20. package/dist/assets/{composables-BgJl3zKR.js → composables-BSctq0KM.js} +1 -1
  21. package/dist/assets/composables-CH-OkvsW.js +1 -0
  22. package/dist/assets/composables-CmYPZ47C.js +1 -0
  23. package/dist/assets/{composables-Cpk78oG1.js → composables-D76SlpcV.js} +1 -1
  24. package/dist/assets/{composables-CF8Jf15i.js → composables-DHER6Xkm.js} +1 -1
  25. package/dist/assets/{composables-D2O7i4W5.js → composables-DUQ9KHEb.js} +1 -1
  26. package/dist/assets/composables-DW-Zpqxd.js +1 -0
  27. package/dist/assets/composables-DdPJS-mE.js +1 -0
  28. package/dist/assets/{composables-2NuyfNXO.js → composables-XOSB-fgc.js} +1 -1
  29. package/dist/assets/{composables-DeXiqZuU.js → composables-ZLvwxxZC.js} +1 -1
  30. package/dist/assets/config-CAo-YTTc.js +2 -0
  31. package/dist/assets/{dashboard-YUP0xrqH.js → dashboard-CtTnq3HK.js} +2 -2
  32. package/dist/assets/{dashboard.types-CkyEAwdv.js → dashboard.types-BpuAFT4r.js} +1 -1
  33. package/dist/assets/{data-source-edit-form-BlyvQ5Mk.js → data-source-edit-form-D35kVTS6.js} +1 -1
  34. package/dist/assets/{descriptions-BHa0Pjk7.js → descriptions-M8aFuu-k.js} +1 -1
  35. package/dist/assets/{devices-CTf6tev7.js → devices-B5nRq5Yb.js} +2 -2
  36. package/dist/assets/{devices-virtual.constants-D0L6zhgQ.js → devices-virtual.constants-C1_ro-LK.js} +1 -1
  37. package/dist/assets/{dialog-4clb5GeY.js → dialog-DhC8145N.js} +1 -1
  38. package/dist/assets/{drawer-Dnlv6Zc7.js → drawer-ByKAvd_2.js} +1 -1
  39. package/dist/assets/form-jpL98Nph.js +12 -0
  40. package/dist/assets/index-CuRCjonp.js +11 -0
  41. package/dist/assets/{index-CV45di_J.css → index-Hy8OvYuc.css} +1 -1
  42. package/dist/assets/input-number-BRmkMRRq.js +1 -0
  43. package/dist/assets/{integration-config-dialog-DWcOAIcd.js → integration-config-dialog-aLehHqcK.js} +1 -1
  44. package/dist/assets/{keys-BMDz3FOI.js → keys-C5NnpJdN.js} +1 -1
  45. package/dist/assets/{layout-config-TRoVTCgx.js → layout-config-NcC5DHPR.js} +1 -1
  46. package/dist/assets/{layout-default-CUOZ4MAi.js → layout-default-CPoBlQZ5.js} +1 -1
  47. package/dist/assets/{layout-lock-C-s1eZ35.js → layout-lock-CESlP_M8.js} +1 -1
  48. package/dist/assets/{layout-profile-D1uL3lv-.js → layout-profile-0bWlxiwz.js} +1 -1
  49. package/dist/assets/layout-profile-C4ht-llW.js +1 -0
  50. package/dist/assets/{layout-sign-MILHx4Av.js → layout-sign-Cg2b24JH.js} +1 -1
  51. package/dist/assets/layout-sign-_yS8Xz76.js +1 -0
  52. package/dist/assets/{list-data-sources-adjust-BRhmPWJF.js → list-data-sources-adjust-2lJX_ENq.js} +1 -1
  53. package/dist/assets/{list-locations-CE_JzOaE.js → list-locations-uySMgHl2.js} +1 -1
  54. package/dist/assets/{list-users-1kC5_j5X.js → list-users-BBgR3DOQ.js} +1 -1
  55. package/dist/assets/logs-entries.transformers-BjKfup2a.js +1 -0
  56. package/dist/assets/{mcp.exceptions-cay0WaYC.js → mcp.exceptions-D0YUoxSw.js} +1 -1
  57. package/dist/assets/notifications.exceptions-CpBjpo3W.js +1 -0
  58. package/dist/assets/{omit-Dl8Tg7dR.js → omit-B_6GPdqv.js} +1 -1
  59. package/dist/assets/{page-configure-Dz17Sp3H.js → page-configure-By4HPQSb.js} +1 -1
  60. package/dist/assets/{page-configure-Dn69RQ5P.js → page-configure-DE6uqM2E.js} +1 -1
  61. package/dist/assets/pagination-CdLRjz12.js +1 -0
  62. package/dist/assets/{radio-DvF3ArlX.js → radio-CMz-0Y0Y.js} +1 -1
  63. package/dist/assets/{scene-add-form-telggkNn.js → scene-add-form-CAxqp0MZ.js} +1 -1
  64. package/dist/assets/{scene-edit-form-D6fUKT6Q.js → scene-edit-form-CvKkPJuT.js} +1 -1
  65. package/dist/assets/{schemas.utils-fK_cgNcT.js → schemas.utils-BElnm6kF.js} +1 -1
  66. package/dist/assets/{select-data-source-plugin-BMvwgPrL.js → select-data-source-plugin-C80G-hUW.js} +1 -1
  67. package/dist/assets/select-pvePhCbe.js +1 -0
  68. package/dist/assets/slider-Dne3bbVF.js +1 -0
  69. package/dist/assets/{spaces-DVdwHxsH.js → spaces-DWJb7hcY.js} +2 -2
  70. package/dist/assets/spaces-home-control.constants-bGgXf051.js +1 -0
  71. package/dist/assets/{steps-DuddYjrb.js → steps-CKdwrlWC.js} +1 -1
  72. package/dist/assets/{system-DKwJYfiJ.js → system-DoOP8KDP.js} +2 -2
  73. package/dist/assets/{table-CeNNpGH7.js → table-DiAinRPD.js} +1 -1
  74. package/dist/assets/tabs-DIGEewlR.js +1 -0
  75. package/dist/assets/{tile-detail-DrEapGjL.js → tile-detail-PAEZvBde.js} +1 -1
  76. package/dist/assets/{tile-edit-form-CCaFW-XS.js → tile-edit-form-B4Fn98xv.js} +1 -1
  77. package/dist/assets/{types-CE88rjDb.js → types--W3-1FoJ.js} +1 -1
  78. package/dist/assets/types-DzAQW7Py.js +1 -0
  79. package/dist/assets/{use-dialog-Dy1ldJel.js → use-dialog-B0Bfl4rV.js} +1 -1
  80. package/dist/assets/{use-ordered-children-DEKYVxDi.js → use-ordered-children-DKgoLYUM.js} +1 -1
  81. package/dist/assets/useBuddyChat-CHeVnV6E.js +1 -0
  82. package/dist/assets/{useConfigModule-CJHOZRLY.js → useConfigModule-R_7PM1I0.js} +1 -1
  83. package/dist/assets/{useDataSources-XOQc7nLH.js → useDataSources-CSAJizk1.js} +1 -1
  84. package/dist/assets/{useDevicesPlugins-DEYJEOHX.js → useDevicesPlugins-DWrs7Fyl.js} +1 -1
  85. package/dist/assets/useEventBus-CEYwTYd6.js +1 -0
  86. package/dist/assets/useExtensions-fmnb_pZR.js +1 -0
  87. package/dist/assets/{useGeolocation-Corncs7O.js → useGeolocation-BTHIW0Vo.js} +1 -1
  88. package/dist/assets/useLocation-B7kX3B8V.js +1 -0
  89. package/dist/assets/{useMcpClients-DLp6nlKS.js → useMcpClients-DcNgf4kP.js} +1 -1
  90. package/dist/assets/{useModule-BzC-HPHF.js → useModule-CXgrRxAp.js} +1 -1
  91. package/dist/assets/{useModules-C_VhvJHC.js → useModules-CTA2wgv3.js} +1 -1
  92. package/dist/assets/{useNumberFormat-BR5R6xq8.js → useNumberFormat-CihLXNU2.js} +1 -1
  93. package/dist/assets/{usePage-CafNhHit.js → usePage-C9_04WQu.js} +1 -1
  94. package/dist/assets/{usePersonalTokens-CzAHNnO2.js → usePersonalTokens-0POLLRnY.js} +1 -1
  95. package/dist/assets/{usePlugin-CQedVYWO.js → usePlugin-kD3zkpk6.js} +1 -1
  96. package/dist/assets/{usePlugins-CLZiBdYY.js → usePlugins-BE15XY1o.js} +1 -1
  97. package/dist/assets/{useSpaces-CPYe_mwZ.js → useSpaces-kPcgR4I4.js} +1 -1
  98. package/dist/assets/{useUuid-D7PWqngt.js → useUuid-CglXc4gF.js} +1 -1
  99. package/dist/assets/{view-buddy-chat-BedBKSKL.js → view-buddy-chat-cpi2sm5F.js} +1 -1
  100. package/dist/assets/{view-card-add-pt5m96qu.js → view-card-add-dHXYuPoI.js} +1 -1
  101. package/dist/assets/{view-card-edit-DXjl5oBU.js → view-card-edit-kvtcgYdp.js} +1 -1
  102. package/dist/assets/{view-channel-BZumrDiY.js → view-channel-BzwgcLxO.js} +1 -1
  103. package/dist/assets/{view-channel-add-BgJXOMe2.js → view-channel-add-DFs2jopE.js} +1 -1
  104. package/dist/assets/view-channel-edit-oJg36Wc2.js +1 -0
  105. package/dist/assets/{view-channel-property-add-CZn4vne6.js → view-channel-property-add-BABXqi4y.js} +1 -1
  106. package/dist/assets/view-channel-property-edit-D81nMD2d.js +1 -0
  107. package/dist/assets/view-channels-D7vUzJib.js +1 -0
  108. package/dist/assets/{view-config-module-edit-B5Bac46h.js → view-config-module-edit-DvIZUIoY.js} +1 -1
  109. package/dist/assets/{view-config-modules-Bay5nICT.js → view-config-modules-Cpl4pRnH.js} +1 -1
  110. package/dist/assets/{view-config-plugin-edit-C7tkLRb8.js → view-config-plugin-edit-BnYjdm-M.js} +1 -1
  111. package/dist/assets/view-config-plugins-CDHn_Y7z.js +1 -0
  112. package/dist/assets/view-data-source-add-BeHpMEWY.js +1 -0
  113. package/dist/assets/view-data-source-add-JnCP4qPQ.js +1 -0
  114. package/dist/assets/{view-data-source-edit-Bjpg7BqJ.js → view-data-source-edit-CMTCeuLV.js} +1 -1
  115. package/dist/assets/{view-data-source-edit-3a7uStGk.js → view-data-source-edit-DtAzqjtE.js} +1 -1
  116. package/dist/assets/view-device-CABaEIK9.js +1 -0
  117. package/dist/assets/{view-device-add-CwRHdzQP.js → view-device-add-i7wjTEkJ.js} +1 -1
  118. package/dist/assets/{view-device-control-BSbwWvM6.js → view-device-control-BeJN8nv1.js} +1 -1
  119. package/dist/assets/view-device-edit-6MZ2zhSK.js +1 -0
  120. package/dist/assets/{view-devices-_9KhLnLJ.js → view-devices-DoTknhGD.js} +1 -1
  121. package/dist/assets/{view-devices-wizard-CqOxtqcp.js → view-devices-wizard-yHdahuyQ.js} +1 -1
  122. package/dist/assets/{view-display-BPX9RiY5.js → view-display-DF7n1Ma7.js} +1 -1
  123. package/dist/assets/{view-display-edit-C1nr56vB.js → view-display-edit-B14Vz_PU.js} +1 -1
  124. package/dist/assets/{view-display-tokens-ChsaJMyS.js → view-display-tokens-BVYDl9PU.js} +1 -1
  125. package/dist/assets/{view-displays-DvlfLyrG.js → view-displays-CsyrHH6e.js} +1 -1
  126. package/dist/assets/view-extension-detail-12QF38bc.js +1 -0
  127. package/dist/assets/view-extensions-iPKU6Iuj.js +1 -0
  128. package/dist/assets/{view-location-BOJ0Uja9.js → view-location-CS43dxHB.js} +1 -1
  129. package/dist/assets/{view-location-add-B_PB1oaL.js → view-location-add-CYRPjb2K.js} +1 -1
  130. package/dist/assets/view-location-edit-DwnmyFCR.js +1 -0
  131. package/dist/assets/view-locations-cm61ZZVu.js +1 -0
  132. package/dist/assets/{view-lock-screen-C9W836P_.js → view-lock-screen-Bxd62Z7P.js} +1 -1
  133. package/dist/assets/view-mcp-clients-DmWpQiHV.js +1 -0
  134. package/dist/assets/{view-mcp-oauth-consent-B2aQFOBm.js → view-mcp-oauth-consent-CxTGj6oc.js} +1 -1
  135. package/dist/assets/{view-mcp-oauth-management-xnTPjJ36.js → view-mcp-oauth-management-6LFmtUIE.js} +1 -1
  136. package/dist/assets/{view-notifications-BKBYRF9F.js → view-notifications-DXtoy3F7.js} +1 -1
  137. package/dist/assets/view-onboarding-Z1W0nz_2.js +1 -0
  138. package/dist/assets/{view-page-DJwQBf8C.js → view-page-B3HzxxsX.js} +1 -1
  139. package/dist/assets/view-page-add-Bz0-KkC8.js +1 -0
  140. package/dist/assets/view-page-configure-DUhE_7Mv.js +1 -0
  141. package/dist/assets/view-page-configure-pvQyC5nt.js +1 -0
  142. package/dist/assets/view-page-data-source-add-sBhundim.js +1 -0
  143. package/dist/assets/view-page-data-source-edit-BUDtKHqt.js +1 -0
  144. package/dist/assets/{view-page-edit-ubc81fqj.js → view-page-edit-boPE7ykI.js} +1 -1
  145. package/dist/assets/{view-page-plugin-CtxG2AwO.js → view-page-plugin-BeDc-i9y.js} +1 -1
  146. package/dist/assets/{view-pages-CZR6c3uY.js → view-pages-BX1YcSiV.js} +1 -1
  147. package/dist/assets/{view-profile-general-CFUrEtJy.js → view-profile-general-DOypVvxs.js} +1 -1
  148. package/dist/assets/{view-profile-security-CM-xrNiL.js → view-profile-security-BJg_3p8X.js} +1 -1
  149. package/dist/assets/{view-remote-access-DMcIAtbJ.js → view-remote-access-COVA98ix.js} +1 -1
  150. package/dist/assets/{view-scene-add-H5f00zTk.js → view-scene-add-B5nE1_9A.js} +1 -1
  151. package/dist/assets/{view-scene-edit-BYUTky-m.js → view-scene-edit-BDTtehVO.js} +1 -1
  152. package/dist/assets/{view-scenes-eWQiAb02.js → view-scenes-BvOCSVVZ.js} +1 -1
  153. package/dist/assets/{view-sign-in-D31IT93n.js → view-sign-in-BJccCXjl.js} +1 -1
  154. package/dist/assets/{view-sign-up-BFvb0t1U.js → view-sign-up-DTxO1jnm.js} +1 -1
  155. package/dist/assets/{view-simulator-device-wizard-CxSFAgvn.js → view-simulator-device-wizard-hlREgdbf.js} +1 -1
  156. package/dist/assets/{view-space-add-DLF9C3Az.js → view-space-add-7b9qh77w.js} +1 -1
  157. package/dist/assets/{view-space-configure-LA94Bfj9.js → view-space-configure-DaR-fxwT.js} +1 -1
  158. package/dist/assets/view-space-edit-DR5oXpyg.js +1 -0
  159. package/dist/assets/{view-space-plugin-DALFumLq.js → view-space-plugin-BLF5lyOd.js} +1 -1
  160. package/dist/assets/view-spaces-Z8CI7cFu.js +1 -0
  161. package/dist/assets/{view-spaces-wizard-DTzT5Ajh.js → view-spaces-wizard-BB_-rtib.js} +1 -1
  162. package/dist/assets/{view-stats-CXvxcXXK.js → view-stats-DUAAfDuN.js} +1 -1
  163. package/dist/assets/{view-system-backups-CPBE_o2r.js → view-system-backups-DMDE-X_S.js} +1 -1
  164. package/dist/assets/{view-system-info-DM_RIYXC.js → view-system-info-CoPkOm7u.js} +1 -1
  165. package/dist/assets/{view-system-log-detail-OOX4CkIy.js → view-system-log-detail-CfFnzipc.js} +1 -1
  166. package/dist/assets/{view-system-logs-D5iLu6Ec.js → view-system-logs-BI3OB3qT.js} +1 -1
  167. package/dist/assets/view-tile-DPs5o6f9.js +1 -0
  168. package/dist/assets/{view-tile-add-DNOx9gjy.js → view-tile-add-CetZHPLA.js} +1 -1
  169. package/dist/assets/{view-tile-add-ChtKYIGF.js → view-tile-add-D3JURMrl.js} +1 -1
  170. package/dist/assets/view-tile-data-source-add-C5zeEU15.js +1 -0
  171. package/dist/assets/view-tile-data-source-edit-meG-cEWv.js +1 -0
  172. package/dist/assets/{view-tile-edit-CLNWeo9W.js → view-tile-edit-B3LkQVu3.js} +1 -1
  173. package/dist/assets/{view-tile-edit-pikK5iSE.js → view-tile-edit-DI7MVvjk.js} +1 -1
  174. package/dist/assets/view-tile-edit-I6s2oufQ.js +1 -0
  175. package/dist/assets/{view-user-add-CITnz-HU.js → view-user-add-Bu2LDCre.js} +1 -1
  176. package/dist/assets/{view-user-edit-CdKYi6nv.js → view-user-edit-BwbWL9a6.js} +1 -1
  177. package/dist/assets/view-users-DvBH7yS0.js +1 -0
  178. package/dist/assets/view-virtual-device-wizard-C5VfGr4p.js +1 -0
  179. package/dist/assets/{weather-boFxpYdu.js → weather-BXTyzFhX.js} +2 -2
  180. package/dist/assets/{weather-forecast.transformers-vk4s_2pl.js → weather-forecast.transformers-vh4hgT-a.js} +1 -1
  181. package/dist/index.html +92 -92
  182. package/package.json +1 -1
  183. package/dist/assets/components-C29cEP3E.js +0 -1
  184. package/dist/assets/components-CZ71sqs9.js +0 -1
  185. package/dist/assets/components-ChpIwZ2c.js +0 -1
  186. package/dist/assets/components-DOu6SAYU.js +0 -1
  187. package/dist/assets/components-K9BQgtwY.js +0 -1
  188. package/dist/assets/components-exNTKYiX.js +0 -1
  189. package/dist/assets/composables-B3z1DCa7.js +0 -1
  190. package/dist/assets/composables-BVhAEToZ.js +0 -1
  191. package/dist/assets/composables-CPxmcJSb2.js +0 -1
  192. package/dist/assets/composables-CYT0Ry4D.js +0 -1
  193. package/dist/assets/composables-DLFP4TLA.js +0 -1
  194. package/dist/assets/config-DAgVgX46.js +0 -2
  195. package/dist/assets/form-Wa6uIXea.js +0 -12
  196. package/dist/assets/index-DV73C0r_.js +0 -11
  197. package/dist/assets/input-number-Cqu-p2BC.js +0 -1
  198. package/dist/assets/layout-profile-CMTEn6TJ.js +0 -1
  199. package/dist/assets/layout-sign-0Gx0uVg6.js +0 -1
  200. package/dist/assets/logs-entries.transformers-Bp2zoFAY.js +0 -1
  201. package/dist/assets/notifications.exceptions-Deqj0F89.js +0 -1
  202. package/dist/assets/pagination-BFOA9Lqt.js +0 -1
  203. package/dist/assets/select-CTZp3DyT.js +0 -1
  204. package/dist/assets/slider-CaVuBQD9.js +0 -1
  205. package/dist/assets/spaces-home-control.constants-BgmjmN0q.js +0 -1
  206. package/dist/assets/tabs-CXWSFwGj.js +0 -1
  207. package/dist/assets/types-gvL9TxC-.js +0 -1
  208. package/dist/assets/useBuddyChat-BAy2-Ry5.js +0 -1
  209. package/dist/assets/useEventBus-CPELSGhQ.js +0 -1
  210. package/dist/assets/useExtensions-ChNl1Nvt.js +0 -1
  211. package/dist/assets/useLocation-BpcB0mED.js +0 -1
  212. package/dist/assets/view-channel-edit-jbrEvvSr.js +0 -1
  213. package/dist/assets/view-channel-property-edit-D2O3CFjS.js +0 -1
  214. package/dist/assets/view-channels-C0zwZIMR.js +0 -1
  215. package/dist/assets/view-config-plugins-Cb7qeQ6t.js +0 -1
  216. package/dist/assets/view-data-source-add-BwwcOapn.js +0 -1
  217. package/dist/assets/view-data-source-add-C-YsEqNf.js +0 -1
  218. package/dist/assets/view-device-edit-BUWkkWpP.js +0 -1
  219. package/dist/assets/view-device-rb1QXKVM.js +0 -1
  220. package/dist/assets/view-extension-detail-W8-dlaHO.js +0 -1
  221. package/dist/assets/view-extensions-DTrCxV0-.js +0 -1
  222. package/dist/assets/view-location-edit-DYuz_sYs.js +0 -1
  223. package/dist/assets/view-locations-dclVguNJ.js +0 -1
  224. package/dist/assets/view-mcp-clients-CxGgawX9.js +0 -1
  225. package/dist/assets/view-onboarding-BHdDgVMj.js +0 -1
  226. package/dist/assets/view-page-add-CMkgrgRF.js +0 -1
  227. package/dist/assets/view-page-configure-JhXEhrod.js +0 -1
  228. package/dist/assets/view-page-configure-ho3B4Gtr.js +0 -1
  229. package/dist/assets/view-page-data-source-add-CnP1yn09.js +0 -1
  230. package/dist/assets/view-page-data-source-edit-D5WExoYy.js +0 -1
  231. package/dist/assets/view-space-edit-CVBH6AaO.js +0 -1
  232. package/dist/assets/view-spaces-BpplLq0s.js +0 -1
  233. package/dist/assets/view-tile-DvsHTEes.js +0 -1
  234. package/dist/assets/view-tile-data-source-add-C4DB5pJI.js +0 -1
  235. package/dist/assets/view-tile-data-source-edit-BgVjSqCX.js +0 -1
  236. package/dist/assets/view-tile-edit-C-qWFXGR.js +0 -1
  237. package/dist/assets/view-users-Dz1RKiyE.js +0 -1
  238. package/dist/assets/view-virtual-device-wizard-BD8ziXjX.js +0 -1
@@ -1 +1 @@
1
- import"./rolldown-runtime-QTnfLwEv.js";import{Ei as e,Er as t,Gr as n,Si as r,T as i,bi as a,ci as o,ki as s,n as c,yi as l}from"./icon-with-child-CgZMNB3F.js";import{In as u,_ as d,a as f,an as p,at as m,bt as h,er as g,f as _,gt as v,ht as y,in as b,it as x,jr as S,kn as C,l as w,la as T,m as E,nn as D,on as O,ot as k,p as A,pt as j,rn as M,s as N,st as P,x as F,yt as I}from"./common-D4Z2wgrj.js";import{r as L}from"./config-DAgVgX46.js";import{r as R}from"./usePlugins-CLZiBdYY.js";import{t as z}from"./schemas.utils-fK_cgNcT.js";import{t as B}from"./dist-DJgPCOr0.js";import{a as V,i as H,o as U,r as W,s as G}from"./keys-DMEIfK2a.js";import{a as K,i as ee,n as te}from"./devices.constants-DHQemX04.js";import{t as ne}from"./useDevicesPlugins-DEYJEOHX.js";import{s as re}from"./system.constants-BvSIFqdm.js";import{n as ie}from"./logs-entries.transformers-Bp2zoFAY.js";var q=_(),J=class extends Error{exception;constructor(e,t=null){super(e),this.name=`DevicesException`,this.exception=t}},Y=class extends J{code;constructor(e,t=null,n=null){super(e,n),this.name=`DevicesApiException`,this.code=t}},X=class extends J{constructor(e,t=null){super(e,t),this.name=`DevicesValidationException`}},ae=()=>{let e=R(),{enabled:n}=L(),r=[`channelPropertyAddForm`,`channelPropertyEditForm`],i=[`channelPropertySchema`,`channelPropertyAddFormSchema`,`channelPropertyEditFormSchema`,`channelPropertyCreateReqSchema`,`channelPropertyUpdateReqSchema`],a=t(()=>e.getPlugins().filter(e=>e.modules===void 0||e.modules.includes(`devices-module`)?(e.elements??[]).some(e=>{if(!(e.modules===void 0||e.modules.includes(`devices-module`)))return!1;let t=r.length===0||!!e.components&&r.some(t=>e.components&&t in e.components),n=i.length===0||!!e.schemas&&i.some(t=>e.schemas&&t in e.schemas);return t||n}):!1));return{plugins:a,options:t(()=>B(a.value.flatMap(e=>(e.elements??[]).filter(e=>e.modules===void 0||e.modules.includes(`devices-module`)).map(t=>({value:t.type,label:t.name?.trim()?t.name:e.name,disabled:!n(e.type)}))),[e=>e.label],[`asc`])),getByName:e=>a.value.find(t=>t.type===e),getByType:e=>a.value.find(t=>(t.elements??[]).some(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`)))),getElement:e=>{for(let t of a.value){let n=(t.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`)));if(n)return n}}}},oe=()=>{let e=R(),{enabled:n}=L(),r=[`channelAddForm`,`channelEditForm`],i=[`channelSchema`,`channelAddFormSchema`,`channelEditFormSchema`,`channelCreateReqSchema`,`channelUpdateReqSchema`],a=t(()=>e.getPlugins().filter(e=>e.modules===void 0||e.modules.includes(`devices-module`)?(e.elements??[]).some(e=>{if(!(e.modules===void 0||e.modules.includes(`devices-module`)))return!1;let t=r.length===0||!!e.components&&r.some(t=>e.components&&t in e.components),n=i.length===0||!!e.schemas&&i.some(t=>e.schemas&&t in e.schemas);return t||n}):!1));return{plugins:a,options:t(()=>B(a.value.flatMap(e=>(e.elements??[]).filter(e=>e.modules===void 0||e.modules.includes(`devices-module`)).map(t=>({value:t.type,label:t.name?.trim()?t.name:e.name,disabled:!n(e.type)}))),[e=>e.label],[`asc`])),getByName:e=>a.value.find(t=>t.type===e),getByType:e=>a.value.find(t=>(t.elements??[]).some(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`)))),getElement:e=>{for(let t of a.value){let n=(t.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`)));if(n)return n}}}},se=({id:e})=>{let n=F().getStore(H),{data:r,semaphore:i}=T(n);return{channel:t(()=>e===null?null:r.value[e]??null),isLoading:t(()=>i.value.fetching.item.includes(e)?!0:(r.value[e]??null)===null&&i.value.fetching.items.includes(`all`)),fetchChannel:async()=>{(r.value[e]??null)?.draft||await n.get({id:e})}}},ce=(e={})=>{let{deviceId:n}=e,r=F().getStore(H),{firstLoad:i,semaphore:a}=T(r),o=n===void 0?void 0:typeof n==`string`?t(()=>n):n;return{channels:t(()=>r.findAll().filter(e=>!o?.value||e.device===o.value)),areLoading:t(()=>a.value.fetching.items.includes(o?.value??`all`)?!0:!i.value.includes(o?.value??`all`)&&a.value.fetching.items.includes(o?.value??`all`)),loaded:t(()=>i.value.includes(o?.value??`all`)),fetchChannels:async()=>{await r.fetch({deviceId:o?.value})}}},le=v({search:I().optional(),types:k(I()),state:x([`all`,`offline`,`online`]).default(`all`),states:k(j(u)),categories:k(j(D)),enabled:x([`all`,`enabled`,`disabled`]).default(`all`),validation:x([`all`,`valid`,`invalid`]).default(`all`)}),ue=v({search:I().optional(),devices:k(I()),categories:k(j(M))}),de=v({search:I().optional(),channels:k(I()),categories:k(j(b)),permissions:k(j(O)),dataTypes:k(j(p))}),Z={search:void 0,devices:[],categories:[]},fe={by:`name`,dir:`asc`},pe=(e={})=>{let{deviceId:n}=e,i=F().getStore(H),{firstLoad:a,semaphore:s}=T(i),{filters:c,sort:l,pagination:u,reset:d}=N({key:`${te}:channels:list`,filters:{schema:ue,defaults:Z},sort:{defaults:[fe]},pagination:{defaults:{page:1,size:10}},syncQuery:!0,version:1}),f=t(()=>c.value.search!==Z.search||!(0,q.isEqual)(c.value.devices,Z.devices)||!(0,q.isEqual)(c.value.categories,Z.categories)),p=r(u.value.size||10),m=r(u.value.page||1),h=r(l.value.length>0?l.value[0]?.by:void 0),g=r(l.value.length>0?l.value[0]?.dir??null:null),_=t(()=>B(i.findAll().filter(e=>!n||e.device===n).filter(e=>!e.draft&&(!c.value.search||e.id.toLowerCase().includes(c.value.search.toLowerCase())||e.name.toLowerCase().includes(c.value.search.toLowerCase())||e.description?.toLowerCase().includes(c.value.search.toLowerCase())||e.identifier?.toLowerCase().includes(c.value.search.toLowerCase()))&&(c.value.categories.length===0||c.value.categories.includes(e.category))&&(c.value.devices.length===0||c.value.devices.includes(e.device))),[e=>e[h.value]??``],[g.value===`asc`?`asc`:`desc`])),v=t(()=>{let e=(m.value-1)*p.value,t=e+p.value;return _.value.slice(e,t)}),y=async()=>{await i.fetch({deviceId:n})},b=t(()=>s.value.fetching.items.includes(n??`all`)?!0:!a.value.includes(n??`all`)&&s.value.fetching.items.includes(n??`all`)),x=t(()=>a.value.includes(n??`all`)),S=t(()=>i.findAll().filter(e=>!n||e.device===n).filter(e=>!e.draft).length);return o(()=>u.value,e=>{m.value=e.page??1,p.value=e.size??10},{deep:!0}),o(()=>m.value,e=>{u.value.page=e}),o(()=>p.value,e=>{u.value.size=e}),o(()=>g.value,e=>{h.value===void 0||e===null?l.value=[]:l.value=[{by:h.value,dir:e}]}),o(()=>h.value,e=>{e===void 0?l.value=[]:l.value=[{by:e,dir:g.value}]}),{channels:_,channelsPaginated:v,totalRows:S,areLoading:b,loaded:x,fetchChannels:y,filters:c,filtersActive:f,paginateSize:p,paginatePage:m,sortBy:h,sortDir:g,resetFilter:d}},me=()=>{let{t:e}=i(),t=A(),n=F().getStore(H),r=e=>n.findById(e);return{remove:async i=>{let a=r(i);if(a===null)throw new J(`Something went wrong, channel can't be loaded`);S.confirm(e(`devicesModule.texts.channels.confirmRemove`,{channel:a.name}),e(`devicesModule.headings.channels.remove`),{confirmButtonText:e(`devicesModule.buttons.yes.title`),cancelButtonText:e(`devicesModule.buttons.no.title`),type:`warning`}).then(async()=>{try{await n.remove({id:a.id}),t.success(e(`devicesModule.messages.channels.removed`,{channel:a.name}))}catch(n){if(n instanceof Y&&n.code===404){let n=e(`devicesModule.messages.channels.notFound`,{channel:a.name});t.error(n)}else if(n instanceof Y&&n.code===422)t.error(n.message);else{let n=e(`devicesModule.messages.channels.notRemoved`,{channel:a.name});t.error(n)}}}).catch(()=>{t.info(e(`devicesModule.messages.channels.removeCanceled`,{channel:a.name}))})}}},he=({id:e})=>{let n=F().getStore(H);return{icon:t(()=>{switch(n.findById(e)?.category){case M.button:return`mdi:gesture-tap-button`;case M.binary_input:return`mdi:toggle-switch`;case M.analog_input:return`mdi:tune-vertical`;default:return`mdi:chip`}})}},ge={air_quality:{category:`air_quality`,constraints:{oneOrMoreOf:[[`aqi`,`level`]]},properties:{aqi:{category:`aqi`,required:!1,permissions:[`ro`],data_type:`ushort`,unit:null,format:[0,500]},level:{category:`level`,required:!1,permissions:[`ro`],data_type:`enum`,unit:null,format:[`excellent`,`good`,`fair`,`inferior`,`poor`,`unknown`]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},air_particulate:{category:`air_particulate`,constraints:{oneOrMoreOf:[[`detected`,`concentration`]]},properties:{detected:{category:`detected`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},concentration:{category:`concentration`,required:!1,permissions:[`ro`],data_type:`float`,unit:`µg/m³`,format:[0,1e3]},mode:{category:`mode`,required:!1,permissions:[`ro`],data_type:`enum`,unit:null,format:[`pm1`,`pm2_5`,`pm10`]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},carbon_dioxide:{category:`carbon_dioxide`,constraints:{oneOrMoreOf:[[`detected`,`concentration`]]},properties:{detected:{category:`detected`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},concentration:{category:`concentration`,required:!1,permissions:[`ro`],data_type:`float`,unit:`ppm`,format:[0,1e5]},peak_level:{category:`peak_level`,required:!1,permissions:[`ro`],data_type:`float`,unit:`ppm`,format:[0,1e5]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},carbon_monoxide:{category:`carbon_monoxide`,constraints:{oneOrMoreOf:[[`detected`,`concentration`]]},properties:{detected:{category:`detected`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},concentration:{category:`concentration`,required:!1,permissions:[`ro`],data_type:`float`,unit:`ppm`,format:[0,100]},peak_level:{category:`peak_level`,required:!1,permissions:[`ro`],data_type:`float`,unit:`ppm`,format:[0,100]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},flow:{category:`flow`,properties:{rate:{category:`rate`,required:!0,permissions:[`ro`],data_type:`float`,unit:`m³/h`,format:[0,65533]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},humidity:{category:`humidity`,properties:{humidity:{category:`humidity`,required:!0,permissions:[`ro`],data_type:`uchar`,unit:`%`,format:[0,100]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},illuminance:{category:`illuminance`,properties:{illuminance:{category:`illuminance`,required:!0,permissions:[`ro`],data_type:`float`,unit:`lx`,format:[0,1e5]},level:{category:`level`,required:!0,permissions:[`ro`],data_type:`enum`,unit:null,format:[`bright`,`moderate`,`dusky`,`dark`]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},nitrogen_dioxide:{category:`nitrogen_dioxide`,constraints:{oneOrMoreOf:[[`detected`,`concentration`]]},properties:{detected:{category:`detected`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},concentration:{category:`concentration`,required:!1,permissions:[`ro`],data_type:`float`,unit:`µg/m³`,format:[0,1e5]},mode:{category:`mode`,required:!1,permissions:[`ro`],data_type:`enum`,unit:null,format:[`annual`,`1_hour`]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},ozone:{category:`ozone`,constraints:{oneOrMoreOf:[[`detected`,`concentration`,`level`]],oneOf:[[`concentration`,`level`]]},properties:{detected:{category:`detected`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},concentration:{category:`concentration`,required:!1,permissions:[`ro`],data_type:`float`,unit:`µg/m³`,format:[0,1e5]},level:{category:`level`,required:!1,permissions:[`ro`],data_type:`enum`,unit:null,format:[`low`,`medium`,`high`]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},pressure:{category:`pressure`,properties:{pressure:{category:`pressure`,required:!0,permissions:[`ro`],data_type:`float`,unit:`kPa`,format:[0,32767]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},sulphur_dioxide:{category:`sulphur_dioxide`,properties:{detected:{category:`detected`,required:!0,permissions:[`ro`],data_type:`bool`,unit:null,format:null},concentration:{category:`concentration`,required:!0,permissions:[`ro`],data_type:`float`,unit:`µg/m³`,format:[0,1e5]},level:{category:`level`,required:!0,permissions:[`ro`],data_type:`enum`,unit:null,format:[`low`,`medium`,`high`]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},temperature:{category:`temperature`,properties:{temperature:{category:`temperature`,required:!0,permissions:[`ro`],data_type:`float`,unit:`°C`,format:[0,100]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},volatile_organic_compounds:{category:`volatile_organic_compounds`,constraints:{oneOrMoreOf:[[`detected`,`concentration`,`level`]],oneOf:[[`concentration`,`level`]]},properties:{detected:{category:`detected`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},concentration:{category:`concentration`,required:!1,permissions:[`ro`],data_type:`float`,unit:`µg/m³`,format:[0,1e3]},level:{category:`level`,required:!1,permissions:[`ro`],data_type:`enum`,unit:null,format:[`low`,`medium`,`high`]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},alarm:{category:`alarm`,properties:{state:{category:`state`,required:!0,permissions:[`rw`],data_type:`enum`,unit:null,format:[`disarmed`,`armed_home`,`armed_away`,`armed_night`]},alarm_state:{category:`alarm_state`,required:!1,permissions:[`ro`],data_type:`enum`,unit:null,format:[`idle`,`pending`,`triggered`,`silenced`]},triggered:{category:`triggered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},siren:{category:`siren`,required:!1,permissions:[`rw`],data_type:`bool`,unit:null,format:null},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},fault_description:{category:`fault_description`,required:!1,permissions:[`ro`],data_type:`string`,unit:null,format:null},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},last_event:{category:`last_event`,required:!1,permissions:[`ro`],data_type:`string`,unit:null,format:null}}},contact:{category:`contact`,properties:{detected:{category:`detected`,required:!0,permissions:[`ro`],data_type:`bool`,unit:null,format:null},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},gas:{category:`gas`,properties:{detected:{category:`detected`,required:!0,permissions:[`ro`],data_type:`bool`,unit:null,format:null},status:{category:`status`,required:!0,permissions:[`ro`],data_type:`enum`,unit:null,format:[`normal`,`warning`,`alarm`]},concentration:{category:`concentration`,required:!1,permissions:[`ro`],data_type:`uint`,unit:`ppm`,format:[0,65535]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},leak:{category:`leak`,properties:{detected:{category:`detected`,required:!0,permissions:[`ro`],data_type:`bool`,unit:null,format:null},level:{category:`level`,required:!0,permissions:[`ro`],data_type:`enum`,unit:null,format:[`low`,`medium`,`high`]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},lock:{category:`lock`,properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},status:{category:`status`,required:!0,permissions:[`rw`],data_type:`enum`,unit:null,format:[`locked`,`unlocked`]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},motion:{category:`motion`,properties:{detected:{category:`detected`,required:!0,permissions:[`ro`],data_type:`bool`,unit:null,format:null},distance:{category:`distance`,required:!1,permissions:[`ro`],data_type:`float`,unit:`m`,format:[0,100]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},occupancy:{category:`occupancy`,properties:{detected:{category:`detected`,required:!0,permissions:[`ro`],data_type:`bool`,unit:null,format:null},distance:{category:`distance`,required:!1,permissions:[`ro`],data_type:`float`,unit:`m`,format:[0,100]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},smoke:{category:`smoke`,properties:{detected:{category:`detected`,required:!0,permissions:[`ro`],data_type:`bool`,unit:null,format:null},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},cooler:{category:`cooler`,properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},temperature:{category:`temperature`,required:!0,permissions:[`rw`],data_type:`float`,unit:`°C`,format:[0,100]},status:{category:`status`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},dehumidifier:{category:`dehumidifier`,properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},humidity:{category:`humidity`,required:!0,permissions:[`rw`],data_type:`uchar`,unit:`%`,format:[0,100]},mode:{category:`mode`,required:!1,permissions:[`rw`],data_type:`enum`,unit:null,format:[`auto`,`manual`,`continuous`,`laundry`,`quiet`]},status:{category:`status`,required:!1,permissions:[`ro`],data_type:`enum`,unit:null,format:[`idle`,`dehumidifying`,`defrosting`]},water_tank_full:{category:`water_tank_full`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},water_tank_level:{category:`water_tank_level`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:`%`,format:[0,100]},defrost_active:{category:`defrost_active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},timer:{category:`timer`,required:!1,permissions:[`rw`],data_types:[{id:`duration`,data_type:`ushort`,unit:`s`,format:[0,86400],step:60,description:{en:`Timer duration in seconds (0-86400)`}},{id:`preset`,data_type:`enum`,format:[`off`,`30m`,`1h`,`2h`,`4h`,`8h`,`12h`],description:{en:`Preset timer intervals`}}]},locked:{category:`locked`,required:!1,permissions:[`rw`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},door:{category:`door`,properties:{obstruction:{category:`obstruction`,required:!0,permissions:[`ro`],data_type:`bool`,unit:null,format:null},status:{category:`status`,required:!0,permissions:[`ro`],data_type:`enum`,unit:null,format:[`opened`,`closed`,`opening`,`closing`,`stopped`]},position:{category:`position`,required:!0,permissions:[`rw`],data_type:`enum`,unit:null,format:[`open`,`close`,`stop`]},type:{category:`type`,required:!0,permissions:[`ro`],data_type:`enum`,unit:null,format:[`door`,`garage`]},percentage:{category:`percentage`,required:!1,permissions:[`rw`],data_type:`uchar`,unit:null,format:[0,100]},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},fan:{category:`fan`,properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},swing:{category:`swing`,required:!1,permissions:[`rw`],data_type:`bool`,unit:null,format:null},speed:{category:`speed`,required:!1,permissions:[`rw`],data_types:[{id:`percentage`,data_type:`uchar`,unit:`%`,format:[0,100],step:1,description:{en:`Speed as percentage (0-100%)`}},{id:`level`,data_type:`enum`,format:[`off`,`low`,`medium`,`high`,`turbo`,`auto`],description:{en:`Speed as discrete levels`}}]},mode:{category:`mode`,required:!1,permissions:[`rw`],data_type:`enum`,unit:null,format:[`auto`,`manual`,`eco`,`sleep`,`natural`,`turbo`]},direction:{category:`direction`,required:!1,permissions:[`rw`],data_type:`enum`,unit:null,format:[`clockwise`,`counter_clockwise`]},natural_breeze:{category:`natural_breeze`,required:!1,permissions:[`rw`],data_type:`bool`,unit:null,format:null},timer:{category:`timer`,required:!1,permissions:[`rw`],data_types:[{id:`duration`,data_type:`ushort`,unit:`s`,format:[0,86400],step:60,description:{en:`Timer duration in seconds (0-86400)`}},{id:`preset`,data_type:`enum`,format:[`off`,`30m`,`1h`,`2h`,`4h`,`8h`,`12h`],description:{en:`Preset timer intervals`}}]},locked:{category:`locked`,required:!1,permissions:[`rw`],data_type:`bool`,unit:null,format:null}}},heater:{category:`heater`,properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},temperature:{category:`temperature`,required:!0,permissions:[`rw`],data_type:`float`,unit:`°C`,format:[0,100]},status:{category:`status`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},position:{category:`position`,required:!1,permissions:[`rw`],data_types:[{id:`percentage`,data_type:`uchar`,unit:`%`,format:[0,100],step:1,description:{en:`Position as percentage (0-100%)`}},{id:`state`,data_type:`enum`,format:[`closed`,`quarter`,`half`,`three_quarter`,`open`],description:{en:`Position as discrete states`}}]}}},humidifier:{category:`humidifier`,properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},humidity:{category:`humidity`,required:!0,permissions:[`rw`],data_type:`uchar`,unit:`%`,format:[0,100]},mode:{category:`mode`,required:!1,permissions:[`rw`],data_type:`enum`,unit:null,format:[`auto`,`manual`,`sleep`,`baby`]},status:{category:`status`,required:!1,permissions:[`ro`],data_type:`enum`,unit:null,format:[`idle`,`humidifying`]},mist_level:{category:`mist_level`,required:!1,permissions:[`rw`],data_types:[{id:`percentage`,data_type:`uchar`,unit:`%`,format:[0,100],step:1,description:{en:`Mist level as percentage (0-100%)`}},{id:`level`,data_type:`enum`,format:[`off`,`low`,`medium`,`high`],description:{en:`Mist level as discrete levels`}}]},warm_mist:{category:`warm_mist`,required:!1,permissions:[`rw`],data_type:`bool`,unit:null,format:null},water_tank_empty:{category:`water_tank_empty`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},water_tank_level:{category:`water_tank_level`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:`%`,format:[0,100]},timer:{category:`timer`,required:!1,permissions:[`rw`],data_types:[{id:`duration`,data_type:`ushort`,unit:`s`,format:[0,86400],step:60,description:{en:`Timer duration in seconds (0-86400)`}},{id:`preset`,data_type:`enum`,format:[`off`,`30m`,`1h`,`2h`,`4h`,`8h`,`12h`],description:{en:`Preset timer intervals`}}]},locked:{category:`locked`,required:!1,permissions:[`rw`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},light:{category:`light`,constraints:{mutuallyExclusiveGroups:[[[`color_red`,`color_green`,`color_blue`],[`hue`,`saturation`]]]},properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},brightness:{category:`brightness`,required:!1,permissions:[`rw`],data_types:[{id:`percentage`,data_type:`uchar`,unit:`%`,format:[0,100],step:1,description:{en:`Brightness as percentage (0-100%)`}},{id:`level`,data_type:`enum`,format:[`off`,`low`,`medium`,`high`,`full`],description:{en:`Brightness as discrete levels`}}]},color_red:{category:`color_red`,required:!1,permissions:[`rw`],data_type:`uchar`,unit:null,format:[0,255]},color_green:{category:`color_green`,required:!1,permissions:[`rw`],data_type:`uchar`,unit:null,format:[0,255]},color_blue:{category:`color_blue`,required:!1,permissions:[`rw`],data_type:`uchar`,unit:null,format:[0,255]},color_white:{category:`color_white`,required:!1,permissions:[`rw`],data_type:`uchar`,unit:null,format:[0,255]},color_temperature:{category:`color_temperature`,required:!1,permissions:[`rw`],data_type:`ushort`,unit:`K`,format:[2e3,1e4]},hue:{category:`hue`,required:!1,permissions:[`rw`],data_type:`ushort`,unit:`deg`,format:[0,360]},saturation:{category:`saturation`,required:!1,permissions:[`rw`],data_type:`uchar`,unit:`%`,format:[0,100]}}},outlet:{category:`outlet`,properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},in_use:{category:`in_use`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},robot_vacuum:{category:`robot_vacuum`,properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},status:{category:`status`,required:!0,permissions:[`ro`],data_type:`enum`,unit:null,format:[`idle`,`cleaning`,`vacuuming`,`mopping`,`docking`,`charging`]},mode:{category:`mode`,required:!1,permissions:[`rw`],data_type:`enum`,unit:null,format:[`auto`,`spot`,`manual`]},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},switcher:{category:`switcher`,properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},child_lock:{category:`child_lock`,required:!1,permissions:[`rw`],data_type:`bool`,unit:null,format:null},timer:{category:`timer`,required:!1,permissions:[`rw`],data_types:[{id:`duration`,data_type:`ushort`,unit:`s`,format:[0,86400],step:60,description:{en:`Timer duration in seconds (0-86400)`}},{id:`preset`,data_type:`enum`,format:[`off`,`30m`,`1h`,`2h`,`4h`,`8h`,`12h`],description:{en:`Preset timer intervals`}}]}}},thermostat:{category:`thermostat`,properties:{locked:{category:`locked`,required:!1,permissions:[`rw`],data_type:`bool`,unit:null,format:null}}},valve:{category:`valve`,properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},type:{category:`type`,required:!0,permissions:[`rw`],data_type:`enum`,unit:null,format:[`generic`,`irrigation`,`shower_head`,`water_faucet`]},duration:{category:`duration`,required:!1,permissions:[`rw`],data_type:`ushort`,unit:`s`,format:[0,3600]},remaining:{category:`remaining`,required:!1,permissions:[`ro`],data_type:`ushort`,unit:`s`,format:[0,3600]},mode:{category:`mode`,required:!1,permissions:[`ro`],data_type:`enum`,unit:null,format:[`manual`,`scheduled`]},position:{category:`position`,required:!1,permissions:[`rw`],data_types:[{id:`percentage`,data_type:`uchar`,unit:`%`,format:[0,100],step:1,description:{en:`Position as percentage (0-100%)`}},{id:`state`,data_type:`enum`,format:[`closed`,`quarter`,`half`,`three_quarter`,`open`],description:{en:`Position as discrete states`}}]},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},window_covering:{category:`window_covering`,properties:{status:{category:`status`,required:!0,permissions:[`ro`],data_type:`enum`,unit:null,format:[`opened`,`closed`,`opening`,`closing`,`stopped`]},position:{category:`position`,required:!0,permissions:[`rw`],data_types:[{id:`percentage`,data_type:`uchar`,unit:`%`,format:[0,100],step:1,description:{en:`Position as percentage (0-100%)`}},{id:`state`,data_type:`enum`,format:[`closed`,`quarter`,`half`,`three_quarter`,`open`],description:{en:`Position as discrete states`}}]},type:{category:`type`,required:!0,permissions:[`ro`],data_type:`enum`,unit:null,format:[`curtain`,`roller`,`blind`,`venetian_blind`,`vertical_blind`,`shutter`,`outdoor_blind`,`awning`]},command:{category:`command`,required:!0,permissions:[`wo`],data_type:`enum`,unit:null,format:[`open`,`close`,`stop`]},obstruction:{category:`obstruction`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},tilt:{category:`tilt`,required:!1,permissions:[`rw`],data_type:`float`,unit:`°`,format:[-90,90]},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},battery:{category:`battery`,properties:{percentage:{category:`percentage`,required:!0,permissions:[`ro`],data_types:[{id:`percentage`,data_type:`uchar`,unit:`%`,format:[0,100],step:1,description:{en:`Battery as percentage (0-100%)`}},{id:`level`,data_type:`enum`,format:[`critical`,`low`,`medium`,`high`,`full`],description:{en:`Battery as discrete levels`}}]},status:{category:`status`,required:!0,permissions:[`ro`],data_type:`enum`,unit:null,format:[`ok`,`low`,`charging`]},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},electrical_energy:{category:`electrical_energy`,properties:{consumption:{category:`consumption`,required:!0,permissions:[`ro`],data_type:`float`,unit:`kWh`,format:[0,null],measurement_kind:`cumulative`,reset_behavior:`unknown`},average_power:{category:`average_power`,required:!1,permissions:[`ro`],data_type:`float`,unit:`W`,format:[0,1e5],measurement_kind:`interval_average`},grid_import:{category:`grid_import`,required:!1,permissions:[`ro`],data_type:`float`,unit:`kWh`,format:[0,null],measurement_kind:`cumulative`,reset_behavior:`unknown`},grid_export:{category:`grid_export`,required:!1,permissions:[`ro`],data_type:`float`,unit:`kWh`,format:[0,null],measurement_kind:`cumulative`,reset_behavior:`unknown`},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},electrical_generation:{category:`electrical_generation`,properties:{production:{category:`production`,required:!0,permissions:[`ro`],data_type:`float`,unit:`kWh`,format:[0,null],measurement_kind:`cumulative`,reset_behavior:`unknown`},power:{category:`power`,required:!1,permissions:[`ro`],data_type:`float`,unit:`W`,format:[0,1e5],measurement_kind:`instantaneous`},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},electrical_power:{category:`electrical_power`,properties:{power:{category:`power`,required:!0,permissions:[`ro`],data_type:`float`,unit:`W`,format:[0,1e4],measurement_kind:`instantaneous`},voltage:{category:`voltage`,required:!1,permissions:[`ro`],data_type:`float`,unit:`V`,format:[0,500],measurement_kind:`instantaneous`},current:{category:`current`,required:!1,permissions:[`ro`],data_type:`float`,unit:`A`,format:[0,100],measurement_kind:`instantaneous`},frequency:{category:`frequency`,required:!1,permissions:[`ro`],data_type:`float`,unit:`Hz`,format:[40,70],measurement_kind:`instantaneous`},over_current:{category:`over_current`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},over_voltage:{category:`over_voltage`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},over_power:{category:`over_power`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},camera:{category:`camera`,properties:{status:{category:`status`,required:!0,permissions:[`ro`],data_type:`enum`,unit:null,format:[`available`,`in_use`,`unavailable`,`offline`,`initializing`,`error`]},source:{category:`source`,required:!0,permissions:[`ro`],data_type:`string`,unit:null,format:null},zoom:{category:`zoom`,required:!1,permissions:[`rw`],data_type:`float`,unit:null,format:[1,10]},pan:{category:`pan`,required:!1,permissions:[`rw`],data_type:`float`,unit:`°`,format:[-180,180]},tilt:{category:`tilt`,required:!1,permissions:[`rw`],data_type:`float`,unit:`°`,format:[-90,90]},infrared:{category:`infrared`,required:!1,permissions:[`rw`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},doorbell:{category:`doorbell`,properties:{event:{category:`event`,required:!0,permissions:[`ro`],data_type:`enum`,unit:null,format:[`single_press`,`double_press`,`long_press`]},brightness:{category:`brightness`,required:!1,permissions:[`rw`],data_types:[{id:`percentage`,data_type:`uchar`,unit:`%`,format:[0,100],step:1,description:{en:`Brightness as percentage (0-100%)`}},{id:`level`,data_type:`enum`,format:[`off`,`low`,`medium`,`high`,`full`],description:{en:`Brightness as discrete levels`}}]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},media_input:{category:`media_input`,properties:{source:{category:`source`,required:!0,permissions:[`rw`],data_types:[{id:`standard`,data_type:`enum`,unit:null,format:`hdmi1.hdmi2.hdmi3.hdmi4.hdmi5.hdmi6.arc.earc.tv.cable.satellite.antenna.av1.av2.component.vga.dvi.usb.bluetooth.wifi.airplay.cast.dlna.miracast.app_netflix.app_youtube.app_spotify.app_prime_video.app_disney_plus.app_hbo_max.app_apple_tv.app_plex.app_kodi.other`.split(`.`),step:null,description:{en:`Standardized input/source identifier (recommended for UI).`}},{id:`custom`,data_type:`string`,unit:null,format:null,step:null,description:{en:`Integration-specific input/source value (fallback).`}}]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},source_label:{category:`source_label`,required:!1,permissions:[`ro`],data_type:`string`,unit:null,format:null}}},media_playback:{category:`media_playback`,properties:{status:{category:`status`,required:!0,permissions:[`rw`],data_type:`enum`,unit:null,format:[`playing`,`paused`,`stopped`]},track:{category:`track`,required:!1,permissions:[`ro`],data_type:`string`,unit:null,format:null},duration:{category:`duration`,required:!1,permissions:[`ro`],data_type:`uint`,unit:`s`,format:[0,86400]},position:{category:`position`,required:!1,permissions:[`rw`],data_type:`uint`,unit:`s`,format:[0,86400]},shuffle:{category:`shuffle`,required:!1,permissions:[`rw`],data_type:`bool`,unit:null,format:null},repeat:{category:`repeat`,required:!1,permissions:[`rw`],data_type:`enum`,unit:null,format:[`off`,`one`,`all`]},command:{category:`command`,required:!1,permissions:[`wo`],data_type:`enum`,unit:null,format:[`play`,`pause`,`stop`,`next`,`previous`,`rewind`,`fast_forward`]},artist:{category:`artist`,required:!1,permissions:[`ro`],data_type:`string`,unit:null,format:null},album:{category:`album`,required:!1,permissions:[`ro`],data_type:`string`,unit:null,format:null},artwork_url:{category:`artwork_url`,required:!1,permissions:[`ro`],data_type:`string`,unit:null,format:null},media_type:{category:`media_type`,required:!1,permissions:[`ro`],data_type:`enum`,unit:null,format:[`music`,`tvshow`,`movie`,`video`,`playlist`,`podcast`,`audiobook`,`radio`,`unknown`]}}},microphone:{category:`microphone`,properties:{active:{category:`active`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},volume:{category:`volume`,required:!1,permissions:[`ro`],data_types:[{id:`percentage`,data_type:`uchar`,unit:`%`,format:[0,100],step:1,description:{en:`Volume as percentage (0-100%)`}},{id:`level`,data_type:`enum`,format:[`mute`,`low`,`medium`,`high`,`max`],description:{en:`Volume as discrete levels`}}]}}},speaker:{category:`speaker`,properties:{active:{category:`active`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},volume:{category:`volume`,required:!1,permissions:[`rw`],data_types:[{id:`percentage`,data_type:`uchar`,unit:`%`,format:[0,100],step:1,description:{en:`Volume as percentage (0-100%)`}},{id:`level`,data_type:`enum`,format:[`mute`,`low`,`medium`,`high`,`max`],description:{en:`Volume as discrete levels`}}]},mode:{category:`mode`,required:!1,permissions:[`rw`],data_type:`enum`,unit:null,format:[`stereo`,`mono`,`surround`]},mute:{category:`mute`,required:!1,permissions:[`rw`],data_type:`bool`,unit:null,format:null},balance:{category:`balance`,required:!1,permissions:[`rw`],data_type:`float`,unit:null,format:[-1,1]},bass:{category:`bass`,required:!1,permissions:[`rw`],data_type:`float`,unit:null,format:[-10,10]},treble:{category:`treble`,required:!1,permissions:[`rw`],data_type:`float`,unit:null,format:[-10,10]}}},television:{category:`television`,properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},brightness:{category:`brightness`,required:!1,permissions:[`rw`],data_types:[{id:`percentage`,data_type:`uchar`,unit:`%`,format:[0,100],step:1,description:{en:`Brightness as percentage (0-100%)`}},{id:`level`,data_type:`enum`,format:[`off`,`low`,`medium`,`high`,`full`],description:{en:`Brightness as discrete levels`}}]},remote_key:{category:`remote_key`,required:!1,permissions:[`wo`],data_type:`enum`,unit:null,format:[`rewind`,`fast_forward`,`next`,`previous`,`arrow_up`,`arrow_down`,`arrow_left`,`arrow_right`,`select`,`back`,`exit`,`info`,`play`,`pause`]}}},projector:{category:`projector`,properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},brightness:{category:`brightness`,required:!1,permissions:[`rw`],data_types:[{id:`percentage`,data_type:`uchar`,unit:`%`,format:[0,100],step:1,description:{en:`Brightness as percentage (0-100%)`}},{id:`level`,data_type:`enum`,format:[`off`,`low`,`medium`,`high`,`full`],description:{en:`Brightness as discrete levels`}}]},remote_key:{category:`remote_key`,required:!1,permissions:[`wo`],data_type:`enum`,unit:null,format:[`rewind`,`fast_forward`,`next`,`previous`,`arrow_up`,`arrow_down`,`arrow_left`,`arrow_right`,`select`,`back`,`exit`,`info`,`play`,`pause`]}}},device_information:{category:`device_information`,properties:{manufacturer:{category:`manufacturer`,required:!0,permissions:[`ro`],data_type:`string`,unit:null,format:null},model:{category:`model`,required:!0,permissions:[`ro`],data_type:`string`,unit:null,format:null},serial_number:{category:`serial_number`,required:!0,permissions:[`ro`],data_type:`string`,unit:null,format:null},firmware_revision:{category:`firmware_revision`,required:!1,permissions:[`ro`],data_type:`string`,unit:null,format:null},hardware_revision:{category:`hardware_revision`,required:!1,permissions:[`ro`],data_type:`string`,unit:null,format:null},link_quality:{category:`link_quality`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:`%`,format:[0,100]},connection_type:{category:`connection_type`,required:!1,permissions:[`ro`],data_type:`enum`,unit:null,format:[`wired`,`wifi`,`zigbee`,`bluetooth`]},status:{category:`status`,required:!1,permissions:[`ro`],data_type:`enum`,unit:null,format:[`connected`,`disconnected`,`init`,`ready`,`running`,`sleeping`,`stopped`,`lost`,`alert`,`unknown`]},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},filter:{category:`filter`,properties:{life_remaining:{category:`life_remaining`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:`%`,format:[0,100]},status:{category:`status`,required:!1,permissions:[`ro`],data_type:`enum`,unit:null,format:[`good`,`replace_soon`,`replace_now`]},change_needed:{category:`change_needed`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},reset:{category:`reset`,required:!1,permissions:[`wo`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},button:{category:`button`,properties:{event:{category:`event`,required:!0,permissions:[`ev`],data_type:`enum`,unit:null,format:[`press`,`long_press`,`double_press`,`triple_press`,`down`,`up`]},detected:{category:`detected`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},binary_input:{category:`binary_input`,properties:{state:{category:`state`,required:!0,permissions:[`ro`],data_type:`bool`,unit:null,format:null},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},analog_input:{category:`analog_input`,properties:{value:{category:`value`,required:!0,permissions:[`ro`],data_type:`float`,unit:null,format:null},unit:{category:`unit`,required:!1,permissions:[`ro`],data_type:`string`,unit:null,format:null},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},indicator:{category:`indicator`,properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},brightness:{category:`brightness`,required:!1,permissions:[`rw`],data_type:`uchar`,unit:null,format:[0,255]},color:{category:`color_red`,required:!1,permissions:[`rw`],data_type:`enum`,unit:null,format:[`red`,`green`,`blue`,`yellow`,`white`,`off`]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},buzzer:{category:`buzzer`,properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},frequency:{category:`frequency`,required:!1,permissions:[`rw`],data_type:`uint`,unit:`Hz`,format:[100,1e4]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},accelerometer:{category:`accelerometer`,properties:{acceleration_x:{category:`acceleration_x`,required:!0,permissions:[`ro`],data_type:`float`,unit:`g`,format:[-16,16],step:.001},acceleration_y:{category:`acceleration_y`,required:!0,permissions:[`ro`],data_type:`float`,unit:`g`,format:[-16,16],step:.001},acceleration_z:{category:`acceleration_z`,required:!0,permissions:[`ro`],data_type:`float`,unit:`g`,format:[-16,16],step:.001},orientation:{category:`orientation`,required:!1,permissions:[`ro`],data_type:`enum`,unit:null,format:[`landscape`,`portrait`,`landscape_inverted`,`portrait_inverted`,`face_up`,`face_down`]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},generic:{category:`generic`,properties:{generic:{category:`generic`,required:!1}}}},_e={generic:{category:`generic`,channels:{generic:{category:`generic`,required:!1,multiple:!0},device_information:{category:`device_information`,required:!0,multiple:!1},button:{category:`button`,required:!1,multiple:!0},binary_input:{category:`binary_input`,required:!1,multiple:!0},analog_input:{category:`analog_input`,required:!1,multiple:!0}}},air_conditioner:{category:`air_conditioner`,channels:{cooler:{category:`cooler`,required:!0,multiple:!1},fan:{category:`fan`,required:!0,multiple:!1},temperature:{category:`temperature`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1},heater:{category:`heater`,required:!1,multiple:!1},humidity:{category:`humidity`,required:!1,multiple:!1},contact:{category:`contact`,required:!1,multiple:!1},leak:{category:`leak`,required:!1,multiple:!1},filter:{category:`filter`,required:!1,multiple:!1},button:{category:`button`,required:!1,multiple:!0},binary_input:{category:`binary_input`,required:!1,multiple:!0},analog_input:{category:`analog_input`,required:!1,multiple:!0}}},air_dehumidifier:{category:`air_dehumidifier`,channels:{dehumidifier:{category:`dehumidifier`,required:!0,multiple:!1},humidity:{category:`humidity`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},fan:{category:`fan`,required:!1,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1},leak:{category:`leak`,required:!1,multiple:!1},temperature:{category:`temperature`,required:!1,multiple:!1}}},air_humidifier:{category:`air_humidifier`,channels:{humidifier:{category:`humidifier`,required:!0,multiple:!1},humidity:{category:`humidity`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},fan:{category:`fan`,required:!1,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1},leak:{category:`leak`,required:!1,multiple:!1},temperature:{category:`temperature`,required:!1,multiple:!1}}},air_purifier:{category:`air_purifier`,channels:{fan:{category:`fan`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},air_quality:{category:`air_quality`,required:!1,multiple:!1},filter:{category:`filter`,required:!1,multiple:!1},air_particulate:{category:`air_particulate`,required:!1,multiple:!1},carbon_dioxide:{category:`carbon_dioxide`,required:!1,multiple:!1},carbon_monoxide:{category:`carbon_monoxide`,required:!1,multiple:!1},humidity:{category:`humidity`,required:!1,multiple:!1},leak:{category:`leak`,required:!1,multiple:!1},nitrogen_dioxide:{category:`nitrogen_dioxide`,required:!1,multiple:!1},ozone:{category:`ozone`,required:!1,multiple:!1},pressure:{category:`pressure`,required:!1,multiple:!1},sulphur_dioxide:{category:`sulphur_dioxide`,required:!1,multiple:!1},temperature:{category:`temperature`,required:!1,multiple:!1},volatile_organic_compounds:{category:`volatile_organic_compounds`,required:!1,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1}}},thermostat:{category:`thermostat`,channels:{temperature:{category:`temperature`,required:!0,multiple:!1},thermostat:{category:`thermostat`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},contact:{category:`contact`,required:!1,multiple:!1},cooler:{category:`cooler`,required:!1,multiple:!1},heater:{category:`heater`,required:!1,multiple:!1},humidity:{category:`humidity`,required:!1,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1},button:{category:`button`,required:!1,multiple:!0},binary_input:{category:`binary_input`,required:!1,multiple:!0},analog_input:{category:`analog_input`,required:!1,multiple:!0}}},alarm:{category:`alarm`,channels:{alarm:{category:`alarm`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},battery:{category:`battery`,required:!1,multiple:!1}}},camera:{category:`camera`,channels:{camera:{category:`camera`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},battery:{category:`battery`,required:!1,multiple:!1},contact:{category:`contact`,required:!1,multiple:!1},humidity:{category:`humidity`,required:!1,multiple:!1},light:{category:`light`,required:!1,multiple:!1},microphone:{category:`microphone`,required:!1,multiple:!1},motion:{category:`motion`,required:!1,multiple:!1},speaker:{category:`speaker`,required:!1,multiple:!1},temperature:{category:`temperature`,required:!1,multiple:!1}}},doorbell:{category:`doorbell`,channels:{doorbell:{category:`doorbell`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},battery:{category:`battery`,required:!1,multiple:!1},camera:{category:`camera`,required:!1,multiple:!1},contact:{category:`contact`,required:!1,multiple:!1},light:{category:`light`,required:!1,multiple:!1},lock:{category:`lock`,required:!1,multiple:!1},microphone:{category:`microphone`,required:!1,multiple:!1},motion:{category:`motion`,required:!1,multiple:!1},speaker:{category:`speaker`,required:!1,multiple:!1}}},door:{category:`door`,channels:{door:{category:`door`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},battery:{category:`battery`,required:!1,multiple:!1},contact:{category:`contact`,required:!1,multiple:!1},lock:{category:`lock`,required:!1,multiple:!1},motion:{category:`motion`,required:!1,multiple:!1}}},lock:{category:`lock`,channels:{lock:{category:`lock`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},battery:{category:`battery`,required:!1,multiple:!1},contact:{category:`contact`,required:!1,multiple:!1},motion:{category:`motion`,required:!1,multiple:!1}}},fan:{category:`fan`,channels:{fan:{category:`fan`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1},button:{category:`button`,required:!1,multiple:!0},binary_input:{category:`binary_input`,required:!1,multiple:!0},analog_input:{category:`analog_input`,required:!1,multiple:!0}}},heating_unit:{category:`heating_unit`,channels:{heater:{category:`heater`,required:!0,multiple:!1},temperature:{category:`temperature`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1},humidity:{category:`humidity`,required:!1,multiple:!1},contact:{category:`contact`,required:!1,multiple:!1}}},water_heater:{category:`water_heater`,channels:{heater:{category:`heater`,required:!0,multiple:!1},temperature:{category:`temperature`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1},leak:{category:`leak`,required:!1,multiple:!1}}},input_controller:{category:`input_controller`,constraints:{oneOrMoreOf:[[`button`,`binary_input`,`analog_input`]]},channels:{device_information:{category:`device_information`,required:!0,multiple:!1},button:{category:`button`,required:!1,multiple:!0},binary_input:{category:`binary_input`,required:!1,multiple:!0},analog_input:{category:`analog_input`,required:!1,multiple:!0},battery:{category:`battery`,required:!1,multiple:!1}}},lighting:{category:`lighting`,channels:{light:{category:`light`,required:!0,multiple:!0},device_information:{category:`device_information`,required:!0,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1},illuminance:{category:`illuminance`,required:!1,multiple:!1},button:{category:`button`,required:!1,multiple:!0},binary_input:{category:`binary_input`,required:!1,multiple:!0},analog_input:{category:`analog_input`,required:!1,multiple:!0}}},outlet:{category:`outlet`,channels:{outlet:{category:`outlet`,required:!0,multiple:!0},device_information:{category:`device_information`,required:!0,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1},button:{category:`button`,required:!1,multiple:!0},binary_input:{category:`binary_input`,required:!1,multiple:!0},analog_input:{category:`analog_input`,required:!1,multiple:!0}}},pump:{category:`pump`,channels:{flow:{category:`flow`,required:!1,multiple:!1},switcher:{category:`switcher`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1},leak:{category:`leak`,required:!1,multiple:!1},pressure:{category:`pressure`,required:!1,multiple:!1}}},sprinkler:{category:`sprinkler`,channels:{valve:{category:`valve`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1},flow:{category:`flow`,required:!1,multiple:!1},humidity:{category:`humidity`,required:!1,multiple:!1},leak:{category:`leak`,required:!1,multiple:!1},pressure:{category:`pressure`,required:!1,multiple:!1}}},switcher:{category:`switcher`,constraints:{oneOrMoreOf:[[`outlet`,`switcher`]],mutuallyExclusiveGroups:[[[`outlet`],[`switcher`]]]},channels:{outlet:{category:`outlet`,required:!1,multiple:!0},switcher:{category:`switcher`,required:!1,multiple:!0},device_information:{category:`device_information`,required:!0,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1},button:{category:`button`,required:!1,multiple:!0},binary_input:{category:`binary_input`,required:!1,multiple:!0},analog_input:{category:`analog_input`,required:!1,multiple:!0}}},valve:{category:`valve`,channels:{valve:{category:`valve`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},battery:{category:`battery`,required:!1,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1},flow:{category:`flow`,required:!1,multiple:!1},leak:{category:`leak`,required:!1,multiple:!1},pressure:{category:`pressure`,required:!1,multiple:!1}}},window_covering:{category:`window_covering`,channels:{window_covering:{category:`window_covering`,required:!0,multiple:!0},device_information:{category:`device_information`,required:!0,multiple:!1},battery:{category:`battery`,required:!1,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1},button:{category:`button`,required:!1,multiple:!0},binary_input:{category:`binary_input`,required:!1,multiple:!0},analog_input:{category:`analog_input`,required:!1,multiple:!0}}},media:{category:`media`,channels:{switcher:{category:`switcher`,required:!1,multiple:!1},media_input:{category:`media_input`,required:!1,multiple:!1},media_playback:{category:`media_playback`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},microphone:{category:`microphone`,required:!1,multiple:!1},speaker:{category:`speaker`,required:!1,multiple:!1}}},speaker:{category:`speaker`,channels:{switcher:{category:`switcher`,required:!1,multiple:!1},speaker:{category:`speaker`,required:!0,multiple:!0},device_information:{category:`device_information`,required:!0,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1},media_input:{category:`media_input`,required:!1,multiple:!1},media_playback:{category:`media_playback`,required:!1,multiple:!1}}},television:{category:`television`,channels:{speaker:{category:`speaker`,required:!0,multiple:!1},television:{category:`television`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},media_playback:{category:`media_playback`,required:!1,multiple:!1},media_input:{category:`media_input`,required:!1,multiple:!1}}},projector:{category:`projector`,channels:{projector:{category:`projector`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},speaker:{category:`speaker`,required:!1,multiple:!1},media_playback:{category:`media_playback`,required:!1,multiple:!1},media_input:{category:`media_input`,required:!1,multiple:!1}}},av_receiver:{category:`av_receiver`,channels:{switcher:{category:`switcher`,required:!1,multiple:!1},speaker:{category:`speaker`,required:!0,multiple:!0},media_input:{category:`media_input`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},media_playback:{category:`media_playback`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1}}},set_top_box:{category:`set_top_box`,channels:{switcher:{category:`switcher`,required:!1,multiple:!1},media_playback:{category:`media_playback`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},media_input:{category:`media_input`,required:!1,multiple:!1},speaker:{category:`speaker`,required:!1,multiple:!1}}},game_console:{category:`game_console`,channels:{switcher:{category:`switcher`,required:!1,multiple:!1},media_playback:{category:`media_playback`,required:!1,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1}}},streaming_service:{category:`streaming_service`,channels:{media_playback:{category:`media_playback`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1}}},robot_vacuum:{category:`robot_vacuum`,channels:{battery:{category:`battery`,required:!0,multiple:!1},robot_vacuum:{category:`robot_vacuum`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1},leak:{category:`leak`,required:!1,multiple:!1},filter:{category:`filter`,required:!1,multiple:!1}}},sensor:{category:`sensor`,channels:{device_information:{category:`device_information`,required:!0,multiple:!1},air_particulate:{category:`air_particulate`,required:!1,multiple:!1},battery:{category:`battery`,required:!1,multiple:!1},carbon_dioxide:{category:`carbon_dioxide`,required:!1,multiple:!1},carbon_monoxide:{category:`carbon_monoxide`,required:!1,multiple:!1},gas:{category:`gas`,required:!1,multiple:!1},contact:{category:`contact`,required:!1,multiple:!1},humidity:{category:`humidity`,required:!1,multiple:!1},illuminance:{category:`illuminance`,required:!1,multiple:!1},leak:{category:`leak`,required:!1,multiple:!1},motion:{category:`motion`,required:!1,multiple:!1},nitrogen_dioxide:{category:`nitrogen_dioxide`,required:!1,multiple:!1},occupancy:{category:`occupancy`,required:!1,multiple:!1},ozone:{category:`ozone`,required:!1,multiple:!1},pressure:{category:`pressure`,required:!1,multiple:!1},smoke:{category:`smoke`,required:!1,multiple:!1},sulphur_dioxide:{category:`sulphur_dioxide`,required:!1,multiple:!1},temperature:{category:`temperature`,required:!1,multiple:!1},volatile_organic_compounds:{category:`volatile_organic_compounds`,required:!1,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1}}},terminal:{category:`terminal`,channels:{device_information:{category:`device_information`,required:!0,multiple:!1},button:{category:`button`,required:!1,multiple:!0},indicator:{category:`indicator`,required:!1,multiple:!0},buzzer:{category:`buzzer`,required:!1,multiple:!1},illuminance:{category:`illuminance`,required:!1,multiple:!1},accelerometer:{category:`accelerometer`,required:!1,multiple:!1},binary_input:{category:`binary_input`,required:!1,multiple:!0},switcher:{category:`switcher`,required:!1,multiple:!0},temperature:{category:`temperature`,required:!1,multiple:!1}}}},ve={[D.generic]:[],[D.air_conditioner]:[M.cooler,M.heater,M.fan,M.temperature,M.humidity,M.electrical_energy,M.electrical_power,M.leak,M.device_information],[D.air_dehumidifier]:[M.cooler,M.fan,M.temperature,M.humidity,M.electrical_energy,M.electrical_power,M.leak,M.device_information],[D.air_humidifier]:[M.humidity,M.switcher,M.temperature,M.fan,M.electrical_energy,M.electrical_power,M.leak,M.device_information],[D.air_purifier]:[M.fan,M.air_particulate,M.carbon_dioxide,M.carbon_monoxide,M.humidity,M.leak,M.nitrogen_dioxide,M.ozone,M.pressure,M.sulphur_dioxide,M.temperature,M.volatile_organic_compounds,M.electrical_energy,M.electrical_power,M.device_information],[D.alarm]:[M.alarm,M.device_information],[D.camera]:[M.camera,M.motion,M.microphone,M.speaker,M.contact,M.light,M.temperature,M.humidity,M.battery,M.device_information],[D.door]:[M.door,M.lock,M.contact,M.motion,M.battery,M.device_information],[D.doorbell]:[M.doorbell,M.camera,M.lock,M.motion,M.microphone,M.speaker,M.contact,M.light,M.battery,M.device_information],[D.fan]:[M.fan,M.electrical_energy,M.electrical_power,M.device_information],[D.heating_unit]:[M.heater,M.temperature,M.humidity,M.electrical_energy,M.electrical_power,M.device_information],[D.input_controller]:[M.button,M.binary_input,M.analog_input,M.battery,M.device_information],[D.lighting]:[M.light,M.button,M.binary_input,M.illuminance,M.electrical_energy,M.electrical_power,M.device_information],[D.lock]:[M.lock,M.contact,M.motion,M.battery,M.device_information],[D.media]:[M.media_input,M.media_playback,M.microphone,M.speaker,M.device_information],[D.av_receiver]:[M.media_input,M.media_playback,M.speaker,M.device_information],[D.game_console]:[M.media_playback,M.media_input,M.device_information],[D.projector]:[M.projector,M.speaker,M.media_playback,M.media_input,M.device_information],[D.set_top_box]:[M.media_input,M.media_playback,M.device_information],[D.streaming_service]:[M.media_playback,M.device_information],[D.outlet]:[M.outlet,M.electrical_energy,M.electrical_power,M.device_information],[D.pump]:[M.flow,M.switcher,M.leak,M.pressure,M.electrical_energy,M.electrical_power,M.device_information],[D.robot_vacuum]:[M.robot_vacuum,M.electrical_energy,M.electrical_power,M.leak,M.battery,M.device_information],[D.sensor]:[M.air_particulate,M.battery,M.carbon_dioxide,M.carbon_monoxide,M.contact,M.humidity,M.illuminance,M.leak,M.motion,M.nitrogen_dioxide,M.occupancy,M.ozone,M.pressure,M.smoke,M.sulphur_dioxide,M.temperature,M.volatile_organic_compounds,M.device_information],[D.speaker]:[M.speaker,M.media_input,M.media_playback,M.electrical_energy,M.electrical_power,M.device_information],[D.sprinkler]:[M.valve,M.flow,M.pressure,M.leak,M.humidity,M.electrical_energy,M.electrical_power,M.device_information],[D.switcher]:[M.switcher,M.button,M.binary_input,M.electrical_energy,M.electrical_power,M.device_information],[D.television]:[M.television,M.speaker,M.media_playback,M.media_input,M.device_information],[D.terminal]:[M.button,M.indicator,M.buzzer,M.illuminance,M.accelerometer,M.temperature,M.contact,M.switcher,M.device_information],[D.thermostat]:[M.thermostat,M.cooler,M.heater,M.temperature,M.humidity,M.contact,M.electrical_energy,M.electrical_power,M.device_information],[D.valve]:[M.valve,M.pressure,M.flow,M.leak,M.battery,M.electrical_energy,M.electrical_power,M.device_information],[D.water_heater]:[M.heater,M.temperature,M.leak,M.electrical_energy,M.electrical_power,M.device_information],[D.window_covering]:[M.window_covering,M.battery,M.electrical_energy,M.electrical_power,M.device_information]},ye=Object.fromEntries(Object.entries(_e).map(([e,t])=>{let n=Object.values(t.channels).map(e=>e.category),r=ve[e];return[e,r?[...n].sort((e,t)=>{let n=r.indexOf(e),i=r.indexOf(t);return n===-1&&i===-1?0:n===-1?1:i===-1?-1:n-i}):n]})),be=Object.fromEntries(Object.entries(_e).map(([e,t])=>[e,{required:Object.values(t.channels).filter(e=>e.required).map(e=>e.category),optional:Object.values(t.channels).filter(e=>!e.required).map(e=>e.category),multiple:Object.values(t.channels).filter(e=>e.multiple).map(e=>e.category)}])),xe=Object.fromEntries(Object.entries(ge).map(([e,t])=>[e,{required:Object.values(t.properties).filter(e=>e.required).map(e=>e.category),optional:Object.values(t.properties).filter(e=>!e.required).map(e=>e.category)}])),Se=(e,t)=>{let n=ge[e];if(!n)return;let r=Object.values(n.properties).find(e=>e.category===t);if(!r)return;let i=r.data_types?.[0];if(i)return{category:r.category,required:r.required,description:i.description??r.description??{en:``},permissions:r.permissions,data_type:i.data_type,unit:i.unit??null,format:i.format??null,invalid:r.invalid,step:i.step??null};if(r.data_type)return{category:r.category,required:r.required,description:r.description??{en:``},permissions:r.permissions,data_type:r.data_type,unit:r.unit??null,format:r.format??null,invalid:r.invalid,step:r.step??null}},Ce=({id:e})=>{let n=F(),r=n.getStore(H),i=n.getStore(W),a=e=>r.findById(e),o=e=>xe[e.category]??null;return{canAddAnotherProperty:t(()=>{let t=a(e);if(t===null)return!0;let{required:n,optional:r}=o(t)??{required:[],optional:[]},s=[...n,...r],c=i.findForChannel(t.id).map(e=>e.category);return s.filter(e=>!c.includes(e)).length>0}),missingRequiredProperties:t(()=>{let t=a(e);if(t===null)throw new J(`Something went wrong, channel can't be loaded`);let{required:n}=o(t)??{required:[]},r=i.findForChannel(t.id).map(e=>e.category);return n.filter(e=>!r.includes(e))})}},we=v({id:I().uuid().optional(),type:I().trim().nonempty(),device:I().uuid().optional(),category:j(M).default(M.generic),identifier:I().trim().nonempty().nullable().optional(),name:I().trim().nonempty(),description:I().trim().transform(e=>e===``?null:e).nullable().optional()}),Te=v({id:I().uuid(),type:I().trim().nonempty(),device:I().uuid(),category:j(M).default(M.generic),identifier:I().trim().nonempty().nullable().optional(),name:I().trim().nonempty().optional(),description:I().trim().transform(e=>e===``?null:e).nullable().optional()}),Ee=({type:e})=>{let{getByType:n}=oe(),r=t(()=>n(e));return{plugin:r,element:t(()=>(r.value?.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`))))}},De=()=>{let e=F().getStore(U),{firstLoad:n,semaphore:r}=T(e);return{devices:t(()=>e.findAll().filter(e=>!e.draft&&!e.hidden)),areLoading:t(()=>r.value.fetching.items),loaded:t(()=>n.value),fetchDevices:async()=>{await e.fetch()}}},Oe=({id:n,type:s,deviceId:c})=>{let l=F(),{element:u}=Ee({type:s}),f=l.getStore(H),{devices:p,fetchDevices:m,areLoading:h}=De(),{t:g}=i(),_=A(),v=d(),y=r(K.NONE),b,x=t(()=>D.device?p.value.find(e=>e.id===D.device)??null:null),S=t(()=>x.value?f.findForDevice(x.value.id).map(e=>e.category):[]),C=t(()=>x.value?be[x.value.category]??null:null),T=t(()=>C.value===null?[]:Object.values(M).filter(e=>C.value?.required.includes(e)||C.value?.optional.includes(e)).filter(e=>!S.value.includes(e)||C.value?.multiple?.includes(e)).map(e=>({value:e,label:g(`devicesModule.categories.channels.${e}`)}))),E=t(()=>p.value.filter(e=>e.type===s).map(e=>({value:e.id,label:e.name}))),D=a({...z(u.value?.schemas?.channelAddFormSchema||we),id:n,type:s,device:c,category:M.generic,name:``,description:``}),O=w(e(D)),k=r(void 0),j=r(!1),N=async()=>{if(k.value.clearValidate(),!await k.value.validate())throw new X(`Form not valid`);let e=c??D.device;if(!e)throw new X(`Missing device identifier`);if(!D.category)throw new X(`Missing data type definition`);let t=(u.value?.schemas?.channelAddFormSchema||we).safeParse(D);if(!t.success)throw v.error(`Schema validation failed with:`,t.error),new X(`Failed to validate create channel model.`);y.value=K.WORKING;let r=g(`devicesModule.messages.channels.notCreated`,{device:D.name});try{await f.add({id:n,deviceId:e,draft:!1,data:{...t.data,type:s}})}catch(e){throw y.value=K.ERROR,b=window.setTimeout(P,2e3),e instanceof Y&&e.code===422?_.error(e.message):_.error(r),e}return y.value=K.OK,b=window.setTimeout(P,2e3),_.success(g(`devicesModule.messages.channels.created`,{device:D.name})),`added`},P=()=>{window.clearTimeout(b),y.value=K.NONE};return m().catch(()=>{}),o(D,()=>{j.value=!(0,q.isEqual)(e(D),O)}),o(()=>T.value,e=>{e.length&&e[0]&&(D.category=e[0].value,O.category=e[0].value)},{immediate:!0}),{categoriesOptions:T,devicesOptions:E,model:D,formEl:k,formChanged:j,submit:N,clear:P,formResult:y,loadingDevices:h}},ke=({channel:n,messages:s})=>{let c=F(),{element:l}=Ee({type:n.type}),u=c.getStore(H),{devices:f,fetchDevices:p,areLoading:m}=De(),{t:h}=i(),g=A(),_=d(),v=r(K.NONE),y,b=t(()=>f.value.find(e=>e.id===n.device)??null),x=t(()=>b.value?u.findForDevice(b.value.id).filter(e=>e.id!==n.id).map(e=>e.category):[]),S=t(()=>b.value?be[b.value.category]??null:null),C=t(()=>S.value===null?[]:Object.values(M).filter(e=>S.value?.required.includes(e)||S.value?.optional.includes(e)).filter(e=>!x.value.includes(e)||S.value?.multiple?.includes(e)).map(e=>({value:e,label:h(`devicesModule.categories.channels.${e}`)}))),T=t(()=>f.value.map(e=>({value:e.id,label:e.name}))),E=a(n),D=w(e(E)),O=r(void 0),k=r(!1),j=async()=>{let t=n.draft,r=s&&s.error?s.error:n.draft?h(`devicesModule.messages.channels.notCreated`,{channel:n.name}):h(`devicesModule.messages.channels.notEdited`,{channel:n.name});if(O.value.clearValidate(),!await O.value.validate())throw new X(`Form not valid`);let i=(l.value?.schemas?.channelEditFormSchema||Te).safeParse(E);if(!i.success)throw _.error(`Schema validation failed with:`,i.error),new X(`Failed to validate edit channel model.`);v.value=K.WORKING;try{await u.edit({id:n.id,data:{...i.data,type:n.type}}),n.draft&&await u.save({id:n.id,deviceId:n.device})}catch(e){throw v.value=K.ERROR,y=window.setTimeout(N,2e3),e instanceof Y&&e.code===422?g.error(e.message):g.error(r),e}return v.value=K.OK,y=window.setTimeout(N,2e3),t?(g.success(h(s&&s.success?s.success:`devicesModule.messages.channels.created`,{channel:n.name})),`added`):(g.success(h(s&&s.success?s.success:`devicesModule.messages.channels.edited`,{channel:n.name})),k.value=!1,D=w(e(E)),`saved`)},N=()=>{window.clearTimeout(y),v.value=K.NONE};return p().catch(()=>{}),o(E,()=>{k.value=!(0,q.isEqual)(e(E),D)}),{categoriesOptions:C,devicesOptions:T,model:E,formEl:O,formChanged:k,submit:j,clear:N,formResult:v,loadingDevices:m}},Ae=({channelId:e,id:n})=>{let r=F().getStore(W),{data:i,semaphore:a}=T(r);return{property:t(()=>n===null?null:i.value[n]??null),isLoading:t(()=>a.value.fetching.item.includes(n)?!0:(i.value[n]??null)===null?a.value.fetching.items.includes(e)||a.value.fetching.items.includes(`all`):!1),fetchProperty:async()=>{(i.value[n]??null)?.draft||await r.get({id:n,channelId:e})}}},je=({channelId:e})=>{let n=F().getStore(W),{firstLoad:r,semaphore:i}=T(n),a=typeof e==`string`?t(()=>e):e;return{properties:t(()=>n.findAll().filter(e=>!a?.value||e.channel===a.value)),areLoading:t(()=>a.value?i.value.fetching.items.includes(a.value)?!0:!r.value.includes(a.value)&&i.value.fetching.items.includes(a.value):!1),loaded:t(()=>a.value?r.value.includes(a.value):!1),fetchProperties:async()=>{a.value&&await n.fetch({channelId:a.value})}}},Q={search:void 0,channels:[],categories:[],permissions:[],dataTypes:[]},Me={by:`category`,dir:`asc`},Ne=({channelId:e,key:n=`list`})=>{let i=F().getStore(W),{firstLoad:a,semaphore:s}=T(i),{filters:c,sort:l,pagination:u,reset:d}=N({key:`${te}:channels-properties:${n}`,filters:{schema:de,defaults:Q},sort:{defaults:[Me]},pagination:{defaults:{page:1,size:10}},syncQuery:!0,version:1}),f=t(()=>c.value.search!==Q.search||!(0,q.isEqual)(c.value.channels,Q.channels)||!(0,q.isEqual)(c.value.categories,Q.categories)||!(0,q.isEqual)(c.value.permissions,Q.permissions)||!(0,q.isEqual)(c.value.dataTypes,Q.dataTypes)),p=r(u.value.size||10),m=r(u.value.page||1),h=r(l.value.length>0?l.value[0]?.by:void 0),g=r(l.value.length>0?l.value[0]?.dir??null:null),_=t(()=>B(i.findAll().filter(t=>!e||t.channel===e).filter(e=>!e.draft&&(!c.value.search||e.id?.toLowerCase().includes(c.value.search.toLowerCase())||e.name?.toLowerCase().includes(c.value.search.toLowerCase())||e.identifier?.toLowerCase().includes(c.value.search.toLowerCase()))&&(c.value.categories.length===0||c.value.categories.includes(e.category))&&(c.value.dataTypes.length===0||c.value.dataTypes.includes(e.dataType))&&(c.value.permissions.length===0||e.permissions.some(e=>c.value.permissions.includes(e)))),[e=>e[h.value]??``],[g.value===`asc`?`asc`:`desc`])),v=t(()=>{let e=(m.value-1)*p.value,t=e+p.value;return _.value.slice(e,t)}),y=async()=>{await i.fetch({channelId:e})},b=t(()=>s.value.fetching.items.includes(e)?!0:!a.value.includes(e)&&s.value.fetching.items.includes(e)),x=t(()=>a.value.includes(e)),S=t(()=>i.findAll().filter(t=>!e||t.channel===e).filter(e=>!e.draft).length);return o(()=>u.value,e=>{m.value=e.page??1,p.value=e.size??10},{deep:!0}),o(()=>m.value,e=>{u.value.page=e}),o(()=>p.value,e=>{u.value.size=e}),o(()=>g.value,e=>{h.value===void 0||e===null?l.value=[]:l.value=[{by:h.value,dir:e}]}),o(()=>h.value,e=>{e===void 0?l.value=[]:l.value=[{by:e,dir:g.value}]}),{properties:_,propertiesPaginated:v,totalRows:S,areLoading:b,loaded:x,fetchProperties:y,filters:c,filtersActive:f,paginateSize:p,paginatePage:m,sortBy:h,sortDir:g,resetFilter:d}},Pe=()=>{let{t:e}=i(),t=A(),n=F().getStore(W);return{remove:async r=>{let i=n.findById(r);if(i===null)throw new J(`Something went wrong, channel property can't be loaded`);S.confirm(e(`devicesModule.texts.channelsProperties.confirmRemove`,{property:i.name??e(`devicesModule.categories.channelsProperties.${i.category}`)}),e(`devicesModule.headings.channelsProperties.remove`),{confirmButtonText:e(`devicesModule.buttons.yes.title`),cancelButtonText:e(`devicesModule.buttons.no.title`),type:`warning`}).then(async()=>{try{await n.remove({id:i.id,channelId:i.channel}),t.success(e(`devicesModule.messages.channelsProperties.removed`,{property:i.name??e(`devicesModule.categories.channelsProperties.${i.category}`)}))}catch(n){if(n instanceof Y&&n.code===404){let n=e(`devicesModule.messages.channelsProperties.notFound`,{property:i.name??e(`devicesModule.categories.channelsProperties.${i.category}`)});t.error(n)}else if(n instanceof Y&&n.code===422)t.error(n.message);else{let n=e(`devicesModule.messages.channelsProperties.notRemoved`,{property:i.name??e(`devicesModule.categories.channelsProperties.${i.category}`)});t.error(n)}}}).catch(()=>{t.info(e(`devicesModule.messages.channelsProperties.removeCanceled`,{property:i.name??e(`devicesModule.categories.channelsProperties.${i.category}`)}))})}}},Fe=({id:e})=>{let n=F().getStore(W);return{icon:t(()=>{switch(n.findById(e)?.category){case b.event:return`mdi:bell-ring-outline`;case b.detected:return`mdi:record-circle-outline`;case b.unit:return`mdi:ruler`;case b.value:return`mdi:numeric`;default:return`mdi:tune`}})}},Ie=v({id:I().uuid().optional(),type:I().trim().nonempty(),channel:I().uuid().optional(),category:j(b).default(b.generic),identifier:I().trim().nonempty().nullable().optional(),name:I().trim().nonempty().nullable(),permissions:k(j(O)),dataType:j(p),format:k(h([I(),h([y(),m()])])).nullable(),invalid:h([I(),y(),P(),m()]),step:h([I(),y()]).transform(e=>e===``?null:Number(e)).nullable(),enterValue:P().default(!1),value:h([I(),y(),P(),m()]).optional(),enumValues:k(I()),minValue:h([I(),y()]).transform(e=>e===``?void 0:Number(e)).optional(),maxValue:h([I(),y()]).transform(e=>e===``?void 0:Number(e)).optional()}),Le=v({id:I().uuid(),type:I().trim().nonempty(),channel:I().uuid(),category:j(b).default(b.generic),identifier:I().trim().nonempty().nullable().optional(),name:I().trim().nonempty().nullable().optional(),permissions:k(j(O)),dataType:j(p),format:k(h([I(),h([y(),m()])])).nullable(),invalid:h([I(),y(),P(),m()]),step:h([I(),y()]).transform(e=>e===``?null:Number(e)).nullable(),enterValue:P().default(!1),value:h([I(),y(),P(),m()]).optional(),enumValues:k(I()),minValue:h([I(),y()]).transform(e=>e===``?void 0:Number(e)).optional(),maxValue:h([I(),y()]).transform(e=>e===``?void 0:Number(e)).optional()}),Re=({type:e})=>{let{getByType:n}=ae(),r=t(()=>n(e));return{plugin:r,element:t(()=>(r.value?.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`))))}},ze=({id:n,type:s,channelId:c})=>{let l=F(),{element:u}=Re({type:s}),f=l.getStore(W),{channels:m,fetchChannels:h,areLoading:g}=ce(),{t:_}=i(),v=A(),y=d(),x=r(K.NONE),S,C=t(()=>P.channel?m.value.find(e=>e.id===P.channel)??null:null),T=t(()=>C.value?f.findForChannel(C.value.id).map(e=>e.category):[]),E=t(()=>C.value?xe[C.value.category]??null:null),D=t(()=>E.value===null?[]:Object.values(b).filter(e=>E.value?.required.includes(e)||E.value?.optional.includes(e)).filter(e=>!T.value.includes(e)).map(e=>({value:e,label:_(`devicesModule.categories.channelsProperties.${e}`)}))),k=t(()=>m.value.map(e=>({value:e.id,label:e.name}))),j=Object.values(O).map(e=>({value:e,label:_(`devicesModule.permissions.${e}`)})),N=Object.values(p).map(e=>({value:e,label:_(`devicesModule.dataTypes.${e}`)})),P=a({...z(u.value?.schemas?.channelPropertyAddFormSchema||Ie),id:n,type:s,channel:c,category:b.generic,name:``,permissions:[],dataType:p.unknown,format:null,invalid:null,step:null,enumValues:[],minValue:void 0,maxValue:void 0,enterValue:!1,value:void 0}),I=w(e(P)),L=r(void 0),R=r(!1),B=async()=>{if(L.value.clearValidate(),!await L.value.validate())throw new X(`Form not valid`);let e=c??P.channel;if(!e)throw new X(`Missing channel identifier`);if(P.name===``&&(P.name=null),!P.category)throw new X(`Missing data type definition`);P.dataType===p.enum?P.format=P.enumValues:[p.char,p.uchar,p.short,p.ushort,p.int,p.uint,p.float].includes(P.dataType)&&(P.format=[typeof P.minValue==`string`&&P.minValue!==``?Number(P.minValue):typeof P.minValue==`number`?P.minValue:null,typeof P.maxValue==`string`&&P.maxValue!==``?Number(P.maxValue):typeof P.maxValue==`number`?P.maxValue:null]),P.enterValue||delete P.value;let t=(u.value?.schemas?.channelPropertyAddFormSchema||Ie).safeParse(P);if(!t.success)throw y.error(`Schema validation failed with:`,t.error),new X(`Failed to validate create channel property model.`);x.value=K.WORKING;let r=_(`devicesModule.messages.channelsProperties.notCreated`,{device:P.name});try{await f.add({id:n,channelId:e,draft:!1,data:{...t.data,type:s}})}catch(e){throw x.value=K.ERROR,S=window.setTimeout(V,2e3),e instanceof Y&&e.code===422?v.error(e.message):v.error(r),e}return x.value=K.OK,S=window.setTimeout(V,2e3),v.success(_(`devicesModule.messages.channelsProperties.created`,{device:P.name})),`added`},V=()=>{window.clearTimeout(S),x.value=K.NONE};return h().catch(()=>{}),o(P,()=>{R.value=!(0,q.isEqual)(e(P),I)}),o(()=>P.category,t=>{let n=Se(C.value?.category??M.generic,t);n&&(I.permissions=n.permissions,I.dataType=n.data_type,P.permissions=n.permissions,P.dataType=n.data_type,n.invalid!==void 0&&(I.invalid=n.invalid,P.invalid=n.invalid),n.step!==void 0&&(I.step=n.step,P.step=n.step),I.dataType===p.enum?(I.enumValues=n.format??[],I.minValue=void 0,I.maxValue=void 0,P.enumValues=n.format??[],P.minValue=void 0,P.maxValue=void 0):[p.char,p.uchar,p.short,p.ushort,p.int,p.uint,p.float].includes(P.dataType)?(I.enumValues=[],I.minValue=n.format?.[0],I.maxValue=n.format?.[1],P.enumValues=[],P.minValue=n.format?.[0],P.maxValue=n.format?.[1]):(I.enumValues=[],I.minValue=void 0,I.maxValue=void 0,P.enumValues=[],P.minValue=void 0,P.maxValue=void 0),R.value=!(0,q.isEqual)(e(P),I))},{immediate:!0}),o(()=>D.value,e=>{e.length&&e[0]&&(P.category=e[0].value,I.category=e[0].value)},{immediate:!0}),{categoriesOptions:D,channelsOptions:k,permissionsOptions:j,dataTypesOptions:N,model:P,formEl:L,formChanged:R,submit:B,clear:V,formResult:x,loadingChannels:g}},Be=({property:n,messages:s})=>{let c=F(),{element:l}=Re({type:n.type}),u=c.getStore(W),{channels:f,fetchChannels:m,areLoading:h}=ce(),{t:g}=i(),_=A(),v=d(),y=r(K.NONE),x,S=[],C,T;n.dataType===p.enum?S=n.format?n.format.map(e=>e?.toString()||``):[]:[p.char,p.uchar,p.short,p.ushort,p.int,p.uint,p.float].includes(n.dataType)&&Array.isArray(n.format)&&n.format.length===2&&(C=n.format[0],T=n.format[1]);let E=t(()=>f.value.find(e=>e.id===n.channel)??null),D=t(()=>E.value?u.findForChannel(E.value.id).filter(e=>e.id!==n.id).map(e=>e.category):[]),k=t(()=>E.value?xe[E.value.category]??null:null),j=t(()=>k.value===null?[]:Object.values(b).filter(e=>k.value?.required.includes(e)||k.value?.optional.includes(e)).filter(e=>!D.value.includes(e)).map(e=>({value:e,label:g(`devicesModule.categories.channelsProperties.${e}`)}))),M=t(()=>f.value.map(e=>({value:e.id,label:e.name}))),N=Object.values(O).map(e=>({value:e,label:g(`devicesModule.permissions.${e}`)})),P=Object.values(p).map(e=>({value:e,label:g(`devicesModule.dataTypes.${e}`)})),I=a({...n,format:e(n.format),value:n.value?.value??null,enumValues:S,minValue:C,maxValue:T,enterValue:!1}),L=w(e(I)),R=r(void 0),z=r(!1),B=async()=>{let t=n.draft,r=s&&s.error?s.error:n.draft?g(`devicesModule.messages.channelsProperties.notCreated`,{property:n.name??g(`devicesModule.categories.channelsProperties.${n.category}`)}):g(`devicesModule.messages.channelsProperties.notEdited`,{property:n.name??g(`devicesModule.categories.channelsProperties.${n.category}`)});if(R.value.clearValidate(),!await R.value.validate())throw new X(`Form not valid`);I.name===``&&(I.name=null),n.dataType===p.enum?I.format=I.enumValues:[p.char,p.uchar,p.short,p.ushort,p.int,p.uint,p.float].includes(n.dataType)&&(I.format=[I.minValue??null,I.maxValue??null]),I.enterValue||delete I.value;let i=(l.value?.schemas?.channelPropertyEditFormSchema||Le).safeParse(I);if(!i.success)throw v.error(`Schema validation failed with:`,i.error),new X(`Failed to validate edit channel property model.`);y.value=K.WORKING;try{await u.edit({id:n.id,channelId:n.channel,data:{...i.data,type:n.type}}),n.draft&&await u.save({id:n.id,channelId:n.channel})}catch(e){throw y.value=K.ERROR,x=window.setTimeout(V,2e3),e instanceof Y&&e.code===422?_.error(e.message):_.error(r),e}return y.value=K.OK,x=window.setTimeout(V,2e3),t?(_.success(g(s&&s.success?s.success:`devicesModule.messages.channelsProperties.created`,{property:n.name??g(`devicesModule.categories.channelsProperties.${n.category}`)})),`added`):(_.success(g(s&&s.success?s.success:`devicesModule.messages.channelsProperties.edited`,{property:n.name??g(`devicesModule.categories.channelsProperties.${n.category}`)})),z.value=!1,L=w(e(I)),`saved`)},V=()=>{window.clearTimeout(x),y.value=K.NONE};return m().catch(()=>{}),o(I,()=>{z.value=!(0,q.isEqual)(e(I),L)}),{categoriesOptions:j,channelsOptions:M,permissionsOptions:N,dataTypesOptions:P,model:I,formEl:R,formChanged:z,submit:B,clear:V,formResult:y,loadingChannels:h}},Ve=({id:e})=>{let n=F().getStore(U),{data:r,semaphore:i}=T(n);return{device:t(()=>{let t=s(e);return t===null?null:r.value[t]??null}),isLoading:t(()=>{let t=s(e);return i.value.fetching.item.includes(t)?!0:(r.value[t]??null)===null&&i.value.fetching.items}),fetchDevice:async()=>{let t=s(e);(r.value[t]??null)?.draft||await n.get({id:t})}}},$={search:void 0,types:[],state:`all`,states:[],categories:[],enabled:`all`,validation:`all`},He={by:`name`,dir:`asc`},Ue=()=>{let e=F(),n=e.getStore(U),i=e.getStore(G),{firstLoad:a,semaphore:s}=T(n),{filters:c,sort:l,pagination:d,reset:f}=N({key:`${te}:devices:list`,filters:{schema:le,defaults:$},sort:{defaults:[He]},pagination:{defaults:{page:1,size:10}},syncQuery:!0,version:1}),p=t(()=>c.value.search!==$.search||!(0,q.isEqual)(c.value.types,$.types)||c.value.state!==$.state||!(0,q.isEqual)(c.value.states,$.states)||!(0,q.isEqual)(c.value.categories,$.categories)||!(0,q.isEqual)(c.value.enabled,$.enabled)||c.value.validation!==$.validation),m=r(d.value.size||10),h=r(d.value.page||1),g=r(l.value.length>0?l.value[0]?.by:void 0),_=r(l.value.length>0?l.value[0]?.dir??null:null),v=r(!1),y=e=>i.findById(e)?.isValid??null,b=t(()=>B(n.findAll().filter(e=>!e.draft&&(v.value||!e.hidden)&&(!c.value.search||e.id.toLowerCase().includes(c.value.search.toLowerCase())||e.name.toLowerCase().includes(c.value.search.toLowerCase())||e.description?.toLowerCase().includes(c.value.search.toLowerCase())||e.identifier?.toLowerCase().includes(c.value.search.toLowerCase()))&&(c.value.types.length===0||c.value.types.includes(e.type))&&(c.value.categories.length===0||c.value.categories.includes(e.category))&&(c.value.enabled===`all`||c.value.enabled===`enabled`&&e.enabled||c.value.enabled===`disabled`&&!e.enabled)&&(c.value.states.length===0||c.value.states.includes(e.status?.status??u.unknown))&&(c.value.state===`all`||c.value.state===`online`&&[u.ready,u.connected,u.running].includes(e.status.status)||c.value.state===`offline`&&[u.disconnected,u.stopped,u.lost,u.unknown].includes(e.status.status))&&(c.value.validation===`all`||c.value.validation===`valid`&&y(e.id)===!0||c.value.validation===`invalid`&&y(e.id)===!1)),[e=>g.value===`state`?e.status?.status??u.unknown:e[g.value]??``],[_.value===`asc`?`asc`:`desc`])),x=t(()=>{let e=(h.value-1)*m.value,t=e+m.value;return b.value.slice(e,t)}),S=async()=>{await n.fetch({hidden:v.value?C.all:C.false})},w=t(()=>s.value.fetching.items||!a.value),E=t(()=>a.value),D=t(()=>n.findAll().filter(e=>!e.draft&&(v.value||!e.hidden)).length);return o(()=>d.value,e=>{h.value=e.page??1,m.value=e.size??10},{deep:!0}),o(()=>h.value,e=>{d.value.page=e}),o(()=>m.value,e=>{d.value.size=e}),o(()=>_.value,e=>{g.value===void 0||e===null?l.value=[]:l.value=[{by:g.value,dir:e}]}),o(()=>g.value,e=>{e===void 0?l.value=[]:l.value=[{by:e,dir:_.value}]}),{devices:b,devicesPaginated:x,totalRows:D,areLoading:w,loaded:E,fetchDevices:S,filters:c,filtersActive:p,paginateSize:m,paginatePage:h,sortBy:g,sortDir:_,resetFilter:f,showHidden:v}},We=()=>{let{t:e}=i(),t=A(),n=F().getStore(U);return{remove:async r=>{let i=n.findById(r);if(i===null)throw new J(`Something went wrong, device can't be loaded`);S.confirm(e(`devicesModule.texts.devices.confirmRemove`,{device:i.name}),e(`devicesModule.headings.devices.remove`),{confirmButtonText:e(`devicesModule.buttons.yes.title`),cancelButtonText:e(`devicesModule.buttons.no.title`),type:`warning`}).then(async()=>{try{await n.remove({id:i.id}),t.success(e(`devicesModule.messages.devices.removed`,{device:i.name}))}catch(n){if(n instanceof Y&&n.code===404){let n=e(`devicesModule.messages.devices.notFound`,{device:i.name});t.error(n)}else if(n instanceof Y&&n.code===422)t.error(n.message);else{let n=e(`devicesModule.messages.devices.notRemoved`,{device:i.name});t.error(n)}}}).catch(()=>{t.info(e(`devicesModule.messages.devices.removeCanceled`,{device:i.name}))})},bulkRemove:async r=>{if(r.length!==0){try{await S.confirm(e(`devicesModule.texts.devices.confirmBulkRemove`,{count:r.length}),e(`devicesModule.headings.devices.bulkRemove`),{confirmButtonText:e(`devicesModule.buttons.yes.title`),cancelButtonText:e(`devicesModule.buttons.no.title`),type:`warning`})}catch{return}try{let i=await n.bulkRemove({ids:r.map(e=>e.id)});i.succeeded.length>0&&t.success(e(`devicesModule.messages.devices.bulkRemoved`,{count:i.succeeded.length})),i.failed.length>0&&t.error(e(`devicesModule.messages.devices.bulkRemoveFailed`,{count:i.failed.length}))}catch{t.error(e(`devicesModule.messages.devices.bulkRemoveFailed`,{count:r.length}))}}},bulkEnable:async r=>{if(r.length!==0){try{await S.confirm(e(`devicesModule.texts.devices.confirmBulkEnable`,{count:r.length}),e(`devicesModule.headings.devices.bulkEnable`),{confirmButtonText:e(`devicesModule.buttons.yes.title`),cancelButtonText:e(`devicesModule.buttons.no.title`),type:`info`})}catch{t.info(e(`devicesModule.messages.devices.bulkEnableCanceled`));return}try{let i=await n.bulkSetEnabled({ids:r.map(e=>e.id),enabled:!0});i.succeeded.length>0&&t.success(e(`devicesModule.messages.devices.bulkEnabled`,{count:i.succeeded.length})),i.failed.length>0&&t.error(e(`devicesModule.messages.devices.bulkEnableFailed`,{count:i.failed.length}))}catch{t.error(e(`devicesModule.messages.devices.bulkEnableFailed`,{count:r.length}))}}},bulkDisable:async r=>{if(r.length!==0){try{await S.confirm(e(`devicesModule.texts.devices.confirmBulkDisable`,{count:r.length}),e(`devicesModule.headings.devices.bulkDisable`),{confirmButtonText:e(`devicesModule.buttons.yes.title`),cancelButtonText:e(`devicesModule.buttons.no.title`),type:`warning`})}catch{t.info(e(`devicesModule.messages.devices.bulkDisableCanceled`));return}try{let i=await n.bulkSetEnabled({ids:r.map(e=>e.id),enabled:!1});i.succeeded.length>0&&t.success(e(`devicesModule.messages.devices.bulkDisabled`,{count:i.succeeded.length})),i.failed.length>0&&t.error(e(`devicesModule.messages.devices.bulkDisableFailed`,{count:i.failed.length}))}catch{t.error(e(`devicesModule.messages.devices.bulkDisableFailed`,{count:r.length}))}}}}},Ge=({id:e})=>{let n=F().getStore(U);return{icon:t(()=>{switch(n.findById(e)?.category){case D.input_controller:return`mdi:gesture-tap-button`;default:return`mdi:devices`}})}},Ke=({id:e})=>{let n=F(),r=n.getStore(U),i=n.getStore(H),a=e=>r.findById(e),o=e=>be[e.category]??null;return{canAddAnotherChannel:t(()=>{let t=a(typeof e==`string`?e:e.value);if(t===null)return!0;let{required:n,optional:r,multiple:s}=o(t)??{required:[],optional:[]},c=[...n,...r],l=i.findForDevice(t.id).map(e=>e.category);return c.filter(e=>!l.includes(e)).length>0||s!==void 0&&s.length>0}),missingRequiredChannels:t(()=>{let t=a(typeof e==`string`?e:e.value);if(t===null)throw new J(`Something went wrong, device can't be loaded`);let{required:n}=o(t)??{required:[]},r=i.findForDevice(t.id).map(e=>e.category);return n.filter(e=>!r.includes(e))})}},qe=v({id:I().uuid().optional(),type:I().trim().nonempty(),category:j(D).default(D.generic),identifier:I().trim().nonempty().nullable().optional(),name:I().trim().nonempty(),description:I().trim().transform(e=>e===``?null:e).nullable().optional(),enabled:P().default(!0).optional()}),Je=v({id:I().uuid(),type:I().trim().nonempty(),category:j(D).default(D.generic),identifier:I().trim().nonempty().nullable().optional(),name:I().trim().nonempty().optional(),description:I().trim().transform(e=>e===``?null:e).nullable().optional(),enabled:P().optional(),roomId:I().uuid().nullable().optional()}),Ye=({type:e})=>{let{getByType:n}=ne(),r=t(()=>n(e));return{plugin:r,element:t(()=>(r.value?.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`))))}},Xe=({id:t,type:n})=>{let s=F(),{element:c}=Ye({type:n}),l=s.getStore(U),{t:u}=i(),f=A(),p=d(),m=r(K.NONE),h,g=Object.values(D).map(e=>({value:e,label:u(`devicesModule.categories.devices.${e}`)})),_=a({...z(c.value?.schemas?.deviceAddFormSchema||qe),id:t,type:n,category:D.generic,name:``,description:``}),v=w(e(_)),y=r(void 0),b=r(!1),x=async()=>{if(y.value.clearValidate(),!await y.value.validate())throw new X(`Form not valid`);let e=(c.value?.schemas?.deviceAddFormSchema||qe).safeParse(_);if(!e.success)throw p.error(`Schema validation failed with:`,e.error),new X(`Failed to validate create device model.`);m.value=K.WORKING;let r=u(`devicesModule.messages.devices.notCreated`,{device:_.name});try{await l.add({id:t,draft:!1,data:{...e.data,type:n}})}catch(e){throw m.value=K.ERROR,h=window.setTimeout(S,2e3),e instanceof Y&&e.code===422?f.error(e.message):f.error(r),e}return m.value=K.OK,h=window.setTimeout(S,2e3),f.success(u(`devicesModule.messages.devices.created`,{device:_.name})),`added`},S=()=>{window.clearTimeout(h),m.value=K.NONE};return o(_,()=>{b.value=!(0,q.isEqual)(e(_),v)}),{categoriesOptions:g,model:_,formEl:y,formChanged:b,submit:x,clear:S,formResult:m}},Ze=({device:t,messages:n})=>{let s=F(),{element:c}=Ye({type:t.type}),l=s.getStore(U),{t:u}=i(),f=A(),p=d(),m=r(K.NONE),h,g=Object.values(D).map(e=>({value:e,label:u(`devicesModule.categories.devices.${e}`)})),_=a(t),v=w(e(_)),y=r(void 0),b=r(!1),x=async()=>{let r=t.draft,i=n&&n.error?n.error:t.draft?u(`devicesModule.messages.devices.notCreated`,{device:t.name}):u(`devicesModule.messages.devices.notEdited`,{device:t.name});if(y.value.clearValidate(),!await y.value.validate())throw new X(`Form not valid`);let a=(c.value?.schemas?.deviceEditFormSchema||Je).safeParse(_);if(!a.success)throw p.error(`Schema validation failed with:`,a.error),new X(`Failed to validate edit device model.`);let o={...a.data};(0,q.isEqual)(o.roomId,v.roomId)&&delete o.roomId,m.value=K.WORKING;try{await l.edit({id:t.id,data:{...o,type:t.type}}),t.draft&&await l.save({id:t.id})}catch(e){throw m.value=K.ERROR,h=window.setTimeout(S,2e3),e instanceof Y&&e.code===422?f.error(e.message):f.error(i),e}return m.value=K.OK,h=window.setTimeout(S,2e3),r?(f.success(u(n&&n.success?n.success:`devicesModule.messages.devices.created`,{device:t.name})),`added`):(f.success(u(n&&n.success?n.success:`devicesModule.messages.devices.edited`,{device:t.name})),b.value=!1,v=w(e(_)),`saved`)},S=()=>{window.clearTimeout(h),m.value=K.NONE};return o(_,()=>{b.value=!(0,q.isEqual)(e(_),v)}),{categoriesOptions:g,model:_,formEl:y,formChanged:b,submit:x,clear:S,formResult:m}},Qe=()=>{let e=F().getStore(G),{data:n,semaphore:r,firstLoad:i}=T(e);return{validation:t(()=>n.value),summary:t(()=>n.value?.summary??null),invalidDevices:t(()=>n.value?n.value.devices.filter(e=>!e.isValid):[]),isLoading:t(()=>r.value.fetching.items),isLoaded:t(()=>i.value),fetchValidation:async()=>{await e.fetch()},findById:t=>e.findById(t),isDeviceValid:t=>{let n=e.findById(t);return n?n.isValid:null},getDeviceIssueCount:t=>{let n=e.findById(t);return n?n.issues.length:0}}},$e=({id:e})=>{let n=F().getStore(G),{semaphore:r}=T(n);return{validation:t(()=>n.findById(typeof e==`string`?e:e.value)),isValid:t(()=>{let t=n.findById(typeof e==`string`?e:e.value);return t?t.isValid:null}),issues:t(()=>{let t=n.findById(typeof e==`string`?e:e.value);return t?t.issues:[]}),errorCount:t(()=>{let t=n.findById(typeof e==`string`?e:e.value);return t?t.issues.filter(e=>e.severity===`error`).length:0}),warningCount:t(()=>{let t=n.findById(typeof e==`string`?e:e.value);return t?t.issues.filter(e=>e.severity===`warning`).length:0}),isLoading:t(()=>r.value.fetching.item.includes(typeof e==`string`?e:e.value)),fetchValidation:async()=>{await n.get({id:typeof e==`string`?e:e.value})}}},et=300,tt=1e4,nt=({id:e})=>{let i=F(),a=i.getStore(U),s=i.getStore(H),c=i.getStore(W),{data:l,semaphore:u}=T(a),{data:d,semaphore:p,firstLoad:m}=T(s),{semaphore:h,firstLoad:g}=T(c),{sendCommand:_}=f(),v={},y={},b={},x=r({}),S=r({}),C=t(()=>e===null?null:l.value[e]??null),w=t(()=>Object.values(d.value).filter(t=>t.device===e&&t.category!==M.device_information)),E=t(()=>w.value.filter(e=>e.category===M.button||e.category===M.binary_input||e.category===M.analog_input?!1:c.findForChannel(e.id).some(e=>e.permissions.includes(O.rw)||e.permissions.includes(O.wo)))),D=t(()=>E.value.length>0),k=e=>c.findForChannel(e),A=e=>e.permissions.includes(O.rw)||e.permissions.includes(O.wo),j=e=>{let t=x.value[e];return t===void 0?c.findById(e)?.value?.value??null:t},N=e=>S.value[e]??!1,P=(e,t)=>{if(t!==void 0){let n=x.value[e];if(n!==t&&String(n)!==String(t))return}delete x.value[e],b[e]&&(clearTimeout(b[e]),delete b[e])},I=(e,t)=>{b[e]&&clearTimeout(b[e]),b[e]=setTimeout(()=>{let n=x.value[e];(n===t||String(n)===String(t))&&delete x.value[e],delete b[e]},tt)},L=async(t,n,r)=>c.findById(n)?(v[n]&&(clearTimeout(v[n]),delete v[n],y[n]&&(y[n](!1),delete y[n])),x.value[n]=r,new Promise(i=>{y[n]=i;let a=setTimeout(async()=>{delete y[n],S.value[n]=!0;try{await _(ee.CHANNEL_PROPERTY_SET,{context:{origin:`admin`},properties:[{device:e,channel:t,property:n,value:r}]},`DevicesModule.Internal.SetPropertyValue`)===!0?(I(n,r),i(!0)):(P(n,r),i(!1))}catch{P(n,r),i(!1)}finally{S.value[n]=!1,v[n]===a&&delete v[n]}},et);v[n]=a})):!1,R=async()=>{(e in l.value?l.value[e]:null)?.draft||await a.get({id:e})},z=async()=>{await s.fetch({deviceId:e})},B=async()=>{let t=Object.values(d.value).filter(t=>t.device===e);for(let e of t)await c.fetch({channelId:e.id})},V=t(()=>{if(u.value.fetching.item.includes(e)||p.value.fetching.items.includes(e))return!0;for(let e of w.value)if(h.value.fetching.items.includes(e.id))return!0;return!1}),G=t(()=>m.value.includes(e)),K=t(()=>{if(!G.value)return!1;for(let e of w.value)if(!g.value.includes(e.id))return!1;return!0});return o(()=>{let e={};for(let t of Object.keys(x.value)){let n=c.findById(t);n&&(e[t]=n.value?.value??null)}return e},e=>{for(let[t,n]of Object.entries(x.value)){let r=e[t];(r===n||String(r)===String(n))&&P(t)}},{deep:!0}),n(()=>{for(let e of Object.keys(v))clearTimeout(v[e]),delete v[e],y[e]&&(y[e](!1),delete y[e]);for(let e of Object.keys(b))clearTimeout(b[e]),delete b[e]}),{device:C,channels:w,controllableChannels:E,hasControllableProperties:D,isLoading:V,areChannelsLoaded:G,arePropertiesLoaded:K,fetchDevice:R,fetchChannels:z,fetchProperties:B,getPropertiesForChannel:k,isPropertyWritable:A,getPropertyValue:j,isPropertyLoading:N,setPropertyValue:L}},rt=({deviceId:e})=>{let n=F().getStore(V),{firstLoad:r,semaphore:i}=T(n);return{controls:t(()=>n.findForDevice(typeof e==`string`?e:e.value)),areLoading:t(()=>i.value.fetching.items.includes(typeof e==`string`?e:e.value)),loaded:t(()=>r.value.includes(typeof e==`string`?e:e.value)),fetchControls:async()=>n.fetch({deviceId:typeof e==`string`?e:e.value})}},it=e=>{let n=E(),i=d(),a=r({}),u=r(!1),f=r(!1),p=r(!1),m=r(void 0),h=r(!1),_=null,v=0,y=t(()=>Object.values(a.value).sort((e,t)=>new Date(t.ts).getTime()-new Date(e.ts).getTime())),b=t(()=>{let e=[g.warn,g.error,g.fatal,g.fail];return y.value.filter(t=>e.includes(t.type))}),x=t(()=>b.value.length),S=t(()=>x.value>0),C=async()=>{let t=s(e.deviceId);_=t,v++;let r=v;f.value=!0;try{let{data:e,error:o}=await n.client.GET(`/${c}/${re}/logs`,{params:{query:{resource:t,limit:50}}});if(_!==t||v!==r)return;if(e!==void 0){let t=Object.fromEntries(e.data.map(e=>{let t=ie(e);return[t.id,t]}));a.value=t,p.value=!0,u.value=e.metadata.has_more,m.value=e.metadata.next_cursor}else o&&i.error(`Failed to fetch device logs:`,o)}catch(e){_===t&&v===r&&i.error(`Error fetching device logs:`,e)}finally{_===t&&v===r&&(f.value=!1)}},w=async()=>{if(f.value||!u.value||!m.value)return;let t=s(e.deviceId),r=m.value,o=v;f.value=!0;try{let{data:e,error:s}=await n.client.GET(`/${c}/${re}/logs`,{params:{query:{resource:t,after_id:r,limit:50}}});if(_!==t||v!==o)return;if(e!==void 0){let t=Object.fromEntries(e.data.map(e=>{let t=ie(e);return[t.id,t]}));a.value={...a.value,...t},u.value=e.metadata.has_more,m.value=e.metadata.next_cursor}else s&&i.error(`Failed to load more device logs:`,s)}catch(e){_===t&&v===o&&i.error(`Error loading more device logs:`,e)}finally{_===t&&v===o&&(f.value=!1)}},T=async()=>{a.value={},m.value=void 0,u.value=!1,p.value=!1,await C()},D=null;return o(()=>h.value,e=>{D&&=(clearInterval(D),null),e&&(D=setInterval(()=>{f.value||C()},3e3))}),l(()=>{D&&=(clearInterval(D),null)}),o(()=>s(e.deviceId),()=>{T()}),{logs:y,alertLogs:b,alertCount:x,hasAlerts:S,hasMore:u,isLoading:f,loaded:p,live:h,fetchLogs:C,loadMoreLogs:w,refreshLogs:T}};export{be as A,oe as B,je as C,De as D,Oe as E,he as F,Y as H,me as I,pe as L,Se as M,_e as N,Ce as O,ge as P,ce as R,Ne as S,ke as T,J as U,ae as V,X as W,ze as _,Qe as a,Fe as b,Ye as c,Ke as d,Ge as f,Be as g,Ve as h,$e as i,ye as j,xe as k,qe as l,Ue as m,rt as n,Ze as o,We as p,nt as r,Xe as s,it as t,Je as u,Ie as v,Ae as w,Pe as x,Le as y,se as z};
1
+ import"./rolldown-runtime-QTnfLwEv.js";import{Ei as e,Er as t,Gr as n,Si as r,T as i,bi as a,ci as o,ki as s,n as c,yi as l}from"./icon-with-child-CgZMNB3F.js";import{In as u,Pr as d,_ as f,a as p,an as m,at as h,bt as g,f as _,fa as v,gt as y,ht as b,in as x,it as S,kn as C,l as w,m as T,nn as E,on as D,ot as O,p as k,pt as A,rn as j,rr as M,s as N,st as P,x as F,yt as I}from"./common-Bn7l0dTZ.js";import{r as L}from"./config-CAo-YTTc.js";import{r as R}from"./usePlugins-BE15XY1o.js";import{t as z}from"./schemas.utils-BElnm6kF.js";import{t as B}from"./dist-DJgPCOr0.js";import{a as V,i as H,o as U,r as W,s as G}from"./keys-DMEIfK2a.js";import{a as K,i as ee,n as te}from"./devices.constants-DHQemX04.js";import{t as ne}from"./useDevicesPlugins-DWrs7Fyl.js";import{s as re}from"./system.constants-BvSIFqdm.js";import{n as ie}from"./logs-entries.transformers-BjKfup2a.js";var q=_(),J=class extends Error{exception;constructor(e,t=null){super(e),this.name=`DevicesException`,this.exception=t}},Y=class extends J{code;constructor(e,t=null,n=null){super(e,n),this.name=`DevicesApiException`,this.code=t}},X=class extends J{constructor(e,t=null){super(e,t),this.name=`DevicesValidationException`}},ae=()=>{let e=R(),{enabled:n}=L(),r=[`channelPropertyAddForm`,`channelPropertyEditForm`],i=[`channelPropertySchema`,`channelPropertyAddFormSchema`,`channelPropertyEditFormSchema`,`channelPropertyCreateReqSchema`,`channelPropertyUpdateReqSchema`],a=t(()=>e.getPlugins().filter(e=>e.modules===void 0||e.modules.includes(`devices-module`)?(e.elements??[]).some(e=>{if(!(e.modules===void 0||e.modules.includes(`devices-module`)))return!1;let t=r.length===0||!!e.components&&r.some(t=>e.components&&t in e.components),n=i.length===0||!!e.schemas&&i.some(t=>e.schemas&&t in e.schemas);return t||n}):!1));return{plugins:a,options:t(()=>B(a.value.flatMap(e=>(e.elements??[]).filter(e=>e.modules===void 0||e.modules.includes(`devices-module`)).map(t=>({value:t.type,label:t.name?.trim()?t.name:e.name,disabled:!n(e.type)}))),[e=>e.label],[`asc`])),getByName:e=>a.value.find(t=>t.type===e),getByType:e=>a.value.find(t=>(t.elements??[]).some(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`)))),getElement:e=>{for(let t of a.value){let n=(t.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`)));if(n)return n}}}},oe=()=>{let e=R(),{enabled:n}=L(),r=[`channelAddForm`,`channelEditForm`],i=[`channelSchema`,`channelAddFormSchema`,`channelEditFormSchema`,`channelCreateReqSchema`,`channelUpdateReqSchema`],a=t(()=>e.getPlugins().filter(e=>e.modules===void 0||e.modules.includes(`devices-module`)?(e.elements??[]).some(e=>{if(!(e.modules===void 0||e.modules.includes(`devices-module`)))return!1;let t=r.length===0||!!e.components&&r.some(t=>e.components&&t in e.components),n=i.length===0||!!e.schemas&&i.some(t=>e.schemas&&t in e.schemas);return t||n}):!1));return{plugins:a,options:t(()=>B(a.value.flatMap(e=>(e.elements??[]).filter(e=>e.modules===void 0||e.modules.includes(`devices-module`)).map(t=>({value:t.type,label:t.name?.trim()?t.name:e.name,disabled:!n(e.type)}))),[e=>e.label],[`asc`])),getByName:e=>a.value.find(t=>t.type===e),getByType:e=>a.value.find(t=>(t.elements??[]).some(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`)))),getElement:e=>{for(let t of a.value){let n=(t.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`)));if(n)return n}}}},se=({id:e})=>{let n=F().getStore(H),{data:r,semaphore:i}=v(n);return{channel:t(()=>e===null?null:r.value[e]??null),isLoading:t(()=>i.value.fetching.item.includes(e)?!0:(r.value[e]??null)===null&&i.value.fetching.items.includes(`all`)),fetchChannel:async()=>{(r.value[e]??null)?.draft||await n.get({id:e})}}},ce=(e={})=>{let{deviceId:n}=e,r=F().getStore(H),{firstLoad:i,semaphore:a}=v(r),o=n===void 0?void 0:typeof n==`string`?t(()=>n):n;return{channels:t(()=>r.findAll().filter(e=>!o?.value||e.device===o.value)),areLoading:t(()=>a.value.fetching.items.includes(o?.value??`all`)?!0:!i.value.includes(o?.value??`all`)&&a.value.fetching.items.includes(o?.value??`all`)),loaded:t(()=>i.value.includes(o?.value??`all`)),fetchChannels:async()=>{await r.fetch({deviceId:o?.value})}}},le=y({search:I().optional(),types:O(I()),state:S([`all`,`offline`,`online`]).default(`all`),states:O(A(u)),categories:O(A(E)),enabled:S([`all`,`enabled`,`disabled`]).default(`all`),validation:S([`all`,`valid`,`invalid`]).default(`all`)}),ue=y({search:I().optional(),devices:O(I()),categories:O(A(j))}),de=y({search:I().optional(),channels:O(I()),categories:O(A(x)),permissions:O(A(D)),dataTypes:O(A(m))}),Z={search:void 0,devices:[],categories:[]},fe={by:`name`,dir:`asc`},pe=(e={})=>{let{deviceId:n}=e,i=F().getStore(H),{firstLoad:a,semaphore:s}=v(i),{filters:c,sort:l,pagination:u,reset:d}=N({key:`${te}:channels:list`,filters:{schema:ue,defaults:Z},sort:{defaults:[fe]},pagination:{defaults:{page:1,size:10}},syncQuery:!0,version:1}),f=t(()=>c.value.search!==Z.search||!(0,q.isEqual)(c.value.devices,Z.devices)||!(0,q.isEqual)(c.value.categories,Z.categories)),p=r(u.value.size||10),m=r(u.value.page||1),h=r(l.value.length>0?l.value[0]?.by:void 0),g=r(l.value.length>0?l.value[0]?.dir??null:null),_=t(()=>B(i.findAll().filter(e=>!n||e.device===n).filter(e=>!e.draft&&(!c.value.search||e.id.toLowerCase().includes(c.value.search.toLowerCase())||e.name.toLowerCase().includes(c.value.search.toLowerCase())||e.description?.toLowerCase().includes(c.value.search.toLowerCase())||e.identifier?.toLowerCase().includes(c.value.search.toLowerCase()))&&(c.value.categories.length===0||c.value.categories.includes(e.category))&&(c.value.devices.length===0||c.value.devices.includes(e.device))),[e=>e[h.value]??``],[g.value===`asc`?`asc`:`desc`])),y=t(()=>{let e=(m.value-1)*p.value,t=e+p.value;return _.value.slice(e,t)}),b=async()=>{await i.fetch({deviceId:n})},x=t(()=>s.value.fetching.items.includes(n??`all`)?!0:!a.value.includes(n??`all`)&&s.value.fetching.items.includes(n??`all`)),S=t(()=>a.value.includes(n??`all`)),C=t(()=>i.findAll().filter(e=>!n||e.device===n).filter(e=>!e.draft).length);return o(()=>u.value,e=>{m.value=e.page??1,p.value=e.size??10},{deep:!0}),o(()=>m.value,e=>{u.value.page=e}),o(()=>p.value,e=>{u.value.size=e}),o(()=>g.value,e=>{h.value===void 0||e===null?l.value=[]:l.value=[{by:h.value,dir:e}]}),o(()=>h.value,e=>{e===void 0?l.value=[]:l.value=[{by:e,dir:g.value}]}),{channels:_,channelsPaginated:y,totalRows:C,areLoading:x,loaded:S,fetchChannels:b,filters:c,filtersActive:f,paginateSize:p,paginatePage:m,sortBy:h,sortDir:g,resetFilter:d}},me=()=>{let{t:e}=i(),t=k(),n=F().getStore(H),r=e=>n.findById(e);return{remove:async i=>{let a=r(i);if(a===null)throw new J(`Something went wrong, channel can't be loaded`);d.confirm(e(`devicesModule.texts.channels.confirmRemove`,{channel:a.name}),e(`devicesModule.headings.channels.remove`),{confirmButtonText:e(`devicesModule.buttons.yes.title`),cancelButtonText:e(`devicesModule.buttons.no.title`),type:`warning`}).then(async()=>{try{await n.remove({id:a.id}),t.success(e(`devicesModule.messages.channels.removed`,{channel:a.name}))}catch(n){if(n instanceof Y&&n.code===404){let n=e(`devicesModule.messages.channels.notFound`,{channel:a.name});t.error(n)}else if(n instanceof Y&&n.code===422)t.error(n.message);else{let n=e(`devicesModule.messages.channels.notRemoved`,{channel:a.name});t.error(n)}}}).catch(()=>{t.info(e(`devicesModule.messages.channels.removeCanceled`,{channel:a.name}))})}}},he=({id:e})=>{let n=F().getStore(H);return{icon:t(()=>{switch(n.findById(e)?.category){case j.button:return`mdi:gesture-tap-button`;case j.binary_input:return`mdi:toggle-switch`;case j.analog_input:return`mdi:tune-vertical`;default:return`mdi:chip`}})}},ge={air_quality:{category:`air_quality`,constraints:{oneOrMoreOf:[[`aqi`,`level`]]},properties:{aqi:{category:`aqi`,required:!1,permissions:[`ro`],data_type:`ushort`,unit:null,format:[0,500]},level:{category:`level`,required:!1,permissions:[`ro`],data_type:`enum`,unit:null,format:[`excellent`,`good`,`fair`,`inferior`,`poor`,`unknown`]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},air_particulate:{category:`air_particulate`,constraints:{oneOrMoreOf:[[`detected`,`concentration`]]},properties:{detected:{category:`detected`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},concentration:{category:`concentration`,required:!1,permissions:[`ro`],data_type:`float`,unit:`µg/m³`,format:[0,1e3]},mode:{category:`mode`,required:!1,permissions:[`ro`],data_type:`enum`,unit:null,format:[`pm1`,`pm2_5`,`pm10`]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},carbon_dioxide:{category:`carbon_dioxide`,constraints:{oneOrMoreOf:[[`detected`,`concentration`]]},properties:{detected:{category:`detected`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},concentration:{category:`concentration`,required:!1,permissions:[`ro`],data_type:`float`,unit:`ppm`,format:[0,1e5]},peak_level:{category:`peak_level`,required:!1,permissions:[`ro`],data_type:`float`,unit:`ppm`,format:[0,1e5]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},carbon_monoxide:{category:`carbon_monoxide`,constraints:{oneOrMoreOf:[[`detected`,`concentration`]]},properties:{detected:{category:`detected`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},concentration:{category:`concentration`,required:!1,permissions:[`ro`],data_type:`float`,unit:`ppm`,format:[0,100]},peak_level:{category:`peak_level`,required:!1,permissions:[`ro`],data_type:`float`,unit:`ppm`,format:[0,100]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},flow:{category:`flow`,properties:{rate:{category:`rate`,required:!0,permissions:[`ro`],data_type:`float`,unit:`m³/h`,format:[0,65533]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},humidity:{category:`humidity`,properties:{humidity:{category:`humidity`,required:!0,permissions:[`ro`],data_type:`uchar`,unit:`%`,format:[0,100]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},illuminance:{category:`illuminance`,properties:{illuminance:{category:`illuminance`,required:!0,permissions:[`ro`],data_type:`float`,unit:`lx`,format:[0,1e5]},level:{category:`level`,required:!0,permissions:[`ro`],data_type:`enum`,unit:null,format:[`bright`,`moderate`,`dusky`,`dark`]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},nitrogen_dioxide:{category:`nitrogen_dioxide`,constraints:{oneOrMoreOf:[[`detected`,`concentration`]]},properties:{detected:{category:`detected`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},concentration:{category:`concentration`,required:!1,permissions:[`ro`],data_type:`float`,unit:`µg/m³`,format:[0,1e5]},mode:{category:`mode`,required:!1,permissions:[`ro`],data_type:`enum`,unit:null,format:[`annual`,`1_hour`]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},ozone:{category:`ozone`,constraints:{oneOrMoreOf:[[`detected`,`concentration`,`level`]],oneOf:[[`concentration`,`level`]]},properties:{detected:{category:`detected`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},concentration:{category:`concentration`,required:!1,permissions:[`ro`],data_type:`float`,unit:`µg/m³`,format:[0,1e5]},level:{category:`level`,required:!1,permissions:[`ro`],data_type:`enum`,unit:null,format:[`low`,`medium`,`high`]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},pressure:{category:`pressure`,properties:{pressure:{category:`pressure`,required:!0,permissions:[`ro`],data_type:`float`,unit:`kPa`,format:[0,32767]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},sulphur_dioxide:{category:`sulphur_dioxide`,properties:{detected:{category:`detected`,required:!0,permissions:[`ro`],data_type:`bool`,unit:null,format:null},concentration:{category:`concentration`,required:!0,permissions:[`ro`],data_type:`float`,unit:`µg/m³`,format:[0,1e5]},level:{category:`level`,required:!0,permissions:[`ro`],data_type:`enum`,unit:null,format:[`low`,`medium`,`high`]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},temperature:{category:`temperature`,properties:{temperature:{category:`temperature`,required:!0,permissions:[`ro`],data_type:`float`,unit:`°C`,format:[0,100]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},volatile_organic_compounds:{category:`volatile_organic_compounds`,constraints:{oneOrMoreOf:[[`detected`,`concentration`,`level`]],oneOf:[[`concentration`,`level`]]},properties:{detected:{category:`detected`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},concentration:{category:`concentration`,required:!1,permissions:[`ro`],data_type:`float`,unit:`µg/m³`,format:[0,1e3]},level:{category:`level`,required:!1,permissions:[`ro`],data_type:`enum`,unit:null,format:[`low`,`medium`,`high`]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},alarm:{category:`alarm`,properties:{state:{category:`state`,required:!0,permissions:[`rw`],data_type:`enum`,unit:null,format:[`disarmed`,`armed_home`,`armed_away`,`armed_night`]},alarm_state:{category:`alarm_state`,required:!1,permissions:[`ro`],data_type:`enum`,unit:null,format:[`idle`,`pending`,`triggered`,`silenced`]},triggered:{category:`triggered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},siren:{category:`siren`,required:!1,permissions:[`rw`],data_type:`bool`,unit:null,format:null},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},fault_description:{category:`fault_description`,required:!1,permissions:[`ro`],data_type:`string`,unit:null,format:null},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},last_event:{category:`last_event`,required:!1,permissions:[`ro`],data_type:`string`,unit:null,format:null}}},contact:{category:`contact`,properties:{detected:{category:`detected`,required:!0,permissions:[`ro`],data_type:`bool`,unit:null,format:null},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},gas:{category:`gas`,properties:{detected:{category:`detected`,required:!0,permissions:[`ro`],data_type:`bool`,unit:null,format:null},status:{category:`status`,required:!0,permissions:[`ro`],data_type:`enum`,unit:null,format:[`normal`,`warning`,`alarm`]},concentration:{category:`concentration`,required:!1,permissions:[`ro`],data_type:`uint`,unit:`ppm`,format:[0,65535]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},leak:{category:`leak`,properties:{detected:{category:`detected`,required:!0,permissions:[`ro`],data_type:`bool`,unit:null,format:null},level:{category:`level`,required:!0,permissions:[`ro`],data_type:`enum`,unit:null,format:[`low`,`medium`,`high`]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},lock:{category:`lock`,properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},status:{category:`status`,required:!0,permissions:[`rw`],data_type:`enum`,unit:null,format:[`locked`,`unlocked`]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},motion:{category:`motion`,properties:{detected:{category:`detected`,required:!0,permissions:[`ro`],data_type:`bool`,unit:null,format:null},distance:{category:`distance`,required:!1,permissions:[`ro`],data_type:`float`,unit:`m`,format:[0,100]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},occupancy:{category:`occupancy`,properties:{detected:{category:`detected`,required:!0,permissions:[`ro`],data_type:`bool`,unit:null,format:null},distance:{category:`distance`,required:!1,permissions:[`ro`],data_type:`float`,unit:`m`,format:[0,100]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},smoke:{category:`smoke`,properties:{detected:{category:`detected`,required:!0,permissions:[`ro`],data_type:`bool`,unit:null,format:null},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},cooler:{category:`cooler`,properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},temperature:{category:`temperature`,required:!0,permissions:[`rw`],data_type:`float`,unit:`°C`,format:[0,100]},status:{category:`status`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},dehumidifier:{category:`dehumidifier`,properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},humidity:{category:`humidity`,required:!0,permissions:[`rw`],data_type:`uchar`,unit:`%`,format:[0,100]},mode:{category:`mode`,required:!1,permissions:[`rw`],data_type:`enum`,unit:null,format:[`auto`,`manual`,`continuous`,`laundry`,`quiet`]},status:{category:`status`,required:!1,permissions:[`ro`],data_type:`enum`,unit:null,format:[`idle`,`dehumidifying`,`defrosting`]},water_tank_full:{category:`water_tank_full`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},water_tank_level:{category:`water_tank_level`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:`%`,format:[0,100]},defrost_active:{category:`defrost_active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},timer:{category:`timer`,required:!1,permissions:[`rw`],data_types:[{id:`duration`,data_type:`ushort`,unit:`s`,format:[0,86400],step:60,description:{en:`Timer duration in seconds (0-86400)`}},{id:`preset`,data_type:`enum`,format:[`off`,`30m`,`1h`,`2h`,`4h`,`8h`,`12h`],description:{en:`Preset timer intervals`}}]},locked:{category:`locked`,required:!1,permissions:[`rw`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},door:{category:`door`,properties:{obstruction:{category:`obstruction`,required:!0,permissions:[`ro`],data_type:`bool`,unit:null,format:null},status:{category:`status`,required:!0,permissions:[`ro`],data_type:`enum`,unit:null,format:[`opened`,`closed`,`opening`,`closing`,`stopped`]},position:{category:`position`,required:!0,permissions:[`rw`],data_type:`enum`,unit:null,format:[`open`,`close`,`stop`]},type:{category:`type`,required:!0,permissions:[`ro`],data_type:`enum`,unit:null,format:[`door`,`garage`]},percentage:{category:`percentage`,required:!1,permissions:[`rw`],data_type:`uchar`,unit:null,format:[0,100]},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},fan:{category:`fan`,properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},swing:{category:`swing`,required:!1,permissions:[`rw`],data_type:`bool`,unit:null,format:null},speed:{category:`speed`,required:!1,permissions:[`rw`],data_types:[{id:`percentage`,data_type:`uchar`,unit:`%`,format:[0,100],step:1,description:{en:`Speed as percentage (0-100%)`}},{id:`level`,data_type:`enum`,format:[`off`,`low`,`medium`,`high`,`turbo`,`auto`],description:{en:`Speed as discrete levels`}}]},mode:{category:`mode`,required:!1,permissions:[`rw`],data_type:`enum`,unit:null,format:[`auto`,`manual`,`eco`,`sleep`,`natural`,`turbo`]},direction:{category:`direction`,required:!1,permissions:[`rw`],data_type:`enum`,unit:null,format:[`clockwise`,`counter_clockwise`]},natural_breeze:{category:`natural_breeze`,required:!1,permissions:[`rw`],data_type:`bool`,unit:null,format:null},timer:{category:`timer`,required:!1,permissions:[`rw`],data_types:[{id:`duration`,data_type:`ushort`,unit:`s`,format:[0,86400],step:60,description:{en:`Timer duration in seconds (0-86400)`}},{id:`preset`,data_type:`enum`,format:[`off`,`30m`,`1h`,`2h`,`4h`,`8h`,`12h`],description:{en:`Preset timer intervals`}}]},locked:{category:`locked`,required:!1,permissions:[`rw`],data_type:`bool`,unit:null,format:null}}},heater:{category:`heater`,properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},temperature:{category:`temperature`,required:!0,permissions:[`rw`],data_type:`float`,unit:`°C`,format:[0,100]},status:{category:`status`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},position:{category:`position`,required:!1,permissions:[`rw`],data_types:[{id:`percentage`,data_type:`uchar`,unit:`%`,format:[0,100],step:1,description:{en:`Position as percentage (0-100%)`}},{id:`state`,data_type:`enum`,format:[`closed`,`quarter`,`half`,`three_quarter`,`open`],description:{en:`Position as discrete states`}}]}}},humidifier:{category:`humidifier`,properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},humidity:{category:`humidity`,required:!0,permissions:[`rw`],data_type:`uchar`,unit:`%`,format:[0,100]},mode:{category:`mode`,required:!1,permissions:[`rw`],data_type:`enum`,unit:null,format:[`auto`,`manual`,`sleep`,`baby`]},status:{category:`status`,required:!1,permissions:[`ro`],data_type:`enum`,unit:null,format:[`idle`,`humidifying`]},mist_level:{category:`mist_level`,required:!1,permissions:[`rw`],data_types:[{id:`percentage`,data_type:`uchar`,unit:`%`,format:[0,100],step:1,description:{en:`Mist level as percentage (0-100%)`}},{id:`level`,data_type:`enum`,format:[`off`,`low`,`medium`,`high`],description:{en:`Mist level as discrete levels`}}]},warm_mist:{category:`warm_mist`,required:!1,permissions:[`rw`],data_type:`bool`,unit:null,format:null},water_tank_empty:{category:`water_tank_empty`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},water_tank_level:{category:`water_tank_level`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:`%`,format:[0,100]},timer:{category:`timer`,required:!1,permissions:[`rw`],data_types:[{id:`duration`,data_type:`ushort`,unit:`s`,format:[0,86400],step:60,description:{en:`Timer duration in seconds (0-86400)`}},{id:`preset`,data_type:`enum`,format:[`off`,`30m`,`1h`,`2h`,`4h`,`8h`,`12h`],description:{en:`Preset timer intervals`}}]},locked:{category:`locked`,required:!1,permissions:[`rw`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},light:{category:`light`,constraints:{mutuallyExclusiveGroups:[[[`color_red`,`color_green`,`color_blue`],[`hue`,`saturation`]]]},properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},brightness:{category:`brightness`,required:!1,permissions:[`rw`],data_types:[{id:`percentage`,data_type:`uchar`,unit:`%`,format:[0,100],step:1,description:{en:`Brightness as percentage (0-100%)`}},{id:`level`,data_type:`enum`,format:[`off`,`low`,`medium`,`high`,`full`],description:{en:`Brightness as discrete levels`}}]},color_red:{category:`color_red`,required:!1,permissions:[`rw`],data_type:`uchar`,unit:null,format:[0,255]},color_green:{category:`color_green`,required:!1,permissions:[`rw`],data_type:`uchar`,unit:null,format:[0,255]},color_blue:{category:`color_blue`,required:!1,permissions:[`rw`],data_type:`uchar`,unit:null,format:[0,255]},color_white:{category:`color_white`,required:!1,permissions:[`rw`],data_type:`uchar`,unit:null,format:[0,255]},color_temperature:{category:`color_temperature`,required:!1,permissions:[`rw`],data_type:`ushort`,unit:`K`,format:[2e3,1e4]},hue:{category:`hue`,required:!1,permissions:[`rw`],data_type:`ushort`,unit:`deg`,format:[0,360]},saturation:{category:`saturation`,required:!1,permissions:[`rw`],data_type:`uchar`,unit:`%`,format:[0,100]}}},outlet:{category:`outlet`,properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},in_use:{category:`in_use`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},robot_vacuum:{category:`robot_vacuum`,properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},status:{category:`status`,required:!0,permissions:[`ro`],data_type:`enum`,unit:null,format:[`idle`,`cleaning`,`vacuuming`,`mopping`,`docking`,`charging`]},mode:{category:`mode`,required:!1,permissions:[`rw`],data_type:`enum`,unit:null,format:[`auto`,`spot`,`manual`]},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},switcher:{category:`switcher`,properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},child_lock:{category:`child_lock`,required:!1,permissions:[`rw`],data_type:`bool`,unit:null,format:null},timer:{category:`timer`,required:!1,permissions:[`rw`],data_types:[{id:`duration`,data_type:`ushort`,unit:`s`,format:[0,86400],step:60,description:{en:`Timer duration in seconds (0-86400)`}},{id:`preset`,data_type:`enum`,format:[`off`,`30m`,`1h`,`2h`,`4h`,`8h`,`12h`],description:{en:`Preset timer intervals`}}]}}},thermostat:{category:`thermostat`,properties:{locked:{category:`locked`,required:!1,permissions:[`rw`],data_type:`bool`,unit:null,format:null}}},valve:{category:`valve`,properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},type:{category:`type`,required:!0,permissions:[`rw`],data_type:`enum`,unit:null,format:[`generic`,`irrigation`,`shower_head`,`water_faucet`]},duration:{category:`duration`,required:!1,permissions:[`rw`],data_type:`ushort`,unit:`s`,format:[0,3600]},remaining:{category:`remaining`,required:!1,permissions:[`ro`],data_type:`ushort`,unit:`s`,format:[0,3600]},mode:{category:`mode`,required:!1,permissions:[`ro`],data_type:`enum`,unit:null,format:[`manual`,`scheduled`]},position:{category:`position`,required:!1,permissions:[`rw`],data_types:[{id:`percentage`,data_type:`uchar`,unit:`%`,format:[0,100],step:1,description:{en:`Position as percentage (0-100%)`}},{id:`state`,data_type:`enum`,format:[`closed`,`quarter`,`half`,`three_quarter`,`open`],description:{en:`Position as discrete states`}}]},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},window_covering:{category:`window_covering`,properties:{status:{category:`status`,required:!0,permissions:[`ro`],data_type:`enum`,unit:null,format:[`opened`,`closed`,`opening`,`closing`,`stopped`]},position:{category:`position`,required:!0,permissions:[`rw`],data_types:[{id:`percentage`,data_type:`uchar`,unit:`%`,format:[0,100],step:1,description:{en:`Position as percentage (0-100%)`}},{id:`state`,data_type:`enum`,format:[`closed`,`quarter`,`half`,`three_quarter`,`open`],description:{en:`Position as discrete states`}}]},type:{category:`type`,required:!0,permissions:[`ro`],data_type:`enum`,unit:null,format:[`curtain`,`roller`,`blind`,`venetian_blind`,`vertical_blind`,`shutter`,`outdoor_blind`,`awning`]},command:{category:`command`,required:!0,permissions:[`wo`],data_type:`enum`,unit:null,format:[`open`,`close`,`stop`]},obstruction:{category:`obstruction`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},tilt:{category:`tilt`,required:!1,permissions:[`rw`],data_type:`float`,unit:`°`,format:[-90,90]},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},battery:{category:`battery`,properties:{percentage:{category:`percentage`,required:!0,permissions:[`ro`],data_types:[{id:`percentage`,data_type:`uchar`,unit:`%`,format:[0,100],step:1,description:{en:`Battery as percentage (0-100%)`}},{id:`level`,data_type:`enum`,format:[`critical`,`low`,`medium`,`high`,`full`],description:{en:`Battery as discrete levels`}}]},status:{category:`status`,required:!0,permissions:[`ro`],data_type:`enum`,unit:null,format:[`ok`,`low`,`charging`]},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},electrical_energy:{category:`electrical_energy`,properties:{consumption:{category:`consumption`,required:!0,permissions:[`ro`],data_type:`float`,unit:`kWh`,format:[0,null],measurement_kind:`cumulative`,reset_behavior:`unknown`},average_power:{category:`average_power`,required:!1,permissions:[`ro`],data_type:`float`,unit:`W`,format:[0,1e5],measurement_kind:`interval_average`},grid_import:{category:`grid_import`,required:!1,permissions:[`ro`],data_type:`float`,unit:`kWh`,format:[0,null],measurement_kind:`cumulative`,reset_behavior:`unknown`},grid_export:{category:`grid_export`,required:!1,permissions:[`ro`],data_type:`float`,unit:`kWh`,format:[0,null],measurement_kind:`cumulative`,reset_behavior:`unknown`},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},electrical_generation:{category:`electrical_generation`,properties:{production:{category:`production`,required:!0,permissions:[`ro`],data_type:`float`,unit:`kWh`,format:[0,null],measurement_kind:`cumulative`,reset_behavior:`unknown`},power:{category:`power`,required:!1,permissions:[`ro`],data_type:`float`,unit:`W`,format:[0,1e5],measurement_kind:`instantaneous`},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},electrical_power:{category:`electrical_power`,properties:{power:{category:`power`,required:!0,permissions:[`ro`],data_type:`float`,unit:`W`,format:[0,1e4],measurement_kind:`instantaneous`},voltage:{category:`voltage`,required:!1,permissions:[`ro`],data_type:`float`,unit:`V`,format:[0,500],measurement_kind:`instantaneous`},current:{category:`current`,required:!1,permissions:[`ro`],data_type:`float`,unit:`A`,format:[0,100],measurement_kind:`instantaneous`},frequency:{category:`frequency`,required:!1,permissions:[`ro`],data_type:`float`,unit:`Hz`,format:[40,70],measurement_kind:`instantaneous`},over_current:{category:`over_current`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},over_voltage:{category:`over_voltage`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},over_power:{category:`over_power`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},camera:{category:`camera`,properties:{status:{category:`status`,required:!0,permissions:[`ro`],data_type:`enum`,unit:null,format:[`available`,`in_use`,`unavailable`,`offline`,`initializing`,`error`]},source:{category:`source`,required:!0,permissions:[`ro`],data_type:`string`,unit:null,format:null},zoom:{category:`zoom`,required:!1,permissions:[`rw`],data_type:`float`,unit:null,format:[1,10]},pan:{category:`pan`,required:!1,permissions:[`rw`],data_type:`float`,unit:`°`,format:[-180,180]},tilt:{category:`tilt`,required:!1,permissions:[`rw`],data_type:`float`,unit:`°`,format:[-90,90]},infrared:{category:`infrared`,required:!1,permissions:[`rw`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},doorbell:{category:`doorbell`,properties:{event:{category:`event`,required:!0,permissions:[`ro`],data_type:`enum`,unit:null,format:[`single_press`,`double_press`,`long_press`]},brightness:{category:`brightness`,required:!1,permissions:[`rw`],data_types:[{id:`percentage`,data_type:`uchar`,unit:`%`,format:[0,100],step:1,description:{en:`Brightness as percentage (0-100%)`}},{id:`level`,data_type:`enum`,format:[`off`,`low`,`medium`,`high`,`full`],description:{en:`Brightness as discrete levels`}}]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},media_input:{category:`media_input`,properties:{source:{category:`source`,required:!0,permissions:[`rw`],data_types:[{id:`standard`,data_type:`enum`,unit:null,format:`hdmi1.hdmi2.hdmi3.hdmi4.hdmi5.hdmi6.arc.earc.tv.cable.satellite.antenna.av1.av2.component.vga.dvi.usb.bluetooth.wifi.airplay.cast.dlna.miracast.app_netflix.app_youtube.app_spotify.app_prime_video.app_disney_plus.app_hbo_max.app_apple_tv.app_plex.app_kodi.other`.split(`.`),step:null,description:{en:`Standardized input/source identifier (recommended for UI).`}},{id:`custom`,data_type:`string`,unit:null,format:null,step:null,description:{en:`Integration-specific input/source value (fallback).`}}]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},source_label:{category:`source_label`,required:!1,permissions:[`ro`],data_type:`string`,unit:null,format:null}}},media_playback:{category:`media_playback`,properties:{status:{category:`status`,required:!0,permissions:[`rw`],data_type:`enum`,unit:null,format:[`playing`,`paused`,`stopped`]},track:{category:`track`,required:!1,permissions:[`ro`],data_type:`string`,unit:null,format:null},duration:{category:`duration`,required:!1,permissions:[`ro`],data_type:`uint`,unit:`s`,format:[0,86400]},position:{category:`position`,required:!1,permissions:[`rw`],data_type:`uint`,unit:`s`,format:[0,86400]},shuffle:{category:`shuffle`,required:!1,permissions:[`rw`],data_type:`bool`,unit:null,format:null},repeat:{category:`repeat`,required:!1,permissions:[`rw`],data_type:`enum`,unit:null,format:[`off`,`one`,`all`]},command:{category:`command`,required:!1,permissions:[`wo`],data_type:`enum`,unit:null,format:[`play`,`pause`,`stop`,`next`,`previous`,`rewind`,`fast_forward`]},artist:{category:`artist`,required:!1,permissions:[`ro`],data_type:`string`,unit:null,format:null},album:{category:`album`,required:!1,permissions:[`ro`],data_type:`string`,unit:null,format:null},artwork_url:{category:`artwork_url`,required:!1,permissions:[`ro`],data_type:`string`,unit:null,format:null},media_type:{category:`media_type`,required:!1,permissions:[`ro`],data_type:`enum`,unit:null,format:[`music`,`tvshow`,`movie`,`video`,`playlist`,`podcast`,`audiobook`,`radio`,`unknown`]}}},microphone:{category:`microphone`,properties:{active:{category:`active`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},volume:{category:`volume`,required:!1,permissions:[`ro`],data_types:[{id:`percentage`,data_type:`uchar`,unit:`%`,format:[0,100],step:1,description:{en:`Volume as percentage (0-100%)`}},{id:`level`,data_type:`enum`,format:[`mute`,`low`,`medium`,`high`,`max`],description:{en:`Volume as discrete levels`}}]}}},speaker:{category:`speaker`,properties:{active:{category:`active`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},volume:{category:`volume`,required:!1,permissions:[`rw`],data_types:[{id:`percentage`,data_type:`uchar`,unit:`%`,format:[0,100],step:1,description:{en:`Volume as percentage (0-100%)`}},{id:`level`,data_type:`enum`,format:[`mute`,`low`,`medium`,`high`,`max`],description:{en:`Volume as discrete levels`}}]},mode:{category:`mode`,required:!1,permissions:[`rw`],data_type:`enum`,unit:null,format:[`stereo`,`mono`,`surround`]},mute:{category:`mute`,required:!1,permissions:[`rw`],data_type:`bool`,unit:null,format:null},balance:{category:`balance`,required:!1,permissions:[`rw`],data_type:`float`,unit:null,format:[-1,1]},bass:{category:`bass`,required:!1,permissions:[`rw`],data_type:`float`,unit:null,format:[-10,10]},treble:{category:`treble`,required:!1,permissions:[`rw`],data_type:`float`,unit:null,format:[-10,10]}}},television:{category:`television`,properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},brightness:{category:`brightness`,required:!1,permissions:[`rw`],data_types:[{id:`percentage`,data_type:`uchar`,unit:`%`,format:[0,100],step:1,description:{en:`Brightness as percentage (0-100%)`}},{id:`level`,data_type:`enum`,format:[`off`,`low`,`medium`,`high`,`full`],description:{en:`Brightness as discrete levels`}}]},remote_key:{category:`remote_key`,required:!1,permissions:[`wo`],data_type:`enum`,unit:null,format:[`rewind`,`fast_forward`,`next`,`previous`,`arrow_up`,`arrow_down`,`arrow_left`,`arrow_right`,`select`,`back`,`exit`,`info`,`play`,`pause`]}}},projector:{category:`projector`,properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},brightness:{category:`brightness`,required:!1,permissions:[`rw`],data_types:[{id:`percentage`,data_type:`uchar`,unit:`%`,format:[0,100],step:1,description:{en:`Brightness as percentage (0-100%)`}},{id:`level`,data_type:`enum`,format:[`off`,`low`,`medium`,`high`,`full`],description:{en:`Brightness as discrete levels`}}]},remote_key:{category:`remote_key`,required:!1,permissions:[`wo`],data_type:`enum`,unit:null,format:[`rewind`,`fast_forward`,`next`,`previous`,`arrow_up`,`arrow_down`,`arrow_left`,`arrow_right`,`select`,`back`,`exit`,`info`,`play`,`pause`]}}},device_information:{category:`device_information`,properties:{manufacturer:{category:`manufacturer`,required:!0,permissions:[`ro`],data_type:`string`,unit:null,format:null},model:{category:`model`,required:!0,permissions:[`ro`],data_type:`string`,unit:null,format:null},serial_number:{category:`serial_number`,required:!0,permissions:[`ro`],data_type:`string`,unit:null,format:null},firmware_revision:{category:`firmware_revision`,required:!1,permissions:[`ro`],data_type:`string`,unit:null,format:null},hardware_revision:{category:`hardware_revision`,required:!1,permissions:[`ro`],data_type:`string`,unit:null,format:null},link_quality:{category:`link_quality`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:`%`,format:[0,100]},connection_type:{category:`connection_type`,required:!1,permissions:[`ro`],data_type:`enum`,unit:null,format:[`wired`,`wifi`,`zigbee`,`bluetooth`]},status:{category:`status`,required:!1,permissions:[`ro`],data_type:`enum`,unit:null,format:[`connected`,`disconnected`,`init`,`ready`,`running`,`sleeping`,`stopped`,`lost`,`alert`,`unknown`]},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},filter:{category:`filter`,properties:{life_remaining:{category:`life_remaining`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:`%`,format:[0,100]},status:{category:`status`,required:!1,permissions:[`ro`],data_type:`enum`,unit:null,format:[`good`,`replace_soon`,`replace_now`]},change_needed:{category:`change_needed`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},reset:{category:`reset`,required:!1,permissions:[`wo`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},button:{category:`button`,properties:{event:{category:`event`,required:!0,permissions:[`ev`],data_type:`enum`,unit:null,format:[`press`,`long_press`,`double_press`,`triple_press`,`down`,`up`]},detected:{category:`detected`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},binary_input:{category:`binary_input`,properties:{state:{category:`state`,required:!0,permissions:[`ro`],data_type:`bool`,unit:null,format:null},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},analog_input:{category:`analog_input`,properties:{value:{category:`value`,required:!0,permissions:[`ro`],data_type:`float`,unit:null,format:null},unit:{category:`unit`,required:!1,permissions:[`ro`],data_type:`string`,unit:null,format:null},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},indicator:{category:`indicator`,properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},brightness:{category:`brightness`,required:!1,permissions:[`rw`],data_type:`uchar`,unit:null,format:[0,255]},color:{category:`color_red`,required:!1,permissions:[`rw`],data_type:`enum`,unit:null,format:[`red`,`green`,`blue`,`yellow`,`white`,`off`]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},buzzer:{category:`buzzer`,properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},frequency:{category:`frequency`,required:!1,permissions:[`rw`],data_type:`uint`,unit:`Hz`,format:[100,1e4]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},accelerometer:{category:`accelerometer`,properties:{acceleration_x:{category:`acceleration_x`,required:!0,permissions:[`ro`],data_type:`float`,unit:`g`,format:[-16,16],step:.001},acceleration_y:{category:`acceleration_y`,required:!0,permissions:[`ro`],data_type:`float`,unit:`g`,format:[-16,16],step:.001},acceleration_z:{category:`acceleration_z`,required:!0,permissions:[`ro`],data_type:`float`,unit:`g`,format:[-16,16],step:.001},orientation:{category:`orientation`,required:!1,permissions:[`ro`],data_type:`enum`,unit:null,format:[`landscape`,`portrait`,`landscape_inverted`,`portrait_inverted`,`face_up`,`face_down`]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},generic:{category:`generic`,properties:{generic:{category:`generic`,required:!1}}}},_e={generic:{category:`generic`,channels:{generic:{category:`generic`,required:!1,multiple:!0},device_information:{category:`device_information`,required:!0,multiple:!1},button:{category:`button`,required:!1,multiple:!0},binary_input:{category:`binary_input`,required:!1,multiple:!0},analog_input:{category:`analog_input`,required:!1,multiple:!0}}},air_conditioner:{category:`air_conditioner`,channels:{cooler:{category:`cooler`,required:!0,multiple:!1},fan:{category:`fan`,required:!0,multiple:!1},temperature:{category:`temperature`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1},heater:{category:`heater`,required:!1,multiple:!1},humidity:{category:`humidity`,required:!1,multiple:!1},contact:{category:`contact`,required:!1,multiple:!1},leak:{category:`leak`,required:!1,multiple:!1},filter:{category:`filter`,required:!1,multiple:!1},button:{category:`button`,required:!1,multiple:!0},binary_input:{category:`binary_input`,required:!1,multiple:!0},analog_input:{category:`analog_input`,required:!1,multiple:!0}}},air_dehumidifier:{category:`air_dehumidifier`,channels:{dehumidifier:{category:`dehumidifier`,required:!0,multiple:!1},humidity:{category:`humidity`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},fan:{category:`fan`,required:!1,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1},leak:{category:`leak`,required:!1,multiple:!1},temperature:{category:`temperature`,required:!1,multiple:!1}}},air_humidifier:{category:`air_humidifier`,channels:{humidifier:{category:`humidifier`,required:!0,multiple:!1},humidity:{category:`humidity`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},fan:{category:`fan`,required:!1,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1},leak:{category:`leak`,required:!1,multiple:!1},temperature:{category:`temperature`,required:!1,multiple:!1}}},air_purifier:{category:`air_purifier`,channels:{fan:{category:`fan`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},air_quality:{category:`air_quality`,required:!1,multiple:!1},filter:{category:`filter`,required:!1,multiple:!1},air_particulate:{category:`air_particulate`,required:!1,multiple:!1},carbon_dioxide:{category:`carbon_dioxide`,required:!1,multiple:!1},carbon_monoxide:{category:`carbon_monoxide`,required:!1,multiple:!1},humidity:{category:`humidity`,required:!1,multiple:!1},leak:{category:`leak`,required:!1,multiple:!1},nitrogen_dioxide:{category:`nitrogen_dioxide`,required:!1,multiple:!1},ozone:{category:`ozone`,required:!1,multiple:!1},pressure:{category:`pressure`,required:!1,multiple:!1},sulphur_dioxide:{category:`sulphur_dioxide`,required:!1,multiple:!1},temperature:{category:`temperature`,required:!1,multiple:!1},volatile_organic_compounds:{category:`volatile_organic_compounds`,required:!1,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1}}},thermostat:{category:`thermostat`,channels:{temperature:{category:`temperature`,required:!0,multiple:!1},thermostat:{category:`thermostat`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},contact:{category:`contact`,required:!1,multiple:!1},cooler:{category:`cooler`,required:!1,multiple:!1},heater:{category:`heater`,required:!1,multiple:!1},humidity:{category:`humidity`,required:!1,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1},button:{category:`button`,required:!1,multiple:!0},binary_input:{category:`binary_input`,required:!1,multiple:!0},analog_input:{category:`analog_input`,required:!1,multiple:!0}}},alarm:{category:`alarm`,channels:{alarm:{category:`alarm`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},battery:{category:`battery`,required:!1,multiple:!1}}},camera:{category:`camera`,channels:{camera:{category:`camera`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},battery:{category:`battery`,required:!1,multiple:!1},contact:{category:`contact`,required:!1,multiple:!1},humidity:{category:`humidity`,required:!1,multiple:!1},light:{category:`light`,required:!1,multiple:!1},microphone:{category:`microphone`,required:!1,multiple:!1},motion:{category:`motion`,required:!1,multiple:!1},speaker:{category:`speaker`,required:!1,multiple:!1},temperature:{category:`temperature`,required:!1,multiple:!1}}},doorbell:{category:`doorbell`,channels:{doorbell:{category:`doorbell`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},battery:{category:`battery`,required:!1,multiple:!1},camera:{category:`camera`,required:!1,multiple:!1},contact:{category:`contact`,required:!1,multiple:!1},light:{category:`light`,required:!1,multiple:!1},lock:{category:`lock`,required:!1,multiple:!1},microphone:{category:`microphone`,required:!1,multiple:!1},motion:{category:`motion`,required:!1,multiple:!1},speaker:{category:`speaker`,required:!1,multiple:!1}}},door:{category:`door`,channels:{door:{category:`door`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},battery:{category:`battery`,required:!1,multiple:!1},contact:{category:`contact`,required:!1,multiple:!1},lock:{category:`lock`,required:!1,multiple:!1},motion:{category:`motion`,required:!1,multiple:!1}}},lock:{category:`lock`,channels:{lock:{category:`lock`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},battery:{category:`battery`,required:!1,multiple:!1},contact:{category:`contact`,required:!1,multiple:!1},motion:{category:`motion`,required:!1,multiple:!1}}},fan:{category:`fan`,channels:{fan:{category:`fan`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1},button:{category:`button`,required:!1,multiple:!0},binary_input:{category:`binary_input`,required:!1,multiple:!0},analog_input:{category:`analog_input`,required:!1,multiple:!0}}},heating_unit:{category:`heating_unit`,channels:{heater:{category:`heater`,required:!0,multiple:!1},temperature:{category:`temperature`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1},humidity:{category:`humidity`,required:!1,multiple:!1},contact:{category:`contact`,required:!1,multiple:!1}}},water_heater:{category:`water_heater`,channels:{heater:{category:`heater`,required:!0,multiple:!1},temperature:{category:`temperature`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1},leak:{category:`leak`,required:!1,multiple:!1}}},input_controller:{category:`input_controller`,constraints:{oneOrMoreOf:[[`button`,`binary_input`,`analog_input`]]},channels:{device_information:{category:`device_information`,required:!0,multiple:!1},button:{category:`button`,required:!1,multiple:!0},binary_input:{category:`binary_input`,required:!1,multiple:!0},analog_input:{category:`analog_input`,required:!1,multiple:!0},battery:{category:`battery`,required:!1,multiple:!1}}},lighting:{category:`lighting`,channels:{light:{category:`light`,required:!0,multiple:!0},device_information:{category:`device_information`,required:!0,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1},illuminance:{category:`illuminance`,required:!1,multiple:!1},button:{category:`button`,required:!1,multiple:!0},binary_input:{category:`binary_input`,required:!1,multiple:!0},analog_input:{category:`analog_input`,required:!1,multiple:!0}}},outlet:{category:`outlet`,channels:{outlet:{category:`outlet`,required:!0,multiple:!0},device_information:{category:`device_information`,required:!0,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1},button:{category:`button`,required:!1,multiple:!0},binary_input:{category:`binary_input`,required:!1,multiple:!0},analog_input:{category:`analog_input`,required:!1,multiple:!0}}},pump:{category:`pump`,channels:{flow:{category:`flow`,required:!1,multiple:!1},switcher:{category:`switcher`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1},leak:{category:`leak`,required:!1,multiple:!1},pressure:{category:`pressure`,required:!1,multiple:!1}}},sprinkler:{category:`sprinkler`,channels:{valve:{category:`valve`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1},flow:{category:`flow`,required:!1,multiple:!1},humidity:{category:`humidity`,required:!1,multiple:!1},leak:{category:`leak`,required:!1,multiple:!1},pressure:{category:`pressure`,required:!1,multiple:!1}}},switcher:{category:`switcher`,constraints:{oneOrMoreOf:[[`outlet`,`switcher`]],mutuallyExclusiveGroups:[[[`outlet`],[`switcher`]]]},channels:{outlet:{category:`outlet`,required:!1,multiple:!0},switcher:{category:`switcher`,required:!1,multiple:!0},device_information:{category:`device_information`,required:!0,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1},button:{category:`button`,required:!1,multiple:!0},binary_input:{category:`binary_input`,required:!1,multiple:!0},analog_input:{category:`analog_input`,required:!1,multiple:!0}}},valve:{category:`valve`,channels:{valve:{category:`valve`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},battery:{category:`battery`,required:!1,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1},flow:{category:`flow`,required:!1,multiple:!1},leak:{category:`leak`,required:!1,multiple:!1},pressure:{category:`pressure`,required:!1,multiple:!1}}},window_covering:{category:`window_covering`,channels:{window_covering:{category:`window_covering`,required:!0,multiple:!0},device_information:{category:`device_information`,required:!0,multiple:!1},battery:{category:`battery`,required:!1,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1},button:{category:`button`,required:!1,multiple:!0},binary_input:{category:`binary_input`,required:!1,multiple:!0},analog_input:{category:`analog_input`,required:!1,multiple:!0}}},media:{category:`media`,channels:{switcher:{category:`switcher`,required:!1,multiple:!1},media_input:{category:`media_input`,required:!1,multiple:!1},media_playback:{category:`media_playback`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},microphone:{category:`microphone`,required:!1,multiple:!1},speaker:{category:`speaker`,required:!1,multiple:!1}}},speaker:{category:`speaker`,channels:{switcher:{category:`switcher`,required:!1,multiple:!1},speaker:{category:`speaker`,required:!0,multiple:!0},device_information:{category:`device_information`,required:!0,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1},media_input:{category:`media_input`,required:!1,multiple:!1},media_playback:{category:`media_playback`,required:!1,multiple:!1}}},television:{category:`television`,channels:{speaker:{category:`speaker`,required:!0,multiple:!1},television:{category:`television`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},media_playback:{category:`media_playback`,required:!1,multiple:!1},media_input:{category:`media_input`,required:!1,multiple:!1}}},projector:{category:`projector`,channels:{projector:{category:`projector`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},speaker:{category:`speaker`,required:!1,multiple:!1},media_playback:{category:`media_playback`,required:!1,multiple:!1},media_input:{category:`media_input`,required:!1,multiple:!1}}},av_receiver:{category:`av_receiver`,channels:{switcher:{category:`switcher`,required:!1,multiple:!1},speaker:{category:`speaker`,required:!0,multiple:!0},media_input:{category:`media_input`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},media_playback:{category:`media_playback`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1}}},set_top_box:{category:`set_top_box`,channels:{switcher:{category:`switcher`,required:!1,multiple:!1},media_playback:{category:`media_playback`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},media_input:{category:`media_input`,required:!1,multiple:!1},speaker:{category:`speaker`,required:!1,multiple:!1}}},game_console:{category:`game_console`,channels:{switcher:{category:`switcher`,required:!1,multiple:!1},media_playback:{category:`media_playback`,required:!1,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1}}},streaming_service:{category:`streaming_service`,channels:{media_playback:{category:`media_playback`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1}}},robot_vacuum:{category:`robot_vacuum`,channels:{battery:{category:`battery`,required:!0,multiple:!1},robot_vacuum:{category:`robot_vacuum`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1},leak:{category:`leak`,required:!1,multiple:!1},filter:{category:`filter`,required:!1,multiple:!1}}},sensor:{category:`sensor`,channels:{device_information:{category:`device_information`,required:!0,multiple:!1},air_particulate:{category:`air_particulate`,required:!1,multiple:!1},battery:{category:`battery`,required:!1,multiple:!1},carbon_dioxide:{category:`carbon_dioxide`,required:!1,multiple:!1},carbon_monoxide:{category:`carbon_monoxide`,required:!1,multiple:!1},gas:{category:`gas`,required:!1,multiple:!1},contact:{category:`contact`,required:!1,multiple:!1},humidity:{category:`humidity`,required:!1,multiple:!1},illuminance:{category:`illuminance`,required:!1,multiple:!1},leak:{category:`leak`,required:!1,multiple:!1},motion:{category:`motion`,required:!1,multiple:!1},nitrogen_dioxide:{category:`nitrogen_dioxide`,required:!1,multiple:!1},occupancy:{category:`occupancy`,required:!1,multiple:!1},ozone:{category:`ozone`,required:!1,multiple:!1},pressure:{category:`pressure`,required:!1,multiple:!1},smoke:{category:`smoke`,required:!1,multiple:!1},sulphur_dioxide:{category:`sulphur_dioxide`,required:!1,multiple:!1},temperature:{category:`temperature`,required:!1,multiple:!1},volatile_organic_compounds:{category:`volatile_organic_compounds`,required:!1,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1}}},terminal:{category:`terminal`,channels:{device_information:{category:`device_information`,required:!0,multiple:!1},button:{category:`button`,required:!1,multiple:!0},indicator:{category:`indicator`,required:!1,multiple:!0},buzzer:{category:`buzzer`,required:!1,multiple:!1},illuminance:{category:`illuminance`,required:!1,multiple:!1},accelerometer:{category:`accelerometer`,required:!1,multiple:!1},binary_input:{category:`binary_input`,required:!1,multiple:!0},switcher:{category:`switcher`,required:!1,multiple:!0},temperature:{category:`temperature`,required:!1,multiple:!1}}}},ve={[E.generic]:[],[E.air_conditioner]:[j.cooler,j.heater,j.fan,j.temperature,j.humidity,j.electrical_energy,j.electrical_power,j.leak,j.device_information],[E.air_dehumidifier]:[j.cooler,j.fan,j.temperature,j.humidity,j.electrical_energy,j.electrical_power,j.leak,j.device_information],[E.air_humidifier]:[j.humidity,j.switcher,j.temperature,j.fan,j.electrical_energy,j.electrical_power,j.leak,j.device_information],[E.air_purifier]:[j.fan,j.air_particulate,j.carbon_dioxide,j.carbon_monoxide,j.humidity,j.leak,j.nitrogen_dioxide,j.ozone,j.pressure,j.sulphur_dioxide,j.temperature,j.volatile_organic_compounds,j.electrical_energy,j.electrical_power,j.device_information],[E.alarm]:[j.alarm,j.device_information],[E.camera]:[j.camera,j.motion,j.microphone,j.speaker,j.contact,j.light,j.temperature,j.humidity,j.battery,j.device_information],[E.door]:[j.door,j.lock,j.contact,j.motion,j.battery,j.device_information],[E.doorbell]:[j.doorbell,j.camera,j.lock,j.motion,j.microphone,j.speaker,j.contact,j.light,j.battery,j.device_information],[E.fan]:[j.fan,j.electrical_energy,j.electrical_power,j.device_information],[E.heating_unit]:[j.heater,j.temperature,j.humidity,j.electrical_energy,j.electrical_power,j.device_information],[E.input_controller]:[j.button,j.binary_input,j.analog_input,j.battery,j.device_information],[E.lighting]:[j.light,j.button,j.binary_input,j.illuminance,j.electrical_energy,j.electrical_power,j.device_information],[E.lock]:[j.lock,j.contact,j.motion,j.battery,j.device_information],[E.media]:[j.media_input,j.media_playback,j.microphone,j.speaker,j.device_information],[E.av_receiver]:[j.media_input,j.media_playback,j.speaker,j.device_information],[E.game_console]:[j.media_playback,j.media_input,j.device_information],[E.projector]:[j.projector,j.speaker,j.media_playback,j.media_input,j.device_information],[E.set_top_box]:[j.media_input,j.media_playback,j.device_information],[E.streaming_service]:[j.media_playback,j.device_information],[E.outlet]:[j.outlet,j.electrical_energy,j.electrical_power,j.device_information],[E.pump]:[j.flow,j.switcher,j.leak,j.pressure,j.electrical_energy,j.electrical_power,j.device_information],[E.robot_vacuum]:[j.robot_vacuum,j.electrical_energy,j.electrical_power,j.leak,j.battery,j.device_information],[E.sensor]:[j.air_particulate,j.battery,j.carbon_dioxide,j.carbon_monoxide,j.contact,j.humidity,j.illuminance,j.leak,j.motion,j.nitrogen_dioxide,j.occupancy,j.ozone,j.pressure,j.smoke,j.sulphur_dioxide,j.temperature,j.volatile_organic_compounds,j.device_information],[E.speaker]:[j.speaker,j.media_input,j.media_playback,j.electrical_energy,j.electrical_power,j.device_information],[E.sprinkler]:[j.valve,j.flow,j.pressure,j.leak,j.humidity,j.electrical_energy,j.electrical_power,j.device_information],[E.switcher]:[j.switcher,j.button,j.binary_input,j.electrical_energy,j.electrical_power,j.device_information],[E.television]:[j.television,j.speaker,j.media_playback,j.media_input,j.device_information],[E.terminal]:[j.button,j.indicator,j.buzzer,j.illuminance,j.accelerometer,j.temperature,j.contact,j.switcher,j.device_information],[E.thermostat]:[j.thermostat,j.cooler,j.heater,j.temperature,j.humidity,j.contact,j.electrical_energy,j.electrical_power,j.device_information],[E.valve]:[j.valve,j.pressure,j.flow,j.leak,j.battery,j.electrical_energy,j.electrical_power,j.device_information],[E.water_heater]:[j.heater,j.temperature,j.leak,j.electrical_energy,j.electrical_power,j.device_information],[E.window_covering]:[j.window_covering,j.battery,j.electrical_energy,j.electrical_power,j.device_information]},ye=Object.fromEntries(Object.entries(_e).map(([e,t])=>{let n=Object.values(t.channels).map(e=>e.category),r=ve[e];return[e,r?[...n].sort((e,t)=>{let n=r.indexOf(e),i=r.indexOf(t);return n===-1&&i===-1?0:n===-1?1:i===-1?-1:n-i}):n]})),be=Object.fromEntries(Object.entries(_e).map(([e,t])=>[e,{required:Object.values(t.channels).filter(e=>e.required).map(e=>e.category),optional:Object.values(t.channels).filter(e=>!e.required).map(e=>e.category),multiple:Object.values(t.channels).filter(e=>e.multiple).map(e=>e.category)}])),xe=Object.fromEntries(Object.entries(ge).map(([e,t])=>[e,{required:Object.values(t.properties).filter(e=>e.required).map(e=>e.category),optional:Object.values(t.properties).filter(e=>!e.required).map(e=>e.category)}])),Se=(e,t)=>{let n=ge[e];if(!n)return;let r=Object.values(n.properties).find(e=>e.category===t);if(!r)return;let i=r.data_types?.[0];if(i)return{category:r.category,required:r.required,description:i.description??r.description??{en:``},permissions:r.permissions,data_type:i.data_type,unit:i.unit??null,format:i.format??null,invalid:r.invalid,step:i.step??null};if(r.data_type)return{category:r.category,required:r.required,description:r.description??{en:``},permissions:r.permissions,data_type:r.data_type,unit:r.unit??null,format:r.format??null,invalid:r.invalid,step:r.step??null}},Ce=({id:e})=>{let n=F(),r=n.getStore(H),i=n.getStore(W),a=e=>r.findById(e),o=e=>xe[e.category]??null;return{canAddAnotherProperty:t(()=>{let t=a(e);if(t===null)return!0;let{required:n,optional:r}=o(t)??{required:[],optional:[]},s=[...n,...r],c=i.findForChannel(t.id).map(e=>e.category);return s.filter(e=>!c.includes(e)).length>0}),missingRequiredProperties:t(()=>{let t=a(e);if(t===null)throw new J(`Something went wrong, channel can't be loaded`);let{required:n}=o(t)??{required:[]},r=i.findForChannel(t.id).map(e=>e.category);return n.filter(e=>!r.includes(e))})}},we=y({id:I().uuid().optional(),type:I().trim().nonempty(),device:I().uuid().optional(),category:A(j).default(j.generic),identifier:I().trim().nonempty().nullable().optional(),name:I().trim().nonempty(),description:I().trim().transform(e=>e===``?null:e).nullable().optional()}),Te=y({id:I().uuid(),type:I().trim().nonempty(),device:I().uuid(),category:A(j).default(j.generic),identifier:I().trim().nonempty().nullable().optional(),name:I().trim().nonempty().optional(),description:I().trim().transform(e=>e===``?null:e).nullable().optional()}),Ee=({type:e})=>{let{getByType:n}=oe(),r=t(()=>n(e));return{plugin:r,element:t(()=>(r.value?.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`))))}},De=()=>{let e=F().getStore(U),{firstLoad:n,semaphore:r}=v(e);return{devices:t(()=>e.findAll().filter(e=>!e.draft&&!e.hidden)),areLoading:t(()=>r.value.fetching.items),loaded:t(()=>n.value),fetchDevices:async()=>{await e.fetch()}}},Oe=({id:n,type:s,deviceId:c})=>{let l=F(),{element:u}=Ee({type:s}),d=l.getStore(H),{devices:p,fetchDevices:m,areLoading:h}=De(),{t:g}=i(),_=k(),v=f(),y=r(K.NONE),b,x=t(()=>D.device?p.value.find(e=>e.id===D.device)??null:null),S=t(()=>x.value?d.findForDevice(x.value.id).map(e=>e.category):[]),C=t(()=>x.value?be[x.value.category]??null:null),T=t(()=>C.value===null?[]:Object.values(j).filter(e=>C.value?.required.includes(e)||C.value?.optional.includes(e)).filter(e=>!S.value.includes(e)||C.value?.multiple?.includes(e)).map(e=>({value:e,label:g(`devicesModule.categories.channels.${e}`)}))),E=t(()=>p.value.filter(e=>e.type===s).map(e=>({value:e.id,label:e.name}))),D=a({...z(u.value?.schemas?.channelAddFormSchema||we),id:n,type:s,device:c,category:j.generic,name:``,description:``}),O=w(e(D)),A=r(void 0),M=r(!1),N=async()=>{if(A.value.clearValidate(),!await A.value.validate())throw new X(`Form not valid`);let e=c??D.device;if(!e)throw new X(`Missing device identifier`);if(!D.category)throw new X(`Missing data type definition`);let t=(u.value?.schemas?.channelAddFormSchema||we).safeParse(D);if(!t.success)throw v.error(`Schema validation failed with:`,t.error),new X(`Failed to validate create channel model.`);y.value=K.WORKING;let r=g(`devicesModule.messages.channels.notCreated`,{device:D.name});try{await d.add({id:n,deviceId:e,draft:!1,data:{...t.data,type:s}})}catch(e){throw y.value=K.ERROR,b=window.setTimeout(P,2e3),e instanceof Y&&e.code===422?_.error(e.message):_.error(r),e}return y.value=K.OK,b=window.setTimeout(P,2e3),_.success(g(`devicesModule.messages.channels.created`,{device:D.name})),`added`},P=()=>{window.clearTimeout(b),y.value=K.NONE};return m().catch(()=>{}),o(D,()=>{M.value=!(0,q.isEqual)(e(D),O)}),o(()=>T.value,e=>{e.length&&e[0]&&(D.category=e[0].value,O.category=e[0].value)},{immediate:!0}),{categoriesOptions:T,devicesOptions:E,model:D,formEl:A,formChanged:M,submit:N,clear:P,formResult:y,loadingDevices:h}},ke=({channel:n,messages:s})=>{let c=F(),{element:l}=Ee({type:n.type}),u=c.getStore(H),{devices:d,fetchDevices:p,areLoading:m}=De(),{t:h}=i(),g=k(),_=f(),v=r(K.NONE),y,b=t(()=>d.value.find(e=>e.id===n.device)??null),x=t(()=>b.value?u.findForDevice(b.value.id).filter(e=>e.id!==n.id).map(e=>e.category):[]),S=t(()=>b.value?be[b.value.category]??null:null),C=t(()=>S.value===null?[]:Object.values(j).filter(e=>S.value?.required.includes(e)||S.value?.optional.includes(e)).filter(e=>!x.value.includes(e)||S.value?.multiple?.includes(e)).map(e=>({value:e,label:h(`devicesModule.categories.channels.${e}`)}))),T=t(()=>d.value.map(e=>({value:e.id,label:e.name}))),E=a(n),D=w(e(E)),O=r(void 0),A=r(!1),M=async()=>{let t=n.draft,r=s&&s.error?s.error:n.draft?h(`devicesModule.messages.channels.notCreated`,{channel:n.name}):h(`devicesModule.messages.channels.notEdited`,{channel:n.name});if(O.value.clearValidate(),!await O.value.validate())throw new X(`Form not valid`);let i=(l.value?.schemas?.channelEditFormSchema||Te).safeParse(E);if(!i.success)throw _.error(`Schema validation failed with:`,i.error),new X(`Failed to validate edit channel model.`);v.value=K.WORKING;try{await u.edit({id:n.id,data:{...i.data,type:n.type}}),n.draft&&await u.save({id:n.id,deviceId:n.device})}catch(e){throw v.value=K.ERROR,y=window.setTimeout(N,2e3),e instanceof Y&&e.code===422?g.error(e.message):g.error(r),e}return v.value=K.OK,y=window.setTimeout(N,2e3),t?(g.success(h(s&&s.success?s.success:`devicesModule.messages.channels.created`,{channel:n.name})),`added`):(g.success(h(s&&s.success?s.success:`devicesModule.messages.channels.edited`,{channel:n.name})),A.value=!1,D=w(e(E)),`saved`)},N=()=>{window.clearTimeout(y),v.value=K.NONE};return p().catch(()=>{}),o(E,()=>{A.value=!(0,q.isEqual)(e(E),D)}),{categoriesOptions:C,devicesOptions:T,model:E,formEl:O,formChanged:A,submit:M,clear:N,formResult:v,loadingDevices:m}},Ae=({channelId:e,id:n})=>{let r=F().getStore(W),{data:i,semaphore:a}=v(r);return{property:t(()=>n===null?null:i.value[n]??null),isLoading:t(()=>a.value.fetching.item.includes(n)?!0:(i.value[n]??null)===null?a.value.fetching.items.includes(e)||a.value.fetching.items.includes(`all`):!1),fetchProperty:async()=>{(i.value[n]??null)?.draft||await r.get({id:n,channelId:e})}}},je=({channelId:e})=>{let n=F().getStore(W),{firstLoad:r,semaphore:i}=v(n),a=typeof e==`string`?t(()=>e):e;return{properties:t(()=>n.findAll().filter(e=>!a?.value||e.channel===a.value)),areLoading:t(()=>a.value?i.value.fetching.items.includes(a.value)?!0:!r.value.includes(a.value)&&i.value.fetching.items.includes(a.value):!1),loaded:t(()=>a.value?r.value.includes(a.value):!1),fetchProperties:async()=>{a.value&&await n.fetch({channelId:a.value})}}},Q={search:void 0,channels:[],categories:[],permissions:[],dataTypes:[]},Me={by:`category`,dir:`asc`},Ne=({channelId:e,key:n=`list`})=>{let i=F().getStore(W),{firstLoad:a,semaphore:s}=v(i),{filters:c,sort:l,pagination:u,reset:d}=N({key:`${te}:channels-properties:${n}`,filters:{schema:de,defaults:Q},sort:{defaults:[Me]},pagination:{defaults:{page:1,size:10}},syncQuery:!0,version:1}),f=t(()=>c.value.search!==Q.search||!(0,q.isEqual)(c.value.channels,Q.channels)||!(0,q.isEqual)(c.value.categories,Q.categories)||!(0,q.isEqual)(c.value.permissions,Q.permissions)||!(0,q.isEqual)(c.value.dataTypes,Q.dataTypes)),p=r(u.value.size||10),m=r(u.value.page||1),h=r(l.value.length>0?l.value[0]?.by:void 0),g=r(l.value.length>0?l.value[0]?.dir??null:null),_=t(()=>B(i.findAll().filter(t=>!e||t.channel===e).filter(e=>!e.draft&&(!c.value.search||e.id?.toLowerCase().includes(c.value.search.toLowerCase())||e.name?.toLowerCase().includes(c.value.search.toLowerCase())||e.identifier?.toLowerCase().includes(c.value.search.toLowerCase()))&&(c.value.categories.length===0||c.value.categories.includes(e.category))&&(c.value.dataTypes.length===0||c.value.dataTypes.includes(e.dataType))&&(c.value.permissions.length===0||e.permissions.some(e=>c.value.permissions.includes(e)))),[e=>e[h.value]??``],[g.value===`asc`?`asc`:`desc`])),y=t(()=>{let e=(m.value-1)*p.value,t=e+p.value;return _.value.slice(e,t)}),b=async()=>{await i.fetch({channelId:e})},x=t(()=>s.value.fetching.items.includes(e)?!0:!a.value.includes(e)&&s.value.fetching.items.includes(e)),S=t(()=>a.value.includes(e)),C=t(()=>i.findAll().filter(t=>!e||t.channel===e).filter(e=>!e.draft).length);return o(()=>u.value,e=>{m.value=e.page??1,p.value=e.size??10},{deep:!0}),o(()=>m.value,e=>{u.value.page=e}),o(()=>p.value,e=>{u.value.size=e}),o(()=>g.value,e=>{h.value===void 0||e===null?l.value=[]:l.value=[{by:h.value,dir:e}]}),o(()=>h.value,e=>{e===void 0?l.value=[]:l.value=[{by:e,dir:g.value}]}),{properties:_,propertiesPaginated:y,totalRows:C,areLoading:x,loaded:S,fetchProperties:b,filters:c,filtersActive:f,paginateSize:p,paginatePage:m,sortBy:h,sortDir:g,resetFilter:d}},Pe=()=>{let{t:e}=i(),t=k(),n=F().getStore(W);return{remove:async r=>{let i=n.findById(r);if(i===null)throw new J(`Something went wrong, channel property can't be loaded`);d.confirm(e(`devicesModule.texts.channelsProperties.confirmRemove`,{property:i.name??e(`devicesModule.categories.channelsProperties.${i.category}`)}),e(`devicesModule.headings.channelsProperties.remove`),{confirmButtonText:e(`devicesModule.buttons.yes.title`),cancelButtonText:e(`devicesModule.buttons.no.title`),type:`warning`}).then(async()=>{try{await n.remove({id:i.id,channelId:i.channel}),t.success(e(`devicesModule.messages.channelsProperties.removed`,{property:i.name??e(`devicesModule.categories.channelsProperties.${i.category}`)}))}catch(n){if(n instanceof Y&&n.code===404){let n=e(`devicesModule.messages.channelsProperties.notFound`,{property:i.name??e(`devicesModule.categories.channelsProperties.${i.category}`)});t.error(n)}else if(n instanceof Y&&n.code===422)t.error(n.message);else{let n=e(`devicesModule.messages.channelsProperties.notRemoved`,{property:i.name??e(`devicesModule.categories.channelsProperties.${i.category}`)});t.error(n)}}}).catch(()=>{t.info(e(`devicesModule.messages.channelsProperties.removeCanceled`,{property:i.name??e(`devicesModule.categories.channelsProperties.${i.category}`)}))})}}},Fe=({id:e})=>{let n=F().getStore(W);return{icon:t(()=>{switch(n.findById(e)?.category){case x.event:return`mdi:bell-ring-outline`;case x.detected:return`mdi:record-circle-outline`;case x.unit:return`mdi:ruler`;case x.value:return`mdi:numeric`;default:return`mdi:tune`}})}},Ie=y({id:I().uuid().optional(),type:I().trim().nonempty(),channel:I().uuid().optional(),category:A(x).default(x.generic),identifier:I().trim().nonempty().nullable().optional(),name:I().trim().nonempty().nullable(),permissions:O(A(D)),dataType:A(m),format:O(g([I(),g([b(),h()])])).nullable(),invalid:g([I(),b(),P(),h()]),step:g([I(),b()]).transform(e=>e===``?null:Number(e)).nullable(),enterValue:P().default(!1),value:g([I(),b(),P(),h()]).optional(),enumValues:O(I()),minValue:g([I(),b()]).transform(e=>e===``?void 0:Number(e)).optional(),maxValue:g([I(),b()]).transform(e=>e===``?void 0:Number(e)).optional()}),Le=y({id:I().uuid(),type:I().trim().nonempty(),channel:I().uuid(),category:A(x).default(x.generic),identifier:I().trim().nonempty().nullable().optional(),name:I().trim().nonempty().nullable().optional(),permissions:O(A(D)),dataType:A(m),format:O(g([I(),g([b(),h()])])).nullable(),invalid:g([I(),b(),P(),h()]),step:g([I(),b()]).transform(e=>e===``?null:Number(e)).nullable(),enterValue:P().default(!1),value:g([I(),b(),P(),h()]).optional(),enumValues:O(I()),minValue:g([I(),b()]).transform(e=>e===``?void 0:Number(e)).optional(),maxValue:g([I(),b()]).transform(e=>e===``?void 0:Number(e)).optional()}),Re=({type:e})=>{let{getByType:n}=ae(),r=t(()=>n(e));return{plugin:r,element:t(()=>(r.value?.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`))))}},ze=({id:n,type:s,channelId:c})=>{let l=F(),{element:u}=Re({type:s}),d=l.getStore(W),{channels:p,fetchChannels:h,areLoading:g}=ce(),{t:_}=i(),v=k(),y=f(),b=r(K.NONE),S,C=t(()=>P.channel?p.value.find(e=>e.id===P.channel)??null:null),T=t(()=>C.value?d.findForChannel(C.value.id).map(e=>e.category):[]),E=t(()=>C.value?xe[C.value.category]??null:null),O=t(()=>E.value===null?[]:Object.values(x).filter(e=>E.value?.required.includes(e)||E.value?.optional.includes(e)).filter(e=>!T.value.includes(e)).map(e=>({value:e,label:_(`devicesModule.categories.channelsProperties.${e}`)}))),A=t(()=>p.value.map(e=>({value:e.id,label:e.name}))),M=Object.values(D).map(e=>({value:e,label:_(`devicesModule.permissions.${e}`)})),N=Object.values(m).map(e=>({value:e,label:_(`devicesModule.dataTypes.${e}`)})),P=a({...z(u.value?.schemas?.channelPropertyAddFormSchema||Ie),id:n,type:s,channel:c,category:x.generic,name:``,permissions:[],dataType:m.unknown,format:null,invalid:null,step:null,enumValues:[],minValue:void 0,maxValue:void 0,enterValue:!1,value:void 0}),I=w(e(P)),L=r(void 0),R=r(!1),B=async()=>{if(L.value.clearValidate(),!await L.value.validate())throw new X(`Form not valid`);let e=c??P.channel;if(!e)throw new X(`Missing channel identifier`);if(P.name===``&&(P.name=null),!P.category)throw new X(`Missing data type definition`);P.dataType===m.enum?P.format=P.enumValues:[m.char,m.uchar,m.short,m.ushort,m.int,m.uint,m.float].includes(P.dataType)&&(P.format=[typeof P.minValue==`string`&&P.minValue!==``?Number(P.minValue):typeof P.minValue==`number`?P.minValue:null,typeof P.maxValue==`string`&&P.maxValue!==``?Number(P.maxValue):typeof P.maxValue==`number`?P.maxValue:null]),P.enterValue||delete P.value;let t=(u.value?.schemas?.channelPropertyAddFormSchema||Ie).safeParse(P);if(!t.success)throw y.error(`Schema validation failed with:`,t.error),new X(`Failed to validate create channel property model.`);b.value=K.WORKING;let r=_(`devicesModule.messages.channelsProperties.notCreated`,{device:P.name});try{await d.add({id:n,channelId:e,draft:!1,data:{...t.data,type:s}})}catch(e){throw b.value=K.ERROR,S=window.setTimeout(V,2e3),e instanceof Y&&e.code===422?v.error(e.message):v.error(r),e}return b.value=K.OK,S=window.setTimeout(V,2e3),v.success(_(`devicesModule.messages.channelsProperties.created`,{device:P.name})),`added`},V=()=>{window.clearTimeout(S),b.value=K.NONE};return h().catch(()=>{}),o(P,()=>{R.value=!(0,q.isEqual)(e(P),I)}),o(()=>P.category,t=>{let n=Se(C.value?.category??j.generic,t);n&&(I.permissions=n.permissions,I.dataType=n.data_type,P.permissions=n.permissions,P.dataType=n.data_type,n.invalid!==void 0&&(I.invalid=n.invalid,P.invalid=n.invalid),n.step!==void 0&&(I.step=n.step,P.step=n.step),I.dataType===m.enum?(I.enumValues=n.format??[],I.minValue=void 0,I.maxValue=void 0,P.enumValues=n.format??[],P.minValue=void 0,P.maxValue=void 0):[m.char,m.uchar,m.short,m.ushort,m.int,m.uint,m.float].includes(P.dataType)?(I.enumValues=[],I.minValue=n.format?.[0],I.maxValue=n.format?.[1],P.enumValues=[],P.minValue=n.format?.[0],P.maxValue=n.format?.[1]):(I.enumValues=[],I.minValue=void 0,I.maxValue=void 0,P.enumValues=[],P.minValue=void 0,P.maxValue=void 0),R.value=!(0,q.isEqual)(e(P),I))},{immediate:!0}),o(()=>O.value,e=>{e.length&&e[0]&&(P.category=e[0].value,I.category=e[0].value)},{immediate:!0}),{categoriesOptions:O,channelsOptions:A,permissionsOptions:M,dataTypesOptions:N,model:P,formEl:L,formChanged:R,submit:B,clear:V,formResult:b,loadingChannels:g}},Be=({property:n,messages:s})=>{let c=F(),{element:l}=Re({type:n.type}),u=c.getStore(W),{channels:d,fetchChannels:p,areLoading:h}=ce(),{t:g}=i(),_=k(),v=f(),y=r(K.NONE),b,S=[],C,T;n.dataType===m.enum?S=n.format?n.format.map(e=>e?.toString()||``):[]:[m.char,m.uchar,m.short,m.ushort,m.int,m.uint,m.float].includes(n.dataType)&&Array.isArray(n.format)&&n.format.length===2&&(C=n.format[0],T=n.format[1]);let E=t(()=>d.value.find(e=>e.id===n.channel)??null),O=t(()=>E.value?u.findForChannel(E.value.id).filter(e=>e.id!==n.id).map(e=>e.category):[]),A=t(()=>E.value?xe[E.value.category]??null:null),j=t(()=>A.value===null?[]:Object.values(x).filter(e=>A.value?.required.includes(e)||A.value?.optional.includes(e)).filter(e=>!O.value.includes(e)).map(e=>({value:e,label:g(`devicesModule.categories.channelsProperties.${e}`)}))),M=t(()=>d.value.map(e=>({value:e.id,label:e.name}))),N=Object.values(D).map(e=>({value:e,label:g(`devicesModule.permissions.${e}`)})),P=Object.values(m).map(e=>({value:e,label:g(`devicesModule.dataTypes.${e}`)})),I=a({...n,format:e(n.format),value:n.value?.value??null,enumValues:S,minValue:C,maxValue:T,enterValue:!1}),L=w(e(I)),R=r(void 0),z=r(!1),B=async()=>{let t=n.draft,r=s&&s.error?s.error:n.draft?g(`devicesModule.messages.channelsProperties.notCreated`,{property:n.name??g(`devicesModule.categories.channelsProperties.${n.category}`)}):g(`devicesModule.messages.channelsProperties.notEdited`,{property:n.name??g(`devicesModule.categories.channelsProperties.${n.category}`)});if(R.value.clearValidate(),!await R.value.validate())throw new X(`Form not valid`);I.name===``&&(I.name=null),n.dataType===m.enum?I.format=I.enumValues:[m.char,m.uchar,m.short,m.ushort,m.int,m.uint,m.float].includes(n.dataType)&&(I.format=[I.minValue??null,I.maxValue??null]),I.enterValue||delete I.value;let i=(l.value?.schemas?.channelPropertyEditFormSchema||Le).safeParse(I);if(!i.success)throw v.error(`Schema validation failed with:`,i.error),new X(`Failed to validate edit channel property model.`);y.value=K.WORKING;try{await u.edit({id:n.id,channelId:n.channel,data:{...i.data,type:n.type}}),n.draft&&await u.save({id:n.id,channelId:n.channel})}catch(e){throw y.value=K.ERROR,b=window.setTimeout(V,2e3),e instanceof Y&&e.code===422?_.error(e.message):_.error(r),e}return y.value=K.OK,b=window.setTimeout(V,2e3),t?(_.success(g(s&&s.success?s.success:`devicesModule.messages.channelsProperties.created`,{property:n.name??g(`devicesModule.categories.channelsProperties.${n.category}`)})),`added`):(_.success(g(s&&s.success?s.success:`devicesModule.messages.channelsProperties.edited`,{property:n.name??g(`devicesModule.categories.channelsProperties.${n.category}`)})),z.value=!1,L=w(e(I)),`saved`)},V=()=>{window.clearTimeout(b),y.value=K.NONE};return p().catch(()=>{}),o(I,()=>{z.value=!(0,q.isEqual)(e(I),L)}),{categoriesOptions:j,channelsOptions:M,permissionsOptions:N,dataTypesOptions:P,model:I,formEl:R,formChanged:z,submit:B,clear:V,formResult:y,loadingChannels:h}},Ve=({id:e})=>{let n=F().getStore(U),{data:r,semaphore:i}=v(n);return{device:t(()=>{let t=s(e);return t===null?null:r.value[t]??null}),isLoading:t(()=>{let t=s(e);return i.value.fetching.item.includes(t)?!0:(r.value[t]??null)===null&&i.value.fetching.items}),fetchDevice:async()=>{let t=s(e);(r.value[t]??null)?.draft||await n.get({id:t})}}},$={search:void 0,types:[],state:`all`,states:[],categories:[],enabled:`all`,validation:`all`},He={by:`name`,dir:`asc`},Ue=()=>{let e=F(),n=e.getStore(U),i=e.getStore(G),{firstLoad:a,semaphore:s}=v(n),{filters:c,sort:l,pagination:d,reset:f}=N({key:`${te}:devices:list`,filters:{schema:le,defaults:$},sort:{defaults:[He]},pagination:{defaults:{page:1,size:10}},syncQuery:!0,version:1}),p=t(()=>c.value.search!==$.search||!(0,q.isEqual)(c.value.types,$.types)||c.value.state!==$.state||!(0,q.isEqual)(c.value.states,$.states)||!(0,q.isEqual)(c.value.categories,$.categories)||!(0,q.isEqual)(c.value.enabled,$.enabled)||c.value.validation!==$.validation),m=r(d.value.size||10),h=r(d.value.page||1),g=r(l.value.length>0?l.value[0]?.by:void 0),_=r(l.value.length>0?l.value[0]?.dir??null:null),y=r(!1),b=e=>i.findById(e)?.isValid??null,x=t(()=>B(n.findAll().filter(e=>!e.draft&&(y.value||!e.hidden)&&(!c.value.search||e.id.toLowerCase().includes(c.value.search.toLowerCase())||e.name.toLowerCase().includes(c.value.search.toLowerCase())||e.description?.toLowerCase().includes(c.value.search.toLowerCase())||e.identifier?.toLowerCase().includes(c.value.search.toLowerCase()))&&(c.value.types.length===0||c.value.types.includes(e.type))&&(c.value.categories.length===0||c.value.categories.includes(e.category))&&(c.value.enabled===`all`||c.value.enabled===`enabled`&&e.enabled||c.value.enabled===`disabled`&&!e.enabled)&&(c.value.states.length===0||c.value.states.includes(e.status?.status??u.unknown))&&(c.value.state===`all`||c.value.state===`online`&&[u.ready,u.connected,u.running].includes(e.status.status)||c.value.state===`offline`&&[u.disconnected,u.stopped,u.lost,u.unknown].includes(e.status.status))&&(c.value.validation===`all`||c.value.validation===`valid`&&b(e.id)===!0||c.value.validation===`invalid`&&b(e.id)===!1)),[e=>g.value===`state`?e.status?.status??u.unknown:e[g.value]??``],[_.value===`asc`?`asc`:`desc`])),S=t(()=>{let e=(h.value-1)*m.value,t=e+m.value;return x.value.slice(e,t)}),w=async()=>{await n.fetch({hidden:y.value?C.all:C.false})},T=t(()=>s.value.fetching.items||!a.value),E=t(()=>a.value),D=t(()=>n.findAll().filter(e=>!e.draft&&(y.value||!e.hidden)).length);return o(()=>d.value,e=>{h.value=e.page??1,m.value=e.size??10},{deep:!0}),o(()=>h.value,e=>{d.value.page=e}),o(()=>m.value,e=>{d.value.size=e}),o(()=>_.value,e=>{g.value===void 0||e===null?l.value=[]:l.value=[{by:g.value,dir:e}]}),o(()=>g.value,e=>{e===void 0?l.value=[]:l.value=[{by:e,dir:_.value}]}),{devices:x,devicesPaginated:S,totalRows:D,areLoading:T,loaded:E,fetchDevices:w,filters:c,filtersActive:p,paginateSize:m,paginatePage:h,sortBy:g,sortDir:_,resetFilter:f,showHidden:y}},We=()=>{let{t:e}=i(),t=k(),n=F().getStore(U);return{remove:async r=>{let i=n.findById(r);if(i===null)throw new J(`Something went wrong, device can't be loaded`);d.confirm(e(`devicesModule.texts.devices.confirmRemove`,{device:i.name}),e(`devicesModule.headings.devices.remove`),{confirmButtonText:e(`devicesModule.buttons.yes.title`),cancelButtonText:e(`devicesModule.buttons.no.title`),type:`warning`}).then(async()=>{try{await n.remove({id:i.id}),t.success(e(`devicesModule.messages.devices.removed`,{device:i.name}))}catch(n){if(n instanceof Y&&n.code===404){let n=e(`devicesModule.messages.devices.notFound`,{device:i.name});t.error(n)}else if(n instanceof Y&&n.code===422)t.error(n.message);else{let n=e(`devicesModule.messages.devices.notRemoved`,{device:i.name});t.error(n)}}}).catch(()=>{t.info(e(`devicesModule.messages.devices.removeCanceled`,{device:i.name}))})},bulkRemove:async r=>{if(r.length!==0){try{await d.confirm(e(`devicesModule.texts.devices.confirmBulkRemove`,{count:r.length}),e(`devicesModule.headings.devices.bulkRemove`),{confirmButtonText:e(`devicesModule.buttons.yes.title`),cancelButtonText:e(`devicesModule.buttons.no.title`),type:`warning`})}catch{return}try{let i=await n.bulkRemove({ids:r.map(e=>e.id)});i.succeeded.length>0&&t.success(e(`devicesModule.messages.devices.bulkRemoved`,{count:i.succeeded.length})),i.failed.length>0&&t.error(e(`devicesModule.messages.devices.bulkRemoveFailed`,{count:i.failed.length}))}catch{t.error(e(`devicesModule.messages.devices.bulkRemoveFailed`,{count:r.length}))}}},bulkEnable:async r=>{if(r.length!==0){try{await d.confirm(e(`devicesModule.texts.devices.confirmBulkEnable`,{count:r.length}),e(`devicesModule.headings.devices.bulkEnable`),{confirmButtonText:e(`devicesModule.buttons.yes.title`),cancelButtonText:e(`devicesModule.buttons.no.title`),type:`info`})}catch{t.info(e(`devicesModule.messages.devices.bulkEnableCanceled`));return}try{let i=await n.bulkSetEnabled({ids:r.map(e=>e.id),enabled:!0});i.succeeded.length>0&&t.success(e(`devicesModule.messages.devices.bulkEnabled`,{count:i.succeeded.length})),i.failed.length>0&&t.error(e(`devicesModule.messages.devices.bulkEnableFailed`,{count:i.failed.length}))}catch{t.error(e(`devicesModule.messages.devices.bulkEnableFailed`,{count:r.length}))}}},bulkDisable:async r=>{if(r.length!==0){try{await d.confirm(e(`devicesModule.texts.devices.confirmBulkDisable`,{count:r.length}),e(`devicesModule.headings.devices.bulkDisable`),{confirmButtonText:e(`devicesModule.buttons.yes.title`),cancelButtonText:e(`devicesModule.buttons.no.title`),type:`warning`})}catch{t.info(e(`devicesModule.messages.devices.bulkDisableCanceled`));return}try{let i=await n.bulkSetEnabled({ids:r.map(e=>e.id),enabled:!1});i.succeeded.length>0&&t.success(e(`devicesModule.messages.devices.bulkDisabled`,{count:i.succeeded.length})),i.failed.length>0&&t.error(e(`devicesModule.messages.devices.bulkDisableFailed`,{count:i.failed.length}))}catch{t.error(e(`devicesModule.messages.devices.bulkDisableFailed`,{count:r.length}))}}}}},Ge=({id:e})=>{let n=F().getStore(U);return{icon:t(()=>{switch(n.findById(e)?.category){case E.input_controller:return`mdi:gesture-tap-button`;default:return`mdi:devices`}})}},Ke=({id:e})=>{let n=F(),r=n.getStore(U),i=n.getStore(H),a=e=>r.findById(e),o=e=>be[e.category]??null;return{canAddAnotherChannel:t(()=>{let t=a(typeof e==`string`?e:e.value);if(t===null)return!0;let{required:n,optional:r,multiple:s}=o(t)??{required:[],optional:[]},c=[...n,...r],l=i.findForDevice(t.id).map(e=>e.category);return c.filter(e=>!l.includes(e)).length>0||s!==void 0&&s.length>0}),missingRequiredChannels:t(()=>{let t=a(typeof e==`string`?e:e.value);if(t===null)throw new J(`Something went wrong, device can't be loaded`);let{required:n}=o(t)??{required:[]},r=i.findForDevice(t.id).map(e=>e.category);return n.filter(e=>!r.includes(e))})}},qe=y({id:I().uuid().optional(),type:I().trim().nonempty(),category:A(E).default(E.generic),identifier:I().trim().nonempty().nullable().optional(),name:I().trim().nonempty(),description:I().trim().transform(e=>e===``?null:e).nullable().optional(),enabled:P().default(!0).optional()}),Je=y({id:I().uuid(),type:I().trim().nonempty(),category:A(E).default(E.generic),identifier:I().trim().nonempty().nullable().optional(),name:I().trim().nonempty().optional(),description:I().trim().transform(e=>e===``?null:e).nullable().optional(),enabled:P().optional(),roomId:I().uuid().nullable().optional()}),Ye=({type:e})=>{let{getByType:n}=ne(),r=t(()=>n(e));return{plugin:r,element:t(()=>(r.value?.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`))))}},Xe=({id:t,type:n})=>{let s=F(),{element:c}=Ye({type:n}),l=s.getStore(U),{t:u}=i(),d=k(),p=f(),m=r(K.NONE),h,g=Object.values(E).map(e=>({value:e,label:u(`devicesModule.categories.devices.${e}`)})),_=a({...z(c.value?.schemas?.deviceAddFormSchema||qe),id:t,type:n,category:E.generic,name:``,description:``}),v=w(e(_)),y=r(void 0),b=r(!1),x=async()=>{if(y.value.clearValidate(),!await y.value.validate())throw new X(`Form not valid`);let e=(c.value?.schemas?.deviceAddFormSchema||qe).safeParse(_);if(!e.success)throw p.error(`Schema validation failed with:`,e.error),new X(`Failed to validate create device model.`);m.value=K.WORKING;let r=u(`devicesModule.messages.devices.notCreated`,{device:_.name});try{await l.add({id:t,draft:!1,data:{...e.data,type:n}})}catch(e){throw m.value=K.ERROR,h=window.setTimeout(S,2e3),e instanceof Y&&e.code===422?d.error(e.message):d.error(r),e}return m.value=K.OK,h=window.setTimeout(S,2e3),d.success(u(`devicesModule.messages.devices.created`,{device:_.name})),`added`},S=()=>{window.clearTimeout(h),m.value=K.NONE};return o(_,()=>{b.value=!(0,q.isEqual)(e(_),v)}),{categoriesOptions:g,model:_,formEl:y,formChanged:b,submit:x,clear:S,formResult:m}},Ze=({device:t,messages:n})=>{let s=F(),{element:c}=Ye({type:t.type}),l=s.getStore(U),{t:u}=i(),d=k(),p=f(),m=r(K.NONE),h,g=Object.values(E).map(e=>({value:e,label:u(`devicesModule.categories.devices.${e}`)})),_=a(t),v=w(e(_)),y=r(void 0),b=r(!1),x=async()=>{let r=t.draft,i=n&&n.error?n.error:t.draft?u(`devicesModule.messages.devices.notCreated`,{device:t.name}):u(`devicesModule.messages.devices.notEdited`,{device:t.name});if(y.value.clearValidate(),!await y.value.validate())throw new X(`Form not valid`);let a=(c.value?.schemas?.deviceEditFormSchema||Je).safeParse(_);if(!a.success)throw p.error(`Schema validation failed with:`,a.error),new X(`Failed to validate edit device model.`);let o={...a.data};(0,q.isEqual)(o.roomId,v.roomId)&&delete o.roomId,m.value=K.WORKING;try{await l.edit({id:t.id,data:{...o,type:t.type}}),t.draft&&await l.save({id:t.id})}catch(e){throw m.value=K.ERROR,h=window.setTimeout(S,2e3),e instanceof Y&&e.code===422?d.error(e.message):d.error(i),e}return m.value=K.OK,h=window.setTimeout(S,2e3),r?(d.success(u(n&&n.success?n.success:`devicesModule.messages.devices.created`,{device:t.name})),`added`):(d.success(u(n&&n.success?n.success:`devicesModule.messages.devices.edited`,{device:t.name})),b.value=!1,v=w(e(_)),`saved`)},S=()=>{window.clearTimeout(h),m.value=K.NONE};return o(_,()=>{b.value=!(0,q.isEqual)(e(_),v)}),{categoriesOptions:g,model:_,formEl:y,formChanged:b,submit:x,clear:S,formResult:m}},Qe=()=>{let e=F().getStore(G),{data:n,semaphore:r,firstLoad:i}=v(e);return{validation:t(()=>n.value),summary:t(()=>n.value?.summary??null),invalidDevices:t(()=>n.value?n.value.devices.filter(e=>!e.isValid):[]),isLoading:t(()=>r.value.fetching.items),isLoaded:t(()=>i.value),fetchValidation:async()=>{await e.fetch()},findById:t=>e.findById(t),isDeviceValid:t=>{let n=e.findById(t);return n?n.isValid:null},getDeviceIssueCount:t=>{let n=e.findById(t);return n?n.issues.length:0}}},$e=({id:e})=>{let n=F().getStore(G),{semaphore:r}=v(n);return{validation:t(()=>n.findById(typeof e==`string`?e:e.value)),isValid:t(()=>{let t=n.findById(typeof e==`string`?e:e.value);return t?t.isValid:null}),issues:t(()=>{let t=n.findById(typeof e==`string`?e:e.value);return t?t.issues:[]}),errorCount:t(()=>{let t=n.findById(typeof e==`string`?e:e.value);return t?t.issues.filter(e=>e.severity===`error`).length:0}),warningCount:t(()=>{let t=n.findById(typeof e==`string`?e:e.value);return t?t.issues.filter(e=>e.severity===`warning`).length:0}),isLoading:t(()=>r.value.fetching.item.includes(typeof e==`string`?e:e.value)),fetchValidation:async()=>{await n.get({id:typeof e==`string`?e:e.value})}}},et=300,tt=1e4,nt=({id:e})=>{let i=F(),a=i.getStore(U),s=i.getStore(H),c=i.getStore(W),{data:l,semaphore:u}=v(a),{data:d,semaphore:f,firstLoad:m}=v(s),{semaphore:h,firstLoad:g}=v(c),{sendCommand:_}=p(),y={},b={},x={},S=r({}),C=r({}),w=t(()=>e===null?null:l.value[e]??null),T=t(()=>Object.values(d.value).filter(t=>t.device===e&&t.category!==j.device_information)),E=t(()=>T.value.filter(e=>e.category===j.button||e.category===j.binary_input||e.category===j.analog_input?!1:c.findForChannel(e.id).some(e=>e.permissions.includes(D.rw)||e.permissions.includes(D.wo)))),O=t(()=>E.value.length>0),k=e=>c.findForChannel(e),A=e=>e.permissions.includes(D.rw)||e.permissions.includes(D.wo),M=e=>{let t=S.value[e];return t===void 0?c.findById(e)?.value?.value??null:t},N=e=>C.value[e]??!1,P=(e,t)=>{if(t!==void 0){let n=S.value[e];if(n!==t&&String(n)!==String(t))return}delete S.value[e],x[e]&&(clearTimeout(x[e]),delete x[e])},I=(e,t)=>{x[e]&&clearTimeout(x[e]),x[e]=setTimeout(()=>{let n=S.value[e];(n===t||String(n)===String(t))&&delete S.value[e],delete x[e]},tt)},L=async(t,n,r)=>c.findById(n)?(y[n]&&(clearTimeout(y[n]),delete y[n],b[n]&&(b[n](!1),delete b[n])),S.value[n]=r,new Promise(i=>{b[n]=i;let a=setTimeout(async()=>{delete b[n],C.value[n]=!0;try{await _(ee.CHANNEL_PROPERTY_SET,{context:{origin:`admin`},properties:[{device:e,channel:t,property:n,value:r}]},`DevicesModule.Internal.SetPropertyValue`)===!0?(I(n,r),i(!0)):(P(n,r),i(!1))}catch{P(n,r),i(!1)}finally{C.value[n]=!1,y[n]===a&&delete y[n]}},et);y[n]=a})):!1,R=async()=>{(e in l.value?l.value[e]:null)?.draft||await a.get({id:e})},z=async()=>{await s.fetch({deviceId:e})},B=async()=>{let t=Object.values(d.value).filter(t=>t.device===e);for(let e of t)await c.fetch({channelId:e.id})},V=t(()=>{if(u.value.fetching.item.includes(e)||f.value.fetching.items.includes(e))return!0;for(let e of T.value)if(h.value.fetching.items.includes(e.id))return!0;return!1}),G=t(()=>m.value.includes(e)),K=t(()=>{if(!G.value)return!1;for(let e of T.value)if(!g.value.includes(e.id))return!1;return!0});return o(()=>{let e={};for(let t of Object.keys(S.value)){let n=c.findById(t);n&&(e[t]=n.value?.value??null)}return e},e=>{for(let[t,n]of Object.entries(S.value)){let r=e[t];(r===n||String(r)===String(n))&&P(t)}},{deep:!0}),n(()=>{for(let e of Object.keys(y))clearTimeout(y[e]),delete y[e],b[e]&&(b[e](!1),delete b[e]);for(let e of Object.keys(x))clearTimeout(x[e]),delete x[e]}),{device:w,channels:T,controllableChannels:E,hasControllableProperties:O,isLoading:V,areChannelsLoaded:G,arePropertiesLoaded:K,fetchDevice:R,fetchChannels:z,fetchProperties:B,getPropertiesForChannel:k,isPropertyWritable:A,getPropertyValue:M,isPropertyLoading:N,setPropertyValue:L}},rt=({deviceId:e})=>{let n=F().getStore(V),{firstLoad:r,semaphore:i}=v(n);return{controls:t(()=>n.findForDevice(typeof e==`string`?e:e.value)),areLoading:t(()=>i.value.fetching.items.includes(typeof e==`string`?e:e.value)),loaded:t(()=>r.value.includes(typeof e==`string`?e:e.value)),fetchControls:async()=>n.fetch({deviceId:typeof e==`string`?e:e.value})}},it=e=>{let n=T(),i=f(),a=r({}),u=r(!1),d=r(!1),p=r(!1),m=r(void 0),h=r(!1),g=null,_=0,v=t(()=>Object.values(a.value).sort((e,t)=>new Date(t.ts).getTime()-new Date(e.ts).getTime())),y=t(()=>{let e=[M.warn,M.error,M.fatal,M.fail];return v.value.filter(t=>e.includes(t.type))}),b=t(()=>y.value.length),x=t(()=>b.value>0),S=async()=>{let t=s(e.deviceId);g=t,_++;let r=_;d.value=!0;try{let{data:e,error:o}=await n.client.GET(`/${c}/${re}/logs`,{params:{query:{resource:t,limit:50}}});if(g!==t||_!==r)return;if(e!==void 0){let t=Object.fromEntries(e.data.map(e=>{let t=ie(e);return[t.id,t]}));a.value=t,p.value=!0,u.value=e.metadata.has_more,m.value=e.metadata.next_cursor}else o&&i.error(`Failed to fetch device logs:`,o)}catch(e){g===t&&_===r&&i.error(`Error fetching device logs:`,e)}finally{g===t&&_===r&&(d.value=!1)}},C=async()=>{if(d.value||!u.value||!m.value)return;let t=s(e.deviceId),r=m.value,o=_;d.value=!0;try{let{data:e,error:s}=await n.client.GET(`/${c}/${re}/logs`,{params:{query:{resource:t,after_id:r,limit:50}}});if(g!==t||_!==o)return;if(e!==void 0){let t=Object.fromEntries(e.data.map(e=>{let t=ie(e);return[t.id,t]}));a.value={...a.value,...t},u.value=e.metadata.has_more,m.value=e.metadata.next_cursor}else s&&i.error(`Failed to load more device logs:`,s)}catch(e){g===t&&_===o&&i.error(`Error loading more device logs:`,e)}finally{g===t&&_===o&&(d.value=!1)}},w=async()=>{a.value={},m.value=void 0,u.value=!1,p.value=!1,await S()},E=null;return o(()=>h.value,e=>{E&&=(clearInterval(E),null),e&&(E=setInterval(()=>{d.value||S()},3e3))}),l(()=>{E&&=(clearInterval(E),null)}),o(()=>s(e.deviceId),()=>{w()}),{logs:v,alertLogs:y,alertCount:b,hasAlerts:x,hasMore:u,isLoading:d,loaded:p,live:h,fetchLogs:S,loadMoreLogs:C,refreshLogs:w}};export{be as A,oe as B,je as C,De as D,Oe as E,he as F,Y as H,me as I,pe as L,Se as M,_e as N,Ce as O,ge as P,ce as R,Ne as S,ke as T,J as U,ae as V,X as W,ze as _,Qe as a,Fe as b,Ye as c,Ke as d,Ge as f,Be as g,Ve as h,$e as i,ye as j,xe as k,qe as l,Ue as m,rt as n,Ze as o,We as p,nt as r,Xe as s,it as t,Je as u,Ie as v,Ae as w,Pe as x,Le as y,se as z};
@@ -1 +1 @@
1
- import"./rolldown-runtime-QTnfLwEv.js";import{Ei as e,Er as t,Gr as n,Si as r,T as i,bi as a,ci as o}from"./icon-with-child-CgZMNB3F.js";import{Wn as s,_ as c,bt as l,dt as u,f as d,gt as f,ht as p,it as m,jr as h,l as g,la as _,ot as v,p as y,pt as b,s as x,st as S,vt as C,x as w,xt as T,yt as E}from"./common-D4Z2wgrj.js";import{r as D}from"./config-DAgVgX46.js";import{r as O}from"./usePlugins-CLZiBdYY.js";import{t as k}from"./dist-DJgPCOr0.js";import{g as A,x as j}from"./keys-BMDz3FOI.js";import{t as ee}from"./useSpaces-CPYe_mwZ.js";import"./composables-D2O7i4W5.js";var M=`scenes`,N=`scenes-module`,P=`ScenesModule.`,F=function(e){return e.TRIGGER_SCENE=`ScenesModule.TriggerScene`,e}({}),I=function(e){return e.TRIGGER_SCENE=`ScenesModule.TriggerSceneHandler`,e}({}),te=function(e){return e.SCENE_CREATED=`ScenesModule.Scene.Created`,e.SCENE_UPDATED=`ScenesModule.Scene.Updated`,e.SCENE_DELETED=`ScenesModule.Scene.Deleted`,e.SCENE_TRIGGERED=`ScenesModule.Scene.Triggered`,e.SCENE_EXECUTION_STARTED=`ScenesModule.Scene.ExecutionStarted`,e.SCENE_EXECUTION_COMPLETED=`ScenesModule.Scene.ExecutionCompleted`,e.SCENE_EXECUTION_FAILED=`ScenesModule.Scene.ExecutionFailed`,e.SCENE_ACTION_CREATED=`ScenesModule.SceneAction.Created`,e.SCENE_ACTION_UPDATED=`ScenesModule.SceneAction.Updated`,e.SCENE_ACTION_DELETED=`ScenesModule.SceneAction.Deleted`,e}({}),L=function(e){return e.NONE=`none`,e.WORKING=`working`,e.ERROR=`error`,e.OK=`ok`,e}({}),R={SCENES:`scenes_module-scenes`,SCENES_ADD:`scenes_module-scenes_add`,SCENES_EDIT:`scenes_module-scenes_edit`,SCENE:`scenes_module-scene`,SCENE_EDIT:`scenes_module-scene_edit`,SCENE_ADD_ACTION:`scenes_module-scene_add_action`,SCENE_EDIT_ACTION:`scenes_module-scene_edit_action`},z={[s.generic]:`mdi:playlist-play`,[s.lighting]:`mdi:lightbulb-group`,[s.climate]:`mdi:thermostat`,[s.media]:`mdi:television-play`,[s.work]:`mdi:briefcase`,[s.relax]:`mdi:sofa`,[s.night]:`mdi:weather-night`,[s.morning]:`mdi:weather-sunset-up`,[s.party]:`mdi:party-popper`,[s.movie]:`mdi:movie-open`,[s.away]:`mdi:home-export-outline`,[s.home]:`mdi:home-import-outline`,[s.security]:`mdi:shield-home`,[s.energy]:`mdi:flash`,[s.custom]:`mdi:shape-outline`},B=f({search:E().optional(),categories:v(b(s)),primarySpaceId:l([E().uuid(),u(`whole_home`)]).optional(),enabled:m([`all`,`enabled`,`disabled`]).default(`all`)}),V=Symbol(`FB-Module-Scenes-ScenesStore`),H=Symbol(`FB-Module-Scenes-ScenesActionsStore`),U=({id:e})=>{let n=w(),r=n.getStore(V),i=n.getStore(H),{data:a,semaphore:o}=_(r);return{scene:t(()=>e===null?null:a.value.get(e)??null),isLoading:t(()=>o.value.fetching.item.includes(e)?!0:a.value.get(e)===void 0&&o.value.fetching.items),fetchScene:async()=>{a.value.get(e)?.draft||(await r.get({id:e}),await i.fetch({sceneId:e}))}}},W=d(),G=f({id:E().uuid().optional(),type:E().trim().nonempty(),configuration:C(E(),T()).default({}),order:p().int().min(0).optional(),enabled:S().default(!0)}).catchall(T());f({id:E().uuid(),type:E().trim().nonempty(),configuration:C(E(),T()).optional(),order:p().int().min(0).optional(),enabled:S().optional()}).catchall(T());var K=f({id:E().uuid().optional(),name:E().trim().nonempty(),description:E().trim().transform(e=>e===``?null:e).nullable().optional(),category:b(s).default(s.generic),icon:E().nullable().optional(),enabled:S().default(!0),order:p().optional(),primarySpaceId:E().uuid().nullable().optional().transform(e=>e===``?null:e),actions:v(G).default([])}),q=f({id:E().uuid(),name:E().trim().nonempty().optional(),description:E().trim().transform(e=>e===``?null:e).nullable().optional(),category:b(s).optional(),icon:E().nullable().optional(),enabled:S().optional(),order:p().optional(),primarySpaceId:E().uuid().nullable().optional().transform(e=>e===``?null:e),actions:v(G).default([])}),J=class extends Error{exception;constructor(e,t=null){super(e),this.name=`ScenesException`,this.exception=t}},Y=class extends J{code;constructor(e,t=null,n=null){super(e,n),this.name=`ScenesApiException`,this.code=t}},X=class extends J{constructor(e,t=null){super(e,t),this.name=`ScenesValidationException`}},ne=()=>{let e=O(),{enabled:n}=D(),r=[`sceneActionAddForm`,`sceneActionEditForm`,`sceneActionCard`],i=[`sceneActionSchema`,`sceneActionAddFormSchema`,`sceneActionEditFormSchema`,`sceneActionCreateReqSchema`,`sceneActionUpdateReqSchema`],a=t(()=>e.getPlugins().filter(e=>e.modules===void 0||e.modules.includes(`scenes-module`)?(e.elements??[]).some(e=>{if(!(e.modules===void 0||e.modules.includes(`scenes-module`)))return!1;let t=r.length===0||!!e.components&&r.some(t=>e.components&&t in e.components),n=i.length===0||!!e.schemas&&i.some(t=>e.schemas&&t in e.schemas);return t||n}):!1));return{plugins:a,options:t(()=>k(a.value.flatMap(e=>(e.elements??[]).filter(e=>{let t=e.modules===void 0||e.modules.includes(`scenes-module`),n=!!e.components&&r.some(t=>e.components&&t in e.components);return t&&n}).map(t=>({value:t.type,label:t.name?.trim()?t.name:e.name,disabled:!n(e.type)}))),[e=>e.label],[`asc`])),getByName:e=>a.value.find(t=>t.type===e),getByType:e=>a.value.find(t=>(t.elements??[]).some(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`scenes-module`)))),getElement:e=>{for(let t of a.value){let n=(t.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`scenes-module`)));if(n)return n}}}},Z=({id:n})=>{let l=w(),u=l.getStore(V),d=l.getStore(H),{t:f}=i(),p=y(),m=c(),{spaces:h,fetching:_,fetchSpaces:v}=ee(),b=r(L.NONE),x,S=t(()=>Object.values(s).map(e=>({value:e,label:f(`scenes.categories.${e}`),icon:z[e]}))),C=t(()=>{let e=h.value.filter(e=>e.type===A.ROOM).map(e=>({value:e.id,label:e.name,icon:j(e)})).sort((e,t)=>e.label.localeCompare(t.label)),t=h.value.filter(e=>e.type===A.ZONE).map(e=>({value:e.id,label:e.name,icon:j(e)})).sort((e,t)=>e.label.localeCompare(t.label)),n=[];return e.length>0&&n.push({type:A.ROOM,label:f(`scenes.form.spaceGroups.rooms`),icon:`mdi:door`,options:e}),t.length>0&&n.push({type:A.ZONE,label:f(`scenes.form.spaceGroups.zones`),icon:`mdi:map-marker-radius`,options:t}),n}),T=a({id:n,category:s.generic,name:``,description:null,icon:null,enabled:!0,primarySpaceId:null,actions:[]}),{options:E,getElement:D}=ne(),O=e=>{let t=e.propertyId;return t&&T.actions.find(e=>e.propertyId===t)?(p.warning(f(`scenes.messages.duplicateAction`)),!1):(T.actions.push(e),!0)},k=e=>{T.actions.splice(e,1)},M=(e,t)=>{e>=0&&e<T.actions.length&&(T.actions[e]=t)},N=e=>D(e)?.components?.sceneActionCard??null,P=e=>D(e)?.components?.sceneActionAddForm??null,F=e=>D(e)?.components?.sceneActionEditForm??null,I=e=>E.value.find(t=>t.value===e)?.label??e,te=g(e(T)),R=r(void 0),B=r(!1),U=async(e,t)=>{try{for(let n=0;n<t.length;n++){let r=t[n];r&&await d.add({sceneId:e,data:{...r,order:n,enabled:r.enabled??!0}})}}catch(e){throw m.error(`Error syncing scene actions:`,e),e}},G=async()=>{if(R.value.clearValidate(),!await R.value.validate())throw new X(`Form not valid`);let e=K.safeParse(T);if(!e.success)throw m.error(`Schema validation failed with:`,e.error),new X(`Failed to validate create scene model.`);b.value=L.WORKING;let t=f(`scenes.messages.createFailed`);try{let t=await u.add({id:n,draft:!1,data:e.data});e.data.actions.length>0&&await U(t.id,e.data.actions)}catch(e){throw b.value=L.ERROR,x=window.setTimeout(q,2e3),e instanceof Y&&e.code===422?p.error(e.message):p.error(t),e}return b.value=L.OK,x=window.setTimeout(q,2e3),p.success(f(`scenes.messages.created`)),`added`},q=()=>{window.clearTimeout(x),b.value=L.NONE};return o(T,()=>{B.value=!(0,W.isEqual)(e(T),te)}),{categoriesOptions:S,spacesOptionsGrouped:C,model:T,formEl:R,formChanged:B,submit:G,clear:q,formResult:b,loadingSpaces:_,fetchSpaces:v,actionPluginOptions:E,addAction:O,removeAction:k,updateAction:M,getActionCardComponent:N,getActionFormComponent:P,getActionEditFormComponent:F,getPluginLabel:I}},re=({scene:l,messages:u})=>{let d=w(),f=d.getStore(V),p=d.getStore(H),{t:m}=i(),h=y(),_=c(),{spaces:v,fetching:b,fetchSpaces:x}=ee(),S=r(L.NONE),C=t(()=>p.findForScene(l.id)),T=r(g(C.value)),E,D=t(()=>Object.values(s).map(e=>({value:e,label:m(`scenes.categories.${e}`),icon:z[e]}))),O=t(()=>{let e=v.value.filter(e=>e.type===A.ROOM).map(e=>({value:e.id,label:e.name,icon:j(e)})).sort((e,t)=>e.label.localeCompare(t.label)),t=v.value.filter(e=>e.type===A.ZONE).map(e=>({value:e.id,label:e.name,icon:j(e)})).sort((e,t)=>e.label.localeCompare(t.label)),n=[];return e.length>0&&n.push({type:A.ROOM,label:m(`scenes.form.spaceGroups.rooms`),icon:`mdi:door`,options:e}),t.length>0&&n.push({type:A.ZONE,label:m(`scenes.form.spaceGroups.zones`),icon:`mdi:map-marker-radius`,options:t}),n}),k=t(()=>C.value.map(e=>({...e}))),M=a({id:l.id,category:l.category,name:l.name,description:l.description,icon:l.icon,enabled:l.enabled,primarySpaceId:l.primarySpaceId,actions:k.value}),{options:N,getElement:P}=ne(),F=e=>{let t=e.propertyId;return t&&M.actions.find(e=>e.propertyId===t)?(h.warning(m(`scenes.messages.duplicateAction`)),!1):(M.actions.push(e),!0)},I=e=>{M.actions.splice(e,1)},te=(e,t)=>{e>=0&&e<M.actions.length&&(M.actions[e]=t)},R=e=>P(e)?.components?.sceneActionCard??null,B=e=>P(e)?.components?.sceneActionAddForm??null,U=e=>P(e)?.components?.sceneActionEditForm??null,G=e=>N.value.find(t=>t.value===e)?.label??e,K=r(void 0),J=r(!1),Z=g(e(M)),re=async(e,t)=>{try{let n=new Set(T.value.map(e=>e.id)),r=new Set(t.filter(e=>e.id).map(e=>e.id));for(let t of T.value)r.has(t.id)||await p.remove({id:t.id,sceneId:e});let i=new Map;for(let r=0;r<t.length;r++){let a=t[r];if(!a)continue;let o=a.id;if(!o||!n.has(o)){let t=await p.add({sceneId:e,data:{...a,order:r,enabled:a.enabled??!0}});i.set(r,t.id)}else{let t=T.value.find(e=>e.id===o);if(t){let n=new Set([`id`,`draft`,`createdAt`,`updatedAt`,`scene`]),i=e=>Object.fromEntries(Object.entries(e).filter(([e])=>!n.has(e)));(0,W.isEqual)(i(t),{...i(a),order:r})||await p.edit({id:o,sceneId:e,data:{...a,order:r}})}}}for(let[e,t]of i){let n=M.actions[e];n&&(n.id=t)}T.value=g(p.findForScene(e))}catch(e){throw _.error(`Error syncing scene actions:`,e),e}},ie=async()=>{let t=l.draft,n=u&&u.error?u.error:l.draft?m(`scenes.messages.createFailed`):m(`scenes.messages.editFailed`,{scene:l.name});if(K.value.clearValidate(),!await K.value.validate())throw new X(`Form not valid`);let r=q.safeParse(M);if(!r.success)throw _.error(`Schema validation failed with:`,r.error),new X(`Failed to validate edit scene model.`);S.value=L.WORKING;try{await f.edit({id:l.id,data:r.data});let e=l.id;if(t){let t=await f.save({id:l.id});M.id=t.id,M.category=t.category,M.name=t.name,M.description=t.description,M.icon=t.icon,M.enabled=t.enabled,M.primarySpaceId=t.primarySpaceId,e=t.id}await re(e,r.data.actions)}catch(e){throw S.value=L.ERROR,E=window.setTimeout(Q,2e3),e instanceof Y&&e.code===422?h.error(e.message):e instanceof X||(h.error(n),_.error(`Scene edit failed:`,e)),e}return S.value=L.OK,E=window.setTimeout(Q,2e3),t?(h.success(m(u&&u.success?u.success:`scenes.messages.created`)),`added`):(h.success(m(u&&u.success?u.success:`scenes.messages.edited`,{scene:l.name})),J.value=!1,Z=g(e(M)),`saved`)},Q=()=>{window.clearTimeout(E),S.value=L.NONE};return o(M,()=>{J.value=!(0,W.isEqual)(e(M),Z)}),n(()=>{Q()}),{categoriesOptions:D,spacesOptionsGrouped:O,model:M,formEl:K,formChanged:J,submit:ie,clear:Q,formResult:S,loadingSpaces:b,fetchSpaces:x,actionPluginOptions:N,addAction:F,removeAction:I,updateAction:te,getActionCardComponent:R,getActionFormComponent:B,getActionEditFormComponent:U,getPluginLabel:G}},ie=({id:e})=>{let n=w().getStore(V);return{icon:t(()=>{let t=n.findById(e);return t?.icon?t.icon:t?.category&&t.category in z?z[t.category]:z[s.generic]})}},Q=()=>{let e=w().getStore(V),{data:n,semaphore:r,firstLoad:i}=_(e);return{scenes:t(()=>Array.from(n.value.values()).sort((e,t)=>e.name.localeCompare(t.name))),fetching:t(()=>r.value.fetching.items),loaded:t(()=>i.value),fetchScenes:async()=>e.fetch(),getScene:async t=>e.get({id:t}),findById:t=>e.findById(t),findBySpace:t=>e.findBySpace(t),triggerScene:async(t,n)=>{await e.trigger({id:t,source:n})},removeScene:async t=>{await e.remove({id:t})}}},ae=()=>{let{t:e}=i(),t=y(),n=w().getStore(V);return{addScene:async e=>n.add(e),editScene:async e=>n.edit(e),removeScene:async e=>{await n.remove({id:e})},bulkRemove:async r=>{if(r.length!==0){try{await h.confirm(e(`scenes.texts.confirmBulkRemove`,{count:r.length}),e(`scenes.headings.bulkRemove`),{confirmButtonText:e(`scenes.buttons.yes.title`),cancelButtonText:e(`scenes.buttons.no.title`),type:`warning`})}catch{return}try{let i=await n.bulkRemove({ids:r.map(e=>e.id)});i.succeeded.length>0&&t.success(e(`scenes.messages.bulkRemoved`,{count:i.succeeded.length})),i.failed.length>0&&t.error(e(`scenes.messages.bulkRemoveFailed`,{count:i.failed.length}))}catch{t.error(e(`scenes.messages.bulkRemoveFailed`,{count:r.length}))}}},bulkEnable:async r=>{if(r.length!==0){try{await h.confirm(e(`scenes.texts.confirmBulkEnable`,{count:r.length}),e(`scenes.headings.bulkEnable`),{confirmButtonText:e(`scenes.buttons.yes.title`),cancelButtonText:e(`scenes.buttons.no.title`),type:`info`})}catch{t.info(e(`scenes.messages.bulkEnableCanceled`));return}try{let i=await n.bulkSetEnabled({ids:r.map(e=>e.id),enabled:!0});i.succeeded.length>0&&t.success(e(`scenes.messages.bulkEnabled`,{count:i.succeeded.length})),i.failed.length>0&&t.error(e(`scenes.messages.bulkEnableFailed`,{count:i.failed.length}))}catch{t.error(e(`scenes.messages.bulkEnableFailed`,{count:r.length}))}}},bulkDisable:async r=>{if(r.length!==0){try{await h.confirm(e(`scenes.texts.confirmBulkDisable`,{count:r.length}),e(`scenes.headings.bulkDisable`),{confirmButtonText:e(`scenes.buttons.yes.title`),cancelButtonText:e(`scenes.buttons.no.title`),type:`warning`})}catch{t.info(e(`scenes.messages.bulkDisableCanceled`));return}try{let i=await n.bulkSetEnabled({ids:r.map(e=>e.id),enabled:!1});i.succeeded.length>0&&t.success(e(`scenes.messages.bulkDisabled`,{count:i.succeeded.length})),i.failed.length>0&&t.error(e(`scenes.messages.bulkDisableFailed`,{count:i.failed.length}))}catch{t.error(e(`scenes.messages.bulkDisableFailed`,{count:r.length}))}}}}},$={search:void 0,categories:[],primarySpaceId:void 0,enabled:`all`},oe={by:`name`,dir:`asc`},se=()=>{let e=w().getStore(V),{firstLoad:n,semaphore:i}=_(e),{filters:a,sort:s,pagination:c,reset:l}=x({key:`${N}:scenes:list`,filters:{schema:B,defaults:$},sort:{defaults:[oe]},pagination:{defaults:{page:1,size:10}},syncQuery:!0,version:1}),u=t(()=>a.value.search!==$.search||!(0,W.isEqual)(a.value.categories,$.categories)||a.value.primarySpaceId!==$.primarySpaceId||a.value.enabled!==$.enabled),d=r(c.value.size||10),f=r(c.value.page||1),p=r(s.value.length>0?s.value[0]?.by:void 0),m=r(s.value.length>0?s.value[0]?.dir??null:null),h=(e,t)=>t?t===`whole_home`?!e:e===t:!0,g=t(()=>{let t=e.findAll().filter(e=>!e.draft&&(!a.value.search||e.id.toLowerCase().includes(a.value.search.toLowerCase())||e.name.toLowerCase().includes(a.value.search.toLowerCase())||e.description?.toLowerCase().includes(a.value.search.toLowerCase()))&&(a.value.categories.length===0||a.value.categories.includes(e.category))&&h(e.primarySpaceId,a.value.primarySpaceId)&&(a.value.enabled===`all`||a.value.enabled===`enabled`&&e.enabled||a.value.enabled===`disabled`&&!e.enabled)),n=p.value??`order`;return k(t,[e=>e[n]??``],[m.value??`asc`])}),v=t(()=>{let e=(f.value-1)*d.value,t=e+d.value;return g.value.slice(e,t)}),y=async()=>{await e.fetch()},b=t(()=>i.value.fetching.items||!n.value),S=t(()=>n.value),C=t(()=>e.findAll().filter(e=>!e.draft).length);return o(()=>c.value,e=>{f.value=e.page??1,d.value=e.size??10},{deep:!0}),o(()=>f.value,e=>{c.value.page=e}),o(()=>d.value,e=>{c.value.size=e}),o(()=>m.value,e=>{p.value===void 0||e===null?s.value=[]:s.value=[{by:p.value,dir:e}]}),o(()=>p.value,e=>{e===void 0||m.value===null?s.value=[]:s.value=[{by:e,dir:m.value}]}),o(()=>a.value,()=>{f.value=1},{deep:!0}),{scenes:g,scenesPaginated:v,totalRows:C,areLoading:b,loaded:S,fetchScenes:y,filters:a,filtersActive:u,paginateSize:d,paginatePage:f,sortBy:p,sortDir:m,resetFilter:l}};export{R as _,re as a,M as b,J as c,H as d,V as f,L as g,te as h,ie as i,X as l,F as m,ae as n,Z as o,I as p,Q as r,Y as s,se as t,U as u,P as v,z as x,N as y};
1
+ import"./rolldown-runtime-QTnfLwEv.js";import{Ei as e,Er as t,Gr as n,Si as r,T as i,bi as a,ci as o}from"./icon-with-child-CgZMNB3F.js";import{Pr as s,_ as c,bt as l,dt as u,f as d,fa as f,gt as p,ht as m,it as h,l as g,ot as _,p as v,pt as y,qn as b,s as x,st as S,vt as C,x as w,xt as T,yt as E}from"./common-Bn7l0dTZ.js";import{r as D}from"./config-CAo-YTTc.js";import{r as O}from"./usePlugins-BE15XY1o.js";import{t as k}from"./dist-DJgPCOr0.js";import{g as A,x as j}from"./keys-C5NnpJdN.js";import{t as ee}from"./useSpaces-kPcgR4I4.js";import"./composables-DUQ9KHEb.js";var M=`scenes`,N=`scenes-module`,P=`ScenesModule.`,F=function(e){return e.TRIGGER_SCENE=`ScenesModule.TriggerScene`,e}({}),I=function(e){return e.TRIGGER_SCENE=`ScenesModule.TriggerSceneHandler`,e}({}),te=function(e){return e.SCENE_CREATED=`ScenesModule.Scene.Created`,e.SCENE_UPDATED=`ScenesModule.Scene.Updated`,e.SCENE_DELETED=`ScenesModule.Scene.Deleted`,e.SCENE_TRIGGERED=`ScenesModule.Scene.Triggered`,e.SCENE_EXECUTION_STARTED=`ScenesModule.Scene.ExecutionStarted`,e.SCENE_EXECUTION_COMPLETED=`ScenesModule.Scene.ExecutionCompleted`,e.SCENE_EXECUTION_FAILED=`ScenesModule.Scene.ExecutionFailed`,e.SCENE_ACTION_CREATED=`ScenesModule.SceneAction.Created`,e.SCENE_ACTION_UPDATED=`ScenesModule.SceneAction.Updated`,e.SCENE_ACTION_DELETED=`ScenesModule.SceneAction.Deleted`,e}({}),L=function(e){return e.NONE=`none`,e.WORKING=`working`,e.ERROR=`error`,e.OK=`ok`,e}({}),R={SCENES:`scenes_module-scenes`,SCENES_ADD:`scenes_module-scenes_add`,SCENES_EDIT:`scenes_module-scenes_edit`,SCENE:`scenes_module-scene`,SCENE_EDIT:`scenes_module-scene_edit`,SCENE_ADD_ACTION:`scenes_module-scene_add_action`,SCENE_EDIT_ACTION:`scenes_module-scene_edit_action`},z={[b.generic]:`mdi:playlist-play`,[b.lighting]:`mdi:lightbulb-group`,[b.climate]:`mdi:thermostat`,[b.media]:`mdi:television-play`,[b.work]:`mdi:briefcase`,[b.relax]:`mdi:sofa`,[b.night]:`mdi:weather-night`,[b.morning]:`mdi:weather-sunset-up`,[b.party]:`mdi:party-popper`,[b.movie]:`mdi:movie-open`,[b.away]:`mdi:home-export-outline`,[b.home]:`mdi:home-import-outline`,[b.security]:`mdi:shield-home`,[b.energy]:`mdi:flash`,[b.custom]:`mdi:shape-outline`},B=p({search:E().optional(),categories:_(y(b)),primarySpaceId:l([E().uuid(),u(`whole_home`)]).optional(),enabled:h([`all`,`enabled`,`disabled`]).default(`all`)}),V=Symbol(`FB-Module-Scenes-ScenesStore`),H=Symbol(`FB-Module-Scenes-ScenesActionsStore`),U=({id:e})=>{let n=w(),r=n.getStore(V),i=n.getStore(H),{data:a,semaphore:o}=f(r);return{scene:t(()=>e===null?null:a.value.get(e)??null),isLoading:t(()=>o.value.fetching.item.includes(e)?!0:a.value.get(e)===void 0&&o.value.fetching.items),fetchScene:async()=>{a.value.get(e)?.draft||(await r.get({id:e}),await i.fetch({sceneId:e}))}}},W=d(),G=p({id:E().uuid().optional(),type:E().trim().nonempty(),configuration:C(E(),T()).default({}),order:m().int().min(0).optional(),enabled:S().default(!0)}).catchall(T());p({id:E().uuid(),type:E().trim().nonempty(),configuration:C(E(),T()).optional(),order:m().int().min(0).optional(),enabled:S().optional()}).catchall(T());var K=p({id:E().uuid().optional(),name:E().trim().nonempty(),description:E().trim().transform(e=>e===``?null:e).nullable().optional(),category:y(b).default(b.generic),icon:E().nullable().optional(),enabled:S().default(!0),order:m().optional(),primarySpaceId:E().uuid().nullable().optional().transform(e=>e===``?null:e),actions:_(G).default([])}),q=p({id:E().uuid(),name:E().trim().nonempty().optional(),description:E().trim().transform(e=>e===``?null:e).nullable().optional(),category:y(b).optional(),icon:E().nullable().optional(),enabled:S().optional(),order:m().optional(),primarySpaceId:E().uuid().nullable().optional().transform(e=>e===``?null:e),actions:_(G).default([])}),J=class extends Error{exception;constructor(e,t=null){super(e),this.name=`ScenesException`,this.exception=t}},Y=class extends J{code;constructor(e,t=null,n=null){super(e,n),this.name=`ScenesApiException`,this.code=t}},X=class extends J{constructor(e,t=null){super(e,t),this.name=`ScenesValidationException`}},ne=()=>{let e=O(),{enabled:n}=D(),r=[`sceneActionAddForm`,`sceneActionEditForm`,`sceneActionCard`],i=[`sceneActionSchema`,`sceneActionAddFormSchema`,`sceneActionEditFormSchema`,`sceneActionCreateReqSchema`,`sceneActionUpdateReqSchema`],a=t(()=>e.getPlugins().filter(e=>e.modules===void 0||e.modules.includes(`scenes-module`)?(e.elements??[]).some(e=>{if(!(e.modules===void 0||e.modules.includes(`scenes-module`)))return!1;let t=r.length===0||!!e.components&&r.some(t=>e.components&&t in e.components),n=i.length===0||!!e.schemas&&i.some(t=>e.schemas&&t in e.schemas);return t||n}):!1));return{plugins:a,options:t(()=>k(a.value.flatMap(e=>(e.elements??[]).filter(e=>{let t=e.modules===void 0||e.modules.includes(`scenes-module`),n=!!e.components&&r.some(t=>e.components&&t in e.components);return t&&n}).map(t=>({value:t.type,label:t.name?.trim()?t.name:e.name,disabled:!n(e.type)}))),[e=>e.label],[`asc`])),getByName:e=>a.value.find(t=>t.type===e),getByType:e=>a.value.find(t=>(t.elements??[]).some(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`scenes-module`)))),getElement:e=>{for(let t of a.value){let n=(t.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`scenes-module`)));if(n)return n}}}},Z=({id:n})=>{let s=w(),l=s.getStore(V),u=s.getStore(H),{t:d}=i(),f=v(),p=c(),{spaces:m,fetching:h,fetchSpaces:_}=ee(),y=r(L.NONE),x,S=t(()=>Object.values(b).map(e=>({value:e,label:d(`scenes.categories.${e}`),icon:z[e]}))),C=t(()=>{let e=m.value.filter(e=>e.type===A.ROOM).map(e=>({value:e.id,label:e.name,icon:j(e)})).sort((e,t)=>e.label.localeCompare(t.label)),t=m.value.filter(e=>e.type===A.ZONE).map(e=>({value:e.id,label:e.name,icon:j(e)})).sort((e,t)=>e.label.localeCompare(t.label)),n=[];return e.length>0&&n.push({type:A.ROOM,label:d(`scenes.form.spaceGroups.rooms`),icon:`mdi:door`,options:e}),t.length>0&&n.push({type:A.ZONE,label:d(`scenes.form.spaceGroups.zones`),icon:`mdi:map-marker-radius`,options:t}),n}),T=a({id:n,category:b.generic,name:``,description:null,icon:null,enabled:!0,primarySpaceId:null,actions:[]}),{options:E,getElement:D}=ne(),O=e=>{let t=e.propertyId;return t&&T.actions.find(e=>e.propertyId===t)?(f.warning(d(`scenes.messages.duplicateAction`)),!1):(T.actions.push(e),!0)},k=e=>{T.actions.splice(e,1)},M=(e,t)=>{e>=0&&e<T.actions.length&&(T.actions[e]=t)},N=e=>D(e)?.components?.sceneActionCard??null,P=e=>D(e)?.components?.sceneActionAddForm??null,F=e=>D(e)?.components?.sceneActionEditForm??null,I=e=>E.value.find(t=>t.value===e)?.label??e,te=g(e(T)),R=r(void 0),B=r(!1),U=async(e,t)=>{try{for(let n=0;n<t.length;n++){let r=t[n];r&&await u.add({sceneId:e,data:{...r,order:n,enabled:r.enabled??!0}})}}catch(e){throw p.error(`Error syncing scene actions:`,e),e}},G=async()=>{if(R.value.clearValidate(),!await R.value.validate())throw new X(`Form not valid`);let e=K.safeParse(T);if(!e.success)throw p.error(`Schema validation failed with:`,e.error),new X(`Failed to validate create scene model.`);y.value=L.WORKING;let t=d(`scenes.messages.createFailed`);try{let t=await l.add({id:n,draft:!1,data:e.data});e.data.actions.length>0&&await U(t.id,e.data.actions)}catch(e){throw y.value=L.ERROR,x=window.setTimeout(q,2e3),e instanceof Y&&e.code===422?f.error(e.message):f.error(t),e}return y.value=L.OK,x=window.setTimeout(q,2e3),f.success(d(`scenes.messages.created`)),`added`},q=()=>{window.clearTimeout(x),y.value=L.NONE};return o(T,()=>{B.value=!(0,W.isEqual)(e(T),te)}),{categoriesOptions:S,spacesOptionsGrouped:C,model:T,formEl:R,formChanged:B,submit:G,clear:q,formResult:y,loadingSpaces:h,fetchSpaces:_,actionPluginOptions:E,addAction:O,removeAction:k,updateAction:M,getActionCardComponent:N,getActionFormComponent:P,getActionEditFormComponent:F,getPluginLabel:I}},re=({scene:s,messages:l})=>{let u=w(),d=u.getStore(V),f=u.getStore(H),{t:p}=i(),m=v(),h=c(),{spaces:_,fetching:y,fetchSpaces:x}=ee(),S=r(L.NONE),C=t(()=>f.findForScene(s.id)),T=r(g(C.value)),E,D=t(()=>Object.values(b).map(e=>({value:e,label:p(`scenes.categories.${e}`),icon:z[e]}))),O=t(()=>{let e=_.value.filter(e=>e.type===A.ROOM).map(e=>({value:e.id,label:e.name,icon:j(e)})).sort((e,t)=>e.label.localeCompare(t.label)),t=_.value.filter(e=>e.type===A.ZONE).map(e=>({value:e.id,label:e.name,icon:j(e)})).sort((e,t)=>e.label.localeCompare(t.label)),n=[];return e.length>0&&n.push({type:A.ROOM,label:p(`scenes.form.spaceGroups.rooms`),icon:`mdi:door`,options:e}),t.length>0&&n.push({type:A.ZONE,label:p(`scenes.form.spaceGroups.zones`),icon:`mdi:map-marker-radius`,options:t}),n}),k=t(()=>C.value.map(e=>({...e}))),M=a({id:s.id,category:s.category,name:s.name,description:s.description,icon:s.icon,enabled:s.enabled,primarySpaceId:s.primarySpaceId,actions:k.value}),{options:N,getElement:P}=ne(),F=e=>{let t=e.propertyId;return t&&M.actions.find(e=>e.propertyId===t)?(m.warning(p(`scenes.messages.duplicateAction`)),!1):(M.actions.push(e),!0)},I=e=>{M.actions.splice(e,1)},te=(e,t)=>{e>=0&&e<M.actions.length&&(M.actions[e]=t)},R=e=>P(e)?.components?.sceneActionCard??null,B=e=>P(e)?.components?.sceneActionAddForm??null,U=e=>P(e)?.components?.sceneActionEditForm??null,G=e=>N.value.find(t=>t.value===e)?.label??e,K=r(void 0),J=r(!1),Z=g(e(M)),re=async(e,t)=>{try{let n=new Set(T.value.map(e=>e.id)),r=new Set(t.filter(e=>e.id).map(e=>e.id));for(let t of T.value)r.has(t.id)||await f.remove({id:t.id,sceneId:e});let i=new Map;for(let r=0;r<t.length;r++){let a=t[r];if(!a)continue;let o=a.id;if(!o||!n.has(o)){let t=await f.add({sceneId:e,data:{...a,order:r,enabled:a.enabled??!0}});i.set(r,t.id)}else{let t=T.value.find(e=>e.id===o);if(t){let n=new Set([`id`,`draft`,`createdAt`,`updatedAt`,`scene`]),i=e=>Object.fromEntries(Object.entries(e).filter(([e])=>!n.has(e)));(0,W.isEqual)(i(t),{...i(a),order:r})||await f.edit({id:o,sceneId:e,data:{...a,order:r}})}}}for(let[e,t]of i){let n=M.actions[e];n&&(n.id=t)}T.value=g(f.findForScene(e))}catch(e){throw h.error(`Error syncing scene actions:`,e),e}},ie=async()=>{let t=s.draft,n=l&&l.error?l.error:s.draft?p(`scenes.messages.createFailed`):p(`scenes.messages.editFailed`,{scene:s.name});if(K.value.clearValidate(),!await K.value.validate())throw new X(`Form not valid`);let r=q.safeParse(M);if(!r.success)throw h.error(`Schema validation failed with:`,r.error),new X(`Failed to validate edit scene model.`);S.value=L.WORKING;try{await d.edit({id:s.id,data:r.data});let e=s.id;if(t){let t=await d.save({id:s.id});M.id=t.id,M.category=t.category,M.name=t.name,M.description=t.description,M.icon=t.icon,M.enabled=t.enabled,M.primarySpaceId=t.primarySpaceId,e=t.id}await re(e,r.data.actions)}catch(e){throw S.value=L.ERROR,E=window.setTimeout(Q,2e3),e instanceof Y&&e.code===422?m.error(e.message):e instanceof X||(m.error(n),h.error(`Scene edit failed:`,e)),e}return S.value=L.OK,E=window.setTimeout(Q,2e3),t?(m.success(p(l&&l.success?l.success:`scenes.messages.created`)),`added`):(m.success(p(l&&l.success?l.success:`scenes.messages.edited`,{scene:s.name})),J.value=!1,Z=g(e(M)),`saved`)},Q=()=>{window.clearTimeout(E),S.value=L.NONE};return o(M,()=>{J.value=!(0,W.isEqual)(e(M),Z)}),n(()=>{Q()}),{categoriesOptions:D,spacesOptionsGrouped:O,model:M,formEl:K,formChanged:J,submit:ie,clear:Q,formResult:S,loadingSpaces:y,fetchSpaces:x,actionPluginOptions:N,addAction:F,removeAction:I,updateAction:te,getActionCardComponent:R,getActionFormComponent:B,getActionEditFormComponent:U,getPluginLabel:G}},ie=({id:e})=>{let n=w().getStore(V);return{icon:t(()=>{let t=n.findById(e);return t?.icon?t.icon:t?.category&&t.category in z?z[t.category]:z[b.generic]})}},Q=()=>{let e=w().getStore(V),{data:n,semaphore:r,firstLoad:i}=f(e);return{scenes:t(()=>Array.from(n.value.values()).sort((e,t)=>e.name.localeCompare(t.name))),fetching:t(()=>r.value.fetching.items),loaded:t(()=>i.value),fetchScenes:async()=>e.fetch(),getScene:async t=>e.get({id:t}),findById:t=>e.findById(t),findBySpace:t=>e.findBySpace(t),triggerScene:async(t,n)=>{await e.trigger({id:t,source:n})},removeScene:async t=>{await e.remove({id:t})}}},ae=()=>{let{t:e}=i(),t=v(),n=w().getStore(V);return{addScene:async e=>n.add(e),editScene:async e=>n.edit(e),removeScene:async e=>{await n.remove({id:e})},bulkRemove:async r=>{if(r.length!==0){try{await s.confirm(e(`scenes.texts.confirmBulkRemove`,{count:r.length}),e(`scenes.headings.bulkRemove`),{confirmButtonText:e(`scenes.buttons.yes.title`),cancelButtonText:e(`scenes.buttons.no.title`),type:`warning`})}catch{return}try{let i=await n.bulkRemove({ids:r.map(e=>e.id)});i.succeeded.length>0&&t.success(e(`scenes.messages.bulkRemoved`,{count:i.succeeded.length})),i.failed.length>0&&t.error(e(`scenes.messages.bulkRemoveFailed`,{count:i.failed.length}))}catch{t.error(e(`scenes.messages.bulkRemoveFailed`,{count:r.length}))}}},bulkEnable:async r=>{if(r.length!==0){try{await s.confirm(e(`scenes.texts.confirmBulkEnable`,{count:r.length}),e(`scenes.headings.bulkEnable`),{confirmButtonText:e(`scenes.buttons.yes.title`),cancelButtonText:e(`scenes.buttons.no.title`),type:`info`})}catch{t.info(e(`scenes.messages.bulkEnableCanceled`));return}try{let i=await n.bulkSetEnabled({ids:r.map(e=>e.id),enabled:!0});i.succeeded.length>0&&t.success(e(`scenes.messages.bulkEnabled`,{count:i.succeeded.length})),i.failed.length>0&&t.error(e(`scenes.messages.bulkEnableFailed`,{count:i.failed.length}))}catch{t.error(e(`scenes.messages.bulkEnableFailed`,{count:r.length}))}}},bulkDisable:async r=>{if(r.length!==0){try{await s.confirm(e(`scenes.texts.confirmBulkDisable`,{count:r.length}),e(`scenes.headings.bulkDisable`),{confirmButtonText:e(`scenes.buttons.yes.title`),cancelButtonText:e(`scenes.buttons.no.title`),type:`warning`})}catch{t.info(e(`scenes.messages.bulkDisableCanceled`));return}try{let i=await n.bulkSetEnabled({ids:r.map(e=>e.id),enabled:!1});i.succeeded.length>0&&t.success(e(`scenes.messages.bulkDisabled`,{count:i.succeeded.length})),i.failed.length>0&&t.error(e(`scenes.messages.bulkDisableFailed`,{count:i.failed.length}))}catch{t.error(e(`scenes.messages.bulkDisableFailed`,{count:r.length}))}}}}},$={search:void 0,categories:[],primarySpaceId:void 0,enabled:`all`},oe={by:`name`,dir:`asc`},se=()=>{let e=w().getStore(V),{firstLoad:n,semaphore:i}=f(e),{filters:a,sort:s,pagination:c,reset:l}=x({key:`${N}:scenes:list`,filters:{schema:B,defaults:$},sort:{defaults:[oe]},pagination:{defaults:{page:1,size:10}},syncQuery:!0,version:1}),u=t(()=>a.value.search!==$.search||!(0,W.isEqual)(a.value.categories,$.categories)||a.value.primarySpaceId!==$.primarySpaceId||a.value.enabled!==$.enabled),d=r(c.value.size||10),p=r(c.value.page||1),m=r(s.value.length>0?s.value[0]?.by:void 0),h=r(s.value.length>0?s.value[0]?.dir??null:null),g=(e,t)=>t?t===`whole_home`?!e:e===t:!0,_=t(()=>{let t=e.findAll().filter(e=>!e.draft&&(!a.value.search||e.id.toLowerCase().includes(a.value.search.toLowerCase())||e.name.toLowerCase().includes(a.value.search.toLowerCase())||e.description?.toLowerCase().includes(a.value.search.toLowerCase()))&&(a.value.categories.length===0||a.value.categories.includes(e.category))&&g(e.primarySpaceId,a.value.primarySpaceId)&&(a.value.enabled===`all`||a.value.enabled===`enabled`&&e.enabled||a.value.enabled===`disabled`&&!e.enabled)),n=m.value??`order`;return k(t,[e=>e[n]??``],[h.value??`asc`])}),v=t(()=>{let e=(p.value-1)*d.value,t=e+d.value;return _.value.slice(e,t)}),y=async()=>{await e.fetch()},b=t(()=>i.value.fetching.items||!n.value),S=t(()=>n.value),C=t(()=>e.findAll().filter(e=>!e.draft).length);return o(()=>c.value,e=>{p.value=e.page??1,d.value=e.size??10},{deep:!0}),o(()=>p.value,e=>{c.value.page=e}),o(()=>d.value,e=>{c.value.size=e}),o(()=>h.value,e=>{m.value===void 0||e===null?s.value=[]:s.value=[{by:m.value,dir:e}]}),o(()=>m.value,e=>{e===void 0||h.value===null?s.value=[]:s.value=[{by:e,dir:h.value}]}),o(()=>a.value,()=>{p.value=1},{deep:!0}),{scenes:_,scenesPaginated:v,totalRows:C,areLoading:b,loaded:S,fetchScenes:y,filters:a,filtersActive:u,paginateSize:d,paginatePage:p,sortBy:m,sortDir:h,resetFilter:l}};export{R as _,re as a,M as b,J as c,H as d,V as f,L as g,te as h,ie as i,X as l,F as m,ae as n,Z as o,I as p,Q as r,Y as s,se as t,U as u,P as v,z as x,N as y};