@fastybird/smart-panel-admin 0.1.0-alpha.5 → 0.1.0-alpha.6

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 (135) hide show
  1. package/dist/assets/{card-add-form-C8k05jix.js → card-add-form-Pxgzb_ci.js} +1 -1
  2. package/dist/assets/{card-edit-form-B4Wy_x66.js → card-edit-form-CON4jaIo.js} +1 -1
  3. package/dist/assets/{common-DlW3qRTQ.js → common-DyDAwGBz.js} +4 -4
  4. package/dist/assets/{components-o_FTQqv1.js → components--65VzRQH.js} +1 -1
  5. package/dist/assets/{components-DlofbaXq.js → components-BPdLRVnA.js} +2 -2
  6. package/dist/assets/{components-BFT9ksvz.js → components-BerPwVp-.js} +1 -1
  7. package/dist/assets/{components-DRDcqY-d.js → components-CQOBigIL.js} +1 -1
  8. package/dist/assets/{components-D8PpAJgM.js → components-CgyOM-CC.js} +1 -1
  9. package/dist/assets/{components-tvaQsmsk.js → components-Cvj-jTXV.js} +2 -2
  10. package/dist/assets/{components-DBRr1g1A.js → components-DyHKXGO-.js} +1 -1
  11. package/dist/assets/{components-4pZvmdD8.js → components-mclHZ55p.js} +1 -1
  12. package/dist/assets/{composables-CLHFuu4k.js → composables-B6gv3LxR.js} +1 -1
  13. package/dist/assets/{composables-COu_3hI8.js → composables-Bg2MBx7D.js} +1 -1
  14. package/dist/assets/{composables-CU6q9-8B.js → composables-C9x-efDp.js} +1 -1
  15. package/dist/assets/{composables-m3XA9ZFJ.js → composables-CVFi60Du.js} +1 -1
  16. package/dist/assets/{composables-CzSTR7jk.js → composables-DZYr3rl3.js} +1 -1
  17. package/dist/assets/{composables-Da97cjje.js → composables-DdqAQ2NN.js} +1 -1
  18. package/dist/assets/{composables-BTOG7VNs2.js → composables-EOIIyvfq2.js} +1 -1
  19. package/dist/assets/{composables-Cl0F9F_S.js → composables-UlKjXsBi.js} +1 -1
  20. package/dist/assets/{composables-CjGTzpGj.js → composables-lfdMtVU8.js} +1 -1
  21. package/dist/assets/{dashboard-DilMazDB.js → dashboard-DfhAHLf_.js} +2 -2
  22. package/dist/assets/{dashboard.types-DHlozs9y.js → dashboard.types-Jem1nlEy.js} +1 -1
  23. package/dist/assets/{data-source-edit-form-mTdgdACg.js → data-source-edit-form-DhRIUxuw.js} +1 -1
  24. package/dist/assets/{drawer-Db27jij8.js → drawer-BC8DYcvI.js} +1 -1
  25. package/dist/assets/{index-DW2Q2Ef8.js → index-BDDqdVnT.js} +4 -4
  26. package/dist/assets/{input-number-BF0uWlX2.js → input-number-ZxkWRYbD.js} +1 -1
  27. package/dist/assets/{integration-config-dialog-DCF8K0UE.js → integration-config-dialog-ByYgxK4S.js} +1 -1
  28. package/dist/assets/{layout-config-DkSTscYx.js → layout-config-BNu3S7S4.js} +1 -1
  29. package/dist/assets/{layout-default-LKbviw7y.js → layout-default-BPXnOfmF.js} +1 -1
  30. package/dist/assets/{layout-lock-Cp5xh9ot.js → layout-lock--gkSv3un.js} +1 -1
  31. package/dist/assets/layout-profile-D_3OGioj.js +1 -0
  32. package/dist/assets/{layout-profile-wkO5hDf5.js → layout-profile-sLgAVYMg.js} +1 -1
  33. package/dist/assets/{layout-sign-C8xK52Nq.js → layout-sign-CiXTWrEu.js} +1 -1
  34. package/dist/assets/layout-sign-DjzS064d.js +1 -0
  35. package/dist/assets/{list-data-sources-adjust-Bj-0Adap.js → list-data-sources-adjust-D8QPNWre.js} +1 -1
  36. package/dist/assets/{list-locations-BM5Yvsew.js → list-locations-BFPqF3i-.js} +1 -1
  37. package/dist/assets/{list-users-dBZVseES.js → list-users-CYCm53K6.js} +1 -1
  38. package/dist/assets/{logs-entries.transformers-BRzpY2MS.js → logs-entries.transformers-B17JQgGx.js} +1 -1
  39. package/dist/assets/{page-configure-BLho4eEA.js → page-configure-ChpS6Or7.js} +1 -1
  40. package/dist/assets/{page-configure-1ENlHHe8.js → page-configure-xghKYXvV.js} +1 -1
  41. package/dist/assets/{pagination-BN87kdDs.js → pagination-DejKh2TT.js} +1 -1
  42. package/dist/assets/{popover-DOg0KdzK.js → popover-BW83aJP4.js} +1 -1
  43. package/dist/assets/{radio-BmI00y-5.js → radio-BvpKu4BH.js} +1 -1
  44. package/dist/assets/{scene-add-form-DdmUnhy5.js → scene-add-form-v31kuUJe.js} +1 -1
  45. package/dist/assets/{scene-edit-form-BeXK9ZM1.js → scene-edit-form-CURoaMiA.js} +1 -1
  46. package/dist/assets/{select-data-source-plugin-CtXn9m8K.js → select-data-source-plugin-CvsohGgN.js} +1 -1
  47. package/dist/assets/{slider-YJlo4Ibo.js → slider-CS5SsQJB.js} +1 -1
  48. package/dist/assets/{steps-BIGbhQaO.js → steps-B6e2Hpk1.js} +1 -1
  49. package/dist/assets/{table-5pjI7ihN.js → table-DEzwgEz4.js} +1 -1
  50. package/dist/assets/{tile-detail-COru-nDQ.js → tile-detail-DQXNcHh_.js} +1 -1
  51. package/dist/assets/{tile-edit-form-jjo5FbvD.js → tile-edit-form-BXWm1wW5.js} +1 -1
  52. package/dist/assets/{types-B8upWpl6.js → types-DQmL99Jz.js} +1 -1
  53. package/dist/assets/{useBuddyChat-DREu7Tv5.js → useBuddyChat-CGKBq3sR.js} +1 -1
  54. package/dist/assets/{useDataSources-Bx93bXrZ.js → useDataSources-D1fe9MPt.js} +1 -1
  55. package/dist/assets/{useDevices-CuJhDHbf.js → useDevices-oOyjupML.js} +1 -1
  56. package/dist/assets/{useGeolocation-QxCQnrMH.js → useGeolocation-Bn0Ka28s.js} +1 -1
  57. package/dist/assets/{useLocation-BM-8kEbz.js → useLocation-DmKkc95i.js} +1 -1
  58. package/dist/assets/{usePage-DTL4RY9u.js → usePage-B4kb2gRl.js} +1 -1
  59. package/dist/assets/{useSpaces-DnSZteHf.js → useSpaces-LfBlMH_H.js} +1 -1
  60. package/dist/assets/{view-buddy-chat-DKryg2MX.js → view-buddy-chat-2LOZupni.js} +1 -1
  61. package/dist/assets/{view-card-add-CYZ9eXg5.js → view-card-add-PWabVoVQ.js} +1 -1
  62. package/dist/assets/{view-card-edit-C5zcGDFz.js → view-card-edit-DEJBolH-.js} +1 -1
  63. package/dist/assets/{view-channel-IJiMTDSG.js → view-channel-BHDhS4p-.js} +1 -1
  64. package/dist/assets/{view-channel-add-YCqERQS-.js → view-channel-add-BCtvWXrd.js} +1 -1
  65. package/dist/assets/{view-channel-edit-Dnct_m0O.js → view-channel-edit-BTyoazYZ.js} +1 -1
  66. package/dist/assets/{view-channel-property-add-CoaudIGV.js → view-channel-property-add-ruykaYtd.js} +1 -1
  67. package/dist/assets/{view-channel-property-edit-g0J-yPAY.js → view-channel-property-edit-BnYYqxkX.js} +1 -1
  68. package/dist/assets/{view-channels--BS5J8Ro.js → view-channels-CmrrHeQA.js} +1 -1
  69. package/dist/assets/{view-config-module-edit-RW7YEgut.js → view-config-module-edit-FmOaydgI.js} +1 -1
  70. package/dist/assets/{view-config-modules-Bi5Ib06n.js → view-config-modules-P71Gx-Ox.js} +1 -1
  71. package/dist/assets/{view-config-plugin-edit-CviUNBYF.js → view-config-plugin-edit-C6_fE8lN.js} +1 -1
  72. package/dist/assets/{view-config-plugins-BBxIkmDq.js → view-config-plugins-1dCE5KY4.js} +1 -1
  73. package/dist/assets/{view-data-source-add-3vF7foLh.js → view-data-source-add-COea4cEq.js} +1 -1
  74. package/dist/assets/{view-data-source-add-CNRJiOEl.js → view-data-source-add-Ctkk4rH0.js} +1 -1
  75. package/dist/assets/{view-data-source-edit-5xrflzsE.js → view-data-source-edit-DSVnEdb0.js} +1 -1
  76. package/dist/assets/{view-data-source-edit-BJeCPFQo.js → view-data-source-edit-dwsWJDG4.js} +1 -1
  77. package/dist/assets/{view-device-C6EIYm4K.js → view-device-TNAtLE-u.js} +1 -1
  78. package/dist/assets/{view-device-add-Dtg4hKNb.js → view-device-add-DOMsL_By.js} +1 -1
  79. package/dist/assets/{view-device-control-D14Yf_3B.js → view-device-control-D3bWbQy2.js} +1 -1
  80. package/dist/assets/{view-device-edit-D3wfo1SZ.js → view-device-edit-BSrgYuAM.js} +1 -1
  81. package/dist/assets/{view-devices-CQyYakG6.js → view-devices-D0fUuW0C.js} +1 -1
  82. package/dist/assets/{view-display-BoDjtT_C.js → view-display-CZPK0L_O.js} +1 -1
  83. package/dist/assets/{view-display-edit-DOBx3FR9.js → view-display-edit-gByzGhMs.js} +1 -1
  84. package/dist/assets/{view-display-tokens-ylzZVdwc.js → view-display-tokens-BxHDs6uq.js} +1 -1
  85. package/dist/assets/{view-displays-Bv-jxEGc.js → view-displays-CewYxCVw.js} +1 -1
  86. package/dist/assets/{view-extension-detail-BAuEjk3c.js → view-extension-detail-DSs3NVxd.js} +1 -1
  87. package/dist/assets/{view-extensions-xnAarDlC.js → view-extensions-piIsPNf6.js} +1 -1
  88. package/dist/assets/{view-location-BbOLMWOk.js → view-location-CSl3EEVR.js} +1 -1
  89. package/dist/assets/{view-location-add-B3Bljsk2.js → view-location-add-DAJfdCWA.js} +1 -1
  90. package/dist/assets/{view-location-edit-Csq0lDWt.js → view-location-edit-DzRxnPA5.js} +1 -1
  91. package/dist/assets/{view-locations-DF-FXbjv.js → view-locations-lurkMZH_.js} +1 -1
  92. package/dist/assets/{view-lock-screen-ClIhVZNt.js → view-lock-screen-C2ycj8hs.js} +1 -1
  93. package/dist/assets/{view-onboarding-vZhyo5Yl.js → view-onboarding-dzzRbXxx.js} +1 -1
  94. package/dist/assets/{view-page-DCmbFTnE.js → view-page-71AaAyYY.js} +1 -1
  95. package/dist/assets/{view-page-add-Cpzp9lXV.js → view-page-add-Bf9pNL0Y.js} +1 -1
  96. package/dist/assets/{view-page-configure-b5zQ9PXr.js → view-page-configure-DFlrn4ng.js} +1 -1
  97. package/dist/assets/{view-page-configure-c8DaItoq.js → view-page-configure-DZZgAftY.js} +1 -1
  98. package/dist/assets/{view-page-data-source-add-CJMzSAGm.js → view-page-data-source-add-BumAmlK1.js} +1 -1
  99. package/dist/assets/{view-page-data-source-edit-BI5AXiNz.js → view-page-data-source-edit-CKQj40z8.js} +1 -1
  100. package/dist/assets/{view-page-edit-fw913SDe.js → view-page-edit-DsVBb_0a.js} +1 -1
  101. package/dist/assets/{view-page-plugin-BrlvGuEU.js → view-page-plugin-zbDx-8k2.js} +1 -1
  102. package/dist/assets/{view-pages-DVvpvvkt.js → view-pages-CzrtWNsy.js} +1 -1
  103. package/dist/assets/{view-profile-general-jV0TcOZC.js → view-profile-general-4XvU3hOw.js} +1 -1
  104. package/dist/assets/{view-profile-security-CPgtYKl1.js → view-profile-security-tUXZtBfp.js} +1 -1
  105. package/dist/assets/{view-scene-add-CT1MOXtu.js → view-scene-add-DYx7wqWm.js} +1 -1
  106. package/dist/assets/{view-scene-edit-4B1IzMuu.js → view-scene-edit-BNLlsUWW.js} +1 -1
  107. package/dist/assets/{view-scenes-DoDkd08z.js → view-scenes-DPZBf6hH.js} +1 -1
  108. package/dist/assets/{view-sign-in-CC7zlx9Q.js → view-sign-in-Dn7Sueav.js} +1 -1
  109. package/dist/assets/{view-sign-up-B1l4jvOx.js → view-sign-up-BT4JPoJG.js} +1 -1
  110. package/dist/assets/{view-space-VnVbkvKT.js → view-space-DCq1Iggu.js} +1 -1
  111. package/dist/assets/{view-space-add-DwONNuir.js → view-space-add-DChQBXFH.js} +1 -1
  112. package/dist/assets/{view-space-edit-44iZOBav.js → view-space-edit-BCS0kMTe.js} +1 -1
  113. package/dist/assets/{view-spaces-CuuMx0iT.js → view-spaces-B9N_NjpZ.js} +1 -1
  114. package/dist/assets/{view-spaces-onboarding-CN6qrfN6.js → view-spaces-onboarding-JIX4TcWu.js} +1 -1
  115. package/dist/assets/{view-stats-F8sYkha0.js → view-stats-D3jkSeCi.js} +1 -1
  116. package/dist/assets/{view-system-info-AVyQIUWe.js → view-system-info-Bj795uHO.js} +1 -1
  117. package/dist/assets/{view-system-log-detail-sgFgbNjX.js → view-system-log-detail-BDgL1D5J.js} +1 -1
  118. package/dist/assets/{view-system-logs-eIoNhI5c.js → view-system-logs-DebD3h5V.js} +1 -1
  119. package/dist/assets/{view-tile-add-B7mnK_PA.js → view-tile-add-BNt_lwb1.js} +1 -1
  120. package/dist/assets/{view-tile-add-Yt_KOkky.js → view-tile-add-wMJtoCQn.js} +1 -1
  121. package/dist/assets/{view-tile-data-source-add-DxaZd4Dp.js → view-tile-data-source-add-BQeH_vRs.js} +1 -1
  122. package/dist/assets/{view-tile-data-source-edit-jzGg3dBQ.js → view-tile-data-source-edit-D2d0Esvp.js} +1 -1
  123. package/dist/assets/{view-tile-edit-kHjMhT9e.js → view-tile-edit-CEbfDUeY.js} +1 -1
  124. package/dist/assets/{view-tile-edit-b2LCLrB5.js → view-tile-edit-CH5cKzYp.js} +1 -1
  125. package/dist/assets/{view-tile-edit-hbO-vs_Y.js → view-tile-edit-D9COp79j.js} +1 -1
  126. package/dist/assets/{view-tile-t4cTwgz2.js → view-tile-phBBfQoi.js} +1 -1
  127. package/dist/assets/{view-user-add-CdlbezB7.js → view-user-add-D3EkKSML.js} +1 -1
  128. package/dist/assets/{view-user-edit-S0Up49jC.js → view-user-edit-ColYWEea.js} +1 -1
  129. package/dist/assets/{view-users-B-m50sCU.js → view-users-BmX2uwUd.js} +1 -1
  130. package/dist/assets/{weather-forecast.transformers-CxZiOJKt.js → weather-forecast.transformers-Bq4YleIF.js} +1 -1
  131. package/dist/assets/{weather-751GlpD1.js → weather-ll5NQwKh.js} +2 -2
  132. package/dist/index.html +50 -50
  133. package/package.json +1 -1
  134. package/dist/assets/layout-profile-ByHuBl2Y.js +0 -1
  135. package/dist/assets/layout-sign-CjJVcqWG.js +0 -1
@@ -1 +1 @@
1
- import"./chunk-DECur_0Z.js";import{Nr as e,Xr as t,ci as n,d as r,fi as i,hi as a,mr as o,n as s,si as c,ui as l}from"./icon-with-child-DmQ_XhQy.js";import{$n as u,A as d,Fn as f,Jn as p,Mn as m,Nn as h,Pn as g,Qn as _,S as v,T as y,Un as b,Vn as x,Vr as S,Wn as C,_ as w,_r as T,an as E,er as D,f as O,lr as k,m as A,n as j,nr as M,pn as N,qn as P,tr as F,u as I,va as L,wn as R,wt as z,y as B}from"./common-DlW3qRTQ.js";import{a as V,i as ee,n as H,o as U,r as W}from"./keys-Cm97UJHM.js";import{t as te}from"./useDevices-CuJhDHbf.js";import{n as ne}from"./logs-entries.transformers-BRzpY2MS.js";var re=`devices`,G=`devices-module`,ie=`DevicesModule.`,ae=function(e){return e.DEVICE_CREATED=`DevicesModule.Device.Created`,e.DEVICE_UPDATED=`DevicesModule.Device.Updated`,e.DEVICE_DELETED=`DevicesModule.Device.Deleted`,e.DEVICE_CONTROL_CREATED=`DevicesModule.DeviceControl.Created`,e.DEVICE_CONTROL_DELETED=`DevicesModule.DeviceControl.Deleted`,e.CHANNEL_CREATED=`DevicesModule.Channel.Created`,e.CHANNEL_UPDATED=`DevicesModule.Channel.Updated`,e.CHANNEL_DELETED=`DevicesModule.Channel.Deleted`,e.CHANNEL_CONTROL_CREATED=`DevicesModule.ChannelControl.Created`,e.CHANNEL_CONTROL_DELETED=`DevicesModule.ChannelControl.Deleted`,e.CHANNEL_PROPERTY_CREATED=`DevicesModule.ChannelProperty.Created`,e.CHANNEL_PROPERTY_UPDATED=`DevicesModule.ChannelProperty.Updated`,e.CHANNEL_PROPERTY_DELETED=`DevicesModule.ChannelProperty.Deleted`,e.CHANNEL_PROPERTY_SET=`DevicesModule.ChannelProperty.Set`,e.CHANNEL_PROPERTY_VALUE_SET=`DevicesModule.ChannelProperty.ValueSet`,e}({}),K=function(e){return e.NONE=`none`,e.WORKING=`working`,e.ERROR=`error`,e.OK=`ok`,e}({}),oe={DEVICES:`devices_module-devices`,DEVICES_ADD:`devices_module-devices_add`,DEVICES_EDIT:`devices_module-devices_edit`,DEVICE:`devices_module-device`,DEVICE_EDIT:`devices_module-device_edit`,DEVICE_CONTROL:`devices_module-device_control`,DEVICE_ADD_CHANNEL:`devices_module-device_add_channel`,DEVICE_EDIT_CHANNEL:`devices_module-device_edit_channel`,DEVICE_CHANNEL_ADD_PROPERTY:`devices_module-device_channel_add_property`,DEVICE_CHANNEL_EDIT_PROPERTY:`devices_module-device_channel_edit_property`,CHANNELS:`devices_module-channels`,CHANNELS_ADD:`devices_module-channels_add`,CHANNELS_EDIT:`devices_module-channels_edit`,CHANNEL:`devices_module-channel`,CHANNEL_EDIT:`devices_module-channel_edit`,CHANNEL_ADD_PROPERTY:`devices_module-channel_add_property`,CHANNEL_EDIT_PROPERTY:`devices_module-channel_edit_property`},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`}},se=()=>{let e=d(),{enabled:t}=E(),n=[`channelPropertyAddForm`,`channelPropertyEditForm`],r=[`channelPropertySchema`,`channelPropertyAddFormSchema`,`channelPropertyEditFormSchema`,`channelPropertyCreateReqSchema`,`channelPropertyUpdateReqSchema`],i=o(()=>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=n.length===0||!!e.components&&n.some(t=>e.components&&t in e.components),i=r.length===0||!!e.schemas&&r.some(t=>e.schemas&&t in e.schemas);return t||i}):!1));return{plugins:i,options:o(()=>N(i.value.flatMap(e=>(e.elements??[]).filter(e=>e.modules===void 0||e.modules.includes(`devices-module`)).map(n=>({value:n.type,label:n.name?.trim()?n.name:e.name,disabled:!t(e.type)}))),[e=>e.label],[`asc`])),getByName:e=>i.value.find(t=>t.type===e),getByType:e=>i.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 i.value){let n=(t.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`)));if(n)return n}}}},ce=()=>{let e=d(),{enabled:t}=E(),n=[`channelAddForm`,`channelEditForm`],r=[`channelSchema`,`channelAddFormSchema`,`channelEditFormSchema`,`channelCreateReqSchema`,`channelUpdateReqSchema`],i=o(()=>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=n.length===0||!!e.components&&n.some(t=>e.components&&t in e.components),i=r.length===0||!!e.schemas&&r.some(t=>e.schemas&&t in e.schemas);return t||i}):!1));return{plugins:i,options:o(()=>N(i.value.flatMap(e=>(e.elements??[]).filter(e=>e.modules===void 0||e.modules.includes(`devices-module`)).map(n=>({value:n.type,label:n.name?.trim()?n.name:e.name,disabled:!t(e.type)}))),[e=>e.label],[`asc`])),getByName:e=>i.value.find(t=>t.type===e),getByType:e=>i.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 i.value){let n=(t.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`)));if(n)return n}}}},le=({id:e})=>{let t=y().getStore(W),{data:n,semaphore:r}=L(t);return{channel:o(()=>e===null?null:n.value[e]??null),isLoading:o(()=>r.value.fetching.item.includes(e)?!0:(n.value[e]??null)===null?r.value.fetching.items.includes(`all`):!1),fetchChannel:async()=>{(n.value[e]??null)?.draft||await t.get({id:e})}}},ue=(e={})=>{let{deviceId:t}=e,n=y().getStore(W),{firstLoad:r,semaphore:i}=L(n),a=t===void 0?void 0:typeof t==`string`?o(()=>t):t;return{channels:o(()=>n.findAll().filter(e=>!a?.value||e.device===a.value)),areLoading:o(()=>i.value.fetching.items.includes(a?.value??`all`)?!0:r.value.includes(a?.value??`all`)?!1:i.value.fetching.items.includes(a?.value??`all`)),loaded:o(()=>r.value.includes(a?.value??`all`)),fetchChannels:async()=>{await n.fetch({deviceId:a?.value})}}},de=C({search:P().optional(),types:g(P()),state:m([`all`,`offline`,`online`]).default(`all`),states:g(x(k)),categories:g(x(_)),enabled:m([`all`,`enabled`,`disabled`]).default(`all`),validation:m([`all`,`valid`,`invalid`]).default(`all`)}),fe=C({search:P().optional(),devices:g(P()),categories:g(x(u))}),pe=C({search:P().optional(),channels:g(P()),categories:g(x(D)),permissions:g(x(M)),dataTypes:g(x(F))}),X=R(),Z={search:void 0,devices:[],categories:[]},me={by:`name`,dir:`asc`},he=(e={})=>{let{deviceId:n}=e,r=y().getStore(W),{firstLoad:i,semaphore:a}=L(r),{filters:s,sort:c,pagination:u,reset:d}=O({key:`${G}:channels:list`,filters:{schema:fe,defaults:Z},sort:{defaults:[me]},pagination:{defaults:{page:1,size:10}},syncQuery:!0,version:1}),f=o(()=>s.value.search!==Z.search||!(0,X.isEqual)(s.value.devices,Z.devices)||!(0,X.isEqual)(s.value.categories,Z.categories)),p=l(u.value.size||10),m=l(u.value.page||1),h=l(c.value.length>0?c.value[0]?.by:void 0),g=l(c.value.length>0?c.value[0]?.dir??null:null),_=o(()=>N(r.findAll().filter(e=>!n||e.device===n).filter(e=>!e.draft&&(!s.value.search||e.id.toLowerCase().includes(s.value.search.toLowerCase())||e.name.toLowerCase().includes(s.value.search.toLowerCase())||e.description?.toLowerCase().includes(s.value.search.toLowerCase())||e.identifier?.toLowerCase().includes(s.value.search.toLowerCase()))&&(s.value.categories.length===0||s.value.categories.includes(e.category))&&(s.value.devices.length===0||s.value.devices.includes(e.device))),[e=>e[h.value]??``],[g.value===`asc`?`asc`:`desc`])),v=o(()=>{let e=(m.value-1)*p.value,t=e+p.value;return _.value.slice(e,t)}),b=async()=>{await r.fetch({deviceId:n})},x=o(()=>a.value.fetching.items.includes(n??`all`)?!0:i.value.includes(n??`all`)?!1:a.value.fetching.items.includes(n??`all`)),S=o(()=>i.value.includes(n??`all`)),C=o(()=>r.findAll().filter(e=>!n||e.device===n).filter(e=>!e.draft).length);return t(()=>u.value,e=>{m.value=e.page??1,p.value=e.size??10},{deep:!0}),t(()=>m.value,e=>{u.value.page=e}),t(()=>p.value,e=>{u.value.size=e}),t(()=>g.value,e=>{h.value===void 0||e===null?c.value=[]:c.value=[{by:h.value,dir:e}]}),t(()=>h.value,e=>{e===void 0?c.value=[]:c.value=[{by:e,dir:g.value}]}),{channels:_,channelsPaginated:v,totalRows:C,areLoading:x,loaded:S,fetchChannels:b,filters:s,filtersActive:f,paginateSize:p,paginatePage:m,sortBy:h,sortDir:g,resetFilter:d}},ge=()=>{let{t:e}=r(),t=w(),n=y().getStore(W),i=e=>n.findById(e);return{remove:async r=>{let a=i(r);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}))})}}},_e=({id:e})=>{let t=y().getStore(W);return{icon:o(()=>{switch(t.findById(e)?.category){default:return`mdi:chip`}})}},ve={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:!0,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:!0,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`]},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}}},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}}}},ye={generic:{category:`generic`,channels:{generic:{category:`generic`,required:!1,multiple:!0},device_information:{category:`device_information`,required:!0,multiple:!1}}},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}}},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}}},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}}},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}}},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}}},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}}},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}}},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}}},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},contact:{category:`contact`,required:!1,multiple:!0},switcher:{category:`switcher`,required:!1,multiple:!0},temperature:{category:`temperature`,required:!1,multiple:!1}}}},be={[_.generic]:[],[_.air_conditioner]:[u.cooler,u.heater,u.fan,u.temperature,u.humidity,u.electrical_energy,u.electrical_power,u.leak,u.device_information],[_.air_dehumidifier]:[u.cooler,u.fan,u.temperature,u.humidity,u.electrical_energy,u.electrical_power,u.leak,u.device_information],[_.air_humidifier]:[u.humidity,u.switcher,u.temperature,u.fan,u.electrical_energy,u.electrical_power,u.leak,u.device_information],[_.air_purifier]:[u.fan,u.air_particulate,u.carbon_dioxide,u.carbon_monoxide,u.humidity,u.leak,u.nitrogen_dioxide,u.ozone,u.pressure,u.sulphur_dioxide,u.temperature,u.volatile_organic_compounds,u.electrical_energy,u.electrical_power,u.device_information],[_.alarm]:[u.alarm,u.device_information],[_.camera]:[u.camera,u.motion,u.microphone,u.speaker,u.contact,u.light,u.temperature,u.humidity,u.battery,u.device_information],[_.door]:[u.door,u.lock,u.contact,u.motion,u.battery,u.device_information],[_.doorbell]:[u.doorbell,u.camera,u.lock,u.motion,u.microphone,u.speaker,u.contact,u.light,u.battery,u.device_information],[_.fan]:[u.fan,u.electrical_energy,u.electrical_power,u.device_information],[_.heating_unit]:[u.heater,u.temperature,u.humidity,u.electrical_energy,u.electrical_power,u.device_information],[_.lighting]:[u.light,u.illuminance,u.electrical_energy,u.electrical_power,u.device_information],[_.lock]:[u.lock,u.contact,u.motion,u.battery,u.device_information],[_.media]:[u.media_input,u.media_playback,u.microphone,u.speaker,u.device_information],[_.av_receiver]:[u.media_input,u.media_playback,u.speaker,u.device_information],[_.game_console]:[u.media_playback,u.media_input,u.device_information],[_.projector]:[u.projector,u.speaker,u.media_playback,u.media_input,u.device_information],[_.set_top_box]:[u.media_input,u.media_playback,u.device_information],[_.streaming_service]:[u.media_playback,u.device_information],[_.outlet]:[u.outlet,u.electrical_energy,u.electrical_power,u.device_information],[_.pump]:[u.flow,u.switcher,u.leak,u.pressure,u.electrical_energy,u.electrical_power,u.device_information],[_.robot_vacuum]:[u.robot_vacuum,u.electrical_energy,u.electrical_power,u.leak,u.battery,u.device_information],[_.sensor]:[u.air_particulate,u.battery,u.carbon_dioxide,u.carbon_monoxide,u.contact,u.humidity,u.illuminance,u.leak,u.motion,u.nitrogen_dioxide,u.occupancy,u.ozone,u.pressure,u.smoke,u.sulphur_dioxide,u.temperature,u.volatile_organic_compounds,u.device_information],[_.speaker]:[u.speaker,u.media_input,u.media_playback,u.electrical_energy,u.electrical_power,u.device_information],[_.sprinkler]:[u.valve,u.flow,u.pressure,u.leak,u.humidity,u.electrical_energy,u.electrical_power,u.device_information],[_.switcher]:[u.switcher,u.electrical_energy,u.electrical_power,u.device_information],[_.television]:[u.television,u.speaker,u.media_playback,u.media_input,u.device_information],[_.terminal]:[u.button,u.indicator,u.buzzer,u.illuminance,u.accelerometer,u.temperature,u.contact,u.switcher,u.device_information],[_.thermostat]:[u.thermostat,u.cooler,u.heater,u.temperature,u.humidity,u.contact,u.electrical_energy,u.electrical_power,u.device_information],[_.valve]:[u.valve,u.pressure,u.flow,u.leak,u.battery,u.electrical_energy,u.electrical_power,u.device_information],[_.water_heater]:[u.heater,u.temperature,u.leak,u.electrical_energy,u.electrical_power,u.device_information],[_.window_covering]:[u.window_covering,u.battery,u.electrical_energy,u.electrical_power,u.device_information]},xe=Object.fromEntries(Object.entries(ye).map(([e,t])=>{let n=Object.values(t.channels).map(e=>e.category),r=be[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]})),Se=Object.fromEntries(Object.entries(ye).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)}])),Ce=Object.fromEntries(Object.entries(ve).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)}])),we=(e,t)=>{let n=ve[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}},Te=({id:e})=>{let t=y(),n=t.getStore(W),r=t.getStore(H),i=e=>n.findById(e),a=e=>Ce[e.category]??null;return{canAddAnotherProperty:o(()=>{let t=i(e);if(t===null)return!0;let{required:n,optional:o}=a(t)??{required:[],optional:[]},s=[...n,...o],c=r.findForChannel(t.id).map(e=>e.category);return s.filter(e=>!c.includes(e)).length>0}),missingRequiredProperties:o(()=>{let t=i(e);if(t===null)throw new q(`Something went wrong, channel can't be loaded`);let{required:n}=a(t)??{required:[]},o=r.findForChannel(t.id).map(e=>e.category);return n.filter(e=>!o.includes(e))})}},Ee=C({id:P().uuid().optional(),type:P().trim().nonempty(),device:P().uuid().optional(),category:x(u).default(u.generic),identifier:P().trim().nonempty().nullable().optional(),name:P().trim().nonempty(),description:P().trim().transform(e=>e===``?null:e).nullable().optional()}),De=C({id:P().uuid(),type:P().trim().nonempty(),device:P().uuid(),category:x(u).default(u.generic),identifier:P().trim().nonempty().nullable().optional(),name:P().trim().nonempty().optional(),description:P().trim().transform(e=>e===``?null:e).nullable().optional()}),Oe=({type:e})=>{let{getByType:t}=ce(),n=o(()=>t(e));return{plugin:n,element:o(()=>(n.value?.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`))))}},ke=({id:e,type:a,deviceId:s})=>{let c=y(),{element:d}=Oe({type:a}),f=c.getStore(W),{devices:p,fetchDevices:m,areLoading:h}=te(),{t:g}=r(),_=w(),b=v(),x=l(K.NONE),S,C=o(()=>k.device?p.value.find(e=>e.id===k.device)??null:null),T=o(()=>C.value?f.findForDevice(C.value.id).map(e=>e.category):[]),E=o(()=>C.value?Se[C.value.category]??null:null),D=o(()=>E.value===null?[]:Object.values(u).filter(e=>E.value?.required.includes(e)||E.value?.optional.includes(e)).filter(e=>!T.value.includes(e)||E.value?.multiple?.includes(e)).map(e=>({value:e,label:g(`devicesModule.categories.channels.${e}`)}))),O=o(()=>p.value.filter(e=>e.type===a).map(e=>({value:e.id,label:e.name}))),k=n({...j(d.value?.schemas?.channelAddFormSchema||Ee),id:e,type:a,device:s,category:u.generic,name:``,description:``}),M=A(i(k)),N=l(void 0),P=l(!1),F=async()=>{if(N.value.clearValidate(),!await N.value.validate())throw new Y(`Form not valid`);let t=s??k.device;if(!t)throw new Y(`Missing device identifier`);if(!k.category)throw new Y(`Missing data type definition`);let n=(d.value?.schemas?.channelAddFormSchema||Ee).safeParse(k);if(!n.success)throw b.error(`Schema validation failed with:`,n.error),new Y(`Failed to validate create channel model.`);x.value=K.WORKING;let r=g(`devicesModule.messages.channels.notCreated`,{device:k.name});try{await f.add({id:e,deviceId:t,draft:!1,data:{...n.data,type:a}})}catch(e){throw x.value=K.ERROR,S=window.setTimeout(I,2e3),e instanceof J&&e.code===422?_.error(e.message):_.error(r),e}return x.value=K.OK,S=window.setTimeout(I,2e3),_.success(g(`devicesModule.messages.channels.created`,{device:k.name})),`added`},I=()=>{window.clearTimeout(S),x.value=K.NONE};return m().catch(()=>{}),t(k,()=>{P.value=!(0,X.isEqual)(i(k),M)}),t(()=>D.value,e=>{e.length&&e[0]&&(k.category=e[0].value,M.category=e[0].value)},{immediate:!0}),{categoriesOptions:D,devicesOptions:O,model:k,formEl:N,formChanged:P,submit:F,clear:I,formResult:x,loadingDevices:h}},Ae=({channel:e,messages:a})=>{let s=y(),{element:c}=Oe({type:e.type}),d=s.getStore(W),{devices:f,fetchDevices:p,areLoading:m}=te(),{t:h}=r(),g=w(),_=v(),b=l(K.NONE),x,S=o(()=>f.value.find(t=>t.id===e.device)??null),C=o(()=>S.value?d.findForDevice(S.value.id).filter(t=>t.id!==e.id).map(e=>e.category):[]),T=o(()=>S.value?Se[S.value.category]??null:null),E=o(()=>T.value===null?[]:Object.values(u).filter(e=>T.value?.required.includes(e)||T.value?.optional.includes(e)).filter(e=>!C.value.includes(e)||T.value?.multiple?.includes(e)).map(e=>({value:e,label:h(`devicesModule.categories.channels.${e}`)}))),D=o(()=>f.value.map(e=>({value:e.id,label:e.name}))),O=n(e),k=A(i(O)),j=l(void 0),M=l(!1),N=async()=>{let t=e.draft,n=a&&a.error?a.error:e.draft?h(`devicesModule.messages.channels.notCreated`,{channel:e.name}):h(`devicesModule.messages.channels.notEdited`,{channel:e.name});if(j.value.clearValidate(),!await j.value.validate())throw new Y(`Form not valid`);let r=(c.value?.schemas?.channelEditFormSchema||De).safeParse(O);if(!r.success)throw _.error(`Schema validation failed with:`,r.error),new Y(`Failed to validate edit channel model.`);b.value=K.WORKING;try{await d.edit({id:e.id,data:{...r.data,type:e.type}}),e.draft&&await d.save({id:e.id,deviceId:e.device})}catch(e){throw b.value=K.ERROR,x=window.setTimeout(P,2e3),e instanceof J&&e.code===422?g.error(e.message):g.error(n),e}return b.value=K.OK,x=window.setTimeout(P,2e3),t?(g.success(h(a&&a.success?a.success:`devicesModule.messages.channels.created`,{channel:e.name})),`added`):(g.success(h(a&&a.success?a.success:`devicesModule.messages.channels.edited`,{channel:e.name})),M.value=!1,k=A(i(O)),`saved`)},P=()=>{window.clearTimeout(x),b.value=K.NONE};return p().catch(()=>{}),t(O,()=>{M.value=!(0,X.isEqual)(i(O),k)}),{categoriesOptions:E,devicesOptions:D,model:O,formEl:j,formChanged:M,submit:N,clear:P,formResult:b,loadingDevices:m}},je=({channelId:e,id:t})=>{let n=y().getStore(H),{data:r,semaphore:i}=L(n);return{property:o(()=>t===null?null:r.value[t]??null),isLoading:o(()=>i.value.fetching.item.includes(t)?!0:(r.value[t]??null)===null?i.value.fetching.items.includes(e)||i.value.fetching.items.includes(`all`):!1),fetchProperty:async()=>{(r.value[t]??null)?.draft||await n.get({id:t,channelId:e})}}},Me=({channelId:e})=>{let t=y().getStore(H),{firstLoad:n,semaphore:r}=L(t),i=typeof e==`string`?o(()=>e):e;return{properties:o(()=>t.findAll().filter(e=>!i?.value||e.channel===i.value)),areLoading:o(()=>i.value?r.value.fetching.items.includes(i.value)?!0:n.value.includes(i.value)?!1:r.value.fetching.items.includes(i.value):!1),loaded:o(()=>i.value?n.value.includes(i.value):!1),fetchProperties:async()=>{i.value&&await t.fetch({channelId:i.value})}}},Q={search:void 0,channels:[],categories:[],permissions:[],dataTypes:[]},Ne={by:`category`,dir:`asc`},Pe=({channelId:e,key:n=`list`})=>{let r=y().getStore(H),{firstLoad:i,semaphore:a}=L(r),{filters:s,sort:c,pagination:u,reset:d}=O({key:`${G}:channels-properties:${n}`,filters:{schema:pe,defaults:Q},sort:{defaults:[Ne]},pagination:{defaults:{page:1,size:10}},syncQuery:!0,version:1}),f=o(()=>s.value.search!==Q.search||!(0,X.isEqual)(s.value.channels,Q.channels)||!(0,X.isEqual)(s.value.categories,Q.categories)||!(0,X.isEqual)(s.value.permissions,Q.permissions)||!(0,X.isEqual)(s.value.dataTypes,Q.dataTypes)),p=l(u.value.size||10),m=l(u.value.page||1),h=l(c.value.length>0?c.value[0]?.by:void 0),g=l(c.value.length>0?c.value[0]?.dir??null:null),_=o(()=>N(r.findAll().filter(t=>!e||t.channel===e).filter(e=>!e.draft&&(!s.value.search||e.id?.toLowerCase().includes(s.value.search.toLowerCase())||e.name?.toLowerCase().includes(s.value.search.toLowerCase())||e.identifier?.toLowerCase().includes(s.value.search.toLowerCase()))&&(s.value.categories.length===0||s.value.categories.includes(e.category))&&(s.value.dataTypes.length===0||s.value.dataTypes.includes(e.dataType))&&(s.value.permissions.length===0||e.permissions.some(e=>s.value.permissions.includes(e)))),[e=>e[h.value]??``],[g.value===`asc`?`asc`:`desc`])),v=o(()=>{let e=(m.value-1)*p.value,t=e+p.value;return _.value.slice(e,t)}),b=async()=>{await r.fetch({channelId:e})},x=o(()=>a.value.fetching.items.includes(e)?!0:i.value.includes(e)?!1:a.value.fetching.items.includes(e)),S=o(()=>i.value.includes(e)),C=o(()=>r.findAll().filter(t=>!e||t.channel===e).filter(e=>!e.draft).length);return t(()=>u.value,e=>{m.value=e.page??1,p.value=e.size??10},{deep:!0}),t(()=>m.value,e=>{u.value.page=e}),t(()=>p.value,e=>{u.value.size=e}),t(()=>g.value,e=>{h.value===void 0||e===null?c.value=[]:c.value=[{by:h.value,dir:e}]}),t(()=>h.value,e=>{e===void 0?c.value=[]:c.value=[{by:e,dir:g.value}]}),{properties:_,propertiesPaginated:v,totalRows:C,areLoading:x,loaded:S,fetchProperties:b,filters:s,filtersActive:f,paginateSize:p,paginatePage:m,sortBy:h,sortDir:g,resetFilter:d}},Fe=()=>{let{t:e}=r(),t=w(),n=y().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}`)}))})}}},Ie=({id:e})=>{let t=y().getStore(H);return{icon:o(()=>{switch(t.findById(e)?.category){default:return`mdi:tune`}})}},Le=C({id:P().uuid().optional(),type:P().trim().nonempty(),channel:P().uuid().optional(),category:x(D).default(D.generic),identifier:P().trim().nonempty().nullable().optional(),name:P().trim().nonempty().nullable(),permissions:g(x(M)),dataType:x(F),format:g(p([P(),p([b(),h()])])).nullable(),invalid:p([P(),b(),f(),h()]),step:p([P(),b()]).transform(e=>e===``?null:Number(e)).nullable(),enterValue:f().default(!1),value:p([P(),b(),f(),h()]).optional(),enumValues:g(P()),minValue:p([P(),b()]).transform(e=>e===``?void 0:Number(e)).optional(),maxValue:p([P(),b()]).transform(e=>e===``?void 0:Number(e)).optional()}),Re=C({id:P().uuid(),type:P().trim().nonempty(),channel:P().uuid(),category:x(D).default(D.generic),identifier:P().trim().nonempty().nullable().optional(),name:P().trim().nonempty().nullable().optional(),permissions:g(x(M)),dataType:x(F),format:g(p([P(),p([b(),h()])])).nullable(),invalid:p([P(),b(),f(),h()]),step:p([P(),b()]).transform(e=>e===``?null:Number(e)).nullable(),enterValue:f().default(!1),value:p([P(),b(),f(),h()]).optional(),enumValues:g(P()),minValue:p([P(),b()]).transform(e=>e===``?void 0:Number(e)).optional(),maxValue:p([P(),b()]).transform(e=>e===``?void 0:Number(e)).optional()}),ze=({type:e})=>{let{getByType:t}=se(),n=o(()=>t(e));return{plugin:n,element:o(()=>(n.value?.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`))))}},Be=({id:e,type:a,channelId:s})=>{let c=y(),{element:d}=ze({type:a}),f=c.getStore(H),{channels:p,fetchChannels:m,areLoading:h}=ue(),{t:g}=r(),_=w(),b=v(),x=l(K.NONE),S,C=o(()=>I.channel?p.value.find(e=>e.id===I.channel)??null:null),T=o(()=>C.value?f.findForChannel(C.value.id).map(e=>e.category):[]),E=o(()=>C.value?Ce[C.value.category]??null:null),O=o(()=>E.value===null?[]:Object.values(D).filter(e=>E.value?.required.includes(e)||E.value?.optional.includes(e)).filter(e=>!T.value.includes(e)).map(e=>({value:e,label:g(`devicesModule.categories.channelsProperties.${e}`)}))),k=o(()=>p.value.map(e=>({value:e.id,label:e.name}))),N=Object.values(M).map(e=>({value:e,label:g(`devicesModule.permissions.${e}`)})),P=Object.values(F).map(e=>({value:e,label:g(`devicesModule.dataTypes.${e}`)})),I=n({...j(d.value?.schemas?.channelPropertyAddFormSchema||Le),id:e,type:a,channel:s,category:D.generic,name:``,permissions:[],dataType:F.unknown,format:null,invalid:null,step:null,enumValues:[],minValue:void 0,maxValue:void 0,enterValue:!1,value:void 0}),L=A(i(I)),R=l(void 0),z=l(!1),B=async()=>{if(R.value.clearValidate(),!await R.value.validate())throw new Y(`Form not valid`);let t=s??I.channel;if(!t)throw new Y(`Missing channel identifier`);if(I.name===``&&(I.name=null),!I.category)throw new Y(`Missing data type definition`);I.dataType===F.enum?I.format=I.enumValues:[F.char,F.uchar,F.short,F.ushort,F.int,F.uint,F.float].includes(I.dataType)&&(I.format=[typeof I.minValue==`string`&&I.minValue!==``?Number(I.minValue):typeof I.minValue==`number`?I.minValue:null,typeof I.maxValue==`string`&&I.maxValue!==``?Number(I.maxValue):typeof I.maxValue==`number`?I.maxValue:null]),I.enterValue||delete I.value;let n=(d.value?.schemas?.channelPropertyAddFormSchema||Le).safeParse(I);if(!n.success)throw b.error(`Schema validation failed with:`,n.error),new Y(`Failed to validate create channel property model.`);x.value=K.WORKING;let r=g(`devicesModule.messages.channelsProperties.notCreated`,{device:I.name});try{await f.add({id:e,channelId:t,draft:!1,data:{...n.data,type:a}})}catch(e){throw x.value=K.ERROR,S=window.setTimeout(V,2e3),e instanceof J&&e.code===422?_.error(e.message):_.error(r),e}return x.value=K.OK,S=window.setTimeout(V,2e3),_.success(g(`devicesModule.messages.channelsProperties.created`,{device:I.name})),`added`},V=()=>{window.clearTimeout(S),x.value=K.NONE};return m().catch(()=>{}),t(I,()=>{z.value=!(0,X.isEqual)(i(I),L)}),t(()=>I.category,e=>{let t=we(C.value?.category??u.generic,e);t&&(L.permissions=t.permissions,L.dataType=t.data_type,I.permissions=t.permissions,I.dataType=t.data_type,t.invalid!==void 0&&(L.invalid=t.invalid,I.invalid=t.invalid),t.step!==void 0&&(L.step=t.step,I.step=t.step),L.dataType===F.enum?(L.enumValues=t.format??[],L.minValue=void 0,L.maxValue=void 0,I.enumValues=t.format??[],I.minValue=void 0,I.maxValue=void 0):[F.char,F.uchar,F.short,F.ushort,F.int,F.uint,F.float].includes(I.dataType)?(L.enumValues=[],L.minValue=t.format?.[0],L.maxValue=t.format?.[1],I.enumValues=[],I.minValue=t.format?.[0],I.maxValue=t.format?.[1]):(L.enumValues=[],L.minValue=void 0,L.maxValue=void 0,I.enumValues=[],I.minValue=void 0,I.maxValue=void 0),z.value=!(0,X.isEqual)(i(I),L))},{immediate:!0}),t(()=>O.value,e=>{e.length&&e[0]&&(I.category=e[0].value,L.category=e[0].value)},{immediate:!0}),{categoriesOptions:O,channelsOptions:k,permissionsOptions:N,dataTypesOptions:P,model:I,formEl:R,formChanged:z,submit:B,clear:V,formResult:x,loadingChannels:h}},Ve=({property:e,messages:a})=>{let s=y(),{element:c}=ze({type:e.type}),u=s.getStore(H),{channels:d,fetchChannels:f,areLoading:p}=ue(),{t:m}=r(),h=w(),g=v(),_=l(K.NONE),b,x=[],S,C;e.dataType===F.enum?x=e.format?e.format.map(e=>e?.toString()||``):[]:[F.char,F.uchar,F.short,F.ushort,F.int,F.uint,F.float].includes(e.dataType)&&Array.isArray(e.format)&&e.format.length===2&&(S=e.format[0],C=e.format[1]);let T=o(()=>d.value.find(t=>t.id===e.channel)??null),E=o(()=>T.value?u.findForChannel(T.value.id).filter(t=>t.id!==e.id).map(e=>e.category):[]),O=o(()=>T.value?Ce[T.value.category]??null:null),k=o(()=>O.value===null?[]:Object.values(D).filter(e=>O.value?.required.includes(e)||O.value?.optional.includes(e)).filter(e=>!E.value.includes(e)).map(e=>({value:e,label:m(`devicesModule.categories.channelsProperties.${e}`)}))),j=o(()=>d.value.map(e=>({value:e.id,label:e.name}))),N=Object.values(M).map(e=>({value:e,label:m(`devicesModule.permissions.${e}`)})),P=Object.values(F).map(e=>({value:e,label:m(`devicesModule.dataTypes.${e}`)})),I=n({...e,format:i(e.format),value:e.value?.value??null,enumValues:x,minValue:S,maxValue:C,enterValue:!1}),L=A(i(I)),R=l(void 0),z=l(!1),B=async()=>{let t=e.draft,n=a&&a.error?a.error:e.draft?m(`devicesModule.messages.channelsProperties.notCreated`,{property:e.name??m(`devicesModule.categories.channelsProperties.${e.category}`)}):m(`devicesModule.messages.channelsProperties.notEdited`,{property:e.name??m(`devicesModule.categories.channelsProperties.${e.category}`)});if(R.value.clearValidate(),!await R.value.validate())throw new Y(`Form not valid`);I.name===``&&(I.name=null),e.dataType===F.enum?I.format=I.enumValues:[F.char,F.uchar,F.short,F.ushort,F.int,F.uint,F.float].includes(e.dataType)&&(I.format=[I.minValue??null,I.maxValue??null]),I.enterValue||delete I.value;let r=(c.value?.schemas?.channelPropertyEditFormSchema||Re).safeParse(I);if(!r.success)throw g.error(`Schema validation failed with:`,r.error),new Y(`Failed to validate edit channel property model.`);_.value=K.WORKING;try{await u.edit({id:e.id,channelId:e.channel,data:{...r.data,type:e.type}}),e.draft&&await u.save({id:e.id,channelId:e.channel})}catch(e){throw _.value=K.ERROR,b=window.setTimeout(V,2e3),e instanceof J&&e.code===422?h.error(e.message):h.error(n),e}return _.value=K.OK,b=window.setTimeout(V,2e3),t?(h.success(m(a&&a.success?a.success:`devicesModule.messages.channelsProperties.created`,{property:e.name??m(`devicesModule.categories.channelsProperties.${e.category}`)})),`added`):(h.success(m(a&&a.success?a.success:`devicesModule.messages.channelsProperties.edited`,{property:e.name??m(`devicesModule.categories.channelsProperties.${e.category}`)})),z.value=!1,L=A(i(I)),`saved`)},V=()=>{window.clearTimeout(b),_.value=K.NONE};return f().catch(()=>{}),t(I,()=>{z.value=!(0,X.isEqual)(i(I),L)}),{categoriesOptions:k,channelsOptions:j,permissionsOptions:N,dataTypesOptions:P,model:I,formEl:R,formChanged:z,submit:B,clear:V,formResult:_,loadingChannels:p}},He=({id:e})=>{let t=y().getStore(V),{data:n,semaphore:r}=L(t);return{device:o(()=>e===null?null:n.value[e]??null),isLoading:o(()=>r.value.fetching.item.includes(e)?!0:(n.value[e]??null)===null?r.value.fetching.items:!1),fetchDevice:async()=>{(n.value[e]??null)?.draft||await t.get({id:e})}}},$={search:void 0,types:[],state:`all`,states:[],categories:[],enabled:`all`,validation:`all`},Ue={by:`name`,dir:`asc`},We=()=>{let e=y(),n=e.getStore(V),r=e.getStore(U),{firstLoad:i,semaphore:a}=L(n),{filters:s,sort:c,pagination:u,reset:d}=O({key:`${G}:devices:list`,filters:{schema:de,defaults:$},sort:{defaults:[Ue]},pagination:{defaults:{page:1,size:10}},syncQuery:!0,version:1}),f=o(()=>s.value.search!==$.search||!(0,X.isEqual)(s.value.types,$.types)||s.value.state!==$.state||!(0,X.isEqual)(s.value.states,$.states)||!(0,X.isEqual)(s.value.categories,$.categories)||!(0,X.isEqual)(s.value.enabled,$.enabled)||s.value.validation!==$.validation),p=l(u.value.size||10),m=l(u.value.page||1),h=l(c.value.length>0?c.value[0]?.by:void 0),g=l(c.value.length>0?c.value[0]?.dir??null:null),_=e=>r.findById(e)?.isValid??null,v=o(()=>N(n.findAll().filter(e=>!e.draft&&(!s.value.search||e.id.toLowerCase().includes(s.value.search.toLowerCase())||e.name.toLowerCase().includes(s.value.search.toLowerCase())||e.description?.toLowerCase().includes(s.value.search.toLowerCase())||e.identifier?.toLowerCase().includes(s.value.search.toLowerCase()))&&(s.value.types.length===0||s.value.types.includes(e.type))&&(s.value.categories.length===0||s.value.categories.includes(e.category))&&(s.value.enabled===`all`||s.value.enabled===`enabled`&&e.enabled||s.value.enabled===`disabled`&&!e.enabled)&&(s.value.states.length===0||s.value.states.includes(e.status?.status??k.unknown))&&(s.value.state===`all`||s.value.state===`online`&&[k.ready,k.connected,k.running].includes(e.status.status)||s.value.state===`offline`&&[k.disconnected,k.stopped,k.lost,k.unknown].includes(e.status.status))&&(s.value.validation===`all`||s.value.validation===`valid`&&_(e.id)===!0||s.value.validation===`invalid`&&_(e.id)===!1)),[e=>h.value===`state`?e.status?.status??k.unknown:e[h.value]??``],[g.value===`asc`?`asc`:`desc`])),b=o(()=>{let e=(m.value-1)*p.value,t=e+p.value;return v.value.slice(e,t)}),x=async()=>{await n.fetch()},S=o(()=>a.value.fetching.items||!i.value),C=o(()=>i.value),w=o(()=>n.findAll().filter(e=>!e.draft).length);return t(()=>u.value,e=>{m.value=e.page??1,p.value=e.size??10},{deep:!0}),t(()=>m.value,e=>{u.value.page=e}),t(()=>p.value,e=>{u.value.size=e}),t(()=>g.value,e=>{h.value===void 0||e===null?c.value=[]:c.value=[{by:h.value,dir:e}]}),t(()=>h.value,e=>{e===void 0?c.value=[]:c.value=[{by:e,dir:g.value}]}),{devices:v,devicesPaginated:b,totalRows:w,areLoading:S,loaded:C,fetchDevices:x,filters:s,filtersActive:f,paginateSize:p,paginatePage:m,sortBy:h,sortDir:g,resetFilter:d}},Ge=()=>{let{t:e}=r(),t=w(),n=y().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`});let i=0,a=0;for(let e of r)try{await n.remove({id:e.id}),i++}catch{a++}i>0&&t.success(e(`devicesModule.messages.devices.bulkRemoved`,{count:i})),a>0&&t.error(e(`devicesModule.messages.devices.bulkRemoveFailed`,{count:a}))}catch{}},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`});let i=0,a=0;for(let e of r)try{await n.edit({id:e.id,data:{type:e.type,enabled:!0}}),i++}catch{a++}i>0&&t.success(e(`devicesModule.messages.devices.bulkEnabled`,{count:i})),a>0&&t.error(e(`devicesModule.messages.devices.bulkEnableFailed`,{count:a}))}catch{t.info(e(`devicesModule.messages.devices.bulkEnableCanceled`))}},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`});let i=0,a=0;for(let e of r)try{await n.edit({id:e.id,data:{type:e.type,enabled:!1}}),i++}catch{a++}i>0&&t.success(e(`devicesModule.messages.devices.bulkDisabled`,{count:i})),a>0&&t.error(e(`devicesModule.messages.devices.bulkDisableFailed`,{count:a}))}catch{t.info(e(`devicesModule.messages.devices.bulkDisableCanceled`))}}}},Ke=({id:e})=>{let t=y().getStore(V);return{icon:o(()=>{switch(t.findById(e)?.category){default:return`mdi:devices`}})}},qe=({id:e})=>{let t=y(),n=t.getStore(V),r=t.getStore(W),i=e=>n.findById(e),a=e=>Se[e.category]??null;return{canAddAnotherChannel:o(()=>{let t=i(e);if(t===null)return!0;let{required:n,optional:o,multiple:s}=a(t)??{required:[],optional:[]},c=[...n,...o],l=r.findForDevice(t.id).map(e=>e.category);return c.filter(e=>!l.includes(e)).length>0||s!==void 0&&s.length>0}),missingRequiredChannels:o(()=>{let t=i(e);if(t===null)throw new q(`Something went wrong, device can't be loaded`);let{required:n}=a(t)??{required:[]},o=r.findForDevice(t.id).map(e=>e.category);return n.filter(e=>!o.includes(e))})}},Je=C({id:P().uuid().optional(),type:P().trim().nonempty(),category:x(_).default(_.generic),identifier:P().trim().nonempty().nullable().optional(),name:P().trim().nonempty(),description:P().trim().transform(e=>e===``?null:e).nullable().optional(),enabled:f().default(!0).optional()}),Ye=C({id:P().uuid(),type:P().trim().nonempty(),category:x(_).default(_.generic),identifier:P().trim().nonempty().nullable().optional(),name:P().trim().nonempty().optional(),description:P().trim().transform(e=>e===``?null:e).nullable().optional(),enabled:f().optional(),roomId:P().uuid().nullable().optional()}),Xe=()=>{let e=d(),{enabled:t}=E(),n=[`deviceAddForm`,`deviceEditForm`],r=[`deviceSchema`,`deviceAddFormSchema`,`deviceEditFormSchema`,`deviceCreateReqSchema`,`deviceUpdateReqSchema`],i=o(()=>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=n.length===0||!!e.components&&n.some(t=>e.components&&t in e.components),i=r.length===0||!!e.schemas&&r.some(t=>e.schemas&&t in e.schemas);return t||i}):!1));return{plugins:i,options:o(()=>N(i.value.flatMap(e=>(e.elements??[]).filter(e=>e.modules===void 0||e.modules.includes(`devices-module`)).map(n=>({value:n.type,label:n.name?.trim()?n.name:e.name,disabled:!t(e.type)}))),[e=>e.label],[`asc`])),getByName:e=>i.value.find(t=>t.type===e),getByType:e=>i.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 i.value){let n=(t.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`)));if(n)return n}}}},Ze=({type:e})=>{let{getByType:t}=Xe(),n=o(()=>t(e));return{plugin:n,element:o(()=>(n.value?.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`))))}},Qe=({id:e,type:a})=>{let o=y(),{element:s}=Ze({type:a}),c=o.getStore(V),{t:u}=r(),d=w(),f=v(),p=l(K.NONE),m,h=Object.values(_).map(e=>({value:e,label:u(`devicesModule.categories.devices.${e}`)})),g=n({...j(s.value?.schemas?.deviceAddFormSchema||Je),id:e,type:a,category:_.generic,name:``,description:``}),b=A(i(g)),x=l(void 0),S=l(!1),C=async()=>{if(x.value.clearValidate(),!await x.value.validate())throw new Y(`Form not valid`);let t=(s.value?.schemas?.deviceAddFormSchema||Je).safeParse(g);if(!t.success)throw f.error(`Schema validation failed with:`,t.error),new Y(`Failed to validate create device model.`);p.value=K.WORKING;let n=u(`devicesModule.messages.devices.notCreated`,{device:g.name});try{await c.add({id:e,draft:!1,data:{...t.data,type:a}})}catch(e){throw p.value=K.ERROR,m=window.setTimeout(T,2e3),e instanceof J&&e.code===422?d.error(e.message):d.error(n),e}return p.value=K.OK,m=window.setTimeout(T,2e3),d.success(u(`devicesModule.messages.devices.created`,{device:g.name})),`added`},T=()=>{window.clearTimeout(m),p.value=K.NONE};return t(g,()=>{S.value=!(0,X.isEqual)(i(g),b)}),{categoriesOptions:h,model:g,formEl:x,formChanged:S,submit:C,clear:T,formResult:p}},$e=({device:e,messages:a})=>{let o=y(),{element:s}=Ze({type:e.type}),c=o.getStore(V),{t:u}=r(),d=w(),f=v(),p=l(K.NONE),m,h=Object.values(_).map(e=>({value:e,label:u(`devicesModule.categories.devices.${e}`)})),g=n(e),b=A(i(g)),x=l(void 0),S=l(!1),C=async()=>{let t=e.draft,n=a&&a.error?a.error:e.draft?u(`devicesModule.messages.devices.notCreated`,{device:e.name}):u(`devicesModule.messages.devices.notEdited`,{device:e.name});if(x.value.clearValidate(),!await x.value.validate())throw new Y(`Form not valid`);let r=(s.value?.schemas?.deviceEditFormSchema||Ye).safeParse(g);if(!r.success)throw f.error(`Schema validation failed with:`,r.error),new Y(`Failed to validate edit device model.`);p.value=K.WORKING;try{await c.edit({id:e.id,data:{...r.data,type:e.type}}),e.draft&&await c.save({id:e.id})}catch(e){throw p.value=K.ERROR,m=window.setTimeout(T,2e3),e instanceof J&&e.code===422?d.error(e.message):d.error(n),e}return p.value=K.OK,m=window.setTimeout(T,2e3),t?(d.success(u(a&&a.success?a.success:`devicesModule.messages.devices.created`,{device:e.name})),`added`):(d.success(u(a&&a.success?a.success:`devicesModule.messages.devices.edited`,{device:e.name})),S.value=!1,b=A(i(g)),`saved`)},T=()=>{window.clearTimeout(m),p.value=K.NONE};return t(g,()=>{S.value=!(0,X.isEqual)(i(g),b)}),{categoriesOptions:h,model:g,formEl:x,formChanged:S,submit:C,clear:T,formResult:p}},et=()=>{let e=y().getStore(U),{data:t,semaphore:n,firstLoad:r}=L(e);return{validation:o(()=>t.value),summary:o(()=>t.value?.summary??null),invalidDevices:o(()=>t.value?t.value.devices.filter(e=>!e.isValid):[]),isLoading:o(()=>n.value.fetching.items),isLoaded:o(()=>r.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}}},tt=({id:e})=>{let t=y().getStore(U),{semaphore:n}=L(t);return{validation:o(()=>t.findById(e)),isValid:o(()=>{let n=t.findById(e);return n?n.isValid:null}),issues:o(()=>{let n=t.findById(e);return n?n.issues:[]}),errorCount:o(()=>{let n=t.findById(e);return n?n.issues.filter(e=>e.severity===`error`).length:0}),warningCount:o(()=>{let n=t.findById(e);return n?n.issues.filter(e=>e.severity===`warning`).length:0}),isLoading:o(()=>n.value.fetching.item.includes(e)),fetchValidation:async()=>{await t.get({id:e})}}},nt=300,rt=1e4,it=({id:n})=>{let r=y(),i=r.getStore(V),a=r.getStore(W),s=r.getStore(H),{data:c,semaphore:d}=L(i),{data:f,semaphore:p,firstLoad:m}=L(a),{semaphore:h,firstLoad:g}=L(s),{sendCommand:_}=I(),v={},b={},x={},S=l({}),C=l({}),w=o(()=>n===null?null:c.value[n]??null),T=o(()=>Object.values(f.value).filter(e=>e.device===n&&e.category!==u.device_information)),E=o(()=>T.value.filter(e=>s.findForChannel(e.id).some(e=>e.permissions.includes(M.rw)||e.permissions.includes(M.wo)))),D=o(()=>E.value.length>0),O=e=>s.findForChannel(e),k=e=>e.permissions.includes(M.rw)||e.permissions.includes(M.wo),A=e=>{let t=S.value[e];return t===void 0?s.findById(e)?.value?.value??null:t},j=e=>C.value[e]??!1,N=(e,t)=>{if(t!==void 0){let n=S.value[e];if(n!==t&&String(n)!==String(t))return}delete S.value[e],x[e]&&(clearTimeout(x[e]),delete x[e])},P=(e,t)=>{x[e]&&clearTimeout(x[e]),x[e]=setTimeout(()=>{let n=S.value[e];(n===t||String(n)===String(t))&&delete S.value[e],delete x[e]},rt)},F=async(e,t,r)=>s.findById(t)?(v[t]&&(clearTimeout(v[t]),delete v[t],b[t]&&(b[t](!1),delete b[t])),S.value[t]=r,new Promise(i=>{b[t]=i;let a=setTimeout(async()=>{delete b[t],C.value[t]=!0;try{await _(ae.CHANNEL_PROPERTY_SET,{context:{origin:`admin`},properties:[{device:n,channel:e,property:t,value:r}]},`DevicesModule.Internal.SetPropertyValue`)===!0?(P(t,r),i(!0)):(N(t,r),i(!1))}catch{N(t,r),i(!1)}finally{C.value[t]=!1,v[t]===a&&delete v[t]}},nt);v[t]=a})):!1,R=async()=>{(n in c.value?c.value[n]:null)?.draft||await i.get({id:n})},z=async()=>{await a.fetch({deviceId:n})},B=async()=>{let e=Object.values(f.value).filter(e=>e.device===n);for(let t of e)await s.fetch({channelId:t.id})},ee=o(()=>{if(d.value.fetching.item.includes(n)||p.value.fetching.items.includes(n))return!0;for(let e of T.value)if(h.value.fetching.items.includes(e.id))return!0;return!1}),U=o(()=>m.value.includes(n)),te=o(()=>{if(!U.value)return!1;for(let e of T.value)if(!g.value.includes(e.id))return!1;return!0});return t(()=>{let e={};for(let t of Object.keys(S.value)){let n=s.findById(t);n&&(e[t]=n.value?.value??null)}return e},e=>{for(let[t,n]of Object.entries(S.value)){let r=e[t];(r===n||String(r)===String(n))&&N(t)}},{deep:!0}),e(()=>{for(let e of Object.keys(v))clearTimeout(v[e]),delete v[e],b[e]&&(b[e](!1),delete b[e]);for(let e of Object.keys(x))clearTimeout(x[e]),delete x[e]}),{device:w,channels:T,controllableChannels:E,hasControllableProperties:D,isLoading:ee,areChannelsLoaded:U,arePropertiesLoaded:te,fetchDevice:R,fetchChannels:z,fetchProperties:B,getPropertiesForChannel:O,isPropertyWritable:k,getPropertyValue:A,isPropertyLoading:j,setPropertyValue:F}},at=({deviceId:e})=>{let t=y().getStore(ee),{firstLoad:n,semaphore:r}=L(t);return{controls:o(()=>t.findForDevice(e)),areLoading:o(()=>r.value.fetching.items.includes(e)),loaded:o(()=>n.value.includes(e)),fetchControls:async()=>t.fetch({deviceId:e})}},ot=e=>{let n=B(),r=v(),i=l({}),u=l(!1),d=l(!1),f=l(!1),p=l(void 0),m=l(!1),h=null,g=0,_=o(()=>Object.values(i.value).sort((e,t)=>new Date(t.ts).getTime()-new Date(e.ts).getTime())),y=o(()=>{let e=[T.warn,T.error,T.fatal,T.fail];return _.value.filter(t=>e.includes(t.type))}),b=o(()=>y.value.length),x=o(()=>b.value>0),S=async()=>{let t=a(e.deviceId);h=t,g++;let o=g;d.value=!0;try{let{data:e,error:a}=await n.client.GET(`/${s}/${z}/logs`,{params:{query:{resource:t,limit:50}}});if(h!==t||g!==o)return;e===void 0?a&&r.error(`Failed to fetch device logs:`,a):(i.value=Object.fromEntries(e.data.map(e=>{let t=ne(e);return[t.id,t]})),f.value=!0,u.value=e.metadata.has_more,p.value=e.metadata.next_cursor)}catch(e){h===t&&g===o&&r.error(`Error fetching device logs:`,e)}finally{h===t&&g===o&&(d.value=!1)}},C=async()=>{if(d.value||!u.value||!p.value)return;let t=a(e.deviceId),o=p.value,c=g;d.value=!0;try{let{data:e,error:a}=await n.client.GET(`/${s}/${z}/logs`,{params:{query:{resource:t,after_id:o,limit:50}}});if(h!==t||g!==c)return;if(e!==void 0){let t=Object.fromEntries(e.data.map(e=>{let t=ne(e);return[t.id,t]}));i.value={...i.value,...t},u.value=e.metadata.has_more,p.value=e.metadata.next_cursor}else a&&r.error(`Failed to load more device logs:`,a)}catch(e){h===t&&g===c&&r.error(`Error loading more device logs:`,e)}finally{h===t&&g===c&&(d.value=!1)}},w=async()=>{i.value={},p.value=void 0,u.value=!1,f.value=!1,await S()},E=null;return t(()=>m.value,e=>{E&&=(clearInterval(E),null),e&&(E=setInterval(()=>{d.value||S()},3e3))}),c(()=>{E&&=(clearInterval(E),null)}),t(()=>a(e.deviceId),()=>{w()}),{logs:_,alertLogs:y,alertCount:b,hasAlerts:x,hasMore:u,isLoading:d,loaded:f,live:m,fetchLogs:S,loadMoreLogs:C,refreshLogs:w}};export{we as A,Y as B,Pe as C,ke as D,Ae as E,le as F,K as G,G as H,ce as I,oe as K,se as L,ge as M,he as N,Te as O,ue as P,J as R,Fe as S,je as T,re as U,ie as V,ae as W,Ve as _,et as a,Re as b,Ze as c,Ye as d,qe as f,He as g,We as h,tt as i,_e as j,xe as k,Xe as l,Ge as m,at as n,$e as o,Ke as p,it as r,Qe as s,ot as t,Je as u,Be as v,Me as w,Ie as x,Le as y,q as z};
1
+ import"./chunk-DECur_0Z.js";import{Nr as e,Xr as t,ci as n,d as r,fi as i,hi as a,mr as o,n as s,si as c,ui as l}from"./icon-with-child-DmQ_XhQy.js";import{$n as u,A as d,Fn as f,Jn as p,Mn as m,Nn as h,Pn as g,Qn as _,S as v,T as y,Un as b,Vn as x,Vr as S,Wn as C,_ as w,_r as T,an as E,er as D,f as O,lr as k,m as A,n as j,nr as M,pn as N,qn as P,tr as F,u as I,va as L,wn as R,wt as z,y as B}from"./common-DyDAwGBz.js";import{a as V,i as ee,n as H,o as U,r as W}from"./keys-Cm97UJHM.js";import{t as te}from"./useDevices-oOyjupML.js";import{n as ne}from"./logs-entries.transformers-B17JQgGx.js";var re=`devices`,G=`devices-module`,ie=`DevicesModule.`,ae=function(e){return e.DEVICE_CREATED=`DevicesModule.Device.Created`,e.DEVICE_UPDATED=`DevicesModule.Device.Updated`,e.DEVICE_DELETED=`DevicesModule.Device.Deleted`,e.DEVICE_CONTROL_CREATED=`DevicesModule.DeviceControl.Created`,e.DEVICE_CONTROL_DELETED=`DevicesModule.DeviceControl.Deleted`,e.CHANNEL_CREATED=`DevicesModule.Channel.Created`,e.CHANNEL_UPDATED=`DevicesModule.Channel.Updated`,e.CHANNEL_DELETED=`DevicesModule.Channel.Deleted`,e.CHANNEL_CONTROL_CREATED=`DevicesModule.ChannelControl.Created`,e.CHANNEL_CONTROL_DELETED=`DevicesModule.ChannelControl.Deleted`,e.CHANNEL_PROPERTY_CREATED=`DevicesModule.ChannelProperty.Created`,e.CHANNEL_PROPERTY_UPDATED=`DevicesModule.ChannelProperty.Updated`,e.CHANNEL_PROPERTY_DELETED=`DevicesModule.ChannelProperty.Deleted`,e.CHANNEL_PROPERTY_SET=`DevicesModule.ChannelProperty.Set`,e.CHANNEL_PROPERTY_VALUE_SET=`DevicesModule.ChannelProperty.ValueSet`,e}({}),K=function(e){return e.NONE=`none`,e.WORKING=`working`,e.ERROR=`error`,e.OK=`ok`,e}({}),oe={DEVICES:`devices_module-devices`,DEVICES_ADD:`devices_module-devices_add`,DEVICES_EDIT:`devices_module-devices_edit`,DEVICE:`devices_module-device`,DEVICE_EDIT:`devices_module-device_edit`,DEVICE_CONTROL:`devices_module-device_control`,DEVICE_ADD_CHANNEL:`devices_module-device_add_channel`,DEVICE_EDIT_CHANNEL:`devices_module-device_edit_channel`,DEVICE_CHANNEL_ADD_PROPERTY:`devices_module-device_channel_add_property`,DEVICE_CHANNEL_EDIT_PROPERTY:`devices_module-device_channel_edit_property`,CHANNELS:`devices_module-channels`,CHANNELS_ADD:`devices_module-channels_add`,CHANNELS_EDIT:`devices_module-channels_edit`,CHANNEL:`devices_module-channel`,CHANNEL_EDIT:`devices_module-channel_edit`,CHANNEL_ADD_PROPERTY:`devices_module-channel_add_property`,CHANNEL_EDIT_PROPERTY:`devices_module-channel_edit_property`},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`}},se=()=>{let e=d(),{enabled:t}=E(),n=[`channelPropertyAddForm`,`channelPropertyEditForm`],r=[`channelPropertySchema`,`channelPropertyAddFormSchema`,`channelPropertyEditFormSchema`,`channelPropertyCreateReqSchema`,`channelPropertyUpdateReqSchema`],i=o(()=>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=n.length===0||!!e.components&&n.some(t=>e.components&&t in e.components),i=r.length===0||!!e.schemas&&r.some(t=>e.schemas&&t in e.schemas);return t||i}):!1));return{plugins:i,options:o(()=>N(i.value.flatMap(e=>(e.elements??[]).filter(e=>e.modules===void 0||e.modules.includes(`devices-module`)).map(n=>({value:n.type,label:n.name?.trim()?n.name:e.name,disabled:!t(e.type)}))),[e=>e.label],[`asc`])),getByName:e=>i.value.find(t=>t.type===e),getByType:e=>i.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 i.value){let n=(t.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`)));if(n)return n}}}},ce=()=>{let e=d(),{enabled:t}=E(),n=[`channelAddForm`,`channelEditForm`],r=[`channelSchema`,`channelAddFormSchema`,`channelEditFormSchema`,`channelCreateReqSchema`,`channelUpdateReqSchema`],i=o(()=>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=n.length===0||!!e.components&&n.some(t=>e.components&&t in e.components),i=r.length===0||!!e.schemas&&r.some(t=>e.schemas&&t in e.schemas);return t||i}):!1));return{plugins:i,options:o(()=>N(i.value.flatMap(e=>(e.elements??[]).filter(e=>e.modules===void 0||e.modules.includes(`devices-module`)).map(n=>({value:n.type,label:n.name?.trim()?n.name:e.name,disabled:!t(e.type)}))),[e=>e.label],[`asc`])),getByName:e=>i.value.find(t=>t.type===e),getByType:e=>i.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 i.value){let n=(t.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`)));if(n)return n}}}},le=({id:e})=>{let t=y().getStore(W),{data:n,semaphore:r}=L(t);return{channel:o(()=>e===null?null:n.value[e]??null),isLoading:o(()=>r.value.fetching.item.includes(e)?!0:(n.value[e]??null)===null?r.value.fetching.items.includes(`all`):!1),fetchChannel:async()=>{(n.value[e]??null)?.draft||await t.get({id:e})}}},ue=(e={})=>{let{deviceId:t}=e,n=y().getStore(W),{firstLoad:r,semaphore:i}=L(n),a=t===void 0?void 0:typeof t==`string`?o(()=>t):t;return{channels:o(()=>n.findAll().filter(e=>!a?.value||e.device===a.value)),areLoading:o(()=>i.value.fetching.items.includes(a?.value??`all`)?!0:r.value.includes(a?.value??`all`)?!1:i.value.fetching.items.includes(a?.value??`all`)),loaded:o(()=>r.value.includes(a?.value??`all`)),fetchChannels:async()=>{await n.fetch({deviceId:a?.value})}}},de=C({search:P().optional(),types:g(P()),state:m([`all`,`offline`,`online`]).default(`all`),states:g(x(k)),categories:g(x(_)),enabled:m([`all`,`enabled`,`disabled`]).default(`all`),validation:m([`all`,`valid`,`invalid`]).default(`all`)}),fe=C({search:P().optional(),devices:g(P()),categories:g(x(u))}),pe=C({search:P().optional(),channels:g(P()),categories:g(x(D)),permissions:g(x(M)),dataTypes:g(x(F))}),X=R(),Z={search:void 0,devices:[],categories:[]},me={by:`name`,dir:`asc`},he=(e={})=>{let{deviceId:n}=e,r=y().getStore(W),{firstLoad:i,semaphore:a}=L(r),{filters:s,sort:c,pagination:u,reset:d}=O({key:`${G}:channels:list`,filters:{schema:fe,defaults:Z},sort:{defaults:[me]},pagination:{defaults:{page:1,size:10}},syncQuery:!0,version:1}),f=o(()=>s.value.search!==Z.search||!(0,X.isEqual)(s.value.devices,Z.devices)||!(0,X.isEqual)(s.value.categories,Z.categories)),p=l(u.value.size||10),m=l(u.value.page||1),h=l(c.value.length>0?c.value[0]?.by:void 0),g=l(c.value.length>0?c.value[0]?.dir??null:null),_=o(()=>N(r.findAll().filter(e=>!n||e.device===n).filter(e=>!e.draft&&(!s.value.search||e.id.toLowerCase().includes(s.value.search.toLowerCase())||e.name.toLowerCase().includes(s.value.search.toLowerCase())||e.description?.toLowerCase().includes(s.value.search.toLowerCase())||e.identifier?.toLowerCase().includes(s.value.search.toLowerCase()))&&(s.value.categories.length===0||s.value.categories.includes(e.category))&&(s.value.devices.length===0||s.value.devices.includes(e.device))),[e=>e[h.value]??``],[g.value===`asc`?`asc`:`desc`])),v=o(()=>{let e=(m.value-1)*p.value,t=e+p.value;return _.value.slice(e,t)}),b=async()=>{await r.fetch({deviceId:n})},x=o(()=>a.value.fetching.items.includes(n??`all`)?!0:i.value.includes(n??`all`)?!1:a.value.fetching.items.includes(n??`all`)),S=o(()=>i.value.includes(n??`all`)),C=o(()=>r.findAll().filter(e=>!n||e.device===n).filter(e=>!e.draft).length);return t(()=>u.value,e=>{m.value=e.page??1,p.value=e.size??10},{deep:!0}),t(()=>m.value,e=>{u.value.page=e}),t(()=>p.value,e=>{u.value.size=e}),t(()=>g.value,e=>{h.value===void 0||e===null?c.value=[]:c.value=[{by:h.value,dir:e}]}),t(()=>h.value,e=>{e===void 0?c.value=[]:c.value=[{by:e,dir:g.value}]}),{channels:_,channelsPaginated:v,totalRows:C,areLoading:x,loaded:S,fetchChannels:b,filters:s,filtersActive:f,paginateSize:p,paginatePage:m,sortBy:h,sortDir:g,resetFilter:d}},ge=()=>{let{t:e}=r(),t=w(),n=y().getStore(W),i=e=>n.findById(e);return{remove:async r=>{let a=i(r);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}))})}}},_e=({id:e})=>{let t=y().getStore(W);return{icon:o(()=>{switch(t.findById(e)?.category){default:return`mdi:chip`}})}},ve={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:!0,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:!0,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`]},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}}},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}}}},ye={generic:{category:`generic`,channels:{generic:{category:`generic`,required:!1,multiple:!0},device_information:{category:`device_information`,required:!0,multiple:!1}}},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}}},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}}},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}}},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}}},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}}},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}}},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}}},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}}},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},contact:{category:`contact`,required:!1,multiple:!0},switcher:{category:`switcher`,required:!1,multiple:!0},temperature:{category:`temperature`,required:!1,multiple:!1}}}},be={[_.generic]:[],[_.air_conditioner]:[u.cooler,u.heater,u.fan,u.temperature,u.humidity,u.electrical_energy,u.electrical_power,u.leak,u.device_information],[_.air_dehumidifier]:[u.cooler,u.fan,u.temperature,u.humidity,u.electrical_energy,u.electrical_power,u.leak,u.device_information],[_.air_humidifier]:[u.humidity,u.switcher,u.temperature,u.fan,u.electrical_energy,u.electrical_power,u.leak,u.device_information],[_.air_purifier]:[u.fan,u.air_particulate,u.carbon_dioxide,u.carbon_monoxide,u.humidity,u.leak,u.nitrogen_dioxide,u.ozone,u.pressure,u.sulphur_dioxide,u.temperature,u.volatile_organic_compounds,u.electrical_energy,u.electrical_power,u.device_information],[_.alarm]:[u.alarm,u.device_information],[_.camera]:[u.camera,u.motion,u.microphone,u.speaker,u.contact,u.light,u.temperature,u.humidity,u.battery,u.device_information],[_.door]:[u.door,u.lock,u.contact,u.motion,u.battery,u.device_information],[_.doorbell]:[u.doorbell,u.camera,u.lock,u.motion,u.microphone,u.speaker,u.contact,u.light,u.battery,u.device_information],[_.fan]:[u.fan,u.electrical_energy,u.electrical_power,u.device_information],[_.heating_unit]:[u.heater,u.temperature,u.humidity,u.electrical_energy,u.electrical_power,u.device_information],[_.lighting]:[u.light,u.illuminance,u.electrical_energy,u.electrical_power,u.device_information],[_.lock]:[u.lock,u.contact,u.motion,u.battery,u.device_information],[_.media]:[u.media_input,u.media_playback,u.microphone,u.speaker,u.device_information],[_.av_receiver]:[u.media_input,u.media_playback,u.speaker,u.device_information],[_.game_console]:[u.media_playback,u.media_input,u.device_information],[_.projector]:[u.projector,u.speaker,u.media_playback,u.media_input,u.device_information],[_.set_top_box]:[u.media_input,u.media_playback,u.device_information],[_.streaming_service]:[u.media_playback,u.device_information],[_.outlet]:[u.outlet,u.electrical_energy,u.electrical_power,u.device_information],[_.pump]:[u.flow,u.switcher,u.leak,u.pressure,u.electrical_energy,u.electrical_power,u.device_information],[_.robot_vacuum]:[u.robot_vacuum,u.electrical_energy,u.electrical_power,u.leak,u.battery,u.device_information],[_.sensor]:[u.air_particulate,u.battery,u.carbon_dioxide,u.carbon_monoxide,u.contact,u.humidity,u.illuminance,u.leak,u.motion,u.nitrogen_dioxide,u.occupancy,u.ozone,u.pressure,u.smoke,u.sulphur_dioxide,u.temperature,u.volatile_organic_compounds,u.device_information],[_.speaker]:[u.speaker,u.media_input,u.media_playback,u.electrical_energy,u.electrical_power,u.device_information],[_.sprinkler]:[u.valve,u.flow,u.pressure,u.leak,u.humidity,u.electrical_energy,u.electrical_power,u.device_information],[_.switcher]:[u.switcher,u.electrical_energy,u.electrical_power,u.device_information],[_.television]:[u.television,u.speaker,u.media_playback,u.media_input,u.device_information],[_.terminal]:[u.button,u.indicator,u.buzzer,u.illuminance,u.accelerometer,u.temperature,u.contact,u.switcher,u.device_information],[_.thermostat]:[u.thermostat,u.cooler,u.heater,u.temperature,u.humidity,u.contact,u.electrical_energy,u.electrical_power,u.device_information],[_.valve]:[u.valve,u.pressure,u.flow,u.leak,u.battery,u.electrical_energy,u.electrical_power,u.device_information],[_.water_heater]:[u.heater,u.temperature,u.leak,u.electrical_energy,u.electrical_power,u.device_information],[_.window_covering]:[u.window_covering,u.battery,u.electrical_energy,u.electrical_power,u.device_information]},xe=Object.fromEntries(Object.entries(ye).map(([e,t])=>{let n=Object.values(t.channels).map(e=>e.category),r=be[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]})),Se=Object.fromEntries(Object.entries(ye).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)}])),Ce=Object.fromEntries(Object.entries(ve).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)}])),we=(e,t)=>{let n=ve[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}},Te=({id:e})=>{let t=y(),n=t.getStore(W),r=t.getStore(H),i=e=>n.findById(e),a=e=>Ce[e.category]??null;return{canAddAnotherProperty:o(()=>{let t=i(e);if(t===null)return!0;let{required:n,optional:o}=a(t)??{required:[],optional:[]},s=[...n,...o],c=r.findForChannel(t.id).map(e=>e.category);return s.filter(e=>!c.includes(e)).length>0}),missingRequiredProperties:o(()=>{let t=i(e);if(t===null)throw new q(`Something went wrong, channel can't be loaded`);let{required:n}=a(t)??{required:[]},o=r.findForChannel(t.id).map(e=>e.category);return n.filter(e=>!o.includes(e))})}},Ee=C({id:P().uuid().optional(),type:P().trim().nonempty(),device:P().uuid().optional(),category:x(u).default(u.generic),identifier:P().trim().nonempty().nullable().optional(),name:P().trim().nonempty(),description:P().trim().transform(e=>e===``?null:e).nullable().optional()}),De=C({id:P().uuid(),type:P().trim().nonempty(),device:P().uuid(),category:x(u).default(u.generic),identifier:P().trim().nonempty().nullable().optional(),name:P().trim().nonempty().optional(),description:P().trim().transform(e=>e===``?null:e).nullable().optional()}),Oe=({type:e})=>{let{getByType:t}=ce(),n=o(()=>t(e));return{plugin:n,element:o(()=>(n.value?.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`))))}},ke=({id:e,type:a,deviceId:s})=>{let c=y(),{element:d}=Oe({type:a}),f=c.getStore(W),{devices:p,fetchDevices:m,areLoading:h}=te(),{t:g}=r(),_=w(),b=v(),x=l(K.NONE),S,C=o(()=>k.device?p.value.find(e=>e.id===k.device)??null:null),T=o(()=>C.value?f.findForDevice(C.value.id).map(e=>e.category):[]),E=o(()=>C.value?Se[C.value.category]??null:null),D=o(()=>E.value===null?[]:Object.values(u).filter(e=>E.value?.required.includes(e)||E.value?.optional.includes(e)).filter(e=>!T.value.includes(e)||E.value?.multiple?.includes(e)).map(e=>({value:e,label:g(`devicesModule.categories.channels.${e}`)}))),O=o(()=>p.value.filter(e=>e.type===a).map(e=>({value:e.id,label:e.name}))),k=n({...j(d.value?.schemas?.channelAddFormSchema||Ee),id:e,type:a,device:s,category:u.generic,name:``,description:``}),M=A(i(k)),N=l(void 0),P=l(!1),F=async()=>{if(N.value.clearValidate(),!await N.value.validate())throw new Y(`Form not valid`);let t=s??k.device;if(!t)throw new Y(`Missing device identifier`);if(!k.category)throw new Y(`Missing data type definition`);let n=(d.value?.schemas?.channelAddFormSchema||Ee).safeParse(k);if(!n.success)throw b.error(`Schema validation failed with:`,n.error),new Y(`Failed to validate create channel model.`);x.value=K.WORKING;let r=g(`devicesModule.messages.channels.notCreated`,{device:k.name});try{await f.add({id:e,deviceId:t,draft:!1,data:{...n.data,type:a}})}catch(e){throw x.value=K.ERROR,S=window.setTimeout(I,2e3),e instanceof J&&e.code===422?_.error(e.message):_.error(r),e}return x.value=K.OK,S=window.setTimeout(I,2e3),_.success(g(`devicesModule.messages.channels.created`,{device:k.name})),`added`},I=()=>{window.clearTimeout(S),x.value=K.NONE};return m().catch(()=>{}),t(k,()=>{P.value=!(0,X.isEqual)(i(k),M)}),t(()=>D.value,e=>{e.length&&e[0]&&(k.category=e[0].value,M.category=e[0].value)},{immediate:!0}),{categoriesOptions:D,devicesOptions:O,model:k,formEl:N,formChanged:P,submit:F,clear:I,formResult:x,loadingDevices:h}},Ae=({channel:e,messages:a})=>{let s=y(),{element:c}=Oe({type:e.type}),d=s.getStore(W),{devices:f,fetchDevices:p,areLoading:m}=te(),{t:h}=r(),g=w(),_=v(),b=l(K.NONE),x,S=o(()=>f.value.find(t=>t.id===e.device)??null),C=o(()=>S.value?d.findForDevice(S.value.id).filter(t=>t.id!==e.id).map(e=>e.category):[]),T=o(()=>S.value?Se[S.value.category]??null:null),E=o(()=>T.value===null?[]:Object.values(u).filter(e=>T.value?.required.includes(e)||T.value?.optional.includes(e)).filter(e=>!C.value.includes(e)||T.value?.multiple?.includes(e)).map(e=>({value:e,label:h(`devicesModule.categories.channels.${e}`)}))),D=o(()=>f.value.map(e=>({value:e.id,label:e.name}))),O=n(e),k=A(i(O)),j=l(void 0),M=l(!1),N=async()=>{let t=e.draft,n=a&&a.error?a.error:e.draft?h(`devicesModule.messages.channels.notCreated`,{channel:e.name}):h(`devicesModule.messages.channels.notEdited`,{channel:e.name});if(j.value.clearValidate(),!await j.value.validate())throw new Y(`Form not valid`);let r=(c.value?.schemas?.channelEditFormSchema||De).safeParse(O);if(!r.success)throw _.error(`Schema validation failed with:`,r.error),new Y(`Failed to validate edit channel model.`);b.value=K.WORKING;try{await d.edit({id:e.id,data:{...r.data,type:e.type}}),e.draft&&await d.save({id:e.id,deviceId:e.device})}catch(e){throw b.value=K.ERROR,x=window.setTimeout(P,2e3),e instanceof J&&e.code===422?g.error(e.message):g.error(n),e}return b.value=K.OK,x=window.setTimeout(P,2e3),t?(g.success(h(a&&a.success?a.success:`devicesModule.messages.channels.created`,{channel:e.name})),`added`):(g.success(h(a&&a.success?a.success:`devicesModule.messages.channels.edited`,{channel:e.name})),M.value=!1,k=A(i(O)),`saved`)},P=()=>{window.clearTimeout(x),b.value=K.NONE};return p().catch(()=>{}),t(O,()=>{M.value=!(0,X.isEqual)(i(O),k)}),{categoriesOptions:E,devicesOptions:D,model:O,formEl:j,formChanged:M,submit:N,clear:P,formResult:b,loadingDevices:m}},je=({channelId:e,id:t})=>{let n=y().getStore(H),{data:r,semaphore:i}=L(n);return{property:o(()=>t===null?null:r.value[t]??null),isLoading:o(()=>i.value.fetching.item.includes(t)?!0:(r.value[t]??null)===null?i.value.fetching.items.includes(e)||i.value.fetching.items.includes(`all`):!1),fetchProperty:async()=>{(r.value[t]??null)?.draft||await n.get({id:t,channelId:e})}}},Me=({channelId:e})=>{let t=y().getStore(H),{firstLoad:n,semaphore:r}=L(t),i=typeof e==`string`?o(()=>e):e;return{properties:o(()=>t.findAll().filter(e=>!i?.value||e.channel===i.value)),areLoading:o(()=>i.value?r.value.fetching.items.includes(i.value)?!0:n.value.includes(i.value)?!1:r.value.fetching.items.includes(i.value):!1),loaded:o(()=>i.value?n.value.includes(i.value):!1),fetchProperties:async()=>{i.value&&await t.fetch({channelId:i.value})}}},Q={search:void 0,channels:[],categories:[],permissions:[],dataTypes:[]},Ne={by:`category`,dir:`asc`},Pe=({channelId:e,key:n=`list`})=>{let r=y().getStore(H),{firstLoad:i,semaphore:a}=L(r),{filters:s,sort:c,pagination:u,reset:d}=O({key:`${G}:channels-properties:${n}`,filters:{schema:pe,defaults:Q},sort:{defaults:[Ne]},pagination:{defaults:{page:1,size:10}},syncQuery:!0,version:1}),f=o(()=>s.value.search!==Q.search||!(0,X.isEqual)(s.value.channels,Q.channels)||!(0,X.isEqual)(s.value.categories,Q.categories)||!(0,X.isEqual)(s.value.permissions,Q.permissions)||!(0,X.isEqual)(s.value.dataTypes,Q.dataTypes)),p=l(u.value.size||10),m=l(u.value.page||1),h=l(c.value.length>0?c.value[0]?.by:void 0),g=l(c.value.length>0?c.value[0]?.dir??null:null),_=o(()=>N(r.findAll().filter(t=>!e||t.channel===e).filter(e=>!e.draft&&(!s.value.search||e.id?.toLowerCase().includes(s.value.search.toLowerCase())||e.name?.toLowerCase().includes(s.value.search.toLowerCase())||e.identifier?.toLowerCase().includes(s.value.search.toLowerCase()))&&(s.value.categories.length===0||s.value.categories.includes(e.category))&&(s.value.dataTypes.length===0||s.value.dataTypes.includes(e.dataType))&&(s.value.permissions.length===0||e.permissions.some(e=>s.value.permissions.includes(e)))),[e=>e[h.value]??``],[g.value===`asc`?`asc`:`desc`])),v=o(()=>{let e=(m.value-1)*p.value,t=e+p.value;return _.value.slice(e,t)}),b=async()=>{await r.fetch({channelId:e})},x=o(()=>a.value.fetching.items.includes(e)?!0:i.value.includes(e)?!1:a.value.fetching.items.includes(e)),S=o(()=>i.value.includes(e)),C=o(()=>r.findAll().filter(t=>!e||t.channel===e).filter(e=>!e.draft).length);return t(()=>u.value,e=>{m.value=e.page??1,p.value=e.size??10},{deep:!0}),t(()=>m.value,e=>{u.value.page=e}),t(()=>p.value,e=>{u.value.size=e}),t(()=>g.value,e=>{h.value===void 0||e===null?c.value=[]:c.value=[{by:h.value,dir:e}]}),t(()=>h.value,e=>{e===void 0?c.value=[]:c.value=[{by:e,dir:g.value}]}),{properties:_,propertiesPaginated:v,totalRows:C,areLoading:x,loaded:S,fetchProperties:b,filters:s,filtersActive:f,paginateSize:p,paginatePage:m,sortBy:h,sortDir:g,resetFilter:d}},Fe=()=>{let{t:e}=r(),t=w(),n=y().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}`)}))})}}},Ie=({id:e})=>{let t=y().getStore(H);return{icon:o(()=>{switch(t.findById(e)?.category){default:return`mdi:tune`}})}},Le=C({id:P().uuid().optional(),type:P().trim().nonempty(),channel:P().uuid().optional(),category:x(D).default(D.generic),identifier:P().trim().nonempty().nullable().optional(),name:P().trim().nonempty().nullable(),permissions:g(x(M)),dataType:x(F),format:g(p([P(),p([b(),h()])])).nullable(),invalid:p([P(),b(),f(),h()]),step:p([P(),b()]).transform(e=>e===``?null:Number(e)).nullable(),enterValue:f().default(!1),value:p([P(),b(),f(),h()]).optional(),enumValues:g(P()),minValue:p([P(),b()]).transform(e=>e===``?void 0:Number(e)).optional(),maxValue:p([P(),b()]).transform(e=>e===``?void 0:Number(e)).optional()}),Re=C({id:P().uuid(),type:P().trim().nonempty(),channel:P().uuid(),category:x(D).default(D.generic),identifier:P().trim().nonempty().nullable().optional(),name:P().trim().nonempty().nullable().optional(),permissions:g(x(M)),dataType:x(F),format:g(p([P(),p([b(),h()])])).nullable(),invalid:p([P(),b(),f(),h()]),step:p([P(),b()]).transform(e=>e===``?null:Number(e)).nullable(),enterValue:f().default(!1),value:p([P(),b(),f(),h()]).optional(),enumValues:g(P()),minValue:p([P(),b()]).transform(e=>e===``?void 0:Number(e)).optional(),maxValue:p([P(),b()]).transform(e=>e===``?void 0:Number(e)).optional()}),ze=({type:e})=>{let{getByType:t}=se(),n=o(()=>t(e));return{plugin:n,element:o(()=>(n.value?.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`))))}},Be=({id:e,type:a,channelId:s})=>{let c=y(),{element:d}=ze({type:a}),f=c.getStore(H),{channels:p,fetchChannels:m,areLoading:h}=ue(),{t:g}=r(),_=w(),b=v(),x=l(K.NONE),S,C=o(()=>I.channel?p.value.find(e=>e.id===I.channel)??null:null),T=o(()=>C.value?f.findForChannel(C.value.id).map(e=>e.category):[]),E=o(()=>C.value?Ce[C.value.category]??null:null),O=o(()=>E.value===null?[]:Object.values(D).filter(e=>E.value?.required.includes(e)||E.value?.optional.includes(e)).filter(e=>!T.value.includes(e)).map(e=>({value:e,label:g(`devicesModule.categories.channelsProperties.${e}`)}))),k=o(()=>p.value.map(e=>({value:e.id,label:e.name}))),N=Object.values(M).map(e=>({value:e,label:g(`devicesModule.permissions.${e}`)})),P=Object.values(F).map(e=>({value:e,label:g(`devicesModule.dataTypes.${e}`)})),I=n({...j(d.value?.schemas?.channelPropertyAddFormSchema||Le),id:e,type:a,channel:s,category:D.generic,name:``,permissions:[],dataType:F.unknown,format:null,invalid:null,step:null,enumValues:[],minValue:void 0,maxValue:void 0,enterValue:!1,value:void 0}),L=A(i(I)),R=l(void 0),z=l(!1),B=async()=>{if(R.value.clearValidate(),!await R.value.validate())throw new Y(`Form not valid`);let t=s??I.channel;if(!t)throw new Y(`Missing channel identifier`);if(I.name===``&&(I.name=null),!I.category)throw new Y(`Missing data type definition`);I.dataType===F.enum?I.format=I.enumValues:[F.char,F.uchar,F.short,F.ushort,F.int,F.uint,F.float].includes(I.dataType)&&(I.format=[typeof I.minValue==`string`&&I.minValue!==``?Number(I.minValue):typeof I.minValue==`number`?I.minValue:null,typeof I.maxValue==`string`&&I.maxValue!==``?Number(I.maxValue):typeof I.maxValue==`number`?I.maxValue:null]),I.enterValue||delete I.value;let n=(d.value?.schemas?.channelPropertyAddFormSchema||Le).safeParse(I);if(!n.success)throw b.error(`Schema validation failed with:`,n.error),new Y(`Failed to validate create channel property model.`);x.value=K.WORKING;let r=g(`devicesModule.messages.channelsProperties.notCreated`,{device:I.name});try{await f.add({id:e,channelId:t,draft:!1,data:{...n.data,type:a}})}catch(e){throw x.value=K.ERROR,S=window.setTimeout(V,2e3),e instanceof J&&e.code===422?_.error(e.message):_.error(r),e}return x.value=K.OK,S=window.setTimeout(V,2e3),_.success(g(`devicesModule.messages.channelsProperties.created`,{device:I.name})),`added`},V=()=>{window.clearTimeout(S),x.value=K.NONE};return m().catch(()=>{}),t(I,()=>{z.value=!(0,X.isEqual)(i(I),L)}),t(()=>I.category,e=>{let t=we(C.value?.category??u.generic,e);t&&(L.permissions=t.permissions,L.dataType=t.data_type,I.permissions=t.permissions,I.dataType=t.data_type,t.invalid!==void 0&&(L.invalid=t.invalid,I.invalid=t.invalid),t.step!==void 0&&(L.step=t.step,I.step=t.step),L.dataType===F.enum?(L.enumValues=t.format??[],L.minValue=void 0,L.maxValue=void 0,I.enumValues=t.format??[],I.minValue=void 0,I.maxValue=void 0):[F.char,F.uchar,F.short,F.ushort,F.int,F.uint,F.float].includes(I.dataType)?(L.enumValues=[],L.minValue=t.format?.[0],L.maxValue=t.format?.[1],I.enumValues=[],I.minValue=t.format?.[0],I.maxValue=t.format?.[1]):(L.enumValues=[],L.minValue=void 0,L.maxValue=void 0,I.enumValues=[],I.minValue=void 0,I.maxValue=void 0),z.value=!(0,X.isEqual)(i(I),L))},{immediate:!0}),t(()=>O.value,e=>{e.length&&e[0]&&(I.category=e[0].value,L.category=e[0].value)},{immediate:!0}),{categoriesOptions:O,channelsOptions:k,permissionsOptions:N,dataTypesOptions:P,model:I,formEl:R,formChanged:z,submit:B,clear:V,formResult:x,loadingChannels:h}},Ve=({property:e,messages:a})=>{let s=y(),{element:c}=ze({type:e.type}),u=s.getStore(H),{channels:d,fetchChannels:f,areLoading:p}=ue(),{t:m}=r(),h=w(),g=v(),_=l(K.NONE),b,x=[],S,C;e.dataType===F.enum?x=e.format?e.format.map(e=>e?.toString()||``):[]:[F.char,F.uchar,F.short,F.ushort,F.int,F.uint,F.float].includes(e.dataType)&&Array.isArray(e.format)&&e.format.length===2&&(S=e.format[0],C=e.format[1]);let T=o(()=>d.value.find(t=>t.id===e.channel)??null),E=o(()=>T.value?u.findForChannel(T.value.id).filter(t=>t.id!==e.id).map(e=>e.category):[]),O=o(()=>T.value?Ce[T.value.category]??null:null),k=o(()=>O.value===null?[]:Object.values(D).filter(e=>O.value?.required.includes(e)||O.value?.optional.includes(e)).filter(e=>!E.value.includes(e)).map(e=>({value:e,label:m(`devicesModule.categories.channelsProperties.${e}`)}))),j=o(()=>d.value.map(e=>({value:e.id,label:e.name}))),N=Object.values(M).map(e=>({value:e,label:m(`devicesModule.permissions.${e}`)})),P=Object.values(F).map(e=>({value:e,label:m(`devicesModule.dataTypes.${e}`)})),I=n({...e,format:i(e.format),value:e.value?.value??null,enumValues:x,minValue:S,maxValue:C,enterValue:!1}),L=A(i(I)),R=l(void 0),z=l(!1),B=async()=>{let t=e.draft,n=a&&a.error?a.error:e.draft?m(`devicesModule.messages.channelsProperties.notCreated`,{property:e.name??m(`devicesModule.categories.channelsProperties.${e.category}`)}):m(`devicesModule.messages.channelsProperties.notEdited`,{property:e.name??m(`devicesModule.categories.channelsProperties.${e.category}`)});if(R.value.clearValidate(),!await R.value.validate())throw new Y(`Form not valid`);I.name===``&&(I.name=null),e.dataType===F.enum?I.format=I.enumValues:[F.char,F.uchar,F.short,F.ushort,F.int,F.uint,F.float].includes(e.dataType)&&(I.format=[I.minValue??null,I.maxValue??null]),I.enterValue||delete I.value;let r=(c.value?.schemas?.channelPropertyEditFormSchema||Re).safeParse(I);if(!r.success)throw g.error(`Schema validation failed with:`,r.error),new Y(`Failed to validate edit channel property model.`);_.value=K.WORKING;try{await u.edit({id:e.id,channelId:e.channel,data:{...r.data,type:e.type}}),e.draft&&await u.save({id:e.id,channelId:e.channel})}catch(e){throw _.value=K.ERROR,b=window.setTimeout(V,2e3),e instanceof J&&e.code===422?h.error(e.message):h.error(n),e}return _.value=K.OK,b=window.setTimeout(V,2e3),t?(h.success(m(a&&a.success?a.success:`devicesModule.messages.channelsProperties.created`,{property:e.name??m(`devicesModule.categories.channelsProperties.${e.category}`)})),`added`):(h.success(m(a&&a.success?a.success:`devicesModule.messages.channelsProperties.edited`,{property:e.name??m(`devicesModule.categories.channelsProperties.${e.category}`)})),z.value=!1,L=A(i(I)),`saved`)},V=()=>{window.clearTimeout(b),_.value=K.NONE};return f().catch(()=>{}),t(I,()=>{z.value=!(0,X.isEqual)(i(I),L)}),{categoriesOptions:k,channelsOptions:j,permissionsOptions:N,dataTypesOptions:P,model:I,formEl:R,formChanged:z,submit:B,clear:V,formResult:_,loadingChannels:p}},He=({id:e})=>{let t=y().getStore(V),{data:n,semaphore:r}=L(t);return{device:o(()=>e===null?null:n.value[e]??null),isLoading:o(()=>r.value.fetching.item.includes(e)?!0:(n.value[e]??null)===null?r.value.fetching.items:!1),fetchDevice:async()=>{(n.value[e]??null)?.draft||await t.get({id:e})}}},$={search:void 0,types:[],state:`all`,states:[],categories:[],enabled:`all`,validation:`all`},Ue={by:`name`,dir:`asc`},We=()=>{let e=y(),n=e.getStore(V),r=e.getStore(U),{firstLoad:i,semaphore:a}=L(n),{filters:s,sort:c,pagination:u,reset:d}=O({key:`${G}:devices:list`,filters:{schema:de,defaults:$},sort:{defaults:[Ue]},pagination:{defaults:{page:1,size:10}},syncQuery:!0,version:1}),f=o(()=>s.value.search!==$.search||!(0,X.isEqual)(s.value.types,$.types)||s.value.state!==$.state||!(0,X.isEqual)(s.value.states,$.states)||!(0,X.isEqual)(s.value.categories,$.categories)||!(0,X.isEqual)(s.value.enabled,$.enabled)||s.value.validation!==$.validation),p=l(u.value.size||10),m=l(u.value.page||1),h=l(c.value.length>0?c.value[0]?.by:void 0),g=l(c.value.length>0?c.value[0]?.dir??null:null),_=e=>r.findById(e)?.isValid??null,v=o(()=>N(n.findAll().filter(e=>!e.draft&&(!s.value.search||e.id.toLowerCase().includes(s.value.search.toLowerCase())||e.name.toLowerCase().includes(s.value.search.toLowerCase())||e.description?.toLowerCase().includes(s.value.search.toLowerCase())||e.identifier?.toLowerCase().includes(s.value.search.toLowerCase()))&&(s.value.types.length===0||s.value.types.includes(e.type))&&(s.value.categories.length===0||s.value.categories.includes(e.category))&&(s.value.enabled===`all`||s.value.enabled===`enabled`&&e.enabled||s.value.enabled===`disabled`&&!e.enabled)&&(s.value.states.length===0||s.value.states.includes(e.status?.status??k.unknown))&&(s.value.state===`all`||s.value.state===`online`&&[k.ready,k.connected,k.running].includes(e.status.status)||s.value.state===`offline`&&[k.disconnected,k.stopped,k.lost,k.unknown].includes(e.status.status))&&(s.value.validation===`all`||s.value.validation===`valid`&&_(e.id)===!0||s.value.validation===`invalid`&&_(e.id)===!1)),[e=>h.value===`state`?e.status?.status??k.unknown:e[h.value]??``],[g.value===`asc`?`asc`:`desc`])),b=o(()=>{let e=(m.value-1)*p.value,t=e+p.value;return v.value.slice(e,t)}),x=async()=>{await n.fetch()},S=o(()=>a.value.fetching.items||!i.value),C=o(()=>i.value),w=o(()=>n.findAll().filter(e=>!e.draft).length);return t(()=>u.value,e=>{m.value=e.page??1,p.value=e.size??10},{deep:!0}),t(()=>m.value,e=>{u.value.page=e}),t(()=>p.value,e=>{u.value.size=e}),t(()=>g.value,e=>{h.value===void 0||e===null?c.value=[]:c.value=[{by:h.value,dir:e}]}),t(()=>h.value,e=>{e===void 0?c.value=[]:c.value=[{by:e,dir:g.value}]}),{devices:v,devicesPaginated:b,totalRows:w,areLoading:S,loaded:C,fetchDevices:x,filters:s,filtersActive:f,paginateSize:p,paginatePage:m,sortBy:h,sortDir:g,resetFilter:d}},Ge=()=>{let{t:e}=r(),t=w(),n=y().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`});let i=0,a=0;for(let e of r)try{await n.remove({id:e.id}),i++}catch{a++}i>0&&t.success(e(`devicesModule.messages.devices.bulkRemoved`,{count:i})),a>0&&t.error(e(`devicesModule.messages.devices.bulkRemoveFailed`,{count:a}))}catch{}},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`});let i=0,a=0;for(let e of r)try{await n.edit({id:e.id,data:{type:e.type,enabled:!0}}),i++}catch{a++}i>0&&t.success(e(`devicesModule.messages.devices.bulkEnabled`,{count:i})),a>0&&t.error(e(`devicesModule.messages.devices.bulkEnableFailed`,{count:a}))}catch{t.info(e(`devicesModule.messages.devices.bulkEnableCanceled`))}},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`});let i=0,a=0;for(let e of r)try{await n.edit({id:e.id,data:{type:e.type,enabled:!1}}),i++}catch{a++}i>0&&t.success(e(`devicesModule.messages.devices.bulkDisabled`,{count:i})),a>0&&t.error(e(`devicesModule.messages.devices.bulkDisableFailed`,{count:a}))}catch{t.info(e(`devicesModule.messages.devices.bulkDisableCanceled`))}}}},Ke=({id:e})=>{let t=y().getStore(V);return{icon:o(()=>{switch(t.findById(e)?.category){default:return`mdi:devices`}})}},qe=({id:e})=>{let t=y(),n=t.getStore(V),r=t.getStore(W),i=e=>n.findById(e),a=e=>Se[e.category]??null;return{canAddAnotherChannel:o(()=>{let t=i(e);if(t===null)return!0;let{required:n,optional:o,multiple:s}=a(t)??{required:[],optional:[]},c=[...n,...o],l=r.findForDevice(t.id).map(e=>e.category);return c.filter(e=>!l.includes(e)).length>0||s!==void 0&&s.length>0}),missingRequiredChannels:o(()=>{let t=i(e);if(t===null)throw new q(`Something went wrong, device can't be loaded`);let{required:n}=a(t)??{required:[]},o=r.findForDevice(t.id).map(e=>e.category);return n.filter(e=>!o.includes(e))})}},Je=C({id:P().uuid().optional(),type:P().trim().nonempty(),category:x(_).default(_.generic),identifier:P().trim().nonempty().nullable().optional(),name:P().trim().nonempty(),description:P().trim().transform(e=>e===``?null:e).nullable().optional(),enabled:f().default(!0).optional()}),Ye=C({id:P().uuid(),type:P().trim().nonempty(),category:x(_).default(_.generic),identifier:P().trim().nonempty().nullable().optional(),name:P().trim().nonempty().optional(),description:P().trim().transform(e=>e===``?null:e).nullable().optional(),enabled:f().optional(),roomId:P().uuid().nullable().optional()}),Xe=()=>{let e=d(),{enabled:t}=E(),n=[`deviceAddForm`,`deviceEditForm`],r=[`deviceSchema`,`deviceAddFormSchema`,`deviceEditFormSchema`,`deviceCreateReqSchema`,`deviceUpdateReqSchema`],i=o(()=>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=n.length===0||!!e.components&&n.some(t=>e.components&&t in e.components),i=r.length===0||!!e.schemas&&r.some(t=>e.schemas&&t in e.schemas);return t||i}):!1));return{plugins:i,options:o(()=>N(i.value.flatMap(e=>(e.elements??[]).filter(e=>e.modules===void 0||e.modules.includes(`devices-module`)).map(n=>({value:n.type,label:n.name?.trim()?n.name:e.name,disabled:!t(e.type)}))),[e=>e.label],[`asc`])),getByName:e=>i.value.find(t=>t.type===e),getByType:e=>i.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 i.value){let n=(t.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`)));if(n)return n}}}},Ze=({type:e})=>{let{getByType:t}=Xe(),n=o(()=>t(e));return{plugin:n,element:o(()=>(n.value?.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`))))}},Qe=({id:e,type:a})=>{let o=y(),{element:s}=Ze({type:a}),c=o.getStore(V),{t:u}=r(),d=w(),f=v(),p=l(K.NONE),m,h=Object.values(_).map(e=>({value:e,label:u(`devicesModule.categories.devices.${e}`)})),g=n({...j(s.value?.schemas?.deviceAddFormSchema||Je),id:e,type:a,category:_.generic,name:``,description:``}),b=A(i(g)),x=l(void 0),S=l(!1),C=async()=>{if(x.value.clearValidate(),!await x.value.validate())throw new Y(`Form not valid`);let t=(s.value?.schemas?.deviceAddFormSchema||Je).safeParse(g);if(!t.success)throw f.error(`Schema validation failed with:`,t.error),new Y(`Failed to validate create device model.`);p.value=K.WORKING;let n=u(`devicesModule.messages.devices.notCreated`,{device:g.name});try{await c.add({id:e,draft:!1,data:{...t.data,type:a}})}catch(e){throw p.value=K.ERROR,m=window.setTimeout(T,2e3),e instanceof J&&e.code===422?d.error(e.message):d.error(n),e}return p.value=K.OK,m=window.setTimeout(T,2e3),d.success(u(`devicesModule.messages.devices.created`,{device:g.name})),`added`},T=()=>{window.clearTimeout(m),p.value=K.NONE};return t(g,()=>{S.value=!(0,X.isEqual)(i(g),b)}),{categoriesOptions:h,model:g,formEl:x,formChanged:S,submit:C,clear:T,formResult:p}},$e=({device:e,messages:a})=>{let o=y(),{element:s}=Ze({type:e.type}),c=o.getStore(V),{t:u}=r(),d=w(),f=v(),p=l(K.NONE),m,h=Object.values(_).map(e=>({value:e,label:u(`devicesModule.categories.devices.${e}`)})),g=n(e),b=A(i(g)),x=l(void 0),S=l(!1),C=async()=>{let t=e.draft,n=a&&a.error?a.error:e.draft?u(`devicesModule.messages.devices.notCreated`,{device:e.name}):u(`devicesModule.messages.devices.notEdited`,{device:e.name});if(x.value.clearValidate(),!await x.value.validate())throw new Y(`Form not valid`);let r=(s.value?.schemas?.deviceEditFormSchema||Ye).safeParse(g);if(!r.success)throw f.error(`Schema validation failed with:`,r.error),new Y(`Failed to validate edit device model.`);p.value=K.WORKING;try{await c.edit({id:e.id,data:{...r.data,type:e.type}}),e.draft&&await c.save({id:e.id})}catch(e){throw p.value=K.ERROR,m=window.setTimeout(T,2e3),e instanceof J&&e.code===422?d.error(e.message):d.error(n),e}return p.value=K.OK,m=window.setTimeout(T,2e3),t?(d.success(u(a&&a.success?a.success:`devicesModule.messages.devices.created`,{device:e.name})),`added`):(d.success(u(a&&a.success?a.success:`devicesModule.messages.devices.edited`,{device:e.name})),S.value=!1,b=A(i(g)),`saved`)},T=()=>{window.clearTimeout(m),p.value=K.NONE};return t(g,()=>{S.value=!(0,X.isEqual)(i(g),b)}),{categoriesOptions:h,model:g,formEl:x,formChanged:S,submit:C,clear:T,formResult:p}},et=()=>{let e=y().getStore(U),{data:t,semaphore:n,firstLoad:r}=L(e);return{validation:o(()=>t.value),summary:o(()=>t.value?.summary??null),invalidDevices:o(()=>t.value?t.value.devices.filter(e=>!e.isValid):[]),isLoading:o(()=>n.value.fetching.items),isLoaded:o(()=>r.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}}},tt=({id:e})=>{let t=y().getStore(U),{semaphore:n}=L(t);return{validation:o(()=>t.findById(e)),isValid:o(()=>{let n=t.findById(e);return n?n.isValid:null}),issues:o(()=>{let n=t.findById(e);return n?n.issues:[]}),errorCount:o(()=>{let n=t.findById(e);return n?n.issues.filter(e=>e.severity===`error`).length:0}),warningCount:o(()=>{let n=t.findById(e);return n?n.issues.filter(e=>e.severity===`warning`).length:0}),isLoading:o(()=>n.value.fetching.item.includes(e)),fetchValidation:async()=>{await t.get({id:e})}}},nt=300,rt=1e4,it=({id:n})=>{let r=y(),i=r.getStore(V),a=r.getStore(W),s=r.getStore(H),{data:c,semaphore:d}=L(i),{data:f,semaphore:p,firstLoad:m}=L(a),{semaphore:h,firstLoad:g}=L(s),{sendCommand:_}=I(),v={},b={},x={},S=l({}),C=l({}),w=o(()=>n===null?null:c.value[n]??null),T=o(()=>Object.values(f.value).filter(e=>e.device===n&&e.category!==u.device_information)),E=o(()=>T.value.filter(e=>s.findForChannel(e.id).some(e=>e.permissions.includes(M.rw)||e.permissions.includes(M.wo)))),D=o(()=>E.value.length>0),O=e=>s.findForChannel(e),k=e=>e.permissions.includes(M.rw)||e.permissions.includes(M.wo),A=e=>{let t=S.value[e];return t===void 0?s.findById(e)?.value?.value??null:t},j=e=>C.value[e]??!1,N=(e,t)=>{if(t!==void 0){let n=S.value[e];if(n!==t&&String(n)!==String(t))return}delete S.value[e],x[e]&&(clearTimeout(x[e]),delete x[e])},P=(e,t)=>{x[e]&&clearTimeout(x[e]),x[e]=setTimeout(()=>{let n=S.value[e];(n===t||String(n)===String(t))&&delete S.value[e],delete x[e]},rt)},F=async(e,t,r)=>s.findById(t)?(v[t]&&(clearTimeout(v[t]),delete v[t],b[t]&&(b[t](!1),delete b[t])),S.value[t]=r,new Promise(i=>{b[t]=i;let a=setTimeout(async()=>{delete b[t],C.value[t]=!0;try{await _(ae.CHANNEL_PROPERTY_SET,{context:{origin:`admin`},properties:[{device:n,channel:e,property:t,value:r}]},`DevicesModule.Internal.SetPropertyValue`)===!0?(P(t,r),i(!0)):(N(t,r),i(!1))}catch{N(t,r),i(!1)}finally{C.value[t]=!1,v[t]===a&&delete v[t]}},nt);v[t]=a})):!1,R=async()=>{(n in c.value?c.value[n]:null)?.draft||await i.get({id:n})},z=async()=>{await a.fetch({deviceId:n})},B=async()=>{let e=Object.values(f.value).filter(e=>e.device===n);for(let t of e)await s.fetch({channelId:t.id})},ee=o(()=>{if(d.value.fetching.item.includes(n)||p.value.fetching.items.includes(n))return!0;for(let e of T.value)if(h.value.fetching.items.includes(e.id))return!0;return!1}),U=o(()=>m.value.includes(n)),te=o(()=>{if(!U.value)return!1;for(let e of T.value)if(!g.value.includes(e.id))return!1;return!0});return t(()=>{let e={};for(let t of Object.keys(S.value)){let n=s.findById(t);n&&(e[t]=n.value?.value??null)}return e},e=>{for(let[t,n]of Object.entries(S.value)){let r=e[t];(r===n||String(r)===String(n))&&N(t)}},{deep:!0}),e(()=>{for(let e of Object.keys(v))clearTimeout(v[e]),delete v[e],b[e]&&(b[e](!1),delete b[e]);for(let e of Object.keys(x))clearTimeout(x[e]),delete x[e]}),{device:w,channels:T,controllableChannels:E,hasControllableProperties:D,isLoading:ee,areChannelsLoaded:U,arePropertiesLoaded:te,fetchDevice:R,fetchChannels:z,fetchProperties:B,getPropertiesForChannel:O,isPropertyWritable:k,getPropertyValue:A,isPropertyLoading:j,setPropertyValue:F}},at=({deviceId:e})=>{let t=y().getStore(ee),{firstLoad:n,semaphore:r}=L(t);return{controls:o(()=>t.findForDevice(e)),areLoading:o(()=>r.value.fetching.items.includes(e)),loaded:o(()=>n.value.includes(e)),fetchControls:async()=>t.fetch({deviceId:e})}},ot=e=>{let n=B(),r=v(),i=l({}),u=l(!1),d=l(!1),f=l(!1),p=l(void 0),m=l(!1),h=null,g=0,_=o(()=>Object.values(i.value).sort((e,t)=>new Date(t.ts).getTime()-new Date(e.ts).getTime())),y=o(()=>{let e=[T.warn,T.error,T.fatal,T.fail];return _.value.filter(t=>e.includes(t.type))}),b=o(()=>y.value.length),x=o(()=>b.value>0),S=async()=>{let t=a(e.deviceId);h=t,g++;let o=g;d.value=!0;try{let{data:e,error:a}=await n.client.GET(`/${s}/${z}/logs`,{params:{query:{resource:t,limit:50}}});if(h!==t||g!==o)return;e===void 0?a&&r.error(`Failed to fetch device logs:`,a):(i.value=Object.fromEntries(e.data.map(e=>{let t=ne(e);return[t.id,t]})),f.value=!0,u.value=e.metadata.has_more,p.value=e.metadata.next_cursor)}catch(e){h===t&&g===o&&r.error(`Error fetching device logs:`,e)}finally{h===t&&g===o&&(d.value=!1)}},C=async()=>{if(d.value||!u.value||!p.value)return;let t=a(e.deviceId),o=p.value,c=g;d.value=!0;try{let{data:e,error:a}=await n.client.GET(`/${s}/${z}/logs`,{params:{query:{resource:t,after_id:o,limit:50}}});if(h!==t||g!==c)return;if(e!==void 0){let t=Object.fromEntries(e.data.map(e=>{let t=ne(e);return[t.id,t]}));i.value={...i.value,...t},u.value=e.metadata.has_more,p.value=e.metadata.next_cursor}else a&&r.error(`Failed to load more device logs:`,a)}catch(e){h===t&&g===c&&r.error(`Error loading more device logs:`,e)}finally{h===t&&g===c&&(d.value=!1)}},w=async()=>{i.value={},p.value=void 0,u.value=!1,f.value=!1,await S()},E=null;return t(()=>m.value,e=>{E&&=(clearInterval(E),null),e&&(E=setInterval(()=>{d.value||S()},3e3))}),c(()=>{E&&=(clearInterval(E),null)}),t(()=>a(e.deviceId),()=>{w()}),{logs:_,alertLogs:y,alertCount:b,hasAlerts:x,hasMore:u,isLoading:d,loaded:f,live:m,fetchLogs:S,loadMoreLogs:C,refreshLogs:w}};export{we as A,Y as B,Pe as C,ke as D,Ae as E,le as F,K as G,G as H,ce as I,oe as K,se as L,ge as M,he as N,Te as O,ue as P,J as R,Fe as S,je as T,re as U,ie as V,ae as W,Ve as _,et as a,Re as b,Ze as c,Ye as d,qe as f,He as g,We as h,tt as i,_e as j,xe as k,Xe as l,Ge as m,at as n,$e as o,Ke as p,it as r,Qe as s,ot as t,Je as u,Be as v,Me as w,Ie as x,Le as y,q as z};
@@ -1 +1 @@
1
- import"./chunk-DECur_0Z.js";import{Dr as e,Vr as t,Xr as n,d as r,hi as i,mr as a,n as o,si as s,ui as c}from"./icon-with-child-DmQ_XhQy.js";import{Mn as l,S as u,T as d,Vr as f,Wn as p,_ as m,cn as h,f as g,ln as _,or as v,pn as y,qn as b,va as x,wt as S,y as C}from"./common-DlW3qRTQ.js";import{n as w}from"./logs-entries.transformers-BRzpY2MS.js";import{n as T,r as E,t as D}from"./extensions.constants-BtEcoiTe.js";var O=class e extends Error{exception;constructor(t,n=null){super(t),this.name=`ExtensionsException`,this.exception=n,Object.setPrototypeOf(this,e.prototype)}},k=class e extends O{code;constructor(t,n=null){super(t),this.name=`ExtensionsApiException`,this.code=n,Object.setPrototypeOf(this,e.prototype)}},A=class e extends O{constructor(t){super(t),this.name=`ExtensionsValidationException`,Object.setPrototypeOf(this,e.prototype)}},j=()=>{let e=C(),t=c([]),n=c(!1),r=c(new Map),i=0;return{actions:t,isLoading:n,executingActions:r,fetchActions:async r=>{let a=++i;n.value=!0;try{let{data:n}=await e.client.GET(`/modules/extensions/extensions/${r}/actions`);if(a!==i)return;n?.data?t.value=n.data:t.value=[]}catch{if(a!==i)return;t.value=[]}finally{a===i&&(n.value=!1)}},executeAction:async(t,n,i)=>{let a=r.value.get(n)??0;r.value.set(n,a+1);try{let{data:r,error:a}=await e.client.POST(`/modules/extensions/extensions/${t}/actions/${n}`,{body:{data:{params:i??{}}}});return r?.data?r.data:{success:!1,message:a?.error?.message??`Action execution failed`}}catch(e){return{success:!1,message:e instanceof Error?e.message:`Action execution failed`}}finally{let e=(r.value.get(n)??1)-1;e<=0?r.value.delete(n):r.value.set(n,e)}}}},M=Symbol(`useActions`),N=()=>{let e=j();return t(M,e),e},P=()=>e(M,null)??j(),F=e=>{let t=d().getStore(h),{semaphore:n,firstLoad:r}=x(t);return{extension:a(()=>t.findByType(i(e.type))),isLoading:a(()=>n.value.fetching.items||!r.value),fetchExtension:async()=>{await t.fetch()}}},I=p({search:b().optional(),kind:l([`all`,E.MODULE,E.PLUGIN]).default(`all`),enabled:l([`all`,`enabled`,`disabled`]).default(`all`),isCore:l([`all`,`core`,`addon`]).default(`all`)}),L={search:void 0,kind:`all`,enabled:`all`,isCore:`all`},R={by:`name`,dir:`asc`},z=()=>{let e=d().getStore(h),{semaphore:t}=x(e),{filters:r,sort:i,pagination:o,viewMode:s,reset:l}=g({key:`${T}:extensions:list`,filters:{schema:I,defaults:L},sort:{defaults:[R]},pagination:{defaults:{page:1,size:10}},viewMode:{options:[`table`,`cards`],default:D},syncQuery:!0,version:1}),u=a({get:()=>s.value??`table`,set:e=>{s.value=e}}),f=a(()=>r.value.search!==L.search||r.value.kind!==L.kind||r.value.enabled!==L.enabled||r.value.isCore!==L.isCore),p=c(o.value.size||10),m=c(o.value.page||1),_=c(i.value.length>0?i.value[0]?.by:void 0),v=c(i.value.length>0?i.value[0]?.dir??null:null),b=a(()=>Object.values(e.data)),S=a(()=>y(b.value.filter(e=>(!r.value.search||e.type.toLowerCase().includes(r.value.search.toLowerCase())||e.name.toLowerCase().includes(r.value.search.toLowerCase())||e.description?.toLowerCase().includes(r.value.search.toLowerCase()))&&(r.value.kind===`all`||e.kind===r.value.kind)&&(r.value.enabled===`all`||r.value.enabled===`enabled`&&e.enabled||r.value.enabled===`disabled`&&!e.enabled)&&(r.value.isCore===`all`||r.value.isCore===`core`&&e.isCore||r.value.isCore===`addon`&&!e.isCore)),[e=>_.value===`enabled`?e.enabled?1:0:e[_.value]??``],[v.value===`asc`?`asc`:`desc`])),C=a(()=>S.value),w=a(()=>{let e=(m.value-1)*p.value,t=e+p.value;return C.value.slice(e,t)}),O=a(()=>S.value.filter(e=>e.kind===E.MODULE)),k=a(()=>S.value.filter(e=>e.kind===E.PLUGIN)),A=async()=>{await e.fetch()},j=a(()=>t.value.fetching.items),M=a(()=>C.value.length);return n(()=>o.value,e=>{m.value=e.page??1,p.value=e.size??10},{deep:!0}),n(()=>m.value,e=>{o.value.page=e}),n(()=>p.value,e=>{o.value.size=e}),n(()=>v.value,e=>{_.value===void 0||e===null?i.value=[]:i.value=[{by:_.value,dir:e}]}),n(()=>_.value,e=>{e===void 0||v.value===null?i.value=[]:i.value=[{by:e,dir:v.value}]}),{extensions:C,extensionsPaginated:w,modules:O,plugins:k,totalRows:M,areLoading:j,fetchExtensions:A,filters:r,filtersActive:f,paginateSize:p,paginatePage:m,sortBy:_,sortDir:v,viewMode:u,resetFilter:l}},B=()=>{let{t:e}=r(),t=d(),n=m(),i=t.getStore(h),a=t.getStore(_);return{toggleEnabled:async(t,r)=>{try{return await i.update({type:t,data:{enabled:r}}),n.success(e(r?`extensionsModule.messages.extensionEnabled`:`extensionsModule.messages.extensionDisabled`)),r&&setTimeout(()=>{a.fetch().then(()=>{let e=a.findAll().filter(e=>e.pluginName===t);for(let t of e)t.lastError&&n.warning(t.lastError)}).catch(()=>{})},1500),!0}catch(t){return t instanceof k&&t.code===400?n.error(e(`extensionsModule.messages.notConfigurableError`)):n.error(e(`extensionsModule.messages.updateError`)),!1}},bulkEnable:async t=>{let r=t.filter(e=>e.canToggleEnabled&&!e.enabled);if(r.length===0){n.info(e(`extensionsModule.messages.noExtensionsToEnable`));return}try{await f.confirm(e(`extensionsModule.messages.confirmBulkEnable`,{count:r.length}),e(`extensionsModule.headings.bulkEnable`),{confirmButtonText:e(`extensionsModule.buttons.yes`),cancelButtonText:e(`extensionsModule.buttons.no`),type:`info`});let t=0,a=0;for(let e of r)try{await i.update({type:e.type,data:{enabled:!0}}),t++}catch{a++}t>0&&n.success(e(`extensionsModule.messages.bulkEnabled`,{count:t})),a>0&&n.error(e(`extensionsModule.messages.bulkEnableFailed`,{count:a}))}catch{n.info(e(`extensionsModule.messages.bulkEnableCanceled`))}},bulkDisable:async t=>{let r=t.filter(e=>e.canToggleEnabled&&e.enabled);if(r.length===0){n.info(e(`extensionsModule.messages.noExtensionsToDisable`));return}try{await f.confirm(e(`extensionsModule.messages.confirmBulkDisable`,{count:r.length}),e(`extensionsModule.headings.bulkDisable`),{confirmButtonText:e(`extensionsModule.buttons.yes`),cancelButtonText:e(`extensionsModule.buttons.no`),type:`warning`});let t=0,a=0;for(let e of r)try{await i.update({type:e.type,data:{enabled:!1}}),t++}catch{a++}t>0&&n.success(e(`extensionsModule.messages.bulkDisabled`,{count:t})),a>0&&n.error(e(`extensionsModule.messages.bulkDisableFailed`,{count:a}))}catch{n.info(e(`extensionsModule.messages.bulkDisableCanceled`))}}}},V=e=>{let t=C(),r=u(),l=c({}),d=c(!1),f=c(!1),p=c(!1),m=c(void 0),h=c(!1),g=c([]),_=c(`all`),v=null,y={"1h":3600*1e3,"6h":360*60*1e3,"24h":1440*60*1e3,"7d":10080*60*1e3,all:0},b=a(()=>Object.values(l.value).sort((e,t)=>new Date(t.ts).getTime()-new Date(e.ts).getTime())),x=a(()=>{let e=b.value;if(g.value.length>0&&(e=e.filter(e=>g.value.includes(e.type))),_.value!==`all`){let t=Date.now()-y[_.value];e=e.filter(e=>new Date(e.ts).getTime()>=t)}return e}),T=a(()=>g.value.length>0||_.value!==`all`),E=()=>{g.value=[],_.value=`all`},D=async()=>{let n=i(e.extensionType);v=n,f.value=!0;try{let{data:e,error:i}=await t.client.GET(`/${o}/${S}/logs`,{params:{query:{extension:n,limit:50}}});if(v!==n)return;e===void 0?i&&r.error(`Failed to fetch extension logs:`,i):(l.value=Object.fromEntries(e.data.map(e=>{let t=w(e);return[t.id,t]})),p.value=!0,d.value=e.metadata.has_more,m.value=e.metadata.next_cursor)}catch(e){v===n&&r.error(`Error fetching extension logs:`,e)}finally{v===n&&(f.value=!1)}},O=async()=>{if(f.value||!d.value||!m.value)return;let n=i(e.extensionType),a=m.value;f.value=!0;try{let{data:e,error:i}=await t.client.GET(`/${o}/${S}/logs`,{params:{query:{extension:n,after_id:a,limit:50}}});if(v!==n)return;if(e!==void 0){let t=Object.fromEntries(e.data.map(e=>{let t=w(e);return[t.id,t]}));l.value={...l.value,...t},d.value=e.metadata.has_more,m.value=e.metadata.next_cursor}else i&&r.error(`Failed to load more extension logs:`,i)}catch(e){v===n&&r.error(`Error loading more extension logs:`,e)}finally{v===n&&(f.value=!1)}},k=async()=>{l.value={},m.value=void 0,d.value=!1,p.value=!1,await D()},A=null;return n(()=>h.value,e=>{A&&=(clearInterval(A),null),e&&(A=setInterval(()=>void D(),3e3))}),s(()=>{A&&=(clearInterval(A),null)}),n(()=>i(e.extensionType),()=>{k()}),{logs:x,hasMore:d,isLoading:f,loaded:p,live:h,filterLevels:g,filterTimeRange:_,filtersActive:T,clearFilters:E,fetchLogs:D,loadMoreLogs:O,refreshLogs:k}},H=()=>{let e=d().getStore(_),{data:t,semaphore:n}=x(e);return{services:a(()=>Object.values(t.value)),areLoading:a(()=>n.value.fetching.items),fetchServices:async()=>{await e.fetch()}}},U=()=>{let{t:e}=r(),t=d(),n=m(),i=t.getStore(_);return{startService:async(t,r)=>{try{let a=await i.start({pluginName:t,serviceId:r});return a.state===v.started?n.success(e(`extensionsModule.services.messages.started`)):a.state===v.starting?n.info(e(`extensionsModule.services.messages.serviceStarting`)):a.lastError?n.warning(a.lastError):n.warning(e(`extensionsModule.services.messages.startError`)),a.state===v.started||a.state===v.starting}catch(t){return t instanceof k,n.error(e(`extensionsModule.services.messages.startError`)),!1}},stopService:async(t,r)=>{try{return await i.stop({pluginName:t,serviceId:r}),n.success(e(`extensionsModule.services.messages.stopped`)),!0}catch(t){return t instanceof k,n.error(e(`extensionsModule.services.messages.stopError`)),!1}},restartService:async(t,r)=>{try{return await i.restart({pluginName:t,serviceId:r}),n.success(e(`extensionsModule.services.messages.restarted`)),!0}catch(t){return t instanceof k,n.error(e(`extensionsModule.services.messages.restartError`)),!1}},isActing:(e,t)=>i.acting(e,t)}};export{z as a,N as c,A as d,B as i,k as l,H as n,F as o,V as r,P as s,U as t,O as u};
1
+ import"./chunk-DECur_0Z.js";import{Dr as e,Vr as t,Xr as n,d as r,hi as i,mr as a,n as o,si as s,ui as c}from"./icon-with-child-DmQ_XhQy.js";import{Mn as l,S as u,T as d,Vr as f,Wn as p,_ as m,cn as h,f as g,ln as _,or as v,pn as y,qn as b,va as x,wt as S,y as C}from"./common-DyDAwGBz.js";import{n as w}from"./logs-entries.transformers-B17JQgGx.js";import{n as T,r as E,t as D}from"./extensions.constants-BtEcoiTe.js";var O=class e extends Error{exception;constructor(t,n=null){super(t),this.name=`ExtensionsException`,this.exception=n,Object.setPrototypeOf(this,e.prototype)}},k=class e extends O{code;constructor(t,n=null){super(t),this.name=`ExtensionsApiException`,this.code=n,Object.setPrototypeOf(this,e.prototype)}},A=class e extends O{constructor(t){super(t),this.name=`ExtensionsValidationException`,Object.setPrototypeOf(this,e.prototype)}},j=()=>{let e=C(),t=c([]),n=c(!1),r=c(new Map),i=0;return{actions:t,isLoading:n,executingActions:r,fetchActions:async r=>{let a=++i;n.value=!0;try{let{data:n}=await e.client.GET(`/modules/extensions/extensions/${r}/actions`);if(a!==i)return;n?.data?t.value=n.data:t.value=[]}catch{if(a!==i)return;t.value=[]}finally{a===i&&(n.value=!1)}},executeAction:async(t,n,i)=>{let a=r.value.get(n)??0;r.value.set(n,a+1);try{let{data:r,error:a}=await e.client.POST(`/modules/extensions/extensions/${t}/actions/${n}`,{body:{data:{params:i??{}}}});return r?.data?r.data:{success:!1,message:a?.error?.message??`Action execution failed`}}catch(e){return{success:!1,message:e instanceof Error?e.message:`Action execution failed`}}finally{let e=(r.value.get(n)??1)-1;e<=0?r.value.delete(n):r.value.set(n,e)}}}},M=Symbol(`useActions`),N=()=>{let e=j();return t(M,e),e},P=()=>e(M,null)??j(),F=e=>{let t=d().getStore(h),{semaphore:n,firstLoad:r}=x(t);return{extension:a(()=>t.findByType(i(e.type))),isLoading:a(()=>n.value.fetching.items||!r.value),fetchExtension:async()=>{await t.fetch()}}},I=p({search:b().optional(),kind:l([`all`,E.MODULE,E.PLUGIN]).default(`all`),enabled:l([`all`,`enabled`,`disabled`]).default(`all`),isCore:l([`all`,`core`,`addon`]).default(`all`)}),L={search:void 0,kind:`all`,enabled:`all`,isCore:`all`},R={by:`name`,dir:`asc`},z=()=>{let e=d().getStore(h),{semaphore:t}=x(e),{filters:r,sort:i,pagination:o,viewMode:s,reset:l}=g({key:`${T}:extensions:list`,filters:{schema:I,defaults:L},sort:{defaults:[R]},pagination:{defaults:{page:1,size:10}},viewMode:{options:[`table`,`cards`],default:D},syncQuery:!0,version:1}),u=a({get:()=>s.value??`table`,set:e=>{s.value=e}}),f=a(()=>r.value.search!==L.search||r.value.kind!==L.kind||r.value.enabled!==L.enabled||r.value.isCore!==L.isCore),p=c(o.value.size||10),m=c(o.value.page||1),_=c(i.value.length>0?i.value[0]?.by:void 0),v=c(i.value.length>0?i.value[0]?.dir??null:null),b=a(()=>Object.values(e.data)),S=a(()=>y(b.value.filter(e=>(!r.value.search||e.type.toLowerCase().includes(r.value.search.toLowerCase())||e.name.toLowerCase().includes(r.value.search.toLowerCase())||e.description?.toLowerCase().includes(r.value.search.toLowerCase()))&&(r.value.kind===`all`||e.kind===r.value.kind)&&(r.value.enabled===`all`||r.value.enabled===`enabled`&&e.enabled||r.value.enabled===`disabled`&&!e.enabled)&&(r.value.isCore===`all`||r.value.isCore===`core`&&e.isCore||r.value.isCore===`addon`&&!e.isCore)),[e=>_.value===`enabled`?e.enabled?1:0:e[_.value]??``],[v.value===`asc`?`asc`:`desc`])),C=a(()=>S.value),w=a(()=>{let e=(m.value-1)*p.value,t=e+p.value;return C.value.slice(e,t)}),O=a(()=>S.value.filter(e=>e.kind===E.MODULE)),k=a(()=>S.value.filter(e=>e.kind===E.PLUGIN)),A=async()=>{await e.fetch()},j=a(()=>t.value.fetching.items),M=a(()=>C.value.length);return n(()=>o.value,e=>{m.value=e.page??1,p.value=e.size??10},{deep:!0}),n(()=>m.value,e=>{o.value.page=e}),n(()=>p.value,e=>{o.value.size=e}),n(()=>v.value,e=>{_.value===void 0||e===null?i.value=[]:i.value=[{by:_.value,dir:e}]}),n(()=>_.value,e=>{e===void 0||v.value===null?i.value=[]:i.value=[{by:e,dir:v.value}]}),{extensions:C,extensionsPaginated:w,modules:O,plugins:k,totalRows:M,areLoading:j,fetchExtensions:A,filters:r,filtersActive:f,paginateSize:p,paginatePage:m,sortBy:_,sortDir:v,viewMode:u,resetFilter:l}},B=()=>{let{t:e}=r(),t=d(),n=m(),i=t.getStore(h),a=t.getStore(_);return{toggleEnabled:async(t,r)=>{try{return await i.update({type:t,data:{enabled:r}}),n.success(e(r?`extensionsModule.messages.extensionEnabled`:`extensionsModule.messages.extensionDisabled`)),r&&setTimeout(()=>{a.fetch().then(()=>{let e=a.findAll().filter(e=>e.pluginName===t);for(let t of e)t.lastError&&n.warning(t.lastError)}).catch(()=>{})},1500),!0}catch(t){return t instanceof k&&t.code===400?n.error(e(`extensionsModule.messages.notConfigurableError`)):n.error(e(`extensionsModule.messages.updateError`)),!1}},bulkEnable:async t=>{let r=t.filter(e=>e.canToggleEnabled&&!e.enabled);if(r.length===0){n.info(e(`extensionsModule.messages.noExtensionsToEnable`));return}try{await f.confirm(e(`extensionsModule.messages.confirmBulkEnable`,{count:r.length}),e(`extensionsModule.headings.bulkEnable`),{confirmButtonText:e(`extensionsModule.buttons.yes`),cancelButtonText:e(`extensionsModule.buttons.no`),type:`info`});let t=0,a=0;for(let e of r)try{await i.update({type:e.type,data:{enabled:!0}}),t++}catch{a++}t>0&&n.success(e(`extensionsModule.messages.bulkEnabled`,{count:t})),a>0&&n.error(e(`extensionsModule.messages.bulkEnableFailed`,{count:a}))}catch{n.info(e(`extensionsModule.messages.bulkEnableCanceled`))}},bulkDisable:async t=>{let r=t.filter(e=>e.canToggleEnabled&&e.enabled);if(r.length===0){n.info(e(`extensionsModule.messages.noExtensionsToDisable`));return}try{await f.confirm(e(`extensionsModule.messages.confirmBulkDisable`,{count:r.length}),e(`extensionsModule.headings.bulkDisable`),{confirmButtonText:e(`extensionsModule.buttons.yes`),cancelButtonText:e(`extensionsModule.buttons.no`),type:`warning`});let t=0,a=0;for(let e of r)try{await i.update({type:e.type,data:{enabled:!1}}),t++}catch{a++}t>0&&n.success(e(`extensionsModule.messages.bulkDisabled`,{count:t})),a>0&&n.error(e(`extensionsModule.messages.bulkDisableFailed`,{count:a}))}catch{n.info(e(`extensionsModule.messages.bulkDisableCanceled`))}}}},V=e=>{let t=C(),r=u(),l=c({}),d=c(!1),f=c(!1),p=c(!1),m=c(void 0),h=c(!1),g=c([]),_=c(`all`),v=null,y={"1h":3600*1e3,"6h":360*60*1e3,"24h":1440*60*1e3,"7d":10080*60*1e3,all:0},b=a(()=>Object.values(l.value).sort((e,t)=>new Date(t.ts).getTime()-new Date(e.ts).getTime())),x=a(()=>{let e=b.value;if(g.value.length>0&&(e=e.filter(e=>g.value.includes(e.type))),_.value!==`all`){let t=Date.now()-y[_.value];e=e.filter(e=>new Date(e.ts).getTime()>=t)}return e}),T=a(()=>g.value.length>0||_.value!==`all`),E=()=>{g.value=[],_.value=`all`},D=async()=>{let n=i(e.extensionType);v=n,f.value=!0;try{let{data:e,error:i}=await t.client.GET(`/${o}/${S}/logs`,{params:{query:{extension:n,limit:50}}});if(v!==n)return;e===void 0?i&&r.error(`Failed to fetch extension logs:`,i):(l.value=Object.fromEntries(e.data.map(e=>{let t=w(e);return[t.id,t]})),p.value=!0,d.value=e.metadata.has_more,m.value=e.metadata.next_cursor)}catch(e){v===n&&r.error(`Error fetching extension logs:`,e)}finally{v===n&&(f.value=!1)}},O=async()=>{if(f.value||!d.value||!m.value)return;let n=i(e.extensionType),a=m.value;f.value=!0;try{let{data:e,error:i}=await t.client.GET(`/${o}/${S}/logs`,{params:{query:{extension:n,after_id:a,limit:50}}});if(v!==n)return;if(e!==void 0){let t=Object.fromEntries(e.data.map(e=>{let t=w(e);return[t.id,t]}));l.value={...l.value,...t},d.value=e.metadata.has_more,m.value=e.metadata.next_cursor}else i&&r.error(`Failed to load more extension logs:`,i)}catch(e){v===n&&r.error(`Error loading more extension logs:`,e)}finally{v===n&&(f.value=!1)}},k=async()=>{l.value={},m.value=void 0,d.value=!1,p.value=!1,await D()},A=null;return n(()=>h.value,e=>{A&&=(clearInterval(A),null),e&&(A=setInterval(()=>void D(),3e3))}),s(()=>{A&&=(clearInterval(A),null)}),n(()=>i(e.extensionType),()=>{k()}),{logs:x,hasMore:d,isLoading:f,loaded:p,live:h,filterLevels:g,filterTimeRange:_,filtersActive:T,clearFilters:E,fetchLogs:D,loadMoreLogs:O,refreshLogs:k}},H=()=>{let e=d().getStore(_),{data:t,semaphore:n}=x(e);return{services:a(()=>Object.values(t.value)),areLoading:a(()=>n.value.fetching.items),fetchServices:async()=>{await e.fetch()}}},U=()=>{let{t:e}=r(),t=d(),n=m(),i=t.getStore(_);return{startService:async(t,r)=>{try{let a=await i.start({pluginName:t,serviceId:r});return a.state===v.started?n.success(e(`extensionsModule.services.messages.started`)):a.state===v.starting?n.info(e(`extensionsModule.services.messages.serviceStarting`)):a.lastError?n.warning(a.lastError):n.warning(e(`extensionsModule.services.messages.startError`)),a.state===v.started||a.state===v.starting}catch(t){return t instanceof k,n.error(e(`extensionsModule.services.messages.startError`)),!1}},stopService:async(t,r)=>{try{return await i.stop({pluginName:t,serviceId:r}),n.success(e(`extensionsModule.services.messages.stopped`)),!0}catch(t){return t instanceof k,n.error(e(`extensionsModule.services.messages.stopError`)),!1}},restartService:async(t,r)=>{try{return await i.restart({pluginName:t,serviceId:r}),n.success(e(`extensionsModule.services.messages.restarted`)),!0}catch(t){return t instanceof k,n.error(e(`extensionsModule.services.messages.restartError`)),!1}},isActing:(e,t)=>i.acting(e,t)}};export{z as a,N as c,A as d,B as i,k as l,H as n,F as o,V as r,P as s,U as t,O as u};
@@ -1 +1 @@
1
- import"./chunk-DECur_0Z.js";import{Xr as e,ci as t,d as n,fi as r,mr as i,n as a,ui as o}from"./icon-with-child-DmQ_XhQy.js";import{A as s,Bn as c,Fn as l,In as u,Jn as d,Pn as f,S as p,T as m,Tn as h,Un as g,Vr as _,Wn as v,Yn as y,_ as b,an as x,d as S,m as C,pn as w,qn as T,va as E,wn as D,y as O}from"./common-DlW3qRTQ.js";import{c as k,d as A,f as j,h as M,i as N,n as P,o as F,p as ee}from"./useLocation-BM-8kEbz.js";var I=()=>{let e=m().getStore(ee),{data:t,semaphore:n}=E(e);return{weatherDay:i(()=>t.value),isLoading:i(()=>t.value===null?n.value.getting:!1),fetchWeatherDay:async()=>{await e.get()}}},L=()=>{let e=m().getStore(M),{firstLoad:t,semaphore:n}=E(e);return{locations:i(()=>e.findAll().filter(e=>!e.draft)),areLoading:i(()=>n.value.fetching.items),loaded:i(()=>t.value),fetchLocations:async()=>{await e.fetch()}}},R={search:void 0,types:[],primary:`all`},z=()=>{let t=m().getStore(M),{firstLoad:n,semaphore:r}=E(t),{configModule:a}=h({type:A}),s=i(()=>a.value?.primaryLocationId??null),c=o(10),l=o(1),u=o({...R}),d=i(()=>u.value.search!==R.search||u.value.types.length>0||u.value.primary!==R.primary),f=o(`name`),p=o(`ascending`),g=i(()=>{let e=t.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?e:w(e,[e=>e[f.value]??``],[p.value===`ascending`?`asc`:`desc`])}),_=i(()=>{let e=(l.value-1)*c.value,t=e+c.value;return g.value.slice(e,t)}),v=async()=>{await t.fetch()},y=i(()=>r.value.fetching.items||!n.value),b=i(()=>n.value),x=i(()=>t.findAll().filter(e=>!e.draft).length);return e(()=>u.value,()=>{l.value=1},{deep:!0}),{locations:g,locationsPaginated:_,totalRows:x,areLoading:y,loaded:b,fetchLocations:v,filters:u,filtersActive:d,paginateSize:c,paginatePage:l,sortBy:f,sortDir:p,resetFilter:()=>{u.value={...R}},primaryLocationId:s}},B=()=>{let e=O(),t=p(),n=o({}),r=o(!1),s=o(!1),c=o(!1);return{weatherByLocation:i(()=>n.value),isLoading:r,hasError:s,fetchCompleted:c,fetchLocationsWeather:async()=>{if(!r.value){r.value=!0,s.value=!1;try{let{data:r,error:i,response:o}=await e.client.GET(`/${a}/${j}/weather`,{});if(r!==void 0&&Array.isArray(r.data)){let e={};for(let n of r.data)if(n.location_id)try{let t=P(n.current),r=n.location;e[n.location_id]={current:t,locationName:r?.name??``,country:r?.country??null}}catch(e){t.error(`[WEATHER] Failed to transform weather data for location ${n.location_id}`,e)}n.value=e,Object.keys(e).length===0&&(s.value=!0);return}let c=`Failed to fetch locations weather.`;throw i&&(c=i.message??c),new N(c,o?.status??500)}catch(e){if(s.value=!0,e instanceof N)throw e;t.error(`[WEATHER] Failed to fetch locations weather`,e)}finally{r.value=!1,c.value=!0}}}}},V=()=>{let{t:e}=n(),t=b(),r=m().getStore(M);return{add:async e=>r.add(e),edit:async e=>r.edit(e),remove:async n=>{let i=r.findById(n);if(i)try{await _.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 r.remove({id:n}),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 n=>{if(n.length!==0)try{await _.confirm(e(`weatherModule.messages.locations.confirmBulkDelete`,{count:n.length}),e(`weatherModule.headings.bulkDeleteLocations`),{confirmButtonText:e(`weatherModule.buttons.yes.title`),cancelButtonText:e(`weatherModule.buttons.no.title`),type:`warning`});let i=0,a=0;for(let e of n)try{await r.remove({id:e.id}),i++}catch{a++}i>0&&t.success(e(`weatherModule.messages.locations.bulkDeleted`,{count:i})),a>0&&t.error(e(`weatherModule.messages.locations.bulkDeleteFailed`,{count:a}))}catch{t.info(e(`weatherModule.messages.locations.bulkDeleteCanceled`))}}}},H=T().uuid(),U=v({id:H,draft:l().default(!1),type:T().trim().nonempty(),name:T().trim().nonempty(),order:g().int().nonnegative().default(0),createdAt:d([T().datetime({offset:!0}),u()]).transform(e=>e instanceof Date?e:new Date(e)),updatedAt:d([T().datetime({offset:!0}),u()]).transform(e=>e instanceof Date?e:new Date(e)).optional().nullable().default(null)}).catchall(y());v({fetching:v({items:l().default(!1),item:f(H)}),creating:f(H),updating:f(H),deleting:f(H)}),v({id:H,type:T().trim().nonempty(),data:c({})}),v({id:H,data:v({type:T().trim().nonempty(),name:T().trim().nonempty()}).catchall(y())}),v({id:H}),v({id:H});var W=v({id:H.optional().default(S()),draft:l().optional().default(!1),data:v({type:T().trim().nonempty(),name:T().trim().nonempty()}).catchall(y())}),G=v({id:H,data:v({type:T().trim().nonempty(),name:T().trim().optional()}).catchall(y())});v({id:H}),v({id:H});var K=v({id:T().uuid().optional(),type:T().trim().nonempty(),name:T().trim().nonempty()}).catchall(y()),q=v({type:T().trim().nonempty(),name:T().trim().nonempty().optional()}).catchall(y());v({id:T().uuid(),type:T(),name:T().trim().nonempty(),order:g().int().nonnegative().default(0),created_at:T(),updated_at:T().nullable()}).catchall(y()),v({id:H,type:T().trim().nonempty(),name:T().trim().min(1,`Name is required`)});var J=v({name:T().trim().min(1,`Name is required`)}),Y=U,X=K,Z=q,Q=D(),te=({id:i})=>{let a=m().getStore(M),{t:s}=n(),c=b(),l=p(),u=o(k.NONE),d,f=t({name:a.findById(i.value)?.name??``}),h=C(r(f)),g=o(void 0),_=o(!1),v=async()=>{if(g.value.clearValidate(),!await g.value.validate())throw new F(`Form not valid`);let e=J.safeParse(f);if(!e.success)throw l.error(`[WEATHER_MODULE] Schema validation failed:`,e.error),new F(`Failed to validate update location model.`);u.value=k.WORKING;let t=a.findById(i.value);if(!t)throw new F(`Location not found.`);let n=s(`weatherModule.messages.locations.notUpdated`,{location:f.name});try{await a.edit({id:i.value,data:{type:t.type,...e.data}}),u.value=k.OK,c.success(s(`weatherModule.messages.locations.updated`,{location:f.name})),Object.assign(h,C(r(f))),_.value=!1}catch(e){throw u.value=k.ERROR,d=window.setTimeout(y,2e3),e instanceof N&&e.code===422?c.error(e.message):c.error(n),e}},y=()=>{window.clearTimeout(d),u.value=k.NONE};return e(()=>f,()=>{_.value=!(0,Q.isEqual)(r(f),h)},{deep:!0}),e(()=>a.findById(i.value),e=>{e&&!_.value&&(f.name=e.name,Object.assign(h,C(r(f))))}),{model:f,formEl:g,formChanged:_,submit:v}},$=()=>{let e=s(),{enabled:t}=x(),n=[`locationAddForm`,`locationEditForm`],r=[`locationSchema`,`locationAddFormSchema`,`locationEditFormSchema`,`locationCreateReqSchema`,`locationUpdateReqSchema`],a=i(()=>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=n.length===0||!!e.components&&n.some(t=>e.components&&t in e.components),i=r.length===0||!!e.schemas&&r.some(t=>e.schemas&&t in e.schemas);return t||i}):!1));return{plugins:a,options:i(()=>w(a.value.flatMap(e=>(e.elements??[]).filter(e=>e.modules===void 0||e.modules.includes(`weather-module`)).map(n=>({value:n.type,label:n.name?.trim()?n.name:e.name,disabled:!t(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}}}},ne=({type:e})=>{let{getByType:t}=$(),n=i(()=>t(e));return{plugin:n,element:i(()=>(n.value?.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`weather-module`))))}};export{I as _,Y as a,U as c,G as d,H as f,L as g,z as h,X as i,q as l,B as m,$ as n,Z as o,V as p,te as r,K as s,ne as t,W as u};
1
+ import"./chunk-DECur_0Z.js";import{Xr as e,ci as t,d as n,fi as r,mr as i,n as a,ui as o}from"./icon-with-child-DmQ_XhQy.js";import{A as s,Bn as c,Fn as l,In as u,Jn as d,Pn as f,S as p,T as m,Tn as h,Un as g,Vr as _,Wn as v,Yn as y,_ as b,an as x,d as S,m as C,pn as w,qn as T,va as E,wn as D,y as O}from"./common-DyDAwGBz.js";import{c as k,d as A,f as j,h as M,i as N,n as P,o as F,p as ee}from"./useLocation-DmKkc95i.js";var I=()=>{let e=m().getStore(ee),{data:t,semaphore:n}=E(e);return{weatherDay:i(()=>t.value),isLoading:i(()=>t.value===null?n.value.getting:!1),fetchWeatherDay:async()=>{await e.get()}}},L=()=>{let e=m().getStore(M),{firstLoad:t,semaphore:n}=E(e);return{locations:i(()=>e.findAll().filter(e=>!e.draft)),areLoading:i(()=>n.value.fetching.items),loaded:i(()=>t.value),fetchLocations:async()=>{await e.fetch()}}},R={search:void 0,types:[],primary:`all`},z=()=>{let t=m().getStore(M),{firstLoad:n,semaphore:r}=E(t),{configModule:a}=h({type:A}),s=i(()=>a.value?.primaryLocationId??null),c=o(10),l=o(1),u=o({...R}),d=i(()=>u.value.search!==R.search||u.value.types.length>0||u.value.primary!==R.primary),f=o(`name`),p=o(`ascending`),g=i(()=>{let e=t.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?e:w(e,[e=>e[f.value]??``],[p.value===`ascending`?`asc`:`desc`])}),_=i(()=>{let e=(l.value-1)*c.value,t=e+c.value;return g.value.slice(e,t)}),v=async()=>{await t.fetch()},y=i(()=>r.value.fetching.items||!n.value),b=i(()=>n.value),x=i(()=>t.findAll().filter(e=>!e.draft).length);return e(()=>u.value,()=>{l.value=1},{deep:!0}),{locations:g,locationsPaginated:_,totalRows:x,areLoading:y,loaded:b,fetchLocations:v,filters:u,filtersActive:d,paginateSize:c,paginatePage:l,sortBy:f,sortDir:p,resetFilter:()=>{u.value={...R}},primaryLocationId:s}},B=()=>{let e=O(),t=p(),n=o({}),r=o(!1),s=o(!1),c=o(!1);return{weatherByLocation:i(()=>n.value),isLoading:r,hasError:s,fetchCompleted:c,fetchLocationsWeather:async()=>{if(!r.value){r.value=!0,s.value=!1;try{let{data:r,error:i,response:o}=await e.client.GET(`/${a}/${j}/weather`,{});if(r!==void 0&&Array.isArray(r.data)){let e={};for(let n of r.data)if(n.location_id)try{let t=P(n.current),r=n.location;e[n.location_id]={current:t,locationName:r?.name??``,country:r?.country??null}}catch(e){t.error(`[WEATHER] Failed to transform weather data for location ${n.location_id}`,e)}n.value=e,Object.keys(e).length===0&&(s.value=!0);return}let c=`Failed to fetch locations weather.`;throw i&&(c=i.message??c),new N(c,o?.status??500)}catch(e){if(s.value=!0,e instanceof N)throw e;t.error(`[WEATHER] Failed to fetch locations weather`,e)}finally{r.value=!1,c.value=!0}}}}},V=()=>{let{t:e}=n(),t=b(),r=m().getStore(M);return{add:async e=>r.add(e),edit:async e=>r.edit(e),remove:async n=>{let i=r.findById(n);if(i)try{await _.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 r.remove({id:n}),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 n=>{if(n.length!==0)try{await _.confirm(e(`weatherModule.messages.locations.confirmBulkDelete`,{count:n.length}),e(`weatherModule.headings.bulkDeleteLocations`),{confirmButtonText:e(`weatherModule.buttons.yes.title`),cancelButtonText:e(`weatherModule.buttons.no.title`),type:`warning`});let i=0,a=0;for(let e of n)try{await r.remove({id:e.id}),i++}catch{a++}i>0&&t.success(e(`weatherModule.messages.locations.bulkDeleted`,{count:i})),a>0&&t.error(e(`weatherModule.messages.locations.bulkDeleteFailed`,{count:a}))}catch{t.info(e(`weatherModule.messages.locations.bulkDeleteCanceled`))}}}},H=T().uuid(),U=v({id:H,draft:l().default(!1),type:T().trim().nonempty(),name:T().trim().nonempty(),order:g().int().nonnegative().default(0),createdAt:d([T().datetime({offset:!0}),u()]).transform(e=>e instanceof Date?e:new Date(e)),updatedAt:d([T().datetime({offset:!0}),u()]).transform(e=>e instanceof Date?e:new Date(e)).optional().nullable().default(null)}).catchall(y());v({fetching:v({items:l().default(!1),item:f(H)}),creating:f(H),updating:f(H),deleting:f(H)}),v({id:H,type:T().trim().nonempty(),data:c({})}),v({id:H,data:v({type:T().trim().nonempty(),name:T().trim().nonempty()}).catchall(y())}),v({id:H}),v({id:H});var W=v({id:H.optional().default(S()),draft:l().optional().default(!1),data:v({type:T().trim().nonempty(),name:T().trim().nonempty()}).catchall(y())}),G=v({id:H,data:v({type:T().trim().nonempty(),name:T().trim().optional()}).catchall(y())});v({id:H}),v({id:H});var K=v({id:T().uuid().optional(),type:T().trim().nonempty(),name:T().trim().nonempty()}).catchall(y()),q=v({type:T().trim().nonempty(),name:T().trim().nonempty().optional()}).catchall(y());v({id:T().uuid(),type:T(),name:T().trim().nonempty(),order:g().int().nonnegative().default(0),created_at:T(),updated_at:T().nullable()}).catchall(y()),v({id:H,type:T().trim().nonempty(),name:T().trim().min(1,`Name is required`)});var J=v({name:T().trim().min(1,`Name is required`)}),Y=U,X=K,Z=q,Q=D(),te=({id:i})=>{let a=m().getStore(M),{t:s}=n(),c=b(),l=p(),u=o(k.NONE),d,f=t({name:a.findById(i.value)?.name??``}),h=C(r(f)),g=o(void 0),_=o(!1),v=async()=>{if(g.value.clearValidate(),!await g.value.validate())throw new F(`Form not valid`);let e=J.safeParse(f);if(!e.success)throw l.error(`[WEATHER_MODULE] Schema validation failed:`,e.error),new F(`Failed to validate update location model.`);u.value=k.WORKING;let t=a.findById(i.value);if(!t)throw new F(`Location not found.`);let n=s(`weatherModule.messages.locations.notUpdated`,{location:f.name});try{await a.edit({id:i.value,data:{type:t.type,...e.data}}),u.value=k.OK,c.success(s(`weatherModule.messages.locations.updated`,{location:f.name})),Object.assign(h,C(r(f))),_.value=!1}catch(e){throw u.value=k.ERROR,d=window.setTimeout(y,2e3),e instanceof N&&e.code===422?c.error(e.message):c.error(n),e}},y=()=>{window.clearTimeout(d),u.value=k.NONE};return e(()=>f,()=>{_.value=!(0,Q.isEqual)(r(f),h)},{deep:!0}),e(()=>a.findById(i.value),e=>{e&&!_.value&&(f.name=e.name,Object.assign(h,C(r(f))))}),{model:f,formEl:g,formChanged:_,submit:v}},$=()=>{let e=s(),{enabled:t}=x(),n=[`locationAddForm`,`locationEditForm`],r=[`locationSchema`,`locationAddFormSchema`,`locationEditFormSchema`,`locationCreateReqSchema`,`locationUpdateReqSchema`],a=i(()=>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=n.length===0||!!e.components&&n.some(t=>e.components&&t in e.components),i=r.length===0||!!e.schemas&&r.some(t=>e.schemas&&t in e.schemas);return t||i}):!1));return{plugins:a,options:i(()=>w(a.value.flatMap(e=>(e.elements??[]).filter(e=>e.modules===void 0||e.modules.includes(`weather-module`)).map(n=>({value:n.type,label:n.name?.trim()?n.name:e.name,disabled:!t(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}}}},ne=({type:e})=>{let{getByType:t}=$(),n=i(()=>t(e));return{plugin:n,element:i(()=>(n.value?.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`weather-module`))))}};export{I as _,Y as a,U as c,G as d,H as f,L as g,z as h,X as i,q as l,B as m,$ as n,Z as o,V as p,te as r,K as s,ne as t,W as u};
@@ -1 +1 @@
1
- import{mr as e}from"./icon-with-child-DmQ_XhQy.js";import{$t as t,T as n,va as r}from"./common-DlW3qRTQ.js";var i=()=>{let i=n().getStore(t),{profile:a}=r(i);return{profile:e(()=>a.value),isSignedIn:e(()=>i.isSignedIn())}};export{i as t};
1
+ import{mr as e}from"./icon-with-child-DmQ_XhQy.js";import{$t as t,T as n,va as r}from"./common-DyDAwGBz.js";var i=()=>{let i=n().getStore(t),{profile:a}=r(i);return{profile:e(()=>a.value),isSignedIn:e(()=>i.isSignedIn())}};export{i as t};