@fastybird/smart-panel-admin 1.0.0-beta.2 → 1.0.0-beta.3
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.
- package/dist/assets/{card-add-form-Gso7ULO3.js → card-add-form-CLhQRBaL.js} +1 -1
- package/dist/assets/{card-edit-form-CG5By4hN.js → card-edit-form-D0GHARW-.js} +1 -1
- package/dist/assets/{common-C6O7MWKy.js → common-CYlvhyJx.js} +4 -4
- package/dist/assets/{components-Cg1OPydQ.js → components-BZ1exlup.js} +1 -1
- package/dist/assets/{components-C5Wu_yx6.js → components-BkjSdnbB.js} +1 -1
- package/dist/assets/{components-CDzfp-v5.js → components-C2nsvuWt.js} +1 -1
- package/dist/assets/{components-BDuVLuIi.js → components-C9Hw685H.js} +2 -2
- package/dist/assets/{components-f7Acikyq.js → components-CgD2Wl4X.js} +1 -1
- package/dist/assets/{components-Bzwfh0_6.js → components-CzrtwZEB.js} +1 -1
- package/dist/assets/{components-CWCnDk-k.js → components-DE6eu41U.js} +1 -1
- package/dist/assets/{components-CBgIPDGp.js → components-jS3aYN4W.js} +1 -1
- package/dist/assets/{composables-CXnK_jZC.js → composables-BGwJJI84.js} +1 -1
- package/dist/assets/{composables-uEwOIGlv.js → composables-By-2bZ6o.js} +1 -1
- package/dist/assets/composables-D2XmoNFv.js +1 -0
- package/dist/assets/{composables-DRljO7YE.js → composables-D5ksCJy6.js} +1 -1
- package/dist/assets/{composables-B96WL0Wj.js → composables-DEE0h-ep.js} +1 -1
- package/dist/assets/composables-DINXeVLA.js +1 -0
- package/dist/assets/{composables-CFfboRzY.js → composables-DcfYrDwm.js} +1 -1
- package/dist/assets/{composables-DVL3jPH8.js → composables-DsKIR5Bm.js} +1 -1
- package/dist/assets/{composables-vJCRdU0M.js → composables-GMO5QlG5.js} +1 -1
- package/dist/assets/{composables-U-xxC_sT.js → composables-zt-P_Tr3.js} +1 -1
- package/dist/assets/{dashboard-DG93chjw.js → dashboard-VE2NrHdf.js} +2 -2
- package/dist/assets/{dashboard.types-CFfH-GLV.js → dashboard.types-By_wvrmJ.js} +1 -1
- package/dist/assets/{data-source-edit-form-BI_dwXcE.js → data-source-edit-form-BfeuqxfT.js} +1 -1
- package/dist/assets/{drawer-piSQQ92r.js → drawer-CBjyEUxR.js} +1 -1
- package/dist/assets/{index-qait6dZr.js → index-BGtjR8rl.js} +4 -4
- package/dist/assets/{input-number-aj4Bs1x0.js → input-number-0WfCl7sp.js} +1 -1
- package/dist/assets/{integration-config-dialog-4lXNA-cq.js → integration-config-dialog-D7ezGYtM.js} +1 -1
- package/dist/assets/{layout-config-wF4GEnoW.js → layout-config-B_k0YP5E.js} +1 -1
- package/dist/assets/{layout-default-fi64NP2-.js → layout-default-St-GEUIG.js} +1 -1
- package/dist/assets/{layout-lock-B1tHh9TR.js → layout-lock-CEWN7-5y.js} +1 -1
- package/dist/assets/layout-profile-CmZ_5TLY.js +1 -0
- package/dist/assets/{layout-profile-5CD6bicW.js → layout-profile-DjpSTQs2.js} +1 -1
- package/dist/assets/layout-sign-BAfTH8N1.js +1 -0
- package/dist/assets/{layout-sign-D_I0Ie9D.js → layout-sign-Cn1Z7dcG.js} +1 -1
- package/dist/assets/{list-data-sources-adjust-uB8b6Hjl.js → list-data-sources-adjust-uAboLtF5.js} +1 -1
- package/dist/assets/{list-locations-Ckoi0RHB.js → list-locations-NlC7DHeR.js} +1 -1
- package/dist/assets/{list-users-Dyap_TZY.js → list-users-B9rvfJpM.js} +1 -1
- package/dist/assets/{logs-entries.transformers-DY1KWqis.js → logs-entries.transformers-D-IYkG06.js} +1 -1
- package/dist/assets/{page-configure-Dr3kKTbt.js → page-configure-BxuItsp7.js} +1 -1
- package/dist/assets/{page-configure-BU4WzKF4.js → page-configure-DnRl2-Bw.js} +1 -1
- package/dist/assets/{pagination-BRH-PmO7.js → pagination-B-q-tN7k.js} +1 -1
- package/dist/assets/{popover-BAQvnaAQ.js → popover-CJnPPf6w.js} +1 -1
- package/dist/assets/{radio-DW3_4owj.js → radio-BCfRCNYC.js} +1 -1
- package/dist/assets/{scene-add-form-8nrzesj2.js → scene-add-form-Bc_O-pQF.js} +1 -1
- package/dist/assets/{scene-edit-form-AOK6QcMB.js → scene-edit-form-D6n4XMCu.js} +1 -1
- package/dist/assets/{schemas.utils-Luoz3tGx.js → schemas.utils-DfsvrMGr.js} +1 -1
- package/dist/assets/{select-data-source-plugin-CQqAjj8I.js → select-data-source-plugin-BUQn0xFA.js} +1 -1
- package/dist/assets/{slider-Bk-smens.js → slider-BGyYDnSl.js} +1 -1
- package/dist/assets/{spaces-D3E3Y4it.js → spaces-C4Tpph44.js} +2 -2
- package/dist/assets/{spaces-home-control.constants-Btr-C2aq.js → spaces-home-control.constants-F99XoJI8.js} +1 -1
- package/dist/assets/{steps-D9CW-O6K.js → steps-Dr32rxSM.js} +1 -1
- package/dist/assets/{system-CtMoh4fS.js → system-DU1DZ1-l.js} +2 -2
- package/dist/assets/{tile-detail-Cp1Wg2ln.js → tile-detail-m45OY5pq.js} +1 -1
- package/dist/assets/{tile-edit-form-BnXEsFRq.js → tile-edit-form-Buhzsx9J.js} +1 -1
- package/dist/assets/{types-BP1Y7Ct6.js → types-Bi7Jdlzc.js} +1 -1
- package/dist/assets/{useBuddyChat-CvDleaZJ.js → useBuddyChat-DicTnDX0.js} +1 -1
- package/dist/assets/{useDataSources-3VKnPYpt.js → useDataSources-BLr8PIxu.js} +1 -1
- package/dist/assets/useEventBus-4ZeHg9H7.js +1 -0
- package/dist/assets/{useGeolocation-BO7kIdUh.js → useGeolocation-D04GeyZh.js} +1 -1
- package/dist/assets/{useLocation-DC_SbRoS.js → useLocation-DIH9HVyg.js} +1 -1
- package/dist/assets/{usePage-BVfsjiLb.js → usePage-rn3j4WMQ.js} +1 -1
- package/dist/assets/{usePersonalTokens-BqXxMus4.js → usePersonalTokens-BAWWC0KL.js} +1 -1
- package/dist/assets/{useSpaces-XFygVec-.js → useSpaces-DCuyMUqe.js} +1 -1
- package/dist/assets/{useUuid-bBKVSq5e.js → useUuid-HrENmPhQ.js} +1 -1
- package/dist/assets/{view-buddy-chat-Cbz_tWQw.js → view-buddy-chat-WrOmxX6O.js} +1 -1
- package/dist/assets/{view-card-add-FpOWLKDD.js → view-card-add-DKtbBU7F.js} +1 -1
- package/dist/assets/{view-card-edit-CckfNDtI.js → view-card-edit-10HfRMki.js} +1 -1
- package/dist/assets/{view-channel-CwvntrqM.js → view-channel-D_zpx26S.js} +1 -1
- package/dist/assets/{view-channel-add-CbGsI0RI.js → view-channel-add-BWKCnvF7.js} +1 -1
- package/dist/assets/{view-channel-edit-BscFo-2O.js → view-channel-edit-Czo__VkB.js} +1 -1
- package/dist/assets/{view-channel-property-add-BlESkjUP.js → view-channel-property-add-Dnu4HYye.js} +1 -1
- package/dist/assets/{view-channel-property-edit-C7vrDHM0.js → view-channel-property-edit-CW2D-stk.js} +1 -1
- package/dist/assets/{view-channels-COV_YBpq.js → view-channels-7KUQ9wlx.js} +1 -1
- package/dist/assets/{view-config-module-edit-Ce1dHGD6.js → view-config-module-edit-CEiOBSu9.js} +1 -1
- package/dist/assets/{view-config-modules-09KPTYj-.js → view-config-modules-D-yQNn55.js} +1 -1
- package/dist/assets/{view-config-plugin-edit-DpODIuSr.js → view-config-plugin-edit-SlMNwz8Y.js} +1 -1
- package/dist/assets/{view-config-plugins-BUBXmHje.js → view-config-plugins-BYqEo20U.js} +1 -1
- package/dist/assets/{view-data-source-add-CUeeE9I9.js → view-data-source-add-DfGZogv_.js} +1 -1
- package/dist/assets/{view-data-source-add-Cszg1PXR.js → view-data-source-add-Dspug3fk.js} +1 -1
- package/dist/assets/{view-data-source-edit-D6ZdInPK.js → view-data-source-edit-B-IElLOM.js} +1 -1
- package/dist/assets/{view-data-source-edit-Cnvz59YN.js → view-data-source-edit-DhJRmRuN.js} +1 -1
- package/dist/assets/{view-device-BqPVFd5q.js → view-device-BaeCsXzk.js} +1 -1
- package/dist/assets/{view-device-add-raK2v6Sb.js → view-device-add-Cdg3B458.js} +1 -1
- package/dist/assets/{view-device-control-CQecqQV3.js → view-device-control-CL6gGt9v.js} +1 -1
- package/dist/assets/{view-device-edit-BR3JBqZz.js → view-device-edit-D6KrEzBk.js} +1 -1
- package/dist/assets/{view-devices-DZOlHmA1.js → view-devices-a5DXrim2.js} +1 -1
- package/dist/assets/{view-devices-wizard-j2-RYGln.js → view-devices-wizard-DgQX6xYr.js} +1 -1
- package/dist/assets/{view-display-BAJl9w_-.js → view-display-BK_WRuzd.js} +1 -1
- package/dist/assets/{view-display-edit-BxToHJGY.js → view-display-edit-CfO1sMGU.js} +1 -1
- package/dist/assets/{view-display-tokens-C9EUKg60.js → view-display-tokens-q05T3MXd.js} +1 -1
- package/dist/assets/{view-displays-DRh-jZuh.js → view-displays-BYdUjNkR.js} +1 -1
- package/dist/assets/{view-extension-detail-Dc5alcRB.js → view-extension-detail--zfY4Dz3.js} +1 -1
- package/dist/assets/{view-extensions-D78hp-GZ.js → view-extensions-Bum-2tum.js} +1 -1
- package/dist/assets/{view-location-CGxqI4LF.js → view-location-CBJDN5zS.js} +1 -1
- package/dist/assets/{view-location-add-Bw4od9E3.js → view-location-add-DFmw1sXk.js} +1 -1
- package/dist/assets/{view-location-edit-bfe9ZVCY.js → view-location-edit-CLS9Cqd2.js} +1 -1
- package/dist/assets/{view-locations-C9MVqtob.js → view-locations-j_5eCh-A.js} +1 -1
- package/dist/assets/{view-lock-screen-eecVFwp8.js → view-lock-screen-DA_TSXQa.js} +1 -1
- package/dist/assets/{view-onboarding-D-LQj8xQ.js → view-onboarding-Cy48X2AX.js} +1 -1
- package/dist/assets/{view-page-CdJYrNvm.js → view-page-D30T4blr.js} +1 -1
- package/dist/assets/{view-page-add-CWlY59Z8.js → view-page-add-C0anBkl6.js} +1 -1
- package/dist/assets/{view-page-configure-CM3xpsQ6.js → view-page-configure-C2_axqzK.js} +1 -1
- package/dist/assets/{view-page-configure-J7GvJ6kn.js → view-page-configure-C8rOXCD-.js} +1 -1
- package/dist/assets/{view-page-data-source-add-CJYMQNrY.js → view-page-data-source-add-CwcgqFSk.js} +1 -1
- package/dist/assets/{view-page-data-source-edit-YUQc1hkr.js → view-page-data-source-edit-BHPdu_4o.js} +1 -1
- package/dist/assets/{view-page-edit-CSiIqhHa.js → view-page-edit-BE2o_PWc.js} +1 -1
- package/dist/assets/{view-page-plugin-DA-QTSFI.js → view-page-plugin-B6Fw6v1N.js} +1 -1
- package/dist/assets/{view-pages-BJh5on5i.js → view-pages-C9-e4oK7.js} +1 -1
- package/dist/assets/{view-profile-general-BUgWnB8F.js → view-profile-general-CWkcBsOE.js} +1 -1
- package/dist/assets/{view-profile-security-f1qsSWz-.js → view-profile-security-B4bDUaQc.js} +1 -1
- package/dist/assets/{view-scene-add-XnMQkpIx.js → view-scene-add-DP-jBsux.js} +1 -1
- package/dist/assets/{view-scene-edit-CTbkCckV.js → view-scene-edit-Sarmco96.js} +1 -1
- package/dist/assets/{view-scenes-ChzoHwOO.js → view-scenes-BHGYWuRY.js} +1 -1
- package/dist/assets/{view-sign-in-Ceaac-fd.js → view-sign-in-tkWBqcvx.js} +1 -1
- package/dist/assets/{view-sign-up-BZ53tmTA.js → view-sign-up-Dh2ZINak.js} +1 -1
- package/dist/assets/{view-space-add-BQnXpas4.js → view-space-add-B5_9knXl.js} +1 -1
- package/dist/assets/{view-space-configure-DgonALs8.js → view-space-configure-vCS0YQ-H.js} +1 -1
- package/dist/assets/{view-space-edit-wj8T4WRV.js → view-space-edit-C5_ml_8W.js} +1 -1
- package/dist/assets/{view-space-plugin-BdOVEBgt.js → view-space-plugin-C3g2VSo3.js} +1 -1
- package/dist/assets/{view-spaces-CM93SjHm.js → view-spaces-culV68Lm.js} +1 -1
- package/dist/assets/{view-spaces-wizard-MAczhruN.js → view-spaces-wizard-HXpKypIL.js} +1 -1
- package/dist/assets/{view-stats-BWJU4kKt.js → view-stats-BCqyavVj.js} +1 -1
- package/dist/assets/{view-system-backups-BnQRabt_.js → view-system-backups--UcABhC4.js} +1 -1
- package/dist/assets/{view-system-info-BdUO_aZz.js → view-system-info-D9tPEGF8.js} +1 -1
- package/dist/assets/{view-system-log-detail-DnW1sR90.js → view-system-log-detail-YsXJEn7J.js} +1 -1
- package/dist/assets/{view-system-logs-rBB1JhNA.js → view-system-logs-NPsCix4z.js} +1 -1
- package/dist/assets/{view-tile-DEWaNAAC.js → view-tile-DUn9uIlJ.js} +1 -1
- package/dist/assets/{view-tile-add-BYCfwz0G.js → view-tile-add-CEaGRSsg.js} +1 -1
- package/dist/assets/{view-tile-add-DJEhRPql.js → view-tile-add-lgl0PPBy.js} +1 -1
- package/dist/assets/{view-tile-data-source-add-BQY3lYEx.js → view-tile-data-source-add-DDR948lU.js} +1 -1
- package/dist/assets/{view-tile-data-source-edit-DcmEisVl.js → view-tile-data-source-edit-b4BI6TNr.js} +1 -1
- package/dist/assets/{view-tile-edit-DB5-9c4k.js → view-tile-edit-DpVMRrwV.js} +1 -1
- package/dist/assets/{view-tile-edit-C9bdoUQS.js → view-tile-edit-Gcy4HufJ.js} +1 -1
- package/dist/assets/{view-tile-edit-CEk-TKvg.js → view-tile-edit-SYijBGBh.js} +1 -1
- package/dist/assets/{view-user-add-DvmHzen6.js → view-user-add-BeEBHsTw.js} +1 -1
- package/dist/assets/{view-user-edit-UBSgDOcU.js → view-user-edit-DZnkJQOL.js} +1 -1
- package/dist/assets/{view-users-CH0q5tjL.js → view-users-UBrKKeKw.js} +1 -1
- package/dist/assets/{weather-forecast.transformers-Dc2cpiG6.js → weather-forecast.transformers-C4Dcl8Cg.js} +1 -1
- package/dist/assets/{weather-CiVW2Zku.js → weather-gJGYyu0m.js} +2 -2
- package/dist/index.html +58 -58
- package/package.json +1 -1
- package/dist/assets/composables-D5DhD9vG.js +0 -1
- package/dist/assets/composables-DA8P1Agq.js +0 -1
- package/dist/assets/layout-profile-52nMnfeI.js +0 -1
- package/dist/assets/layout-sign-CsRJeI15.js +0 -1
- package/dist/assets/useEventBus-DVXQaGC-.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./rolldown-runtime-QTnfLwEv.js";import{Ei as e,Er as t,Gr as n,Si as r,T as i,bi as a,ci as o,ki as s,n as c,yi as l}from"./icon-with-child-CgZMNB3F.js";import{Ar as u,Cr as d,Dn as f,Fn as p,Kn as m,Kr as h,Mi as g,Mr as _,Nr as v,Pr as y,T as b,_ as x,_r as S,b as C,br as w,c as T,cr as E,do as D,dr as O,fn as k,i as A,in as j,jr as M,lr as N,m as P,p as F,ri as I,rn as L,tn as R,u as z,ur as B,wr as V,yr as H}from"./common-C6O7MWKy.js";import{t as U}from"./schemas.utils-Luoz3tGx.js";import{a as W,i as ee,n as G,o as te,r as K}from"./keys-DghNVBR5.js";import{n as ne}from"./logs-entries.transformers-DY1KWqis.js";var q=m(),J=class extends Error{exception;constructor(e,t=null){super(e),this.name=`DevicesException`,this.exception=t}},Y=class extends J{code;constructor(e,t=null,n=null){super(e,n),this.name=`DevicesApiException`,this.code=t}},X=class extends J{constructor(e,t=null){super(e,t),this.name=`DevicesValidationException`}},re=()=>{let e=b(),{enabled:n}=f(),r=[`channelPropertyAddForm`,`channelPropertyEditForm`],i=[`channelPropertySchema`,`channelPropertyAddFormSchema`,`channelPropertyEditFormSchema`,`channelPropertyCreateReqSchema`,`channelPropertyUpdateReqSchema`],a=t(()=>e.getPlugins().filter(e=>e.modules===void 0||e.modules.includes(`devices-module`)?(e.elements??[]).some(e=>{if(!(e.modules===void 0||e.modules.includes(`devices-module`)))return!1;let t=r.length===0||!!e.components&&r.some(t=>e.components&&t in e.components),n=i.length===0||!!e.schemas&&i.some(t=>e.schemas&&t in e.schemas);return t||n}):!1));return{plugins:a,options:t(()=>p(a.value.flatMap(e=>(e.elements??[]).filter(e=>e.modules===void 0||e.modules.includes(`devices-module`)).map(t=>({value:t.type,label:t.name?.trim()?t.name:e.name,disabled:!n(e.type)}))),[e=>e.label],[`asc`])),getByName:e=>a.value.find(t=>t.type===e),getByType:e=>a.value.find(t=>(t.elements??[]).some(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`)))),getElement:e=>{for(let t of a.value){let n=(t.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`)));if(n)return n}}}},ie=()=>{let e=b(),{enabled:n}=f(),r=[`channelAddForm`,`channelEditForm`],i=[`channelSchema`,`channelAddFormSchema`,`channelEditFormSchema`,`channelCreateReqSchema`,`channelUpdateReqSchema`],a=t(()=>e.getPlugins().filter(e=>e.modules===void 0||e.modules.includes(`devices-module`)?(e.elements??[]).some(e=>{if(!(e.modules===void 0||e.modules.includes(`devices-module`)))return!1;let t=r.length===0||!!e.components&&r.some(t=>e.components&&t in e.components),n=i.length===0||!!e.schemas&&i.some(t=>e.schemas&&t in e.schemas);return t||n}):!1));return{plugins:a,options:t(()=>p(a.value.flatMap(e=>(e.elements??[]).filter(e=>e.modules===void 0||e.modules.includes(`devices-module`)).map(t=>({value:t.type,label:t.name?.trim()?t.name:e.name,disabled:!n(e.type)}))),[e=>e.label],[`asc`])),getByName:e=>a.value.find(t=>t.type===e),getByType:e=>a.value.find(t=>(t.elements??[]).some(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`)))),getElement:e=>{for(let t of a.value){let n=(t.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`)));if(n)return n}}}},ae=({id:e})=>{let n=C().getStore(K),{data:r,semaphore:i}=D(n);return{channel:t(()=>e===null?null:r.value[e]??null),isLoading:t(()=>i.value.fetching.item.includes(e)?!0:(r.value[e]??null)===null&&i.value.fetching.items.includes(`all`)),fetchChannel:async()=>{(r.value[e]??null)?.draft||await n.get({id:e})}}},oe=(e={})=>{let{deviceId:n}=e,r=C().getStore(K),{firstLoad:i,semaphore:a}=D(r),o=n===void 0?void 0:typeof n==`string`?t(()=>n):n;return{channels:t(()=>r.findAll().filter(e=>!o?.value||e.device===o.value)),areLoading:t(()=>a.value.fetching.items.includes(o?.value??`all`)?!0:!i.value.includes(o?.value??`all`)&&a.value.fetching.items.includes(o?.value??`all`)),loaded:t(()=>i.value.includes(o?.value??`all`)),fetchChannels:async()=>{await r.fetch({deviceId:o?.value})}}},se=w({search:d().optional(),types:B(d()),state:E([`all`,`offline`,`online`]).default(`all`),states:B(S(h)),categories:B(S(u)),enabled:E([`all`,`enabled`,`disabled`]).default(`all`),validation:E([`all`,`valid`,`invalid`]).default(`all`)}),ce=w({search:d().optional(),devices:B(d()),categories:B(S(M))}),le=w({search:d().optional(),channels:B(d()),categories:B(S(_)),permissions:B(S(y)),dataTypes:B(S(v))}),Z={search:void 0,devices:[],categories:[]},ue={by:`name`,dir:`asc`},de=(e={})=>{let{deviceId:n}=e,i=C().getStore(K),{firstLoad:a,semaphore:s}=D(i),{filters:c,sort:l,pagination:u,reset:d}=T({key:`${R}:channels:list`,filters:{schema:ce,defaults:Z},sort:{defaults:[ue]},pagination:{defaults:{page:1,size:10}},syncQuery:!0,version:1}),f=t(()=>c.value.search!==Z.search||!(0,q.isEqual)(c.value.devices,Z.devices)||!(0,q.isEqual)(c.value.categories,Z.categories)),m=r(u.value.size||10),h=r(u.value.page||1),g=r(l.value.length>0?l.value[0]?.by:void 0),_=r(l.value.length>0?l.value[0]?.dir??null:null),v=t(()=>p(i.findAll().filter(e=>!n||e.device===n).filter(e=>!e.draft&&(!c.value.search||e.id.toLowerCase().includes(c.value.search.toLowerCase())||e.name.toLowerCase().includes(c.value.search.toLowerCase())||e.description?.toLowerCase().includes(c.value.search.toLowerCase())||e.identifier?.toLowerCase().includes(c.value.search.toLowerCase()))&&(c.value.categories.length===0||c.value.categories.includes(e.category))&&(c.value.devices.length===0||c.value.devices.includes(e.device))),[e=>e[g.value]??``],[_.value===`asc`?`asc`:`desc`])),y=t(()=>{let e=(h.value-1)*m.value,t=e+m.value;return v.value.slice(e,t)}),b=async()=>{await i.fetch({deviceId:n})},x=t(()=>s.value.fetching.items.includes(n??`all`)?!0:!a.value.includes(n??`all`)&&s.value.fetching.items.includes(n??`all`)),S=t(()=>a.value.includes(n??`all`)),w=t(()=>i.findAll().filter(e=>!n||e.device===n).filter(e=>!e.draft).length);return o(()=>u.value,e=>{h.value=e.page??1,m.value=e.size??10},{deep:!0}),o(()=>h.value,e=>{u.value.page=e}),o(()=>m.value,e=>{u.value.size=e}),o(()=>_.value,e=>{g.value===void 0||e===null?l.value=[]:l.value=[{by:g.value,dir:e}]}),o(()=>g.value,e=>{e===void 0?l.value=[]:l.value=[{by:e,dir:_.value}]}),{channels:v,channelsPaginated:y,totalRows:w,areLoading:x,loaded:S,fetchChannels:b,filters:c,filtersActive:f,paginateSize:m,paginatePage:h,sortBy:g,sortDir:_,resetFilter:d}},fe=()=>{let{t:e}=i(),t=F(),n=C().getStore(K),r=e=>n.findById(e);return{remove:async i=>{let a=r(i);if(a===null)throw new J(`Something went wrong, channel can't be loaded`);g.confirm(e(`devicesModule.texts.channels.confirmRemove`,{channel:a.name}),e(`devicesModule.headings.channels.remove`),{confirmButtonText:e(`devicesModule.buttons.yes.title`),cancelButtonText:e(`devicesModule.buttons.no.title`),type:`warning`}).then(async()=>{try{await n.remove({id:a.id}),t.success(e(`devicesModule.messages.channels.removed`,{channel:a.name}))}catch(n){if(n instanceof Y&&n.code===404){let n=e(`devicesModule.messages.channels.notFound`,{channel:a.name});t.error(n)}else if(n instanceof Y&&n.code===422)t.error(n.message);else{let n=e(`devicesModule.messages.channels.notRemoved`,{channel:a.name});t.error(n)}}}).catch(()=>{t.info(e(`devicesModule.messages.channels.removeCanceled`,{channel:a.name}))})}}},pe=({id:e})=>{let n=C().getStore(K);return{icon:t(()=>{switch(n.findById(e)?.category){default:return`mdi:chip`}})}},me={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}}}},he={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}}}},ge={[u.generic]:[],[u.air_conditioner]:[M.cooler,M.heater,M.fan,M.temperature,M.humidity,M.electrical_energy,M.electrical_power,M.leak,M.device_information],[u.air_dehumidifier]:[M.cooler,M.fan,M.temperature,M.humidity,M.electrical_energy,M.electrical_power,M.leak,M.device_information],[u.air_humidifier]:[M.humidity,M.switcher,M.temperature,M.fan,M.electrical_energy,M.electrical_power,M.leak,M.device_information],[u.air_purifier]:[M.fan,M.air_particulate,M.carbon_dioxide,M.carbon_monoxide,M.humidity,M.leak,M.nitrogen_dioxide,M.ozone,M.pressure,M.sulphur_dioxide,M.temperature,M.volatile_organic_compounds,M.electrical_energy,M.electrical_power,M.device_information],[u.alarm]:[M.alarm,M.device_information],[u.camera]:[M.camera,M.motion,M.microphone,M.speaker,M.contact,M.light,M.temperature,M.humidity,M.battery,M.device_information],[u.door]:[M.door,M.lock,M.contact,M.motion,M.battery,M.device_information],[u.doorbell]:[M.doorbell,M.camera,M.lock,M.motion,M.microphone,M.speaker,M.contact,M.light,M.battery,M.device_information],[u.fan]:[M.fan,M.electrical_energy,M.electrical_power,M.device_information],[u.heating_unit]:[M.heater,M.temperature,M.humidity,M.electrical_energy,M.electrical_power,M.device_information],[u.lighting]:[M.light,M.illuminance,M.electrical_energy,M.electrical_power,M.device_information],[u.lock]:[M.lock,M.contact,M.motion,M.battery,M.device_information],[u.media]:[M.media_input,M.media_playback,M.microphone,M.speaker,M.device_information],[u.av_receiver]:[M.media_input,M.media_playback,M.speaker,M.device_information],[u.game_console]:[M.media_playback,M.media_input,M.device_information],[u.projector]:[M.projector,M.speaker,M.media_playback,M.media_input,M.device_information],[u.set_top_box]:[M.media_input,M.media_playback,M.device_information],[u.streaming_service]:[M.media_playback,M.device_information],[u.outlet]:[M.outlet,M.electrical_energy,M.electrical_power,M.device_information],[u.pump]:[M.flow,M.switcher,M.leak,M.pressure,M.electrical_energy,M.electrical_power,M.device_information],[u.robot_vacuum]:[M.robot_vacuum,M.electrical_energy,M.electrical_power,M.leak,M.battery,M.device_information],[u.sensor]:[M.air_particulate,M.battery,M.carbon_dioxide,M.carbon_monoxide,M.contact,M.humidity,M.illuminance,M.leak,M.motion,M.nitrogen_dioxide,M.occupancy,M.ozone,M.pressure,M.smoke,M.sulphur_dioxide,M.temperature,M.volatile_organic_compounds,M.device_information],[u.speaker]:[M.speaker,M.media_input,M.media_playback,M.electrical_energy,M.electrical_power,M.device_information],[u.sprinkler]:[M.valve,M.flow,M.pressure,M.leak,M.humidity,M.electrical_energy,M.electrical_power,M.device_information],[u.switcher]:[M.switcher,M.electrical_energy,M.electrical_power,M.device_information],[u.television]:[M.television,M.speaker,M.media_playback,M.media_input,M.device_information],[u.terminal]:[M.button,M.indicator,M.buzzer,M.illuminance,M.accelerometer,M.temperature,M.contact,M.switcher,M.device_information],[u.thermostat]:[M.thermostat,M.cooler,M.heater,M.temperature,M.humidity,M.contact,M.electrical_energy,M.electrical_power,M.device_information],[u.valve]:[M.valve,M.pressure,M.flow,M.leak,M.battery,M.electrical_energy,M.electrical_power,M.device_information],[u.water_heater]:[M.heater,M.temperature,M.leak,M.electrical_energy,M.electrical_power,M.device_information],[u.window_covering]:[M.window_covering,M.battery,M.electrical_energy,M.electrical_power,M.device_information]},_e=Object.fromEntries(Object.entries(he).map(([e,t])=>{let n=Object.values(t.channels).map(e=>e.category),r=ge[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]})),ve=Object.fromEntries(Object.entries(he).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)}])),ye=Object.fromEntries(Object.entries(me).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)}])),be=(e,t)=>{let n=me[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}},xe=({id:e})=>{let n=C(),r=n.getStore(K),i=n.getStore(G),a=e=>r.findById(e),o=e=>ye[e.category]??null;return{canAddAnotherProperty:t(()=>{let t=a(e);if(t===null)return!0;let{required:n,optional:r}=o(t)??{required:[],optional:[]},s=[...n,...r],c=i.findForChannel(t.id).map(e=>e.category);return s.filter(e=>!c.includes(e)).length>0}),missingRequiredProperties:t(()=>{let t=a(e);if(t===null)throw new J(`Something went wrong, channel can't be loaded`);let{required:n}=o(t)??{required:[]},r=i.findForChannel(t.id).map(e=>e.category);return n.filter(e=>!r.includes(e))})}},Se=w({id:d().uuid().optional(),type:d().trim().nonempty(),device:d().uuid().optional(),category:S(M).default(M.generic),identifier:d().trim().nonempty().nullable().optional(),name:d().trim().nonempty(),description:d().trim().transform(e=>e===``?null:e).nullable().optional()}),Ce=w({id:d().uuid(),type:d().trim().nonempty(),device:d().uuid(),category:S(M).default(M.generic),identifier:d().trim().nonempty().nullable().optional(),name:d().trim().nonempty().optional(),description:d().trim().transform(e=>e===``?null:e).nullable().optional()}),we=({type:e})=>{let{getByType:n}=ie(),r=t(()=>n(e));return{plugin:r,element:t(()=>(r.value?.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`))))}},Te=()=>{let e=C().getStore(W),{firstLoad:n,semaphore:r}=D(e);return{devices:t(()=>e.findAll().filter(e=>!e.draft)),areLoading:t(()=>r.value.fetching.items),loaded:t(()=>n.value),fetchDevices:async()=>{await e.fetch()}}},Ee=({id:n,type:s,deviceId:c})=>{let l=C(),{element:u}=we({type:s}),d=l.getStore(K),{devices:f,fetchDevices:p,areLoading:m}=Te(),{t:h}=i(),g=F(),_=x(),v=r(j.NONE),y,b=t(()=>D.device?f.value.find(e=>e.id===D.device)??null:null),S=t(()=>b.value?d.findForDevice(b.value.id).map(e=>e.category):[]),w=t(()=>b.value?ve[b.value.category]??null:null),T=t(()=>w.value===null?[]:Object.values(M).filter(e=>w.value?.required.includes(e)||w.value?.optional.includes(e)).filter(e=>!S.value.includes(e)||w.value?.multiple?.includes(e)).map(e=>({value:e,label:h(`devicesModule.categories.channels.${e}`)}))),E=t(()=>f.value.filter(e=>e.type===s).map(e=>({value:e.id,label:e.name}))),D=a({...U(u.value?.schemas?.channelAddFormSchema||Se),id:n,type:s,device:c,category:M.generic,name:``,description:``}),O=z(e(D)),k=r(void 0),A=r(!1),N=async()=>{if(k.value.clearValidate(),!await k.value.validate())throw new X(`Form not valid`);let e=c??D.device;if(!e)throw new X(`Missing device identifier`);if(!D.category)throw new X(`Missing data type definition`);let t=(u.value?.schemas?.channelAddFormSchema||Se).safeParse(D);if(!t.success)throw _.error(`Schema validation failed with:`,t.error),new X(`Failed to validate create channel model.`);v.value=j.WORKING;let r=h(`devicesModule.messages.channels.notCreated`,{device:D.name});try{await d.add({id:n,deviceId:e,draft:!1,data:{...t.data,type:s}})}catch(e){throw v.value=j.ERROR,y=window.setTimeout(P,2e3),e instanceof Y&&e.code===422?g.error(e.message):g.error(r),e}return v.value=j.OK,y=window.setTimeout(P,2e3),g.success(h(`devicesModule.messages.channels.created`,{device:D.name})),`added`},P=()=>{window.clearTimeout(y),v.value=j.NONE};return p().catch(()=>{}),o(D,()=>{A.value=!(0,q.isEqual)(e(D),O)}),o(()=>T.value,e=>{e.length&&e[0]&&(D.category=e[0].value,O.category=e[0].value)},{immediate:!0}),{categoriesOptions:T,devicesOptions:E,model:D,formEl:k,formChanged:A,submit:N,clear:P,formResult:v,loadingDevices:m}},De=({channel:n,messages:s})=>{let c=C(),{element:l}=we({type:n.type}),u=c.getStore(K),{devices:d,fetchDevices:f,areLoading:p}=Te(),{t:m}=i(),h=F(),g=x(),_=r(j.NONE),v,y=t(()=>d.value.find(e=>e.id===n.device)??null),b=t(()=>y.value?u.findForDevice(y.value.id).filter(e=>e.id!==n.id).map(e=>e.category):[]),S=t(()=>y.value?ve[y.value.category]??null:null),w=t(()=>S.value===null?[]:Object.values(M).filter(e=>S.value?.required.includes(e)||S.value?.optional.includes(e)).filter(e=>!b.value.includes(e)||S.value?.multiple?.includes(e)).map(e=>({value:e,label:m(`devicesModule.categories.channels.${e}`)}))),T=t(()=>d.value.map(e=>({value:e.id,label:e.name}))),E=a(n),D=z(e(E)),O=r(void 0),k=r(!1),A=async()=>{let t=n.draft,r=s&&s.error?s.error:n.draft?m(`devicesModule.messages.channels.notCreated`,{channel:n.name}):m(`devicesModule.messages.channels.notEdited`,{channel:n.name});if(O.value.clearValidate(),!await O.value.validate())throw new X(`Form not valid`);let i=(l.value?.schemas?.channelEditFormSchema||Ce).safeParse(E);if(!i.success)throw g.error(`Schema validation failed with:`,i.error),new X(`Failed to validate edit channel model.`);_.value=j.WORKING;try{await u.edit({id:n.id,data:{...i.data,type:n.type}}),n.draft&&await u.save({id:n.id,deviceId:n.device})}catch(e){throw _.value=j.ERROR,v=window.setTimeout(N,2e3),e instanceof Y&&e.code===422?h.error(e.message):h.error(r),e}return _.value=j.OK,v=window.setTimeout(N,2e3),t?(h.success(m(s&&s.success?s.success:`devicesModule.messages.channels.created`,{channel:n.name})),`added`):(h.success(m(s&&s.success?s.success:`devicesModule.messages.channels.edited`,{channel:n.name})),k.value=!1,D=z(e(E)),`saved`)},N=()=>{window.clearTimeout(v),_.value=j.NONE};return f().catch(()=>{}),o(E,()=>{k.value=!(0,q.isEqual)(e(E),D)}),{categoriesOptions:w,devicesOptions:T,model:E,formEl:O,formChanged:k,submit:A,clear:N,formResult:_,loadingDevices:p}},Oe=({channelId:e,id:n})=>{let r=C().getStore(G),{data:i,semaphore:a}=D(r);return{property:t(()=>n===null?null:i.value[n]??null),isLoading:t(()=>a.value.fetching.item.includes(n)?!0:(i.value[n]??null)===null?a.value.fetching.items.includes(e)||a.value.fetching.items.includes(`all`):!1),fetchProperty:async()=>{(i.value[n]??null)?.draft||await r.get({id:n,channelId:e})}}},ke=({channelId:e})=>{let n=C().getStore(G),{firstLoad:r,semaphore:i}=D(n),a=typeof e==`string`?t(()=>e):e;return{properties:t(()=>n.findAll().filter(e=>!a?.value||e.channel===a.value)),areLoading:t(()=>a.value?i.value.fetching.items.includes(a.value)?!0:!r.value.includes(a.value)&&i.value.fetching.items.includes(a.value):!1),loaded:t(()=>a.value?r.value.includes(a.value):!1),fetchProperties:async()=>{a.value&&await n.fetch({channelId:a.value})}}},Q={search:void 0,channels:[],categories:[],permissions:[],dataTypes:[]},Ae={by:`category`,dir:`asc`},je=({channelId:e,key:n=`list`})=>{let i=C().getStore(G),{firstLoad:a,semaphore:s}=D(i),{filters:c,sort:l,pagination:u,reset:d}=T({key:`${R}:channels-properties:${n}`,filters:{schema:le,defaults:Q},sort:{defaults:[Ae]},pagination:{defaults:{page:1,size:10}},syncQuery:!0,version:1}),f=t(()=>c.value.search!==Q.search||!(0,q.isEqual)(c.value.channels,Q.channels)||!(0,q.isEqual)(c.value.categories,Q.categories)||!(0,q.isEqual)(c.value.permissions,Q.permissions)||!(0,q.isEqual)(c.value.dataTypes,Q.dataTypes)),m=r(u.value.size||10),h=r(u.value.page||1),g=r(l.value.length>0?l.value[0]?.by:void 0),_=r(l.value.length>0?l.value[0]?.dir??null:null),v=t(()=>p(i.findAll().filter(t=>!e||t.channel===e).filter(e=>!e.draft&&(!c.value.search||e.id?.toLowerCase().includes(c.value.search.toLowerCase())||e.name?.toLowerCase().includes(c.value.search.toLowerCase())||e.identifier?.toLowerCase().includes(c.value.search.toLowerCase()))&&(c.value.categories.length===0||c.value.categories.includes(e.category))&&(c.value.dataTypes.length===0||c.value.dataTypes.includes(e.dataType))&&(c.value.permissions.length===0||e.permissions.some(e=>c.value.permissions.includes(e)))),[e=>e[g.value]??``],[_.value===`asc`?`asc`:`desc`])),y=t(()=>{let e=(h.value-1)*m.value,t=e+m.value;return v.value.slice(e,t)}),b=async()=>{await i.fetch({channelId:e})},x=t(()=>s.value.fetching.items.includes(e)?!0:!a.value.includes(e)&&s.value.fetching.items.includes(e)),S=t(()=>a.value.includes(e)),w=t(()=>i.findAll().filter(t=>!e||t.channel===e).filter(e=>!e.draft).length);return o(()=>u.value,e=>{h.value=e.page??1,m.value=e.size??10},{deep:!0}),o(()=>h.value,e=>{u.value.page=e}),o(()=>m.value,e=>{u.value.size=e}),o(()=>_.value,e=>{g.value===void 0||e===null?l.value=[]:l.value=[{by:g.value,dir:e}]}),o(()=>g.value,e=>{e===void 0?l.value=[]:l.value=[{by:e,dir:_.value}]}),{properties:v,propertiesPaginated:y,totalRows:w,areLoading:x,loaded:S,fetchProperties:b,filters:c,filtersActive:f,paginateSize:m,paginatePage:h,sortBy:g,sortDir:_,resetFilter:d}},Me=()=>{let{t:e}=i(),t=F(),n=C().getStore(G);return{remove:async r=>{let i=n.findById(r);if(i===null)throw new J(`Something went wrong, channel property can't be loaded`);g.confirm(e(`devicesModule.texts.channelsProperties.confirmRemove`,{property:i.name??e(`devicesModule.categories.channelsProperties.${i.category}`)}),e(`devicesModule.headings.channelsProperties.remove`),{confirmButtonText:e(`devicesModule.buttons.yes.title`),cancelButtonText:e(`devicesModule.buttons.no.title`),type:`warning`}).then(async()=>{try{await n.remove({id:i.id,channelId:i.channel}),t.success(e(`devicesModule.messages.channelsProperties.removed`,{property:i.name??e(`devicesModule.categories.channelsProperties.${i.category}`)}))}catch(n){if(n instanceof Y&&n.code===404){let n=e(`devicesModule.messages.channelsProperties.notFound`,{property:i.name??e(`devicesModule.categories.channelsProperties.${i.category}`)});t.error(n)}else if(n instanceof Y&&n.code===422)t.error(n.message);else{let n=e(`devicesModule.messages.channelsProperties.notRemoved`,{property:i.name??e(`devicesModule.categories.channelsProperties.${i.category}`)});t.error(n)}}}).catch(()=>{t.info(e(`devicesModule.messages.channelsProperties.removeCanceled`,{property:i.name??e(`devicesModule.categories.channelsProperties.${i.category}`)}))})}}},Ne=({id:e})=>{let n=C().getStore(G);return{icon:t(()=>{switch(n.findById(e)?.category){default:return`mdi:tune`}})}},Pe=w({id:d().uuid().optional(),type:d().trim().nonempty(),channel:d().uuid().optional(),category:S(_).default(_.generic),identifier:d().trim().nonempty().nullable().optional(),name:d().trim().nonempty().nullable(),permissions:B(S(y)),dataType:S(v),format:B(V([d(),V([H(),N()])])).nullable(),invalid:V([d(),H(),O(),N()]),step:V([d(),H()]).transform(e=>e===``?null:Number(e)).nullable(),enterValue:O().default(!1),value:V([d(),H(),O(),N()]).optional(),enumValues:B(d()),minValue:V([d(),H()]).transform(e=>e===``?void 0:Number(e)).optional(),maxValue:V([d(),H()]).transform(e=>e===``?void 0:Number(e)).optional()}),Fe=w({id:d().uuid(),type:d().trim().nonempty(),channel:d().uuid(),category:S(_).default(_.generic),identifier:d().trim().nonempty().nullable().optional(),name:d().trim().nonempty().nullable().optional(),permissions:B(S(y)),dataType:S(v),format:B(V([d(),V([H(),N()])])).nullable(),invalid:V([d(),H(),O(),N()]),step:V([d(),H()]).transform(e=>e===``?null:Number(e)).nullable(),enterValue:O().default(!1),value:V([d(),H(),O(),N()]).optional(),enumValues:B(d()),minValue:V([d(),H()]).transform(e=>e===``?void 0:Number(e)).optional(),maxValue:V([d(),H()]).transform(e=>e===``?void 0:Number(e)).optional()}),Ie=({type:e})=>{let{getByType:n}=re(),r=t(()=>n(e));return{plugin:r,element:t(()=>(r.value?.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`))))}},Le=({id:n,type:s,channelId:c})=>{let l=C(),{element:u}=Ie({type:s}),d=l.getStore(G),{channels:f,fetchChannels:p,areLoading:m}=oe(),{t:h}=i(),g=F(),b=x(),S=r(j.NONE),w,T=t(()=>P.channel?f.value.find(e=>e.id===P.channel)??null:null),E=t(()=>T.value?d.findForChannel(T.value.id).map(e=>e.category):[]),D=t(()=>T.value?ye[T.value.category]??null:null),O=t(()=>D.value===null?[]:Object.values(_).filter(e=>D.value?.required.includes(e)||D.value?.optional.includes(e)).filter(e=>!E.value.includes(e)).map(e=>({value:e,label:h(`devicesModule.categories.channelsProperties.${e}`)}))),k=t(()=>f.value.map(e=>({value:e.id,label:e.name}))),A=Object.values(y).map(e=>({value:e,label:h(`devicesModule.permissions.${e}`)})),N=Object.values(v).map(e=>({value:e,label:h(`devicesModule.dataTypes.${e}`)})),P=a({...U(u.value?.schemas?.channelPropertyAddFormSchema||Pe),id:n,type:s,channel:c,category:_.generic,name:``,permissions:[],dataType:v.unknown,format:null,invalid:null,step:null,enumValues:[],minValue:void 0,maxValue:void 0,enterValue:!1,value:void 0}),I=z(e(P)),L=r(void 0),R=r(!1),B=async()=>{if(L.value.clearValidate(),!await L.value.validate())throw new X(`Form not valid`);let e=c??P.channel;if(!e)throw new X(`Missing channel identifier`);if(P.name===``&&(P.name=null),!P.category)throw new X(`Missing data type definition`);P.dataType===v.enum?P.format=P.enumValues:[v.char,v.uchar,v.short,v.ushort,v.int,v.uint,v.float].includes(P.dataType)&&(P.format=[typeof P.minValue==`string`&&P.minValue!==``?Number(P.minValue):typeof P.minValue==`number`?P.minValue:null,typeof P.maxValue==`string`&&P.maxValue!==``?Number(P.maxValue):typeof P.maxValue==`number`?P.maxValue:null]),P.enterValue||delete P.value;let t=(u.value?.schemas?.channelPropertyAddFormSchema||Pe).safeParse(P);if(!t.success)throw b.error(`Schema validation failed with:`,t.error),new X(`Failed to validate create channel property model.`);S.value=j.WORKING;let r=h(`devicesModule.messages.channelsProperties.notCreated`,{device:P.name});try{await d.add({id:n,channelId:e,draft:!1,data:{...t.data,type:s}})}catch(e){throw S.value=j.ERROR,w=window.setTimeout(V,2e3),e instanceof Y&&e.code===422?g.error(e.message):g.error(r),e}return S.value=j.OK,w=window.setTimeout(V,2e3),g.success(h(`devicesModule.messages.channelsProperties.created`,{device:P.name})),`added`},V=()=>{window.clearTimeout(w),S.value=j.NONE};return p().catch(()=>{}),o(P,()=>{R.value=!(0,q.isEqual)(e(P),I)}),o(()=>P.category,t=>{let n=be(T.value?.category??M.generic,t);n&&(I.permissions=n.permissions,I.dataType=n.data_type,P.permissions=n.permissions,P.dataType=n.data_type,n.invalid!==void 0&&(I.invalid=n.invalid,P.invalid=n.invalid),n.step!==void 0&&(I.step=n.step,P.step=n.step),I.dataType===v.enum?(I.enumValues=n.format??[],I.minValue=void 0,I.maxValue=void 0,P.enumValues=n.format??[],P.minValue=void 0,P.maxValue=void 0):[v.char,v.uchar,v.short,v.ushort,v.int,v.uint,v.float].includes(P.dataType)?(I.enumValues=[],I.minValue=n.format?.[0],I.maxValue=n.format?.[1],P.enumValues=[],P.minValue=n.format?.[0],P.maxValue=n.format?.[1]):(I.enumValues=[],I.minValue=void 0,I.maxValue=void 0,P.enumValues=[],P.minValue=void 0,P.maxValue=void 0),R.value=!(0,q.isEqual)(e(P),I))},{immediate:!0}),o(()=>O.value,e=>{e.length&&e[0]&&(P.category=e[0].value,I.category=e[0].value)},{immediate:!0}),{categoriesOptions:O,channelsOptions:k,permissionsOptions:A,dataTypesOptions:N,model:P,formEl:L,formChanged:R,submit:B,clear:V,formResult:S,loadingChannels:m}},Re=({property:n,messages:s})=>{let c=C(),{element:l}=Ie({type:n.type}),u=c.getStore(G),{channels:d,fetchChannels:f,areLoading:p}=oe(),{t:m}=i(),h=F(),g=x(),b=r(j.NONE),S,w=[],T,E;n.dataType===v.enum?w=n.format?n.format.map(e=>e?.toString()||``):[]:[v.char,v.uchar,v.short,v.ushort,v.int,v.uint,v.float].includes(n.dataType)&&Array.isArray(n.format)&&n.format.length===2&&(T=n.format[0],E=n.format[1]);let D=t(()=>d.value.find(e=>e.id===n.channel)??null),O=t(()=>D.value?u.findForChannel(D.value.id).filter(e=>e.id!==n.id).map(e=>e.category):[]),k=t(()=>D.value?ye[D.value.category]??null:null),A=t(()=>k.value===null?[]:Object.values(_).filter(e=>k.value?.required.includes(e)||k.value?.optional.includes(e)).filter(e=>!O.value.includes(e)).map(e=>({value:e,label:m(`devicesModule.categories.channelsProperties.${e}`)}))),M=t(()=>d.value.map(e=>({value:e.id,label:e.name}))),N=Object.values(y).map(e=>({value:e,label:m(`devicesModule.permissions.${e}`)})),P=Object.values(v).map(e=>({value:e,label:m(`devicesModule.dataTypes.${e}`)})),I=a({...n,format:e(n.format),value:n.value?.value??null,enumValues:w,minValue:T,maxValue:E,enterValue:!1}),L=z(e(I)),R=r(void 0),B=r(!1),V=async()=>{let t=n.draft,r=s&&s.error?s.error:n.draft?m(`devicesModule.messages.channelsProperties.notCreated`,{property:n.name??m(`devicesModule.categories.channelsProperties.${n.category}`)}):m(`devicesModule.messages.channelsProperties.notEdited`,{property:n.name??m(`devicesModule.categories.channelsProperties.${n.category}`)});if(R.value.clearValidate(),!await R.value.validate())throw new X(`Form not valid`);I.name===``&&(I.name=null),n.dataType===v.enum?I.format=I.enumValues:[v.char,v.uchar,v.short,v.ushort,v.int,v.uint,v.float].includes(n.dataType)&&(I.format=[I.minValue??null,I.maxValue??null]),I.enterValue||delete I.value;let i=(l.value?.schemas?.channelPropertyEditFormSchema||Fe).safeParse(I);if(!i.success)throw g.error(`Schema validation failed with:`,i.error),new X(`Failed to validate edit channel property model.`);b.value=j.WORKING;try{await u.edit({id:n.id,channelId:n.channel,data:{...i.data,type:n.type}}),n.draft&&await u.save({id:n.id,channelId:n.channel})}catch(e){throw b.value=j.ERROR,S=window.setTimeout(H,2e3),e instanceof Y&&e.code===422?h.error(e.message):h.error(r),e}return b.value=j.OK,S=window.setTimeout(H,2e3),t?(h.success(m(s&&s.success?s.success:`devicesModule.messages.channelsProperties.created`,{property:n.name??m(`devicesModule.categories.channelsProperties.${n.category}`)})),`added`):(h.success(m(s&&s.success?s.success:`devicesModule.messages.channelsProperties.edited`,{property:n.name??m(`devicesModule.categories.channelsProperties.${n.category}`)})),B.value=!1,L=z(e(I)),`saved`)},H=()=>{window.clearTimeout(S),b.value=j.NONE};return f().catch(()=>{}),o(I,()=>{B.value=!(0,q.isEqual)(e(I),L)}),{categoriesOptions:A,channelsOptions:M,permissionsOptions:N,dataTypesOptions:P,model:I,formEl:R,formChanged:B,submit:V,clear:H,formResult:b,loadingChannels:p}},ze=({id:e})=>{let n=C().getStore(W),{data:r,semaphore:i}=D(n);return{device:t(()=>e===null?null:r.value[e]??null),isLoading:t(()=>i.value.fetching.item.includes(e)?!0:(r.value[e]??null)===null&&i.value.fetching.items),fetchDevice:async()=>{(r.value[e]??null)?.draft||await n.get({id:e})}}},$={search:void 0,types:[],state:`all`,states:[],categories:[],enabled:`all`,validation:`all`},Be={by:`name`,dir:`asc`},Ve=()=>{let e=C(),n=e.getStore(W),i=e.getStore(te),{firstLoad:a,semaphore:s}=D(n),{filters:c,sort:l,pagination:u,reset:d}=T({key:`${R}:devices:list`,filters:{schema:se,defaults:$},sort:{defaults:[Be]},pagination:{defaults:{page:1,size:10}},syncQuery:!0,version:1}),f=t(()=>c.value.search!==$.search||!(0,q.isEqual)(c.value.types,$.types)||c.value.state!==$.state||!(0,q.isEqual)(c.value.states,$.states)||!(0,q.isEqual)(c.value.categories,$.categories)||!(0,q.isEqual)(c.value.enabled,$.enabled)||c.value.validation!==$.validation),m=r(u.value.size||10),g=r(u.value.page||1),_=r(l.value.length>0?l.value[0]?.by:void 0),v=r(l.value.length>0?l.value[0]?.dir??null:null),y=e=>i.findById(e)?.isValid??null,b=t(()=>p(n.findAll().filter(e=>!e.draft&&(!c.value.search||e.id.toLowerCase().includes(c.value.search.toLowerCase())||e.name.toLowerCase().includes(c.value.search.toLowerCase())||e.description?.toLowerCase().includes(c.value.search.toLowerCase())||e.identifier?.toLowerCase().includes(c.value.search.toLowerCase()))&&(c.value.types.length===0||c.value.types.includes(e.type))&&(c.value.categories.length===0||c.value.categories.includes(e.category))&&(c.value.enabled===`all`||c.value.enabled===`enabled`&&e.enabled||c.value.enabled===`disabled`&&!e.enabled)&&(c.value.states.length===0||c.value.states.includes(e.status?.status??h.unknown))&&(c.value.state===`all`||c.value.state===`online`&&[h.ready,h.connected,h.running].includes(e.status.status)||c.value.state===`offline`&&[h.disconnected,h.stopped,h.lost,h.unknown].includes(e.status.status))&&(c.value.validation===`all`||c.value.validation===`valid`&&y(e.id)===!0||c.value.validation===`invalid`&&y(e.id)===!1)),[e=>_.value===`state`?e.status?.status??h.unknown:e[_.value]??``],[v.value===`asc`?`asc`:`desc`])),x=t(()=>{let e=(g.value-1)*m.value,t=e+m.value;return b.value.slice(e,t)}),S=async()=>{await n.fetch()},w=t(()=>s.value.fetching.items||!a.value),E=t(()=>a.value),O=t(()=>n.findAll().filter(e=>!e.draft).length);return o(()=>u.value,e=>{g.value=e.page??1,m.value=e.size??10},{deep:!0}),o(()=>g.value,e=>{u.value.page=e}),o(()=>m.value,e=>{u.value.size=e}),o(()=>v.value,e=>{_.value===void 0||e===null?l.value=[]:l.value=[{by:_.value,dir:e}]}),o(()=>_.value,e=>{e===void 0?l.value=[]:l.value=[{by:e,dir:v.value}]}),{devices:b,devicesPaginated:x,totalRows:O,areLoading:w,loaded:E,fetchDevices:S,filters:c,filtersActive:f,paginateSize:m,paginatePage:g,sortBy:_,sortDir:v,resetFilter:d}},He=()=>{let{t:e}=i(),t=F(),n=C().getStore(W);return{remove:async r=>{let i=n.findById(r);if(i===null)throw new J(`Something went wrong, device can't be loaded`);g.confirm(e(`devicesModule.texts.devices.confirmRemove`,{device:i.name}),e(`devicesModule.headings.devices.remove`),{confirmButtonText:e(`devicesModule.buttons.yes.title`),cancelButtonText:e(`devicesModule.buttons.no.title`),type:`warning`}).then(async()=>{try{await n.remove({id:i.id}),t.success(e(`devicesModule.messages.devices.removed`,{device:i.name}))}catch(n){if(n instanceof Y&&n.code===404){let n=e(`devicesModule.messages.devices.notFound`,{device:i.name});t.error(n)}else if(n instanceof Y&&n.code===422)t.error(n.message);else{let n=e(`devicesModule.messages.devices.notRemoved`,{device:i.name});t.error(n)}}}).catch(()=>{t.info(e(`devicesModule.messages.devices.removeCanceled`,{device:i.name}))})},bulkRemove:async r=>{if(r.length!==0)try{await g.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 g.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 g.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`))}}}},Ue=({id:e})=>{let n=C().getStore(W);return{icon:t(()=>{switch(n.findById(e)?.category){default:return`mdi:devices`}})}},We=({id:e})=>{let n=C(),r=n.getStore(W),i=n.getStore(K),a=e=>r.findById(e),o=e=>ve[e.category]??null;return{canAddAnotherChannel:t(()=>{let t=a(e);if(t===null)return!0;let{required:n,optional:r,multiple:s}=o(t)??{required:[],optional:[]},c=[...n,...r],l=i.findForDevice(t.id).map(e=>e.category);return c.filter(e=>!l.includes(e)).length>0||s!==void 0&&s.length>0}),missingRequiredChannels:t(()=>{let t=a(e);if(t===null)throw new J(`Something went wrong, device can't be loaded`);let{required:n}=o(t)??{required:[]},r=i.findForDevice(t.id).map(e=>e.category);return n.filter(e=>!r.includes(e))})}},Ge=w({id:d().uuid().optional(),type:d().trim().nonempty(),category:S(u).default(u.generic),identifier:d().trim().nonempty().nullable().optional(),name:d().trim().nonempty(),description:d().trim().transform(e=>e===``?null:e).nullable().optional(),enabled:O().default(!0).optional()}),Ke=w({id:d().uuid(),type:d().trim().nonempty(),category:S(u).default(u.generic),identifier:d().trim().nonempty().nullable().optional(),name:d().trim().nonempty().optional(),description:d().trim().transform(e=>e===``?null:e).nullable().optional(),enabled:O().optional(),roomId:d().uuid().nullable().optional()}),qe=()=>{let e=b(),{enabled:n}=f(),r=[`deviceAddForm`,`deviceEditForm`,`deviceWizard`],i=[`deviceAddForm`,`deviceEditForm`],a=[`deviceSchema`,`deviceAddFormSchema`,`deviceEditFormSchema`,`deviceCreateReqSchema`,`deviceUpdateReqSchema`],o=t(()=>e.getPlugins().filter(e=>e.modules===void 0||e.modules.includes(`devices-module`)?(e.elements??[]).some(e=>{if(!(e.modules===void 0||e.modules.includes(`devices-module`)))return!1;let t=r.length===0||!!e.components&&r.some(t=>e.components&&t in e.components),n=a.length===0||!!e.schemas&&a.some(t=>e.schemas&&t in e.schemas);return t||n}):!1)),s=t(()=>p(o.value.flatMap(e=>(e.elements??[]).filter(e=>e.modules===void 0||e.modules.includes(`devices-module`)).filter(e=>{let t=!!e.components&&i.some(t=>e.components&&t in e.components),n=!!e.schemas&&a.some(t=>e.schemas&&t in e.schemas);return t||n}).map(t=>({value:t.type,label:t.name?.trim()?t.name:e.name,disabled:!n(e.type)}))),[e=>e.label],[`asc`])),c=t(()=>p(o.value.filter(e=>(e.elements??[]).some(e=>(e.modules===void 0||e.modules.includes(`devices-module`))&&!!e.components?.deviceWizard)).map(e=>({value:e.type,label:e.name,description:e.description,disabled:!n(e.type)})),[e=>e.label],[`asc`])),l=e=>o.value.find(t=>t.type===e);return{plugins:o,options:s,wizardOptions:c,getByPluginType:l,getByName:l,getByType:e=>o.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 o.value){let n=(t.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`)));if(n)return n}}}},Je=({type:e})=>{let{getByType:n}=qe(),r=t(()=>n(e));return{plugin:r,element:t(()=>(r.value?.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`))))}},Ye=({id:t,type:n})=>{let s=C(),{element:c}=Je({type:n}),l=s.getStore(W),{t:d}=i(),f=F(),p=x(),m=r(j.NONE),h,g=Object.values(u).map(e=>({value:e,label:d(`devicesModule.categories.devices.${e}`)})),_=a({...U(c.value?.schemas?.deviceAddFormSchema||Ge),id:t,type:n,category:u.generic,name:``,description:``}),v=z(e(_)),y=r(void 0),b=r(!1),S=async()=>{if(y.value.clearValidate(),!await y.value.validate())throw new X(`Form not valid`);let e=(c.value?.schemas?.deviceAddFormSchema||Ge).safeParse(_);if(!e.success)throw p.error(`Schema validation failed with:`,e.error),new X(`Failed to validate create device model.`);m.value=j.WORKING;let r=d(`devicesModule.messages.devices.notCreated`,{device:_.name});try{await l.add({id:t,draft:!1,data:{...e.data,type:n}})}catch(e){throw m.value=j.ERROR,h=window.setTimeout(w,2e3),e instanceof Y&&e.code===422?f.error(e.message):f.error(r),e}return m.value=j.OK,h=window.setTimeout(w,2e3),f.success(d(`devicesModule.messages.devices.created`,{device:_.name})),`added`},w=()=>{window.clearTimeout(h),m.value=j.NONE};return o(_,()=>{b.value=!(0,q.isEqual)(e(_),v)}),{categoriesOptions:g,model:_,formEl:y,formChanged:b,submit:S,clear:w,formResult:m}},Xe=({device:t,messages:n})=>{let s=C(),{element:c}=Je({type:t.type}),l=s.getStore(W),{t:d}=i(),f=F(),p=x(),m=r(j.NONE),h,g=Object.values(u).map(e=>({value:e,label:d(`devicesModule.categories.devices.${e}`)})),_=a(t),v=z(e(_)),y=r(void 0),b=r(!1),S=async()=>{let r=t.draft,i=n&&n.error?n.error:t.draft?d(`devicesModule.messages.devices.notCreated`,{device:t.name}):d(`devicesModule.messages.devices.notEdited`,{device:t.name});if(y.value.clearValidate(),!await y.value.validate())throw new X(`Form not valid`);let a=(c.value?.schemas?.deviceEditFormSchema||Ke).safeParse(_);if(!a.success)throw p.error(`Schema validation failed with:`,a.error),new X(`Failed to validate edit device model.`);m.value=j.WORKING;try{await l.edit({id:t.id,data:{...a.data,type:t.type}}),t.draft&&await l.save({id:t.id})}catch(e){throw m.value=j.ERROR,h=window.setTimeout(w,2e3),e instanceof Y&&e.code===422?f.error(e.message):f.error(i),e}return m.value=j.OK,h=window.setTimeout(w,2e3),r?(f.success(d(n&&n.success?n.success:`devicesModule.messages.devices.created`,{device:t.name})),`added`):(f.success(d(n&&n.success?n.success:`devicesModule.messages.devices.edited`,{device:t.name})),b.value=!1,v=z(e(_)),`saved`)},w=()=>{window.clearTimeout(h),m.value=j.NONE};return o(_,()=>{b.value=!(0,q.isEqual)(e(_),v)}),{categoriesOptions:g,model:_,formEl:y,formChanged:b,submit:S,clear:w,formResult:m}},Ze=()=>{let e=C().getStore(te),{data:n,semaphore:r,firstLoad:i}=D(e);return{validation:t(()=>n.value),summary:t(()=>n.value?.summary??null),invalidDevices:t(()=>n.value?n.value.devices.filter(e=>!e.isValid):[]),isLoading:t(()=>r.value.fetching.items),isLoaded:t(()=>i.value),fetchValidation:async()=>{await e.fetch()},findById:t=>e.findById(t),isDeviceValid:t=>{let n=e.findById(t);return n?n.isValid:null},getDeviceIssueCount:t=>{let n=e.findById(t);return n?n.issues.length:0}}},Qe=({id:e})=>{let n=C().getStore(te),{semaphore:r}=D(n);return{validation:t(()=>n.findById(e)),isValid:t(()=>{let t=n.findById(e);return t?t.isValid:null}),issues:t(()=>{let t=n.findById(e);return t?t.issues:[]}),errorCount:t(()=>{let t=n.findById(e);return t?t.issues.filter(e=>e.severity===`error`).length:0}),warningCount:t(()=>{let t=n.findById(e);return t?t.issues.filter(e=>e.severity===`warning`).length:0}),isLoading:t(()=>r.value.fetching.item.includes(e)),fetchValidation:async()=>{await n.get({id:e})}}},$e=300,et=1e4,tt=({id:e})=>{let i=C(),a=i.getStore(W),s=i.getStore(K),c=i.getStore(G),{data:l,semaphore:u}=D(a),{data:d,semaphore:f,firstLoad:p}=D(s),{semaphore:m,firstLoad:h}=D(c),{sendCommand:g}=A(),_={},v={},b={},x=r({}),S=r({}),w=t(()=>e===null?null:l.value[e]??null),T=t(()=>Object.values(d.value).filter(t=>t.device===e&&t.category!==M.device_information)),E=t(()=>T.value.filter(e=>c.findForChannel(e.id).some(e=>e.permissions.includes(y.rw)||e.permissions.includes(y.wo)))),O=t(()=>E.value.length>0),k=e=>c.findForChannel(e),j=e=>e.permissions.includes(y.rw)||e.permissions.includes(y.wo),N=e=>{let t=x.value[e];return t===void 0?c.findById(e)?.value?.value??null:t},P=e=>S.value[e]??!1,F=(e,t)=>{if(t!==void 0){let n=x.value[e];if(n!==t&&String(n)!==String(t))return}delete x.value[e],b[e]&&(clearTimeout(b[e]),delete b[e])},I=(e,t)=>{b[e]&&clearTimeout(b[e]),b[e]=setTimeout(()=>{let n=x.value[e];(n===t||String(n)===String(t))&&delete x.value[e],delete b[e]},et)},R=async(t,n,r)=>c.findById(n)?(_[n]&&(clearTimeout(_[n]),delete _[n],v[n]&&(v[n](!1),delete v[n])),x.value[n]=r,new Promise(i=>{v[n]=i;let a=setTimeout(async()=>{delete v[n],S.value[n]=!0;try{await g(L.CHANNEL_PROPERTY_SET,{context:{origin:`admin`},properties:[{device:e,channel:t,property:n,value:r}]},`DevicesModule.Internal.SetPropertyValue`)===!0?(I(n,r),i(!0)):(F(n,r),i(!1))}catch{F(n,r),i(!1)}finally{S.value[n]=!1,_[n]===a&&delete _[n]}},$e);_[n]=a})):!1,z=async()=>{(e in l.value?l.value[e]:null)?.draft||await a.get({id:e})},B=async()=>{await s.fetch({deviceId:e})},V=async()=>{let t=Object.values(d.value).filter(t=>t.device===e);for(let e of t)await c.fetch({channelId:e.id})},H=t(()=>{if(u.value.fetching.item.includes(e)||f.value.fetching.items.includes(e))return!0;for(let e of T.value)if(m.value.fetching.items.includes(e.id))return!0;return!1}),U=t(()=>p.value.includes(e)),ee=t(()=>{if(!U.value)return!1;for(let e of T.value)if(!h.value.includes(e.id))return!1;return!0});return o(()=>{let e={};for(let t of Object.keys(x.value)){let n=c.findById(t);n&&(e[t]=n.value?.value??null)}return e},e=>{for(let[t,n]of Object.entries(x.value)){let r=e[t];(r===n||String(r)===String(n))&&F(t)}},{deep:!0}),n(()=>{for(let e of Object.keys(_))clearTimeout(_[e]),delete _[e],v[e]&&(v[e](!1),delete v[e]);for(let e of Object.keys(b))clearTimeout(b[e]),delete b[e]}),{device:w,channels:T,controllableChannels:E,hasControllableProperties:O,isLoading:H,areChannelsLoaded:U,arePropertiesLoaded:ee,fetchDevice:z,fetchChannels:B,fetchProperties:V,getPropertiesForChannel:k,isPropertyWritable:j,getPropertyValue:N,isPropertyLoading:P,setPropertyValue:R}},nt=({deviceId:e})=>{let n=C().getStore(ee),{firstLoad:r,semaphore:i}=D(n);return{controls:t(()=>n.findForDevice(e)),areLoading:t(()=>i.value.fetching.items.includes(e)),loaded:t(()=>r.value.includes(e)),fetchControls:async()=>n.fetch({deviceId:e})}},rt=e=>{let n=P(),i=x(),a=r({}),u=r(!1),d=r(!1),f=r(!1),p=r(void 0),m=r(!1),h=null,g=0,_=t(()=>Object.values(a.value).sort((e,t)=>new Date(t.ts).getTime()-new Date(e.ts).getTime())),v=t(()=>{let e=[I.warn,I.error,I.fatal,I.fail];return _.value.filter(t=>e.includes(t.type))}),y=t(()=>v.value.length),b=t(()=>y.value>0),S=async()=>{let t=s(e.deviceId);h=t,g++;let r=g;d.value=!0;try{let{data:e,error:o}=await n.client.GET(`/${c}/${k}/logs`,{params:{query:{resource:t,limit:50}}});if(h!==t||g!==r)return;if(e!==void 0){let t=Object.fromEntries(e.data.map(e=>{let t=ne(e);return[t.id,t]}));a.value=t,f.value=!0,u.value=e.metadata.has_more,p.value=e.metadata.next_cursor}else o&&i.error(`Failed to fetch device logs:`,o)}catch(e){h===t&&g===r&&i.error(`Error fetching device logs:`,e)}finally{h===t&&g===r&&(d.value=!1)}},C=async()=>{if(d.value||!u.value||!p.value)return;let t=s(e.deviceId),r=p.value,o=g;d.value=!0;try{let{data:e,error:s}=await n.client.GET(`/${c}/${k}/logs`,{params:{query:{resource:t,after_id:r,limit:50}}});if(h!==t||g!==o)return;if(e!==void 0){let t=Object.fromEntries(e.data.map(e=>{let t=ne(e);return[t.id,t]}));a.value={...a.value,...t},u.value=e.metadata.has_more,p.value=e.metadata.next_cursor}else s&&i.error(`Failed to load more device logs:`,s)}catch(e){h===t&&g===o&&i.error(`Error loading more device logs:`,e)}finally{h===t&&g===o&&(d.value=!1)}},w=async()=>{a.value={},p.value=void 0,u.value=!1,f.value=!1,await S()},T=null;return o(()=>m.value,e=>{T&&=(clearInterval(T),null),e&&(T=setInterval(()=>{d.value||S()},3e3))}),l(()=>{T&&=(clearInterval(T),null)}),o(()=>s(e.deviceId),()=>{w()}),{logs:_,alertLogs:v,alertCount:y,hasAlerts:b,hasMore:u,isLoading:d,loaded:f,live:m,fetchLogs:S,loadMoreLogs:C,refreshLogs:w}};export{_e as A,J as B,je as C,Ee as D,De as E,oe as F,ae as I,ie as L,pe as M,fe as N,Te as O,de as P,re as R,Me as S,Oe as T,X as V,Re as _,Ze as a,Fe as b,Je as c,Ke as d,We as f,ze as g,Ve as h,Qe as i,be as j,xe as k,qe as l,He as m,nt as n,Xe as o,Ue as p,tt as r,Ye as s,rt as t,Ge as u,Le as v,ke as w,Ne as x,Pe as y,Y as z};
|
|
1
|
+
import"./rolldown-runtime-QTnfLwEv.js";import{Ei as e,Er as t,Gr as n,Si as r,T as i,bi as a,ci as o,ki as s,n as c,yi as l}from"./icon-with-child-CgZMNB3F.js";import{Ar as u,Cr as d,Dn as f,Fn as p,Kn as m,Kr as h,Mi as g,Mr as _,Nr as v,Pr as y,T as b,_ as x,_r as S,b as C,br as w,c as T,cr as E,do as D,dr as O,fn as k,i as A,in as j,jr as M,lr as N,m as P,p as F,ri as I,rn as L,tn as R,u as z,ur as B,wr as V,yr as H}from"./common-CYlvhyJx.js";import{t as U}from"./schemas.utils-DfsvrMGr.js";import{a as W,i as ee,n as G,o as te,r as K}from"./keys-DghNVBR5.js";import{n as ne}from"./logs-entries.transformers-D-IYkG06.js";var q=m(),J=class extends Error{exception;constructor(e,t=null){super(e),this.name=`DevicesException`,this.exception=t}},Y=class extends J{code;constructor(e,t=null,n=null){super(e,n),this.name=`DevicesApiException`,this.code=t}},X=class extends J{constructor(e,t=null){super(e,t),this.name=`DevicesValidationException`}},re=()=>{let e=b(),{enabled:n}=f(),r=[`channelPropertyAddForm`,`channelPropertyEditForm`],i=[`channelPropertySchema`,`channelPropertyAddFormSchema`,`channelPropertyEditFormSchema`,`channelPropertyCreateReqSchema`,`channelPropertyUpdateReqSchema`],a=t(()=>e.getPlugins().filter(e=>e.modules===void 0||e.modules.includes(`devices-module`)?(e.elements??[]).some(e=>{if(!(e.modules===void 0||e.modules.includes(`devices-module`)))return!1;let t=r.length===0||!!e.components&&r.some(t=>e.components&&t in e.components),n=i.length===0||!!e.schemas&&i.some(t=>e.schemas&&t in e.schemas);return t||n}):!1));return{plugins:a,options:t(()=>p(a.value.flatMap(e=>(e.elements??[]).filter(e=>e.modules===void 0||e.modules.includes(`devices-module`)).map(t=>({value:t.type,label:t.name?.trim()?t.name:e.name,disabled:!n(e.type)}))),[e=>e.label],[`asc`])),getByName:e=>a.value.find(t=>t.type===e),getByType:e=>a.value.find(t=>(t.elements??[]).some(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`)))),getElement:e=>{for(let t of a.value){let n=(t.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`)));if(n)return n}}}},ie=()=>{let e=b(),{enabled:n}=f(),r=[`channelAddForm`,`channelEditForm`],i=[`channelSchema`,`channelAddFormSchema`,`channelEditFormSchema`,`channelCreateReqSchema`,`channelUpdateReqSchema`],a=t(()=>e.getPlugins().filter(e=>e.modules===void 0||e.modules.includes(`devices-module`)?(e.elements??[]).some(e=>{if(!(e.modules===void 0||e.modules.includes(`devices-module`)))return!1;let t=r.length===0||!!e.components&&r.some(t=>e.components&&t in e.components),n=i.length===0||!!e.schemas&&i.some(t=>e.schemas&&t in e.schemas);return t||n}):!1));return{plugins:a,options:t(()=>p(a.value.flatMap(e=>(e.elements??[]).filter(e=>e.modules===void 0||e.modules.includes(`devices-module`)).map(t=>({value:t.type,label:t.name?.trim()?t.name:e.name,disabled:!n(e.type)}))),[e=>e.label],[`asc`])),getByName:e=>a.value.find(t=>t.type===e),getByType:e=>a.value.find(t=>(t.elements??[]).some(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`)))),getElement:e=>{for(let t of a.value){let n=(t.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`)));if(n)return n}}}},ae=({id:e})=>{let n=C().getStore(K),{data:r,semaphore:i}=D(n);return{channel:t(()=>e===null?null:r.value[e]??null),isLoading:t(()=>i.value.fetching.item.includes(e)?!0:(r.value[e]??null)===null&&i.value.fetching.items.includes(`all`)),fetchChannel:async()=>{(r.value[e]??null)?.draft||await n.get({id:e})}}},oe=(e={})=>{let{deviceId:n}=e,r=C().getStore(K),{firstLoad:i,semaphore:a}=D(r),o=n===void 0?void 0:typeof n==`string`?t(()=>n):n;return{channels:t(()=>r.findAll().filter(e=>!o?.value||e.device===o.value)),areLoading:t(()=>a.value.fetching.items.includes(o?.value??`all`)?!0:!i.value.includes(o?.value??`all`)&&a.value.fetching.items.includes(o?.value??`all`)),loaded:t(()=>i.value.includes(o?.value??`all`)),fetchChannels:async()=>{await r.fetch({deviceId:o?.value})}}},se=w({search:d().optional(),types:B(d()),state:E([`all`,`offline`,`online`]).default(`all`),states:B(S(h)),categories:B(S(u)),enabled:E([`all`,`enabled`,`disabled`]).default(`all`),validation:E([`all`,`valid`,`invalid`]).default(`all`)}),ce=w({search:d().optional(),devices:B(d()),categories:B(S(M))}),le=w({search:d().optional(),channels:B(d()),categories:B(S(_)),permissions:B(S(y)),dataTypes:B(S(v))}),Z={search:void 0,devices:[],categories:[]},ue={by:`name`,dir:`asc`},de=(e={})=>{let{deviceId:n}=e,i=C().getStore(K),{firstLoad:a,semaphore:s}=D(i),{filters:c,sort:l,pagination:u,reset:d}=T({key:`${R}:channels:list`,filters:{schema:ce,defaults:Z},sort:{defaults:[ue]},pagination:{defaults:{page:1,size:10}},syncQuery:!0,version:1}),f=t(()=>c.value.search!==Z.search||!(0,q.isEqual)(c.value.devices,Z.devices)||!(0,q.isEqual)(c.value.categories,Z.categories)),m=r(u.value.size||10),h=r(u.value.page||1),g=r(l.value.length>0?l.value[0]?.by:void 0),_=r(l.value.length>0?l.value[0]?.dir??null:null),v=t(()=>p(i.findAll().filter(e=>!n||e.device===n).filter(e=>!e.draft&&(!c.value.search||e.id.toLowerCase().includes(c.value.search.toLowerCase())||e.name.toLowerCase().includes(c.value.search.toLowerCase())||e.description?.toLowerCase().includes(c.value.search.toLowerCase())||e.identifier?.toLowerCase().includes(c.value.search.toLowerCase()))&&(c.value.categories.length===0||c.value.categories.includes(e.category))&&(c.value.devices.length===0||c.value.devices.includes(e.device))),[e=>e[g.value]??``],[_.value===`asc`?`asc`:`desc`])),y=t(()=>{let e=(h.value-1)*m.value,t=e+m.value;return v.value.slice(e,t)}),b=async()=>{await i.fetch({deviceId:n})},x=t(()=>s.value.fetching.items.includes(n??`all`)?!0:!a.value.includes(n??`all`)&&s.value.fetching.items.includes(n??`all`)),S=t(()=>a.value.includes(n??`all`)),w=t(()=>i.findAll().filter(e=>!n||e.device===n).filter(e=>!e.draft).length);return o(()=>u.value,e=>{h.value=e.page??1,m.value=e.size??10},{deep:!0}),o(()=>h.value,e=>{u.value.page=e}),o(()=>m.value,e=>{u.value.size=e}),o(()=>_.value,e=>{g.value===void 0||e===null?l.value=[]:l.value=[{by:g.value,dir:e}]}),o(()=>g.value,e=>{e===void 0?l.value=[]:l.value=[{by:e,dir:_.value}]}),{channels:v,channelsPaginated:y,totalRows:w,areLoading:x,loaded:S,fetchChannels:b,filters:c,filtersActive:f,paginateSize:m,paginatePage:h,sortBy:g,sortDir:_,resetFilter:d}},fe=()=>{let{t:e}=i(),t=F(),n=C().getStore(K),r=e=>n.findById(e);return{remove:async i=>{let a=r(i);if(a===null)throw new J(`Something went wrong, channel can't be loaded`);g.confirm(e(`devicesModule.texts.channels.confirmRemove`,{channel:a.name}),e(`devicesModule.headings.channels.remove`),{confirmButtonText:e(`devicesModule.buttons.yes.title`),cancelButtonText:e(`devicesModule.buttons.no.title`),type:`warning`}).then(async()=>{try{await n.remove({id:a.id}),t.success(e(`devicesModule.messages.channels.removed`,{channel:a.name}))}catch(n){if(n instanceof Y&&n.code===404){let n=e(`devicesModule.messages.channels.notFound`,{channel:a.name});t.error(n)}else if(n instanceof Y&&n.code===422)t.error(n.message);else{let n=e(`devicesModule.messages.channels.notRemoved`,{channel:a.name});t.error(n)}}}).catch(()=>{t.info(e(`devicesModule.messages.channels.removeCanceled`,{channel:a.name}))})}}},pe=({id:e})=>{let n=C().getStore(K);return{icon:t(()=>{switch(n.findById(e)?.category){default:return`mdi:chip`}})}},me={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}}}},he={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}}}},ge={[u.generic]:[],[u.air_conditioner]:[M.cooler,M.heater,M.fan,M.temperature,M.humidity,M.electrical_energy,M.electrical_power,M.leak,M.device_information],[u.air_dehumidifier]:[M.cooler,M.fan,M.temperature,M.humidity,M.electrical_energy,M.electrical_power,M.leak,M.device_information],[u.air_humidifier]:[M.humidity,M.switcher,M.temperature,M.fan,M.electrical_energy,M.electrical_power,M.leak,M.device_information],[u.air_purifier]:[M.fan,M.air_particulate,M.carbon_dioxide,M.carbon_monoxide,M.humidity,M.leak,M.nitrogen_dioxide,M.ozone,M.pressure,M.sulphur_dioxide,M.temperature,M.volatile_organic_compounds,M.electrical_energy,M.electrical_power,M.device_information],[u.alarm]:[M.alarm,M.device_information],[u.camera]:[M.camera,M.motion,M.microphone,M.speaker,M.contact,M.light,M.temperature,M.humidity,M.battery,M.device_information],[u.door]:[M.door,M.lock,M.contact,M.motion,M.battery,M.device_information],[u.doorbell]:[M.doorbell,M.camera,M.lock,M.motion,M.microphone,M.speaker,M.contact,M.light,M.battery,M.device_information],[u.fan]:[M.fan,M.electrical_energy,M.electrical_power,M.device_information],[u.heating_unit]:[M.heater,M.temperature,M.humidity,M.electrical_energy,M.electrical_power,M.device_information],[u.lighting]:[M.light,M.illuminance,M.electrical_energy,M.electrical_power,M.device_information],[u.lock]:[M.lock,M.contact,M.motion,M.battery,M.device_information],[u.media]:[M.media_input,M.media_playback,M.microphone,M.speaker,M.device_information],[u.av_receiver]:[M.media_input,M.media_playback,M.speaker,M.device_information],[u.game_console]:[M.media_playback,M.media_input,M.device_information],[u.projector]:[M.projector,M.speaker,M.media_playback,M.media_input,M.device_information],[u.set_top_box]:[M.media_input,M.media_playback,M.device_information],[u.streaming_service]:[M.media_playback,M.device_information],[u.outlet]:[M.outlet,M.electrical_energy,M.electrical_power,M.device_information],[u.pump]:[M.flow,M.switcher,M.leak,M.pressure,M.electrical_energy,M.electrical_power,M.device_information],[u.robot_vacuum]:[M.robot_vacuum,M.electrical_energy,M.electrical_power,M.leak,M.battery,M.device_information],[u.sensor]:[M.air_particulate,M.battery,M.carbon_dioxide,M.carbon_monoxide,M.contact,M.humidity,M.illuminance,M.leak,M.motion,M.nitrogen_dioxide,M.occupancy,M.ozone,M.pressure,M.smoke,M.sulphur_dioxide,M.temperature,M.volatile_organic_compounds,M.device_information],[u.speaker]:[M.speaker,M.media_input,M.media_playback,M.electrical_energy,M.electrical_power,M.device_information],[u.sprinkler]:[M.valve,M.flow,M.pressure,M.leak,M.humidity,M.electrical_energy,M.electrical_power,M.device_information],[u.switcher]:[M.switcher,M.electrical_energy,M.electrical_power,M.device_information],[u.television]:[M.television,M.speaker,M.media_playback,M.media_input,M.device_information],[u.terminal]:[M.button,M.indicator,M.buzzer,M.illuminance,M.accelerometer,M.temperature,M.contact,M.switcher,M.device_information],[u.thermostat]:[M.thermostat,M.cooler,M.heater,M.temperature,M.humidity,M.contact,M.electrical_energy,M.electrical_power,M.device_information],[u.valve]:[M.valve,M.pressure,M.flow,M.leak,M.battery,M.electrical_energy,M.electrical_power,M.device_information],[u.water_heater]:[M.heater,M.temperature,M.leak,M.electrical_energy,M.electrical_power,M.device_information],[u.window_covering]:[M.window_covering,M.battery,M.electrical_energy,M.electrical_power,M.device_information]},_e=Object.fromEntries(Object.entries(he).map(([e,t])=>{let n=Object.values(t.channels).map(e=>e.category),r=ge[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]})),ve=Object.fromEntries(Object.entries(he).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)}])),ye=Object.fromEntries(Object.entries(me).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)}])),be=(e,t)=>{let n=me[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}},xe=({id:e})=>{let n=C(),r=n.getStore(K),i=n.getStore(G),a=e=>r.findById(e),o=e=>ye[e.category]??null;return{canAddAnotherProperty:t(()=>{let t=a(e);if(t===null)return!0;let{required:n,optional:r}=o(t)??{required:[],optional:[]},s=[...n,...r],c=i.findForChannel(t.id).map(e=>e.category);return s.filter(e=>!c.includes(e)).length>0}),missingRequiredProperties:t(()=>{let t=a(e);if(t===null)throw new J(`Something went wrong, channel can't be loaded`);let{required:n}=o(t)??{required:[]},r=i.findForChannel(t.id).map(e=>e.category);return n.filter(e=>!r.includes(e))})}},Se=w({id:d().uuid().optional(),type:d().trim().nonempty(),device:d().uuid().optional(),category:S(M).default(M.generic),identifier:d().trim().nonempty().nullable().optional(),name:d().trim().nonempty(),description:d().trim().transform(e=>e===``?null:e).nullable().optional()}),Ce=w({id:d().uuid(),type:d().trim().nonempty(),device:d().uuid(),category:S(M).default(M.generic),identifier:d().trim().nonempty().nullable().optional(),name:d().trim().nonempty().optional(),description:d().trim().transform(e=>e===``?null:e).nullable().optional()}),we=({type:e})=>{let{getByType:n}=ie(),r=t(()=>n(e));return{plugin:r,element:t(()=>(r.value?.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`))))}},Te=()=>{let e=C().getStore(W),{firstLoad:n,semaphore:r}=D(e);return{devices:t(()=>e.findAll().filter(e=>!e.draft)),areLoading:t(()=>r.value.fetching.items),loaded:t(()=>n.value),fetchDevices:async()=>{await e.fetch()}}},Ee=({id:n,type:s,deviceId:c})=>{let l=C(),{element:u}=we({type:s}),d=l.getStore(K),{devices:f,fetchDevices:p,areLoading:m}=Te(),{t:h}=i(),g=F(),_=x(),v=r(j.NONE),y,b=t(()=>D.device?f.value.find(e=>e.id===D.device)??null:null),S=t(()=>b.value?d.findForDevice(b.value.id).map(e=>e.category):[]),w=t(()=>b.value?ve[b.value.category]??null:null),T=t(()=>w.value===null?[]:Object.values(M).filter(e=>w.value?.required.includes(e)||w.value?.optional.includes(e)).filter(e=>!S.value.includes(e)||w.value?.multiple?.includes(e)).map(e=>({value:e,label:h(`devicesModule.categories.channels.${e}`)}))),E=t(()=>f.value.filter(e=>e.type===s).map(e=>({value:e.id,label:e.name}))),D=a({...U(u.value?.schemas?.channelAddFormSchema||Se),id:n,type:s,device:c,category:M.generic,name:``,description:``}),O=z(e(D)),k=r(void 0),A=r(!1),N=async()=>{if(k.value.clearValidate(),!await k.value.validate())throw new X(`Form not valid`);let e=c??D.device;if(!e)throw new X(`Missing device identifier`);if(!D.category)throw new X(`Missing data type definition`);let t=(u.value?.schemas?.channelAddFormSchema||Se).safeParse(D);if(!t.success)throw _.error(`Schema validation failed with:`,t.error),new X(`Failed to validate create channel model.`);v.value=j.WORKING;let r=h(`devicesModule.messages.channels.notCreated`,{device:D.name});try{await d.add({id:n,deviceId:e,draft:!1,data:{...t.data,type:s}})}catch(e){throw v.value=j.ERROR,y=window.setTimeout(P,2e3),e instanceof Y&&e.code===422?g.error(e.message):g.error(r),e}return v.value=j.OK,y=window.setTimeout(P,2e3),g.success(h(`devicesModule.messages.channels.created`,{device:D.name})),`added`},P=()=>{window.clearTimeout(y),v.value=j.NONE};return p().catch(()=>{}),o(D,()=>{A.value=!(0,q.isEqual)(e(D),O)}),o(()=>T.value,e=>{e.length&&e[0]&&(D.category=e[0].value,O.category=e[0].value)},{immediate:!0}),{categoriesOptions:T,devicesOptions:E,model:D,formEl:k,formChanged:A,submit:N,clear:P,formResult:v,loadingDevices:m}},De=({channel:n,messages:s})=>{let c=C(),{element:l}=we({type:n.type}),u=c.getStore(K),{devices:d,fetchDevices:f,areLoading:p}=Te(),{t:m}=i(),h=F(),g=x(),_=r(j.NONE),v,y=t(()=>d.value.find(e=>e.id===n.device)??null),b=t(()=>y.value?u.findForDevice(y.value.id).filter(e=>e.id!==n.id).map(e=>e.category):[]),S=t(()=>y.value?ve[y.value.category]??null:null),w=t(()=>S.value===null?[]:Object.values(M).filter(e=>S.value?.required.includes(e)||S.value?.optional.includes(e)).filter(e=>!b.value.includes(e)||S.value?.multiple?.includes(e)).map(e=>({value:e,label:m(`devicesModule.categories.channels.${e}`)}))),T=t(()=>d.value.map(e=>({value:e.id,label:e.name}))),E=a(n),D=z(e(E)),O=r(void 0),k=r(!1),A=async()=>{let t=n.draft,r=s&&s.error?s.error:n.draft?m(`devicesModule.messages.channels.notCreated`,{channel:n.name}):m(`devicesModule.messages.channels.notEdited`,{channel:n.name});if(O.value.clearValidate(),!await O.value.validate())throw new X(`Form not valid`);let i=(l.value?.schemas?.channelEditFormSchema||Ce).safeParse(E);if(!i.success)throw g.error(`Schema validation failed with:`,i.error),new X(`Failed to validate edit channel model.`);_.value=j.WORKING;try{await u.edit({id:n.id,data:{...i.data,type:n.type}}),n.draft&&await u.save({id:n.id,deviceId:n.device})}catch(e){throw _.value=j.ERROR,v=window.setTimeout(N,2e3),e instanceof Y&&e.code===422?h.error(e.message):h.error(r),e}return _.value=j.OK,v=window.setTimeout(N,2e3),t?(h.success(m(s&&s.success?s.success:`devicesModule.messages.channels.created`,{channel:n.name})),`added`):(h.success(m(s&&s.success?s.success:`devicesModule.messages.channels.edited`,{channel:n.name})),k.value=!1,D=z(e(E)),`saved`)},N=()=>{window.clearTimeout(v),_.value=j.NONE};return f().catch(()=>{}),o(E,()=>{k.value=!(0,q.isEqual)(e(E),D)}),{categoriesOptions:w,devicesOptions:T,model:E,formEl:O,formChanged:k,submit:A,clear:N,formResult:_,loadingDevices:p}},Oe=({channelId:e,id:n})=>{let r=C().getStore(G),{data:i,semaphore:a}=D(r);return{property:t(()=>n===null?null:i.value[n]??null),isLoading:t(()=>a.value.fetching.item.includes(n)?!0:(i.value[n]??null)===null?a.value.fetching.items.includes(e)||a.value.fetching.items.includes(`all`):!1),fetchProperty:async()=>{(i.value[n]??null)?.draft||await r.get({id:n,channelId:e})}}},ke=({channelId:e})=>{let n=C().getStore(G),{firstLoad:r,semaphore:i}=D(n),a=typeof e==`string`?t(()=>e):e;return{properties:t(()=>n.findAll().filter(e=>!a?.value||e.channel===a.value)),areLoading:t(()=>a.value?i.value.fetching.items.includes(a.value)?!0:!r.value.includes(a.value)&&i.value.fetching.items.includes(a.value):!1),loaded:t(()=>a.value?r.value.includes(a.value):!1),fetchProperties:async()=>{a.value&&await n.fetch({channelId:a.value})}}},Q={search:void 0,channels:[],categories:[],permissions:[],dataTypes:[]},Ae={by:`category`,dir:`asc`},je=({channelId:e,key:n=`list`})=>{let i=C().getStore(G),{firstLoad:a,semaphore:s}=D(i),{filters:c,sort:l,pagination:u,reset:d}=T({key:`${R}:channels-properties:${n}`,filters:{schema:le,defaults:Q},sort:{defaults:[Ae]},pagination:{defaults:{page:1,size:10}},syncQuery:!0,version:1}),f=t(()=>c.value.search!==Q.search||!(0,q.isEqual)(c.value.channels,Q.channels)||!(0,q.isEqual)(c.value.categories,Q.categories)||!(0,q.isEqual)(c.value.permissions,Q.permissions)||!(0,q.isEqual)(c.value.dataTypes,Q.dataTypes)),m=r(u.value.size||10),h=r(u.value.page||1),g=r(l.value.length>0?l.value[0]?.by:void 0),_=r(l.value.length>0?l.value[0]?.dir??null:null),v=t(()=>p(i.findAll().filter(t=>!e||t.channel===e).filter(e=>!e.draft&&(!c.value.search||e.id?.toLowerCase().includes(c.value.search.toLowerCase())||e.name?.toLowerCase().includes(c.value.search.toLowerCase())||e.identifier?.toLowerCase().includes(c.value.search.toLowerCase()))&&(c.value.categories.length===0||c.value.categories.includes(e.category))&&(c.value.dataTypes.length===0||c.value.dataTypes.includes(e.dataType))&&(c.value.permissions.length===0||e.permissions.some(e=>c.value.permissions.includes(e)))),[e=>e[g.value]??``],[_.value===`asc`?`asc`:`desc`])),y=t(()=>{let e=(h.value-1)*m.value,t=e+m.value;return v.value.slice(e,t)}),b=async()=>{await i.fetch({channelId:e})},x=t(()=>s.value.fetching.items.includes(e)?!0:!a.value.includes(e)&&s.value.fetching.items.includes(e)),S=t(()=>a.value.includes(e)),w=t(()=>i.findAll().filter(t=>!e||t.channel===e).filter(e=>!e.draft).length);return o(()=>u.value,e=>{h.value=e.page??1,m.value=e.size??10},{deep:!0}),o(()=>h.value,e=>{u.value.page=e}),o(()=>m.value,e=>{u.value.size=e}),o(()=>_.value,e=>{g.value===void 0||e===null?l.value=[]:l.value=[{by:g.value,dir:e}]}),o(()=>g.value,e=>{e===void 0?l.value=[]:l.value=[{by:e,dir:_.value}]}),{properties:v,propertiesPaginated:y,totalRows:w,areLoading:x,loaded:S,fetchProperties:b,filters:c,filtersActive:f,paginateSize:m,paginatePage:h,sortBy:g,sortDir:_,resetFilter:d}},Me=()=>{let{t:e}=i(),t=F(),n=C().getStore(G);return{remove:async r=>{let i=n.findById(r);if(i===null)throw new J(`Something went wrong, channel property can't be loaded`);g.confirm(e(`devicesModule.texts.channelsProperties.confirmRemove`,{property:i.name??e(`devicesModule.categories.channelsProperties.${i.category}`)}),e(`devicesModule.headings.channelsProperties.remove`),{confirmButtonText:e(`devicesModule.buttons.yes.title`),cancelButtonText:e(`devicesModule.buttons.no.title`),type:`warning`}).then(async()=>{try{await n.remove({id:i.id,channelId:i.channel}),t.success(e(`devicesModule.messages.channelsProperties.removed`,{property:i.name??e(`devicesModule.categories.channelsProperties.${i.category}`)}))}catch(n){if(n instanceof Y&&n.code===404){let n=e(`devicesModule.messages.channelsProperties.notFound`,{property:i.name??e(`devicesModule.categories.channelsProperties.${i.category}`)});t.error(n)}else if(n instanceof Y&&n.code===422)t.error(n.message);else{let n=e(`devicesModule.messages.channelsProperties.notRemoved`,{property:i.name??e(`devicesModule.categories.channelsProperties.${i.category}`)});t.error(n)}}}).catch(()=>{t.info(e(`devicesModule.messages.channelsProperties.removeCanceled`,{property:i.name??e(`devicesModule.categories.channelsProperties.${i.category}`)}))})}}},Ne=({id:e})=>{let n=C().getStore(G);return{icon:t(()=>{switch(n.findById(e)?.category){default:return`mdi:tune`}})}},Pe=w({id:d().uuid().optional(),type:d().trim().nonempty(),channel:d().uuid().optional(),category:S(_).default(_.generic),identifier:d().trim().nonempty().nullable().optional(),name:d().trim().nonempty().nullable(),permissions:B(S(y)),dataType:S(v),format:B(V([d(),V([H(),N()])])).nullable(),invalid:V([d(),H(),O(),N()]),step:V([d(),H()]).transform(e=>e===``?null:Number(e)).nullable(),enterValue:O().default(!1),value:V([d(),H(),O(),N()]).optional(),enumValues:B(d()),minValue:V([d(),H()]).transform(e=>e===``?void 0:Number(e)).optional(),maxValue:V([d(),H()]).transform(e=>e===``?void 0:Number(e)).optional()}),Fe=w({id:d().uuid(),type:d().trim().nonempty(),channel:d().uuid(),category:S(_).default(_.generic),identifier:d().trim().nonempty().nullable().optional(),name:d().trim().nonempty().nullable().optional(),permissions:B(S(y)),dataType:S(v),format:B(V([d(),V([H(),N()])])).nullable(),invalid:V([d(),H(),O(),N()]),step:V([d(),H()]).transform(e=>e===``?null:Number(e)).nullable(),enterValue:O().default(!1),value:V([d(),H(),O(),N()]).optional(),enumValues:B(d()),minValue:V([d(),H()]).transform(e=>e===``?void 0:Number(e)).optional(),maxValue:V([d(),H()]).transform(e=>e===``?void 0:Number(e)).optional()}),Ie=({type:e})=>{let{getByType:n}=re(),r=t(()=>n(e));return{plugin:r,element:t(()=>(r.value?.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`))))}},Le=({id:n,type:s,channelId:c})=>{let l=C(),{element:u}=Ie({type:s}),d=l.getStore(G),{channels:f,fetchChannels:p,areLoading:m}=oe(),{t:h}=i(),g=F(),b=x(),S=r(j.NONE),w,T=t(()=>P.channel?f.value.find(e=>e.id===P.channel)??null:null),E=t(()=>T.value?d.findForChannel(T.value.id).map(e=>e.category):[]),D=t(()=>T.value?ye[T.value.category]??null:null),O=t(()=>D.value===null?[]:Object.values(_).filter(e=>D.value?.required.includes(e)||D.value?.optional.includes(e)).filter(e=>!E.value.includes(e)).map(e=>({value:e,label:h(`devicesModule.categories.channelsProperties.${e}`)}))),k=t(()=>f.value.map(e=>({value:e.id,label:e.name}))),A=Object.values(y).map(e=>({value:e,label:h(`devicesModule.permissions.${e}`)})),N=Object.values(v).map(e=>({value:e,label:h(`devicesModule.dataTypes.${e}`)})),P=a({...U(u.value?.schemas?.channelPropertyAddFormSchema||Pe),id:n,type:s,channel:c,category:_.generic,name:``,permissions:[],dataType:v.unknown,format:null,invalid:null,step:null,enumValues:[],minValue:void 0,maxValue:void 0,enterValue:!1,value:void 0}),I=z(e(P)),L=r(void 0),R=r(!1),B=async()=>{if(L.value.clearValidate(),!await L.value.validate())throw new X(`Form not valid`);let e=c??P.channel;if(!e)throw new X(`Missing channel identifier`);if(P.name===``&&(P.name=null),!P.category)throw new X(`Missing data type definition`);P.dataType===v.enum?P.format=P.enumValues:[v.char,v.uchar,v.short,v.ushort,v.int,v.uint,v.float].includes(P.dataType)&&(P.format=[typeof P.minValue==`string`&&P.minValue!==``?Number(P.minValue):typeof P.minValue==`number`?P.minValue:null,typeof P.maxValue==`string`&&P.maxValue!==``?Number(P.maxValue):typeof P.maxValue==`number`?P.maxValue:null]),P.enterValue||delete P.value;let t=(u.value?.schemas?.channelPropertyAddFormSchema||Pe).safeParse(P);if(!t.success)throw b.error(`Schema validation failed with:`,t.error),new X(`Failed to validate create channel property model.`);S.value=j.WORKING;let r=h(`devicesModule.messages.channelsProperties.notCreated`,{device:P.name});try{await d.add({id:n,channelId:e,draft:!1,data:{...t.data,type:s}})}catch(e){throw S.value=j.ERROR,w=window.setTimeout(V,2e3),e instanceof Y&&e.code===422?g.error(e.message):g.error(r),e}return S.value=j.OK,w=window.setTimeout(V,2e3),g.success(h(`devicesModule.messages.channelsProperties.created`,{device:P.name})),`added`},V=()=>{window.clearTimeout(w),S.value=j.NONE};return p().catch(()=>{}),o(P,()=>{R.value=!(0,q.isEqual)(e(P),I)}),o(()=>P.category,t=>{let n=be(T.value?.category??M.generic,t);n&&(I.permissions=n.permissions,I.dataType=n.data_type,P.permissions=n.permissions,P.dataType=n.data_type,n.invalid!==void 0&&(I.invalid=n.invalid,P.invalid=n.invalid),n.step!==void 0&&(I.step=n.step,P.step=n.step),I.dataType===v.enum?(I.enumValues=n.format??[],I.minValue=void 0,I.maxValue=void 0,P.enumValues=n.format??[],P.minValue=void 0,P.maxValue=void 0):[v.char,v.uchar,v.short,v.ushort,v.int,v.uint,v.float].includes(P.dataType)?(I.enumValues=[],I.minValue=n.format?.[0],I.maxValue=n.format?.[1],P.enumValues=[],P.minValue=n.format?.[0],P.maxValue=n.format?.[1]):(I.enumValues=[],I.minValue=void 0,I.maxValue=void 0,P.enumValues=[],P.minValue=void 0,P.maxValue=void 0),R.value=!(0,q.isEqual)(e(P),I))},{immediate:!0}),o(()=>O.value,e=>{e.length&&e[0]&&(P.category=e[0].value,I.category=e[0].value)},{immediate:!0}),{categoriesOptions:O,channelsOptions:k,permissionsOptions:A,dataTypesOptions:N,model:P,formEl:L,formChanged:R,submit:B,clear:V,formResult:S,loadingChannels:m}},Re=({property:n,messages:s})=>{let c=C(),{element:l}=Ie({type:n.type}),u=c.getStore(G),{channels:d,fetchChannels:f,areLoading:p}=oe(),{t:m}=i(),h=F(),g=x(),b=r(j.NONE),S,w=[],T,E;n.dataType===v.enum?w=n.format?n.format.map(e=>e?.toString()||``):[]:[v.char,v.uchar,v.short,v.ushort,v.int,v.uint,v.float].includes(n.dataType)&&Array.isArray(n.format)&&n.format.length===2&&(T=n.format[0],E=n.format[1]);let D=t(()=>d.value.find(e=>e.id===n.channel)??null),O=t(()=>D.value?u.findForChannel(D.value.id).filter(e=>e.id!==n.id).map(e=>e.category):[]),k=t(()=>D.value?ye[D.value.category]??null:null),A=t(()=>k.value===null?[]:Object.values(_).filter(e=>k.value?.required.includes(e)||k.value?.optional.includes(e)).filter(e=>!O.value.includes(e)).map(e=>({value:e,label:m(`devicesModule.categories.channelsProperties.${e}`)}))),M=t(()=>d.value.map(e=>({value:e.id,label:e.name}))),N=Object.values(y).map(e=>({value:e,label:m(`devicesModule.permissions.${e}`)})),P=Object.values(v).map(e=>({value:e,label:m(`devicesModule.dataTypes.${e}`)})),I=a({...n,format:e(n.format),value:n.value?.value??null,enumValues:w,minValue:T,maxValue:E,enterValue:!1}),L=z(e(I)),R=r(void 0),B=r(!1),V=async()=>{let t=n.draft,r=s&&s.error?s.error:n.draft?m(`devicesModule.messages.channelsProperties.notCreated`,{property:n.name??m(`devicesModule.categories.channelsProperties.${n.category}`)}):m(`devicesModule.messages.channelsProperties.notEdited`,{property:n.name??m(`devicesModule.categories.channelsProperties.${n.category}`)});if(R.value.clearValidate(),!await R.value.validate())throw new X(`Form not valid`);I.name===``&&(I.name=null),n.dataType===v.enum?I.format=I.enumValues:[v.char,v.uchar,v.short,v.ushort,v.int,v.uint,v.float].includes(n.dataType)&&(I.format=[I.minValue??null,I.maxValue??null]),I.enterValue||delete I.value;let i=(l.value?.schemas?.channelPropertyEditFormSchema||Fe).safeParse(I);if(!i.success)throw g.error(`Schema validation failed with:`,i.error),new X(`Failed to validate edit channel property model.`);b.value=j.WORKING;try{await u.edit({id:n.id,channelId:n.channel,data:{...i.data,type:n.type}}),n.draft&&await u.save({id:n.id,channelId:n.channel})}catch(e){throw b.value=j.ERROR,S=window.setTimeout(H,2e3),e instanceof Y&&e.code===422?h.error(e.message):h.error(r),e}return b.value=j.OK,S=window.setTimeout(H,2e3),t?(h.success(m(s&&s.success?s.success:`devicesModule.messages.channelsProperties.created`,{property:n.name??m(`devicesModule.categories.channelsProperties.${n.category}`)})),`added`):(h.success(m(s&&s.success?s.success:`devicesModule.messages.channelsProperties.edited`,{property:n.name??m(`devicesModule.categories.channelsProperties.${n.category}`)})),B.value=!1,L=z(e(I)),`saved`)},H=()=>{window.clearTimeout(S),b.value=j.NONE};return f().catch(()=>{}),o(I,()=>{B.value=!(0,q.isEqual)(e(I),L)}),{categoriesOptions:A,channelsOptions:M,permissionsOptions:N,dataTypesOptions:P,model:I,formEl:R,formChanged:B,submit:V,clear:H,formResult:b,loadingChannels:p}},ze=({id:e})=>{let n=C().getStore(W),{data:r,semaphore:i}=D(n);return{device:t(()=>e===null?null:r.value[e]??null),isLoading:t(()=>i.value.fetching.item.includes(e)?!0:(r.value[e]??null)===null&&i.value.fetching.items),fetchDevice:async()=>{(r.value[e]??null)?.draft||await n.get({id:e})}}},$={search:void 0,types:[],state:`all`,states:[],categories:[],enabled:`all`,validation:`all`},Be={by:`name`,dir:`asc`},Ve=()=>{let e=C(),n=e.getStore(W),i=e.getStore(te),{firstLoad:a,semaphore:s}=D(n),{filters:c,sort:l,pagination:u,reset:d}=T({key:`${R}:devices:list`,filters:{schema:se,defaults:$},sort:{defaults:[Be]},pagination:{defaults:{page:1,size:10}},syncQuery:!0,version:1}),f=t(()=>c.value.search!==$.search||!(0,q.isEqual)(c.value.types,$.types)||c.value.state!==$.state||!(0,q.isEqual)(c.value.states,$.states)||!(0,q.isEqual)(c.value.categories,$.categories)||!(0,q.isEqual)(c.value.enabled,$.enabled)||c.value.validation!==$.validation),m=r(u.value.size||10),g=r(u.value.page||1),_=r(l.value.length>0?l.value[0]?.by:void 0),v=r(l.value.length>0?l.value[0]?.dir??null:null),y=e=>i.findById(e)?.isValid??null,b=t(()=>p(n.findAll().filter(e=>!e.draft&&(!c.value.search||e.id.toLowerCase().includes(c.value.search.toLowerCase())||e.name.toLowerCase().includes(c.value.search.toLowerCase())||e.description?.toLowerCase().includes(c.value.search.toLowerCase())||e.identifier?.toLowerCase().includes(c.value.search.toLowerCase()))&&(c.value.types.length===0||c.value.types.includes(e.type))&&(c.value.categories.length===0||c.value.categories.includes(e.category))&&(c.value.enabled===`all`||c.value.enabled===`enabled`&&e.enabled||c.value.enabled===`disabled`&&!e.enabled)&&(c.value.states.length===0||c.value.states.includes(e.status?.status??h.unknown))&&(c.value.state===`all`||c.value.state===`online`&&[h.ready,h.connected,h.running].includes(e.status.status)||c.value.state===`offline`&&[h.disconnected,h.stopped,h.lost,h.unknown].includes(e.status.status))&&(c.value.validation===`all`||c.value.validation===`valid`&&y(e.id)===!0||c.value.validation===`invalid`&&y(e.id)===!1)),[e=>_.value===`state`?e.status?.status??h.unknown:e[_.value]??``],[v.value===`asc`?`asc`:`desc`])),x=t(()=>{let e=(g.value-1)*m.value,t=e+m.value;return b.value.slice(e,t)}),S=async()=>{await n.fetch()},w=t(()=>s.value.fetching.items||!a.value),E=t(()=>a.value),O=t(()=>n.findAll().filter(e=>!e.draft).length);return o(()=>u.value,e=>{g.value=e.page??1,m.value=e.size??10},{deep:!0}),o(()=>g.value,e=>{u.value.page=e}),o(()=>m.value,e=>{u.value.size=e}),o(()=>v.value,e=>{_.value===void 0||e===null?l.value=[]:l.value=[{by:_.value,dir:e}]}),o(()=>_.value,e=>{e===void 0?l.value=[]:l.value=[{by:e,dir:v.value}]}),{devices:b,devicesPaginated:x,totalRows:O,areLoading:w,loaded:E,fetchDevices:S,filters:c,filtersActive:f,paginateSize:m,paginatePage:g,sortBy:_,sortDir:v,resetFilter:d}},He=()=>{let{t:e}=i(),t=F(),n=C().getStore(W);return{remove:async r=>{let i=n.findById(r);if(i===null)throw new J(`Something went wrong, device can't be loaded`);g.confirm(e(`devicesModule.texts.devices.confirmRemove`,{device:i.name}),e(`devicesModule.headings.devices.remove`),{confirmButtonText:e(`devicesModule.buttons.yes.title`),cancelButtonText:e(`devicesModule.buttons.no.title`),type:`warning`}).then(async()=>{try{await n.remove({id:i.id}),t.success(e(`devicesModule.messages.devices.removed`,{device:i.name}))}catch(n){if(n instanceof Y&&n.code===404){let n=e(`devicesModule.messages.devices.notFound`,{device:i.name});t.error(n)}else if(n instanceof Y&&n.code===422)t.error(n.message);else{let n=e(`devicesModule.messages.devices.notRemoved`,{device:i.name});t.error(n)}}}).catch(()=>{t.info(e(`devicesModule.messages.devices.removeCanceled`,{device:i.name}))})},bulkRemove:async r=>{if(r.length!==0)try{await g.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 g.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 g.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`))}}}},Ue=({id:e})=>{let n=C().getStore(W);return{icon:t(()=>{switch(n.findById(e)?.category){default:return`mdi:devices`}})}},We=({id:e})=>{let n=C(),r=n.getStore(W),i=n.getStore(K),a=e=>r.findById(e),o=e=>ve[e.category]??null;return{canAddAnotherChannel:t(()=>{let t=a(e);if(t===null)return!0;let{required:n,optional:r,multiple:s}=o(t)??{required:[],optional:[]},c=[...n,...r],l=i.findForDevice(t.id).map(e=>e.category);return c.filter(e=>!l.includes(e)).length>0||s!==void 0&&s.length>0}),missingRequiredChannels:t(()=>{let t=a(e);if(t===null)throw new J(`Something went wrong, device can't be loaded`);let{required:n}=o(t)??{required:[]},r=i.findForDevice(t.id).map(e=>e.category);return n.filter(e=>!r.includes(e))})}},Ge=w({id:d().uuid().optional(),type:d().trim().nonempty(),category:S(u).default(u.generic),identifier:d().trim().nonempty().nullable().optional(),name:d().trim().nonempty(),description:d().trim().transform(e=>e===``?null:e).nullable().optional(),enabled:O().default(!0).optional()}),Ke=w({id:d().uuid(),type:d().trim().nonempty(),category:S(u).default(u.generic),identifier:d().trim().nonempty().nullable().optional(),name:d().trim().nonempty().optional(),description:d().trim().transform(e=>e===``?null:e).nullable().optional(),enabled:O().optional(),roomId:d().uuid().nullable().optional()}),qe=()=>{let e=b(),{enabled:n}=f(),r=[`deviceAddForm`,`deviceEditForm`,`deviceWizard`],i=[`deviceAddForm`,`deviceEditForm`],a=[`deviceSchema`,`deviceAddFormSchema`,`deviceEditFormSchema`,`deviceCreateReqSchema`,`deviceUpdateReqSchema`],o=t(()=>e.getPlugins().filter(e=>e.modules===void 0||e.modules.includes(`devices-module`)?(e.elements??[]).some(e=>{if(!(e.modules===void 0||e.modules.includes(`devices-module`)))return!1;let t=r.length===0||!!e.components&&r.some(t=>e.components&&t in e.components),n=a.length===0||!!e.schemas&&a.some(t=>e.schemas&&t in e.schemas);return t||n}):!1)),s=t(()=>p(o.value.flatMap(e=>(e.elements??[]).filter(e=>e.modules===void 0||e.modules.includes(`devices-module`)).filter(e=>{let t=!!e.components&&i.some(t=>e.components&&t in e.components),n=!!e.schemas&&a.some(t=>e.schemas&&t in e.schemas);return t||n}).map(t=>({value:t.type,label:t.name?.trim()?t.name:e.name,disabled:!n(e.type)}))),[e=>e.label],[`asc`])),c=t(()=>p(o.value.filter(e=>(e.elements??[]).some(e=>(e.modules===void 0||e.modules.includes(`devices-module`))&&!!e.components?.deviceWizard)).map(e=>({value:e.type,label:e.name,description:e.description,disabled:!n(e.type)})),[e=>e.label],[`asc`])),l=e=>o.value.find(t=>t.type===e);return{plugins:o,options:s,wizardOptions:c,getByPluginType:l,getByName:l,getByType:e=>o.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 o.value){let n=(t.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`)));if(n)return n}}}},Je=({type:e})=>{let{getByType:n}=qe(),r=t(()=>n(e));return{plugin:r,element:t(()=>(r.value?.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`))))}},Ye=({id:t,type:n})=>{let s=C(),{element:c}=Je({type:n}),l=s.getStore(W),{t:d}=i(),f=F(),p=x(),m=r(j.NONE),h,g=Object.values(u).map(e=>({value:e,label:d(`devicesModule.categories.devices.${e}`)})),_=a({...U(c.value?.schemas?.deviceAddFormSchema||Ge),id:t,type:n,category:u.generic,name:``,description:``}),v=z(e(_)),y=r(void 0),b=r(!1),S=async()=>{if(y.value.clearValidate(),!await y.value.validate())throw new X(`Form not valid`);let e=(c.value?.schemas?.deviceAddFormSchema||Ge).safeParse(_);if(!e.success)throw p.error(`Schema validation failed with:`,e.error),new X(`Failed to validate create device model.`);m.value=j.WORKING;let r=d(`devicesModule.messages.devices.notCreated`,{device:_.name});try{await l.add({id:t,draft:!1,data:{...e.data,type:n}})}catch(e){throw m.value=j.ERROR,h=window.setTimeout(w,2e3),e instanceof Y&&e.code===422?f.error(e.message):f.error(r),e}return m.value=j.OK,h=window.setTimeout(w,2e3),f.success(d(`devicesModule.messages.devices.created`,{device:_.name})),`added`},w=()=>{window.clearTimeout(h),m.value=j.NONE};return o(_,()=>{b.value=!(0,q.isEqual)(e(_),v)}),{categoriesOptions:g,model:_,formEl:y,formChanged:b,submit:S,clear:w,formResult:m}},Xe=({device:t,messages:n})=>{let s=C(),{element:c}=Je({type:t.type}),l=s.getStore(W),{t:d}=i(),f=F(),p=x(),m=r(j.NONE),h,g=Object.values(u).map(e=>({value:e,label:d(`devicesModule.categories.devices.${e}`)})),_=a(t),v=z(e(_)),y=r(void 0),b=r(!1),S=async()=>{let r=t.draft,i=n&&n.error?n.error:t.draft?d(`devicesModule.messages.devices.notCreated`,{device:t.name}):d(`devicesModule.messages.devices.notEdited`,{device:t.name});if(y.value.clearValidate(),!await y.value.validate())throw new X(`Form not valid`);let a=(c.value?.schemas?.deviceEditFormSchema||Ke).safeParse(_);if(!a.success)throw p.error(`Schema validation failed with:`,a.error),new X(`Failed to validate edit device model.`);m.value=j.WORKING;try{await l.edit({id:t.id,data:{...a.data,type:t.type}}),t.draft&&await l.save({id:t.id})}catch(e){throw m.value=j.ERROR,h=window.setTimeout(w,2e3),e instanceof Y&&e.code===422?f.error(e.message):f.error(i),e}return m.value=j.OK,h=window.setTimeout(w,2e3),r?(f.success(d(n&&n.success?n.success:`devicesModule.messages.devices.created`,{device:t.name})),`added`):(f.success(d(n&&n.success?n.success:`devicesModule.messages.devices.edited`,{device:t.name})),b.value=!1,v=z(e(_)),`saved`)},w=()=>{window.clearTimeout(h),m.value=j.NONE};return o(_,()=>{b.value=!(0,q.isEqual)(e(_),v)}),{categoriesOptions:g,model:_,formEl:y,formChanged:b,submit:S,clear:w,formResult:m}},Ze=()=>{let e=C().getStore(te),{data:n,semaphore:r,firstLoad:i}=D(e);return{validation:t(()=>n.value),summary:t(()=>n.value?.summary??null),invalidDevices:t(()=>n.value?n.value.devices.filter(e=>!e.isValid):[]),isLoading:t(()=>r.value.fetching.items),isLoaded:t(()=>i.value),fetchValidation:async()=>{await e.fetch()},findById:t=>e.findById(t),isDeviceValid:t=>{let n=e.findById(t);return n?n.isValid:null},getDeviceIssueCount:t=>{let n=e.findById(t);return n?n.issues.length:0}}},Qe=({id:e})=>{let n=C().getStore(te),{semaphore:r}=D(n);return{validation:t(()=>n.findById(e)),isValid:t(()=>{let t=n.findById(e);return t?t.isValid:null}),issues:t(()=>{let t=n.findById(e);return t?t.issues:[]}),errorCount:t(()=>{let t=n.findById(e);return t?t.issues.filter(e=>e.severity===`error`).length:0}),warningCount:t(()=>{let t=n.findById(e);return t?t.issues.filter(e=>e.severity===`warning`).length:0}),isLoading:t(()=>r.value.fetching.item.includes(e)),fetchValidation:async()=>{await n.get({id:e})}}},$e=300,et=1e4,tt=({id:e})=>{let i=C(),a=i.getStore(W),s=i.getStore(K),c=i.getStore(G),{data:l,semaphore:u}=D(a),{data:d,semaphore:f,firstLoad:p}=D(s),{semaphore:m,firstLoad:h}=D(c),{sendCommand:g}=A(),_={},v={},b={},x=r({}),S=r({}),w=t(()=>e===null?null:l.value[e]??null),T=t(()=>Object.values(d.value).filter(t=>t.device===e&&t.category!==M.device_information)),E=t(()=>T.value.filter(e=>c.findForChannel(e.id).some(e=>e.permissions.includes(y.rw)||e.permissions.includes(y.wo)))),O=t(()=>E.value.length>0),k=e=>c.findForChannel(e),j=e=>e.permissions.includes(y.rw)||e.permissions.includes(y.wo),N=e=>{let t=x.value[e];return t===void 0?c.findById(e)?.value?.value??null:t},P=e=>S.value[e]??!1,F=(e,t)=>{if(t!==void 0){let n=x.value[e];if(n!==t&&String(n)!==String(t))return}delete x.value[e],b[e]&&(clearTimeout(b[e]),delete b[e])},I=(e,t)=>{b[e]&&clearTimeout(b[e]),b[e]=setTimeout(()=>{let n=x.value[e];(n===t||String(n)===String(t))&&delete x.value[e],delete b[e]},et)},R=async(t,n,r)=>c.findById(n)?(_[n]&&(clearTimeout(_[n]),delete _[n],v[n]&&(v[n](!1),delete v[n])),x.value[n]=r,new Promise(i=>{v[n]=i;let a=setTimeout(async()=>{delete v[n],S.value[n]=!0;try{await g(L.CHANNEL_PROPERTY_SET,{context:{origin:`admin`},properties:[{device:e,channel:t,property:n,value:r}]},`DevicesModule.Internal.SetPropertyValue`)===!0?(I(n,r),i(!0)):(F(n,r),i(!1))}catch{F(n,r),i(!1)}finally{S.value[n]=!1,_[n]===a&&delete _[n]}},$e);_[n]=a})):!1,z=async()=>{(e in l.value?l.value[e]:null)?.draft||await a.get({id:e})},B=async()=>{await s.fetch({deviceId:e})},V=async()=>{let t=Object.values(d.value).filter(t=>t.device===e);for(let e of t)await c.fetch({channelId:e.id})},H=t(()=>{if(u.value.fetching.item.includes(e)||f.value.fetching.items.includes(e))return!0;for(let e of T.value)if(m.value.fetching.items.includes(e.id))return!0;return!1}),U=t(()=>p.value.includes(e)),ee=t(()=>{if(!U.value)return!1;for(let e of T.value)if(!h.value.includes(e.id))return!1;return!0});return o(()=>{let e={};for(let t of Object.keys(x.value)){let n=c.findById(t);n&&(e[t]=n.value?.value??null)}return e},e=>{for(let[t,n]of Object.entries(x.value)){let r=e[t];(r===n||String(r)===String(n))&&F(t)}},{deep:!0}),n(()=>{for(let e of Object.keys(_))clearTimeout(_[e]),delete _[e],v[e]&&(v[e](!1),delete v[e]);for(let e of Object.keys(b))clearTimeout(b[e]),delete b[e]}),{device:w,channels:T,controllableChannels:E,hasControllableProperties:O,isLoading:H,areChannelsLoaded:U,arePropertiesLoaded:ee,fetchDevice:z,fetchChannels:B,fetchProperties:V,getPropertiesForChannel:k,isPropertyWritable:j,getPropertyValue:N,isPropertyLoading:P,setPropertyValue:R}},nt=({deviceId:e})=>{let n=C().getStore(ee),{firstLoad:r,semaphore:i}=D(n);return{controls:t(()=>n.findForDevice(e)),areLoading:t(()=>i.value.fetching.items.includes(e)),loaded:t(()=>r.value.includes(e)),fetchControls:async()=>n.fetch({deviceId:e})}},rt=e=>{let n=P(),i=x(),a=r({}),u=r(!1),d=r(!1),f=r(!1),p=r(void 0),m=r(!1),h=null,g=0,_=t(()=>Object.values(a.value).sort((e,t)=>new Date(t.ts).getTime()-new Date(e.ts).getTime())),v=t(()=>{let e=[I.warn,I.error,I.fatal,I.fail];return _.value.filter(t=>e.includes(t.type))}),y=t(()=>v.value.length),b=t(()=>y.value>0),S=async()=>{let t=s(e.deviceId);h=t,g++;let r=g;d.value=!0;try{let{data:e,error:o}=await n.client.GET(`/${c}/${k}/logs`,{params:{query:{resource:t,limit:50}}});if(h!==t||g!==r)return;if(e!==void 0){let t=Object.fromEntries(e.data.map(e=>{let t=ne(e);return[t.id,t]}));a.value=t,f.value=!0,u.value=e.metadata.has_more,p.value=e.metadata.next_cursor}else o&&i.error(`Failed to fetch device logs:`,o)}catch(e){h===t&&g===r&&i.error(`Error fetching device logs:`,e)}finally{h===t&&g===r&&(d.value=!1)}},C=async()=>{if(d.value||!u.value||!p.value)return;let t=s(e.deviceId),r=p.value,o=g;d.value=!0;try{let{data:e,error:s}=await n.client.GET(`/${c}/${k}/logs`,{params:{query:{resource:t,after_id:r,limit:50}}});if(h!==t||g!==o)return;if(e!==void 0){let t=Object.fromEntries(e.data.map(e=>{let t=ne(e);return[t.id,t]}));a.value={...a.value,...t},u.value=e.metadata.has_more,p.value=e.metadata.next_cursor}else s&&i.error(`Failed to load more device logs:`,s)}catch(e){h===t&&g===o&&i.error(`Error loading more device logs:`,e)}finally{h===t&&g===o&&(d.value=!1)}},w=async()=>{a.value={},p.value=void 0,u.value=!1,f.value=!1,await S()},T=null;return o(()=>m.value,e=>{T&&=(clearInterval(T),null),e&&(T=setInterval(()=>{d.value||S()},3e3))}),l(()=>{T&&=(clearInterval(T),null)}),o(()=>s(e.deviceId),()=>{w()}),{logs:_,alertLogs:v,alertCount:y,hasAlerts:b,hasMore:u,isLoading:d,loaded:f,live:m,fetchLogs:S,loadMoreLogs:C,refreshLogs:w}};export{_e as A,J as B,je as C,Ee as D,De as E,oe as F,ae as I,ie as L,pe as M,fe as N,Te as O,de as P,re as R,Me as S,Oe as T,X as V,Re as _,Ze as a,Fe as b,Je as c,Ke as d,We as f,ze as g,Ve as h,Qe as i,be as j,xe as k,qe as l,He as m,nt as n,Xe as o,Ue as p,tt as r,Ye as s,rt as t,Ge as u,Le as v,ke as w,Ne as x,Pe as y,Y as z};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Er as e}from"./icon-with-child-CgZMNB3F.js";import{b as t,do as n,on as r}from"./common-CYlvhyJx.js";import"./usePersonalTokens-BAWWC0KL.js";var i=()=>{let i=t().getStore(r),{profile:a}=n(i);return{profile:e(()=>a.value),isSignedIn:e(()=>i.isSignedIn())}};export{i as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./rolldown-runtime-QTnfLwEv.js";import{Ei as e,Er as t,Si as n,T as r,bi as i,ci as a,ji as o,ki as s}from"./icon-with-child-CgZMNB3F.js";import{$t as c,Cr as l,Dn as u,Fn as d,Ht as f,Kn as p,Kt as m,Mi as h,Pt as g,Rt as _,T as v,Ut as y,Wt as b,Xt as x,Yt as S,_r as C,b as w,br as T,c as E,cr as D,do as O,dr as k,p as A,qt as j,u as M,ur as N,wr as P,yr as F}from"./common-C6O7MWKy.js";import{t as I}from"./keys-DExX7OfU.js";import{a as L,u as R}from"./useSpaces-XFygVec-.js";import{a as z}from"./keys-DghNVBR5.js";var B=e=>{let n=w().getStore(c),{data:r,semaphore:i}=O(n);return{space:t(()=>e.value?r.value[e.value]??null:null),fetching:t(()=>e.value?i.value.fetching.item.includes(e.value):!1),fetchSpace:async()=>e.value?n.get({id:e.value}):null,editSpace:async t=>{if(!e.value)throw Error(`Space ID is required`);return n.edit({id:e.value,data:t})},removeSpace:async()=>{if(!e.value)throw Error(`Space ID is required`);return n.remove({id:e.value})}}},V=p(),H=T({search:l().optional(),types:N(l())}),U=T({name:l().min(1),description:l().nullable().optional(),category:P([C(f),C(b)]).nullable().optional(),icon:l().nullable().optional(),displayOrder:F().int().min(0).default(0),parentId:l().uuid().nullable().optional()}),W=U.extend({id:l().uuid(),type:D([y.ROOM,y.ZONE]).default(y.ROOM)}),G=U.extend({id:l().uuid(),type:C(y),suggestionsEnabled:k().default(!0),statusWidgets:N(L).nullable().optional()}),K=({id:t,type:o})=>{let s=w().getStore(c),{t:l}=r(),u=A(),d=n(g.NONE),f=n(null),p,m=i({id:t,type:o??y.ROOM,name:``,description:null,category:null,icon:null,displayOrder:0,parentId:null}),h=M(e(m)),_=n(void 0),v=n(!1),b=async()=>{if(_.value.clearValidate(),!await _.value.validate())throw Error(`Form not valid`);let e=W.safeParse(m);if(!e.success)throw Error(`Failed to validate create space model.`);d.value=g.WORKING;let n=l(`spacesModule.messages.notCreated`,{space:m.name});try{f.value=await s.add({id:t,data:{name:e.data.name,type:e.data.type,category:e.data.category??null,description:e.data.description??null,icon:e.data.icon??null,displayOrder:e.data.displayOrder,parentId:e.data.parentId??null}})}catch(e){throw d.value=g.ERROR,f.value=null,p=window.setTimeout(x,2e3),u.error(n),e}return d.value=g.OK,p=window.setTimeout(x,2e3),u.success(l(`spacesModule.messages.created`,{space:m.name})),`added`},x=()=>{window.clearTimeout(p),d.value=g.NONE,f.value=null};return a(m,()=>{v.value=!(0,V.isEqual)(e(m),h)}),{model:m,formEl:_,formChanged:v,submit:b,clear:x,formResult:d,createdSpace:f}};function q(e){let n=e=>{let t=m(e);return e===y.ROOM?[...t].sort((e,t)=>e.localeCompare(t)):t},r=e=>{let t=j(e);return t&&t.length>0?t:null};return{getCategoryOptions:n,getCategoryGroups:r,getCategoryTemplates:e=>S(e),categoryOptions:t(()=>{let t=o(e)??y.ROOM;return n(t)}),categoryGroups:t(()=>{let t=o(e)??y.ROOM;return r(t)}),currentTemplates:t(()=>S(o(e)??y.ROOM))}}var J=(e,r)=>{let i=w(),a=i.getStore(z),o=i.getStore(c),{semaphore:s,firstLoad:l}=O(a),u=n(!1);return{devices:t(()=>{if(!e.value||!r.value)return[];let t=a.findAll().filter(e=>!e.draft),n;return n=r.value===y.ROOM?t.filter(t=>t.roomId===e.value):t.filter(t=>t.zoneIds.includes(e.value)),n.sort((e,t)=>e.name.localeCompare(t.name))}),loading:t(()=>!!(u.value||s.value.fetching.items||!l.value)),firstLoadFinished:t(()=>l.value),fetchDevices:async()=>{await a.fetch()},addDevice:async t=>{if(!e.value||!r.value)throw Error(`Space ID and type are required`);u.value=!0;try{if(r.value===y.ROOM){let n=a.findById(t);if(!n)throw Error(`Device not found`);await a.edit({id:t,data:{type:n.type,roomId:e.value}})}else{let n=o.findById(e.value);if(n&&x(n.category))throw Error(`Cannot assign devices to floor zones. Floor membership is derived from room assignment.`);await a.addZone({id:t,zoneId:e.value})}}finally{u.value=!1}},removeDevice:async t=>{if(!e.value||!r.value)throw Error(`Space ID and type are required`);u.value=!0;try{if(r.value===y.ROOM){let e=a.findById(t);if(!e)throw Error(`Device not found`);await a.edit({id:t,data:{type:e.type,roomId:null}})}else await a.removeZone({id:t,zoneId:e.value})}finally{u.value=!1}},reassignDevice:async(e,t)=>{u.value=!0;try{let n=a.findById(e);if(!n)throw Error(`Device not found`);await a.edit({id:e,data:{type:n.type,roomId:t}})}finally{u.value=!1}}}},Y=e=>{let r=w().getStore(I),i=n(!1);return{displays:t(()=>e.value?r.findAll().filter(t=>t.spaceId===e.value).sort((e,t)=>(e.name||e.macAddress).localeCompare(t.name||t.macAddress)):[]),loading:t(()=>i.value?!0:r.fetching()),fetchDisplays:async()=>{await r.fetch()},reassignDisplay:async(e,t)=>{i.value=!0;try{await r.edit({id:e,data:{spaceId:t}})}finally{i.value=!1}},removeDisplay:async e=>{i.value=!0;try{await r.edit({id:e,data:{spaceId:null}})}finally{i.value=!1}}}},X=({space:t})=>{let o=()=>`value`in t?t.value:t,s=o(),l=w().getStore(c),{t:u}=r(),d=A(),f=n(g.NONE),p,m=i({id:s.id,type:s.type,name:s.name,description:s.description,category:s.category,icon:s.icon,displayOrder:s.displayOrder,parentId:s.parentId,suggestionsEnabled:s.suggestionsEnabled,statusWidgets:s.statusWidgets?[...s.statusWidgets.map(e=>({...e,settings:{...e.settings}}))]:null}),h=M(e(m)),_=n(void 0),v=n(!1),y=async()=>{if(_.value.clearValidate(),!await _.value.validate())throw Error(`Form not valid`);let t=G.safeParse(m);if(!t.success)throw Error(`Failed to validate edit space model.`);f.value=g.WORKING;let n=u(`spacesModule.messages.notEdited`,{space:m.name});try{await l.edit({id:s.id,data:{name:t.data.name,type:t.data.type,category:t.data.category??null,description:t.data.description??null,icon:t.data.icon??null,displayOrder:t.data.displayOrder,parentId:t.data.parentId??null,suggestionsEnabled:t.data.suggestionsEnabled,statusWidgets:t.data.statusWidgets??null}})}catch(e){throw f.value=g.ERROR,p=window.setTimeout(b,2e3),d.error(n),e}return f.value=g.OK,p=window.setTimeout(b,2e3),v.value=!1,h=M(e(m)),`saved`},b=()=>{window.clearTimeout(p),f.value=g.NONE};return a(m,()=>{v.value=!(0,V.isEqual)(e(m),h)}),a(()=>o(),t=>{t&&(m.id=t.id,m.type=t.type,m.name=t.name,m.description=t.description,m.category=t.category,m.icon=t.icon,m.displayOrder=t.displayOrder,m.parentId=t.parentId,m.suggestionsEnabled=t.suggestionsEnabled,m.statusWidgets=t.statusWidgets?[...t.statusWidgets.map(e=>({...e,settings:{...e.settings}}))]:null,h=M(e(m)),v.value=!1)},{deep:!0}),{model:m,formEl:_,formChanged:v,submit:y,clear:b,formResult:f}},Z=()=>{let{t:e}=r(),t=A(),n=w().getStore(c);return{remove:async r=>{let i=n.findById(r);return i?h.confirm(e(`spacesModule.messages.confirmRemove`,{name:i.name}),e(`spacesModule.headings.removeSpace`),{confirmButtonText:e(`spacesModule.buttons.yes.title`),cancelButtonText:e(`spacesModule.buttons.no.title`),type:`warning`}).then(async()=>{try{return await n.remove({id:r}),t.success(e(`spacesModule.messages.removed`,{space:i.name})),!0}catch(e){return e instanceof R&&t.error(e.message),!1}}).catch(()=>(t.info(e(`spacesModule.messages.removeCanceled`,{space:i.name})),!1)):(t.error(e(`spacesModule.messages.notFound`)),!1)},bulkRemove:async r=>{if(r.length!==0)try{await h.confirm(e(`spacesModule.messages.confirmBulkRemove`,{count:r.length}),e(`spacesModule.headings.bulkRemoveSpace`),{confirmButtonText:e(`spacesModule.buttons.yes.title`),cancelButtonText:e(`spacesModule.buttons.no.title`),type:`warning`});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(`spacesModule.messages.bulkRemoved`,{count:i})),a>0&&t.error(e(`spacesModule.messages.bulkRemoveFailed`,{count:a}))}catch{}}}},Q={search:void 0,types:[]},ee={by:`name`,dir:`asc`},te=()=>{let e=w().getStore(c),{firstLoad:r,semaphore:i}=O(e),{filters:o,sort:s,pagination:l,reset:u}=E({key:`${_}:spaces:list`,filters:{schema:H,defaults:Q},sort:{defaults:[ee]},pagination:{defaults:{page:1,size:10}},syncQuery:!0,version:2}),f=t(()=>o.value.search!==Q.search||!(0,V.isEqual)(o.value.types,Q.types)),p=n(l.value.size||10),m=n(l.value.page||1),h=n(s.value.length>0?s.value[0]?.by:void 0),g=n(s.value.length>0?s.value[0]?.dir??null:null),v=t(()=>d(e.findAll().filter(e=>!e.draft&&(!o.value.search||e.id.toLowerCase().includes(o.value.search.toLowerCase())||e.name?.toLowerCase().includes(o.value.search.toLowerCase())||e.description?.toLowerCase().includes(o.value.search.toLowerCase()))&&(o.value.types.length===0||o.value.types.includes(e.type))),[e=>{switch(h.value){case`name`:return e.name;case`type`:return e.type;case`displayOrder`:return e.displayOrder;default:return e.displayOrder}}],[g.value??`asc`])),y=t(()=>{let e=(m.value-1)*p.value,t=e+p.value;return v.value.slice(e,t)}),b=async()=>{await e.fetch()},x=t(()=>!!(i.value.fetching.items||!r.value)),S=t(()=>r.value),C=t(()=>e.findAll().filter(e=>!e.draft).length);return a(()=>l.value,e=>{m.value=e.page??1,p.value=e.size??10},{deep:!0}),a(()=>m.value,e=>{l.value.page=e}),a(()=>p.value,e=>{l.value.size=e}),a(()=>g.value,e=>{h.value===void 0||e===null?s.value=[]:s.value=[{by:h.value,dir:e}]}),a(()=>h.value,e=>{e===void 0?s.value=[]:s.value=[{by:e,dir:g.value}]}),{spaces:v,spacesPaginated:y,totalRows:C,areLoading:x,loaded:S,fetchSpaces:b,filters:o,filtersActive:f,paginateSize:p,paginatePage:m,sortBy:h,sortDir:g,resetFilter:u}},$=()=>{let e=v(),{enabled:n}=u(),{t:i,te:a}=r(),o=[`spaceDetail`,`spaceAddForm`,`spaceEditForm`,`spaceWizard`],s=[`spaceDetail`,`spaceAddForm`,`spaceEditForm`],c=[`spaceSchema`,`spaceAddFormSchema`,`spaceEditFormSchema`,`spaceCreateReqSchema`,`spaceUpdateReqSchema`],l=[`configure`],f=t(()=>e.getPlugins().filter(e=>e.modules===void 0||e.modules.includes(`spaces-module`)?l.length>0&&l.some(t=>e.routes&&t in e.routes)?!0:(e.elements??[]).some(e=>{if(!(e.modules===void 0||e.modules.includes(`spaces-module`)))return!1;let t=o.length===0||!!e.components&&o.some(t=>e.components&&t in e.components),n=c.length===0||!!e.schemas&&c.some(t=>e.schemas&&t in e.schemas);return t||n}):!1)),p=e=>a(e)?i(e):e;return{plugins:f,options:t(()=>d(f.value.flatMap(e=>(e.elements??[]).filter(e=>e.modules===void 0||e.modules.includes(`spaces-module`)).filter(e=>{let t=!!e.components&&s.some(t=>e.components&&t in e.components),n=!!e.schemas&&c.some(t=>e.schemas&&t in e.schemas);return t||n}).map(t=>({value:t.type,label:t.name?.trim()?p(t.name):p(e.name),disabled:!n(e.type)}))),[e=>e.label],[`asc`])),wizardOptions:t(()=>d(f.value.filter(e=>(e.elements??[]).some(e=>(e.modules===void 0||e.modules.includes(`spaces-module`))&&!!e.components?.spaceWizard)).map(e=>({value:e.type,label:p(e.name),description:e.description,disabled:!n(e.type)})),[e=>e.label],[`asc`])),getByPluginType:e=>f.value.find(t=>t.type===e),getByType:e=>f.value.find(t=>(t.elements??[]).some(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`spaces-module`)))),getElement:e=>{for(let t of f.value){let n=(t.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`spaces-module`)));if(n)return n}}}},ne=({type:e})=>{let{getByType:n}=$(),r=t(()=>n(s(e)));return{plugin:r,element:t(()=>{let t=s(e);return(r.value?.elements??[]).find(e=>e.type===t&&(e.modules===void 0||e.modules.includes(`spaces-module`)))})}};export{X as a,q as c,G as d,B as f,Z as i,K as l,$ as n,Y as o,te as r,J as s,ne as t,W as u};
|
|
1
|
+
import"./rolldown-runtime-QTnfLwEv.js";import{Ei as e,Er as t,Si as n,T as r,bi as i,ci as a,ji as o,ki as s}from"./icon-with-child-CgZMNB3F.js";import{$t as c,Cr as l,Dn as u,Fn as d,Ht as f,Kn as p,Kt as m,Mi as h,Pt as g,Rt as _,T as v,Ut as y,Wt as b,Xt as x,Yt as S,_r as C,b as w,br as T,c as E,cr as D,do as O,dr as k,p as A,qt as j,u as M,ur as N,wr as P,yr as F}from"./common-CYlvhyJx.js";import{t as I}from"./keys-DExX7OfU.js";import{a as L,u as R}from"./useSpaces-DCuyMUqe.js";import{a as z}from"./keys-DghNVBR5.js";var B=e=>{let n=w().getStore(c),{data:r,semaphore:i}=O(n);return{space:t(()=>e.value?r.value[e.value]??null:null),fetching:t(()=>e.value?i.value.fetching.item.includes(e.value):!1),fetchSpace:async()=>e.value?n.get({id:e.value}):null,editSpace:async t=>{if(!e.value)throw Error(`Space ID is required`);return n.edit({id:e.value,data:t})},removeSpace:async()=>{if(!e.value)throw Error(`Space ID is required`);return n.remove({id:e.value})}}},V=p(),H=T({search:l().optional(),types:N(l())}),U=T({name:l().min(1),description:l().nullable().optional(),category:P([C(f),C(b)]).nullable().optional(),icon:l().nullable().optional(),displayOrder:F().int().min(0).default(0),parentId:l().uuid().nullable().optional()}),W=U.extend({id:l().uuid(),type:D([y.ROOM,y.ZONE]).default(y.ROOM)}),G=U.extend({id:l().uuid(),type:C(y),suggestionsEnabled:k().default(!0),statusWidgets:N(L).nullable().optional()}),K=({id:t,type:o})=>{let s=w().getStore(c),{t:l}=r(),u=A(),d=n(g.NONE),f=n(null),p,m=i({id:t,type:o??y.ROOM,name:``,description:null,category:null,icon:null,displayOrder:0,parentId:null}),h=M(e(m)),_=n(void 0),v=n(!1),b=async()=>{if(_.value.clearValidate(),!await _.value.validate())throw Error(`Form not valid`);let e=W.safeParse(m);if(!e.success)throw Error(`Failed to validate create space model.`);d.value=g.WORKING;let n=l(`spacesModule.messages.notCreated`,{space:m.name});try{f.value=await s.add({id:t,data:{name:e.data.name,type:e.data.type,category:e.data.category??null,description:e.data.description??null,icon:e.data.icon??null,displayOrder:e.data.displayOrder,parentId:e.data.parentId??null}})}catch(e){throw d.value=g.ERROR,f.value=null,p=window.setTimeout(x,2e3),u.error(n),e}return d.value=g.OK,p=window.setTimeout(x,2e3),u.success(l(`spacesModule.messages.created`,{space:m.name})),`added`},x=()=>{window.clearTimeout(p),d.value=g.NONE,f.value=null};return a(m,()=>{v.value=!(0,V.isEqual)(e(m),h)}),{model:m,formEl:_,formChanged:v,submit:b,clear:x,formResult:d,createdSpace:f}};function q(e){let n=e=>{let t=m(e);return e===y.ROOM?[...t].sort((e,t)=>e.localeCompare(t)):t},r=e=>{let t=j(e);return t&&t.length>0?t:null};return{getCategoryOptions:n,getCategoryGroups:r,getCategoryTemplates:e=>S(e),categoryOptions:t(()=>{let t=o(e)??y.ROOM;return n(t)}),categoryGroups:t(()=>{let t=o(e)??y.ROOM;return r(t)}),currentTemplates:t(()=>S(o(e)??y.ROOM))}}var J=(e,r)=>{let i=w(),a=i.getStore(z),o=i.getStore(c),{semaphore:s,firstLoad:l}=O(a),u=n(!1);return{devices:t(()=>{if(!e.value||!r.value)return[];let t=a.findAll().filter(e=>!e.draft),n;return n=r.value===y.ROOM?t.filter(t=>t.roomId===e.value):t.filter(t=>t.zoneIds.includes(e.value)),n.sort((e,t)=>e.name.localeCompare(t.name))}),loading:t(()=>!!(u.value||s.value.fetching.items||!l.value)),firstLoadFinished:t(()=>l.value),fetchDevices:async()=>{await a.fetch()},addDevice:async t=>{if(!e.value||!r.value)throw Error(`Space ID and type are required`);u.value=!0;try{if(r.value===y.ROOM){let n=a.findById(t);if(!n)throw Error(`Device not found`);await a.edit({id:t,data:{type:n.type,roomId:e.value}})}else{let n=o.findById(e.value);if(n&&x(n.category))throw Error(`Cannot assign devices to floor zones. Floor membership is derived from room assignment.`);await a.addZone({id:t,zoneId:e.value})}}finally{u.value=!1}},removeDevice:async t=>{if(!e.value||!r.value)throw Error(`Space ID and type are required`);u.value=!0;try{if(r.value===y.ROOM){let e=a.findById(t);if(!e)throw Error(`Device not found`);await a.edit({id:t,data:{type:e.type,roomId:null}})}else await a.removeZone({id:t,zoneId:e.value})}finally{u.value=!1}},reassignDevice:async(e,t)=>{u.value=!0;try{let n=a.findById(e);if(!n)throw Error(`Device not found`);await a.edit({id:e,data:{type:n.type,roomId:t}})}finally{u.value=!1}}}},Y=e=>{let r=w().getStore(I),i=n(!1);return{displays:t(()=>e.value?r.findAll().filter(t=>t.spaceId===e.value).sort((e,t)=>(e.name||e.macAddress).localeCompare(t.name||t.macAddress)):[]),loading:t(()=>i.value?!0:r.fetching()),fetchDisplays:async()=>{await r.fetch()},reassignDisplay:async(e,t)=>{i.value=!0;try{await r.edit({id:e,data:{spaceId:t}})}finally{i.value=!1}},removeDisplay:async e=>{i.value=!0;try{await r.edit({id:e,data:{spaceId:null}})}finally{i.value=!1}}}},X=({space:t})=>{let o=()=>`value`in t?t.value:t,s=o(),l=w().getStore(c),{t:u}=r(),d=A(),f=n(g.NONE),p,m=i({id:s.id,type:s.type,name:s.name,description:s.description,category:s.category,icon:s.icon,displayOrder:s.displayOrder,parentId:s.parentId,suggestionsEnabled:s.suggestionsEnabled,statusWidgets:s.statusWidgets?[...s.statusWidgets.map(e=>({...e,settings:{...e.settings}}))]:null}),h=M(e(m)),_=n(void 0),v=n(!1),y=async()=>{if(_.value.clearValidate(),!await _.value.validate())throw Error(`Form not valid`);let t=G.safeParse(m);if(!t.success)throw Error(`Failed to validate edit space model.`);f.value=g.WORKING;let n=u(`spacesModule.messages.notEdited`,{space:m.name});try{await l.edit({id:s.id,data:{name:t.data.name,type:t.data.type,category:t.data.category??null,description:t.data.description??null,icon:t.data.icon??null,displayOrder:t.data.displayOrder,parentId:t.data.parentId??null,suggestionsEnabled:t.data.suggestionsEnabled,statusWidgets:t.data.statusWidgets??null}})}catch(e){throw f.value=g.ERROR,p=window.setTimeout(b,2e3),d.error(n),e}return f.value=g.OK,p=window.setTimeout(b,2e3),v.value=!1,h=M(e(m)),`saved`},b=()=>{window.clearTimeout(p),f.value=g.NONE};return a(m,()=>{v.value=!(0,V.isEqual)(e(m),h)}),a(()=>o(),t=>{t&&(m.id=t.id,m.type=t.type,m.name=t.name,m.description=t.description,m.category=t.category,m.icon=t.icon,m.displayOrder=t.displayOrder,m.parentId=t.parentId,m.suggestionsEnabled=t.suggestionsEnabled,m.statusWidgets=t.statusWidgets?[...t.statusWidgets.map(e=>({...e,settings:{...e.settings}}))]:null,h=M(e(m)),v.value=!1)},{deep:!0}),{model:m,formEl:_,formChanged:v,submit:y,clear:b,formResult:f}},Z=()=>{let{t:e}=r(),t=A(),n=w().getStore(c);return{remove:async r=>{let i=n.findById(r);return i?h.confirm(e(`spacesModule.messages.confirmRemove`,{name:i.name}),e(`spacesModule.headings.removeSpace`),{confirmButtonText:e(`spacesModule.buttons.yes.title`),cancelButtonText:e(`spacesModule.buttons.no.title`),type:`warning`}).then(async()=>{try{return await n.remove({id:r}),t.success(e(`spacesModule.messages.removed`,{space:i.name})),!0}catch(e){return e instanceof R&&t.error(e.message),!1}}).catch(()=>(t.info(e(`spacesModule.messages.removeCanceled`,{space:i.name})),!1)):(t.error(e(`spacesModule.messages.notFound`)),!1)},bulkRemove:async r=>{if(r.length!==0)try{await h.confirm(e(`spacesModule.messages.confirmBulkRemove`,{count:r.length}),e(`spacesModule.headings.bulkRemoveSpace`),{confirmButtonText:e(`spacesModule.buttons.yes.title`),cancelButtonText:e(`spacesModule.buttons.no.title`),type:`warning`});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(`spacesModule.messages.bulkRemoved`,{count:i})),a>0&&t.error(e(`spacesModule.messages.bulkRemoveFailed`,{count:a}))}catch{}}}},Q={search:void 0,types:[]},ee={by:`name`,dir:`asc`},te=()=>{let e=w().getStore(c),{firstLoad:r,semaphore:i}=O(e),{filters:o,sort:s,pagination:l,reset:u}=E({key:`${_}:spaces:list`,filters:{schema:H,defaults:Q},sort:{defaults:[ee]},pagination:{defaults:{page:1,size:10}},syncQuery:!0,version:2}),f=t(()=>o.value.search!==Q.search||!(0,V.isEqual)(o.value.types,Q.types)),p=n(l.value.size||10),m=n(l.value.page||1),h=n(s.value.length>0?s.value[0]?.by:void 0),g=n(s.value.length>0?s.value[0]?.dir??null:null),v=t(()=>d(e.findAll().filter(e=>!e.draft&&(!o.value.search||e.id.toLowerCase().includes(o.value.search.toLowerCase())||e.name?.toLowerCase().includes(o.value.search.toLowerCase())||e.description?.toLowerCase().includes(o.value.search.toLowerCase()))&&(o.value.types.length===0||o.value.types.includes(e.type))),[e=>{switch(h.value){case`name`:return e.name;case`type`:return e.type;case`displayOrder`:return e.displayOrder;default:return e.displayOrder}}],[g.value??`asc`])),y=t(()=>{let e=(m.value-1)*p.value,t=e+p.value;return v.value.slice(e,t)}),b=async()=>{await e.fetch()},x=t(()=>!!(i.value.fetching.items||!r.value)),S=t(()=>r.value),C=t(()=>e.findAll().filter(e=>!e.draft).length);return a(()=>l.value,e=>{m.value=e.page??1,p.value=e.size??10},{deep:!0}),a(()=>m.value,e=>{l.value.page=e}),a(()=>p.value,e=>{l.value.size=e}),a(()=>g.value,e=>{h.value===void 0||e===null?s.value=[]:s.value=[{by:h.value,dir:e}]}),a(()=>h.value,e=>{e===void 0?s.value=[]:s.value=[{by:e,dir:g.value}]}),{spaces:v,spacesPaginated:y,totalRows:C,areLoading:x,loaded:S,fetchSpaces:b,filters:o,filtersActive:f,paginateSize:p,paginatePage:m,sortBy:h,sortDir:g,resetFilter:u}},$=()=>{let e=v(),{enabled:n}=u(),{t:i,te:a}=r(),o=[`spaceDetail`,`spaceAddForm`,`spaceEditForm`,`spaceWizard`],s=[`spaceDetail`,`spaceAddForm`,`spaceEditForm`],c=[`spaceSchema`,`spaceAddFormSchema`,`spaceEditFormSchema`,`spaceCreateReqSchema`,`spaceUpdateReqSchema`],l=[`configure`],f=t(()=>e.getPlugins().filter(e=>e.modules===void 0||e.modules.includes(`spaces-module`)?l.length>0&&l.some(t=>e.routes&&t in e.routes)?!0:(e.elements??[]).some(e=>{if(!(e.modules===void 0||e.modules.includes(`spaces-module`)))return!1;let t=o.length===0||!!e.components&&o.some(t=>e.components&&t in e.components),n=c.length===0||!!e.schemas&&c.some(t=>e.schemas&&t in e.schemas);return t||n}):!1)),p=e=>a(e)?i(e):e;return{plugins:f,options:t(()=>d(f.value.flatMap(e=>(e.elements??[]).filter(e=>e.modules===void 0||e.modules.includes(`spaces-module`)).filter(e=>{let t=!!e.components&&s.some(t=>e.components&&t in e.components),n=!!e.schemas&&c.some(t=>e.schemas&&t in e.schemas);return t||n}).map(t=>({value:t.type,label:t.name?.trim()?p(t.name):p(e.name),disabled:!n(e.type)}))),[e=>e.label],[`asc`])),wizardOptions:t(()=>d(f.value.filter(e=>(e.elements??[]).some(e=>(e.modules===void 0||e.modules.includes(`spaces-module`))&&!!e.components?.spaceWizard)).map(e=>({value:e.type,label:p(e.name),description:e.description,disabled:!n(e.type)})),[e=>e.label],[`asc`])),getByPluginType:e=>f.value.find(t=>t.type===e),getByType:e=>f.value.find(t=>(t.elements??[]).some(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`spaces-module`)))),getElement:e=>{for(let t of f.value){let n=(t.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`spaces-module`)));if(n)return n}}}},ne=({type:e})=>{let{getByType:n}=$(),r=t(()=>n(s(e)));return{plugin:r,element:t(()=>{let t=s(e);return(r.value?.elements??[]).find(e=>e.type===t&&(e.modules===void 0||e.modules.includes(`spaces-module`)))})}};export{X as a,q as c,G as d,B as f,Z as i,K as l,$ as n,Y as o,te as r,J as s,ne as t,W as u};
|