@fastybird/smart-panel-admin 0.5.0-alpha.0 → 0.5.0-alpha.2
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-B98_kBrI.js → card-add-form-DQXmUGYB.js} +1 -1
- package/dist/assets/{card-edit-form-01rt8vp-.js → card-edit-form-C_ueLwAl.js} +1 -1
- package/dist/assets/common-ODOYsFyB.js +150 -0
- package/dist/assets/{common-D_v-7H8R.css → common-oMRoU5Bz.css} +1 -1
- package/dist/assets/components-B0yDuRWl.js +1 -0
- package/dist/assets/{components-DSMoiSYB.css → components-B8YODd0w.css} +1 -1
- package/dist/assets/components-BawtJjUe.css +1 -0
- package/dist/assets/components-CLcIzP_8.js +1 -0
- package/dist/assets/{components-Cmpw4bm9.js → components-DUJCqruw.js} +2 -2
- package/dist/assets/components-DswxKCzv.js +1 -0
- package/dist/assets/components-DuDfTryK.js +1 -0
- package/dist/assets/{components-e3_ufI9o.js → components-Dy1D-m8H.js} +1 -1
- package/dist/assets/components-uhACvBFm.js +1 -0
- package/dist/assets/components-xu2Ecpu3.js +1 -0
- package/dist/assets/composables-BYBvtJtZ2.js +1 -0
- package/dist/assets/composables-BdOPVRLy.js +1 -0
- package/dist/assets/composables-COtKPd6m.js +1 -0
- package/dist/assets/composables-CYtwppqp.js +1 -0
- package/dist/assets/composables-CyeF6JUD.js +1 -0
- package/dist/assets/{composables-CBAhidKX.js → composables-DMWrW6cA.js} +1 -1
- package/dist/assets/composables-OVMFuMEO.js +1 -0
- package/dist/assets/composables-V0w_6yLu.js +1 -0
- package/dist/assets/{composables-WtArDrw7.js → composables-ovO3IuNm.js} +1 -1
- package/dist/assets/{dashboard-DbEmCPhT.js → dashboard-Bh7IoBmK.js} +2 -2
- package/dist/assets/dashboard.types-C9xYIAqN.js +1 -0
- package/dist/assets/{data-source-edit-form-Tcva7LNc.js → data-source-edit-form-1USzMzsk.js} +1 -1
- package/dist/assets/drawer-SsHoXCM6.js +1 -0
- package/dist/assets/extensions.constants-CqiZbt61.js +1 -0
- package/dist/assets/index-CBZlPHi6.css +1 -0
- package/dist/assets/index-DIIEtvlc.js +16 -0
- package/dist/assets/input-number-BcTX03rU.js +1 -0
- package/dist/assets/{integration-config-dialog-BWe_0LBx.js → integration-config-dialog-BJktCyLq.js} +1 -1
- package/dist/assets/{layout-config-ahS5J5mB.js → layout-config-wkusTAdj.js} +1 -1
- package/dist/assets/{layout-default-B1Ce83f-.js → layout-default-BYUkR3hs.js} +1 -1
- package/dist/assets/{layout-lock-BKx2QEqg.js → layout-lock-C-eqz7Us.js} +1 -1
- package/dist/assets/layout-profile--lk7ll_B.js +1 -0
- package/dist/assets/{layout-profile-jyTgu9jy.js → layout-profile-CSv2mvny.js} +1 -1
- package/dist/assets/{layout-sign-BAMxZJmP.js → layout-sign-7JaoeYCx.js} +1 -1
- package/dist/assets/layout-sign-CFeVTVnB.js +1 -0
- package/dist/assets/{list-data-sources-adjust-Br_yg5eg.js → list-data-sources-adjust-BYOPPONj.js} +1 -1
- package/dist/assets/list-locations-DLldQrVV.js +1 -0
- package/dist/assets/{list-users-NqJeHUaj.js → list-users-qrVLd1pk.js} +1 -1
- package/dist/assets/logs-entries.transformers-DfCpw1Mg.js +1 -0
- package/dist/assets/{page-configure-c-MDcu9W.js → page-configure-BSOS0YWC.js} +1 -1
- package/dist/assets/{page-configure-BS1eByYQ.js → page-configure-C9foGeW1.js} +1 -1
- package/dist/assets/pagination-BN2OOlZX.js +1 -0
- package/dist/assets/{popover-C21Kw8jL.js → popover-maUqtNv9.js} +1 -1
- package/dist/assets/{radio-DKPCzmW2.js → radio-D90nO0cl.js} +1 -1
- package/dist/assets/{scene-add-form-ClDY2Mk7.js → scene-add-form-B6aQgGC0.js} +1 -1
- package/dist/assets/{scene-edit-form-DtsyZ_kJ.js → scene-edit-form-2gyHb7pp.js} +1 -1
- package/dist/assets/{select-data-source-plugin-WH0Aq_3h.js → select-data-source-plugin-CgCYxWux.js} +1 -1
- package/dist/assets/{steps-CxwAM3Qy.js → steps-CqRZSdTY.js} +1 -1
- package/dist/assets/system-DxZSaAT-.js +2 -0
- package/dist/assets/{table-DQSUUgtX.js → table-B8jVmQb4.js} +1 -1
- package/dist/assets/{tile-detail-DLS3lP2H.js → tile-detail-e8sF8ITC.js} +1 -1
- package/dist/assets/{tile-edit-form-CTOX5E8m.js → tile-edit-form-8b25z62v.js} +1 -1
- package/dist/assets/types-il6fmL4i.js +1 -0
- package/dist/assets/useBuddyChat-BR1c5D1G.js +1 -0
- package/dist/assets/{useDataSources-W0Rl6Stf.js → useDataSources-CQ5RpxTF.js} +1 -1
- package/dist/assets/useDevices-BW3E3-_x.js +1 -0
- package/dist/assets/useGeolocation-B12pka0s.js +2 -0
- package/dist/assets/useLocation-C6TegHQd.js +1 -0
- package/dist/assets/usePage-CZkNy5eQ.js +1 -0
- package/dist/assets/usePersonalTokens-DkMIEhh0.js +1 -0
- package/dist/assets/{useSpaces-4qesotRQ.js → useSpaces-CwuN3REG.js} +1 -1
- package/dist/assets/{view-buddy-chat-mluI60pk.js → view-buddy-chat-CrwcDa3M.js} +1 -1
- package/dist/assets/{view-card-add-CmhxZe4T.js → view-card-add-BHxtttSX.js} +1 -1
- package/dist/assets/view-card-edit-DY4LnDlA.js +1 -0
- package/dist/assets/view-channel-add-C-KNpSke.js +1 -0
- package/dist/assets/view-channel-edit-DyorqKCt.js +1 -0
- package/dist/assets/view-channel-ncXhyIGi.js +1 -0
- package/dist/assets/view-channel-property-add-CIFJh3ZE.js +1 -0
- package/dist/assets/view-channel-property-edit-CrQTmWxu.js +1 -0
- package/dist/assets/view-channels-Ol_mozxl.js +1 -0
- package/dist/assets/view-config-module-edit-DacuUceh.js +1 -0
- package/dist/assets/{view-config-modules-B1LD1FQR.js → view-config-modules-N_v2eK_U.js} +1 -1
- package/dist/assets/{view-config-plugin-edit-Cu1R7Esq.js → view-config-plugin-edit-CjlZ3EEe.js} +1 -1
- package/dist/assets/view-config-plugins-bYWa-Ujv.js +1 -0
- package/dist/assets/view-data-source-add-CexuIpgu.js +1 -0
- package/dist/assets/{view-data-source-add-CXi-UPQr.js → view-data-source-add-DM304vey.js} +1 -1
- package/dist/assets/view-data-source-edit-Ca8K4gfX.js +1 -0
- package/dist/assets/view-data-source-edit-FHNzBHLd.js +1 -0
- package/dist/assets/view-device-4MStawAp.js +1 -0
- package/dist/assets/view-device-add-B0Lt9OK4.js +1 -0
- package/dist/assets/view-device-control-vnzLerf1.js +1 -0
- package/dist/assets/view-device-edit-DVVrHmS2.js +1 -0
- package/dist/assets/view-devices-Bpn9DvaU.js +1 -0
- package/dist/assets/view-display-BbvkyPbH.js +1 -0
- package/dist/assets/{view-display-edit-CPoeGbWK.js → view-display-edit-CI52n4pj.js} +1 -1
- package/dist/assets/{view-display-tokens-BvGIXX6s.js → view-display-tokens-DF6pWwNi.js} +1 -1
- package/dist/assets/view-displays-hc3Dn3Qr.js +1 -0
- package/dist/assets/view-extension-detail-CVm5R10T.js +1 -0
- package/dist/assets/view-extensions-uCxnYjwJ.js +1 -0
- package/dist/assets/view-location-DBtyd0pi.js +1 -0
- package/dist/assets/view-location-add-D3fbqOhD.js +1 -0
- package/dist/assets/view-location-edit-C3geS5oJ.js +1 -0
- package/dist/assets/view-locations-8ZqZDbAk.js +1 -0
- package/dist/assets/view-lock-screen-B9MwbZ7J.js +1 -0
- package/dist/assets/view-onboarding-Ci9OqPoQ.js +1 -0
- package/dist/assets/{view-page-B8Fi1T3T.js → view-page-CUptupIj.js} +1 -1
- package/dist/assets/view-page-add-DLfnWIKK.js +1 -0
- package/dist/assets/view-page-configure-CBMGoYcU.js +1 -0
- package/dist/assets/view-page-configure-jPI1gdzu.js +1 -0
- package/dist/assets/{view-page-data-source-add-BuQq3Yg7.js → view-page-data-source-add-CBln54WX.js} +1 -1
- package/dist/assets/view-page-data-source-edit-9Dldezpi.js +1 -0
- package/dist/assets/{view-page-edit-CZ_99qaJ.js → view-page-edit-BH7tMoob.js} +1 -1
- package/dist/assets/{view-page-plugin-BIDxRbUo.js → view-page-plugin-D-vtnnCA.js} +1 -1
- package/dist/assets/view-pages-CvkGoSlO.js +1 -0
- package/dist/assets/view-profile-general-Cq6MIsx5.js +1 -0
- package/dist/assets/view-profile-security-gyKy2iQC.js +1 -0
- package/dist/assets/{view-scene-add-Ct7Lx3Fv.js → view-scene-add-COkl_MaE.js} +1 -1
- package/dist/assets/{view-scene-edit-BDMw085G.js → view-scene-edit-Bq08EufU.js} +1 -1
- package/dist/assets/{view-scenes-DodqSd1F.js → view-scenes-DxNwHqS7.js} +1 -1
- package/dist/assets/view-sign-in-yDDqsso7.js +1 -0
- package/dist/assets/view-sign-up-D-jEaa9v.js +1 -0
- package/dist/assets/{view-space-DOm51Z_r.js → view-space-NuALoUGM.js} +1 -1
- package/dist/assets/{view-space-add-dZkyxxOe.js → view-space-add-Bq3ktwr8.js} +1 -1
- package/dist/assets/view-space-edit-Dmjg8QeN.js +1 -0
- package/dist/assets/view-spaces-CYQKPDfV.js +1 -0
- package/dist/assets/{view-spaces-onboarding-CoWoVGJ4.js → view-spaces-onboarding-CFxbUAb4.js} +1 -1
- package/dist/assets/view-stats-De-kusx5.js +1 -0
- package/dist/assets/{view-system-info-DG3xZmMs.js → view-system-info-vArgYxKA.js} +1 -1
- package/dist/assets/{view-system-log-detail-D9TvLWla.js → view-system-log-detail-CB_-ytuO.js} +1 -1
- package/dist/assets/view-system-logs-DKGVQZn3.js +1 -0
- package/dist/assets/{view-tile-DqJ2Uvpj.js → view-tile-BsLyvePU.js} +1 -1
- package/dist/assets/view-tile-add-BIY19wOW.js +1 -0
- package/dist/assets/view-tile-add-Cq75xbje.js +1 -0
- package/dist/assets/{view-tile-data-source-add-rcm_of2E.js → view-tile-data-source-add-CIX8tkna.js} +1 -1
- package/dist/assets/view-tile-data-source-edit-CW0xFJ2S.js +1 -0
- package/dist/assets/view-tile-edit-CASH-bTT.js +1 -0
- package/dist/assets/view-tile-edit-CbylTxla.js +1 -0
- package/dist/assets/view-tile-edit-DiEvgqjD.js +1 -0
- package/dist/assets/view-user-add-DvKzPDIS.js +1 -0
- package/dist/assets/view-user-edit-Bbs0gylG.js +1 -0
- package/dist/assets/{view-users-CGFWybJP.js → view-users-CLqMdwqb.js} +1 -1
- package/dist/assets/weather-Cqr91jk4.js +2 -0
- package/dist/assets/weather-forecast.transformers-BJTdFLSr.js +1 -0
- package/dist/index.html +79 -68
- package/package.json +1 -1
- package/dist/assets/common-DbM7ZsAB.js +0 -150
- package/dist/assets/components-BMjw_lW2.js +0 -1
- package/dist/assets/components-BMwwZHZ2.js +0 -1
- package/dist/assets/components-Blzau7H-.js +0 -1
- package/dist/assets/components-CVSYVXAc.js +0 -1
- package/dist/assets/components-Dd_fuS3R.js +0 -1
- package/dist/assets/components-W7KcmsWr.css +0 -1
- package/dist/assets/components-fDHkLB4N.js +0 -1
- package/dist/assets/composables-B_b8zw9y2.js +0 -1
- package/dist/assets/composables-CGJ_WPFA.js +0 -1
- package/dist/assets/composables-CLycuzhO.js +0 -1
- package/dist/assets/composables-CuMlwhFu.js +0 -1
- package/dist/assets/composables-D0SpKUmA.js +0 -1
- package/dist/assets/composables-DyXcGU7i.js +0 -1
- package/dist/assets/composables-_5wO1TFL.js +0 -1
- package/dist/assets/dashboard.types-BnK1bHYI.js +0 -1
- package/dist/assets/drawer-Bi-2Kq0Y.js +0 -1
- package/dist/assets/extensions.constants-zRRiNzmt.js +0 -1
- package/dist/assets/index-BZI30D7S.css +0 -1
- package/dist/assets/index-CQ2vGGbk.js +0 -16
- package/dist/assets/input-number-BkgCCbXC.js +0 -1
- package/dist/assets/layout-profile-DiZ9-71g.js +0 -1
- package/dist/assets/layout-sign-TPTAviHN.js +0 -1
- package/dist/assets/list-locations-Csupx5Fw.js +0 -1
- package/dist/assets/logs-entries.transformers-DOCbCKK1.js +0 -1
- package/dist/assets/pagination-cEZpj3XY.js +0 -1
- package/dist/assets/system-DYbpvz4W.js +0 -2
- package/dist/assets/types-B8TprgeG.js +0 -1
- package/dist/assets/useBuddyChat-C7vsOdxS.js +0 -1
- package/dist/assets/useDevices-CyIW-GxD.js +0 -1
- package/dist/assets/useGeolocation-avOmetJX.js +0 -2
- package/dist/assets/useLocation-Q2ogTCg4.js +0 -1
- package/dist/assets/usePage-Drp4TJPJ.js +0 -1
- package/dist/assets/view-card-edit-BNm2xU18.js +0 -1
- package/dist/assets/view-channel-CMLWyv8a.js +0 -1
- package/dist/assets/view-channel-add-DVhLZOPd.js +0 -1
- package/dist/assets/view-channel-edit-DbKZjwXO.js +0 -1
- package/dist/assets/view-channel-property-add-B8pi7e8y.js +0 -1
- package/dist/assets/view-channel-property-edit-B5lYOUMD.js +0 -1
- package/dist/assets/view-channels-BDVeqwJO.js +0 -1
- package/dist/assets/view-config-module-edit-CZr3YRTu.js +0 -1
- package/dist/assets/view-config-plugins-OyGqxIKH.js +0 -1
- package/dist/assets/view-data-source-add-BSre4T8y.js +0 -1
- package/dist/assets/view-data-source-edit-CJ7tsdUo.js +0 -1
- package/dist/assets/view-data-source-edit-DzDhtLYe.js +0 -1
- package/dist/assets/view-device-DxnaWiOJ.js +0 -1
- package/dist/assets/view-device-add-DMa-NnXr.js +0 -1
- package/dist/assets/view-device-control-D6C4RkbQ.js +0 -1
- package/dist/assets/view-device-edit-C_Lci9x8.js +0 -1
- package/dist/assets/view-devices-C-UnW3rf.js +0 -1
- package/dist/assets/view-display-D9jw7CXo.js +0 -1
- package/dist/assets/view-displays-Dq2q9V8-.js +0 -1
- package/dist/assets/view-extension-detail-xIPLNUN0.js +0 -1
- package/dist/assets/view-extensions-C2euN9FQ.js +0 -1
- package/dist/assets/view-location-CWq5jGlm.js +0 -1
- package/dist/assets/view-location-add-7sUXjykc.js +0 -1
- package/dist/assets/view-location-edit-BB4mf3Dd.js +0 -1
- package/dist/assets/view-locations-DVer5Ade.js +0 -1
- package/dist/assets/view-lock-screen-DzJV_Fh3.js +0 -1
- package/dist/assets/view-onboarding-CvwQJfWw.js +0 -1
- package/dist/assets/view-page-add-CCpTqS0W.js +0 -1
- package/dist/assets/view-page-configure-BxMcbWmO.js +0 -1
- package/dist/assets/view-page-configure-PKwvCa7L.js +0 -1
- package/dist/assets/view-page-data-source-edit-DJIeJut7.js +0 -1
- package/dist/assets/view-pages-CjKKSoIb.js +0 -1
- package/dist/assets/view-profile-general-CDu6WJRs.js +0 -1
- package/dist/assets/view-profile-security-BH3fXBCp.js +0 -1
- package/dist/assets/view-sign-in-ewqiqV4Q.js +0 -1
- package/dist/assets/view-sign-up-DYbfuvd3.js +0 -1
- package/dist/assets/view-space-edit-CtKkLP5K.js +0 -1
- package/dist/assets/view-spaces-BR-h9gYO.js +0 -1
- package/dist/assets/view-stats-DCbY2Lqo.js +0 -1
- package/dist/assets/view-system-logs-DGF79_6M.js +0 -1
- package/dist/assets/view-tile-add-C1PI2w7b.js +0 -1
- package/dist/assets/view-tile-add-cz6Bk44B.js +0 -1
- package/dist/assets/view-tile-data-source-edit-DpjJ3tlJ.js +0 -1
- package/dist/assets/view-tile-edit-CgrJqxFr.js +0 -1
- package/dist/assets/view-tile-edit-DKxuo0zj.js +0 -1
- package/dist/assets/view-tile-edit-DyCU8FPg.js +0 -1
- package/dist/assets/view-user-add-DGoTM0eJ.js +0 -1
- package/dist/assets/view-user-edit-C7ANwskm.js +0 -1
- package/dist/assets/weather-2QyNLd8c.js +0 -2
- package/dist/assets/weather-forecast.transformers-CZwhibo3.js +0 -1
- /package/dist/assets/{composables-BU1aKa642.js → composables-CFy1PUwT2.js} +0 -0
- /package/dist/assets/{empty-C13Ke09q.js → empty-C-72o5ew.js} +0 -0
- /package/dist/assets/{gridstack.min-BC6WoZvX.js → gridstack.min-CkFfNuVm.js} +0 -0
- /package/dist/assets/{keys-C6Zi4a10.js → keys-BBDlM2pa.js} +0 -0
- /package/dist/assets/{keys-DVEtutPb.js → keys-CGGnS6tq.js} +0 -0
- /package/dist/assets/{keys-o2K4DVjh.js → keys-Cm97UJHM.js} +0 -0
- /package/dist/assets/{keys-DWeeqbdi.js → keys-DHSxrtbW.js} +0 -0
- /package/dist/assets/{leaflet-src-B49UyrlR.js → leaflet-src-w7aZLeZy.js} +0 -0
- /package/dist/assets/{leaflet-src.esm-YKGwaZsZ.js → leaflet-src.esm-CP3k43VF.js} +0 -0
- /package/dist/assets/{marker-icon-2x-BCzqJChB.js → marker-icon-2x-BQwQunh3.js} +0 -0
- /package/dist/assets/{marker-icon-JzPv91fE.js → marker-icon-D5WnykN_.js} +0 -0
- /package/dist/assets/{marker-shadow-tj6c2pB6.js → marker-shadow-7oepq6ij.js} +0 -0
- /package/dist/assets/{pages-cards.contants-B5RdaI3z.js → pages-cards.contants-DaE51N8m.js} +0 -0
- /package/dist/assets/{pages-tiles.constants-Day6cR-b.js → pages-tiles.constants-CQ5vmfVa.js} +0 -0
- /package/dist/assets/{system.exceptions-CLPql-b3.js → system.exceptions-7sdV6yZT.js} +0 -0
- /package/dist/assets/{view-not-found-C0Nl0aC-.js → view-not-found-Cyh2GjBD.js} +0 -0
- /package/dist/assets/{weather-icon-CkuFNv0P.js → weather-icon-CoJVymBk.js} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./chunk-DECur_0Z.js";import{Xr as e,ci as t,d as n,fi as r,mr as i,n as a,ui as o}from"./icon-with-child-DmQ_XhQy.js";import{Fn as s,Gn as c,In as l,Kn as u,Mt as d,Nt as f,Va as p,Zn as m,ar as h,c as g,di as _,er as v,g as y,gn as b,ir as x,k as S,kt as C,or as w,p as T,qn as E,tr as D,v as O,w as k,wn as A,x as j}from"./common-ODOYsFyB.js";import{i as M,l as N,n as P,o as F,s as I}from"./useLocation-C6TegHQd.js";var L=()=>{let e=k().getStore(I),{data:t,semaphore:n}=p(e);return{weatherDay:i(()=>t.value),isLoading:i(()=>t.value===null?n.value.getting:!1),fetchWeatherDay:async()=>{await e.get()}}},R=()=>{let e=k().getStore(N),{firstLoad:t,semaphore:n}=p(e);return{locations:i(()=>e.findAll().filter(e=>!e.draft)),areLoading:i(()=>n.value.fetching.items),loaded:i(()=>t.value),fetchLocations:async()=>{await e.fetch()}}},z={search:void 0,types:[],primary:`all`},ee=()=>{let t=k().getStore(N),{firstLoad:n,semaphore:r}=p(t),{configModule:a}=l({type:d}),s=i(()=>a.value?.primaryLocationId??null),c=o(10),u=o(1),f=o({...z}),m=i(()=>f.value.search!==z.search||f.value.types.length>0||f.value.primary!==z.primary),h=o(`name`),g=o(`ascending`),_=i(()=>{let e=t.findAll().filter(e=>!(e.draft||f.value.search&&!e.name.toLowerCase().includes(f.value.search.toLowerCase())||f.value.types.length>0&&!f.value.types.includes(e.type)||f.value.primary===`primary`&&e.id!==s.value||f.value.primary===`secondary`&&e.id===s.value));return g.value===null?e:A(e,[e=>e[h.value]??``],[g.value===`ascending`?`asc`:`desc`])}),v=i(()=>{let e=(u.value-1)*c.value,t=e+c.value;return _.value.slice(e,t)}),y=async()=>{await t.fetch()},b=i(()=>r.value.fetching.items||!n.value),x=i(()=>n.value),S=i(()=>t.findAll().filter(e=>!e.draft).length);return e(()=>f.value,()=>{u.value=1},{deep:!0}),{locations:_,locationsPaginated:v,totalRows:S,areLoading:b,loaded:x,fetchLocations:y,filters:f,filtersActive:m,paginateSize:c,paginatePage:u,sortBy:h,sortDir:g,resetFilter:()=>{f.value={...z}},primaryLocationId:s}},B=()=>{let e=O(),t=j(),n=o({}),r=o(!1),s=o(!1),c=o(!1);return{weatherByLocation:i(()=>n.value),isLoading:r,hasError:s,fetchCompleted:c,fetchLocationsWeather:async()=>{if(!r.value){r.value=!0,s.value=!1;try{let{data:r,error:i,response:o}=await e.client.GET(`/${a}/${f}/weather`,{});if(r!==void 0&&Array.isArray(r.data)){let e={};for(let n of r.data)if(n.location_id)try{let t=P(n.current),r=n.location;e[n.location_id]={current:t,locationName:r?.name??``,country:r?.country??null}}catch(e){t.error(`[WEATHER] Failed to transform weather data for location ${n.location_id}`,e)}n.value=e,Object.keys(e).length===0&&(s.value=!0);return}let c=`Failed to fetch locations weather.`;throw i&&(c=i.message??c),new M(c,o?.status??500)}catch(e){if(s.value=!0,e instanceof M)throw e;t.error(`[WEATHER] Failed to fetch locations weather`,e)}finally{r.value=!1,c.value=!0}}}}},V=()=>{let{t:e}=n(),t=y(),r=k().getStore(N);return{add:async e=>r.add(e),edit:async e=>r.edit(e),remove:async n=>{let i=r.findById(n);if(i)try{await _.confirm(e(`weatherModule.messages.locations.confirmDeleteLocation`,{name:i.name}),e(`weatherModule.headings.deleteLocation`),{confirmButtonText:e(`weatherModule.buttons.yes.title`),cancelButtonText:e(`weatherModule.buttons.no.title`),type:`warning`});try{await r.remove({id:n}),t.success(e(`weatherModule.messages.locations.deleted`))}catch{t.error(e(`weatherModule.messages.locations.notDeleted`))}}catch{t.info(e(`weatherModule.messages.locations.deleteCanceled`,{location:i.name}))}},bulkRemove:async n=>{if(n.length!==0)try{await _.confirm(e(`weatherModule.messages.locations.confirmBulkDelete`,{count:n.length}),e(`weatherModule.headings.bulkDeleteLocations`),{confirmButtonText:e(`weatherModule.buttons.yes.title`),cancelButtonText:e(`weatherModule.buttons.no.title`),type:`warning`});let i=0,a=0;for(let e of n)try{await r.remove({id:e.id}),i++}catch{a++}i>0&&t.success(e(`weatherModule.messages.locations.bulkDeleted`,{count:i})),a>0&&t.error(e(`weatherModule.messages.locations.bulkDeleteFailed`,{count:a}))}catch{t.info(e(`weatherModule.messages.locations.bulkDeleteCanceled`))}}}},H=x().uuid(),U=D({id:H,draft:u().default(!1),type:x().trim().nonempty(),name:x().trim().nonempty(),order:v().int().nonnegative().default(0),createdAt:h([x().datetime({offset:!0}),E()]).transform(e=>e instanceof Date?e:new Date(e)),updatedAt:h([x().datetime({offset:!0}),E()]).transform(e=>e instanceof Date?e:new Date(e)).optional().nullable().default(null)}).catchall(w());D({fetching:D({items:u().default(!1),item:c(H)}),creating:c(H),updating:c(H),deleting:c(H)}),D({id:H,type:x().trim().nonempty(),data:m({})}),D({id:H,data:D({type:x().trim().nonempty(),name:x().trim().nonempty()}).catchall(w())}),D({id:H}),D({id:H});var W=D({id:H.optional().default(g()),draft:u().optional().default(!1),data:D({type:x().trim().nonempty(),name:x().trim().nonempty()}).catchall(w())}),G=D({id:H,data:D({type:x().trim().nonempty(),name:x().trim().optional()}).catchall(w())});D({id:H}),D({id:H});var K=D({id:x().uuid().optional(),type:x().trim().nonempty(),name:x().trim().nonempty()}).passthrough(),q=D({type:x().trim().nonempty(),name:x().trim().nonempty().optional()}).passthrough();D({id:x().uuid(),type:x(),name:x().trim().nonempty(),created_at:x(),updated_at:x().nullable().optional()}),D({id:H,type:x().trim().nonempty(),name:x().trim().min(1,`Name is required`)});var J=D({name:x().trim().min(1,`Name is required`)}),Y=U,X=K,Z=q,Q=s(),te=({id:i})=>{let a=k().getStore(N),{t:s}=n(),c=y(),l=j(),u=o(C.NONE),d,f=t({name:a.findById(i.value)?.name??``}),p=T(r(f)),m=o(void 0),h=o(!1),g=async()=>{if(m.value.clearValidate(),!await m.value.validate())throw new F(`Form not valid`);let e=J.safeParse(f);if(!e.success)throw l.error(`[WEATHER_MODULE] Schema validation failed:`,e.error),new F(`Failed to validate update location model.`);u.value=C.WORKING;let t=a.findById(i.value);if(!t)throw new F(`Location not found.`);let n=s(`weatherModule.messages.locations.notUpdated`,{location:f.name});try{await a.edit({id:i.value,data:{type:t.type,...e.data}}),u.value=C.OK,c.success(s(`weatherModule.messages.locations.updated`,{location:f.name})),Object.assign(p,T(r(f))),h.value=!1}catch(e){throw u.value=C.ERROR,d=window.setTimeout(_,2e3),e instanceof M&&e.code===422?c.error(e.message):c.error(n),e}},_=()=>{window.clearTimeout(d),u.value=C.NONE};return e(()=>f,()=>{h.value=!(0,Q.isEqual)(r(f),p)},{deep:!0}),e(()=>a.findById(i.value),e=>{e&&!h.value&&(f.name=e.name,Object.assign(p,T(r(f))))}),{model:f,formEl:m,formChanged:h,submit:g}},$=()=>{let e=S(),{enabled:t}=b(),n=[`locationAddForm`,`locationEditForm`],r=[`locationSchema`,`locationAddFormSchema`,`locationEditFormSchema`,`locationCreateReqSchema`,`locationUpdateReqSchema`],a=i(()=>e.getPlugins().filter(e=>e.modules===void 0||e.modules.includes(`weather-module`)?(e.elements??[]).some(e=>{if(!(e.modules===void 0||e.modules.includes(`weather-module`)))return!1;let t=n.length===0||!!e.components&&n.some(t=>e.components&&t in e.components),i=r.length===0||!!e.schemas&&r.some(t=>e.schemas&&t in e.schemas);return t||i}):!1));return{plugins:a,options:i(()=>A(a.value.flatMap(e=>(e.elements??[]).filter(e=>e.modules===void 0||e.modules.includes(`weather-module`)).map(n=>({value:n.type,label:n.name?.trim()?n.name:e.name,disabled:!t(e.type)}))),[e=>e.label],[`asc`])),getByName:e=>a.value.find(t=>t.type===e),getByType:e=>a.value.find(t=>(t.elements??[]).some(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`weather-module`)))),getElement:e=>{for(let t of a.value){let n=(t.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`weather-module`)));if(n)return n}}}},ne=({type:e})=>{let{getByType:t}=$(),n=i(()=>t(e));return{plugin:n,element:i(()=>(n.value?.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`weather-module`))))}};export{L as _,Y as a,U as c,G as d,H as f,R as g,ee as h,X as i,q as l,B as m,$ as n,Z as o,V as p,te as r,K as s,ne as t,W as u};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./chunk-DECur_0Z.js";import{Dr as e,Xr as t,_i as n,ci as r,d as i,fi as a,mr as o,n as s,ui as c}from"./icon-with-child-DmQ_XhQy.js";import{$t as l,Fn as u,Gn as d,Ht as f,I as p,Jt as m,Kn as h,Kt as g,Mr as _,Pt as v,Qn as y,Rt as b,Ut as x,Va as S,Wt as C,Xn as w,Xt as T,Zt as E,ar as D,d as O,di as k,en as A,er as j,g as M,ir as N,nn as P,o as ee,p as F,qt as I,rn as L,tr as R,v as te,w as z,wn as ne}from"./common-ODOYsFyB.js";import{t as re}from"./keys-DHSxrtbW.js";import{a as B,i as V,n as ie}from"./useSpaces-CwuN3REG.js";import{a as ae}from"./keys-Cm97UJHM.js";var oe=e=>{let t=z().getStore(L),{data:n,semaphore:r}=S(t);return{space:o(()=>e.value?n.value[e.value]??null:null),fetching:o(()=>e.value?r.value.fetching.item.includes(e.value):!1),fetchSpace:async()=>e.value?t.get({id:e.value}):null,editSpace:async n=>{if(!e.value)throw Error(`Space ID is required`);return t.edit({id:e.value,data:n})},removeSpace:async()=>{if(!e.value)throw Error(`Space ID is required`);return t.remove({id:e.value})}}},se=R({search:N().optional(),type:D([y(I),w(`all`)]).default(`all`)}),H=R({name:N().min(1),description:N().nullable().optional(),category:D([y(g),y(m)]).nullable().optional(),icon:N().nullable().optional(),displayOrder:j().int().min(0).default(0),parentId:N().uuid().nullable().optional()}),ce=H.extend({id:N().uuid(),type:y(I).default(I.ROOM)}),le=H.extend({id:N().uuid(),type:y(I),suggestionsEnabled:h().default(!0),statusWidgets:d(ie).nullable().optional()}),U=u(),ue=({id:e})=>{let n=z().getStore(L),{t:o}=i(),s=M(),l=c(b.NONE),u=c(null),d,f=r({id:e,type:I.ROOM,name:``,description:null,category:null,icon:null,displayOrder:0,parentId:null}),p=F(a(f)),m=c(void 0),h=c(!1),g=async()=>{if(m.value.clearValidate(),!await m.value.validate())throw Error(`Form not valid`);let t=ce.safeParse(f);if(!t.success)throw Error(`Failed to validate create space model.`);l.value=b.WORKING;let r=o(`spacesModule.messages.notCreated`,{space:f.name});try{u.value=await n.add({id:e,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}})}catch(e){throw l.value=b.ERROR,u.value=null,d=window.setTimeout(_,2e3),s.error(r),e}return l.value=b.OK,d=window.setTimeout(_,2e3),s.success(o(`spacesModule.messages.created`,{space:f.name})),`added`},_=()=>{window.clearTimeout(d),l.value=b.NONE,u.value=null};return t(f,()=>{h.value=!(0,U.isEqual)(a(f),p)}),{model:f,formEl:m,formChanged:h,submit:g,clear:_,formResult:l,createdSpace:u}};function de(e){let t=e=>{let t=T(e);return e===I.ROOM?[...t].sort((e,t)=>e.localeCompare(t)):t},r=e=>{let t=E(e);return t&&t.length>0?t:null};return{getCategoryOptions:t,getCategoryGroups:r,getCategoryTemplates:e=>l(e),categoryOptions:o(()=>t(n(e)??I.ROOM)),categoryGroups:o(()=>r(n(e)??I.ROOM)),currentTemplates:o(()=>l(n(e)??I.ROOM))}}var fe=(e,t)=>{let n=z(),r=n.getStore(ae),i=n.getStore(L),{semaphore:a,firstLoad:s}=S(r),l=c(!1);return{devices:o(()=>{if(!e.value||!t.value)return[];let n=r.findAll().filter(e=>!e.draft),i;return i=t.value===I.ROOM?n.filter(t=>t.roomId===e.value):n.filter(t=>t.zoneIds.includes(e.value)),i.sort((e,t)=>e.name.localeCompare(t.name))}),loading:o(()=>!!(l.value||a.value.fetching.items||!s.value)),firstLoadFinished:o(()=>s.value),fetchDevices:async()=>{await r.fetch()},addDevice:async n=>{if(!e.value||!t.value)throw Error(`Space ID and type are required`);l.value=!0;try{if(t.value===I.ROOM){let t=r.findById(n);if(!t)throw Error(`Device not found`);await r.edit({id:n,data:{type:t.type,roomId:e.value}})}else{let t=i.findById(e.value);if(t&&A(t.category))throw Error(`Cannot assign devices to floor zones. Floor membership is derived from room assignment.`);await r.addZone({id:n,zoneId:e.value})}}finally{l.value=!1}},removeDevice:async n=>{if(!e.value||!t.value)throw Error(`Space ID and type are required`);l.value=!0;try{if(t.value===I.ROOM){let e=r.findById(n);if(!e)throw Error(`Device not found`);await r.edit({id:n,data:{type:e.type,roomId:null}})}else await r.removeZone({id:n,zoneId:e.value})}finally{l.value=!1}},reassignDevice:async(e,t)=>{l.value=!0;try{let n=r.findById(e);if(!n)throw Error(`Device not found`);await r.edit({id:e,data:{type:n.type,roomId:t}})}finally{l.value=!1}}}},pe=e=>{let t=z().getStore(re),n=c(!1);return{displays:o(()=>e.value?t.findAll().filter(t=>t.roomId===e.value).sort((e,t)=>(e.name||e.macAddress).localeCompare(t.name||t.macAddress)):[]),loading:o(()=>n.value?!0:t.fetching()),fetchDisplays:async()=>{await t.fetch()},reassignDisplay:async(e,r)=>{n.value=!0;try{await t.edit({id:e,data:{roomId:r}})}finally{n.value=!1}},removeDisplay:async e=>{n.value=!0;try{await t.edit({id:e,data:{roomId:null}})}finally{n.value=!1}}}},me=({space:e})=>{let n=()=>`value`in e?e.value:e,o=n(),s=z().getStore(L),{t:l}=i(),u=M(),d=c(b.NONE),f,p=r({id:o.id,type:o.type,name:o.name,description:o.description,category:o.category,icon:o.icon,displayOrder:o.displayOrder,parentId:o.parentId,suggestionsEnabled:o.suggestionsEnabled,statusWidgets:o.statusWidgets?[...o.statusWidgets.map(e=>({...e,settings:{...e.settings}}))]:null}),m=F(a(p)),h=c(void 0),g=c(!1),_=async()=>{if(h.value.clearValidate(),!await h.value.validate())throw Error(`Form not valid`);let e=le.safeParse(p);if(!e.success)throw Error(`Failed to validate edit space model.`);d.value=b.WORKING;let t=l(`spacesModule.messages.notEdited`,{space:p.name});try{await s.edit({id:o.id,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,suggestionsEnabled:e.data.suggestionsEnabled,statusWidgets:e.data.statusWidgets??null}})}catch(e){throw d.value=b.ERROR,f=window.setTimeout(v,2e3),u.error(t),e}return d.value=b.OK,f=window.setTimeout(v,2e3),g.value=!1,m=F(a(p)),`saved`},v=()=>{window.clearTimeout(f),d.value=b.NONE};return t(p,()=>{g.value=!(0,U.isEqual)(a(p),m)}),t(()=>n(),e=>{e&&(p.id=e.id,p.type=e.type,p.name=e.name,p.description=e.description,p.category=e.category,p.icon=e.icon,p.displayOrder=e.displayOrder,p.parentId=e.parentId,p.suggestionsEnabled=e.suggestionsEnabled,p.statusWidgets=e.statusWidgets?[...e.statusWidgets.map(e=>({...e,settings:{...e.settings}}))]:null,m=F(a(p)),g.value=!1)},{deep:!0}),{model:p,formEl:h,formChanged:g,submit:_,clear:v,formResult:d}},he=e=>({propertyId:e.property_id??e.propertyId,dataType:e.data_type??e.dataType,format:e.format??null}),ge=e=>{let t=e.capabilities??{},n=e.links??{},r={};return(n.input_select||n.inputSelect)&&(r.inputSelect=he(n.input_select??n.inputSelect)),{endpointId:e.endpoint_id,spaceId:e.space_id,deviceId:e.device_id,type:e.type,name:e.name,capabilities:{power:t.power??!1,volume:t.volume??!1,mute:t.mute??!1,playback:t.playback??!1,track:t.track??!1,inputSelect:t.input_select??!1,remoteCommands:t.remote_commands??!1},links:r}},W=e=>({id:e.id,spaceId:e.space_id,activityKey:e.activity_key,displayEndpointId:e.display_endpoint_id??null,audioEndpointId:e.audio_endpoint_id??null,sourceEndpointId:e.source_endpoint_id??null,remoteEndpointId:e.remote_endpoint_id??null,displayInputId:e.display_input_id??null,audioInputId:e.audio_input_id??null,sourceInputId:e.source_input_id??null,audioVolumePreset:e.audio_volume_preset??null,createdAt:e.created_at,updatedAt:e.updated_at??null}),G=e=>({stepIndex:e.step_index??e.stepIndex??0,critical:e.critical??!1,reason:e.reason??``,targetDeviceId:e.target_device_id??e.targetDeviceId,kind:e.kind,propertyId:e.property_id??e.propertyId,commandId:e.command_id??e.commandId,label:e.label,timestamp:e.timestamp}),K=e=>({displayDeviceId:e.display_device_id??e.displayDeviceId,audioDeviceId:e.audio_device_id??e.audioDeviceId,sourceDeviceId:e.source_device_id??e.sourceDeviceId,remoteDeviceId:e.remote_device_id??e.remoteDeviceId}),q=e=>({stepsTotal:e.steps_total??e.stepsTotal??0,stepsSucceeded:e.steps_succeeded??e.stepsSucceeded??0,stepsFailed:e.steps_failed??e.stepsFailed??0,failures:Array.isArray(e.failures)?e.failures.map(G):void 0,warnings:Array.isArray(e.warnings)?e.warnings.map(G):void 0,errors:Array.isArray(e.errors)?e.errors.map(G):void 0,warningCount:e.warning_count??e.warningCount??0,errorCount:e.error_count??e.errorCount??0}),_e=e=>{let t=e.action??{};return{targetDeviceId:e.target_device_id??e.targetDeviceId??``,action:{kind:t.kind??`unknown`,propertyId:t.property_id??t.propertyId,value:t.value},critical:e.critical??!1,label:e.label}},ve=e=>{let t=e.resolved,n=e.plan??[],r=e.warnings??[];return{spaceId:e.space_id??e.spaceId??``,activityKey:e.activity_key??e.activityKey??``,resolved:t?K(t):{},plan:n.map(_e),warnings:r.map(e=>({label:e.label??``}))}},J=e=>{let t=e.resolved,n=e.summary;return{activityKey:e.activity_key??null,state:e.state??`deactivated`,resolved:t?K(t):void 0,summary:n?q(n):void 0,warnings:e.warnings}},ye=e=>{let t,n;if(e.resolved)try{t=K(typeof e.resolved==`string`?JSON.parse(e.resolved):e.resolved)}catch{}if(e.last_result)try{n=q(typeof e.last_result==`string`?JSON.parse(e.last_result):e.last_result)}catch{}return{activityKey:e.activity_key??null,state:e.state??`deactivated`,resolved:t,summary:n,warnings:e.warnings,activatedAt:e.activated_at??null,updatedAt:e.updated_at??null}},be=e=>{switch(e){case`watch`:return`primary`;case`listen`:return`success`;case`gaming`:return`danger`;case`background`:return`info`;default:return`info`}},xe=e=>{switch(e){case`watch`:return`mdi:television-play`;case`listen`:return`mdi:music`;case`gaming`:return`mdi:controller`;case`background`:return`mdi:music-note`;default:return`mdi:help-circle`}},Se=e=>{let t=te(),n=c([]),r=c([]),i=c(null),a=c(!1),l=c(!1),u=c(!1),d=c(!1),f=c(!1),p=c(!1),m=c(!1),h=c(null),g=c(null),_=c(null),v=c(!1),y=c(null),b=c(null),S=o(()=>n.value),C=o(()=>r.value),w=async()=>{if(!(!e.value||a.value)){a.value=!0,h.value=null;try{let{data:r,error:i}=await t.client.GET(`/${s}/${x}/spaces/{id}/media/endpoints`,{params:{path:{id:e.value}}});if(i||!r)throw Error(`Failed to fetch media endpoints`);n.value=((r.data??{}).endpoints??[]).map(ge)}catch(e){h.value=e instanceof Error?e.message:`Unknown error`}finally{a.value=!1}}},T=async()=>{if(!(!e.value||l.value)){l.value=!0,g.value=null;try{let{data:n,error:i}=await t.client.GET(`/${s}/${x}/spaces/{id}/media/bindings`,{params:{path:{id:e.value}}});if(i||!n)throw Error(`Failed to fetch media bindings`);r.value=(n.data??[]).map(W)}catch(e){g.value=e instanceof Error?e.message:`Unknown error`}finally{l.value=!1}}},E=async(n,i)=>{if(!e.value)throw Error(`Space ID is required`);p.value=!0,_.value=null;try{let{data:a,error:o}=await t.client.PATCH(`/${s}/${x}/spaces/{id}/media/bindings/{bindingId}`,{params:{path:{id:e.value,bindingId:n}},body:{data:{display_endpoint_id:i.displayEndpointId,audio_endpoint_id:i.audioEndpointId,source_endpoint_id:i.sourceEndpointId,remote_endpoint_id:i.remoteEndpointId,display_input_id:i.displayInputId,audio_input_id:i.audioInputId,source_input_id:i.sourceInputId,audio_volume_preset:i.audioVolumePreset}}});if(o||!a||!a.data){let e=o?.message??`Failed to save binding`;throw Error(e)}let c=W(a.data),l=r.value.findIndex(e=>e.id===c.id);return l>=0&&(r.value[l]=c),c}catch(e){throw _.value=e instanceof Error?e.message:`Unknown error`,e}finally{p.value=!1}},D=async(n,i)=>{if(!e.value)throw Error(`Space ID is required`);p.value=!0,_.value=null;try{let{data:a,error:o}=await t.client.POST(`/${s}/${x}/spaces/{id}/media/bindings`,{params:{path:{id:e.value}},body:{data:{activity_key:n,display_endpoint_id:i.displayEndpointId??void 0,audio_endpoint_id:i.audioEndpointId??void 0,source_endpoint_id:i.sourceEndpointId??void 0,remote_endpoint_id:i.remoteEndpointId??void 0,display_input_id:i.displayInputId??void 0,audio_input_id:i.audioInputId??void 0,source_input_id:i.sourceInputId??void 0,audio_volume_preset:i.audioVolumePreset??void 0}}});if(o||!a||!a.data){let e=o?.message??`Failed to create binding`;throw Error(e)}let c=W(a.data);return r.value.push(c),c}catch(e){throw _.value=e instanceof Error?e.message:`Unknown error`,e}finally{p.value=!1}},O=async n=>{if(!e.value)throw Error(`Space ID is required`);p.value=!0,_.value=null;try{let{error:i}=await t.client.DELETE(`/${s}/${x}/spaces/{id}/media/bindings/{bindingId}`,{params:{path:{id:e.value,bindingId:n}}});if(i){let e=i?.message??`Failed to delete binding`;throw Error(e)}r.value=r.value.filter(e=>e.id!==n)}catch(e){throw _.value=e instanceof Error?e.message:`Unknown error`,e}finally{p.value=!1}},k=async()=>{if(e.value){m.value=!0;try{let{data:n,error:i}=await t.client.POST(`/${s}/${x}/spaces/{id}/media/bindings/apply-defaults`,{params:{path:{id:e.value}}});if(i||!n)throw Error(`Failed to apply defaults`);r.value=(n.data??[]).map(W)}catch(e){throw g.value=e instanceof Error?e.message:`Unknown error`,e}finally{m.value=!1}}},A=async()=>{if(!(!e.value||u.value)){u.value=!0,y.value=null,b.value=null;try{let{data:n,error:r}=await t.client.GET(`/${s}/${x}/spaces/{id}/media/activities/active`,{params:{path:{id:e.value}}});if(r||!n)throw Error(`Failed to fetch active state`);i.value=n.data?ye(n.data):null}catch(e){y.value=e instanceof Error?e.message:`Unknown error`,b.value=`fetch`}finally{u.value=!1}}},j=async(e=3,t=1e3)=>{for(let n=0;n<e&&(await new Promise(e=>setTimeout(e,t)),await A(),!(i.value?.state===`active`||i.value?.state===`failed`||i.value?.state===`deactivated`));n++);};return{endpoints:S,bindings:C,activeState:i,fetchingEndpoints:a,fetchingBindings:l,fetchingActiveState:u,activating:d,deactivating:f,previewing:v,savingBinding:p,applyingDefaults:m,endpointsError:h,bindingsError:g,saveError:_,activationError:y,activationErrorSource:b,fetchEndpoints:w,fetchBindings:T,fetchActiveState:A,activate:async n=>{if(!e.value)throw Error(`Space ID is required`);d.value=!0,y.value=null,b.value=null,i.value={activityKey:n,state:`activating`};try{let{data:r,error:a}=await t.client.POST(`/${s}/${x}/spaces/{id}/media/activities/{activityKey}/activate`,{params:{path:{id:e.value,activityKey:n}}});if(a||!r||!r.data){let e=a?.message??`Failed to activate activity`;throw Error(e)}let o=J(r.data);return i.value=o,o.state===`activating`&&await j(),i.value??o}catch(e){throw y.value=e instanceof Error?e.message:`Unknown error`,b.value=`activate`,i.value={activityKey:n,state:`failed`},e}finally{d.value=!1}},preview:async n=>{if(!e.value)throw Error(`Space ID is required`);v.value=!0;try{let{data:r,error:i}=await t.client.POST(`/${s}/${x}/spaces/{id}/media/activities/{activityKey}/preview`,{params:{path:{id:e.value,activityKey:n}}});if(i||!r||!r.data){let e=i?.message??`Failed to preview activity`;throw Error(e)}return ve(r.data)}finally{v.value=!1}},deactivate:async()=>{if(!e.value)throw Error(`Space ID is required`);f.value=!0,y.value=null,b.value=null;try{let{data:n,error:r}=await t.client.POST(`/${s}/${x}/spaces/{id}/media/activities/deactivate`,{params:{path:{id:e.value}}});if(r||!n||!n.data){let e=r?.message??`Failed to deactivate`;throw Error(e)}let a=J(n.data);return i.value=a,a}catch(e){throw y.value=e instanceof Error?e.message:`Unknown error`,b.value=`deactivate`,e}finally{f.value=!1}},saveBinding:E,createBinding:D,deleteBinding:O,applyDefaults:k,endpointsByType:e=>o(()=>n.value.filter(t=>t.type===e)),findBindingByActivity:e=>r.value.find(t=>t.activityKey===e)}},Y=Symbol(`FB-Module-Scenes-ScenesStore`),Ce=Symbol(`FB-Module-Scenes-ScenesActionsStore`),we=e=>{let t=z().getStore(Y),{semaphore:n,firstLoad:r}=S(t),i=c(!1);return{scenes:o(()=>e.value?t.findBySpace(e.value).filter(e=>!e.draft).sort((e,t)=>e.name.localeCompare(t.name)):[]),loading:o(()=>!!(i.value||n.value.fetching.items||!r.value)),firstLoadFinished:o(()=>r.value),fetchScenes:async()=>{await t.fetch()},reassignScene:async(e,n)=>{i.value=!0;try{await t.edit({id:e,data:{primarySpaceId:n}})}finally{i.value=!1}},removeScene:async e=>{i.value=!0;try{await t.edit({id:e,data:{primarySpaceId:null}})}finally{i.value=!1}}}},Te=()=>{let{t:e}=i(),t=M(),n=z().getStore(L);return{remove:async r=>{let i=n.findById(r);return i?k.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 B&&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 k.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{}}}},X={search:void 0,type:`all`},Ee={by:`name`,dir:`asc`},De=()=>{let e=z().getStore(L),{firstLoad:n,semaphore:r}=S(e),{filters:i,sort:a,pagination:s,reset:l}=O({key:`${f}:spaces:list`,filters:{schema:se,defaults:X},sort:{defaults:[Ee]},pagination:{defaults:{page:1,size:10}},syncQuery:!0,version:1}),u=o(()=>i.value.search!==X.search||!(0,U.isEqual)(i.value.type,X.type)),d=c(s.value.size||10),p=c(s.value.page||1),m=c(a.value.length>0?a.value[0]?.by:void 0),h=c(a.value.length>0?a.value[0]?.dir??null:null),g=o(()=>ne(e.findAll().filter(e=>!e.draft&&(!i.value.search||e.id.toLowerCase().includes(i.value.search.toLowerCase())||e.name?.toLowerCase().includes(i.value.search.toLowerCase())||e.description?.toLowerCase().includes(i.value.search.toLowerCase()))&&(i.value.type===`all`||i.value.type===I.ROOM&&e.type===I.ROOM||i.value.type===I.ZONE&&e.type===I.ZONE)),[e=>{switch(m.value){case`name`:return e.name;case`type`:return e.type;case`displayOrder`:return e.displayOrder;default:return e.displayOrder}}],[h.value??`asc`])),_=o(()=>{let e=(p.value-1)*d.value,t=e+d.value;return g.value.slice(e,t)}),v=async()=>{await e.fetch()},y=o(()=>!!(r.value.fetching.items||!n.value)),b=o(()=>n.value),x=o(()=>e.findAll().filter(e=>!e.draft).length);return t(()=>s.value,e=>{p.value=e.page??1,d.value=e.size??10},{deep:!0}),t(()=>p.value,e=>{s.value.page=e}),t(()=>d.value,e=>{s.value.size=e}),t(()=>h.value,e=>{m.value===void 0||e===null?a.value=[]:a.value=[{by:m.value,dir:e}]}),t(()=>m.value,e=>{e===void 0?a.value=[]:a.value=[{by:e,dir:h.value}]}),{spaces:g,spacesPaginated:_,totalRows:x,areLoading:y,loaded:b,fetchSpaces:v,filters:i,filtersActive:u,paginateSize:d,paginatePage:p,sortBy:m,sortDir:h,resetFilter:l}};function Z(e){return e.trim().toLowerCase().replace(/[-_]/g,` `).replace(/\s+/g,` `).normalize(`NFD`).replace(/[\u0300-\u036f]/g,``)}var Oe=e=>{switch(e){case _.room:return I.ROOM;case _.zone:return I.ZONE;default:return I.ROOM}},Q=e=>{switch(e){case I.ROOM:return _.room;case I.ZONE:return _.zone;default:return _.room}},ke=e=>e||null,$=e=>{if(e)return e},Ae=()=>{let e=p(),{generate:t}=ee(),n=r({currentStep:0,existingSpaces:[],spaces:[],proposedSpaces:[],customSpaces:[],matchedSpaces:[],deviceAssignments:{},displayAssignments:{},zoneAssignments:{},showAdvancedZones:!1,isLoading:!1,error:null}),i=o(()=>n.isLoading),a=o(()=>n.error),s=o(()=>n.currentStep),c=o(()=>n.existingSpaces),l=o(()=>n.spaces),u=o(()=>n.proposedSpaces),d=o(()=>n.customSpaces),f=o(()=>n.matchedSpaces),m=o(()=>n.deviceAssignments),h=o(()=>n.displayAssignments),g=o(()=>n.zoneAssignments),_=o({get:()=>n.showAdvancedZones,set:e=>{n.showAdvancedZones=e}}),y=o(()=>x.value.filter(e=>e.type===I.ZONE&&e.category&&v.includes(e.category))),b=o(()=>n.proposedSpaces.filter(e=>!n.matchedSpaces.some(t=>Z(t.proposedName)===Z(e.name)))),x=o(()=>{let e=new Map;for(let t of n.existingSpaces)e.set(t.id,t);for(let t of n.spaces)e.set(t.id,t);return Array.from(e.values())}),S=async()=>{n.isLoading=!0,n.error=null;try{let r=await e.GET(`/modules/spaces/spaces/propose`);if(r.error||!r.data?.data)throw new B(`Failed to fetch proposed spaces`);let i=r.data.data.map(e=>{let n=ke(e.category),r=n?C[n]:null,i=r?.description??null,a=r?.icon??null,o=e.name??``;return{name:o,description:i,icon:a,deviceIds:e.device_ids??[],deviceCount:e.device_count??0,selected:!0,type:e.type?Oe(e.type):I.ROOM,category:n,draftId:t(),editing:!1,editName:o}});n.matchedSpaces=[];let a=[];for(let e of i){let t=Z(e.name),r=n.existingSpaces.find(e=>Z(e.name)===t);r?n.matchedSpaces.push({proposedName:e.name,existingSpace:r,deviceIds:e.deviceIds,deviceCount:e.deviceCount}):a.push(e)}n.proposedSpaces=a}catch(e){throw n.error=e instanceof Error?e.message:`Unknown error`,e}finally{n.isLoading=!1}},w=()=>{let e=[],t=n.proposedSpaces.filter(e=>e.selected),r=n.customSpaces.filter(e=>e.selected);for(let e of n.matchedSpaces)if(e.existingSpace.type===I.ROOM)for(let t of e.deviceIds)n.deviceAssignments[t]||(n.deviceAssignments[t]=e.existingSpace.id);for(let r of t){let t=n.spaces.find(e=>e.id===r.draftId);if(t){if(r.type===I.ROOM)for(let e of r.deviceIds)n.deviceAssignments[e]||(n.deviceAssignments[e]=t.id);continue}let i={id:r.draftId,name:r.name,description:r.description,type:r.type,category:r.category,icon:r.icon,displayOrder:0,parentId:null,suggestionsEnabled:!0,statusWidgets:null,createdAt:new Date,updatedAt:null,draft:!0};if(n.spaces=[...n.spaces,i],e.push(i),r.type===I.ROOM)for(let e of r.deviceIds)n.deviceAssignments[e]=i.id}for(let t of r){if(n.spaces.find(e=>e.id===t.draftId))continue;let r={id:t.draftId,name:t.name,description:t.description,type:t.type,category:t.category,icon:t.icon,displayOrder:0,parentId:null,suggestionsEnabled:!0,statusWidgets:null,createdAt:new Date,updatedAt:null,draft:!0};n.spaces=[...n.spaces,r],e.push(r)}return e},T=async()=>{n.isLoading=!0,n.error=null;let t=[];try{let r=n.spaces.filter(e=>e.draft),i=new Set(n.proposedSpaces.filter(e=>e.selected).map(e=>e.name)),a=new Set(n.customSpaces.map(e=>e.name)),o=new Set([...Object.values(n.deviceAssignments),...Object.values(n.displayAssignments)].filter(e=>e!==null));for(let s of r){let r=i.has(s.name),c=a.has(s.name),l=o.has(s.id);if(!r&&!c&&!l){n.spaces=n.spaces.filter(e=>e.id!==s.id);continue}let u=await e.POST(`/modules/spaces/spaces`,{body:{data:{name:s.name,description:s.description,icon:s.icon,type:Q(s.type),category:$(s.category)}}});if(u.error||!u.data?.data)throw new B(`Failed to create space: ${s.name}`);let d=V(u.data.data);for(let[e,t]of Object.entries(n.deviceAssignments))t===s.id&&(n.deviceAssignments[e]=d.id);for(let[e,t]of Object.entries(n.displayAssignments))t===s.id&&(n.displayAssignments[e]=d.id);for(let[e,t]of Object.entries(n.zoneAssignments))n.zoneAssignments[e]=t.map(e=>e===s.id?d.id:e);let f=n.spaces.findIndex(e=>e.id===s.id);f===-1?n.spaces=[...n.spaces,d]:n.spaces[f]=d,t.push(d)}return t}catch(e){throw n.error=e instanceof Error?e.message:`Unknown error`,e}finally{n.isLoading=!1}},E=async t=>{n.isLoading=!0,n.error=null;try{let r=await e.POST(`/modules/spaces/spaces`,{body:{data:{name:t.name,description:t.description,type:Q(t.type),category:$(t.category),icon:t.icon,display_order:t.displayOrder}}});if(r.error||!r.data?.data)throw new B(`Failed to create space`);let i=V(r.data.data);return n.spaces.push(i),i}catch(e){throw n.error=e instanceof Error?e.message:`Unknown error`,e}finally{n.isLoading=!1}},D=(e,t)=>{n.deviceAssignments[e]=t},O=(e,t)=>{n.displayAssignments[e]=t},k=async()=>{n.isLoading=!0,n.error=null;let t=0,r=0,i=0;try{let a={};for(let[e,t]of Object.entries(n.deviceAssignments))t&&(a[t]||(a[t]={deviceIds:[],displayIds:[]}),a[t].deviceIds.push(e));for(let[e,t]of Object.entries(n.displayAssignments))t&&(a[t]||(a[t]={deviceIds:[],displayIds:[]}),a[t].displayIds.push(e));for(let[n,i]of Object.entries(a)){let a=await e.POST(`/modules/spaces/spaces/{id}/assign`,{params:{path:{id:n}},body:{data:{device_ids:i.deviceIds,display_ids:i.displayIds}}});if(a.error)throw new B(`Failed to assign items to space ${n}`);a.data?.data&&(t+=a.data.data.devices_assigned??0,r+=a.data.data.displays_assigned??0)}for(let[t,r]of Object.entries(n.zoneAssignments))for(let n of r){if((await e.POST(`/modules/devices/devices/{id}/zones/{zoneId}`,{params:{path:{id:t,zoneId:n}}})).error)throw new B(`Failed to assign device ${t} to zone ${n}`);i++}return{devicesAssigned:t,displaysAssigned:r,zonesAssigned:i}}catch(e){throw n.error=e instanceof Error?e.message:`Unknown error`,e}finally{n.isLoading=!1}},A=e=>{n.currentStep=e},j=()=>{n.currentStep++},M=()=>{n.currentStep>0&&n.currentStep--},N=e=>{for(let[t,r]of Object.entries(n.deviceAssignments))r===e&&(n.deviceAssignments[t]=null);for(let[t,r]of Object.entries(n.displayAssignments))r===e&&(n.displayAssignments[t]=null)},P=e=>{let t=n.proposedSpaces[e];t&&(t.selected=!t.selected,t.selected||(n.spaces=n.spaces.filter(e=>e.id!==t.draftId),N(t.draftId)))},F=e=>{let t=n.customSpaces[e];t&&(t.selected=!t.selected,t.selected||(n.spaces=n.spaces.filter(e=>e.id!==t.draftId),N(t.draftId)))},L=e=>{let t=Z(e),r=n.existingSpaces.find(e=>Z(e.name)===t);if(r)return r.name;let i=n.proposedSpaces.find(e=>Z(e.name)===t);if(i)return i.name;let a=n.customSpaces.find(e=>Z(e.name)===t);return a?a.name:null};return{isLoading:i,error:a,currentStep:s,existingSpaces:c,spaces:l,proposedSpaces:u,customSpaces:d,matchedSpaces:f,unmatchedProposals:b,availableSpaces:x,deviceAssignments:m,displayAssignments:h,zoneAssignments:g,showAdvancedZones:_,assignableZones:y,fetchProposedSpaces:S,fetchDevices:async()=>{n.isLoading=!0,n.error=null;try{let t=await e.GET(`/modules/devices/devices`);if(t.error||!t.data?.data)throw new B(`Failed to fetch devices`);return t.data.data.map(e=>({id:e.id,name:e.name,description:e.description??null,spaceId:e.room_id??null}))}catch(e){throw n.error=e instanceof Error?e.message:`Unknown error`,e}finally{n.isLoading=!1}},fetchDisplays:async()=>{n.isLoading=!0,n.error=null;try{let t=await e.GET(`/modules/displays/displays`);if(t.error||!t.data?.data)throw new B(`Failed to fetch displays`);return t.data.data.map(e=>({id:e.id,name:e.name??null,macAddress:e.mac_address??``,role:e.role??`room`,roomId:e.room_id??null}))}catch(e){throw n.error=e instanceof Error?e.message:`Unknown error`,e}finally{n.isLoading=!1}},fetchExistingSpaces:async()=>{n.isLoading=!0,n.error=null;try{let t=await e.GET(`/modules/spaces/spaces`);if(t.error||!t.data?.data)throw new B(`Failed to fetch spaces`);let r=t.data.data.map(e=>V(e));return n.existingSpaces=r,r}catch(e){throw n.error=e instanceof Error?e.message:`Unknown error`,e}finally{n.isLoading=!1}},createDraftSpacesFromProposals:w,createSpacesFromProposals:T,createSpace:E,setDeviceAssignment:D,setDisplayAssignment:O,setDeviceZones:(e,t)=>{n.zoneAssignments[e]=t},applyAssignments:k,setStep:A,nextStep:j,prevStep:M,toggleProposedSpace:P,toggleCustomSpace:F,addManualSpace:e=>{let r=L(e);return r?{success:!1,duplicateOf:r}:(n.customSpaces.push({name:e,description:null,icon:null,selected:!0,type:I.ROOM,category:null,draftId:t(),editing:!1,editName:e}),{success:!0})},checkDuplicateSpaceName:L,removeProposedSpace:e=>{let t=n.proposedSpaces[e];t&&(n.spaces=n.spaces.filter(e=>e.id!==t.draftId),N(t.draftId)),n.proposedSpaces.splice(e,1)},removeCustomSpace:e=>{let t=n.customSpaces[e];t&&(n.spaces=n.spaces.filter(e=>e.id!==t.draftId),N(t.draftId)),n.customSpaces.splice(e,1)},startEditingProposedName:e=>{let t=n.proposedSpaces[e];t&&(t.editing=!0,t.editName=t.name)},confirmProposedNameEdit:e=>{let t=n.proposedSpaces[e];if(!t)return{success:!1};let r=t.editName.trim();if(!r)return t.editing=!1,t.editName=t.name,{success:!1};if(r===t.name)return t.editing=!1,{success:!0};let i=Z(r),a=n.existingSpaces.find(e=>Z(e.name)===i);if(a)return n.matchedSpaces.push({proposedName:r,existingSpace:a,deviceIds:t.deviceIds,deviceCount:t.deviceCount}),n.proposedSpaces.splice(e,1),{success:!0,convertedToMatch:!0};let o=n.proposedSpaces.find((t,n)=>n!==e&&Z(t.name)===i);if(o)return t.editing=!1,t.editName=t.name,{success:!1,duplicateOf:o.name};let s=n.customSpaces.find(e=>Z(e.name)===i);if(s)return t.editing=!1,t.editName=t.name,{success:!1,duplicateOf:s.name};t.name=r,t.editing=!1;let c=n.spaces.find(e=>e.id===t.draftId);return c&&(c.name=r),{success:!0}},discardProposedNameEdit:e=>{let t=n.proposedSpaces[e];t&&(t.editing=!1,t.editName=t.name)},startEditingCustomName:e=>{let t=n.customSpaces[e];t&&(t.editing=!0,t.editName=t.name)},confirmCustomNameEdit:e=>{let t=n.customSpaces[e];if(!t)return{success:!1};let r=t.editName.trim();if(!r)return t.editing=!1,t.editName=t.name,{success:!1};if(r===t.name)return t.editing=!1,{success:!0};let i=Z(r),a=n.existingSpaces.find(e=>Z(e.name)===i);if(a)return n.matchedSpaces.push({proposedName:r,existingSpace:a,deviceIds:[],deviceCount:0}),n.customSpaces.splice(e,1),{success:!0,convertedToMatch:!0};let o=n.proposedSpaces.find(e=>Z(e.name)===i);if(o)return t.editing=!1,t.editName=t.name,{success:!1,duplicateOf:o.name};let s=n.customSpaces.find((t,n)=>n!==e&&Z(t.name)===i);if(s)return t.editing=!1,t.editName=t.name,{success:!1,duplicateOf:s.name};t.name=r,t.editing=!1;let c=n.spaces.find(e=>e.id===t.draftId);return c&&(c.name=r),{success:!0}},discardCustomNameEdit:e=>{let t=n.customSpaces[e];t&&(t.editing=!1,t.editName=t.name)},initializeFromExistingSpaces:e=>{n.existingSpaces=[...e]},initializeDeviceAssignments:e=>{for(let t of e)n.deviceAssignments[t.id]=t.spaceId??null},initializeDisplayAssignments:e=>{for(let t of e)n.displayAssignments[t.id]=t.roomId??null},summary:o(()=>{let e=n.existingSpaces.length+n.spaces.length,t=Object.values(n.deviceAssignments).filter(e=>e!==null).length,r=Object.values(n.displayAssignments).filter(e=>e!==null).length,i=Object.values(n.deviceAssignments).filter(e=>e===null).length,a=Object.values(n.displayAssignments).filter(e=>e===null).length,o={},s={};for(let e of Object.values(n.deviceAssignments))e&&(o[e]=(o[e]??0)+1);for(let e of Object.values(n.zoneAssignments))for(let t of e)o[t]=(o[t]??0)+1;for(let e of Object.values(n.displayAssignments))e&&(s[e]=(s[e]??0)+1);return{spaceCount:e,assignedDevices:t,assignedDisplays:r,unassignedDevices:i,unassignedDisplays:a,devicesBySpace:o,displaysBySpace:s}})}},je=()=>{let t=e(P);return{climateSignal:t?.climate,lightingSignal:t?.lighting,coversSignal:t?.covers,sensorSignal:t?.sensor,climateStateSignal:t?.climateState,lightingStateSignal:t?.lightingState,coversStateSignal:t?.coversState,sensorStateSignal:t?.sensorState}};export{we as a,be as c,me as d,pe as f,oe as g,ue as h,Te as i,xe as l,de as m,Ae as n,Ce as o,fe as p,De as r,Y as s,je as t,Se as u};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./chunk-DECur_0Z.js";import{Nr as e,Xr as t,ci as n,d as r,fi as i,hi as a,mr as o,n as s,si as c,ui as l}from"./icon-with-child-DmQ_XhQy.js";import{Ct as u,Dr as d,Fn as f,Gn as p,Kn as m,Qn as h,Rr as g,Un as _,Va as v,Wn as y,an as b,ar as x,cn as S,d as C,di as w,dr as T,er as E,fr as D,g as O,gn as k,hr as A,ir as j,k as M,mr as N,n as P,p as F,pr as I,s as L,sn as R,tr as z,v as B,w as V,wn as H,x as U}from"./common-ODOYsFyB.js";import{a as W,i as ee,n as G,o as te,r as K}from"./keys-Cm97UJHM.js";import{t as ne}from"./useDevices-BW3E3-_x.js";import{n as re}from"./logs-entries.transformers-DfCpw1Mg.js";var ie=({id:e})=>{let t=V().getStore(K),{data:n,semaphore:r}=v(t);return{channel:o(()=>e===null?null:n.value[e]??null),isLoading:o(()=>r.value.fetching.item.includes(e)?!0:(n.value[e]??null)===null?r.value.fetching.items.includes(`all`):!1),fetchChannel:async()=>{(n.value[e]??null)?.draft||await t.get({id:e})}}},ae=(e={})=>{let{deviceId:t}=e,n=V().getStore(K),{firstLoad:r,semaphore:i}=v(n),a=t===void 0?void 0:typeof t==`string`?o(()=>t):t;return{channels:o(()=>n.findAll().filter(e=>!a?.value||e.device===a.value)),areLoading:o(()=>i.value.fetching.items.includes(a?.value??`all`)?!0:r.value.includes(a?.value??`all`)?!1:i.value.fetching.items.includes(a?.value??`all`)),loaded:o(()=>r.value.includes(a?.value??`all`)),fetchChannels:async()=>{await n.fetch({deviceId:a?.value})}}},oe=z({search:j().optional(),types:p(j()),state:_([`all`,`offline`,`online`]).default(`all`),states:p(h(d)),categories:p(h(T)),enabled:_([`all`,`enabled`,`disabled`]).default(`all`),validation:_([`all`,`valid`,`invalid`]).default(`all`)}),se=z({search:j().optional(),devices:p(j()),categories:p(h(D))}),ce=z({search:j().optional(),channels:p(j()),categories:p(h(I)),permissions:p(h(A)),dataTypes:p(h(N))}),q=f(),J={search:void 0,devices:[],categories:[]},le={by:`name`,dir:`asc`},ue=(e={})=>{let{deviceId:n}=e,r=V().getStore(K),{firstLoad:i,semaphore:a}=v(r),{filters:s,sort:c,pagination:u,reset:d}=C({key:`${b}:channels:list`,filters:{schema:se,defaults:J},sort:{defaults:[le]},pagination:{defaults:{page:1,size:10}},syncQuery:!0,version:1}),f=o(()=>s.value.search!==J.search||!(0,q.isEqual)(s.value.devices,J.devices)||!(0,q.isEqual)(s.value.categories,J.categories)),p=l(u.value.size||10),m=l(u.value.page||1),h=l(c.value.length>0?c.value[0]?.by:void 0),g=l(c.value.length>0?c.value[0]?.dir??null:null),_=o(()=>H(r.findAll().filter(e=>!n||e.device===n).filter(e=>!e.draft&&(!s.value.search||e.id.toLowerCase().includes(s.value.search.toLowerCase())||e.name.toLowerCase().includes(s.value.search.toLowerCase())||e.description?.toLowerCase().includes(s.value.search.toLowerCase())||e.identifier?.toLowerCase().includes(s.value.search.toLowerCase()))&&(s.value.categories.length===0||s.value.categories.includes(e.category))&&(s.value.devices.length===0||s.value.devices.includes(e.device))),[e=>e[h.value]??``],[g.value===`asc`?`asc`:`desc`])),y=o(()=>{let e=(m.value-1)*p.value,t=e+p.value;return _.value.slice(e,t)}),x=async()=>{await r.fetch({deviceId:n})},S=o(()=>a.value.fetching.items.includes(n??`all`)?!0:i.value.includes(n??`all`)?!1:a.value.fetching.items.includes(n??`all`)),w=o(()=>i.value.includes(n??`all`)),T=o(()=>r.findAll().filter(e=>!n||e.device===n).filter(e=>!e.draft).length);return t(()=>u.value,e=>{m.value=e.page??1,p.value=e.size??10},{deep:!0}),t(()=>m.value,e=>{u.value.page=e}),t(()=>p.value,e=>{u.value.size=e}),t(()=>g.value,e=>{h.value===void 0||e===null?c.value=[]:c.value=[{by:h.value,dir:e}]}),t(()=>h.value,e=>{e===void 0?c.value=[]:c.value=[{by:e,dir:g.value}]}),{channels:_,channelsPaginated:y,totalRows:T,areLoading:S,loaded:w,fetchChannels:x,filters:s,filtersActive:f,paginateSize:p,paginatePage:m,sortBy:h,sortDir:g,resetFilter:d}},Y=class extends Error{exception;constructor(e,t=null){super(e),this.name=`DevicesException`,this.exception=t}},X=class extends Y{code;constructor(e,t=null,n=null){super(e,n),this.name=`DevicesApiException`,this.code=t}},Z=class extends Y{constructor(e,t=null){super(e,t),this.name=`DevicesValidationException`}},de=()=>{let{t:e}=r(),t=O(),n=V().getStore(K),i=e=>n.findById(e);return{remove:async r=>{let a=i(r);if(a===null)throw new Y(`Something went wrong, channel can't be loaded`);w.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 X&&n.code===404){let n=e(`devicesModule.messages.channels.notFound`,{channel:a.name});t.error(n)}else if(n instanceof X&&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}))})}}},fe=({id:e})=>{let t=V().getStore(K);return{icon:o(()=>{switch(t.findById(e)?.category){default:return`mdi:chip`}})}},pe={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}}}},me={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}}}},he={[T.generic]:[],[T.air_conditioner]:[D.cooler,D.heater,D.fan,D.temperature,D.humidity,D.electrical_energy,D.electrical_power,D.leak,D.device_information],[T.air_dehumidifier]:[D.cooler,D.fan,D.temperature,D.humidity,D.electrical_energy,D.electrical_power,D.leak,D.device_information],[T.air_humidifier]:[D.humidity,D.switcher,D.temperature,D.fan,D.electrical_energy,D.electrical_power,D.leak,D.device_information],[T.air_purifier]:[D.fan,D.air_particulate,D.carbon_dioxide,D.carbon_monoxide,D.humidity,D.leak,D.nitrogen_dioxide,D.ozone,D.pressure,D.sulphur_dioxide,D.temperature,D.volatile_organic_compounds,D.electrical_energy,D.electrical_power,D.device_information],[T.alarm]:[D.alarm,D.device_information],[T.camera]:[D.camera,D.motion,D.microphone,D.speaker,D.contact,D.light,D.temperature,D.humidity,D.battery,D.device_information],[T.door]:[D.door,D.lock,D.contact,D.motion,D.battery,D.device_information],[T.doorbell]:[D.doorbell,D.camera,D.lock,D.motion,D.microphone,D.speaker,D.contact,D.light,D.battery,D.device_information],[T.fan]:[D.fan,D.electrical_energy,D.electrical_power,D.device_information],[T.heating_unit]:[D.heater,D.temperature,D.humidity,D.electrical_energy,D.electrical_power,D.device_information],[T.lighting]:[D.light,D.illuminance,D.electrical_energy,D.electrical_power,D.device_information],[T.lock]:[D.lock,D.contact,D.motion,D.battery,D.device_information],[T.media]:[D.media_input,D.media_playback,D.microphone,D.speaker,D.device_information],[T.av_receiver]:[D.media_input,D.media_playback,D.speaker,D.device_information],[T.game_console]:[D.media_playback,D.media_input,D.device_information],[T.projector]:[D.projector,D.speaker,D.media_playback,D.media_input,D.device_information],[T.set_top_box]:[D.media_input,D.media_playback,D.device_information],[T.streaming_service]:[D.media_playback,D.device_information],[T.outlet]:[D.outlet,D.electrical_energy,D.electrical_power,D.device_information],[T.pump]:[D.flow,D.switcher,D.leak,D.pressure,D.electrical_energy,D.electrical_power,D.device_information],[T.robot_vacuum]:[D.robot_vacuum,D.electrical_energy,D.electrical_power,D.leak,D.battery,D.device_information],[T.sensor]:[D.air_particulate,D.battery,D.carbon_dioxide,D.carbon_monoxide,D.contact,D.humidity,D.illuminance,D.leak,D.motion,D.nitrogen_dioxide,D.occupancy,D.ozone,D.pressure,D.smoke,D.sulphur_dioxide,D.temperature,D.volatile_organic_compounds,D.device_information],[T.speaker]:[D.speaker,D.media_input,D.media_playback,D.electrical_energy,D.electrical_power,D.device_information],[T.sprinkler]:[D.valve,D.flow,D.pressure,D.leak,D.humidity,D.electrical_energy,D.electrical_power,D.device_information],[T.switcher]:[D.switcher,D.electrical_energy,D.electrical_power,D.device_information],[T.television]:[D.television,D.speaker,D.media_playback,D.media_input,D.device_information],[T.terminal]:[D.button,D.indicator,D.buzzer,D.illuminance,D.accelerometer,D.temperature,D.contact,D.switcher,D.device_information],[T.thermostat]:[D.thermostat,D.cooler,D.heater,D.temperature,D.humidity,D.contact,D.electrical_energy,D.electrical_power,D.device_information],[T.valve]:[D.valve,D.pressure,D.flow,D.leak,D.battery,D.electrical_energy,D.electrical_power,D.device_information],[T.water_heater]:[D.heater,D.temperature,D.leak,D.electrical_energy,D.electrical_power,D.device_information],[T.window_covering]:[D.window_covering,D.battery,D.electrical_energy,D.electrical_power,D.device_information]},ge=Object.fromEntries(Object.entries(me).map(([e,t])=>{let n=Object.values(t.channels).map(e=>e.category),r=he[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]})),_e=Object.fromEntries(Object.entries(me).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)}])),ve=Object.fromEntries(Object.entries(pe).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)}])),ye=(e,t)=>{let n=pe[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}},be=({id:e})=>{let t=V(),n=t.getStore(K),r=t.getStore(G),i=e=>n.findById(e),a=e=>ve[e.category]??null;return{canAddAnotherProperty:o(()=>{let t=i(e);if(t===null)return!0;let{required:n,optional:o}=a(t)??{required:[],optional:[]},s=[...n,...o],c=r.findForChannel(t.id).map(e=>e.category);return s.filter(e=>!c.includes(e)).length>0}),missingRequiredProperties:o(()=>{let t=i(e);if(t===null)throw new Y(`Something went wrong, channel can't be loaded`);let{required:n}=a(t)??{required:[]},o=r.findForChannel(t.id).map(e=>e.category);return n.filter(e=>!o.includes(e))})}},xe=z({id:j().uuid().optional(),type:j().trim().nonempty(),device:j().uuid().optional(),category:h(D).default(D.generic),identifier:j().trim().nonempty().nullable().optional(),name:j().trim().nonempty(),description:j().trim().transform(e=>e===``?null:e).nullable().optional()}),Se=z({id:j().uuid(),type:j().trim().nonempty(),device:j().uuid(),category:h(D).default(D.generic),identifier:j().trim().nonempty().nullable().optional(),name:j().trim().nonempty().optional(),description:j().trim().transform(e=>e===``?null:e).nullable().optional()}),Ce=()=>{let e=M(),{enabled:t}=k(),n=[`channelAddForm`,`channelEditForm`],r=[`channelSchema`,`channelAddFormSchema`,`channelEditFormSchema`,`channelCreateReqSchema`,`channelUpdateReqSchema`],i=o(()=>e.getPlugins().filter(e=>e.modules===void 0||e.modules.includes(`devices-module`)?(e.elements??[]).some(e=>{if(!(e.modules===void 0||e.modules.includes(`devices-module`)))return!1;let t=n.length===0||!!e.components&&n.some(t=>e.components&&t in e.components),i=r.length===0||!!e.schemas&&r.some(t=>e.schemas&&t in e.schemas);return t||i}):!1));return{plugins:i,options:o(()=>H(i.value.flatMap(e=>(e.elements??[]).filter(e=>e.modules===void 0||e.modules.includes(`devices-module`)).map(n=>({value:n.type,label:n.name?.trim()?n.name:e.name,disabled:!t(e.type)}))),[e=>e.label],[`asc`])),getByName:e=>i.value.find(t=>t.type===e),getByType:e=>i.value.find(t=>(t.elements??[]).some(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`)))),getElement:e=>{for(let t of i.value){let n=(t.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`)));if(n)return n}}}},we=({type:e})=>{let{getByType:t}=Ce(),n=o(()=>t(e));return{plugin:n,element:o(()=>(n.value?.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`))))}},Te=({id:e,type:a,deviceId:s})=>{let c=V(),{element:u}=we({type:a}),d=c.getStore(K),{devices:f,fetchDevices:p,areLoading:m}=ne(),{t:h}=r(),g=O(),_=U(),v=l(S.NONE),y,b=o(()=>E.device?f.value.find(e=>e.id===E.device)??null:null),x=o(()=>b.value?d.findForDevice(b.value.id).map(e=>e.category):[]),C=o(()=>b.value?_e[b.value.category]??null:null),w=o(()=>C.value===null?[]:Object.values(D).filter(e=>C.value?.required.includes(e)||C.value?.optional.includes(e)).filter(e=>!x.value.includes(e)||C.value?.multiple?.includes(e)).map(e=>({value:e,label:h(`devicesModule.categories.channels.${e}`)}))),T=o(()=>f.value.filter(e=>e.type===a).map(e=>({value:e.id,label:e.name}))),E=n({...P(u.value?.schemas?.channelAddFormSchema||xe),id:e,type:a,device:s,category:D.generic,name:``,description:``}),k=F(i(E)),A=l(void 0),j=l(!1),M=async()=>{if(A.value.clearValidate(),!await A.value.validate())throw new Z(`Form not valid`);let t=s??E.device;if(!t)throw new Z(`Missing device identifier`);if(!E.category)throw new Z(`Missing data type definition`);let n=(u.value?.schemas?.channelAddFormSchema||xe).safeParse(E);if(!n.success)throw _.error(`Schema validation failed with:`,n.error),new Z(`Failed to validate create channel model.`);v.value=S.WORKING;let r=h(`devicesModule.messages.channels.notCreated`,{device:E.name});try{await d.add({id:e,deviceId:t,draft:!1,data:{...n.data,type:a}})}catch(e){throw v.value=S.ERROR,y=window.setTimeout(N,2e3),e instanceof X&&e.code===422?g.error(e.message):g.error(r),e}return v.value=S.OK,y=window.setTimeout(N,2e3),g.success(h(`devicesModule.messages.channels.created`,{device:E.name})),`added`},N=()=>{window.clearTimeout(y),v.value=S.NONE};return p().catch(()=>{}),t(E,()=>{j.value=!(0,q.isEqual)(i(E),k)}),t(()=>w.value,e=>{e.length&&e[0]&&(E.category=e[0].value,k.category=e[0].value)},{immediate:!0}),{categoriesOptions:w,devicesOptions:T,model:E,formEl:A,formChanged:j,submit:M,clear:N,formResult:v,loadingDevices:m}},Ee=({channel:e,messages:a})=>{let s=V(),{element:c}=we({type:e.type}),u=s.getStore(K),{devices:d,fetchDevices:f,areLoading:p}=ne(),{t:m}=r(),h=O(),g=U(),_=l(S.NONE),v,y=o(()=>d.value.find(t=>t.id===e.device)??null),b=o(()=>y.value?u.findForDevice(y.value.id).filter(t=>t.id!==e.id).map(e=>e.category):[]),x=o(()=>y.value?_e[y.value.category]??null:null),C=o(()=>x.value===null?[]:Object.values(D).filter(e=>x.value?.required.includes(e)||x.value?.optional.includes(e)).filter(e=>!b.value.includes(e)||x.value?.multiple?.includes(e)).map(e=>({value:e,label:m(`devicesModule.categories.channels.${e}`)}))),w=o(()=>d.value.map(e=>({value:e.id,label:e.name}))),T=n(e),E=F(i(T)),k=l(void 0),A=l(!1),j=async()=>{let t=e.draft,n=a&&a.error?a.error:e.draft?m(`devicesModule.messages.channels.notCreated`,{channel:e.name}):m(`devicesModule.messages.channels.notEdited`,{channel:e.name});if(k.value.clearValidate(),!await k.value.validate())throw new Z(`Form not valid`);let r=(c.value?.schemas?.channelEditFormSchema||Se).safeParse(T);if(!r.success)throw g.error(`Schema validation failed with:`,r.error),new Z(`Failed to validate edit channel model.`);_.value=S.WORKING;try{await u.edit({id:e.id,data:{...r.data,type:e.type}}),e.draft&&await u.save({id:e.id,deviceId:e.device})}catch(e){throw _.value=S.ERROR,v=window.setTimeout(M,2e3),e instanceof X&&e.code===422?h.error(e.message):h.error(n),e}return _.value=S.OK,v=window.setTimeout(M,2e3),t?(h.success(m(a&&a.success?a.success:`devicesModule.messages.channels.created`,{channel:e.name})),`added`):(h.success(m(a&&a.success?a.success:`devicesModule.messages.channels.edited`,{channel:e.name})),A.value=!1,E=F(i(T)),`saved`)},M=()=>{window.clearTimeout(v),_.value=S.NONE};return f().catch(()=>{}),t(T,()=>{A.value=!(0,q.isEqual)(i(T),E)}),{categoriesOptions:C,devicesOptions:w,model:T,formEl:k,formChanged:A,submit:j,clear:M,formResult:_,loadingDevices:p}},De=({channelId:e,id:t})=>{let n=V().getStore(G),{data:r,semaphore:i}=v(n);return{property:o(()=>t===null?null:r.value[t]??null),isLoading:o(()=>i.value.fetching.item.includes(t)?!0:(r.value[t]??null)===null?i.value.fetching.items.includes(e)||i.value.fetching.items.includes(`all`):!1),fetchProperty:async()=>{(r.value[t]??null)?.draft||await n.get({id:t,channelId:e})}}},Oe=({channelId:e})=>{let t=V().getStore(G),{firstLoad:n,semaphore:r}=v(t),i=typeof e==`string`?o(()=>e):e;return{properties:o(()=>t.findAll().filter(e=>!i?.value||e.channel===i.value)),areLoading:o(()=>i.value?r.value.fetching.items.includes(i.value)?!0:n.value.includes(i.value)?!1:r.value.fetching.items.includes(i.value):!1),loaded:o(()=>i.value?n.value.includes(i.value):!1),fetchProperties:async()=>{i.value&&await t.fetch({channelId:i.value})}}},Q={search:void 0,channels:[],categories:[],permissions:[],dataTypes:[]},ke={by:`category`,dir:`asc`},Ae=({channelId:e,key:n=`list`})=>{let r=V().getStore(G),{firstLoad:i,semaphore:a}=v(r),{filters:s,sort:c,pagination:u,reset:d}=C({key:`${b}:channels-properties:${n}`,filters:{schema:ce,defaults:Q},sort:{defaults:[ke]},pagination:{defaults:{page:1,size:10}},syncQuery:!0,version:1}),f=o(()=>s.value.search!==Q.search||!(0,q.isEqual)(s.value.channels,Q.channels)||!(0,q.isEqual)(s.value.categories,Q.categories)||!(0,q.isEqual)(s.value.permissions,Q.permissions)||!(0,q.isEqual)(s.value.dataTypes,Q.dataTypes)),p=l(u.value.size||10),m=l(u.value.page||1),h=l(c.value.length>0?c.value[0]?.by:void 0),g=l(c.value.length>0?c.value[0]?.dir??null:null),_=o(()=>H(r.findAll().filter(t=>!e||t.channel===e).filter(e=>!e.draft&&(!s.value.search||e.id?.toLowerCase().includes(s.value.search.toLowerCase())||e.name?.toLowerCase().includes(s.value.search.toLowerCase())||e.identifier?.toLowerCase().includes(s.value.search.toLowerCase()))&&(s.value.categories.length===0||s.value.categories.includes(e.category))&&(s.value.dataTypes.length===0||s.value.dataTypes.includes(e.dataType))&&(s.value.permissions.length===0||e.permissions.some(e=>s.value.permissions.includes(e)))),[e=>e[h.value]??``],[g.value===`asc`?`asc`:`desc`])),y=o(()=>{let e=(m.value-1)*p.value,t=e+p.value;return _.value.slice(e,t)}),x=async()=>{await r.fetch({channelId:e})},S=o(()=>a.value.fetching.items.includes(e)?!0:i.value.includes(e)?!1:a.value.fetching.items.includes(e)),w=o(()=>i.value.includes(e)),T=o(()=>r.findAll().filter(t=>!e||t.channel===e).filter(e=>!e.draft).length);return t(()=>u.value,e=>{m.value=e.page??1,p.value=e.size??10},{deep:!0}),t(()=>m.value,e=>{u.value.page=e}),t(()=>p.value,e=>{u.value.size=e}),t(()=>g.value,e=>{h.value===void 0||e===null?c.value=[]:c.value=[{by:h.value,dir:e}]}),t(()=>h.value,e=>{e===void 0?c.value=[]:c.value=[{by:e,dir:g.value}]}),{properties:_,propertiesPaginated:y,totalRows:T,areLoading:S,loaded:w,fetchProperties:x,filters:s,filtersActive:f,paginateSize:p,paginatePage:m,sortBy:h,sortDir:g,resetFilter:d}},je=()=>{let{t:e}=r(),t=O(),n=V().getStore(G);return{remove:async r=>{let i=n.findById(r);if(i===null)throw new Y(`Something went wrong, channel property can't be loaded`);w.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 X&&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 X&&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}`)}))})}}},Me=({id:e})=>{let t=V().getStore(G);return{icon:o(()=>{switch(t.findById(e)?.category){default:return`mdi:tune`}})}},Ne=z({id:j().uuid().optional(),type:j().trim().nonempty(),channel:j().uuid().optional(),category:h(I).default(I.generic),identifier:j().trim().nonempty().nullable().optional(),name:j().trim().nonempty().nullable(),permissions:p(h(A)),dataType:h(N),format:p(x([j(),x([E(),y()])])).nullable(),invalid:x([j(),E(),m(),y()]),step:x([j(),E()]).transform(e=>e===``?null:Number(e)).nullable(),enterValue:m().default(!1),value:x([j(),E(),m(),y()]).optional(),enumValues:p(j()),minValue:x([j(),E()]).transform(e=>e===``?void 0:Number(e)).optional(),maxValue:x([j(),E()]).transform(e=>e===``?void 0:Number(e)).optional()}),Pe=z({id:j().uuid(),type:j().trim().nonempty(),channel:j().uuid(),category:h(I).default(I.generic),identifier:j().trim().nonempty().nullable().optional(),name:j().trim().nonempty().nullable().optional(),permissions:p(h(A)),dataType:h(N),format:p(x([j(),x([E(),y()])])).nullable(),invalid:x([j(),E(),m(),y()]),step:x([j(),E()]).transform(e=>e===``?null:Number(e)).nullable(),enterValue:m().default(!1),value:x([j(),E(),m(),y()]).optional(),enumValues:p(j()),minValue:x([j(),E()]).transform(e=>e===``?void 0:Number(e)).optional(),maxValue:x([j(),E()]).transform(e=>e===``?void 0:Number(e)).optional()}),Fe=()=>{let e=M(),{enabled:t}=k(),n=[`channelPropertyAddForm`,`channelPropertyEditForm`],r=[`channelPropertySchema`,`channelPropertyAddFormSchema`,`channelPropertyEditFormSchema`,`channelPropertyCreateReqSchema`,`channelPropertyUpdateReqSchema`],i=o(()=>e.getPlugins().filter(e=>e.modules===void 0||e.modules.includes(`devices-module`)?(e.elements??[]).some(e=>{if(!(e.modules===void 0||e.modules.includes(`devices-module`)))return!1;let t=n.length===0||!!e.components&&n.some(t=>e.components&&t in e.components),i=r.length===0||!!e.schemas&&r.some(t=>e.schemas&&t in e.schemas);return t||i}):!1));return{plugins:i,options:o(()=>H(i.value.flatMap(e=>(e.elements??[]).filter(e=>e.modules===void 0||e.modules.includes(`devices-module`)).map(n=>({value:n.type,label:n.name?.trim()?n.name:e.name,disabled:!t(e.type)}))),[e=>e.label],[`asc`])),getByName:e=>i.value.find(t=>t.type===e),getByType:e=>i.value.find(t=>(t.elements??[]).some(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`)))),getElement:e=>{for(let t of i.value){let n=(t.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`)));if(n)return n}}}},Ie=({type:e})=>{let{getByType:t}=Fe(),n=o(()=>t(e));return{plugin:n,element:o(()=>(n.value?.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`))))}},Le=({id:e,type:a,channelId:s})=>{let c=V(),{element:u}=Ie({type:a}),d=c.getStore(G),{channels:f,fetchChannels:p,areLoading:m}=ae(),{t:h}=r(),g=O(),_=U(),v=l(S.NONE),y,b=o(()=>j.channel?f.value.find(e=>e.id===j.channel)??null:null),x=o(()=>b.value?d.findForChannel(b.value.id).map(e=>e.category):[]),C=o(()=>b.value?ve[b.value.category]??null:null),w=o(()=>C.value===null?[]:Object.values(I).filter(e=>C.value?.required.includes(e)||C.value?.optional.includes(e)).filter(e=>!x.value.includes(e)).map(e=>({value:e,label:h(`devicesModule.categories.channelsProperties.${e}`)}))),T=o(()=>f.value.map(e=>({value:e.id,label:e.name}))),E=Object.values(A).map(e=>({value:e,label:h(`devicesModule.permissions.${e}`)})),k=Object.values(N).map(e=>({value:e,label:h(`devicesModule.dataTypes.${e}`)})),j=n({...P(u.value?.schemas?.channelPropertyAddFormSchema||Ne),id:e,type:a,channel:s,category:I.generic,name:``,permissions:[],dataType:N.unknown,format:null,invalid:null,step:null,enumValues:[],minValue:void 0,maxValue:void 0,enterValue:!1,value:void 0}),M=F(i(j)),L=l(void 0),R=l(!1),z=async()=>{if(L.value.clearValidate(),!await L.value.validate())throw new Z(`Form not valid`);let t=s??j.channel;if(!t)throw new Z(`Missing channel identifier`);if(j.name===``&&(j.name=null),!j.category)throw new Z(`Missing data type definition`);j.dataType===N.enum?j.format=j.enumValues:[N.char,N.uchar,N.short,N.ushort,N.int,N.uint,N.float].includes(j.dataType)&&(j.format=[typeof j.minValue==`string`&&j.minValue!==``?Number(j.minValue):typeof j.minValue==`number`?j.minValue:null,typeof j.maxValue==`string`&&j.maxValue!==``?Number(j.maxValue):typeof j.maxValue==`number`?j.maxValue:null]),j.enterValue||delete j.value;let n=(u.value?.schemas?.channelPropertyAddFormSchema||Ne).safeParse(j);if(!n.success)throw _.error(`Schema validation failed with:`,n.error),new Z(`Failed to validate create channel property model.`);v.value=S.WORKING;let r=h(`devicesModule.messages.channelsProperties.notCreated`,{device:j.name});try{await d.add({id:e,channelId:t,draft:!1,data:{...n.data,type:a}})}catch(e){throw v.value=S.ERROR,y=window.setTimeout(B,2e3),e instanceof X&&e.code===422?g.error(e.message):g.error(r),e}return v.value=S.OK,y=window.setTimeout(B,2e3),g.success(h(`devicesModule.messages.channelsProperties.created`,{device:j.name})),`added`},B=()=>{window.clearTimeout(y),v.value=S.NONE};return p().catch(()=>{}),t(j,()=>{R.value=!(0,q.isEqual)(i(j),M)}),t(()=>j.category,e=>{let t=ye(b.value?.category??D.generic,e);t&&(M.permissions=t.permissions,M.dataType=t.data_type,j.permissions=t.permissions,j.dataType=t.data_type,t.invalid!==void 0&&(M.invalid=t.invalid,j.invalid=t.invalid),t.step!==void 0&&(M.step=t.step,j.step=t.step),M.dataType===N.enum?(M.enumValues=t.format??[],M.minValue=void 0,M.maxValue=void 0,j.enumValues=t.format??[],j.minValue=void 0,j.maxValue=void 0):[N.char,N.uchar,N.short,N.ushort,N.int,N.uint,N.float].includes(j.dataType)?(M.enumValues=[],M.minValue=t.format?.[0],M.maxValue=t.format?.[1],j.enumValues=[],j.minValue=t.format?.[0],j.maxValue=t.format?.[1]):(M.enumValues=[],M.minValue=void 0,M.maxValue=void 0,j.enumValues=[],j.minValue=void 0,j.maxValue=void 0),R.value=!(0,q.isEqual)(i(j),M))},{immediate:!0}),t(()=>w.value,e=>{e.length&&e[0]&&(j.category=e[0].value,M.category=e[0].value)},{immediate:!0}),{categoriesOptions:w,channelsOptions:T,permissionsOptions:E,dataTypesOptions:k,model:j,formEl:L,formChanged:R,submit:z,clear:B,formResult:v,loadingChannels:m}},Re=({property:e,messages:a})=>{let s=V(),{element:c}=Ie({type:e.type}),u=s.getStore(G),{channels:d,fetchChannels:f,areLoading:p}=ae(),{t:m}=r(),h=O(),g=U(),_=l(S.NONE),v,y=[],b,x;e.dataType===N.enum?y=e.format?e.format.map(e=>e?.toString()||``):[]:[N.char,N.uchar,N.short,N.ushort,N.int,N.uint,N.float].includes(e.dataType)&&Array.isArray(e.format)&&e.format.length===2&&(b=e.format[0],x=e.format[1]);let C=o(()=>d.value.find(t=>t.id===e.channel)??null),w=o(()=>C.value?u.findForChannel(C.value.id).filter(t=>t.id!==e.id).map(e=>e.category):[]),T=o(()=>C.value?ve[C.value.category]??null:null),E=o(()=>T.value===null?[]:Object.values(I).filter(e=>T.value?.required.includes(e)||T.value?.optional.includes(e)).filter(e=>!w.value.includes(e)).map(e=>({value:e,label:m(`devicesModule.categories.channelsProperties.${e}`)}))),D=o(()=>d.value.map(e=>({value:e.id,label:e.name}))),k=Object.values(A).map(e=>({value:e,label:m(`devicesModule.permissions.${e}`)})),j=Object.values(N).map(e=>({value:e,label:m(`devicesModule.dataTypes.${e}`)})),M=n({...e,format:i(e.format),value:e.value?.value??null,enumValues:y,minValue:b,maxValue:x,enterValue:!1}),P=F(i(M)),L=l(void 0),R=l(!1),z=async()=>{let t=e.draft,n=a&&a.error?a.error:e.draft?m(`devicesModule.messages.channelsProperties.notCreated`,{property:e.name??m(`devicesModule.categories.channelsProperties.${e.category}`)}):m(`devicesModule.messages.channelsProperties.notEdited`,{property:e.name??m(`devicesModule.categories.channelsProperties.${e.category}`)});if(L.value.clearValidate(),!await L.value.validate())throw new Z(`Form not valid`);M.name===``&&(M.name=null),e.dataType===N.enum?M.format=M.enumValues:[N.char,N.uchar,N.short,N.ushort,N.int,N.uint,N.float].includes(e.dataType)&&(M.format=[M.minValue??null,M.maxValue??null]),M.enterValue||delete M.value;let r=(c.value?.schemas?.channelPropertyEditFormSchema||Pe).safeParse(M);if(!r.success)throw g.error(`Schema validation failed with:`,r.error),new Z(`Failed to validate edit channel property model.`);_.value=S.WORKING;try{await u.edit({id:e.id,channelId:e.channel,data:{...r.data,type:e.type}}),e.draft&&await u.save({id:e.id,channelId:e.channel})}catch(e){throw _.value=S.ERROR,v=window.setTimeout(B,2e3),e instanceof X&&e.code===422?h.error(e.message):h.error(n),e}return _.value=S.OK,v=window.setTimeout(B,2e3),t?(h.success(m(a&&a.success?a.success:`devicesModule.messages.channelsProperties.created`,{property:e.name??m(`devicesModule.categories.channelsProperties.${e.category}`)})),`added`):(h.success(m(a&&a.success?a.success:`devicesModule.messages.channelsProperties.edited`,{property:e.name??m(`devicesModule.categories.channelsProperties.${e.category}`)})),R.value=!1,P=F(i(M)),`saved`)},B=()=>{window.clearTimeout(v),_.value=S.NONE};return f().catch(()=>{}),t(M,()=>{R.value=!(0,q.isEqual)(i(M),P)}),{categoriesOptions:E,channelsOptions:D,permissionsOptions:k,dataTypesOptions:j,model:M,formEl:L,formChanged:R,submit:z,clear:B,formResult:_,loadingChannels:p}},ze=({id:e})=>{let t=V().getStore(W),{data:n,semaphore:r}=v(t);return{device:o(()=>e===null?null:n.value[e]??null),isLoading:o(()=>r.value.fetching.item.includes(e)?!0:(n.value[e]??null)===null?r.value.fetching.items:!1),fetchDevice:async()=>{(n.value[e]??null)?.draft||await t.get({id:e})}}},$={search:void 0,types:[],state:`all`,states:[],categories:[],enabled:`all`,validation:`all`},Be={by:`name`,dir:`asc`},Ve=()=>{let e=V(),n=e.getStore(W),r=e.getStore(te),{firstLoad:i,semaphore:a}=v(n),{filters:s,sort:c,pagination:u,reset:f}=C({key:`${b}:devices:list`,filters:{schema:oe,defaults:$},sort:{defaults:[Be]},pagination:{defaults:{page:1,size:10}},syncQuery:!0,version:1}),p=o(()=>s.value.search!==$.search||!(0,q.isEqual)(s.value.types,$.types)||s.value.state!==$.state||!(0,q.isEqual)(s.value.states,$.states)||!(0,q.isEqual)(s.value.categories,$.categories)||!(0,q.isEqual)(s.value.enabled,$.enabled)||s.value.validation!==$.validation),m=l(u.value.size||10),h=l(u.value.page||1),g=l(c.value.length>0?c.value[0]?.by:void 0),_=l(c.value.length>0?c.value[0]?.dir??null:null),y=e=>r.findById(e)?.isValid??null,x=o(()=>H(n.findAll().filter(e=>!e.draft&&(!s.value.search||e.id.toLowerCase().includes(s.value.search.toLowerCase())||e.name.toLowerCase().includes(s.value.search.toLowerCase())||e.description?.toLowerCase().includes(s.value.search.toLowerCase())||e.identifier?.toLowerCase().includes(s.value.search.toLowerCase()))&&(s.value.types.length===0||s.value.types.includes(e.type))&&(s.value.categories.length===0||s.value.categories.includes(e.category))&&(s.value.enabled===`all`||s.value.enabled===`enabled`&&e.enabled||s.value.enabled===`disabled`&&!e.enabled)&&(s.value.states.length===0||s.value.states.includes(e.status?.status??d.unknown))&&(s.value.state===`all`||s.value.state===`online`&&[d.ready,d.connected,d.running].includes(e.status.status)||s.value.state===`offline`&&[d.disconnected,d.stopped,d.lost,d.unknown].includes(e.status.status))&&(s.value.validation===`all`||s.value.validation===`valid`&&y(e.id)===!0||s.value.validation===`invalid`&&y(e.id)===!1)),[e=>g.value===`state`?e.status?.status??d.unknown:e[g.value]??``],[_.value===`asc`?`asc`:`desc`])),S=o(()=>{let e=(h.value-1)*m.value,t=e+m.value;return x.value.slice(e,t)}),w=async()=>{await n.fetch()},T=o(()=>a.value.fetching.items||!i.value),E=o(()=>i.value),D=o(()=>n.findAll().filter(e=>!e.draft).length);return t(()=>u.value,e=>{h.value=e.page??1,m.value=e.size??10},{deep:!0}),t(()=>h.value,e=>{u.value.page=e}),t(()=>m.value,e=>{u.value.size=e}),t(()=>_.value,e=>{g.value===void 0||e===null?c.value=[]:c.value=[{by:g.value,dir:e}]}),t(()=>g.value,e=>{e===void 0?c.value=[]:c.value=[{by:e,dir:_.value}]}),{devices:x,devicesPaginated:S,totalRows:D,areLoading:T,loaded:E,fetchDevices:w,filters:s,filtersActive:p,paginateSize:m,paginatePage:h,sortBy:g,sortDir:_,resetFilter:f}},He=()=>{let{t:e}=r(),t=O(),n=V().getStore(W);return{remove:async r=>{let i=n.findById(r);if(i===null)throw new Y(`Something went wrong, device can't be loaded`);w.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 X&&n.code===404){let n=e(`devicesModule.messages.devices.notFound`,{device:i.name});t.error(n)}else if(n instanceof X&&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 w.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 w.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 w.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 t=V().getStore(W);return{icon:o(()=>{switch(t.findById(e)?.category){default:return`mdi:devices`}})}},We=({id:e})=>{let t=V(),n=t.getStore(W),r=t.getStore(K),i=e=>n.findById(e),a=e=>_e[e.category]??null;return{canAddAnotherChannel:o(()=>{let t=i(e);if(t===null)return!0;let{required:n,optional:o,multiple:s}=a(t)??{required:[],optional:[]},c=[...n,...o],l=r.findForDevice(t.id).map(e=>e.category);return c.filter(e=>!l.includes(e)).length>0||s!==void 0&&s.length>0}),missingRequiredChannels:o(()=>{let t=i(e);if(t===null)throw new Y(`Something went wrong, device can't be loaded`);let{required:n}=a(t)??{required:[]},o=r.findForDevice(t.id).map(e=>e.category);return n.filter(e=>!o.includes(e))})}},Ge=z({id:j().uuid().optional(),type:j().trim().nonempty(),category:h(T).default(T.generic),identifier:j().trim().nonempty().nullable().optional(),name:j().trim().nonempty(),description:j().trim().transform(e=>e===``?null:e).nullable().optional(),enabled:m().default(!0).optional()}),Ke=z({id:j().uuid(),type:j().trim().nonempty(),category:h(T).default(T.generic),identifier:j().trim().nonempty().nullable().optional(),name:j().trim().nonempty().optional(),description:j().trim().transform(e=>e===``?null:e).nullable().optional(),enabled:m().optional(),roomId:j().uuid().nullable().optional()}),qe=()=>{let e=M(),{enabled:t}=k(),n=[`deviceAddForm`,`deviceEditForm`],r=[`deviceSchema`,`deviceAddFormSchema`,`deviceEditFormSchema`,`deviceCreateReqSchema`,`deviceUpdateReqSchema`],i=o(()=>e.getPlugins().filter(e=>e.modules===void 0||e.modules.includes(`devices-module`)?(e.elements??[]).some(e=>{if(!(e.modules===void 0||e.modules.includes(`devices-module`)))return!1;let t=n.length===0||!!e.components&&n.some(t=>e.components&&t in e.components),i=r.length===0||!!e.schemas&&r.some(t=>e.schemas&&t in e.schemas);return t||i}):!1));return{plugins:i,options:o(()=>H(i.value.flatMap(e=>(e.elements??[]).filter(e=>e.modules===void 0||e.modules.includes(`devices-module`)).map(n=>({value:n.type,label:n.name?.trim()?n.name:e.name,disabled:!t(e.type)}))),[e=>e.label],[`asc`])),getByName:e=>i.value.find(t=>t.type===e),getByType:e=>i.value.find(t=>(t.elements??[]).some(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`)))),getElement:e=>{for(let t of i.value){let n=(t.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`)));if(n)return n}}}},Je=({type:e})=>{let{getByType:t}=qe(),n=o(()=>t(e));return{plugin:n,element:o(()=>(n.value?.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`))))}},Ye=({id:e,type:a})=>{let o=V(),{element:s}=Je({type:a}),c=o.getStore(W),{t:u}=r(),d=O(),f=U(),p=l(S.NONE),m,h=Object.values(T).map(e=>({value:e,label:u(`devicesModule.categories.devices.${e}`)})),g=n({...P(s.value?.schemas?.deviceAddFormSchema||Ge),id:e,type:a,category:T.generic,name:``,description:``}),_=F(i(g)),v=l(void 0),y=l(!1),b=async()=>{if(v.value.clearValidate(),!await v.value.validate())throw new Z(`Form not valid`);let t=(s.value?.schemas?.deviceAddFormSchema||Ge).safeParse(g);if(!t.success)throw f.error(`Schema validation failed with:`,t.error),new Z(`Failed to validate create device model.`);p.value=S.WORKING;let n=u(`devicesModule.messages.devices.notCreated`,{device:g.name});try{await c.add({id:e,draft:!1,data:{...t.data,type:a}})}catch(e){throw p.value=S.ERROR,m=window.setTimeout(x,2e3),e instanceof X&&e.code===422?d.error(e.message):d.error(n),e}return p.value=S.OK,m=window.setTimeout(x,2e3),d.success(u(`devicesModule.messages.devices.created`,{device:g.name})),`added`},x=()=>{window.clearTimeout(m),p.value=S.NONE};return t(g,()=>{y.value=!(0,q.isEqual)(i(g),_)}),{categoriesOptions:h,model:g,formEl:v,formChanged:y,submit:b,clear:x,formResult:p}},Xe=({device:e,messages:a})=>{let o=V(),{element:s}=Je({type:e.type}),c=o.getStore(W),{t:u}=r(),d=O(),f=U(),p=l(S.NONE),m,h=Object.values(T).map(e=>({value:e,label:u(`devicesModule.categories.devices.${e}`)})),g=n(e),_=F(i(g)),v=l(void 0),y=l(!1),b=async()=>{let t=e.draft,n=a&&a.error?a.error:e.draft?u(`devicesModule.messages.devices.notCreated`,{device:e.name}):u(`devicesModule.messages.devices.notEdited`,{device:e.name});if(v.value.clearValidate(),!await v.value.validate())throw new Z(`Form not valid`);let r=(s.value?.schemas?.deviceEditFormSchema||Ke).safeParse(g);if(!r.success)throw f.error(`Schema validation failed with:`,r.error),new Z(`Failed to validate edit device model.`);p.value=S.WORKING;try{await c.edit({id:e.id,data:{...r.data,type:e.type}}),e.draft&&await c.save({id:e.id})}catch(e){throw p.value=S.ERROR,m=window.setTimeout(x,2e3),e instanceof X&&e.code===422?d.error(e.message):d.error(n),e}return p.value=S.OK,m=window.setTimeout(x,2e3),t?(d.success(u(a&&a.success?a.success:`devicesModule.messages.devices.created`,{device:e.name})),`added`):(d.success(u(a&&a.success?a.success:`devicesModule.messages.devices.edited`,{device:e.name})),y.value=!1,_=F(i(g)),`saved`)},x=()=>{window.clearTimeout(m),p.value=S.NONE};return t(g,()=>{y.value=!(0,q.isEqual)(i(g),_)}),{categoriesOptions:h,model:g,formEl:v,formChanged:y,submit:b,clear:x,formResult:p}},Ze=()=>{let e=V().getStore(te),{data:t,semaphore:n,firstLoad:r}=v(e);return{validation:o(()=>t.value),summary:o(()=>t.value?.summary??null),invalidDevices:o(()=>t.value?t.value.devices.filter(e=>!e.isValid):[]),isLoading:o(()=>n.value.fetching.items),isLoaded:o(()=>r.value),fetchValidation:async()=>{await e.fetch()},findById:t=>e.findById(t),isDeviceValid:t=>{let n=e.findById(t);return n?n.isValid:null},getDeviceIssueCount:t=>{let n=e.findById(t);return n?n.issues.length:0}}},Qe=({id:e})=>{let t=V().getStore(te),{semaphore:n}=v(t);return{validation:o(()=>t.findById(e)),isValid:o(()=>{let n=t.findById(e);return n?n.isValid:null}),issues:o(()=>{let n=t.findById(e);return n?n.issues:[]}),errorCount:o(()=>{let n=t.findById(e);return n?n.issues.filter(e=>e.severity===`error`).length:0}),warningCount:o(()=>{let n=t.findById(e);return n?n.issues.filter(e=>e.severity===`warning`).length:0}),isLoading:o(()=>n.value.fetching.item.includes(e)),fetchValidation:async()=>{await t.get({id:e})}}},$e=300,et=1e4,tt=({id:n})=>{let r=V(),i=r.getStore(W),a=r.getStore(K),s=r.getStore(G),{data:c,semaphore:u}=v(i),{data:d,semaphore:f,firstLoad:p}=v(a),{semaphore:m,firstLoad:h}=v(s),{sendCommand:g}=L(),_={},y={},b={},x=l({}),S=l({}),C=o(()=>n===null?null:c.value[n]??null),w=o(()=>Object.values(d.value).filter(e=>e.device===n&&e.category!==D.device_information)),T=o(()=>w.value.filter(e=>s.findForChannel(e.id).some(e=>e.permissions.includes(A.rw)||e.permissions.includes(A.wo)))),E=o(()=>T.value.length>0),O=e=>s.findForChannel(e),k=e=>e.permissions.includes(A.rw)||e.permissions.includes(A.wo),j=e=>{let t=x.value[e];return t===void 0?s.findById(e)?.value?.value??null:t},M=e=>S.value[e]??!1,N=(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])},P=(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)},F=async(e,t,r)=>s.findById(t)?(_[t]&&(clearTimeout(_[t]),delete _[t],y[t]&&(y[t](!1),delete y[t])),x.value[t]=r,new Promise(i=>{y[t]=i;let a=setTimeout(async()=>{delete y[t],S.value[t]=!0;try{await g(R.CHANNEL_PROPERTY_SET,{context:{origin:`admin`},properties:[{device:n,channel:e,property:t,value:r}]},`DevicesModule.Internal.SetPropertyValue`)===!0?(P(t,r),i(!0)):(N(t,r),i(!1))}catch{N(t,r),i(!1)}finally{S.value[t]=!1,_[t]===a&&delete _[t]}},$e);_[t]=a})):!1,I=async()=>{(n in c.value?c.value[n]:null)?.draft||await i.get({id:n})},z=async()=>{await a.fetch({deviceId:n})},B=async()=>{let e=Object.values(d.value).filter(e=>e.device===n);for(let t of e)await s.fetch({channelId:t.id})},H=o(()=>{if(u.value.fetching.item.includes(n)||f.value.fetching.items.includes(n))return!0;for(let e of w.value)if(m.value.fetching.items.includes(e.id))return!0;return!1}),U=o(()=>p.value.includes(n)),ee=o(()=>{if(!U.value)return!1;for(let e of w.value)if(!h.value.includes(e.id))return!1;return!0});return t(()=>{let e={};for(let t of Object.keys(x.value)){let n=s.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))&&N(t)}},{deep:!0}),e(()=>{for(let e of Object.keys(_))clearTimeout(_[e]),delete _[e],y[e]&&(y[e](!1),delete y[e]);for(let e of Object.keys(b))clearTimeout(b[e]),delete b[e]}),{device:C,channels:w,controllableChannels:T,hasControllableProperties:E,isLoading:H,areChannelsLoaded:U,arePropertiesLoaded:ee,fetchDevice:I,fetchChannels:z,fetchProperties:B,getPropertiesForChannel:O,isPropertyWritable:k,getPropertyValue:j,isPropertyLoading:M,setPropertyValue:F}},nt=({deviceId:e})=>{let t=V().getStore(ee),{firstLoad:n,semaphore:r}=v(t);return{controls:o(()=>t.findForDevice(e)),areLoading:o(()=>r.value.fetching.items.includes(e)),loaded:o(()=>n.value.includes(e)),fetchControls:async()=>t.fetch({deviceId:e})}},rt=e=>{let n=B(),r=U(),i=l({}),d=l(!1),f=l(!1),p=l(!1),m=l(void 0),h=l(!1),_=null,v=0,y=o(()=>Object.values(i.value).sort((e,t)=>new Date(t.ts).getTime()-new Date(e.ts).getTime())),b=o(()=>{let e=[g.warn,g.error,g.fatal,g.fail];return y.value.filter(t=>e.includes(t.type))}),x=o(()=>b.value.length),S=o(()=>x.value>0),C=async()=>{let t=a(e.deviceId);_=t,v++;let o=v;f.value=!0;try{let{data:e,error:a}=await n.client.GET(`/${s}/${u}/logs`,{params:{query:{resource:t,limit:50}}});if(_!==t||v!==o)return;e===void 0?a&&r.error(`Failed to fetch device logs:`,a):(i.value=Object.fromEntries(e.data.map(e=>{let t=re(e);return[t.id,t]})),p.value=!0,d.value=e.metadata.has_more,m.value=e.metadata.next_cursor)}catch(e){_===t&&v===o&&r.error(`Error fetching device logs:`,e)}finally{_===t&&v===o&&(f.value=!1)}},w=async()=>{if(f.value||!d.value||!m.value)return;let t=a(e.deviceId),o=m.value,c=v;f.value=!0;try{let{data:e,error:a}=await n.client.GET(`/${s}/${u}/logs`,{params:{query:{resource:t,after_id:o,limit:50}}});if(_!==t||v!==c)return;if(e!==void 0){let t=Object.fromEntries(e.data.map(e=>{let t=re(e);return[t.id,t]}));i.value={...i.value,...t},d.value=e.metadata.has_more,m.value=e.metadata.next_cursor}else a&&r.error(`Failed to load more device logs:`,a)}catch(e){_===t&&v===c&&r.error(`Error loading more device logs:`,e)}finally{_===t&&v===c&&(f.value=!1)}},T=async()=>{i.value={},m.value=void 0,d.value=!1,p.value=!1,await C()},E=null;return t(()=>h.value,e=>{E&&=(clearInterval(E),null),e&&(E=setInterval(()=>{f.value||C()},3e3))}),c(()=>{E&&=(clearInterval(E),null)}),t(()=>a(e.deviceId),()=>{T()}),{logs:y,alertLogs:b,alertCount:x,hasAlerts:S,hasMore:d,isLoading:f,loaded:p,live:h,fetchLogs:C,loadMoreLogs:w,refreshLogs:T}};export{be as A,ie as B,je as C,Ee as D,De as E,X as F,Y as I,Z as L,ye as M,fe as N,Te as O,de as P,ue as R,Me as S,Oe as T,Re as _,Ze as a,Ne as b,Je as c,Ke as d,We as f,ze as g,Ve as h,Qe as i,ge as j,Ce 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,Ae as w,Pe as x,Fe as y,ae as z};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./chunk-DECur_0Z.js";import{Nr as e,Xr as t,ci as n,d as r,fi as i,mr as a,n as o,ui as s}from"./icon-with-child-DmQ_XhQy.js";import{Lr as c,Mn as l,Pn as u,S as d,T as f,Ur as p,Wn as m,_ as h,ba as g,f as _,m as v,pn as y,qn as b,wn as x,y as S}from"./common-DbM7ZsAB.js";import{t as C}from"./keys-DWeeqbdi.js";var w=e=>{let n=f().getStore(C),{tokenRefreshTriggers:r}=g(n),i=d(),o=s([]),l=a(()=>e.value===null?null:n?.findById(e.value)??null),u=a(()=>e.value===null?!1:n?.getting(e.value)??!1),p=async()=>{if(e.value!==null)try{await n?.get({id:e.value})}catch(e){i.error(`Failed to fetch display:`,e)}},m=async()=>{if(e.value!==null)try{o.value=await n?.getTokens({id:e.value})??[]}catch(e){i.error(`Failed to fetch display tokens:`,e),o.value=[]}};return c(a(()=>{if(e.value===null||!n)return 0;let t=r.value;return!t||typeof t!=`object`?0:t[e.value]??0}),async()=>{if(e.value!==null)try{await m()}catch(e){i.error(`Failed to refresh tokens:`,e)}},{debounce:300}),t(()=>e.value,async e=>{if(e!==null&&n?.findById(e)===null)try{await p()}catch(e){i.error(`Failed to fetch display on id change:`,e)}},{immediate:!0}),{display:l,tokens:o,isLoading:u,fetchDisplay:p,fetchTokens:m,revokeToken:async()=>{if(e.value===null)return!1;let t=await n?.revokeToken({id:e.value});return t&&(o.value=[]),t??!1}}},T=`displays`,E=`displays-module`,D=`DisplaysModule.`,O=function(e){return e.DISPLAY_CREATED=`DisplaysModule.Display.Created`,e.DISPLAY_UPDATED=`DisplaysModule.Display.Updated`,e.DISPLAY_DELETED=`DisplaysModule.Display.Deleted`,e.DISPLAY_TOKEN_REVOKED=`DisplaysModule.Display.TokenRevoked`,e}({}),k=function(e){return e.NONE=`none`,e.WORKING=`working`,e.ERROR=`error`,e.OK=`ok`,e}({}),A={DISPLAYS:`displays_module-displays`,DISPLAYS_EDIT:`displays_module-displays_edit`,DISPLAY:`displays_module-display`,DISPLAY_EDIT:`displays_module-display_edit`,DISPLAY_TOKENS:`displays_module-display_tokens`},j=[{value:15,labelKey:`15s`},{value:30,labelKey:`30s`},{value:60,labelKey:`1min`},{value:120,labelKey:`2min`},{value:300,labelKey:`5min`},{value:600,labelKey:`10min`},{value:1800,labelKey:`30min`},{value:0,labelKey:`never`}],M=class extends Error{exception;constructor(e,t=null){super(e),this.name=`DisplaysException`,this.exception=t}},N=class extends M{constructor(e,t=null){super(e,t),this.name=`DisplaysValidationException`}},P=class extends M{code;constructor(e,t=null,n=null){super(e,n),this.name=`DisplaysApiException`,this.code=t}},F=x(),I=({display:a,messages:o})=>{let c=f().getStore(C),{t:l}=r(),u=h(),d=s(k.NONE),p,m=n({id:a.id,name:a.name,role:a.role,roomId:a.roomId,unitSize:a.unitSize,rows:a.rows,cols:a.cols,brightness:a.brightness,screenLockDuration:a.screenLockDuration,darkMode:a.darkMode,screenSaver:a.screenSaver,screenPowerOff:a.screenPowerOff,speaker:a.speaker,speakerVolume:a.speakerVolume,microphone:a.microphone,microphoneVolume:a.microphoneVolume,homeMode:a.homeMode,homePageId:a.homePageId,numberFormat:a.numberFormat??``,temperatureUnit:a.temperatureUnit??``,windSpeedUnit:a.windSpeedUnit??``,pressureUnit:a.pressureUnit??``,precipitationUnit:a.precipitationUnit??``,distanceUnit:a.distanceUnit??``,weatherLocationId:a.weatherLocationId??null}),g=v(i(m)),_=s(void 0),y=s(!1),b=async()=>{let e=o&&o.error?o.error:l(`displaysModule.messages.notEdited`,{display:a.name||a.macAddress});if(!_.value)throw new N(`Form element is not available`);if(_.value.clearValidate(),!await _.value.validate())throw new N(`Form not valid`);d.value=k.WORKING;try{let e={name:m.name||null,role:m.role,roomId:m.role===`room`?m.roomId:null,unitSize:m.unitSize,rows:m.rows,cols:m.cols,brightness:m.brightness,screenLockDuration:m.screenLockDuration,darkMode:m.darkMode,screenSaver:m.screenSaver,screenPowerOff:m.screenPowerOff,homeMode:m.homeMode,homePageId:m.homeMode===`explicit`?m.homePageId:null,numberFormat:m.numberFormat||null,temperatureUnit:m.temperatureUnit||null,windSpeedUnit:m.windSpeedUnit||null,pressureUnit:m.pressureUnit||null,precipitationUnit:m.precipitationUnit||null,distanceUnit:m.distanceUnit||null,weatherLocationId:m.weatherLocationId||null};a.audioOutputSupported&&(e.speaker=m.speaker,e.speakerVolume=m.speakerVolume),a.audioInputSupported&&(e.microphone=m.microphone,e.microphoneVolume=m.microphoneVolume),await c.edit({id:a.id,data:e})}catch(t){throw d.value=k.ERROR,p=window.setTimeout(x,2e3),t instanceof P&&t.code===422?u.error(t.message):u.error(e),t}return d.value=k.OK,p=window.setTimeout(x,2e3),u.success(l(o&&o.success?o.success:`displaysModule.messages.edited`,{display:a.name||a.macAddress})),y.value=!1,g=v(i(m)),`saved`},x=()=>{p!==void 0&&(window.clearTimeout(p),p=void 0),d.value=k.NONE};return t(m,()=>{y.value=!(0,F.isEqual)(i(m),g)}),e(()=>{x()}),{model:m,formEl:_,formChanged:y,submit:b,clear:x,formResult:d}},L=()=>{let e=f().getStore(C),{firstLoad:t}=g(e),n=a(()=>e?.findAll()??[]);return{displays:n,isLoading:a(()=>e?.fetching()??!1),isLoaded:a(()=>t.value),fetchDisplays:async()=>{await e?.fetch()},options:a(()=>n.value.map(e=>({value:e.id,label:e.name||e.macAddress})))}},R=m({search:b().optional(),darkMode:l([`all`,`enabled`,`disabled`]).default(`all`),screenSaver:l([`all`,`enabled`,`disabled`]).default(`all`),state:l([`all`,`offline`,`online`]).default(`all`),states:u(l([`connected`,`disconnected`,`lost`,`unknown`]))}),z={search:void 0,darkMode:`all`,screenSaver:`all`,state:`all`,states:[]},B={by:`name`,dir:`asc`},V=()=>{let e=f().getStore(C),{firstLoad:n,semaphore:r}=g(e),{filters:i,sort:o,pagination:c,reset:l}=_({key:`${E}:displays:list`,filters:{schema:R,defaults:z},sort:{defaults:[B]},pagination:{defaults:{page:1,size:10}},syncQuery:!0,version:1}),u=a(()=>i.value.search!==z.search||!(0,F.isEqual)(i.value.darkMode,z.darkMode)||!(0,F.isEqual)(i.value.screenSaver,z.screenSaver)||!(0,F.isEqual)(i.value.state,z.state)||!(0,F.isEqual)(i.value.states,z.states)),d=s(c.value.size||10),p=s(c.value.page||1),m=s(o.value.length>0?o.value[0]?.by:void 0),h=s(o.value.length>0?o.value[0]?.dir??null:null),v=a(()=>y(e.findAll().filter(e=>!e.draft&&(!i.value.search||e.id.toLowerCase().includes(i.value.search.toLowerCase())||e.name?.toLowerCase().includes(i.value.search.toLowerCase())||e.macAddress.toLowerCase().includes(i.value.search.toLowerCase())||e.version.toLowerCase().includes(i.value.search.toLowerCase()))&&(i.value.darkMode===`all`||i.value.darkMode===`enabled`&&e.darkMode||i.value.darkMode===`disabled`&&!e.darkMode)&&(i.value.screenSaver===`all`||i.value.screenSaver===`enabled`&&e.screenSaver||i.value.screenSaver===`disabled`&&!e.screenSaver)&&(!i.value.states||i.value.states.length===0||i.value.states.includes(e.status??`unknown`))&&(i.value.state===`all`||i.value.state===`online`&&e.status===`connected`||i.value.state===`offline`&&[`disconnected`,`lost`,`unknown`].includes(e.status??`unknown`))),[e=>{switch(m.value){case`name`:return e.name||e.macAddress;case`version`:return e.version;case`screenWidth`:return e.screenWidth??0;case`status`:return e.status??`unknown`;default:return e.name||e.macAddress}}],[h.value===`asc`?`asc`:`desc`])),b=a(()=>{let e=(p.value-1)*d.value,t=e+d.value;return v.value.slice(e,t)}),x=async()=>{await e.fetch()},S=a(()=>r.value.fetching.items||!n.value),w=a(()=>n.value),T=a(()=>e.findAll().filter(e=>!e.draft).length);return t(()=>c.value,e=>{p.value=e.page??1,d.value=e.size??10},{deep:!0}),t(()=>p.value,e=>{c.value.page=e}),t(()=>d.value,e=>{c.value.size=e}),t(()=>h.value,e=>{m.value===void 0||e===null?o.value=[]:o.value=[{by:m.value,dir:e}]}),t(()=>m.value,e=>{e===void 0?o.value=[]:o.value=[{by:e,dir:h.value}]}),{displays:v,displaysPaginated:b,totalRows:T,areLoading:S,loaded:w,fetchDisplays:x,filters:i,filtersActive:u,paginateSize:d,paginatePage:p,sortBy:m,sortDir:h,resetFilter:l}},H=()=>{let e=f().getStore(C),{t}=r(),n=h();return{remove:async r=>{let i=e?.findById(r);if(!i){n.error(t(`displaysModule.messages.notFound`));return}try{await p.confirm(t(`displaysModule.messages.confirmRemove`,{name:i.name||i.macAddress}),t(`displaysModule.headings.removeDisplay`),{confirmButtonText:t(`displaysModule.buttons.yes.title`),cancelButtonText:t(`displaysModule.buttons.no.title`),type:`warning`}),await e.remove({id:r}),n.success(t(`displaysModule.messages.removed`))}catch{}},bulkRemove:async r=>{if(r.length!==0)try{await p.confirm(t(`displaysModule.messages.confirmBulkRemove`,{count:r.length}),t(`displaysModule.headings.removeBulkDisplays`),{confirmButtonText:t(`displaysModule.buttons.yes.title`),cancelButtonText:t(`displaysModule.buttons.no.title`),type:`warning`});let i=0,a=0;for(let t of r)try{await e.remove({id:t.id}),i++}catch{a++}i>0&&n.success(t(`displaysModule.messages.bulkRemoved`,{count:i})),a>0&&n.error(t(`displaysModule.messages.bulkRemoveFailed`,{count:a}))}catch{}}}},U=()=>{let e=S(),t=d(),n=s(null),r=s(!1),i=s(!1),c=a(()=>n.value?.available??!1),l=a(()=>n.value?.active??!1),u=a(()=>n.value?.deploymentMode??`combined`),f=a(()=>n.value?.remainingTime??null),p=a(()=>{let e=f.value;return e===null?0:Math.ceil(e/1e3)}),m=a(()=>{let e=p.value;return e<=0?`0:00`:`${Math.floor(e/60)}:${(e%60).toString().padStart(2,`0`)}`}),h=async()=>{try{r.value=!0;let{data:t}=await e.client.GET(`/${o}/${T}/displays/permit-join/status`);if(t?.data){let e=t.data;n.value={active:e.active??!1,expiresAt:e.expires_at?new Date(e.expires_at):null,remainingTime:e.remaining_time??null,deploymentMode:e.deployment_mode??`combined`,available:e.available??!1}}}catch(e){throw t.error(`Failed to fetch permit join status`,e),new M(`Failed to fetch permit join status`)}finally{r.value=!1}};return{status:n,loading:r,activating:i,isAvailable:c,isActive:l,deploymentMode:u,remainingTime:f,remainingTimeSeconds:p,remainingTimeFormatted:m,fetchStatus:h,activate:async()=>{try{i.value=!0,await e.client.POST(`/${o}/${T}/displays/permit-join`),await h()}catch(e){throw t.error(`Failed to activate permit join`,e),new M(`Failed to activate permit join`)}finally{i.value=!1}},deactivate:async()=>{try{i.value=!0,await e.client.DELETE(`/${o}/${T}/displays/permit-join`,{}),await h()}catch(e){throw t.error(`Failed to deactivate permit join`,e),new M(`Failed to deactivate permit join`)}finally{i.value=!1}}}};export{I as a,N as c,T as d,O as f,w as g,j as h,L as i,D as l,A as m,H as n,P as o,k as p,V as r,M as s,U as t,E as u};
|
|
1
|
+
import"./chunk-DECur_0Z.js";import{Nr as e,Xr as t,ci as n,d as r,fi as i,mr as a,n as o,ui as s}from"./icon-with-child-DmQ_XhQy.js";import{Fn as c,Gn as l,Un as u,Va as d,ai as f,d as p,di as m,g as h,ir as g,p as _,tr as v,v as y,w as b,wn as x,x as S}from"./common-ODOYsFyB.js";import{t as C}from"./keys-DHSxrtbW.js";var w=e=>{let n=b().getStore(C),{tokenRefreshTriggers:r}=d(n),i=S(),o=s([]),c=a(()=>e.value===null?null:n?.findById(e.value)??null),l=a(()=>e.value===null?!1:n?.getting(e.value)??!1),u=async()=>{if(e.value!==null)try{await n?.get({id:e.value})}catch(e){i.error(`Failed to fetch display:`,e)}},p=async()=>{if(e.value!==null)try{o.value=await n?.getTokens({id:e.value})??[]}catch(e){i.error(`Failed to fetch display tokens:`,e),o.value=[]}};return f(a(()=>{if(e.value===null||!n)return 0;let t=r.value;return!t||typeof t!=`object`?0:t[e.value]??0}),async()=>{if(e.value!==null)try{await p()}catch(e){i.error(`Failed to refresh tokens:`,e)}},{debounce:300}),t(()=>e.value,async e=>{if(e!==null&&n?.findById(e)===null)try{await u()}catch(e){i.error(`Failed to fetch display on id change:`,e)}},{immediate:!0}),{display:c,tokens:o,isLoading:l,fetchDisplay:u,fetchTokens:p,revokeToken:async()=>{if(e.value===null)return!1;let t=await n?.revokeToken({id:e.value});return t&&(o.value=[]),t??!1}}},T=`displays`,E=`displays-module`,D=`DisplaysModule.`,O=function(e){return e.DISPLAY_CREATED=`DisplaysModule.Display.Created`,e.DISPLAY_UPDATED=`DisplaysModule.Display.Updated`,e.DISPLAY_DELETED=`DisplaysModule.Display.Deleted`,e.DISPLAY_TOKEN_REVOKED=`DisplaysModule.Display.TokenRevoked`,e}({}),k=function(e){return e.NONE=`none`,e.WORKING=`working`,e.ERROR=`error`,e.OK=`ok`,e}({}),A={DISPLAYS:`displays_module-displays`,DISPLAYS_EDIT:`displays_module-displays_edit`,DISPLAY:`displays_module-display`,DISPLAY_EDIT:`displays_module-display_edit`,DISPLAY_TOKENS:`displays_module-display_tokens`},j=[{value:15,labelKey:`15s`},{value:30,labelKey:`30s`},{value:60,labelKey:`1min`},{value:120,labelKey:`2min`},{value:300,labelKey:`5min`},{value:600,labelKey:`10min`},{value:1800,labelKey:`30min`},{value:0,labelKey:`never`}],M=class extends Error{exception;constructor(e,t=null){super(e),this.name=`DisplaysException`,this.exception=t}},N=class extends M{constructor(e,t=null){super(e,t),this.name=`DisplaysValidationException`}},P=class extends M{code;constructor(e,t=null,n=null){super(e,n),this.name=`DisplaysApiException`,this.code=t}},F=c(),I=({display:a,messages:o})=>{let c=b().getStore(C),{t:l}=r(),u=h(),d=s(k.NONE),f,p=n({id:a.id,name:a.name,role:a.role,roomId:a.roomId,unitSize:a.unitSize,rows:a.rows,cols:a.cols,brightness:a.brightness,screenLockDuration:a.screenLockDuration,darkMode:a.darkMode,screenSaver:a.screenSaver,screenPowerOff:a.screenPowerOff,speaker:a.speaker,speakerVolume:a.speakerVolume,microphone:a.microphone,microphoneVolume:a.microphoneVolume,homeMode:a.homeMode,homePageId:a.homePageId,numberFormat:a.numberFormat??``,temperatureUnit:a.temperatureUnit??``,windSpeedUnit:a.windSpeedUnit??``,pressureUnit:a.pressureUnit??``,precipitationUnit:a.precipitationUnit??``,distanceUnit:a.distanceUnit??``,weatherLocationId:a.weatherLocationId??null}),m=_(i(p)),g=s(void 0),v=s(!1),y=async()=>{let e=o&&o.error?o.error:l(`displaysModule.messages.notEdited`,{display:a.name||a.macAddress});if(!g.value)throw new N(`Form element is not available`);if(g.value.clearValidate(),!await g.value.validate())throw new N(`Form not valid`);d.value=k.WORKING;try{let e={name:p.name||null,role:p.role,roomId:p.role===`room`?p.roomId:null,unitSize:p.unitSize,rows:p.rows,cols:p.cols,brightness:p.brightness,screenLockDuration:p.screenLockDuration,darkMode:p.darkMode,screenSaver:p.screenSaver,screenPowerOff:p.screenPowerOff,homeMode:p.homeMode,homePageId:p.homeMode===`explicit`?p.homePageId:null,numberFormat:p.numberFormat||null,temperatureUnit:p.temperatureUnit||null,windSpeedUnit:p.windSpeedUnit||null,pressureUnit:p.pressureUnit||null,precipitationUnit:p.precipitationUnit||null,distanceUnit:p.distanceUnit||null,weatherLocationId:p.weatherLocationId||null};a.audioOutputSupported&&(e.speaker=p.speaker,e.speakerVolume=p.speakerVolume),a.audioInputSupported&&(e.microphone=p.microphone,e.microphoneVolume=p.microphoneVolume),await c.edit({id:a.id,data:e})}catch(t){throw d.value=k.ERROR,f=window.setTimeout(x,2e3),t instanceof P&&t.code===422?u.error(t.message):u.error(e),t}return d.value=k.OK,f=window.setTimeout(x,2e3),u.success(l(o&&o.success?o.success:`displaysModule.messages.edited`,{display:a.name||a.macAddress})),v.value=!1,m=_(i(p)),`saved`},x=()=>{f!==void 0&&(window.clearTimeout(f),f=void 0),d.value=k.NONE};return t(p,()=>{v.value=!(0,F.isEqual)(i(p),m)}),e(()=>{x()}),{model:p,formEl:g,formChanged:v,submit:y,clear:x,formResult:d}},L=()=>{let e=b().getStore(C),{firstLoad:t}=d(e),n=a(()=>e?.findAll()??[]);return{displays:n,isLoading:a(()=>e?.fetching()??!1),isLoaded:a(()=>t.value),fetchDisplays:async()=>{await e?.fetch()},options:a(()=>n.value.map(e=>({value:e.id,label:e.name||e.macAddress})))}},R=v({search:g().optional(),darkMode:u([`all`,`enabled`,`disabled`]).default(`all`),screenSaver:u([`all`,`enabled`,`disabled`]).default(`all`),state:u([`all`,`offline`,`online`]).default(`all`),states:l(u([`connected`,`disconnected`,`lost`,`unknown`]))}),z={search:void 0,darkMode:`all`,screenSaver:`all`,state:`all`,states:[]},B={by:`name`,dir:`asc`},V=()=>{let e=b().getStore(C),{firstLoad:n,semaphore:r}=d(e),{filters:i,sort:o,pagination:c,reset:l}=p({key:`${E}:displays:list`,filters:{schema:R,defaults:z},sort:{defaults:[B]},pagination:{defaults:{page:1,size:10}},syncQuery:!0,version:1}),u=a(()=>i.value.search!==z.search||!(0,F.isEqual)(i.value.darkMode,z.darkMode)||!(0,F.isEqual)(i.value.screenSaver,z.screenSaver)||!(0,F.isEqual)(i.value.state,z.state)||!(0,F.isEqual)(i.value.states,z.states)),f=s(c.value.size||10),m=s(c.value.page||1),h=s(o.value.length>0?o.value[0]?.by:void 0),g=s(o.value.length>0?o.value[0]?.dir??null:null),_=a(()=>x(e.findAll().filter(e=>!e.draft&&(!i.value.search||e.id.toLowerCase().includes(i.value.search.toLowerCase())||e.name?.toLowerCase().includes(i.value.search.toLowerCase())||e.macAddress.toLowerCase().includes(i.value.search.toLowerCase())||e.version.toLowerCase().includes(i.value.search.toLowerCase()))&&(i.value.darkMode===`all`||i.value.darkMode===`enabled`&&e.darkMode||i.value.darkMode===`disabled`&&!e.darkMode)&&(i.value.screenSaver===`all`||i.value.screenSaver===`enabled`&&e.screenSaver||i.value.screenSaver===`disabled`&&!e.screenSaver)&&(!i.value.states||i.value.states.length===0||i.value.states.includes(e.status??`unknown`))&&(i.value.state===`all`||i.value.state===`online`&&e.status===`connected`||i.value.state===`offline`&&[`disconnected`,`lost`,`unknown`].includes(e.status??`unknown`))),[e=>{switch(h.value){case`name`:return e.name||e.macAddress;case`version`:return e.version;case`screenWidth`:return e.screenWidth??0;case`status`:return e.status??`unknown`;default:return e.name||e.macAddress}}],[g.value===`asc`?`asc`:`desc`])),v=a(()=>{let e=(m.value-1)*f.value,t=e+f.value;return _.value.slice(e,t)}),y=async()=>{await e.fetch()},S=a(()=>r.value.fetching.items||!n.value),w=a(()=>n.value),T=a(()=>e.findAll().filter(e=>!e.draft).length);return t(()=>c.value,e=>{m.value=e.page??1,f.value=e.size??10},{deep:!0}),t(()=>m.value,e=>{c.value.page=e}),t(()=>f.value,e=>{c.value.size=e}),t(()=>g.value,e=>{h.value===void 0||e===null?o.value=[]:o.value=[{by:h.value,dir:e}]}),t(()=>h.value,e=>{e===void 0?o.value=[]:o.value=[{by:e,dir:g.value}]}),{displays:_,displaysPaginated:v,totalRows:T,areLoading:S,loaded:w,fetchDisplays:y,filters:i,filtersActive:u,paginateSize:f,paginatePage:m,sortBy:h,sortDir:g,resetFilter:l}},H=()=>{let e=b().getStore(C),{t}=r(),n=h();return{remove:async r=>{let i=e?.findById(r);if(!i){n.error(t(`displaysModule.messages.notFound`));return}try{await m.confirm(t(`displaysModule.messages.confirmRemove`,{name:i.name||i.macAddress}),t(`displaysModule.headings.removeDisplay`),{confirmButtonText:t(`displaysModule.buttons.yes.title`),cancelButtonText:t(`displaysModule.buttons.no.title`),type:`warning`}),await e.remove({id:r}),n.success(t(`displaysModule.messages.removed`))}catch{}},bulkRemove:async r=>{if(r.length!==0)try{await m.confirm(t(`displaysModule.messages.confirmBulkRemove`,{count:r.length}),t(`displaysModule.headings.removeBulkDisplays`),{confirmButtonText:t(`displaysModule.buttons.yes.title`),cancelButtonText:t(`displaysModule.buttons.no.title`),type:`warning`});let i=0,a=0;for(let t of r)try{await e.remove({id:t.id}),i++}catch{a++}i>0&&n.success(t(`displaysModule.messages.bulkRemoved`,{count:i})),a>0&&n.error(t(`displaysModule.messages.bulkRemoveFailed`,{count:a}))}catch{}}}},U=()=>{let e=y(),t=S(),n=s(null),r=s(!1),i=s(!1),c=a(()=>n.value?.available??!1),l=a(()=>n.value?.active??!1),u=a(()=>n.value?.deploymentMode??`combined`),d=a(()=>n.value?.remainingTime??null),f=a(()=>{let e=d.value;return e===null?0:Math.ceil(e/1e3)}),p=a(()=>{let e=f.value;return e<=0?`0:00`:`${Math.floor(e/60)}:${(e%60).toString().padStart(2,`0`)}`}),m=async()=>{try{r.value=!0;let{data:t}=await e.client.GET(`/${o}/${T}/displays/permit-join/status`);if(t?.data){let e=t.data;n.value={active:e.active??!1,expiresAt:e.expires_at?new Date(e.expires_at):null,remainingTime:e.remaining_time??null,deploymentMode:e.deployment_mode??`combined`,available:e.available??!1}}}catch(e){throw t.error(`Failed to fetch permit join status`,e),new M(`Failed to fetch permit join status`)}finally{r.value=!1}};return{status:n,loading:r,activating:i,isAvailable:c,isActive:l,deploymentMode:u,remainingTime:d,remainingTimeSeconds:f,remainingTimeFormatted:p,fetchStatus:m,activate:async()=>{try{i.value=!0,await e.client.POST(`/${o}/${T}/displays/permit-join`),await m()}catch(e){throw t.error(`Failed to activate permit join`,e),new M(`Failed to activate permit join`)}finally{i.value=!1}},deactivate:async()=>{try{i.value=!0,await e.client.DELETE(`/${o}/${T}/displays/permit-join`,{}),await m()}catch(e){throw t.error(`Failed to deactivate permit join`,e),new M(`Failed to deactivate permit join`)}finally{i.value=!1}}}};export{I as a,N as c,T as d,O as f,w as g,j as h,L as i,D as l,A as m,H as n,P as o,k as p,V as r,M as s,U as t,E as u};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{mr as e}from"./icon-with-child-DmQ_XhQy.js";import{Va as t,un as n,w as r}from"./common-ODOYsFyB.js";var i=()=>{let i=r().getStore(n),{profile:a}=t(i);return{profile:e(()=>a.value),isSignedIn:e(()=>i.isSignedIn())}};export{i as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./chunk-DECur_0Z.js";import{Xr as e,ci as t,d as n,fi as r,mr as i,ui as a}from"./icon-with-child-DmQ_XhQy.js";import{Fn as o,Gn as s,Kn as c,Va as l,d as u,di as d,er as f,g as p,gn as m,ir as h,k as g,n as _,p as v,tr as y,w as b,wn as x,x as S}from"./common-ODOYsFyB.js";import{a as C,c as w,d as T,i as E,n as D,o as O,r as k,t as A}from"./keys-CGGnS6tq.js";import{i as j,t as M}from"./types-il6fmL4i.js";import{n as N}from"./useDataSources-CQ5RpxTF.js";var P=()=>{let e=g(),{enabled:t}=m(),n=[`pageDetail`,`pageAddForm`,`pageEditForm`],r=[`pageSchema`,`pageAddFormSchema`,`pageEditFormSchema`,`pageCreateReqSchema`,`pageUpdateReqSchema`],a=[`configure`],o=i(()=>e.getPlugins().filter(e=>{if(!(e.modules===void 0||e.modules.includes(`dashboard-module`)))return!1;let t=a.some(t=>e.routes&&t in e.routes)??!0;return(e.elements??[]).some(e=>{if(!(e.modules===void 0||e.modules.includes(`dashboard-module`)))return!1;let i=n.length===0||!!e.components&&n.some(t=>e.components&&t in e.components),a=r.length===0||!!e.schemas&&r.some(t=>e.schemas&&t in e.schemas);return i||a||t})}));return{plugins:o,options:i(()=>x(o.value.flatMap(e=>(e.elements??[]).filter(e=>e.modules===void 0||e.modules.includes(`dashboard-module`)).map(n=>({value:n.type,label:n.name?.trim()?n.name:e.name,disabled:!t(e.type)}))),[e=>e.label],[`asc`])),getByName:e=>o.value.find(t=>t.type===e),getByType:e=>o.value.find(t=>(t.elements??[]).some(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`dashboard-module`)))),getElement:e=>{for(let t of o.value){let n=(t.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`dashboard-module`)));if(n)return n}}}},F=()=>{let e=b().getStore(D),{firstLoad:t,semaphore:n}=l(e);return{pages:i(()=>e.findAll().filter(e=>!e.draft)),areLoading:i(()=>!!n.value.fetching.items||!t.value),loaded:i(()=>t.value),fetchPages:async()=>{await e.fetch()}}},I=o(),L={search:void 0,types:[],displays:[]},ee={by:`title`,dir:`asc`},te=()=>{let t=b().getStore(D),{firstLoad:n,semaphore:r}=l(t),{filters:o,sort:s,pagination:c,reset:d}=u({key:`${w}:pages:list`,filters:{schema:j,defaults:L},sort:{defaults:[ee]},pagination:{defaults:{page:1,size:10}},syncQuery:!0,version:1}),f=i(()=>o.value.search!==L.search||!(0,I.isEqual)(o.value.types,L.types)||!(0,I.isEqual)(o.value.displays,L.displays)),p=a(c.value.size||10),m=a(c.value.page||1),h=a(s.value.length>0?s.value[0]?.by:void 0),g=a(s.value.length>0?s.value[0]?.dir??null:null),_=i(()=>x(t.findAll().filter(e=>!e.draft&&(!o.value.search||e.title.toLowerCase().includes(o.value.search.toLowerCase()))&&(o.value.types.length===0||o.value.types.includes(e.type))&&(o.value.displays.length===0||o.value.displays.includes(`all`)&&(e.displays===null||e.displays.length===0)||e.displays!==null&&e.displays.length>0&&e.displays.some(e=>o.value.displays.includes(e)))),[e=>e[h.value]??``],[g.value===`asc`?`asc`:`desc`])),v=i(()=>{let e=(m.value-1)*p.value,t=e+p.value;return _.value.slice(e,t)}),y=async()=>{await t.fetch()},S=i(()=>r.value.fetching.items||!n.value),C=i(()=>n.value),T=i(()=>t.findAll().filter(e=>!e.draft).length);return e(()=>c.value,e=>{m.value=e.page??1,p.value=e.size??10},{deep:!0}),e(()=>m.value,e=>{c.value.page=e}),e(()=>p.value,e=>{c.value.size=e}),e(()=>g.value,e=>{h.value===void 0||e===null?s.value=[]:s.value=[{by:h.value,dir:e}]}),e(()=>h.value,e=>{e===void 0?s.value=[]:s.value=[{by:e,dir:g.value}]}),{pages:_,pagesPaginated:v,totalRows:T,areLoading:S,loaded:C,fetchPages:y,filters:o,filtersActive:f,paginateSize:p,paginatePage:m,sortBy:h,sortDir:g,resetFilter:d}},R=()=>{let{t:e}=n(),t=p(),r=b().getStore(D);return{remove:async n=>{let i=r.findById(n);if(i===null)throw new C(`Something went wrong, page can't be loaded`);d.confirm(e(`dashboardModule.texts.pages.confirmRemove`,{page:i.title}),e(`dashboardModule.headings.pages.remove`),{confirmButtonText:e(`dashboardModule.buttons.yes.title`),cancelButtonText:e(`dashboardModule.buttons.no.title`),type:`warning`}).then(async()=>{try{await r.remove({id:i.id}),t.success(e(`dashboardModule.messages.pages.removed`,{page:i.title}))}catch(n){if(n instanceof E&&n.code===404){let n=e(`dashboardModule.messages.pages.notFound`,{page:i.title});t.error(n)}else if(n instanceof E&&n.code===422)t.error(n.message);else{let n=e(`dashboardModule.messages.pages.notRemoved`,{page:i.title});t.error(n)}}}).catch(()=>{t.info(e(`dashboardModule.messages.pages.removeCanceled`,{page:i.title}))})},bulkRemove:async n=>{if(n.length!==0)try{await d.confirm(e(`dashboardModule.texts.pages.confirmBulkRemove`,{count:n.length}),e(`dashboardModule.headings.pages.bulkRemove`),{confirmButtonText:e(`dashboardModule.buttons.yes.title`),cancelButtonText:e(`dashboardModule.buttons.no.title`),type:`warning`});let i=0,a=0;for(let e of n)try{await r.remove({id:e.id}),i++}catch{a++}i>0&&t.success(e(`dashboardModule.messages.pages.bulkRemoved`,{count:i})),a>0&&t.error(e(`dashboardModule.messages.pages.bulkRemoveFailed`,{count:a}))}catch{}}}},z=({id:e})=>{let t=b().getStore(D);return{icon:i(()=>`mdi:${t.findById(e)?.icon??`view-dashboard`}`)}},B=y({id:h().uuid().optional(),type:h().trim().nonempty(),title:h().trim().nonempty(),icon:h().trim().transform(e=>e===``?null:e).nullable().optional(),order:f(),showTopBar:c().optional(),displays:s(h().uuid()).nullable().optional()}),V=y({id:h().uuid(),type:h().trim().nonempty(),title:h().trim().nonempty().optional(),icon:h().trim().transform(e=>e===``?null:e).nullable().optional(),order:f().optional(),showTopBar:c().optional(),displays:s(h().uuid()).nullable().optional()}),H=({type:e})=>{let{getByType:t}=P(),n=i(()=>t(e));return{plugin:n,element:i(()=>(n.value?.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`dashboard-module`))))}},U=({id:i,type:o})=>{let s=b(),{element:c}=H({type:o}),l=s.getStore(D),{t:u}=n(),d=p(),f=S(),m=a(T.NONE),h,g=t({..._(c.value?.schemas?.pageAddFormSchema||B),id:i,type:o,title:``,icon:``,order:0,showTopBar:!0}),y=v(r(g)),x=a(void 0),C=a(!1),w=async()=>{if(x.value.clearValidate(),!await x.value.validate())throw new O(`Form not valid`);let e=(c.value?.schemas?.pageAddFormSchema||B).safeParse(g);if(!e.success)throw f.error(`Schema validation failed with:`,e.error),new O(`Failed to validate create page model.`);m.value=T.WORKING;let t=u(`dashboardModule.messages.pages.notCreated`,{page:g.title});try{await l.add({id:i,draft:!1,data:{...e.data,type:o}})}catch(e){throw m.value=T.ERROR,h=window.setTimeout(k,2e3),e instanceof E&&e.code===422?d.error(e.message):d.error(t),e}return m.value=T.OK,h=window.setTimeout(k,2e3),d.success(u(`dashboardModule.messages.pages.created`,{page:g.title})),`added`},k=()=>{window.clearTimeout(h),m.value=T.NONE};return e(g,()=>{C.value=!(0,I.isEqual)(r(g),y)}),{model:g,formEl:x,formChanged:C,submit:w,clear:k,formResult:m}},W=({page:i,messages:o})=>{let s=b(),{element:c}=H({type:i.type}),l=s.getStore(D),{t:u}=n(),d=p(),f=S(),m=a(T.NONE),h,g=t(i),_=v(r(g)),y=a(void 0),x=a(!1),C=async()=>{let e=i.draft,t=o&&o.error?o.error:i.draft?u(`dashboardModule.messages.pages.notCreated`,{page:i.title}):u(`dashboardModule.messages.pages.notEdited`,{page:i.title});if(y.value.clearValidate(),!await y.value.validate())throw new O(`Form not valid`);let n=(c.value?.schemas?.pageEditFormSchema||V).safeParse(g);if(!n.success)throw f.error(`Schema validation failed with:`,n.error),new O(`Failed to validate edit page model.`);m.value=T.WORKING;try{let e;if(e=await l.edit({id:i.id,data:{...n.data,type:i.type}}),i.draft&&(e=await l.save({id:i.id})),e){let t=e;Object.assign(g,t)}}catch(e){throw m.value=T.ERROR,h=window.setTimeout(w,2e3),e instanceof E&&e.code===422?d.error(e.message):d.error(t),e}return m.value=T.OK,h=window.setTimeout(w,2e3),e?(d.success(u(o&&o.success?o.success:`dashboardModule.messages.pages.created`,{page:i.title})),`added`):(d.success(u(o&&o.success?o.success:`dashboardModule.messages.pages.edited`,{page:i.title})),x.value=!1,_=v(r(g)),`saved`)},w=()=>{window.clearTimeout(h),m.value=T.NONE};return e(g,()=>{x.value=!(0,I.isEqual)(r(g),_)}),{model:g,formEl:y,formChanged:x,submit:C,clear:w,formResult:m}},G=e=>{let t=b().getStore(k),{firstLoad:n,semaphore:r}=l(t);return{tiles:i(()=>t.findForParent(e.parent,e.parentId)),areLoading:i(()=>r.value.fetching.items.includes(e.parentId)?!0:n.value.includes(e.parentId)?!1:r.value.fetching.items.includes(e.parentId)),loaded:i(()=>n.value.includes(e.parentId)),fetchTiles:async()=>{await t.fetch({parent:{type:e.parent,id:e.parentId}})}}},K=e=>{let{t}=n(),r=p(),i=b().getStore(k);return{findById:(e,t)=>i.findById(e,t),edit:async e=>i.edit(e),save:async e=>i.save(e),remove:async n=>{let a=i.findById(e.parent,n);if(a===null)throw new C(`Something went wrong, tile can't be loaded`);d.confirm(t(`dashboardModule.texts.tiles.confirmRemove`),t(`dashboardModule.headings.tiles.remove`),{confirmButtonText:t(`dashboardModule.buttons.yes.title`),cancelButtonText:t(`dashboardModule.buttons.no.title`),type:`warning`}).then(async()=>{try{await i.remove({id:a.id,parent:{type:e.parent,id:e.parentId}}),r.success(t(`dashboardModule.messages.tiles.removed`))}catch(e){if(e instanceof E&&e.code===404){let e=t(`dashboardModule.messages.tiles.notFound`);r.error(e)}else if(e instanceof E&&e.code===422)r.error(e.message);else{let e=t(`dashboardModule.messages.tiles.notRemoved`);r.error(e)}}}).catch(()=>{r.info(t(`dashboardModule.messages.tiles.removeCanceled`))})},removeDirectly:async e=>i.remove(e)}},q=y({id:h().uuid().optional(),type:h().trim().nonempty(),row:f(),col:f(),rowSpan:f(),colSpan:f(),hidden:c()}),J=y({id:h().uuid(),type:h().trim().nonempty(),row:f().optional(),col:f().optional(),rowSpan:f().optional(),colSpan:f().optional(),hidden:c()}),Y=({id:i,parent:o,parentId:s,type:c,onlyDraft:l=!1})=>{let u=b(),{element:d}=N({type:c}),f=u.getStore(k),{t:m}=n(),h=p(),g=S(),y=a(T.NONE),x,C=t({..._(d.value?.schemas?.tileAddFormSchema||q),id:i,type:c,row:1,col:1,rowSpan:1,colSpan:1,hidden:!1}),w=v(r(C)),D=a(void 0),A=a(!1),j=async()=>{if(D.value.clearValidate(),!await D.value.validate())throw new O(`Form not valid`);let e=(d.value?.schemas?.tileAddFormSchema||q).safeParse(C);if(!e.success)throw g.error(`Schema validation failed with:`,e.error),new O(`Failed to validate create tile model.`);y.value=T.WORKING;let t=m(`dashboardModule.messages.tiles.notCreated`);try{await f.add({id:i,parent:{type:o,id:s},draft:l,data:{...e.data,type:c}})}catch(e){throw y.value=T.ERROR,x=window.setTimeout(M,2e3),e instanceof E&&e.code===422?h.error(e.message):h.error(t),e}return y.value=T.OK,x=window.setTimeout(M,2e3),h.success(m(`dashboardModule.messages.tiles.created`)),`added`},M=()=>{window.clearTimeout(x),y.value=T.NONE};return e(C,()=>{A.value=!(0,I.isEqual)(r(C),w)}),{model:C,formEl:D,formChanged:A,submit:j,clear:M,formResult:y}},X=({tile:i,messages:o,onlyDraft:s=!1})=>{let c=b(),{element:l}=N({type:i.type}),u=c.getStore(k),{t:d}=n(),f=p(),m=S(),h=a(T.NONE),g,_=t(i),y=v(r(_)),x=a(void 0),C=a(!1),w=async()=>{let e=i.draft,t=o&&o.error?o.error:i.draft&&!s?d(`dashboardModule.messages.tiles.notCreated`):d(`dashboardModule.messages.tiles.notEdited`);if(x.value.clearValidate(),!await x.value.validate())throw new O(`Form not valid`);let n=(l.value?.schemas?.tileEditFormSchema||J).safeParse(_);if(!n.success)throw m.error(`Schema validation failed with:`,n.error),new O(`Failed to validate create tile model.`);h.value=T.WORKING;try{await u.edit({id:i.id,parent:i.parent,data:{...n.data,type:i.type}}),i.draft&&!s&&await u.save({id:i.id,parent:i.parent})}catch(e){throw h.value=T.ERROR,g=window.setTimeout(D,2e3),e instanceof E&&e.code===422?f.error(e.message):f.error(t),e}return h.value=T.OK,g=window.setTimeout(D,2e3),e&&!s?(f.success(d(o&&o.success?o.success:`dashboardModule.messages.tiles.created`)),`added`):(f.success(d(o&&o.success?o.success:`dashboardModule.messages.tiles.edited`)),C.value=!1,y=v(r(_)),`saved`)},D=()=>{window.clearTimeout(g),h.value=T.NONE};return e(_,()=>{C.value=!(0,I.isEqual)(r(_),y)}),{model:_,formEl:x,formChanged:C,submit:w,clear:D,formResult:h}},Z=e=>{let{id:t}=e,n=b().getStore(A),{data:r,semaphore:a}=l(n);return{dataSource:i(()=>t===null?null:t in r.value?r.value[t]:null),isLoading:i(()=>a.value.fetching.item.includes(t)?!0:(t in r.value?r.value[t]:null)===null?a.value.fetching.items.includes(e.parentId):!1),fetchDataSource:async()=>{(t in r.value?r.value[t]:null)?.draft||await n.get({id:t,parent:{type:e.parent,id:e.parentId}})}}},Q=y({id:h().uuid().optional(),type:h().trim().nonempty()}),$=y({id:h().uuid(),type:h().trim().nonempty()}),ne=({id:i,type:o,parent:s,parentId:c,onlyDraft:l=!1})=>{let u=b(),{element:d}=M({type:o}),f=u.getStore(A),{t:m}=n(),h=p(),g=S(),y=a(T.NONE),x,C=t({..._(d.value?.schemas?.dataSourceAddFormSchema||Q),id:i,type:o}),w=v(r(C)),D=a(void 0),k=a(!1),j=async()=>{if(D.value.clearValidate(),!await D.value.validate())throw new O(`Form not valid`);let e=(d.value?.schemas?.dataSourceAddFormSchema||Q).safeParse(C);if(!e.success)throw g.error(`Schema validation failed with:`,e.error),new O(`Failed to validate create data source model.`);y.value=T.WORKING;let t=m(`dashboardModule.messages.dataSources.notCreated`);try{await f.add({id:i,parent:{type:s,id:c},draft:l,data:{...e.data,type:o}})}catch(e){throw y.value=T.ERROR,x=window.setTimeout(N,2e3),e instanceof E&&e.code===422?h.error(e.message):h.error(t),e}return y.value=T.OK,x=window.setTimeout(N,2e3),h.success(m(`dashboardModule.messages.dataSources.created`)),`added`},N=()=>{window.clearTimeout(x),y.value=T.NONE};return e(C,()=>{k.value=!(0,I.isEqual)(r(C),w)}),{model:C,formEl:D,formChanged:k,submit:j,clear:N,formResult:y}},re=({dataSource:i,messages:o,onlyDraft:s=!1})=>{let c=b(),{element:l}=M({type:i.type}),u=c.getStore(A),{t:d}=n(),f=p(),m=S(),h=a(T.NONE),g,_=t(i),y=v(r(_)),x=a(void 0),C=a(!1),w=async()=>{let e=i.draft,t=o&&o.error?o.error:i.draft&&!s?d(`dashboardModule.messages.dataSources.notCreated`):d(`dashboardModule.messages.dataSources.notEdited`);if(x.value.clearValidate(),!await x.value.validate())throw new O(`Form not valid`);let n=(l.value?.schemas?.dataSourceEditFormSchema||$).safeParse(_);if(!n.success)throw m.error(`Schema validation failed with:`,n.error),new O(`Failed to validate create dataSource model.`);h.value=T.WORKING;try{await u.edit({id:i.id,parent:i.parent,data:{...n.data,type:i.type}}),i.draft&&!s&&await u.save({id:i.id,parent:i.parent})}catch(e){throw h.value=T.ERROR,g=window.setTimeout(D,2e3),e instanceof E&&e.code===422?f.error(e.message):f.error(t),e}return h.value=T.OK,g=window.setTimeout(D,2e3),e&&!s?(f.success(d(o&&o.success?o.success:`dashboardModule.messages.dataSources.created`)),`added`):(f.success(d(o&&o.success?o.success:`dashboardModule.messages.dataSources.edited`)),C.value=!1,y=v(r(_)),`saved`)},D=()=>{window.clearTimeout(g),h.value=T.NONE};return e(_,()=>{C.value=!(0,I.isEqual)(r(_),y)}),{model:_,formEl:x,formChanged:C,submit:w,clear:D,formResult:h}};export{z as _,Z as a,F as b,q as c,G as d,W as f,V as g,B as h,$ as i,J as l,H as m,ne as n,X as o,U as p,Q as r,Y as s,re as t,K as u,R as v,P as x,te as y};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./chunk-DECur_0Z.js";import{Xr as e,ci as t,d as n,mr as r,ui as i}from"./icon-with-child-DmQ_XhQy.js";import{
|
|
1
|
+
import"./chunk-DECur_0Z.js";import{Xr as e,ci as t,d as n,mr as r,ui as i}from"./icon-with-child-DmQ_XhQy.js";import{Fn as a,Va as o,di as s,g as c,lr as l,p as u,w as d,wn as f}from"./common-ODOYsFyB.js";var p=`users`,m=`users-module`,h=`UsersModule.`,g=function(e){return e.USER_CREATED=`UsersModule.User.Created`,e.USER_UPDATED=`UsersModule.User.Updated`,e.USER_DELETED=`UsersModule.User.Deleted`,e.USER_RESET=`UsersModule.User.Reset`,e.MODULE_RESET=`UsersModule.All.Reset`,e}({}),_=function(e){return e.NONE=`none`,e.WORKING=`working`,e.ERROR=`error`,e.OK=`ok`,e}({}),v={USERS:`users_module-users`,USER_ADD:`users_module-user-add`,USER_EDIT:`users_module-user-edit`},y=Symbol(`FB-Module-Users-UsersStore`),b=class extends Error{exception;constructor(e,t=null){super(e),this.name=`UsersException`,this.exception=t}},x=class extends b{code;constructor(e,t=null,n=null){super(e,n),this.name=`UsersApiException`,this.code=t}},S=class extends b{constructor(e,t=null){super(e,t),this.name=`UsersValidationException`}},C=({id:e})=>{let t=d().getStore(y),{data:n,semaphore:i}=o(t);return{user:r(()=>e===null?null:n.value[e]??null),isLoading:r(()=>i.value.fetching.item.includes(e)?!0:n.value[e]===void 0?i.value.fetching.items:!1),fetchUser:async()=>{n.value[e]?.draft||await t.get({id:e})}}},w=({id:r})=>{let a=d().getStore(y),{t:o}=n(),s=c(),u=i(_.NONE),f,p=t({username:``,password:``,repeatPassword:``,email:``,firstName:``,lastName:``,role:l.user}),m=i(void 0),h=i(!1),g=async()=>{let e=o(`usersModule.messages.notCreated`,{user:p.username});if(m.value.clearValidate(),!await m.value.validate())throw new S(`Form not valid`);u.value=_.WORKING;try{await a.add({id:r,draft:!1,data:{username:p.username,password:p.password,email:p.email?.trim()===``?null:p.email,firstName:p.firstName?.trim()===``?null:p.firstName,lastName:p.lastName?.trim()===``?null:p.lastName,role:p.role}})}catch(t){throw u.value=_.ERROR,f=window.setTimeout(v,2e3),t instanceof x&&t.code===422?s.error(t.message):s.error(e),t}return u.value=_.OK,f=window.setTimeout(v,2e3),s.success(o(`usersModule.messages.created`,{user:p.username})),`added`},v=()=>{window.clearTimeout(f),u.value=_.NONE};return e(p,e=>{e.username===``&&e.password===``&&e.email===``&&e.firstName===``&&e.lastName===``&&e.role===l.user?h.value=!1:h.value=!0}),{model:p,formEl:m,formChanged:h,submit:g,clear:v,formResult:u}},T=({user:r,messages:a})=>{let o=d().getStore(y),{t:s}=n(),l=c(),u=i(_.NONE),f,p=t({username:r.username,password:`secretpassword`,email:r.email||``,firstName:r.firstName||``,lastName:r.lastName||``,role:r.role}),m=i(void 0),h=i(!1),g=async()=>{let e=r.draft,t=a&&a.error?a.error:r.draft?s(`usersModule.messages.notCreated`,{user:r.username}):s(`usersModule.messages.notEdited`,{user:r.username});if(m.value.clearValidate(),!await m.value.validate())throw new S(`Form not valid`);u.value=_.WORKING;try{await o.edit({id:r.id,data:{email:!p.email||p.email.trim()===``?null:p.email,firstName:!p.firstName||p.firstName.trim()===``?null:p.firstName,lastName:!p.lastName||p.lastName.trim()===``?null:p.lastName,role:p.role}}),r.draft&&await o.save({id:r.id})}catch(e){throw u.value=_.ERROR,f=window.setTimeout(v,2e3),e instanceof x&&e.code===422?l.error(e.message):l.error(t),e}return u.value=_.OK,f=window.setTimeout(v,2e3),e?(l.success(s(a&&a.success?a.success:`usersModule.messages.created`,{user:r.username})),`added`):(l.success(s(a&&a.success?a.success:`usersModule.messages.edited`,{user:r.username})),`saved`)},v=()=>{window.clearTimeout(f),u.value=_.NONE};return e(p,e=>{e.email===r.email&&e.firstName===r.firstName&&e.lastName===r.lastName&&e.role===r.role?h.value=!1:h.value=!0}),{model:p,formEl:m,formChanged:h,submit:g,clear:v,formResult:u}},E=({user:r,messages:a})=>{let o=d().getStore(y),{t:s}=n(),l=c(),u=i(_.NONE),f,p=t({password:``,repeatPassword:``}),m=i(void 0),h=i(!1),g=async()=>{let e=a&&a.error?a.error:s(`usersModule.messages.notEdited`,{user:r.username});if(m.value.clearValidate(),!await m.value.validate())throw new S(`Form not valid`);u.value=_.WORKING;try{await o.edit({id:r.id,data:{password:p.password}}),r.draft&&await o.save({id:r.id})}catch(t){throw u.value=_.ERROR,f=window.setTimeout(v,2e3),t instanceof x&&t.code===422?l.error(t.message):l.error(e),t}return u.value=_.OK,f=window.setTimeout(v,2e3),l.success(s(a&&a.success?a.success:`usersModule.messages.edited`,{user:r.username})),`saved`},v=()=>{window.clearTimeout(f),u.value=_.NONE};return e(p,e=>{e.password===``&&e.repeatPassword===``?h.value=!1:h.value=!0}),{model:p,formEl:m,formChanged:h,submit:g,clear:v,formResult:u}},D=({user:r,messages:a})=>{let o=d().getStore(y),{t:s}=n(),l=c(),u=i(_.NONE),f,p=t({username:r.username}),m=i(void 0),h=i(!1),g=async()=>{let e=a&&a.error?a.error:s(`usersModule.messages.notEdited`,{user:r.username});if(m.value.clearValidate(),!await m.value.validate())throw new S(`Form not valid`);u.value=_.WORKING;try{await o.edit({id:r.id,data:{username:p.username}}),r.draft&&await o.save({id:r.id})}catch(t){throw u.value=_.ERROR,f=window.setTimeout(v,2e3),t instanceof x&&t.code===422?l.error(t.message):l.error(e),t}return u.value=_.OK,f=window.setTimeout(v,2e3),l.success(s(a&&a.success?a.success:`usersModule.messages.edited`,{user:r.username})),`saved`},v=()=>{window.clearTimeout(f),u.value=_.NONE};return e(p,e=>{h.value=e.username!==r.username}),{model:p,formEl:m,formChanged:h,submit:g,clear:v,formResult:u}},O=a(),k={search:void 0,roles:[]},A=()=>{let t=d().getStore(y),{firstLoad:n,semaphore:a}=o(t),s=i(10),c=i(1),l=i(u(k)),p=r(()=>l.value.search!==k.search||!(0,O.isEqual)(l.value.roles,k.roles)),m=i(`username`),h=i(`ascending`),g=r(()=>f(t.findAll().filter(e=>!e.draft&&(!l.value.search||e.username.toLowerCase().includes(l.value.search.toLowerCase()))&&(l.value.roles.length===0||l.value.roles.includes(e.role))),[e=>e[m.value]??``],[h.value===`ascending`?`asc`:`desc`])),_=r(()=>{let e=(c.value-1)*s.value,t=e+s.value;return g.value.slice(e,t)}),v=async()=>{await t.fetch()},b=r(()=>a.value.fetching.items||!n.value),x=r(()=>n.value),S=r(()=>t.findAll().filter(e=>!e.draft).length);return e(()=>l.value,()=>{c.value=1},{deep:!0}),{users:g,usersPaginated:_,totalRows:S,areLoading:b,loaded:x,fetchUsers:v,filters:l,filtersActive:p,paginateSize:s,paginatePage:c,sortBy:m,sortDir:h,resetFilter:()=>{l.value=u(k)}}},j=()=>{let{t:e}=n(),t=c(),r=d().getStore(y);return{remove:async n=>{let i=r.findById(n);if(i===null)throw new b(`Something went wrong, user can't be loaded`);s.confirm(e(`usersModule.texts.confirmRemove`,{user:i.username}),e(`usersModule.headings.remove`),{confirmButtonText:e(`usersModule.buttons.yes.title`),cancelButtonText:e(`usersModule.buttons.no.title`),type:`warning`}).then(async()=>{try{await r.remove({id:i.id}),t.success(e(`usersModule.messages.removed`,{user:i.username}))}catch(n){if(n instanceof x&&n.code===404){let n=e(`usersModule.messages.notFound`,{user:i.username});t.error(n)}else if(n instanceof x&&n.code===422)t.error(n.message);else{let n=e(`usersModule.messages.notRemoved`,{user:i.username});t.error(n)}}}).catch(()=>{t.info(e(`usersModule.messages.removeCanceled`,{user:i.username}))})},bulkRemove:async n=>{if(n.length!==0)try{await s.confirm(e(`usersModule.texts.confirmBulkRemove`,{count:n.length}),e(`usersModule.headings.removeBulk`),{confirmButtonText:e(`usersModule.buttons.yes.title`),cancelButtonText:e(`usersModule.buttons.no.title`),type:`warning`});let i=0,a=0;for(let e of n)try{await r.remove({id:e.id}),i++}catch{a++}i>0&&t.success(e(`usersModule.messages.bulkRemoved`,{count:i})),a>0&&t.error(e(`usersModule.messages.bulkRemoveFailed`,{count:a}))}catch{}}}};export{p as _,T as a,x as c,y as d,g as f,m as g,h,E as i,b as l,v as m,A as n,w as o,_ as p,D as r,C as s,j as t,S as u};
|