@fastybird/smart-panel-admin 1.1.0-alpha.12 → 1.1.0-alpha.14

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 (189) hide show
  1. package/dist/assets/{alert-BtC0hQaN.js → alert-yihCwD8R.js} +1 -1
  2. package/dist/assets/{card-add-form-DLYHqWXC.js → card-add-form-DDw7ivch.js} +1 -1
  3. package/dist/assets/{card-edit-form-K7wa-edI.js → card-edit-form-B3hRZuWC.js} +1 -1
  4. package/dist/assets/{checkbox-Brn4H-ar.js → checkbox-BnTF8QQI.js} +1 -1
  5. package/dist/assets/{clamp-CxRdsaiJ.js → clamp-CQCGrFFp.js} +1 -1
  6. package/dist/assets/{col-DHgVtBiy.js → col-CzZne6ci.js} +1 -1
  7. package/dist/assets/{collapse-Ce5pnck0.js → collapse-DWbIsaf5.js} +1 -1
  8. package/dist/assets/{common-DQQtAVrj.js → common-Be4p2bm6.js} +3 -3
  9. package/dist/assets/{components-T1FUV3pw.js → components-5fhvzfND.js} +1 -1
  10. package/dist/assets/{components-BJQ0MO8_.js → components-B6KVVlvx.js} +1 -1
  11. package/dist/assets/{components-9EocIkfe.js → components-BSArkYBL.js} +2 -2
  12. package/dist/assets/{components-nUcl4y3k.js → components-BlK8IDv9.js} +1 -1
  13. package/dist/assets/{components-GvI9olL9.js → components-CJLSmKhZ.js} +2 -2
  14. package/dist/assets/{components-CxFbS5gV.js → components-CMRqWpX_.js} +1 -1
  15. package/dist/assets/{components-5sqBa6m6.js → components-CN5-Z9sY.js} +1 -1
  16. package/dist/assets/{components-CfZD58jR.js → components-D2P4NPr0.js} +1 -1
  17. package/dist/assets/{components-BrH_I6yT.js → components-DTfrniwZ.js} +1 -1
  18. package/dist/assets/{components-DP-_PxCR.js → components-Jhch-C1x.js} +1 -1
  19. package/dist/assets/composables-B-YqClP2.js +1 -0
  20. package/dist/assets/{composables-KyQfXDC3.js → composables-BgNPIoD2.js} +1 -1
  21. package/dist/assets/{composables-_zPISBdj.js → composables-BzEjPyX0.js} +1 -1
  22. package/dist/assets/{composables-B0IV09af.js → composables-Chz2jA57.js} +1 -1
  23. package/dist/assets/{composables-CEtj6Qds.js → composables-CsYg2_R5.js} +1 -1
  24. package/dist/assets/composables-D5PbebWI.js +1 -0
  25. package/dist/assets/{composables-VBwQ9ceK.js → composables-D84XXmKl.js} +1 -1
  26. package/dist/assets/composables-DXuIMKku2.js +1 -0
  27. package/dist/assets/{composables-nFowfQst.js → composables-D_6On_O2.js} +1 -1
  28. package/dist/assets/{composables-BNc5mHwM.js → composables-DyBL_gKO.js} +1 -1
  29. package/dist/assets/{composables-B8MvHG4n.js → composables-F1c0ZXok.js} +1 -1
  30. package/dist/assets/{config-DycVi21V.js → config-BAg35nXl.js} +2 -2
  31. package/dist/assets/{dashboard-DZ5wM97E.js → dashboard-BP8rehB1.js} +2 -2
  32. package/dist/assets/{dashboard.types-CbXYm-xo.js → dashboard.types-CoQH7Qfe.js} +1 -1
  33. package/dist/assets/{data-source-edit-form-DAofDgU-.js → data-source-edit-form-CEOgesmu.js} +1 -1
  34. package/dist/assets/{descriptions-BgeuuBZp.js → descriptions-OOM-Fb43.js} +1 -1
  35. package/dist/assets/devices-BigHPDnE.js +2 -0
  36. package/dist/assets/{devices-virtual.constants-DfAF3P2t.js → devices-virtual.constants-CJ8nxI4P.js} +1 -1
  37. package/dist/assets/{dialog-C_vHe4lp.js → dialog-2YGolnKK.js} +1 -1
  38. package/dist/assets/{drawer-DBEDVZvF.js → drawer-ZByrLyWq.js} +1 -1
  39. package/dist/assets/{form-DhJ_5Z1F.js → form-0kI-cr8s.js} +1 -1
  40. package/dist/assets/{index-EejVFahm.js → index-D2CTpnSM.js} +5 -5
  41. package/dist/assets/{input-number-C4oLa6SE.js → input-number-P-FTRt-j.js} +1 -1
  42. package/dist/assets/{integration-config-dialog-sOxOBnDt.js → integration-config-dialog-Ct2v_YF5.js} +1 -1
  43. package/dist/assets/{keys-xm8ycHBh.js → keys-DakHO8Vr.js} +1 -1
  44. package/dist/assets/{layout-config-Dgm7OQfl.js → layout-config-v_oQGjV4.js} +1 -1
  45. package/dist/assets/{layout-default-Dtrjfr-l.js → layout-default-XbBPq_81.js} +1 -1
  46. package/dist/assets/{layout-lock-CvUuWiWS.js → layout-lock-2YeXM9of.js} +1 -1
  47. package/dist/assets/{layout-profile-Cb9uN0Wo.js → layout-profile-DGs-EjZZ.js} +1 -1
  48. package/dist/assets/layout-profile-DYJoyuR-.js +1 -0
  49. package/dist/assets/layout-sign-DicgjAC8.js +1 -0
  50. package/dist/assets/{layout-sign-B6t4a36E.js → layout-sign-U-HX1M_n.js} +1 -1
  51. package/dist/assets/{list-data-sources-adjust-BHndxW4t.js → list-data-sources-adjust-DUMnlftH.js} +1 -1
  52. package/dist/assets/{list-locations-C9v-b-VI.js → list-locations-B_KTPYdW.js} +1 -1
  53. package/dist/assets/{list-users-CkaNzwje.js → list-users-BnLSxKig.js} +1 -1
  54. package/dist/assets/{logs-entries.transformers-Dn1eByAW.js → logs-entries.transformers-DLC8m8_x.js} +1 -1
  55. package/dist/assets/{mcp.exceptions-CJdD-XdE.js → mcp.exceptions-DY-0lLaB.js} +1 -1
  56. package/dist/assets/{notifications.exceptions-DmK8KTzC.js → notifications.exceptions-COOX9nH5.js} +1 -1
  57. package/dist/assets/{omit-BY6NkPsU.js → omit-CCKuCzp5.js} +1 -1
  58. package/dist/assets/{page-configure-CbJqLuSN.js → page-configure-B-Ar9MA3.js} +1 -1
  59. package/dist/assets/{page-configure-CFU_N_-1.js → page-configure-BMkkMAO5.js} +1 -1
  60. package/dist/assets/{pagination-tCeDOW1E.js → pagination-tCwT80iV.js} +1 -1
  61. package/dist/assets/{radio-CuFOcY0H.js → radio-C3SNUtyn.js} +1 -1
  62. package/dist/assets/{scene-add-form-2uFMoqQx.js → scene-add-form-BoW3-DGd.js} +1 -1
  63. package/dist/assets/{scene-edit-form-qz9_SO8P.js → scene-edit-form-BuIwrWnr.js} +1 -1
  64. package/dist/assets/{schemas.utils-CTG3Vn5a.js → schemas.utils-gKqZ9UX4.js} +1 -1
  65. package/dist/assets/{select-De297TQO.js → select-DhXPyxTf.js} +1 -1
  66. package/dist/assets/{select-data-source-plugin-Bf4zZY8r.js → select-data-source-plugin-JdxhyaNg.js} +1 -1
  67. package/dist/assets/{slider-DhjaIA9b.js → slider-Cy4bDJ2V.js} +1 -1
  68. package/dist/assets/{spaces-iXv1ih3G.js → spaces-DgO_s8bw.js} +2 -2
  69. package/dist/assets/{spaces-home-control.constants-L3uLJ74M.js → spaces-home-control.constants-CGCfIxbC.js} +1 -1
  70. package/dist/assets/{steps-DCMUJ24w.js → steps-n7W-efe3.js} +1 -1
  71. package/dist/assets/{system-DR09vvlj.js → system-CD2XKcCX.js} +2 -2
  72. package/dist/assets/{table-Bej2n2pI.js → table-I-saZisX.js} +1 -1
  73. package/dist/assets/{tabs-ClzYwBwe.js → tabs-CoLOTPkl.js} +1 -1
  74. package/dist/assets/{tile-detail-BqMhDMr9.js → tile-detail-BdC6bNQ6.js} +1 -1
  75. package/dist/assets/{tile-edit-form-B-BmZtAm.js → tile-edit-form-DkGWaIe5.js} +1 -1
  76. package/dist/assets/{types-BFSU5l_h.js → types-C4XLI6VR.js} +1 -1
  77. package/dist/assets/types-C55HbQe7.js +1 -0
  78. package/dist/assets/{use-dialog-BE4aKc4E.js → use-dialog-CQ0XM_6p.js} +1 -1
  79. package/dist/assets/{use-ordered-children-B-w46hVS.js → use-ordered-children-Bf4bJLEh.js} +1 -1
  80. package/dist/assets/{useBuddyChat-DCLIzynQ.js → useBuddyChat-Be8nQBdr.js} +1 -1
  81. package/dist/assets/{useConfigModule-DPKpRzOA.js → useConfigModule-5WRiFhe8.js} +1 -1
  82. package/dist/assets/{useDataSources-Bjd0snYh.js → useDataSources-Ct4AwM4K.js} +1 -1
  83. package/dist/assets/{useDevicesPlugins-B1S7eZ_6.js → useDevicesPlugins-1qFZMfyo.js} +1 -1
  84. package/dist/assets/useEventBus-BQdZXy2X.js +1 -0
  85. package/dist/assets/{useExtensions-Cw4mW_zr.js → useExtensions-CU8BwsSY.js} +1 -1
  86. package/dist/assets/{useGeolocation-y3zHAEMb.js → useGeolocation-Cq53_JVi.js} +1 -1
  87. package/dist/assets/{useLocation-BfcRW2IZ.js → useLocation-C1jGf7ps.js} +1 -1
  88. package/dist/assets/{useMcpClients-CEtRM4SW.js → useMcpClients-Ba0gBdaa.js} +1 -1
  89. package/dist/assets/{useModule-DDp0sfaf.js → useModule-BqRjllB1.js} +1 -1
  90. package/dist/assets/{useModules-CLi9kXcG.js → useModules-CV4rTp9H.js} +1 -1
  91. package/dist/assets/{useNumberFormat-Dy6fPYP1.js → useNumberFormat-Cjyy_ksr.js} +1 -1
  92. package/dist/assets/{usePage-Bclmn7x9.js → usePage-DccGV-jP.js} +1 -1
  93. package/dist/assets/{usePersonalTokens-VoyREM85.js → usePersonalTokens-D_AQL9lY.js} +1 -1
  94. package/dist/assets/{usePlugin-CD6VAtXb.js → usePlugin-Cqtg7k__.js} +1 -1
  95. package/dist/assets/{usePlugins-BLBNoCg5.js → usePlugins-D2-Pd2HX.js} +1 -1
  96. package/dist/assets/{useSpaces-DN7B3r14.js → useSpaces-BXdflM37.js} +1 -1
  97. package/dist/assets/{useUuid-CXUYxryL.js → useUuid-B9e3LtCp.js} +1 -1
  98. package/dist/assets/{view-buddy-chat-BvGkIZsD.js → view-buddy-chat-dyKTPDo2.js} +1 -1
  99. package/dist/assets/{view-card-add-CK-twRKG.js → view-card-add-CnH-inyA.js} +1 -1
  100. package/dist/assets/{view-card-edit-nEKC7fu3.js → view-card-edit-BENeBcHV.js} +1 -1
  101. package/dist/assets/{view-channel-CnEtmLdu.js → view-channel-CU3JfWIe.js} +1 -1
  102. package/dist/assets/{view-channel-add-o0amrWt7.js → view-channel-add-DAN2U6GO.js} +1 -1
  103. package/dist/assets/{view-channel-edit-De96IvCi.js → view-channel-edit-UmSF5GLP.js} +1 -1
  104. package/dist/assets/{view-channel-property-add-G-orUG0X.js → view-channel-property-add-Dv88UweR.js} +1 -1
  105. package/dist/assets/{view-channel-property-edit-Cqn0dPp0.js → view-channel-property-edit-B4LBh545.js} +1 -1
  106. package/dist/assets/{view-channels-DsGoVW-R.js → view-channels-4lEPD2E2.js} +1 -1
  107. package/dist/assets/{view-config-module-edit-DDBKKshm.js → view-config-module-edit-lppvVF5G.js} +1 -1
  108. package/dist/assets/{view-config-modules-DviA9Bju.js → view-config-modules-CfZx9xuf.js} +1 -1
  109. package/dist/assets/{view-config-plugin-edit-dCfE19by.js → view-config-plugin-edit-CZmu4clV.js} +1 -1
  110. package/dist/assets/{view-config-plugins-BS6qMBoU.js → view-config-plugins-BXgIWoB4.js} +1 -1
  111. package/dist/assets/{view-data-source-add-lduBhpZy.js → view-data-source-add-91aLO5pf.js} +1 -1
  112. package/dist/assets/{view-data-source-add-CPuZBOAh.js → view-data-source-add-hwDgK-c2.js} +1 -1
  113. package/dist/assets/{view-data-source-edit-BGQPem_n.js → view-data-source-edit-CJeuDbrE.js} +1 -1
  114. package/dist/assets/{view-data-source-edit-Ch-iiFbk.js → view-data-source-edit-Dkrok8aR.js} +1 -1
  115. package/dist/assets/{view-device-add-DTfjZFl1.js → view-device-add-n-q0Mz8S.js} +1 -1
  116. package/dist/assets/{view-device-control-Doy8E_EX.js → view-device-control-Cp-g_YME.js} +1 -1
  117. package/dist/assets/{view-device-edit-xuYElG1E.js → view-device-edit-DocPrD60.js} +1 -1
  118. package/dist/assets/{view-device-CweoYg6X.js → view-device-uYeBFA9R.js} +1 -1
  119. package/dist/assets/{view-devices-y_ny72tf.js → view-devices-BD7h3l0B.js} +1 -1
  120. package/dist/assets/{view-devices-wizard-CnH-bZvv.js → view-devices-wizard-C2voYEbU.js} +1 -1
  121. package/dist/assets/{view-display-BGCdfR-g.js → view-display-BD5o2mG8.js} +1 -1
  122. package/dist/assets/{view-display-edit-C7sBjAo3.js → view-display-edit-CFDGYH0S.js} +1 -1
  123. package/dist/assets/{view-display-tokens-CgpS3tT8.js → view-display-tokens-w7HCVkyw.js} +1 -1
  124. package/dist/assets/{view-displays-C7QQUPQF.js → view-displays-t0qXiBm5.js} +1 -1
  125. package/dist/assets/{view-extension-detail-Dr1t8hxU.js → view-extension-detail-DdZcjMKN.js} +1 -1
  126. package/dist/assets/{view-extensions-Cf4U-tSb.js → view-extensions-Br-djyy2.js} +1 -1
  127. package/dist/assets/{view-location-CHX9pPb_.js → view-location-aWULpud9.js} +1 -1
  128. package/dist/assets/{view-location-add-Df25PMeB.js → view-location-add-Cpl8k92w.js} +1 -1
  129. package/dist/assets/{view-location-edit-CS_Vj8cf.js → view-location-edit-CTWfLskv.js} +1 -1
  130. package/dist/assets/{view-locations-BvHYF0U7.js → view-locations-BCEjWSVc.js} +1 -1
  131. package/dist/assets/{view-lock-screen-DAtKjcUh.js → view-lock-screen-7nnGeAm1.js} +1 -1
  132. package/dist/assets/{view-mcp-clients-B0grcN-p.js → view-mcp-clients-Crn9F-mI.js} +1 -1
  133. package/dist/assets/{view-mcp-oauth-consent-zZ5TLh4J.js → view-mcp-oauth-consent-DQ4KkWj_.js} +1 -1
  134. package/dist/assets/{view-mcp-oauth-management-Cip6f2L1.js → view-mcp-oauth-management-Kkg2HXaa.js} +1 -1
  135. package/dist/assets/{view-notifications-BaEnR3Pr.js → view-notifications-CT3BL_tR.js} +1 -1
  136. package/dist/assets/{view-onboarding-Cynd2vgL.js → view-onboarding-Bqusuomg.js} +1 -1
  137. package/dist/assets/{view-page-CycBTuS4.js → view-page-CY4erm62.js} +1 -1
  138. package/dist/assets/{view-page-add-lJuSt540.js → view-page-add-Ck9a0Url.js} +1 -1
  139. package/dist/assets/{view-page-configure-B1RKo8cr.js → view-page-configure-B1TC0nD7.js} +1 -1
  140. package/dist/assets/{view-page-configure-BlXGeMEs.js → view-page-configure-BhzroC3P.js} +1 -1
  141. package/dist/assets/{view-page-data-source-add-VXSujnwF.js → view-page-data-source-add-DOf2qn92.js} +1 -1
  142. package/dist/assets/{view-page-data-source-edit-bdky1W6x.js → view-page-data-source-edit-CeB830cc.js} +1 -1
  143. package/dist/assets/{view-page-edit-D7D6s6-W.js → view-page-edit-DJhv78rC.js} +1 -1
  144. package/dist/assets/{view-page-plugin-CiWmn73E.js → view-page-plugin-BxylNI0o.js} +1 -1
  145. package/dist/assets/{view-pages-D9KmIM6L.js → view-pages--u0uAq2L.js} +1 -1
  146. package/dist/assets/{view-profile-general-Yll0-Ev-.js → view-profile-general-YfUuJvfa.js} +1 -1
  147. package/dist/assets/{view-profile-security-C1gC-D49.js → view-profile-security-HW58o6b4.js} +1 -1
  148. package/dist/assets/{view-remote-access-9V2uHvbB.js → view-remote-access-CNmz7M-Q.js} +1 -1
  149. package/dist/assets/{view-scene-add-CHfWM8yG.js → view-scene-add-Chu7WP57.js} +1 -1
  150. package/dist/assets/{view-scene-edit-CQ688euK.js → view-scene-edit-CXhPK6-c.js} +1 -1
  151. package/dist/assets/{view-scenes-Cft3apRA.js → view-scenes-C40MSkwq.js} +1 -1
  152. package/dist/assets/{view-sign-in-Cj7uaECu.js → view-sign-in-pL5vMo3_.js} +1 -1
  153. package/dist/assets/{view-sign-up-BdrGEXiy.js → view-sign-up-BilpSpzy.js} +1 -1
  154. package/dist/assets/{view-simulator-device-wizard-Bl__0soJ.js → view-simulator-device-wizard-DF5RWntc.js} +1 -1
  155. package/dist/assets/{view-space-add-BjTWdeU2.js → view-space-add-DH2JpSpG.js} +1 -1
  156. package/dist/assets/{view-space-configure-DmbT-eVp.js → view-space-configure-BKKdjkjJ.js} +1 -1
  157. package/dist/assets/{view-space-edit-Dw2aUu7C.js → view-space-edit-De3tqNaO.js} +1 -1
  158. package/dist/assets/{view-space-plugin-DmdOjlmn.js → view-space-plugin-BQ0KTse6.js} +1 -1
  159. package/dist/assets/{view-spaces-BPaKwImw.js → view-spaces-DPP7hz9z.js} +1 -1
  160. package/dist/assets/{view-spaces-wizard-BSCSfFSU.js → view-spaces-wizard-BGwcAHwA.js} +1 -1
  161. package/dist/assets/{view-stats-CBDDESt7.js → view-stats-CoTeuVhI.js} +1 -1
  162. package/dist/assets/{view-system-backups-BjlfWgod.js → view-system-backups-DsIvX2hj.js} +1 -1
  163. package/dist/assets/{view-system-info-C0SdEMnS.js → view-system-info-DrPg3X6D.js} +1 -1
  164. package/dist/assets/{view-system-log-detail-Dbd06a1Q.js → view-system-log-detail-lRDFdO1t.js} +1 -1
  165. package/dist/assets/{view-system-logs-C7IU8Fy7.js → view-system-logs-6QitutQ2.js} +1 -1
  166. package/dist/assets/{view-tile-coG5nOBw.js → view-tile-B8qmw39T.js} +1 -1
  167. package/dist/assets/{view-tile-add-cfR6HnU8.js → view-tile-add-BVuIqOqK.js} +1 -1
  168. package/dist/assets/{view-tile-add-D5o-RwWw.js → view-tile-add-DZTJwie6.js} +1 -1
  169. package/dist/assets/{view-tile-data-source-add-CRjMqv-p.js → view-tile-data-source-add-BxXFKnyJ.js} +1 -1
  170. package/dist/assets/{view-tile-data-source-edit-B5AuS22B.js → view-tile-data-source-edit-Cd0TdY0M.js} +1 -1
  171. package/dist/assets/{view-tile-edit-s58vDnMN.js → view-tile-edit-BmLhOuRu.js} +1 -1
  172. package/dist/assets/{view-tile-edit-CHNpneIB.js → view-tile-edit-C4XMP2P4.js} +1 -1
  173. package/dist/assets/{view-tile-edit-CapsYutD.js → view-tile-edit-VGHWTKqe.js} +1 -1
  174. package/dist/assets/{view-user-add-DL1dQpWZ.js → view-user-add-Dp4jgsq7.js} +1 -1
  175. package/dist/assets/{view-user-edit-CpNCmMtT.js → view-user-edit-BKKDP-9i.js} +1 -1
  176. package/dist/assets/{view-users--AuUJkXN.js → view-users-DSOg0hNu.js} +1 -1
  177. package/dist/assets/{view-virtual-device-wizard-7ip3-TDQ.js → view-virtual-device-wizard-CuPl8CpA.js} +1 -1
  178. package/dist/assets/{weather-DaXEe8BE.js → weather-Baz5jDm6.js} +2 -2
  179. package/dist/assets/{weather-forecast.transformers-CxkPNhxQ.js → weather-forecast.transformers-B4kjmFkm.js} +1 -1
  180. package/dist/index.html +91 -91
  181. package/package.json +1 -1
  182. package/dist/assets/composables-CWHVZmlg.js +0 -1
  183. package/dist/assets/composables-CYfrqIJ62.js +0 -1
  184. package/dist/assets/composables-DRjKkih6.js +0 -1
  185. package/dist/assets/devices-BZDzABoj.js +0 -2
  186. package/dist/assets/layout-profile-CSe087M3.js +0 -1
  187. package/dist/assets/layout-sign-C0F3N5av.js +0 -1
  188. package/dist/assets/types-AzJb-TPe.js +0 -1
  189. package/dist/assets/useEventBus-1upZv6NA.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,n as s}from"./icon-with-child-CgZMNB3F.js";import{Ht as c,_ as l,f as u,gt as d,it as f,jr as p,l as m,la as h,m as g,ot as _,p as v,s as y,wr as b,x,yt as S}from"./common-DQQtAVrj.js";import{t as C}from"./dist-DJgPCOr0.js";import{t as w}from"./keys-DExX7OfU.js";var T=e=>{let n=x().getStore(w),{tokenRefreshTriggers:i}=h(n),a=l(),s=r([]),c=t(()=>e.value===null?null:n?.findById(e.value)??null),u=t(()=>e.value===null?!1:n?.getting(e.value)??!1),d=async()=>{if(e.value!==null)try{await n?.get({id:e.value})}catch(e){a.error(`Failed to fetch display:`,e)}},f=async()=>{if(e.value!==null)try{let t=await n?.getTokens({id:e.value});s.value=t??[]}catch(e){a.error(`Failed to fetch display tokens:`,e),s.value=[]}};return b(t(()=>{if(e.value===null||!n)return 0;let t=i.value;return!t||typeof t!=`object`?0:t[e.value]??0}),async()=>{if(e.value!==null)try{await f()}catch(e){a.error(`Failed to refresh tokens:`,e)}},{debounce:300}),o(()=>e.value,async e=>{if(e!==null&&n?.findById(e)===null)try{await d()}catch(e){a.error(`Failed to fetch display on id change:`,e)}},{immediate:!0}),{display:c,tokens:s,isLoading:u,fetchDisplay:d,fetchTokens:f,revokeToken:async()=>{if(e.value===null)return!1;let t=await n?.revokeToken({id:e.value});return t&&(s.value=[]),t??!1}}},E=u(),D=`displays`,O=`displays-module`,k=`DisplaysModule.`,A=c,j=function(e){return e.DISPLAY_CREATED=`DisplaysModule.Display.Created`,e.DISPLAY_UPDATED=`DisplaysModule.Display.Updated`,e.DISPLAY_DELETED=`DisplaysModule.Display.Deleted`,e.DISPLAY_TOKEN_REVOKED=`DisplaysModule.Display.TokenRevoked`,e}({}),M=function(e){return e.NONE=`none`,e.WORKING=`working`,e.ERROR=`error`,e.OK=`ok`,e}({}),N={DISPLAYS:`displays_module-displays`,DISPLAYS_EDIT:`displays_module-displays_edit`,DISPLAY:`displays_module-display`,DISPLAY_EDIT:`displays_module-display_edit`,DISPLAY_TOKENS:`displays_module-display_tokens`},P=[{value:15,labelKey:`15s`},{value:30,labelKey:`30s`},{value:60,labelKey:`1min`},{value:120,labelKey:`2min`},{value:300,labelKey:`5min`},{value:600,labelKey:`10min`},{value:1800,labelKey:`30min`},{value:0,labelKey:`never`}],F=class extends Error{exception;constructor(e,t=null){super(e),this.name=`DisplaysException`,this.exception=t}},I=class extends F{constructor(e,t=null){super(e,t),this.name=`DisplaysValidationException`}},L=class extends F{code;constructor(e,t=null,n=null){super(e,n),this.name=`DisplaysApiException`,this.code=t}},R=({display:t,messages:s})=>{let c=x().getStore(w),{t:l}=i(),u=v(),d=r(M.NONE),f,p=a({id:t.id,name:t.name,spaceId:t.spaceId,unitSize:t.unitSize,rows:t.rows,cols:t.cols,brightness:t.brightness,screenLockDuration:t.screenLockDuration,darkMode:t.darkMode,screenSaver:t.screenSaver,screenPowerOff:t.screenPowerOff,speaker:t.speaker,speakerVolume:t.speakerVolume,microphone:t.microphone,microphoneVolume:t.microphoneVolume,homeMode:t.homeMode,homePageId:t.homePageId,numberFormat:t.numberFormat??``,temperatureUnit:t.temperatureUnit??``,windSpeedUnit:t.windSpeedUnit??``,pressureUnit:t.pressureUnit??``,precipitationUnit:t.precipitationUnit??``,distanceUnit:t.distanceUnit??``,weatherLocationId:t.weatherLocationId??null}),h=m(e(p)),g=r(void 0),_=r(!1),y=async()=>{let n=s&&s.error?s.error:l(`displaysModule.messages.notEdited`,{display:t.name||t.macAddress});if(!g.value)throw new I(`Form element is not available`);if(g.value.clearValidate(),!await g.value.validate())throw new I(`Form not valid`);d.value=M.WORKING;try{let e={name:p.name||null,spaceId:p.spaceId,unitSize:p.unitSize,rows:p.rows,cols:p.cols,brightness:p.brightness,screenLockDuration:p.screenLockDuration,darkMode:p.darkMode,screenSaver:p.screenSaver,screenPowerOff:p.screenPowerOff,homeMode:p.homeMode,homePageId:p.homeMode===`explicit`?p.homePageId:null,numberFormat:p.numberFormat||null,temperatureUnit:p.temperatureUnit||null,windSpeedUnit:p.windSpeedUnit||null,pressureUnit:p.pressureUnit||null,precipitationUnit:p.precipitationUnit||null,distanceUnit:p.distanceUnit||null,weatherLocationId:p.weatherLocationId||null};t.audioOutputSupported&&(e.speaker=p.speaker,e.speakerVolume=p.speakerVolume),t.audioInputSupported&&(e.microphone=p.microphone,e.microphoneVolume=p.microphoneVolume),await c.edit({id:t.id,data:e})}catch(e){throw d.value=M.ERROR,f=window.setTimeout(b,2e3),e instanceof L&&e.code===422?u.error(e.message):u.error(n),e}return d.value=M.OK,f=window.setTimeout(b,2e3),u.success(l(s&&s.success?s.success:`displaysModule.messages.edited`,{display:t.name||t.macAddress})),_.value=!1,h=m(e(p)),`saved`},b=()=>{f!==void 0&&(window.clearTimeout(f),f=void 0),d.value=M.NONE};return o(p,()=>{_.value=!(0,E.isEqual)(e(p),h)}),n(()=>{b()}),{model:p,formEl:g,formChanged:_,submit:y,clear:b,formResult:d}},z=()=>{let e=x().getStore(w),{firstLoad:n}=h(e),r=t(()=>e?.findAll()??[]);return{displays:r,isLoading:t(()=>e?.fetching()??!1),isLoaded:t(()=>n.value),fetchDisplays:async()=>{await e?.fetch()},options:t(()=>r.value.map(e=>({value:e.id,label:e.name||e.macAddress})))}},B=d({search:S().optional(),darkMode:f([`all`,`enabled`,`disabled`]).default(`all`),screenSaver:f([`all`,`enabled`,`disabled`]).default(`all`),state:f([`all`,`offline`,`online`]).default(`all`),states:_(f([`connected`,`disconnected`,`lost`,`unknown`]))}),V={search:void 0,darkMode:`all`,screenSaver:`all`,state:`all`,states:[]},H={by:`name`,dir:`asc`},U=()=>{let e=x().getStore(w),{firstLoad:n,semaphore:i}=h(e),{filters:a,sort:s,pagination:c,reset:l}=y({key:`${O}:displays:list`,filters:{schema:B,defaults:V},sort:{defaults:[H]},pagination:{defaults:{page:1,size:10}},syncQuery:!0,version:1}),u=t(()=>a.value.search!==V.search||!(0,E.isEqual)(a.value.darkMode,V.darkMode)||!(0,E.isEqual)(a.value.screenSaver,V.screenSaver)||!(0,E.isEqual)(a.value.state,V.state)||!(0,E.isEqual)(a.value.states,V.states)),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),g=t(()=>C(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.macAddress.toLowerCase().includes(a.value.search.toLowerCase())||e.version.toLowerCase().includes(a.value.search.toLowerCase()))&&(a.value.darkMode===`all`||a.value.darkMode===`enabled`&&e.darkMode||a.value.darkMode===`disabled`&&!e.darkMode)&&(a.value.screenSaver===`all`||a.value.screenSaver===`enabled`&&e.screenSaver||a.value.screenSaver===`disabled`&&!e.screenSaver)&&(!a.value.states||a.value.states.length===0||a.value.states.includes(e.status??`unknown`))&&(a.value.state===`all`||a.value.state===`online`&&e.status===`connected`||a.value.state===`offline`&&[`disconnected`,`lost`,`unknown`].includes(e.status??`unknown`))),[e=>{switch(p.value){case`name`:return e.name||e.macAddress;case`version`:return e.version;case`screenWidth`:return e.screenWidth??0;case`status`:return e.status??`unknown`;default:return e.name||e.macAddress}}],[m.value===`asc`?`asc`:`desc`])),_=t(()=>{let e=(f.value-1)*d.value,t=e+d.value;return g.value.slice(e,t)}),v=async()=>{await e.fetch()},b=t(()=>i.value.fetching.items||!n.value),S=t(()=>n.value),T=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?s.value=[]:s.value=[{by:e,dir:m.value}]}),{displays:g,displaysPaginated:_,totalRows:T,areLoading:b,loaded:S,fetchDisplays:v,filters:a,filtersActive:u,paginateSize:d,paginatePage:f,sortBy:p,sortDir:m,resetFilter:l}},W=()=>{let e=x().getStore(w),{t}=i(),n=v();return{remove:async r=>{let i=e?.findById(r);if(!i){n.error(t(`displaysModule.messages.notFound`));return}try{await p.confirm(t(`displaysModule.messages.confirmRemove`,{name:i.name||i.macAddress}),t(`displaysModule.headings.removeDisplay`),{confirmButtonText:t(`displaysModule.buttons.yes.title`),cancelButtonText:t(`displaysModule.buttons.no.title`),type:`warning`}),await e.remove({id:r}),n.success(t(`displaysModule.messages.removed`))}catch{}},bulkRemove:async r=>{if(r.length!==0){try{await p.confirm(t(`displaysModule.messages.confirmBulkRemove`,{count:r.length}),t(`displaysModule.headings.removeBulkDisplays`),{confirmButtonText:t(`displaysModule.buttons.yes.title`),cancelButtonText:t(`displaysModule.buttons.no.title`),type:`warning`})}catch{return}try{let i=await e.bulkRemove({ids:r.map(e=>e.id)});i.succeeded.length>0&&n.success(t(`displaysModule.messages.bulkRemoved`,{count:i.succeeded.length})),i.failed.length>0&&n.error(t(`displaysModule.messages.bulkRemoveFailed`,{count:i.failed.length}))}catch{n.error(t(`displaysModule.messages.bulkRemoveFailed`,{count:r.length}))}}}}},G=()=>{let e=g(),n=l(),i=r(null),a=r(!1),o=r(!1),c=t(()=>i.value?.available??!1),u=t(()=>i.value?.active??!1),d=t(()=>i.value?.deploymentMode??`combined`),f=t(()=>i.value?.remainingTime??null),p=t(()=>{let e=f.value;return e===null?0:Math.ceil(e/1e3)}),m=t(()=>{let e=p.value;return e<=0?`0:00`:`${Math.floor(e/60)}:${(e%60).toString().padStart(2,`0`)}`}),h=async()=>{try{a.value=!0;let{data:t}=await e.client.GET(`/${s}/${D}/displays/permit-join/status`);if(t?.data){let e=t.data;i.value={active:e.active??!1,expiresAt:e.expires_at?new Date(e.expires_at):null,remainingTime:e.remaining_time??null,deploymentMode:e.deployment_mode??`combined`,available:e.available??!1}}}catch(e){throw n.error(`Failed to fetch permit join status`,e),new F(`Failed to fetch permit join status`)}finally{a.value=!1}};return{status:i,loading:a,activating:o,isAvailable:c,isActive:u,deploymentMode:d,remainingTime:f,remainingTimeSeconds:p,remainingTimeFormatted:m,fetchStatus:h,activate:async()=>{try{o.value=!0,await e.client.POST(`/${s}/${D}/displays/permit-join`),await h()}catch(e){throw n.error(`Failed to activate permit join`,e),new F(`Failed to activate permit join`)}finally{o.value=!1}},deactivate:async()=>{try{o.value=!0,await e.client.DELETE(`/${s}/${D}/displays/permit-join`,{}),await h()}catch(e){throw n.error(`Failed to deactivate permit join`,e),new F(`Failed to deactivate permit join`)}finally{o.value=!1}}}};export{T as _,R as a,I as c,D as d,A as f,P as g,N as h,z as i,k as l,M as m,W as n,L as o,j as p,U as r,F as s,G as t,O as u};
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,n as s}from"./icon-with-child-CgZMNB3F.js";import{Ht as c,_ as l,f as u,gt as d,it as f,jr as p,l as m,la as h,m as g,ot as _,p as v,s as y,wr as b,x,yt as S}from"./common-Be4p2bm6.js";import{t as C}from"./dist-DJgPCOr0.js";import{t as w}from"./keys-DExX7OfU.js";var T=e=>{let n=x().getStore(w),{tokenRefreshTriggers:i}=h(n),a=l(),s=r([]),c=t(()=>e.value===null?null:n?.findById(e.value)??null),u=t(()=>e.value===null?!1:n?.getting(e.value)??!1),d=async()=>{if(e.value!==null)try{await n?.get({id:e.value})}catch(e){a.error(`Failed to fetch display:`,e)}},f=async()=>{if(e.value!==null)try{let t=await n?.getTokens({id:e.value});s.value=t??[]}catch(e){a.error(`Failed to fetch display tokens:`,e),s.value=[]}};return b(t(()=>{if(e.value===null||!n)return 0;let t=i.value;return!t||typeof t!=`object`?0:t[e.value]??0}),async()=>{if(e.value!==null)try{await f()}catch(e){a.error(`Failed to refresh tokens:`,e)}},{debounce:300}),o(()=>e.value,async e=>{if(e!==null&&n?.findById(e)===null)try{await d()}catch(e){a.error(`Failed to fetch display on id change:`,e)}},{immediate:!0}),{display:c,tokens:s,isLoading:u,fetchDisplay:d,fetchTokens:f,revokeToken:async()=>{if(e.value===null)return!1;let t=await n?.revokeToken({id:e.value});return t&&(s.value=[]),t??!1}}},E=u(),D=`displays`,O=`displays-module`,k=`DisplaysModule.`,A=c,j=function(e){return e.DISPLAY_CREATED=`DisplaysModule.Display.Created`,e.DISPLAY_UPDATED=`DisplaysModule.Display.Updated`,e.DISPLAY_DELETED=`DisplaysModule.Display.Deleted`,e.DISPLAY_TOKEN_REVOKED=`DisplaysModule.Display.TokenRevoked`,e}({}),M=function(e){return e.NONE=`none`,e.WORKING=`working`,e.ERROR=`error`,e.OK=`ok`,e}({}),N={DISPLAYS:`displays_module-displays`,DISPLAYS_EDIT:`displays_module-displays_edit`,DISPLAY:`displays_module-display`,DISPLAY_EDIT:`displays_module-display_edit`,DISPLAY_TOKENS:`displays_module-display_tokens`},P=[{value:15,labelKey:`15s`},{value:30,labelKey:`30s`},{value:60,labelKey:`1min`},{value:120,labelKey:`2min`},{value:300,labelKey:`5min`},{value:600,labelKey:`10min`},{value:1800,labelKey:`30min`},{value:0,labelKey:`never`}],F=class extends Error{exception;constructor(e,t=null){super(e),this.name=`DisplaysException`,this.exception=t}},I=class extends F{constructor(e,t=null){super(e,t),this.name=`DisplaysValidationException`}},L=class extends F{code;constructor(e,t=null,n=null){super(e,n),this.name=`DisplaysApiException`,this.code=t}},R=({display:t,messages:s})=>{let c=x().getStore(w),{t:l}=i(),u=v(),d=r(M.NONE),f,p=a({id:t.id,name:t.name,spaceId:t.spaceId,unitSize:t.unitSize,rows:t.rows,cols:t.cols,brightness:t.brightness,screenLockDuration:t.screenLockDuration,darkMode:t.darkMode,screenSaver:t.screenSaver,screenPowerOff:t.screenPowerOff,speaker:t.speaker,speakerVolume:t.speakerVolume,microphone:t.microphone,microphoneVolume:t.microphoneVolume,homeMode:t.homeMode,homePageId:t.homePageId,numberFormat:t.numberFormat??``,temperatureUnit:t.temperatureUnit??``,windSpeedUnit:t.windSpeedUnit??``,pressureUnit:t.pressureUnit??``,precipitationUnit:t.precipitationUnit??``,distanceUnit:t.distanceUnit??``,weatherLocationId:t.weatherLocationId??null}),h=m(e(p)),g=r(void 0),_=r(!1),y=async()=>{let n=s&&s.error?s.error:l(`displaysModule.messages.notEdited`,{display:t.name||t.macAddress});if(!g.value)throw new I(`Form element is not available`);if(g.value.clearValidate(),!await g.value.validate())throw new I(`Form not valid`);d.value=M.WORKING;try{let e={name:p.name||null,spaceId:p.spaceId,unitSize:p.unitSize,rows:p.rows,cols:p.cols,brightness:p.brightness,screenLockDuration:p.screenLockDuration,darkMode:p.darkMode,screenSaver:p.screenSaver,screenPowerOff:p.screenPowerOff,homeMode:p.homeMode,homePageId:p.homeMode===`explicit`?p.homePageId:null,numberFormat:p.numberFormat||null,temperatureUnit:p.temperatureUnit||null,windSpeedUnit:p.windSpeedUnit||null,pressureUnit:p.pressureUnit||null,precipitationUnit:p.precipitationUnit||null,distanceUnit:p.distanceUnit||null,weatherLocationId:p.weatherLocationId||null};t.audioOutputSupported&&(e.speaker=p.speaker,e.speakerVolume=p.speakerVolume),t.audioInputSupported&&(e.microphone=p.microphone,e.microphoneVolume=p.microphoneVolume),await c.edit({id:t.id,data:e})}catch(e){throw d.value=M.ERROR,f=window.setTimeout(b,2e3),e instanceof L&&e.code===422?u.error(e.message):u.error(n),e}return d.value=M.OK,f=window.setTimeout(b,2e3),u.success(l(s&&s.success?s.success:`displaysModule.messages.edited`,{display:t.name||t.macAddress})),_.value=!1,h=m(e(p)),`saved`},b=()=>{f!==void 0&&(window.clearTimeout(f),f=void 0),d.value=M.NONE};return o(p,()=>{_.value=!(0,E.isEqual)(e(p),h)}),n(()=>{b()}),{model:p,formEl:g,formChanged:_,submit:y,clear:b,formResult:d}},z=()=>{let e=x().getStore(w),{firstLoad:n}=h(e),r=t(()=>e?.findAll()??[]);return{displays:r,isLoading:t(()=>e?.fetching()??!1),isLoaded:t(()=>n.value),fetchDisplays:async()=>{await e?.fetch()},options:t(()=>r.value.map(e=>({value:e.id,label:e.name||e.macAddress})))}},B=d({search:S().optional(),darkMode:f([`all`,`enabled`,`disabled`]).default(`all`),screenSaver:f([`all`,`enabled`,`disabled`]).default(`all`),state:f([`all`,`offline`,`online`]).default(`all`),states:_(f([`connected`,`disconnected`,`lost`,`unknown`]))}),V={search:void 0,darkMode:`all`,screenSaver:`all`,state:`all`,states:[]},H={by:`name`,dir:`asc`},U=()=>{let e=x().getStore(w),{firstLoad:n,semaphore:i}=h(e),{filters:a,sort:s,pagination:c,reset:l}=y({key:`${O}:displays:list`,filters:{schema:B,defaults:V},sort:{defaults:[H]},pagination:{defaults:{page:1,size:10}},syncQuery:!0,version:1}),u=t(()=>a.value.search!==V.search||!(0,E.isEqual)(a.value.darkMode,V.darkMode)||!(0,E.isEqual)(a.value.screenSaver,V.screenSaver)||!(0,E.isEqual)(a.value.state,V.state)||!(0,E.isEqual)(a.value.states,V.states)),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),g=t(()=>C(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.macAddress.toLowerCase().includes(a.value.search.toLowerCase())||e.version.toLowerCase().includes(a.value.search.toLowerCase()))&&(a.value.darkMode===`all`||a.value.darkMode===`enabled`&&e.darkMode||a.value.darkMode===`disabled`&&!e.darkMode)&&(a.value.screenSaver===`all`||a.value.screenSaver===`enabled`&&e.screenSaver||a.value.screenSaver===`disabled`&&!e.screenSaver)&&(!a.value.states||a.value.states.length===0||a.value.states.includes(e.status??`unknown`))&&(a.value.state===`all`||a.value.state===`online`&&e.status===`connected`||a.value.state===`offline`&&[`disconnected`,`lost`,`unknown`].includes(e.status??`unknown`))),[e=>{switch(p.value){case`name`:return e.name||e.macAddress;case`version`:return e.version;case`screenWidth`:return e.screenWidth??0;case`status`:return e.status??`unknown`;default:return e.name||e.macAddress}}],[m.value===`asc`?`asc`:`desc`])),_=t(()=>{let e=(f.value-1)*d.value,t=e+d.value;return g.value.slice(e,t)}),v=async()=>{await e.fetch()},b=t(()=>i.value.fetching.items||!n.value),S=t(()=>n.value),T=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?s.value=[]:s.value=[{by:e,dir:m.value}]}),{displays:g,displaysPaginated:_,totalRows:T,areLoading:b,loaded:S,fetchDisplays:v,filters:a,filtersActive:u,paginateSize:d,paginatePage:f,sortBy:p,sortDir:m,resetFilter:l}},W=()=>{let e=x().getStore(w),{t}=i(),n=v();return{remove:async r=>{let i=e?.findById(r);if(!i){n.error(t(`displaysModule.messages.notFound`));return}try{await p.confirm(t(`displaysModule.messages.confirmRemove`,{name:i.name||i.macAddress}),t(`displaysModule.headings.removeDisplay`),{confirmButtonText:t(`displaysModule.buttons.yes.title`),cancelButtonText:t(`displaysModule.buttons.no.title`),type:`warning`}),await e.remove({id:r}),n.success(t(`displaysModule.messages.removed`))}catch{}},bulkRemove:async r=>{if(r.length!==0){try{await p.confirm(t(`displaysModule.messages.confirmBulkRemove`,{count:r.length}),t(`displaysModule.headings.removeBulkDisplays`),{confirmButtonText:t(`displaysModule.buttons.yes.title`),cancelButtonText:t(`displaysModule.buttons.no.title`),type:`warning`})}catch{return}try{let i=await e.bulkRemove({ids:r.map(e=>e.id)});i.succeeded.length>0&&n.success(t(`displaysModule.messages.bulkRemoved`,{count:i.succeeded.length})),i.failed.length>0&&n.error(t(`displaysModule.messages.bulkRemoveFailed`,{count:i.failed.length}))}catch{n.error(t(`displaysModule.messages.bulkRemoveFailed`,{count:r.length}))}}}}},G=()=>{let e=g(),n=l(),i=r(null),a=r(!1),o=r(!1),c=t(()=>i.value?.available??!1),u=t(()=>i.value?.active??!1),d=t(()=>i.value?.deploymentMode??`combined`),f=t(()=>i.value?.remainingTime??null),p=t(()=>{let e=f.value;return e===null?0:Math.ceil(e/1e3)}),m=t(()=>{let e=p.value;return e<=0?`0:00`:`${Math.floor(e/60)}:${(e%60).toString().padStart(2,`0`)}`}),h=async()=>{try{a.value=!0;let{data:t}=await e.client.GET(`/${s}/${D}/displays/permit-join/status`);if(t?.data){let e=t.data;i.value={active:e.active??!1,expiresAt:e.expires_at?new Date(e.expires_at):null,remainingTime:e.remaining_time??null,deploymentMode:e.deployment_mode??`combined`,available:e.available??!1}}}catch(e){throw n.error(`Failed to fetch permit join status`,e),new F(`Failed to fetch permit join status`)}finally{a.value=!1}};return{status:i,loading:a,activating:o,isAvailable:c,isActive:u,deploymentMode:d,remainingTime:f,remainingTimeSeconds:p,remainingTimeFormatted:m,fetchStatus:h,activate:async()=>{try{o.value=!0,await e.client.POST(`/${s}/${D}/displays/permit-join`),await h()}catch(e){throw n.error(`Failed to activate permit join`,e),new F(`Failed to activate permit join`)}finally{o.value=!1}},deactivate:async()=>{try{o.value=!0,await e.client.DELETE(`/${s}/${D}/displays/permit-join`,{}),await h()}catch(e){throw n.error(`Failed to deactivate permit join`,e),new F(`Failed to deactivate permit join`)}finally{o.value=!1}}}};export{T as _,R as a,I as c,D as d,A as f,P as g,N as h,z as i,k as l,M as m,W as n,L as o,j as p,U as r,F as s,G as t,O as u};
@@ -1 +1 @@
1
- import"./rolldown-runtime-QTnfLwEv.js";import{Ei as e,Er as t,Si as n,T as r,bi as i,ci as a,ji as o,ki as s}from"./icon-with-child-CgZMNB3F.js";import{bt as c,f as l,gt as u,ht as d,it as f,jr as p,l as m,la as h,ot as g,p as _,pt as v,s as y,st as b,x,yt as S}from"./common-DQQtAVrj.js";import{r as C}from"./config-DycVi21V.js";import{r as w}from"./usePlugins-BLBNoCg5.js";import{t as T}from"./dist-DJgPCOr0.js";import{t as E}from"./keys-DExX7OfU.js";import{C as D,S as O,_ as k,b as A,d as j,g as M,h as N,n as P,s as F,y as I}from"./keys-xm8ycHBh.js";import{l as L,u as R}from"./useSpaces-DN7B3r14.js";import{a as z}from"./keys-DghNVBR5.js";var B=e=>{let n=x().getStore(P),{data:r,semaphore:i}=h(n);return{space:t(()=>e.value?r.value[e.value]??null:null),fetching:t(()=>e.value?i.value.fetching.item.includes(e.value):!1),fetchSpace:async()=>e.value?n.get({id:e.value}):null,editSpace:async t=>{if(!e.value)throw Error(`Space ID is required`);return n.edit({id:e.value,data:t})},removeSpace:async()=>{if(!e.value)throw Error(`Space ID is required`);return n.remove({id:e.value})}}},V=l(),H=u({search:S().optional(),types:g(S())}),U=u({name:S().min(1),description:S().nullable().optional(),category:c([v(N),v(k)]).nullable().optional(),icon:S().nullable().optional(),displayOrder:d().int().min(0).default(0),parentId:S().uuid().nullable().optional()}),W=U.extend({id:S().uuid(),type:f([M.ROOM,M.ZONE]).default(M.ROOM)}),G=U.extend({id:S().uuid(),type:v(M),suggestionsEnabled:b().default(!0),statusWidgets:g(L).nullable().optional()}),K=({id:t,type:o})=>{let s=x().getStore(P),{t:c}=r(),l=_(),u=n(F.NONE),d=n(null),f,p=i({id:t,type:o??M.ROOM,name:``,description:null,category:null,icon:null,displayOrder:0,parentId:null}),h=m(e(p)),g=n(void 0),v=n(!1),y=async()=>{if(g.value.clearValidate(),!await g.value.validate())throw Error(`Form not valid`);let e=W.safeParse(p);if(!e.success)throw Error(`Failed to validate create space model.`);u.value=F.WORKING;let n=c(`spacesModule.messages.notCreated`,{space:p.name});try{d.value=await s.add({id:t,data:{name:e.data.name,type:e.data.type,category:e.data.category??null,description:e.data.description??null,icon:e.data.icon??null,displayOrder:e.data.displayOrder,parentId:e.data.parentId??null}})}catch(e){throw u.value=F.ERROR,d.value=null,f=window.setTimeout(b,2e3),l.error(n),e}return u.value=F.OK,f=window.setTimeout(b,2e3),l.success(c(`spacesModule.messages.created`,{space:p.name})),`added`},b=()=>{window.clearTimeout(f),u.value=F.NONE,d.value=null};return a(p,()=>{v.value=!(0,V.isEqual)(e(p),h)}),{model:p,formEl:g,formChanged:v,submit:y,clear:b,formResult:u,createdSpace:d}};function q(e){let n=e=>{let t=I(e);return e===M.ROOM?[...t].sort((e,t)=>e.localeCompare(t)):t},r=e=>{let t=A(e);return t&&t.length>0?t:null};return{getCategoryOptions:n,getCategoryGroups:r,getCategoryTemplates:e=>O(e),categoryOptions:t(()=>{let t=o(e)??M.ROOM;return n(t)}),categoryGroups:t(()=>{let t=o(e)??M.ROOM;return r(t)}),currentTemplates:t(()=>O(o(e)??M.ROOM))}}var J=(e,r)=>{let i=x(),a=i.getStore(z),o=i.getStore(P),{semaphore:s,firstLoad:c}=h(a),l=n(!1);return{devices:t(()=>{if(!e.value||!r.value)return[];let t=a.findAll().filter(e=>!e.draft&&!e.hidden),n;return n=r.value===M.ROOM?t.filter(t=>t.roomId===e.value):t.filter(t=>t.zoneIds.includes(e.value)),n.sort((e,t)=>e.name.localeCompare(t.name))}),loading:t(()=>!!(l.value||s.value.fetching.items||!c.value)),firstLoadFinished:t(()=>c.value),fetchDevices:async()=>{await a.fetch()},addDevice:async t=>{if(!e.value||!r.value)throw Error(`Space ID and type are required`);l.value=!0;try{if(r.value===M.ROOM){let n=a.findById(t);if(!n)throw Error(`Device not found`);await a.edit({id:t,data:{type:n.type,roomId:e.value}})}else{let n=o.findById(e.value);if(n&&D(n.category))throw Error(`Cannot assign devices to floor zones. Floor membership is derived from room assignment.`);await a.addZone({id:t,zoneId:e.value})}}finally{l.value=!1}},removeDevice:async t=>{if(!e.value||!r.value)throw Error(`Space ID and type are required`);l.value=!0;try{if(r.value===M.ROOM){let e=a.findById(t);if(!e)throw Error(`Device not found`);await a.edit({id:t,data:{type:e.type,roomId:null}})}else await a.removeZone({id:t,zoneId:e.value})}finally{l.value=!1}},reassignDevice:async(e,t)=>{l.value=!0;try{let n=a.findById(e);if(!n)throw Error(`Device not found`);await a.edit({id:e,data:{type:n.type,roomId:t}})}finally{l.value=!1}}}},Y=e=>{let r=x().getStore(E),i=n(!1);return{displays:t(()=>e.value?r.findAll().filter(t=>t.spaceId===e.value).sort((e,t)=>(e.name||e.macAddress).localeCompare(t.name||t.macAddress)):[]),loading:t(()=>i.value?!0:r.fetching()),fetchDisplays:async()=>{await r.fetch()},reassignDisplay:async(e,t)=>{i.value=!0;try{await r.edit({id:e,data:{spaceId:t}})}finally{i.value=!1}},removeDisplay:async e=>{i.value=!0;try{await r.edit({id:e,data:{spaceId:null}})}finally{i.value=!1}}}},X=({space:t})=>{let o=()=>`value`in t?t.value:t,s=o(),c=x().getStore(P),{t:l}=r(),u=_(),d=n(F.NONE),f,p=i({id:s.id,type:s.type,name:s.name,description:s.description,category:s.category,icon:s.icon,displayOrder:s.displayOrder,parentId:s.parentId,suggestionsEnabled:s.suggestionsEnabled,statusWidgets:s.statusWidgets?[...s.statusWidgets.map(e=>({...e,settings:{...e.settings}}))]:null}),h=m(e(p)),g=n(void 0),v=n(!1),y=async()=>{if(g.value.clearValidate(),!await g.value.validate())throw Error(`Form not valid`);let t=G.safeParse(p);if(!t.success)throw Error(`Failed to validate edit space model.`);d.value=F.WORKING;let n=l(`spacesModule.messages.notEdited`,{space:p.name});try{await c.edit({id:s.id,data:{name:t.data.name,type:t.data.type,category:t.data.category??null,description:t.data.description??null,icon:t.data.icon??null,displayOrder:t.data.displayOrder,parentId:t.data.parentId??null,suggestionsEnabled:t.data.suggestionsEnabled,statusWidgets:t.data.statusWidgets??null}})}catch(e){throw d.value=F.ERROR,f=window.setTimeout(b,2e3),u.error(n),e}return d.value=F.OK,f=window.setTimeout(b,2e3),v.value=!1,h=m(e(p)),`saved`},b=()=>{window.clearTimeout(f),d.value=F.NONE};return a(p,()=>{v.value=!(0,V.isEqual)(e(p),h)}),a(()=>o(),t=>{t&&(p.id=t.id,p.type=t.type,p.name=t.name,p.description=t.description,p.category=t.category,p.icon=t.icon,p.displayOrder=t.displayOrder,p.parentId=t.parentId,p.suggestionsEnabled=t.suggestionsEnabled,p.statusWidgets=t.statusWidgets?[...t.statusWidgets.map(e=>({...e,settings:{...e.settings}}))]:null,h=m(e(p)),v.value=!1)},{deep:!0}),{model:p,formEl:g,formChanged:v,submit:y,clear:b,formResult:d}},Z=()=>{let{t:e}=r(),t=_(),n=x().getStore(P);return{remove:async r=>{let i=n.findById(r);return i?p.confirm(e(`spacesModule.messages.confirmRemove`,{name:i.name}),e(`spacesModule.headings.removeSpace`),{confirmButtonText:e(`spacesModule.buttons.yes.title`),cancelButtonText:e(`spacesModule.buttons.no.title`),type:`warning`}).then(async()=>{try{return await n.remove({id:r}),t.success(e(`spacesModule.messages.removed`,{space:i.name})),!0}catch(e){return e instanceof R&&t.error(e.message),!1}}).catch(()=>(t.info(e(`spacesModule.messages.removeCanceled`,{space:i.name})),!1)):(t.error(e(`spacesModule.messages.notFound`)),!1)},bulkRemove:async r=>{if(r.length!==0){try{await p.confirm(e(`spacesModule.messages.confirmBulkRemove`,{count:r.length}),e(`spacesModule.headings.bulkRemoveSpace`),{confirmButtonText:e(`spacesModule.buttons.yes.title`),cancelButtonText:e(`spacesModule.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(`spacesModule.messages.bulkRemoved`,{count:i.succeeded.length})),i.failed.length>0&&t.error(e(`spacesModule.messages.bulkRemoveFailed`,{count:i.failed.length}))}catch{t.error(e(`spacesModule.messages.bulkRemoveFailed`,{count:r.length}))}}}}},Q={search:void 0,types:[]},ee={by:`name`,dir:`asc`},te=()=>{let e=x().getStore(P),{firstLoad:r,semaphore:i}=h(e),{filters:o,sort:s,pagination:c,reset:l}=y({key:`${j}:spaces:list`,filters:{schema:H,defaults:Q},sort:{defaults:[ee]},pagination:{defaults:{page:1,size:10}},syncQuery:!0,version:2}),u=t(()=>o.value.search!==Q.search||!(0,V.isEqual)(o.value.types,Q.types)),d=n(c.value.size||10),f=n(c.value.page||1),p=n(s.value.length>0?s.value[0]?.by:void 0),m=n(s.value.length>0?s.value[0]?.dir??null:null),g=t(()=>T(e.findAll().filter(e=>!e.draft&&(!o.value.search||e.id.toLowerCase().includes(o.value.search.toLowerCase())||e.name?.toLowerCase().includes(o.value.search.toLowerCase())||e.description?.toLowerCase().includes(o.value.search.toLowerCase()))&&(o.value.types.length===0||o.value.types.includes(e.type))),[e=>{switch(p.value){case`name`:return e.name;case`type`:return e.type;case`displayOrder`:return e.displayOrder;default:return e.displayOrder}}],[m.value??`asc`])),_=t(()=>{let e=(f.value-1)*d.value,t=e+d.value;return g.value.slice(e,t)}),v=async()=>{await e.fetch()},b=t(()=>!!(i.value.fetching.items||!r.value)),S=t(()=>r.value),C=t(()=>e.findAll().filter(e=>!e.draft).length);return a(()=>c.value,e=>{f.value=e.page??1,d.value=e.size??10},{deep:!0}),a(()=>f.value,e=>{c.value.page=e}),a(()=>d.value,e=>{c.value.size=e}),a(()=>m.value,e=>{p.value===void 0||e===null?s.value=[]:s.value=[{by:p.value,dir:e}]}),a(()=>p.value,e=>{e===void 0?s.value=[]:s.value=[{by:e,dir:m.value}]}),{spaces:g,spacesPaginated:_,totalRows:C,areLoading:b,loaded:S,fetchSpaces:v,filters:o,filtersActive:u,paginateSize:d,paginatePage:f,sortBy:p,sortDir:m,resetFilter:l}},$=()=>{let e=w(),{enabled:n}=C(),{t:i,te:a}=r(),o=[`spaceDetail`,`spaceAddForm`,`spaceEditForm`,`spaceWizard`],s=[`spaceDetail`,`spaceAddForm`,`spaceEditForm`],c=[`spaceSchema`,`spaceAddFormSchema`,`spaceEditFormSchema`,`spaceCreateReqSchema`,`spaceUpdateReqSchema`],l=[`configure`],u=t(()=>e.getPlugins().filter(e=>e.modules===void 0||e.modules.includes(`spaces-module`)?l.length>0&&l.some(t=>e.routes&&t in e.routes)?!0:(e.elements??[]).some(e=>{if(!(e.modules===void 0||e.modules.includes(`spaces-module`)))return!1;let t=o.length===0||!!e.components&&o.some(t=>e.components&&t in e.components),n=c.length===0||!!e.schemas&&c.some(t=>e.schemas&&t in e.schemas);return t||n}):!1)),d=e=>a(e)?i(e):e;return{plugins:u,options:t(()=>T(u.value.flatMap(e=>(e.elements??[]).filter(e=>e.modules===void 0||e.modules.includes(`spaces-module`)).filter(e=>{let t=!!e.components&&s.some(t=>e.components&&t in e.components),n=!!e.schemas&&c.some(t=>e.schemas&&t in e.schemas);return t||n}).map(t=>({value:t.type,label:t.name?.trim()?d(t.name):d(e.name),disabled:!n(e.type)}))),[e=>e.label],[`asc`])),wizardOptions:t(()=>T(u.value.filter(e=>(e.elements??[]).some(e=>(e.modules===void 0||e.modules.includes(`spaces-module`))&&!!e.components?.spaceWizard)).map(e=>({value:e.type,label:d(e.name),description:e.description,disabled:!n(e.type)})),[e=>e.label],[`asc`])),getByPluginType:e=>u.value.find(t=>t.type===e),getByType:e=>u.value.find(t=>(t.elements??[]).some(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`spaces-module`)))),getElement:e=>{for(let t of u.value){let n=(t.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`spaces-module`)));if(n)return n}}}},ne=({type:e})=>{let{getByType:n}=$(),r=t(()=>n(s(e)));return{plugin:r,element:t(()=>{let t=s(e);return(r.value?.elements??[]).find(e=>e.type===t&&(e.modules===void 0||e.modules.includes(`spaces-module`)))})}};export{X as a,q as c,G as d,B as f,Z as i,K as l,$ as n,Y as o,te as r,J as s,ne as t,W as u};
1
+ import"./rolldown-runtime-QTnfLwEv.js";import{Ei as e,Er as t,Si as n,T as r,bi as i,ci as a,ji as o,ki as s}from"./icon-with-child-CgZMNB3F.js";import{bt as c,f as l,gt as u,ht as d,it as f,jr as p,l as m,la as h,ot as g,p as _,pt as v,s as y,st as b,x,yt as S}from"./common-Be4p2bm6.js";import{r as C}from"./config-BAg35nXl.js";import{r as w}from"./usePlugins-D2-Pd2HX.js";import{t as T}from"./dist-DJgPCOr0.js";import{t as E}from"./keys-DExX7OfU.js";import{C as D,S as O,_ as k,b as A,d as j,g as M,h as N,n as P,s as F,y as I}from"./keys-DakHO8Vr.js";import{l as L,u as R}from"./useSpaces-BXdflM37.js";import{a as z}from"./keys-DghNVBR5.js";var B=e=>{let n=x().getStore(P),{data:r,semaphore:i}=h(n);return{space:t(()=>e.value?r.value[e.value]??null:null),fetching:t(()=>e.value?i.value.fetching.item.includes(e.value):!1),fetchSpace:async()=>e.value?n.get({id:e.value}):null,editSpace:async t=>{if(!e.value)throw Error(`Space ID is required`);return n.edit({id:e.value,data:t})},removeSpace:async()=>{if(!e.value)throw Error(`Space ID is required`);return n.remove({id:e.value})}}},V=l(),H=u({search:S().optional(),types:g(S())}),U=u({name:S().min(1),description:S().nullable().optional(),category:c([v(N),v(k)]).nullable().optional(),icon:S().nullable().optional(),displayOrder:d().int().min(0).default(0),parentId:S().uuid().nullable().optional()}),W=U.extend({id:S().uuid(),type:f([M.ROOM,M.ZONE]).default(M.ROOM)}),G=U.extend({id:S().uuid(),type:v(M),suggestionsEnabled:b().default(!0),statusWidgets:g(L).nullable().optional()}),K=({id:t,type:o})=>{let s=x().getStore(P),{t:c}=r(),l=_(),u=n(F.NONE),d=n(null),f,p=i({id:t,type:o??M.ROOM,name:``,description:null,category:null,icon:null,displayOrder:0,parentId:null}),h=m(e(p)),g=n(void 0),v=n(!1),y=async()=>{if(g.value.clearValidate(),!await g.value.validate())throw Error(`Form not valid`);let e=W.safeParse(p);if(!e.success)throw Error(`Failed to validate create space model.`);u.value=F.WORKING;let n=c(`spacesModule.messages.notCreated`,{space:p.name});try{d.value=await s.add({id:t,data:{name:e.data.name,type:e.data.type,category:e.data.category??null,description:e.data.description??null,icon:e.data.icon??null,displayOrder:e.data.displayOrder,parentId:e.data.parentId??null}})}catch(e){throw u.value=F.ERROR,d.value=null,f=window.setTimeout(b,2e3),l.error(n),e}return u.value=F.OK,f=window.setTimeout(b,2e3),l.success(c(`spacesModule.messages.created`,{space:p.name})),`added`},b=()=>{window.clearTimeout(f),u.value=F.NONE,d.value=null};return a(p,()=>{v.value=!(0,V.isEqual)(e(p),h)}),{model:p,formEl:g,formChanged:v,submit:y,clear:b,formResult:u,createdSpace:d}};function q(e){let n=e=>{let t=I(e);return e===M.ROOM?[...t].sort((e,t)=>e.localeCompare(t)):t},r=e=>{let t=A(e);return t&&t.length>0?t:null};return{getCategoryOptions:n,getCategoryGroups:r,getCategoryTemplates:e=>O(e),categoryOptions:t(()=>{let t=o(e)??M.ROOM;return n(t)}),categoryGroups:t(()=>{let t=o(e)??M.ROOM;return r(t)}),currentTemplates:t(()=>O(o(e)??M.ROOM))}}var J=(e,r)=>{let i=x(),a=i.getStore(z),o=i.getStore(P),{semaphore:s,firstLoad:c}=h(a),l=n(!1);return{devices:t(()=>{if(!e.value||!r.value)return[];let t=a.findAll().filter(e=>!e.draft&&!e.hidden),n;return n=r.value===M.ROOM?t.filter(t=>t.roomId===e.value):t.filter(t=>t.zoneIds.includes(e.value)),n.sort((e,t)=>e.name.localeCompare(t.name))}),loading:t(()=>!!(l.value||s.value.fetching.items||!c.value)),firstLoadFinished:t(()=>c.value),fetchDevices:async()=>{await a.fetch()},addDevice:async t=>{if(!e.value||!r.value)throw Error(`Space ID and type are required`);l.value=!0;try{if(r.value===M.ROOM){let n=a.findById(t);if(!n)throw Error(`Device not found`);await a.edit({id:t,data:{type:n.type,roomId:e.value}})}else{let n=o.findById(e.value);if(n&&D(n.category))throw Error(`Cannot assign devices to floor zones. Floor membership is derived from room assignment.`);await a.addZone({id:t,zoneId:e.value})}}finally{l.value=!1}},removeDevice:async t=>{if(!e.value||!r.value)throw Error(`Space ID and type are required`);l.value=!0;try{if(r.value===M.ROOM){let e=a.findById(t);if(!e)throw Error(`Device not found`);await a.edit({id:t,data:{type:e.type,roomId:null}})}else await a.removeZone({id:t,zoneId:e.value})}finally{l.value=!1}},reassignDevice:async(e,t)=>{l.value=!0;try{let n=a.findById(e);if(!n)throw Error(`Device not found`);await a.edit({id:e,data:{type:n.type,roomId:t}})}finally{l.value=!1}}}},Y=e=>{let r=x().getStore(E),i=n(!1);return{displays:t(()=>e.value?r.findAll().filter(t=>t.spaceId===e.value).sort((e,t)=>(e.name||e.macAddress).localeCompare(t.name||t.macAddress)):[]),loading:t(()=>i.value?!0:r.fetching()),fetchDisplays:async()=>{await r.fetch()},reassignDisplay:async(e,t)=>{i.value=!0;try{await r.edit({id:e,data:{spaceId:t}})}finally{i.value=!1}},removeDisplay:async e=>{i.value=!0;try{await r.edit({id:e,data:{spaceId:null}})}finally{i.value=!1}}}},X=({space:t})=>{let o=()=>`value`in t?t.value:t,s=o(),c=x().getStore(P),{t:l}=r(),u=_(),d=n(F.NONE),f,p=i({id:s.id,type:s.type,name:s.name,description:s.description,category:s.category,icon:s.icon,displayOrder:s.displayOrder,parentId:s.parentId,suggestionsEnabled:s.suggestionsEnabled,statusWidgets:s.statusWidgets?[...s.statusWidgets.map(e=>({...e,settings:{...e.settings}}))]:null}),h=m(e(p)),g=n(void 0),v=n(!1),y=async()=>{if(g.value.clearValidate(),!await g.value.validate())throw Error(`Form not valid`);let t=G.safeParse(p);if(!t.success)throw Error(`Failed to validate edit space model.`);d.value=F.WORKING;let n=l(`spacesModule.messages.notEdited`,{space:p.name});try{await c.edit({id:s.id,data:{name:t.data.name,type:t.data.type,category:t.data.category??null,description:t.data.description??null,icon:t.data.icon??null,displayOrder:t.data.displayOrder,parentId:t.data.parentId??null,suggestionsEnabled:t.data.suggestionsEnabled,statusWidgets:t.data.statusWidgets??null}})}catch(e){throw d.value=F.ERROR,f=window.setTimeout(b,2e3),u.error(n),e}return d.value=F.OK,f=window.setTimeout(b,2e3),v.value=!1,h=m(e(p)),`saved`},b=()=>{window.clearTimeout(f),d.value=F.NONE};return a(p,()=>{v.value=!(0,V.isEqual)(e(p),h)}),a(()=>o(),t=>{t&&(p.id=t.id,p.type=t.type,p.name=t.name,p.description=t.description,p.category=t.category,p.icon=t.icon,p.displayOrder=t.displayOrder,p.parentId=t.parentId,p.suggestionsEnabled=t.suggestionsEnabled,p.statusWidgets=t.statusWidgets?[...t.statusWidgets.map(e=>({...e,settings:{...e.settings}}))]:null,h=m(e(p)),v.value=!1)},{deep:!0}),{model:p,formEl:g,formChanged:v,submit:y,clear:b,formResult:d}},Z=()=>{let{t:e}=r(),t=_(),n=x().getStore(P);return{remove:async r=>{let i=n.findById(r);return i?p.confirm(e(`spacesModule.messages.confirmRemove`,{name:i.name}),e(`spacesModule.headings.removeSpace`),{confirmButtonText:e(`spacesModule.buttons.yes.title`),cancelButtonText:e(`spacesModule.buttons.no.title`),type:`warning`}).then(async()=>{try{return await n.remove({id:r}),t.success(e(`spacesModule.messages.removed`,{space:i.name})),!0}catch(e){return e instanceof R&&t.error(e.message),!1}}).catch(()=>(t.info(e(`spacesModule.messages.removeCanceled`,{space:i.name})),!1)):(t.error(e(`spacesModule.messages.notFound`)),!1)},bulkRemove:async r=>{if(r.length!==0){try{await p.confirm(e(`spacesModule.messages.confirmBulkRemove`,{count:r.length}),e(`spacesModule.headings.bulkRemoveSpace`),{confirmButtonText:e(`spacesModule.buttons.yes.title`),cancelButtonText:e(`spacesModule.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(`spacesModule.messages.bulkRemoved`,{count:i.succeeded.length})),i.failed.length>0&&t.error(e(`spacesModule.messages.bulkRemoveFailed`,{count:i.failed.length}))}catch{t.error(e(`spacesModule.messages.bulkRemoveFailed`,{count:r.length}))}}}}},Q={search:void 0,types:[]},ee={by:`name`,dir:`asc`},te=()=>{let e=x().getStore(P),{firstLoad:r,semaphore:i}=h(e),{filters:o,sort:s,pagination:c,reset:l}=y({key:`${j}:spaces:list`,filters:{schema:H,defaults:Q},sort:{defaults:[ee]},pagination:{defaults:{page:1,size:10}},syncQuery:!0,version:2}),u=t(()=>o.value.search!==Q.search||!(0,V.isEqual)(o.value.types,Q.types)),d=n(c.value.size||10),f=n(c.value.page||1),p=n(s.value.length>0?s.value[0]?.by:void 0),m=n(s.value.length>0?s.value[0]?.dir??null:null),g=t(()=>T(e.findAll().filter(e=>!e.draft&&(!o.value.search||e.id.toLowerCase().includes(o.value.search.toLowerCase())||e.name?.toLowerCase().includes(o.value.search.toLowerCase())||e.description?.toLowerCase().includes(o.value.search.toLowerCase()))&&(o.value.types.length===0||o.value.types.includes(e.type))),[e=>{switch(p.value){case`name`:return e.name;case`type`:return e.type;case`displayOrder`:return e.displayOrder;default:return e.displayOrder}}],[m.value??`asc`])),_=t(()=>{let e=(f.value-1)*d.value,t=e+d.value;return g.value.slice(e,t)}),v=async()=>{await e.fetch()},b=t(()=>!!(i.value.fetching.items||!r.value)),S=t(()=>r.value),C=t(()=>e.findAll().filter(e=>!e.draft).length);return a(()=>c.value,e=>{f.value=e.page??1,d.value=e.size??10},{deep:!0}),a(()=>f.value,e=>{c.value.page=e}),a(()=>d.value,e=>{c.value.size=e}),a(()=>m.value,e=>{p.value===void 0||e===null?s.value=[]:s.value=[{by:p.value,dir:e}]}),a(()=>p.value,e=>{e===void 0?s.value=[]:s.value=[{by:e,dir:m.value}]}),{spaces:g,spacesPaginated:_,totalRows:C,areLoading:b,loaded:S,fetchSpaces:v,filters:o,filtersActive:u,paginateSize:d,paginatePage:f,sortBy:p,sortDir:m,resetFilter:l}},$=()=>{let e=w(),{enabled:n}=C(),{t:i,te:a}=r(),o=[`spaceDetail`,`spaceAddForm`,`spaceEditForm`,`spaceWizard`],s=[`spaceDetail`,`spaceAddForm`,`spaceEditForm`],c=[`spaceSchema`,`spaceAddFormSchema`,`spaceEditFormSchema`,`spaceCreateReqSchema`,`spaceUpdateReqSchema`],l=[`configure`],u=t(()=>e.getPlugins().filter(e=>e.modules===void 0||e.modules.includes(`spaces-module`)?l.length>0&&l.some(t=>e.routes&&t in e.routes)?!0:(e.elements??[]).some(e=>{if(!(e.modules===void 0||e.modules.includes(`spaces-module`)))return!1;let t=o.length===0||!!e.components&&o.some(t=>e.components&&t in e.components),n=c.length===0||!!e.schemas&&c.some(t=>e.schemas&&t in e.schemas);return t||n}):!1)),d=e=>a(e)?i(e):e;return{plugins:u,options:t(()=>T(u.value.flatMap(e=>(e.elements??[]).filter(e=>e.modules===void 0||e.modules.includes(`spaces-module`)).filter(e=>{let t=!!e.components&&s.some(t=>e.components&&t in e.components),n=!!e.schemas&&c.some(t=>e.schemas&&t in e.schemas);return t||n}).map(t=>({value:t.type,label:t.name?.trim()?d(t.name):d(e.name),disabled:!n(e.type)}))),[e=>e.label],[`asc`])),wizardOptions:t(()=>T(u.value.filter(e=>(e.elements??[]).some(e=>(e.modules===void 0||e.modules.includes(`spaces-module`))&&!!e.components?.spaceWizard)).map(e=>({value:e.type,label:d(e.name),description:e.description,disabled:!n(e.type)})),[e=>e.label],[`asc`])),getByPluginType:e=>u.value.find(t=>t.type===e),getByType:e=>u.value.find(t=>(t.elements??[]).some(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`spaces-module`)))),getElement:e=>{for(let t of u.value){let n=(t.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`spaces-module`)));if(n)return n}}}},ne=({type:e})=>{let{getByType:n}=$(),r=t(()=>n(s(e)));return{plugin:r,element:t(()=>{let t=s(e);return(r.value?.elements??[]).find(e=>e.type===t&&(e.modules===void 0||e.modules.includes(`spaces-module`)))})}};export{X as a,q as c,G as d,B as f,Z as i,K as l,$ as n,Y as o,te as r,J as s,ne as t,W as u};
@@ -1 +1 @@
1
- import{Er as e,Si as t,T as n,bi as r,n as i}from"./icon-with-child-CgZMNB3F.js";import{kn as a,m as o,p as s,x as c}from"./common-DQQtAVrj.js";import{t as l}from"./keys-CIqUg3Jv.js";import{a as u}from"./config.constants-17QBQ_kF.js";import{f as d,g as f,n as p}from"./keys-xm8ycHBh.js";import{o as m}from"./weather.constants-_S0I_w_Q.js";import{r as h}from"./devices.constants-HX5whDWr.js";var g=t(null),_=t(!1),v=t(null),y=300*1e3,b=e(()=>g.value!==null&&!g.value.hasOwner),x=e(()=>g.value?.onboardingCompleted??!1),S=()=>{g.value=null,v.value=null},C=()=>{let e=o(),t=async(t=!1)=>{if(!t&&g.value&&v.value&&Date.now()-v.value<y)return g.value;_.value=!0;try{let{data:t,error:n}=await e.client.GET(`/${i}/system/system/onboarding`);return n||!t?null:(g.value={hasOwner:t.data.has_owner,onboardingCompleted:t.data.onboarding_completed,devicesCount:t.data.devices_count,spacesCount:t.data.spaces_count,displaysCount:t.data.displays_count},v.value=Date.now(),g.value)}catch{return null}finally{_.value=!1}},n=()=>{g.value=null,v.value=null};return{status:g,isLoading:_,needsOnboarding:b,isOnboardingCompleted:x,fetchStatus:t,invalidate:n,markComplete:async()=>{try{let{error:r}=await e.client.POST(`/${i}/system/system/onboarding/complete`);return r?!1:(n(),await t(!0),!0)}catch{return!1}}}},w={ONBOARDING:`onboarding_module-onboarding`},T=function(e){return e[e.WELCOME=0]=`WELCOME`,e[e.ACCOUNT=1]=`ACCOUNT`,e[e.LOCATION=2]=`LOCATION`,e[e.INTEGRATIONS=3]=`INTEGRATIONS`,e[e.SPACES=4]=`SPACES`,e[e.COMPLETE=5]=`COMPLETE`,e}({}),E=[{searchToken:`Living Room`,category:`living_room`,icon:`mdi:sofa`,i18nKey:`livingRoom`},{searchToken:`Bedroom`,category:`bedroom`,icon:`mdi:bed`,i18nKey:`bedroom`},{searchToken:`Kitchen`,category:`kitchen`,icon:`mdi:countertop`,i18nKey:`kitchen`},{searchToken:`Bathroom`,category:`bathroom`,icon:`mdi:shower`,i18nKey:`bathroom`},{searchToken:`Toilet`,category:`toilet`,icon:`mdi:toilet`,i18nKey:`toilet`},{searchToken:`Office`,category:`office`,icon:`mdi:desk`,i18nKey:`office`},{searchToken:`Garage`,category:`garage`,icon:`mdi:garage`,i18nKey:`garage`},{searchToken:`Hallway`,category:`hallway`,icon:`mdi:door-open`,i18nKey:`hallway`},{searchToken:`Entryway`,category:`entryway`,icon:`mdi:door-sliding`,i18nKey:`entryway`},{searchToken:`Dining Room`,category:`dining_room`,icon:`mdi:silverware-fork-knife`,i18nKey:`diningRoom`},{searchToken:`Laundry`,category:`laundry`,icon:`mdi:washing-machine`,i18nKey:`laundry`},{searchToken:`Nursery`,category:`nursery`,icon:`mdi:baby-carriage`,i18nKey:`nursery`},{searchToken:`Guest Room`,category:`guest_room`,icon:`mdi:bed-outline`,i18nKey:`guestRoom`},{searchToken:`Storage`,category:`storage`,icon:`mdi:package-variant-closed`,i18nKey:`storage`},{searchToken:`Workshop`,category:`workshop`,icon:`mdi:hammer-wrench`,i18nKey:`workshop`}],D=t(T.WELCOME),O=t(!1),k=t(!1),A=t(!1),j=t(!1),M=t(0),N=r({username:``,password:``,confirmPassword:``,email:``,firstName:``,lastName:``}),P=r({city:``,latitude:null,longitude:null,timezone:``}),F=r([]),I=r(new Set),L=r([]),R=r({}),z={},B=null,V=null,H=()=>{let{t}=n(),r=o(),g=s(),_=c(),v=_.getStore(l),y=_.getStore(p),{invalidate:b,markComplete:x}=C(),S=e(()=>D.value===T.COMPLETE),w=()=>{D.value<T.COMPLETE&&(D.value+=1)},H=()=>{D.value>T.WELCOME&&--D.value},U=async()=>{if(A.value)return!0;O.value=!0;try{return k.value||=(await v.register({data:{username:N.username,password:N.password,firstName:N.firstName,lastName:N.lastName,email:N.email||void 0}}),!0),await v.create({data:{username:N.username,password:N.password}}),A.value=!0,N.password=``,N.confirmPassword=``,b(),!0}catch{return g.error(t(`onboardingModule.account.messages.error`)),!1}finally{O.value=!1}},W=e(()=>P.latitude!==null&&P.longitude!==null),G=async()=>{if(j.value||P.latitude===null||P.longitude===null)return!0;try{if(B&&V&&(V.latitude!==P.latitude||V.longitude!==P.longitude)&&(B=null,V=null),!B){let e={type:`weather-open-meteo`,name:P.city||`Home`,latitude:P.latitude,longitude:P.longitude},{data:t,error:n}=await r.client.POST(`/${i}/${m}/locations`,{body:{data:e}});if(n||(B=t?.data?.id??null,!B))return!1;V={latitude:P.latitude,longitude:P.longitude}}let{error:e}=await r.client.PATCH(`/${i}/${u}/config/module/{module}`,{params:{path:{module:`weather-module`}},body:{data:{type:`weather-module`,primary_location_id:B}}});return e?!1:(j.value=!0,!0)}catch{return!1}},K=async()=>{try{let{data:e,error:t}=await r.client.GET(`/${i}/${h}/devices`,{params:{query:{hidden:a.false}}});if(t||!e)return!1;let n=e.data;L.splice(0,L.length);for(let e of n)L.push({id:e.id,name:e.name,type:e.type,category:e.category??`generic`,description:e.description??null,roomId:e.room_id??null});return!0}catch{return!1}},q=e=>e.i18nKey?t(`onboardingModule.spaces.categories.${e.i18nKey}`):e.searchToken,J=e=>{let t=e.toLowerCase();return E.find(e=>t.includes(e.searchToken.toLowerCase()))??null},Y=()=>{let e=new Set(F.map(e=>e.name.toLowerCase()));for(let t of L){let n=J(t.name);if(!n)continue;let r=q(n);!e.has(r.toLowerCase())&&!I.has(r.toLowerCase())&&(F.push({name:r,category:n.category,icon:n.icon}),e.add(r.toLowerCase())),!(t.id in R)&&!I.has(r.toLowerCase())&&(R[t.id]=r)}},X=async()=>{if(F.length===0)return!0;try{for(;F.length>0;){let e=F[0],t=await y.add({data:{name:e.name,type:f.ROOM,category:e.category,icon:e.icon}});z[e.name]=t.id,M.value++,F.splice(0,1)}return!0}catch{return!1}},Z=async()=>{let e={};for(let[t,n]of Object.entries(R)){if(!n)continue;let r=z[n];r&&(e[r]||(e[r]=[]),e[r].push(t))}for(let[t,n]of Object.entries(e)){let{error:e}=await r.client.POST(`/${i}/${d}/spaces/{id}/assign`,{params:{path:{id:t}},body:{data:{device_ids:n,display_ids:[]}}});if(e)return!1}return!0};return{currentStep:D,isLoading:O,accountCreated:A,hasLocationData:W,accountData:N,locationData:P,spacesToCreate:F,dismissedSpaces:I,discoveredDevices:L,deviceAssignments:R,savedSpacesCount:M,isLastStep:S,nextStep:w,prevStep:H,createAccount:U,saveLocation:G,saveSpaces:X,fetchDevices:K,suggestSpacesFromDevices:Y,completeOnboarding:async()=>{O.value=!0;try{return P.latitude!==null&&P.longitude!==null&&!await G()?(g.error(t(`onboardingModule.location.messages.error`)),!1):F.length>0&&!await X()?(g.error(t(`onboardingModule.spaces.messages.error`)),!1):Object.values(R).some(e=>e!==null)&&!await Z()?(g.error(t(`onboardingModule.spaces.messages.assignmentError`)),!1):await x()?!0:(g.error(t(`onboardingModule.complete.messages.error`)),!1)}catch{return g.error(t(`onboardingModule.complete.messages.error`)),!1}finally{O.value=!1}},reset:()=>{D.value=T.WELCOME,k.value=!1,A.value=!1,j.value=!1,M.value=0,N.username=``,N.password=``,N.confirmPassword=``,N.email=``,N.firstName=``,N.lastName=``,P.city=``,P.latitude=null,P.longitude=null,P.timezone=``,F.splice(0),I.clear(),L.splice(0),Object.keys(R).forEach(e=>delete R[e]),Object.keys(z).forEach(e=>delete z[e]),B=null,V=null}}};export{S as a,w as i,H as n,C as o,T as r,E as t};
1
+ import{Er as e,Si as t,T as n,bi as r,n as i}from"./icon-with-child-CgZMNB3F.js";import{kn as a,m as o,p as s,x as c}from"./common-Be4p2bm6.js";import{t as l}from"./keys-CIqUg3Jv.js";import{a as u}from"./config.constants-17QBQ_kF.js";import{f as d,g as f,n as p}from"./keys-DakHO8Vr.js";import{o as m}from"./weather.constants-_S0I_w_Q.js";import{r as h}from"./devices.constants-HX5whDWr.js";var g=t(null),_=t(!1),v=t(null),y=300*1e3,b=e(()=>g.value!==null&&!g.value.hasOwner),x=e(()=>g.value?.onboardingCompleted??!1),S=()=>{g.value=null,v.value=null},C=()=>{let e=o(),t=async(t=!1)=>{if(!t&&g.value&&v.value&&Date.now()-v.value<y)return g.value;_.value=!0;try{let{data:t,error:n}=await e.client.GET(`/${i}/system/system/onboarding`);return n||!t?null:(g.value={hasOwner:t.data.has_owner,onboardingCompleted:t.data.onboarding_completed,devicesCount:t.data.devices_count,spacesCount:t.data.spaces_count,displaysCount:t.data.displays_count},v.value=Date.now(),g.value)}catch{return null}finally{_.value=!1}},n=()=>{g.value=null,v.value=null};return{status:g,isLoading:_,needsOnboarding:b,isOnboardingCompleted:x,fetchStatus:t,invalidate:n,markComplete:async()=>{try{let{error:r}=await e.client.POST(`/${i}/system/system/onboarding/complete`);return r?!1:(n(),await t(!0),!0)}catch{return!1}}}},w={ONBOARDING:`onboarding_module-onboarding`},T=function(e){return e[e.WELCOME=0]=`WELCOME`,e[e.ACCOUNT=1]=`ACCOUNT`,e[e.LOCATION=2]=`LOCATION`,e[e.INTEGRATIONS=3]=`INTEGRATIONS`,e[e.SPACES=4]=`SPACES`,e[e.COMPLETE=5]=`COMPLETE`,e}({}),E=[{searchToken:`Living Room`,category:`living_room`,icon:`mdi:sofa`,i18nKey:`livingRoom`},{searchToken:`Bedroom`,category:`bedroom`,icon:`mdi:bed`,i18nKey:`bedroom`},{searchToken:`Kitchen`,category:`kitchen`,icon:`mdi:countertop`,i18nKey:`kitchen`},{searchToken:`Bathroom`,category:`bathroom`,icon:`mdi:shower`,i18nKey:`bathroom`},{searchToken:`Toilet`,category:`toilet`,icon:`mdi:toilet`,i18nKey:`toilet`},{searchToken:`Office`,category:`office`,icon:`mdi:desk`,i18nKey:`office`},{searchToken:`Garage`,category:`garage`,icon:`mdi:garage`,i18nKey:`garage`},{searchToken:`Hallway`,category:`hallway`,icon:`mdi:door-open`,i18nKey:`hallway`},{searchToken:`Entryway`,category:`entryway`,icon:`mdi:door-sliding`,i18nKey:`entryway`},{searchToken:`Dining Room`,category:`dining_room`,icon:`mdi:silverware-fork-knife`,i18nKey:`diningRoom`},{searchToken:`Laundry`,category:`laundry`,icon:`mdi:washing-machine`,i18nKey:`laundry`},{searchToken:`Nursery`,category:`nursery`,icon:`mdi:baby-carriage`,i18nKey:`nursery`},{searchToken:`Guest Room`,category:`guest_room`,icon:`mdi:bed-outline`,i18nKey:`guestRoom`},{searchToken:`Storage`,category:`storage`,icon:`mdi:package-variant-closed`,i18nKey:`storage`},{searchToken:`Workshop`,category:`workshop`,icon:`mdi:hammer-wrench`,i18nKey:`workshop`}],D=t(T.WELCOME),O=t(!1),k=t(!1),A=t(!1),j=t(!1),M=t(0),N=r({username:``,password:``,confirmPassword:``,email:``,firstName:``,lastName:``}),P=r({city:``,latitude:null,longitude:null,timezone:``}),F=r([]),I=r(new Set),L=r([]),R=r({}),z={},B=null,V=null,H=()=>{let{t}=n(),r=o(),g=s(),_=c(),v=_.getStore(l),y=_.getStore(p),{invalidate:b,markComplete:x}=C(),S=e(()=>D.value===T.COMPLETE),w=()=>{D.value<T.COMPLETE&&(D.value+=1)},H=()=>{D.value>T.WELCOME&&--D.value},U=async()=>{if(A.value)return!0;O.value=!0;try{return k.value||=(await v.register({data:{username:N.username,password:N.password,firstName:N.firstName,lastName:N.lastName,email:N.email||void 0}}),!0),await v.create({data:{username:N.username,password:N.password}}),A.value=!0,N.password=``,N.confirmPassword=``,b(),!0}catch{return g.error(t(`onboardingModule.account.messages.error`)),!1}finally{O.value=!1}},W=e(()=>P.latitude!==null&&P.longitude!==null),G=async()=>{if(j.value||P.latitude===null||P.longitude===null)return!0;try{if(B&&V&&(V.latitude!==P.latitude||V.longitude!==P.longitude)&&(B=null,V=null),!B){let e={type:`weather-open-meteo`,name:P.city||`Home`,latitude:P.latitude,longitude:P.longitude},{data:t,error:n}=await r.client.POST(`/${i}/${m}/locations`,{body:{data:e}});if(n||(B=t?.data?.id??null,!B))return!1;V={latitude:P.latitude,longitude:P.longitude}}let{error:e}=await r.client.PATCH(`/${i}/${u}/config/module/{module}`,{params:{path:{module:`weather-module`}},body:{data:{type:`weather-module`,primary_location_id:B}}});return e?!1:(j.value=!0,!0)}catch{return!1}},K=async()=>{try{let{data:e,error:t}=await r.client.GET(`/${i}/${h}/devices`,{params:{query:{hidden:a.false}}});if(t||!e)return!1;let n=e.data;L.splice(0,L.length);for(let e of n)L.push({id:e.id,name:e.name,type:e.type,category:e.category??`generic`,description:e.description??null,roomId:e.room_id??null});return!0}catch{return!1}},q=e=>e.i18nKey?t(`onboardingModule.spaces.categories.${e.i18nKey}`):e.searchToken,J=e=>{let t=e.toLowerCase();return E.find(e=>t.includes(e.searchToken.toLowerCase()))??null},Y=()=>{let e=new Set(F.map(e=>e.name.toLowerCase()));for(let t of L){let n=J(t.name);if(!n)continue;let r=q(n);!e.has(r.toLowerCase())&&!I.has(r.toLowerCase())&&(F.push({name:r,category:n.category,icon:n.icon}),e.add(r.toLowerCase())),!(t.id in R)&&!I.has(r.toLowerCase())&&(R[t.id]=r)}},X=async()=>{if(F.length===0)return!0;try{for(;F.length>0;){let e=F[0],t=await y.add({data:{name:e.name,type:f.ROOM,category:e.category,icon:e.icon}});z[e.name]=t.id,M.value++,F.splice(0,1)}return!0}catch{return!1}},Z=async()=>{let e={};for(let[t,n]of Object.entries(R)){if(!n)continue;let r=z[n];r&&(e[r]||(e[r]=[]),e[r].push(t))}for(let[t,n]of Object.entries(e)){let{error:e}=await r.client.POST(`/${i}/${d}/spaces/{id}/assign`,{params:{path:{id:t}},body:{data:{device_ids:n,display_ids:[]}}});if(e)return!1}return!0};return{currentStep:D,isLoading:O,accountCreated:A,hasLocationData:W,accountData:N,locationData:P,spacesToCreate:F,dismissedSpaces:I,discoveredDevices:L,deviceAssignments:R,savedSpacesCount:M,isLastStep:S,nextStep:w,prevStep:H,createAccount:U,saveLocation:G,saveSpaces:X,fetchDevices:K,suggestSpacesFromDevices:Y,completeOnboarding:async()=>{O.value=!0;try{return P.latitude!==null&&P.longitude!==null&&!await G()?(g.error(t(`onboardingModule.location.messages.error`)),!1):F.length>0&&!await X()?(g.error(t(`onboardingModule.spaces.messages.error`)),!1):Object.values(R).some(e=>e!==null)&&!await Z()?(g.error(t(`onboardingModule.spaces.messages.assignmentError`)),!1):await x()?!0:(g.error(t(`onboardingModule.complete.messages.error`)),!1)}catch{return g.error(t(`onboardingModule.complete.messages.error`)),!1}finally{O.value=!1}},reset:()=>{D.value=T.WELCOME,k.value=!1,A.value=!1,j.value=!1,M.value=0,N.username=``,N.password=``,N.confirmPassword=``,N.email=``,N.firstName=``,N.lastName=``,P.city=``,P.latitude=null,P.longitude=null,P.timezone=``,F.splice(0),I.clear(),L.splice(0),Object.keys(R).forEach(e=>delete R[e]),Object.keys(z).forEach(e=>delete z[e]),B=null,V=null}}};export{S as a,w as i,H as n,C as o,T as r,E as t};
@@ -1 +1 @@
1
- import"./rolldown-runtime-QTnfLwEv.js";import{Ei as e,Er as t,Si as n,T as r,bi as i,ci as a}from"./icon-with-child-CgZMNB3F.js";import{_ as o,f as s,gt as c,ht as l,jr as u,l as d,la as f,ot as p,p as m,s as h,st as g,x as _,yt as v}from"./common-DQQtAVrj.js";import{r as y}from"./config-DycVi21V.js";import{r as b}from"./usePlugins-BLBNoCg5.js";import{t as x}from"./schemas.utils-CTG3Vn5a.js";import{t as S}from"./dist-DJgPCOr0.js";import{a as C,c as w,d as T,i as E,n as D,o as O,r as k,t as A}from"./keys-DgS2vm-E.js";import{i as j,t as M}from"./types-BFSU5l_h.js";import{n as N}from"./useDataSources-Bjd0snYh.js";import"./usePage-Bclmn7x9.js";var P=s(),F=()=>{let e=b(),{enabled:n}=y(),r=[`pageDetail`,`pageAddForm`,`pageEditForm`],i=[`pageSchema`,`pageAddFormSchema`,`pageEditFormSchema`,`pageCreateReqSchema`,`pageUpdateReqSchema`],a=[`configure`],o=t(()=>e.getPlugins().filter(e=>{if(!(e.modules===void 0||e.modules.includes(`dashboard-module`)))return!1;let t=a.some(t=>e.routes&&t in e.routes)??!0;return(e.elements??[]).some(e=>{if(!(e.modules===void 0||e.modules.includes(`dashboard-module`)))return!1;let n=r.length===0||!!e.components&&r.some(t=>e.components&&t in e.components),a=i.length===0||!!e.schemas&&i.some(t=>e.schemas&&t in e.schemas);return n||a||t})}));return{plugins:o,options:t(()=>S(o.value.flatMap(e=>(e.elements??[]).filter(e=>e.modules===void 0||e.modules.includes(`dashboard-module`)).map(t=>({value:t.type,label:t.name?.trim()?t.name:e.name,disabled:!n(e.type)}))),[e=>e.label],[`asc`])),getByPluginType:e=>o.value.find(t=>t.type===e),getByType:e=>o.value.find(t=>(t.elements??[]).some(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`dashboard-module`)))),getElement:e=>{for(let t of o.value){let n=(t.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`dashboard-module`)));if(n)return n}}}},I=()=>{let e=_().getStore(D),{firstLoad:n,semaphore:r}=f(e);return{pages:t(()=>e.findAll().filter(e=>!e.draft)),areLoading:t(()=>!!r.value.fetching.items||!n.value),loaded:t(()=>n.value),fetchPages:async()=>{await e.fetch()}}},L={search:void 0,types:[],displays:[]},ee={by:`title`,dir:`asc`},te=()=>{let e=_().getStore(D),{firstLoad:r,semaphore:i}=f(e),{filters:o,sort:s,pagination:c,reset:l}=h({key:`${w}:pages:list`,filters:{schema:j,defaults:L},sort:{defaults:[ee]},pagination:{defaults:{page:1,size:10}},syncQuery:!0,version:1}),u=t(()=>o.value.search!==L.search||!(0,P.isEqual)(o.value.types,L.types)||!(0,P.isEqual)(o.value.displays,L.displays)),d=n(c.value.size||10),p=n(c.value.page||1),m=n(s.value.length>0?s.value[0]?.by:void 0),g=n(s.value.length>0?s.value[0]?.dir??null:null),v=t(()=>S(e.findAll().filter(e=>!e.draft&&(!o.value.search||e.title.toLowerCase().includes(o.value.search.toLowerCase()))&&(o.value.types.length===0||o.value.types.includes(e.type))&&(o.value.displays.length===0||o.value.displays.includes(`all`)&&(e.displays===null||e.displays.length===0)||e.displays!==null&&e.displays.length>0&&e.displays.some(e=>o.value.displays.includes(e)))),[e=>e[m.value]??``],[g.value===`asc`?`asc`:`desc`])),y=t(()=>{let e=(p.value-1)*d.value,t=e+d.value;return v.value.slice(e,t)}),b=async()=>{await e.fetch()},x=t(()=>i.value.fetching.items||!r.value),C=t(()=>r.value),T=t(()=>e.findAll().filter(e=>!e.draft).length);return a(()=>c.value,e=>{p.value=e.page??1,d.value=e.size??10},{deep:!0}),a(()=>p.value,e=>{c.value.page=e}),a(()=>d.value,e=>{c.value.size=e}),a(()=>g.value,e=>{m.value===void 0||e===null?s.value=[]:s.value=[{by:m.value,dir:e}]}),a(()=>m.value,e=>{e===void 0?s.value=[]:s.value=[{by:e,dir:g.value}]}),{pages:v,pagesPaginated:y,totalRows:T,areLoading:x,loaded:C,fetchPages:b,filters:o,filtersActive:u,paginateSize:d,paginatePage:p,sortBy:m,sortDir:g,resetFilter:l}},R=()=>{let{t:e}=r(),t=m(),n=_().getStore(D);return{remove:async r=>{let i=n.findById(r);if(i===null)throw new C(`Something went wrong, page can't be loaded`);u.confirm(e(`dashboardModule.texts.pages.confirmRemove`,{page:i.title}),e(`dashboardModule.headings.pages.remove`),{confirmButtonText:e(`dashboardModule.buttons.yes.title`),cancelButtonText:e(`dashboardModule.buttons.no.title`),type:`warning`}).then(async()=>{try{await n.remove({id:i.id}),t.success(e(`dashboardModule.messages.pages.removed`,{page:i.title}))}catch(n){if(n instanceof E&&n.code===404){let n=e(`dashboardModule.messages.pages.notFound`,{page:i.title});t.error(n)}else if(n instanceof E&&n.code===422)t.error(n.message);else{let n=e(`dashboardModule.messages.pages.notRemoved`,{page:i.title});t.error(n)}}}).catch(()=>{t.info(e(`dashboardModule.messages.pages.removeCanceled`,{page:i.title}))})},bulkRemove:async r=>{if(r.length!==0){try{await u.confirm(e(`dashboardModule.texts.pages.confirmBulkRemove`,{count:r.length}),e(`dashboardModule.headings.pages.bulkRemove`),{confirmButtonText:e(`dashboardModule.buttons.yes.title`),cancelButtonText:e(`dashboardModule.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(`dashboardModule.messages.pages.bulkRemoved`,{count:i.succeeded.length})),i.failed.length>0&&t.error(e(`dashboardModule.messages.pages.bulkRemoveFailed`,{count:i.failed.length}))}catch{t.error(e(`dashboardModule.messages.pages.bulkRemoveFailed`,{count:r.length}))}}}}},z=({id:e})=>{let n=_().getStore(D);return{icon:t(()=>`mdi:${n.findById(e)?.icon??`view-dashboard`}`)}},B=c({id:v().uuid().optional(),type:v().trim().nonempty(),title:v().trim().nonempty(),icon:v().trim().transform(e=>e===``?null:e).nullable().optional(),order:l(),showTopBar:g().optional(),displays:p(v().uuid()).nullable().optional()}),V=c({id:v().uuid(),type:v().trim().nonempty(),title:v().trim().nonempty().optional(),icon:v().trim().transform(e=>e===``?null:e).nullable().optional(),order:l().optional(),showTopBar:g().optional(),displays:p(v().uuid()).nullable().optional()}),H=({type:e})=>{let{getByType:n}=F(),r=t(()=>n(e));return{plugin:r,element:t(()=>(r.value?.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`dashboard-module`))))}},U=({id:t,type:s})=>{let c=_(),{element:l}=H({type:s}),u=c.getStore(D),{t:f}=r(),p=m(),h=o(),g=n(T.NONE),v,y=i({...x(l.value?.schemas?.pageAddFormSchema||B),id:t,type:s,title:``,icon:``,order:0,showTopBar:!0}),b=d(e(y)),S=n(void 0),C=n(!1),w=async()=>{if(S.value.clearValidate(),!await S.value.validate())throw new O(`Form not valid`);let e=(l.value?.schemas?.pageAddFormSchema||B).safeParse(y);if(!e.success)throw h.error(`Schema validation failed with:`,e.error),new O(`Failed to validate create page model.`);g.value=T.WORKING;let n=f(`dashboardModule.messages.pages.notCreated`,{page:y.title});try{await u.add({id:t,draft:!1,data:{...e.data,type:s}})}catch(e){throw g.value=T.ERROR,v=window.setTimeout(k,2e3),e instanceof E&&e.code===422?p.error(e.message):p.error(n),e}return g.value=T.OK,v=window.setTimeout(k,2e3),p.success(f(`dashboardModule.messages.pages.created`,{page:y.title})),`added`},k=()=>{window.clearTimeout(v),g.value=T.NONE};return a(y,()=>{C.value=!(0,P.isEqual)(e(y),b)}),{model:y,formEl:S,formChanged:C,submit:w,clear:k,formResult:g}},W=({page:t,messages:s})=>{let c=_(),{element:l}=H({type:t.type}),u=c.getStore(D),{t:f}=r(),p=m(),h=o(),g=n(T.NONE),v,y=i(t),b=d(e(y)),x=n(void 0),S=n(!1),C=async()=>{let n=t.draft,r=s&&s.error?s.error:t.draft?f(`dashboardModule.messages.pages.notCreated`,{page:t.title}):f(`dashboardModule.messages.pages.notEdited`,{page:t.title});if(x.value.clearValidate(),!await x.value.validate())throw new O(`Form not valid`);let i=(l.value?.schemas?.pageEditFormSchema||V).safeParse(y);if(!i.success)throw h.error(`Schema validation failed with:`,i.error),new O(`Failed to validate edit page model.`);g.value=T.WORKING;try{let e;e=await u.edit({id:t.id,data:{...i.data,type:t.type}}),t.draft&&(e=await u.save({id:t.id})),e&&Object.assign(y,e)}catch(e){throw g.value=T.ERROR,v=window.setTimeout(w,2e3),e instanceof E&&e.code===422?p.error(e.message):p.error(r),e}return g.value=T.OK,v=window.setTimeout(w,2e3),n?(p.success(f(s&&s.success?s.success:`dashboardModule.messages.pages.created`,{page:t.title})),`added`):(p.success(f(s&&s.success?s.success:`dashboardModule.messages.pages.edited`,{page:t.title})),S.value=!1,b=d(e(y)),`saved`)},w=()=>{window.clearTimeout(v),g.value=T.NONE};return a(y,()=>{S.value=!(0,P.isEqual)(e(y),b)}),{model:y,formEl:x,formChanged:S,submit:C,clear:w,formResult:g}},G=e=>{let n=_().getStore(k),{firstLoad:r,semaphore:i}=f(n);return{tiles:t(()=>n.findForParent(e.parent,e.parentId)),areLoading:t(()=>i.value.fetching.items.includes(e.parentId)?!0:!r.value.includes(e.parentId)&&i.value.fetching.items.includes(e.parentId)),loaded:t(()=>r.value.includes(e.parentId)),fetchTiles:async()=>{await n.fetch({parent:{type:e.parent,id:e.parentId}})}}},K=e=>{let{t}=r(),n=m(),i=_().getStore(k);return{findById:(e,t)=>i.findById(e,t),edit:async e=>i.edit(e),save:async e=>i.save(e),remove:async r=>{let a=i.findById(e.parent,r);if(a===null)throw new C(`Something went wrong, tile can't be loaded`);u.confirm(t(`dashboardModule.texts.tiles.confirmRemove`),t(`dashboardModule.headings.tiles.remove`),{confirmButtonText:t(`dashboardModule.buttons.yes.title`),cancelButtonText:t(`dashboardModule.buttons.no.title`),type:`warning`}).then(async()=>{try{await i.remove({id:a.id,parent:{type:e.parent,id:e.parentId}}),n.success(t(`dashboardModule.messages.tiles.removed`))}catch(e){if(e instanceof E&&e.code===404){let e=t(`dashboardModule.messages.tiles.notFound`);n.error(e)}else if(e instanceof E&&e.code===422)n.error(e.message);else{let e=t(`dashboardModule.messages.tiles.notRemoved`);n.error(e)}}}).catch(()=>{n.info(t(`dashboardModule.messages.tiles.removeCanceled`))})},removeDirectly:async e=>i.remove(e)}},q=c({id:v().uuid().optional(),type:v().trim().nonempty(),row:l(),col:l(),rowSpan:l(),colSpan:l(),hidden:g()}),J=c({id:v().uuid(),type:v().trim().nonempty(),row:l().optional(),col:l().optional(),rowSpan:l().optional(),colSpan:l().optional(),hidden:g()}),Y=({id:t,parent:s,parentId:c,type:l,onlyDraft:u=!1})=>{let f=_(),{element:p}=N({type:l}),h=f.getStore(k),{t:g}=r(),v=m(),y=o(),b=n(T.NONE),S,C=i({...x(p.value?.schemas?.tileAddFormSchema||q),id:t,type:l,row:1,col:1,rowSpan:1,colSpan:1,hidden:!1}),w=d(e(C)),D=n(void 0),A=n(!1),j=async()=>{if(D.value.clearValidate(),!await D.value.validate())throw new O(`Form not valid`);let e=(p.value?.schemas?.tileAddFormSchema||q).safeParse(C);if(!e.success)throw y.error(`Schema validation failed with:`,e.error),new O(`Failed to validate create tile model.`);b.value=T.WORKING;let n=g(`dashboardModule.messages.tiles.notCreated`);try{await h.add({id:t,parent:{type:s,id:c},draft:u,data:{...e.data,type:l}})}catch(e){throw b.value=T.ERROR,S=window.setTimeout(M,2e3),e instanceof E&&e.code===422?v.error(e.message):v.error(n),e}return b.value=T.OK,S=window.setTimeout(M,2e3),v.success(g(`dashboardModule.messages.tiles.created`)),`added`},M=()=>{window.clearTimeout(S),b.value=T.NONE};return a(C,()=>{A.value=!(0,P.isEqual)(e(C),w)}),{model:C,formEl:D,formChanged:A,submit:j,clear:M,formResult:b}},X=({tile:t,messages:s,onlyDraft:c=!1})=>{let l=_(),{element:u}=N({type:t.type}),f=l.getStore(k),{t:p}=r(),h=m(),g=o(),v=n(T.NONE),y,b=i(t),x=d(e(b)),S=n(void 0),C=n(!1),w=async()=>{let n=t.draft,r=s&&s.error?s.error:t.draft&&!c?p(`dashboardModule.messages.tiles.notCreated`):p(`dashboardModule.messages.tiles.notEdited`);if(S.value.clearValidate(),!await S.value.validate())throw new O(`Form not valid`);let i=(u.value?.schemas?.tileEditFormSchema||J).safeParse(b);if(!i.success)throw g.error(`Schema validation failed with:`,i.error),new O(`Failed to validate create tile model.`);v.value=T.WORKING;try{await f.edit({id:t.id,parent:t.parent,data:{...i.data,type:t.type}}),t.draft&&!c&&await f.save({id:t.id,parent:t.parent})}catch(e){throw v.value=T.ERROR,y=window.setTimeout(D,2e3),e instanceof E&&e.code===422?h.error(e.message):h.error(r),e}return v.value=T.OK,y=window.setTimeout(D,2e3),n&&!c?(h.success(p(s&&s.success?s.success:`dashboardModule.messages.tiles.created`)),`added`):(h.success(p(s&&s.success?s.success:`dashboardModule.messages.tiles.edited`)),C.value=!1,x=d(e(b)),`saved`)},D=()=>{window.clearTimeout(y),v.value=T.NONE};return a(b,()=>{C.value=!(0,P.isEqual)(e(b),x)}),{model:b,formEl:S,formChanged:C,submit:w,clear:D,formResult:v}},Z=e=>{let{id:n}=e,r=_().getStore(A),{data:i,semaphore:a}=f(r);return{dataSource:t(()=>n===null?null:n in i.value?i.value[n]:null),isLoading:t(()=>a.value.fetching.item.includes(n)?!0:(n in i.value?i.value[n]:null)===null&&a.value.fetching.items.includes(e.parentId)),fetchDataSource:async()=>{(n in i.value?i.value[n]:null)?.draft||await r.get({id:n,parent:{type:e.parent,id:e.parentId}})}}},Q=c({id:v().uuid().optional(),type:v().trim().nonempty()}),$=c({id:v().uuid(),type:v().trim().nonempty()}),ne=({id:t,type:s,parent:c,parentId:l,onlyDraft:u=!1})=>{let f=_(),{element:p}=M({type:s}),h=f.getStore(A),{t:g}=r(),v=m(),y=o(),b=n(T.NONE),S,C=i({...x(p.value?.schemas?.dataSourceAddFormSchema||Q),id:t,type:s}),w=d(e(C)),D=n(void 0),k=n(!1),j=async()=>{if(D.value.clearValidate(),!await D.value.validate())throw new O(`Form not valid`);let e=(p.value?.schemas?.dataSourceAddFormSchema||Q).safeParse(C);if(!e.success)throw y.error(`Schema validation failed with:`,e.error),new O(`Failed to validate create data source model.`);b.value=T.WORKING;let n=g(`dashboardModule.messages.dataSources.notCreated`);try{await h.add({id:t,parent:{type:c,id:l},draft:u,data:{...e.data,type:s}})}catch(e){throw b.value=T.ERROR,S=window.setTimeout(N,2e3),e instanceof E&&e.code===422?v.error(e.message):v.error(n),e}return b.value=T.OK,S=window.setTimeout(N,2e3),v.success(g(`dashboardModule.messages.dataSources.created`)),`added`},N=()=>{window.clearTimeout(S),b.value=T.NONE};return a(C,()=>{k.value=!(0,P.isEqual)(e(C),w)}),{model:C,formEl:D,formChanged:k,submit:j,clear:N,formResult:b}},re=({dataSource:t,messages:s,onlyDraft:c=!1})=>{let l=_(),{element:u}=M({type:t.type}),f=l.getStore(A),{t:p}=r(),h=m(),g=o(),v=n(T.NONE),y,b=i(t),x=d(e(b)),S=n(void 0),C=n(!1),w=async()=>{let n=t.draft,r=s&&s.error?s.error:t.draft&&!c?p(`dashboardModule.messages.dataSources.notCreated`):p(`dashboardModule.messages.dataSources.notEdited`);if(S.value.clearValidate(),!await S.value.validate())throw new O(`Form not valid`);let i=(u.value?.schemas?.dataSourceEditFormSchema||$).safeParse(b);if(!i.success)throw g.error(`Schema validation failed with:`,i.error),new O(`Failed to validate create dataSource model.`);v.value=T.WORKING;try{await f.edit({id:t.id,parent:t.parent,data:{...i.data,type:t.type}}),t.draft&&!c&&await f.save({id:t.id,parent:t.parent})}catch(e){throw v.value=T.ERROR,y=window.setTimeout(D,2e3),e instanceof E&&e.code===422?h.error(e.message):h.error(r),e}return v.value=T.OK,y=window.setTimeout(D,2e3),n&&!c?(h.success(p(s&&s.success?s.success:`dashboardModule.messages.dataSources.created`)),`added`):(h.success(p(s&&s.success?s.success:`dashboardModule.messages.dataSources.edited`)),C.value=!1,x=d(e(b)),`saved`)},D=()=>{window.clearTimeout(y),v.value=T.NONE};return a(b,()=>{C.value=!(0,P.isEqual)(e(b),x)}),{model:b,formEl:S,formChanged:C,submit:w,clear:D,formResult:v}};export{z as _,Z as a,I as b,q as c,G as d,W as f,V as g,B as h,$ as i,J as l,H as m,ne as n,X as o,U as p,Q as r,Y as s,re as t,K as u,R as v,F as x,te as y};
1
+ import"./rolldown-runtime-QTnfLwEv.js";import{Ei as e,Er as t,Si as n,T as r,bi as i,ci as a}from"./icon-with-child-CgZMNB3F.js";import{_ as o,f as s,gt as c,ht as l,jr as u,l as d,la as f,ot as p,p as m,s as h,st as g,x as _,yt as v}from"./common-Be4p2bm6.js";import{r as y}from"./config-BAg35nXl.js";import{r as b}from"./usePlugins-D2-Pd2HX.js";import{t as x}from"./schemas.utils-gKqZ9UX4.js";import{t as S}from"./dist-DJgPCOr0.js";import{a as C,c as w,d as T,i as E,n as D,o as O,r as k,t as A}from"./keys-DgS2vm-E.js";import{i as j,t as M}from"./types-C4XLI6VR.js";import{n as N}from"./useDataSources-Ct4AwM4K.js";import"./usePage-DccGV-jP.js";var P=s(),F=()=>{let e=b(),{enabled:n}=y(),r=[`pageDetail`,`pageAddForm`,`pageEditForm`],i=[`pageSchema`,`pageAddFormSchema`,`pageEditFormSchema`,`pageCreateReqSchema`,`pageUpdateReqSchema`],a=[`configure`],o=t(()=>e.getPlugins().filter(e=>{if(!(e.modules===void 0||e.modules.includes(`dashboard-module`)))return!1;let t=a.some(t=>e.routes&&t in e.routes)??!0;return(e.elements??[]).some(e=>{if(!(e.modules===void 0||e.modules.includes(`dashboard-module`)))return!1;let n=r.length===0||!!e.components&&r.some(t=>e.components&&t in e.components),a=i.length===0||!!e.schemas&&i.some(t=>e.schemas&&t in e.schemas);return n||a||t})}));return{plugins:o,options:t(()=>S(o.value.flatMap(e=>(e.elements??[]).filter(e=>e.modules===void 0||e.modules.includes(`dashboard-module`)).map(t=>({value:t.type,label:t.name?.trim()?t.name:e.name,disabled:!n(e.type)}))),[e=>e.label],[`asc`])),getByPluginType:e=>o.value.find(t=>t.type===e),getByType:e=>o.value.find(t=>(t.elements??[]).some(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`dashboard-module`)))),getElement:e=>{for(let t of o.value){let n=(t.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`dashboard-module`)));if(n)return n}}}},I=()=>{let e=_().getStore(D),{firstLoad:n,semaphore:r}=f(e);return{pages:t(()=>e.findAll().filter(e=>!e.draft)),areLoading:t(()=>!!r.value.fetching.items||!n.value),loaded:t(()=>n.value),fetchPages:async()=>{await e.fetch()}}},L={search:void 0,types:[],displays:[]},ee={by:`title`,dir:`asc`},te=()=>{let e=_().getStore(D),{firstLoad:r,semaphore:i}=f(e),{filters:o,sort:s,pagination:c,reset:l}=h({key:`${w}:pages:list`,filters:{schema:j,defaults:L},sort:{defaults:[ee]},pagination:{defaults:{page:1,size:10}},syncQuery:!0,version:1}),u=t(()=>o.value.search!==L.search||!(0,P.isEqual)(o.value.types,L.types)||!(0,P.isEqual)(o.value.displays,L.displays)),d=n(c.value.size||10),p=n(c.value.page||1),m=n(s.value.length>0?s.value[0]?.by:void 0),g=n(s.value.length>0?s.value[0]?.dir??null:null),v=t(()=>S(e.findAll().filter(e=>!e.draft&&(!o.value.search||e.title.toLowerCase().includes(o.value.search.toLowerCase()))&&(o.value.types.length===0||o.value.types.includes(e.type))&&(o.value.displays.length===0||o.value.displays.includes(`all`)&&(e.displays===null||e.displays.length===0)||e.displays!==null&&e.displays.length>0&&e.displays.some(e=>o.value.displays.includes(e)))),[e=>e[m.value]??``],[g.value===`asc`?`asc`:`desc`])),y=t(()=>{let e=(p.value-1)*d.value,t=e+d.value;return v.value.slice(e,t)}),b=async()=>{await e.fetch()},x=t(()=>i.value.fetching.items||!r.value),C=t(()=>r.value),T=t(()=>e.findAll().filter(e=>!e.draft).length);return a(()=>c.value,e=>{p.value=e.page??1,d.value=e.size??10},{deep:!0}),a(()=>p.value,e=>{c.value.page=e}),a(()=>d.value,e=>{c.value.size=e}),a(()=>g.value,e=>{m.value===void 0||e===null?s.value=[]:s.value=[{by:m.value,dir:e}]}),a(()=>m.value,e=>{e===void 0?s.value=[]:s.value=[{by:e,dir:g.value}]}),{pages:v,pagesPaginated:y,totalRows:T,areLoading:x,loaded:C,fetchPages:b,filters:o,filtersActive:u,paginateSize:d,paginatePage:p,sortBy:m,sortDir:g,resetFilter:l}},R=()=>{let{t:e}=r(),t=m(),n=_().getStore(D);return{remove:async r=>{let i=n.findById(r);if(i===null)throw new C(`Something went wrong, page can't be loaded`);u.confirm(e(`dashboardModule.texts.pages.confirmRemove`,{page:i.title}),e(`dashboardModule.headings.pages.remove`),{confirmButtonText:e(`dashboardModule.buttons.yes.title`),cancelButtonText:e(`dashboardModule.buttons.no.title`),type:`warning`}).then(async()=>{try{await n.remove({id:i.id}),t.success(e(`dashboardModule.messages.pages.removed`,{page:i.title}))}catch(n){if(n instanceof E&&n.code===404){let n=e(`dashboardModule.messages.pages.notFound`,{page:i.title});t.error(n)}else if(n instanceof E&&n.code===422)t.error(n.message);else{let n=e(`dashboardModule.messages.pages.notRemoved`,{page:i.title});t.error(n)}}}).catch(()=>{t.info(e(`dashboardModule.messages.pages.removeCanceled`,{page:i.title}))})},bulkRemove:async r=>{if(r.length!==0){try{await u.confirm(e(`dashboardModule.texts.pages.confirmBulkRemove`,{count:r.length}),e(`dashboardModule.headings.pages.bulkRemove`),{confirmButtonText:e(`dashboardModule.buttons.yes.title`),cancelButtonText:e(`dashboardModule.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(`dashboardModule.messages.pages.bulkRemoved`,{count:i.succeeded.length})),i.failed.length>0&&t.error(e(`dashboardModule.messages.pages.bulkRemoveFailed`,{count:i.failed.length}))}catch{t.error(e(`dashboardModule.messages.pages.bulkRemoveFailed`,{count:r.length}))}}}}},z=({id:e})=>{let n=_().getStore(D);return{icon:t(()=>`mdi:${n.findById(e)?.icon??`view-dashboard`}`)}},B=c({id:v().uuid().optional(),type:v().trim().nonempty(),title:v().trim().nonempty(),icon:v().trim().transform(e=>e===``?null:e).nullable().optional(),order:l(),showTopBar:g().optional(),displays:p(v().uuid()).nullable().optional()}),V=c({id:v().uuid(),type:v().trim().nonempty(),title:v().trim().nonempty().optional(),icon:v().trim().transform(e=>e===``?null:e).nullable().optional(),order:l().optional(),showTopBar:g().optional(),displays:p(v().uuid()).nullable().optional()}),H=({type:e})=>{let{getByType:n}=F(),r=t(()=>n(e));return{plugin:r,element:t(()=>(r.value?.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`dashboard-module`))))}},U=({id:t,type:s})=>{let c=_(),{element:l}=H({type:s}),u=c.getStore(D),{t:f}=r(),p=m(),h=o(),g=n(T.NONE),v,y=i({...x(l.value?.schemas?.pageAddFormSchema||B),id:t,type:s,title:``,icon:``,order:0,showTopBar:!0}),b=d(e(y)),S=n(void 0),C=n(!1),w=async()=>{if(S.value.clearValidate(),!await S.value.validate())throw new O(`Form not valid`);let e=(l.value?.schemas?.pageAddFormSchema||B).safeParse(y);if(!e.success)throw h.error(`Schema validation failed with:`,e.error),new O(`Failed to validate create page model.`);g.value=T.WORKING;let n=f(`dashboardModule.messages.pages.notCreated`,{page:y.title});try{await u.add({id:t,draft:!1,data:{...e.data,type:s}})}catch(e){throw g.value=T.ERROR,v=window.setTimeout(k,2e3),e instanceof E&&e.code===422?p.error(e.message):p.error(n),e}return g.value=T.OK,v=window.setTimeout(k,2e3),p.success(f(`dashboardModule.messages.pages.created`,{page:y.title})),`added`},k=()=>{window.clearTimeout(v),g.value=T.NONE};return a(y,()=>{C.value=!(0,P.isEqual)(e(y),b)}),{model:y,formEl:S,formChanged:C,submit:w,clear:k,formResult:g}},W=({page:t,messages:s})=>{let c=_(),{element:l}=H({type:t.type}),u=c.getStore(D),{t:f}=r(),p=m(),h=o(),g=n(T.NONE),v,y=i(t),b=d(e(y)),x=n(void 0),S=n(!1),C=async()=>{let n=t.draft,r=s&&s.error?s.error:t.draft?f(`dashboardModule.messages.pages.notCreated`,{page:t.title}):f(`dashboardModule.messages.pages.notEdited`,{page:t.title});if(x.value.clearValidate(),!await x.value.validate())throw new O(`Form not valid`);let i=(l.value?.schemas?.pageEditFormSchema||V).safeParse(y);if(!i.success)throw h.error(`Schema validation failed with:`,i.error),new O(`Failed to validate edit page model.`);g.value=T.WORKING;try{let e;e=await u.edit({id:t.id,data:{...i.data,type:t.type}}),t.draft&&(e=await u.save({id:t.id})),e&&Object.assign(y,e)}catch(e){throw g.value=T.ERROR,v=window.setTimeout(w,2e3),e instanceof E&&e.code===422?p.error(e.message):p.error(r),e}return g.value=T.OK,v=window.setTimeout(w,2e3),n?(p.success(f(s&&s.success?s.success:`dashboardModule.messages.pages.created`,{page:t.title})),`added`):(p.success(f(s&&s.success?s.success:`dashboardModule.messages.pages.edited`,{page:t.title})),S.value=!1,b=d(e(y)),`saved`)},w=()=>{window.clearTimeout(v),g.value=T.NONE};return a(y,()=>{S.value=!(0,P.isEqual)(e(y),b)}),{model:y,formEl:x,formChanged:S,submit:C,clear:w,formResult:g}},G=e=>{let n=_().getStore(k),{firstLoad:r,semaphore:i}=f(n);return{tiles:t(()=>n.findForParent(e.parent,e.parentId)),areLoading:t(()=>i.value.fetching.items.includes(e.parentId)?!0:!r.value.includes(e.parentId)&&i.value.fetching.items.includes(e.parentId)),loaded:t(()=>r.value.includes(e.parentId)),fetchTiles:async()=>{await n.fetch({parent:{type:e.parent,id:e.parentId}})}}},K=e=>{let{t}=r(),n=m(),i=_().getStore(k);return{findById:(e,t)=>i.findById(e,t),edit:async e=>i.edit(e),save:async e=>i.save(e),remove:async r=>{let a=i.findById(e.parent,r);if(a===null)throw new C(`Something went wrong, tile can't be loaded`);u.confirm(t(`dashboardModule.texts.tiles.confirmRemove`),t(`dashboardModule.headings.tiles.remove`),{confirmButtonText:t(`dashboardModule.buttons.yes.title`),cancelButtonText:t(`dashboardModule.buttons.no.title`),type:`warning`}).then(async()=>{try{await i.remove({id:a.id,parent:{type:e.parent,id:e.parentId}}),n.success(t(`dashboardModule.messages.tiles.removed`))}catch(e){if(e instanceof E&&e.code===404){let e=t(`dashboardModule.messages.tiles.notFound`);n.error(e)}else if(e instanceof E&&e.code===422)n.error(e.message);else{let e=t(`dashboardModule.messages.tiles.notRemoved`);n.error(e)}}}).catch(()=>{n.info(t(`dashboardModule.messages.tiles.removeCanceled`))})},removeDirectly:async e=>i.remove(e)}},q=c({id:v().uuid().optional(),type:v().trim().nonempty(),row:l(),col:l(),rowSpan:l(),colSpan:l(),hidden:g()}),J=c({id:v().uuid(),type:v().trim().nonempty(),row:l().optional(),col:l().optional(),rowSpan:l().optional(),colSpan:l().optional(),hidden:g()}),Y=({id:t,parent:s,parentId:c,type:l,onlyDraft:u=!1})=>{let f=_(),{element:p}=N({type:l}),h=f.getStore(k),{t:g}=r(),v=m(),y=o(),b=n(T.NONE),S,C=i({...x(p.value?.schemas?.tileAddFormSchema||q),id:t,type:l,row:1,col:1,rowSpan:1,colSpan:1,hidden:!1}),w=d(e(C)),D=n(void 0),A=n(!1),j=async()=>{if(D.value.clearValidate(),!await D.value.validate())throw new O(`Form not valid`);let e=(p.value?.schemas?.tileAddFormSchema||q).safeParse(C);if(!e.success)throw y.error(`Schema validation failed with:`,e.error),new O(`Failed to validate create tile model.`);b.value=T.WORKING;let n=g(`dashboardModule.messages.tiles.notCreated`);try{await h.add({id:t,parent:{type:s,id:c},draft:u,data:{...e.data,type:l}})}catch(e){throw b.value=T.ERROR,S=window.setTimeout(M,2e3),e instanceof E&&e.code===422?v.error(e.message):v.error(n),e}return b.value=T.OK,S=window.setTimeout(M,2e3),v.success(g(`dashboardModule.messages.tiles.created`)),`added`},M=()=>{window.clearTimeout(S),b.value=T.NONE};return a(C,()=>{A.value=!(0,P.isEqual)(e(C),w)}),{model:C,formEl:D,formChanged:A,submit:j,clear:M,formResult:b}},X=({tile:t,messages:s,onlyDraft:c=!1})=>{let l=_(),{element:u}=N({type:t.type}),f=l.getStore(k),{t:p}=r(),h=m(),g=o(),v=n(T.NONE),y,b=i(t),x=d(e(b)),S=n(void 0),C=n(!1),w=async()=>{let n=t.draft,r=s&&s.error?s.error:t.draft&&!c?p(`dashboardModule.messages.tiles.notCreated`):p(`dashboardModule.messages.tiles.notEdited`);if(S.value.clearValidate(),!await S.value.validate())throw new O(`Form not valid`);let i=(u.value?.schemas?.tileEditFormSchema||J).safeParse(b);if(!i.success)throw g.error(`Schema validation failed with:`,i.error),new O(`Failed to validate create tile model.`);v.value=T.WORKING;try{await f.edit({id:t.id,parent:t.parent,data:{...i.data,type:t.type}}),t.draft&&!c&&await f.save({id:t.id,parent:t.parent})}catch(e){throw v.value=T.ERROR,y=window.setTimeout(D,2e3),e instanceof E&&e.code===422?h.error(e.message):h.error(r),e}return v.value=T.OK,y=window.setTimeout(D,2e3),n&&!c?(h.success(p(s&&s.success?s.success:`dashboardModule.messages.tiles.created`)),`added`):(h.success(p(s&&s.success?s.success:`dashboardModule.messages.tiles.edited`)),C.value=!1,x=d(e(b)),`saved`)},D=()=>{window.clearTimeout(y),v.value=T.NONE};return a(b,()=>{C.value=!(0,P.isEqual)(e(b),x)}),{model:b,formEl:S,formChanged:C,submit:w,clear:D,formResult:v}},Z=e=>{let{id:n}=e,r=_().getStore(A),{data:i,semaphore:a}=f(r);return{dataSource:t(()=>n===null?null:n in i.value?i.value[n]:null),isLoading:t(()=>a.value.fetching.item.includes(n)?!0:(n in i.value?i.value[n]:null)===null&&a.value.fetching.items.includes(e.parentId)),fetchDataSource:async()=>{(n in i.value?i.value[n]:null)?.draft||await r.get({id:n,parent:{type:e.parent,id:e.parentId}})}}},Q=c({id:v().uuid().optional(),type:v().trim().nonempty()}),$=c({id:v().uuid(),type:v().trim().nonempty()}),ne=({id:t,type:s,parent:c,parentId:l,onlyDraft:u=!1})=>{let f=_(),{element:p}=M({type:s}),h=f.getStore(A),{t:g}=r(),v=m(),y=o(),b=n(T.NONE),S,C=i({...x(p.value?.schemas?.dataSourceAddFormSchema||Q),id:t,type:s}),w=d(e(C)),D=n(void 0),k=n(!1),j=async()=>{if(D.value.clearValidate(),!await D.value.validate())throw new O(`Form not valid`);let e=(p.value?.schemas?.dataSourceAddFormSchema||Q).safeParse(C);if(!e.success)throw y.error(`Schema validation failed with:`,e.error),new O(`Failed to validate create data source model.`);b.value=T.WORKING;let n=g(`dashboardModule.messages.dataSources.notCreated`);try{await h.add({id:t,parent:{type:c,id:l},draft:u,data:{...e.data,type:s}})}catch(e){throw b.value=T.ERROR,S=window.setTimeout(N,2e3),e instanceof E&&e.code===422?v.error(e.message):v.error(n),e}return b.value=T.OK,S=window.setTimeout(N,2e3),v.success(g(`dashboardModule.messages.dataSources.created`)),`added`},N=()=>{window.clearTimeout(S),b.value=T.NONE};return a(C,()=>{k.value=!(0,P.isEqual)(e(C),w)}),{model:C,formEl:D,formChanged:k,submit:j,clear:N,formResult:b}},re=({dataSource:t,messages:s,onlyDraft:c=!1})=>{let l=_(),{element:u}=M({type:t.type}),f=l.getStore(A),{t:p}=r(),h=m(),g=o(),v=n(T.NONE),y,b=i(t),x=d(e(b)),S=n(void 0),C=n(!1),w=async()=>{let n=t.draft,r=s&&s.error?s.error:t.draft&&!c?p(`dashboardModule.messages.dataSources.notCreated`):p(`dashboardModule.messages.dataSources.notEdited`);if(S.value.clearValidate(),!await S.value.validate())throw new O(`Form not valid`);let i=(u.value?.schemas?.dataSourceEditFormSchema||$).safeParse(b);if(!i.success)throw g.error(`Schema validation failed with:`,i.error),new O(`Failed to validate create dataSource model.`);v.value=T.WORKING;try{await f.edit({id:t.id,parent:t.parent,data:{...i.data,type:t.type}}),t.draft&&!c&&await f.save({id:t.id,parent:t.parent})}catch(e){throw v.value=T.ERROR,y=window.setTimeout(D,2e3),e instanceof E&&e.code===422?h.error(e.message):h.error(r),e}return v.value=T.OK,y=window.setTimeout(D,2e3),n&&!c?(h.success(p(s&&s.success?s.success:`dashboardModule.messages.dataSources.created`)),`added`):(h.success(p(s&&s.success?s.success:`dashboardModule.messages.dataSources.edited`)),C.value=!1,x=d(e(b)),`saved`)},D=()=>{window.clearTimeout(y),v.value=T.NONE};return a(b,()=>{C.value=!(0,P.isEqual)(e(b),x)}),{model:b,formEl:S,formChanged:C,submit:w,clear:D,formResult:v}};export{z as _,Z as a,I as b,q as c,G as d,W as f,V as g,B as h,$ as i,J as l,H as m,ne as n,X as o,U as p,Q as r,Y as s,re as t,K as u,R as v,F as x,te as y};
@@ -0,0 +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-Be4p2bm6.js";import{r as L}from"./config-BAg35nXl.js";import{r as R}from"./usePlugins-D2-Pd2HX.js";import{t as z}from"./schemas.utils-gKqZ9UX4.js";import{t as B}from"./dist-DJgPCOr0.js";import{a as V,i as ee,n as H,o as U,r as W}from"./keys-DghNVBR5.js";import{a as G,i as te,n as ne}from"./devices.constants-HX5whDWr.js";import{t as re}from"./useDevicesPlugins-1qFZMfyo.js";import{s as ie}from"./system.constants-BvSIFqdm.js";import{n as ae}from"./logs-entries.transformers-DLC8m8_x.js";var K=_(),q=class extends Error{exception;constructor(e,t=null){super(e),this.name=`DevicesException`,this.exception=t}},J=class extends q{code;constructor(e,t=null,n=null){super(e,n),this.name=`DevicesApiException`,this.code=t}},Y=class extends q{constructor(e,t=null){super(e,t),this.name=`DevicesValidationException`}},oe=()=>{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}}}},se=()=>{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}}}},ce=({id:e})=>{let n=F().getStore(W),{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})}}},le=(e={})=>{let{deviceId:n}=e,r=F().getStore(W),{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})}}},ue=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`)}),de=v({search:I().optional(),devices:k(I()),categories:k(j(M))}),fe=v({search:I().optional(),channels:k(I()),categories:k(j(b)),permissions:k(j(O)),dataTypes:k(j(p))}),X={search:void 0,devices:[],categories:[]},pe={by:`name`,dir:`asc`},me=(e={})=>{let{deviceId:n}=e,i=F().getStore(W),{firstLoad:a,semaphore:s}=T(i),{filters:c,sort:l,pagination:u,reset:d}=N({key:`${ne}:channels:list`,filters:{schema:de,defaults:X},sort:{defaults:[pe]},pagination:{defaults:{page:1,size:10}},syncQuery:!0,version:1}),f=t(()=>c.value.search!==X.search||!(0,K.isEqual)(c.value.devices,X.devices)||!(0,K.isEqual)(c.value.categories,X.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}},he=()=>{let{t:e}=i(),t=A(),n=F().getStore(W),r=e=>n.findById(e);return{remove:async i=>{let a=r(i);if(a===null)throw new q(`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 J&&n.code===404){let n=e(`devicesModule.messages.channels.notFound`,{channel:a.name});t.error(n)}else if(n instanceof J&&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}))})}}},ge=({id:e})=>{let n=F().getStore(W);return{icon:t(()=>{switch(n.findById(e)?.category){default:return`mdi:chip`}})}},_e={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}}}},ve={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}}}},ye={[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.device_information],[D.lighting]:[M.light,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.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]},be=Object.fromEntries(Object.entries(ve).map(([e,t])=>{let n=Object.values(t.channels).map(e=>e.category),r=ye[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]})),Z=Object.fromEntries(Object.entries(ve).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(_e).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=_e[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(W),i=n.getStore(H),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 q(`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}=se(),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(V),{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(W),{devices:p,fetchDevices:m,areLoading:h}=De(),{t:g}=i(),_=A(),v=d(),y=r(G.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?Z[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 Y(`Form not valid`);let e=c??D.device;if(!e)throw new Y(`Missing device identifier`);if(!D.category)throw new Y(`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 Y(`Failed to validate create channel model.`);y.value=G.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=G.ERROR,b=window.setTimeout(P,2e3),e instanceof J&&e.code===422?_.error(e.message):_.error(r),e}return y.value=G.OK,b=window.setTimeout(P,2e3),_.success(g(`devicesModule.messages.channels.created`,{device:D.name})),`added`},P=()=>{window.clearTimeout(b),y.value=G.NONE};return m().catch(()=>{}),o(D,()=>{j.value=!(0,K.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(W),{devices:f,fetchDevices:p,areLoading:m}=De(),{t:h}=i(),g=A(),_=d(),v=r(G.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?Z[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 Y(`Form not valid`);let i=(l.value?.schemas?.channelEditFormSchema||Te).safeParse(E);if(!i.success)throw _.error(`Schema validation failed with:`,i.error),new Y(`Failed to validate edit channel model.`);v.value=G.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=G.ERROR,y=window.setTimeout(N,2e3),e instanceof J&&e.code===422?g.error(e.message):g.error(r),e}return v.value=G.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=G.NONE};return p().catch(()=>{}),o(E,()=>{k.value=!(0,K.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(H),{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(H),{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(H),{firstLoad:a,semaphore:s}=T(i),{filters:c,sort:l,pagination:u,reset:d}=N({key:`${ne}:channels-properties:${n}`,filters:{schema:fe,defaults:Q},sort:{defaults:[Me]},pagination:{defaults:{page:1,size:10}},syncQuery:!0,version:1}),f=t(()=>c.value.search!==Q.search||!(0,K.isEqual)(c.value.channels,Q.channels)||!(0,K.isEqual)(c.value.categories,Q.categories)||!(0,K.isEqual)(c.value.permissions,Q.permissions)||!(0,K.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(H);return{remove:async r=>{let i=n.findById(r);if(i===null)throw new q(`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 J&&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 J&&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(H);return{icon:t(()=>{switch(n.findById(e)?.category){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}=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`))))}},ze=({id:n,type:s,channelId:c})=>{let l=F(),{element:u}=Re({type:s}),f=l.getStore(H),{channels:m,fetchChannels:h,areLoading:g}=le(),{t:_}=i(),v=A(),y=d(),x=r(G.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 Y(`Form not valid`);let e=c??P.channel;if(!e)throw new Y(`Missing channel identifier`);if(P.name===``&&(P.name=null),!P.category)throw new Y(`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 Y(`Failed to validate create channel property model.`);x.value=G.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=G.ERROR,S=window.setTimeout(V,2e3),e instanceof J&&e.code===422?v.error(e.message):v.error(r),e}return x.value=G.OK,S=window.setTimeout(V,2e3),v.success(_(`devicesModule.messages.channelsProperties.created`,{device:P.name})),`added`},V=()=>{window.clearTimeout(S),x.value=G.NONE};return h().catch(()=>{}),o(P,()=>{R.value=!(0,K.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,K.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(H),{channels:f,fetchChannels:m,areLoading:h}=le(),{t:g}=i(),_=A(),v=d(),y=r(G.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 Y(`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 Y(`Failed to validate edit channel property model.`);y.value=G.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=G.ERROR,x=window.setTimeout(V,2e3),e instanceof J&&e.code===422?_.error(e.message):_.error(r),e}return y.value=G.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=G.NONE};return m().catch(()=>{}),o(I,()=>{z.value=!(0,K.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(V),{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(V),i=e.getStore(U),{firstLoad:a,semaphore:s}=T(n),{filters:c,sort:l,pagination:d,reset:f}=N({key:`${ne}:devices:list`,filters:{schema:ue,defaults:$},sort:{defaults:[He]},pagination:{defaults:{page:1,size:10}},syncQuery:!0,version:1}),p=t(()=>c.value.search!==$.search||!(0,K.isEqual)(c.value.types,$.types)||c.value.state!==$.state||!(0,K.isEqual)(c.value.states,$.states)||!(0,K.isEqual)(c.value.categories,$.categories)||!(0,K.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(V);return{remove:async r=>{let i=n.findById(r);if(i===null)throw new q(`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 J&&n.code===404){let n=e(`devicesModule.messages.devices.notFound`,{device:i.name});t.error(n)}else if(n instanceof J&&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(V);return{icon:t(()=>{switch(n.findById(e)?.category){default:return`mdi:devices`}})}},Ke=({id:e})=>{let n=F(),r=n.getStore(V),i=n.getStore(W),a=e=>r.findById(e),o=e=>Z[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 q(`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}=re(),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(V),{t:u}=i(),f=A(),p=d(),m=r(G.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 Y(`Form not valid`);let e=(c.value?.schemas?.deviceAddFormSchema||qe).safeParse(_);if(!e.success)throw p.error(`Schema validation failed with:`,e.error),new Y(`Failed to validate create device model.`);m.value=G.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=G.ERROR,h=window.setTimeout(S,2e3),e instanceof J&&e.code===422?f.error(e.message):f.error(r),e}return m.value=G.OK,h=window.setTimeout(S,2e3),f.success(u(`devicesModule.messages.devices.created`,{device:_.name})),`added`},S=()=>{window.clearTimeout(h),m.value=G.NONE};return o(_,()=>{b.value=!(0,K.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(V),{t:u}=i(),f=A(),p=d(),m=r(G.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 Y(`Form not valid`);let a=(c.value?.schemas?.deviceEditFormSchema||Je).safeParse(_);if(!a.success)throw p.error(`Schema validation failed with:`,a.error),new Y(`Failed to validate edit device model.`);let o={...a.data};(0,K.isEqual)(o.roomId,v.roomId)&&delete o.roomId,m.value=G.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=G.ERROR,h=window.setTimeout(S,2e3),e instanceof J&&e.code===422?f.error(e.message):f.error(i),e}return m.value=G.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=G.NONE};return o(_,()=>{b.value=!(0,K.isEqual)(e(_),v)}),{categoriesOptions:g,model:_,formEl:y,formChanged:b,submit:x,clear:S,formResult:m}},Qe=()=>{let e=F().getStore(U),{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(U),{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(V),s=i.getStore(W),c=i.getStore(H),{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=>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 _(te.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})},ee=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}),U=t(()=>m.value.includes(e)),G=t(()=>{if(!U.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:ee,areChannelsLoaded:U,arePropertiesLoaded:G,fetchDevice:R,fetchChannels:z,fetchProperties:B,getPropertiesForChannel:k,isPropertyWritable:A,getPropertyValue:j,isPropertyLoading:N,setPropertyValue:L}},rt=({deviceId:e})=>{let n=F().getStore(ee),{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}/${ie}/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=ae(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}/${ie}/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=ae(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{Z as A,se as B,je as C,De as D,Oe as E,ge as F,J as H,he as I,me as L,Se as M,ve as N,Ce as O,_e as P,le as R,Ne as S,ke as T,q as U,oe as V,Y 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,be 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,ce as z};
@@ -1 +1 @@
1
- import"./rolldown-runtime-QTnfLwEv.js";import{Ei as e,Er as t,Si as n,T as r,bi as i,ci as a,n as o}from"./icon-with-child-CgZMNB3F.js";import{_ as s,bt as c,ct as l,f as u,ft as d,gt as f,ht as p,jr as m,l as h,la as g,m as _,o as v,ot as y,p as b,st as x,x as S,xt as C,yt as w}from"./common-DQQtAVrj.js";import{r as T}from"./config-DycVi21V.js";import{r as E}from"./usePlugins-BLBNoCg5.js";import{t as D}from"./dist-DJgPCOr0.js";import{t as O}from"./useConfigModule-DPKpRzOA.js";import{i as k,l as A,n as j,o as M,s as N}from"./useLocation-BfcRW2IZ.js";import{a as P,n as F,o as I}from"./weather.constants-_S0I_w_Q.js";import{t as L}from"./types-AzJb-TPe.js";var R=()=>{let e=S().getStore(N),{data:n,semaphore:r}=g(e);return{weatherDay:t(()=>n.value),isLoading:t(()=>n.value===null&&r.value.getting),fetchWeatherDay:async()=>{await e.get()}}},z=()=>{let e=S().getStore(A),{firstLoad:n,semaphore:r}=g(e);return{locations:t(()=>e.findAll().filter(e=>!e.draft)),areLoading:t(()=>r.value.fetching.items),loaded:t(()=>n.value),fetchLocations:async()=>{await e.fetch()}}},B={search:void 0,types:[],primary:`all`},V=()=>{let e=S().getStore(A),{firstLoad:r,semaphore:i}=g(e),{configModule:o}=O({type:P}),s=t(()=>o.value?.primaryLocationId??null),c=n(10),l=n(1),u=n({...B}),d=t(()=>u.value.search!==B.search||u.value.types.length>0||u.value.primary!==B.primary),f=n(`name`),p=n(`ascending`),m=t(()=>{let t=e.findAll().filter(e=>!(e.draft||u.value.search&&!e.name.toLowerCase().includes(u.value.search.toLowerCase())||u.value.types.length>0&&!u.value.types.includes(e.type)||u.value.primary===`primary`&&e.id!==s.value||u.value.primary===`secondary`&&e.id===s.value));return p.value===null?t:D(t,[e=>e[f.value]??``],[p.value===`ascending`?`asc`:`desc`])}),h=t(()=>{let e=(l.value-1)*c.value,t=e+c.value;return m.value.slice(e,t)}),_=async()=>{await e.fetch()},v=t(()=>i.value.fetching.items||!r.value),y=t(()=>r.value),b=t(()=>e.findAll().filter(e=>!e.draft).length);return a(()=>u.value,()=>{l.value=1},{deep:!0}),{locations:m,locationsPaginated:h,totalRows:b,areLoading:v,loaded:y,fetchLocations:_,filters:u,filtersActive:d,paginateSize:c,paginatePage:l,sortBy:f,sortDir:p,resetFilter:()=>{u.value={...B}},primaryLocationId:s}},H=()=>{let e=_(),r=s(),i=n({}),a=n(!1),c=n(!1),l=n(!1);return{weatherByLocation:t(()=>i.value),isLoading:a,hasError:c,fetchCompleted:l,fetchLocationsWeather:async()=>{if(!a.value){a.value=!0,c.value=!1;try{let{data:t,error:n,response:a}=await e.client.GET(`/${o}/${I}/weather`,{});if(t!==void 0&&Array.isArray(t.data)){let e={};for(let n of t.data)if(n.location_id)try{let t=j(n.current),r=n.location;e[n.location_id]={current:t,locationName:r?.name??``,country:r?.country??null}}catch(e){r.error(`[WEATHER] Failed to transform weather data for location ${n.location_id}`,e)}i.value=e,Object.keys(e).length===0&&(c.value=!0);return}let s=`Failed to fetch locations weather.`;throw n&&(s=n.message??s),new k(s,a?.status??500)}catch(e){if(c.value=!0,e instanceof k)throw e;r.error(`[WEATHER] Failed to fetch locations weather`,e)}finally{a.value=!1,l.value=!0}}}}},U=()=>{let{t:e}=r(),t=b(),n=S().getStore(A);return{add:async e=>n.add(e),edit:async e=>n.edit(e),remove:async r=>{let i=n.findById(r);if(i)try{await m.confirm(e(`weatherModule.messages.locations.confirmDeleteLocation`,{name:i.name}),e(`weatherModule.headings.deleteLocation`),{confirmButtonText:e(`weatherModule.buttons.yes.title`),cancelButtonText:e(`weatherModule.buttons.no.title`),type:`warning`});try{await n.remove({id:r}),t.success(e(`weatherModule.messages.locations.deleted`))}catch{t.error(e(`weatherModule.messages.locations.notDeleted`))}}catch{t.info(e(`weatherModule.messages.locations.deleteCanceled`,{location:i.name}))}},bulkRemove:async r=>{if(r.length!==0){try{await m.confirm(e(`weatherModule.messages.locations.confirmBulkDelete`,{count:r.length}),e(`weatherModule.headings.bulkDeleteLocations`),{confirmButtonText:e(`weatherModule.buttons.yes.title`),cancelButtonText:e(`weatherModule.buttons.no.title`),type:`warning`})}catch{t.info(e(`weatherModule.messages.locations.bulkDeleteCanceled`));return}try{let i=await n.bulkRemove({ids:r.map(e=>e.id)});i.succeeded.length>0&&t.success(e(`weatherModule.messages.locations.bulkDeleted`,{count:i.succeeded.length})),i.failed.length>0&&t.error(e(`weatherModule.messages.locations.bulkDeleteFailed`,{count:i.failed.length}))}catch{t.error(e(`weatherModule.messages.locations.bulkDeleteFailed`,{count:r.length}))}}}}},W=u(),G=f({id:L,draft:x().default(!1),type:w().trim().nonempty(),name:w().trim().nonempty(),order:p().int().nonnegative().default(0),createdAt:c([w().datetime({offset:!0}),l()]).transform(e=>e instanceof Date?e:new Date(e)),updatedAt:c([w().datetime({offset:!0}),l()]).transform(e=>e instanceof Date?e:new Date(e)).optional().nullable().default(null)}).catchall(C());f({fetching:f({items:x().default(!1),item:y(L)}),creating:y(L),updating:y(L),deleting:y(L)}),f({id:L,type:w().trim().nonempty(),data:d({})}),f({id:L,data:f({type:w().trim().nonempty(),name:w().trim().nonempty()}).catchall(C())}),f({id:L}),f({id:L});var K=f({id:L.optional().default(v()),draft:x().optional().default(!1),data:f({type:w().trim().nonempty(),name:w().trim().nonempty()}).catchall(C())}),q=f({id:L,data:f({type:w().trim().nonempty(),name:w().trim().optional()}).catchall(C())});f({id:L}),f({ids:y(L).nonempty()});var J=f({succeeded:y(w()),failed:y(f({id:w(),reason:w()}))});f({id:L});var Y=f({id:w().uuid().optional(),type:w().trim().nonempty(),name:w().trim().nonempty()}).passthrough(),X=f({type:w().trim().nonempty(),name:w().trim().nonempty().optional()}).passthrough();f({id:w().uuid(),type:w(),name:w().trim().nonempty(),created_at:w(),updated_at:w().nullable().optional()}),f({id:L,type:w().trim().nonempty(),name:w().trim().min(1,`Name is required`)});var Z=f({name:w().trim().min(1,`Name is required`)}),Q=G,ee=Y,te=X,ne=({id:t})=>{let o=S().getStore(A),{t:c}=r(),l=b(),u=s(),d=n(F.NONE),f,p=i({name:o.findById(t.value)?.name??``}),m=h(e(p)),g=n(void 0),_=n(!1),v=async()=>{if(g.value.clearValidate(),!await g.value.validate())throw new M(`Form not valid`);let n=Z.safeParse(p);if(!n.success)throw u.error(`[WEATHER_MODULE] Schema validation failed:`,n.error),new M(`Failed to validate update location model.`);d.value=F.WORKING;let r=o.findById(t.value);if(!r)throw new M(`Location not found.`);let i=c(`weatherModule.messages.locations.notUpdated`,{location:p.name});try{await o.edit({id:t.value,data:{type:r.type,...n.data}}),d.value=F.OK,l.success(c(`weatherModule.messages.locations.updated`,{location:p.name})),Object.assign(m,h(e(p))),_.value=!1}catch(e){throw d.value=F.ERROR,f=window.setTimeout(y,2e3),e instanceof k&&e.code===422?l.error(e.message):l.error(i),e}},y=()=>{window.clearTimeout(f),d.value=F.NONE};return a(()=>p,()=>{_.value=!(0,W.isEqual)(e(p),m)},{deep:!0}),a(()=>o.findById(t.value),t=>{t&&!_.value&&(p.name=t.name,Object.assign(m,h(e(p))))}),{model:p,formEl:g,formChanged:_,submit:v}},$=()=>{let e=E(),{enabled:n}=T(),r=[`locationAddForm`,`locationEditForm`],i=[`locationSchema`,`locationAddFormSchema`,`locationEditFormSchema`,`locationCreateReqSchema`,`locationUpdateReqSchema`],a=t(()=>e.getPlugins().filter(e=>e.modules===void 0||e.modules.includes(`weather-module`)?(e.elements??[]).some(e=>{if(!(e.modules===void 0||e.modules.includes(`weather-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(()=>D(a.value.flatMap(e=>(e.elements??[]).filter(e=>e.modules===void 0||e.modules.includes(`weather-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(`weather-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(`weather-module`)));if(n)return n}}}},re=({type:e})=>{let{getByType:n}=$(),r=t(()=>n(e));return{plugin:r,element:t(()=>(r.value?.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`weather-module`))))}};export{R as _,Q as a,G as c,J as d,q as f,z as g,V as h,ee as i,X as l,H as m,$ as n,te as o,U as p,ne as r,Y as s,re as t,K as u};
1
+ import"./rolldown-runtime-QTnfLwEv.js";import{Ei as e,Er as t,Si as n,T as r,bi as i,ci as a,n as o}from"./icon-with-child-CgZMNB3F.js";import{_ as s,bt as c,ct as l,f as u,ft as d,gt as f,ht as p,jr as m,l as h,la as g,m as _,o as v,ot as y,p as b,st as x,x as S,xt as C,yt as w}from"./common-Be4p2bm6.js";import{r as T}from"./config-BAg35nXl.js";import{r as E}from"./usePlugins-D2-Pd2HX.js";import{t as D}from"./dist-DJgPCOr0.js";import{t as O}from"./useConfigModule-5WRiFhe8.js";import{i as k,l as A,n as j,o as M,s as N}from"./useLocation-C1jGf7ps.js";import{a as P,n as F,o as I}from"./weather.constants-_S0I_w_Q.js";import{t as L}from"./types-C55HbQe7.js";var R=()=>{let e=S().getStore(N),{data:n,semaphore:r}=g(e);return{weatherDay:t(()=>n.value),isLoading:t(()=>n.value===null&&r.value.getting),fetchWeatherDay:async()=>{await e.get()}}},z=()=>{let e=S().getStore(A),{firstLoad:n,semaphore:r}=g(e);return{locations:t(()=>e.findAll().filter(e=>!e.draft)),areLoading:t(()=>r.value.fetching.items),loaded:t(()=>n.value),fetchLocations:async()=>{await e.fetch()}}},B={search:void 0,types:[],primary:`all`},V=()=>{let e=S().getStore(A),{firstLoad:r,semaphore:i}=g(e),{configModule:o}=O({type:P}),s=t(()=>o.value?.primaryLocationId??null),c=n(10),l=n(1),u=n({...B}),d=t(()=>u.value.search!==B.search||u.value.types.length>0||u.value.primary!==B.primary),f=n(`name`),p=n(`ascending`),m=t(()=>{let t=e.findAll().filter(e=>!(e.draft||u.value.search&&!e.name.toLowerCase().includes(u.value.search.toLowerCase())||u.value.types.length>0&&!u.value.types.includes(e.type)||u.value.primary===`primary`&&e.id!==s.value||u.value.primary===`secondary`&&e.id===s.value));return p.value===null?t:D(t,[e=>e[f.value]??``],[p.value===`ascending`?`asc`:`desc`])}),h=t(()=>{let e=(l.value-1)*c.value,t=e+c.value;return m.value.slice(e,t)}),_=async()=>{await e.fetch()},v=t(()=>i.value.fetching.items||!r.value),y=t(()=>r.value),b=t(()=>e.findAll().filter(e=>!e.draft).length);return a(()=>u.value,()=>{l.value=1},{deep:!0}),{locations:m,locationsPaginated:h,totalRows:b,areLoading:v,loaded:y,fetchLocations:_,filters:u,filtersActive:d,paginateSize:c,paginatePage:l,sortBy:f,sortDir:p,resetFilter:()=>{u.value={...B}},primaryLocationId:s}},H=()=>{let e=_(),r=s(),i=n({}),a=n(!1),c=n(!1),l=n(!1);return{weatherByLocation:t(()=>i.value),isLoading:a,hasError:c,fetchCompleted:l,fetchLocationsWeather:async()=>{if(!a.value){a.value=!0,c.value=!1;try{let{data:t,error:n,response:a}=await e.client.GET(`/${o}/${I}/weather`,{});if(t!==void 0&&Array.isArray(t.data)){let e={};for(let n of t.data)if(n.location_id)try{let t=j(n.current),r=n.location;e[n.location_id]={current:t,locationName:r?.name??``,country:r?.country??null}}catch(e){r.error(`[WEATHER] Failed to transform weather data for location ${n.location_id}`,e)}i.value=e,Object.keys(e).length===0&&(c.value=!0);return}let s=`Failed to fetch locations weather.`;throw n&&(s=n.message??s),new k(s,a?.status??500)}catch(e){if(c.value=!0,e instanceof k)throw e;r.error(`[WEATHER] Failed to fetch locations weather`,e)}finally{a.value=!1,l.value=!0}}}}},U=()=>{let{t:e}=r(),t=b(),n=S().getStore(A);return{add:async e=>n.add(e),edit:async e=>n.edit(e),remove:async r=>{let i=n.findById(r);if(i)try{await m.confirm(e(`weatherModule.messages.locations.confirmDeleteLocation`,{name:i.name}),e(`weatherModule.headings.deleteLocation`),{confirmButtonText:e(`weatherModule.buttons.yes.title`),cancelButtonText:e(`weatherModule.buttons.no.title`),type:`warning`});try{await n.remove({id:r}),t.success(e(`weatherModule.messages.locations.deleted`))}catch{t.error(e(`weatherModule.messages.locations.notDeleted`))}}catch{t.info(e(`weatherModule.messages.locations.deleteCanceled`,{location:i.name}))}},bulkRemove:async r=>{if(r.length!==0){try{await m.confirm(e(`weatherModule.messages.locations.confirmBulkDelete`,{count:r.length}),e(`weatherModule.headings.bulkDeleteLocations`),{confirmButtonText:e(`weatherModule.buttons.yes.title`),cancelButtonText:e(`weatherModule.buttons.no.title`),type:`warning`})}catch{t.info(e(`weatherModule.messages.locations.bulkDeleteCanceled`));return}try{let i=await n.bulkRemove({ids:r.map(e=>e.id)});i.succeeded.length>0&&t.success(e(`weatherModule.messages.locations.bulkDeleted`,{count:i.succeeded.length})),i.failed.length>0&&t.error(e(`weatherModule.messages.locations.bulkDeleteFailed`,{count:i.failed.length}))}catch{t.error(e(`weatherModule.messages.locations.bulkDeleteFailed`,{count:r.length}))}}}}},W=u(),G=f({id:L,draft:x().default(!1),type:w().trim().nonempty(),name:w().trim().nonempty(),order:p().int().nonnegative().default(0),createdAt:c([w().datetime({offset:!0}),l()]).transform(e=>e instanceof Date?e:new Date(e)),updatedAt:c([w().datetime({offset:!0}),l()]).transform(e=>e instanceof Date?e:new Date(e)).optional().nullable().default(null)}).catchall(C());f({fetching:f({items:x().default(!1),item:y(L)}),creating:y(L),updating:y(L),deleting:y(L)}),f({id:L,type:w().trim().nonempty(),data:d({})}),f({id:L,data:f({type:w().trim().nonempty(),name:w().trim().nonempty()}).catchall(C())}),f({id:L}),f({id:L});var K=f({id:L.optional().default(v()),draft:x().optional().default(!1),data:f({type:w().trim().nonempty(),name:w().trim().nonempty()}).catchall(C())}),q=f({id:L,data:f({type:w().trim().nonempty(),name:w().trim().optional()}).catchall(C())});f({id:L}),f({ids:y(L).nonempty()});var J=f({succeeded:y(w()),failed:y(f({id:w(),reason:w()}))});f({id:L});var Y=f({id:w().uuid().optional(),type:w().trim().nonempty(),name:w().trim().nonempty()}).passthrough(),X=f({type:w().trim().nonempty(),name:w().trim().nonempty().optional()}).passthrough();f({id:w().uuid(),type:w(),name:w().trim().nonempty(),created_at:w(),updated_at:w().nullable().optional()}),f({id:L,type:w().trim().nonempty(),name:w().trim().min(1,`Name is required`)});var Z=f({name:w().trim().min(1,`Name is required`)}),Q=G,ee=Y,te=X,ne=({id:t})=>{let o=S().getStore(A),{t:c}=r(),l=b(),u=s(),d=n(F.NONE),f,p=i({name:o.findById(t.value)?.name??``}),m=h(e(p)),g=n(void 0),_=n(!1),v=async()=>{if(g.value.clearValidate(),!await g.value.validate())throw new M(`Form not valid`);let n=Z.safeParse(p);if(!n.success)throw u.error(`[WEATHER_MODULE] Schema validation failed:`,n.error),new M(`Failed to validate update location model.`);d.value=F.WORKING;let r=o.findById(t.value);if(!r)throw new M(`Location not found.`);let i=c(`weatherModule.messages.locations.notUpdated`,{location:p.name});try{await o.edit({id:t.value,data:{type:r.type,...n.data}}),d.value=F.OK,l.success(c(`weatherModule.messages.locations.updated`,{location:p.name})),Object.assign(m,h(e(p))),_.value=!1}catch(e){throw d.value=F.ERROR,f=window.setTimeout(y,2e3),e instanceof k&&e.code===422?l.error(e.message):l.error(i),e}},y=()=>{window.clearTimeout(f),d.value=F.NONE};return a(()=>p,()=>{_.value=!(0,W.isEqual)(e(p),m)},{deep:!0}),a(()=>o.findById(t.value),t=>{t&&!_.value&&(p.name=t.name,Object.assign(m,h(e(p))))}),{model:p,formEl:g,formChanged:_,submit:v}},$=()=>{let e=E(),{enabled:n}=T(),r=[`locationAddForm`,`locationEditForm`],i=[`locationSchema`,`locationAddFormSchema`,`locationEditFormSchema`,`locationCreateReqSchema`,`locationUpdateReqSchema`],a=t(()=>e.getPlugins().filter(e=>e.modules===void 0||e.modules.includes(`weather-module`)?(e.elements??[]).some(e=>{if(!(e.modules===void 0||e.modules.includes(`weather-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(()=>D(a.value.flatMap(e=>(e.elements??[]).filter(e=>e.modules===void 0||e.modules.includes(`weather-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(`weather-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(`weather-module`)));if(n)return n}}}},re=({type:e})=>{let{getByType:n}=$(),r=t(()=>n(e));return{plugin:r,element:t(()=>(r.value?.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`weather-module`))))}};export{R as _,Q as a,G as c,J as d,q as f,z as g,V as h,ee as i,X as l,H as m,$ as n,te as o,U as p,ne as r,Y as s,re as t,K as u};
@@ -0,0 +1 @@
1
+ import{Er as e}from"./icon-with-child-CgZMNB3F.js";import{la as t,x as n}from"./common-Be4p2bm6.js";import{t as r}from"./keys-CIqUg3Jv.js";import"./usePersonalTokens-D_AQL9lY.js";var i=()=>{let i=n().getStore(r),{profile:a}=t(i);return{profile:e(()=>a.value),isSignedIn:e(()=>i.isSignedIn())}};export{i as t};