@fastybird/smart-panel-admin 0.1.0-alpha.5
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/LICENSE.md +201 -0
- package/README.md +187 -0
- package/dist/assets/auth.constants-Dls_gTTx.js +1 -0
- package/dist/assets/card-add-form-C8k05jix.js +1 -0
- package/dist/assets/card-edit-form-B4Wy_x66.js +1 -0
- package/dist/assets/chunk-DECur_0Z.js +1 -0
- package/dist/assets/common-BY9Gg1EI.css +1 -0
- package/dist/assets/common-DlW3qRTQ.js +150 -0
- package/dist/assets/components-4pZvmdD8.js +1 -0
- package/dist/assets/components-BFT9ksvz.js +1 -0
- package/dist/assets/components-BGiFbtPn.css +1 -0
- package/dist/assets/components-BTNQr9V1.css +1 -0
- package/dist/assets/components-C59v4_pJ.css +1 -0
- package/dist/assets/components-CjdlFz1u.css +1 -0
- package/dist/assets/components-D8PpAJgM.js +1 -0
- package/dist/assets/components-DBRr1g1A.js +1 -0
- package/dist/assets/components-DRDcqY-d.js +1 -0
- package/dist/assets/components-DSMoiSYB.css +1 -0
- package/dist/assets/components-DlofbaXq.js +2 -0
- package/dist/assets/components-W7KcmsWr.css +1 -0
- package/dist/assets/components-o_FTQqv1.js +1 -0
- package/dist/assets/components-tvaQsmsk.js +2 -0
- package/dist/assets/composables-BTOG7VNs2.js +1 -0
- package/dist/assets/composables-CLHFuu4k.js +1 -0
- package/dist/assets/composables-COu_3hI8.js +1 -0
- package/dist/assets/composables-CU6q9-8B.js +1 -0
- package/dist/assets/composables-CjGTzpGj.js +1 -0
- package/dist/assets/composables-Cl0F9F_S.js +1 -0
- package/dist/assets/composables-CzSTR7jk.js +1 -0
- package/dist/assets/composables-DDYun9ja.js +0 -0
- package/dist/assets/composables-Da97cjje.js +1 -0
- package/dist/assets/composables-m3XA9ZFJ.js +1 -0
- package/dist/assets/dashboard-DilMazDB.js +2 -0
- package/dist/assets/dashboard.types-DHlozs9y.js +1 -0
- package/dist/assets/data-source-edit-form-mTdgdACg.js +1 -0
- package/dist/assets/drawer-Db27jij8.js +1 -0
- package/dist/assets/empty-C13Ke09q.js +1 -0
- package/dist/assets/extensions.constants-BtEcoiTe.js +1 -0
- package/dist/assets/gridstack-DrhE8fGa.css +1 -0
- package/dist/assets/gridstack.min-BC6WoZvX.js +3 -0
- package/dist/assets/icon-with-child-1Kb-D21P.css +1 -0
- package/dist/assets/icon-with-child-DmQ_XhQy.js +12 -0
- package/dist/assets/index-DU31qw7A.css +1 -0
- package/dist/assets/index-DW2Q2Ef8.js +16 -0
- package/dist/assets/input-number-BF0uWlX2.js +1 -0
- package/dist/assets/integration-config-dialog-DCF8K0UE.js +1 -0
- package/dist/assets/keys-C6Zi4a10.js +1 -0
- package/dist/assets/keys-CGGnS6tq.js +1 -0
- package/dist/assets/keys-Cm97UJHM.js +1 -0
- package/dist/assets/keys-DHSxrtbW.js +1 -0
- package/dist/assets/layout-config-Bs73Oq0w.css +1 -0
- package/dist/assets/layout-config-DkSTscYx.js +1 -0
- package/dist/assets/layout-default-LKbviw7y.js +1 -0
- package/dist/assets/layout-default-aEpEfGPk.css +1 -0
- package/dist/assets/layout-lock-Cp5xh9ot.js +1 -0
- package/dist/assets/layout-profile-ByHuBl2Y.js +1 -0
- package/dist/assets/layout-profile-wkO5hDf5.js +1 -0
- package/dist/assets/layout-sign-C8xK52Nq.js +1 -0
- package/dist/assets/layout-sign-CjJVcqWG.js +1 -0
- package/dist/assets/leaflet-src-B49UyrlR.js +1 -0
- package/dist/assets/leaflet-src.esm-YKGwaZsZ.js +1 -0
- package/dist/assets/list-data-sources-adjust-Bj-0Adap.js +1 -0
- package/dist/assets/list-data-sources-adjust-REFqavw6.css +1 -0
- package/dist/assets/list-locations-BM5Yvsew.js +1 -0
- package/dist/assets/list-users-dBZVseES.js +1 -0
- package/dist/assets/logs-entries.transformers-BRzpY2MS.js +1 -0
- package/dist/assets/marker-icon-2x-BCzqJChB.js +1 -0
- package/dist/assets/marker-icon-JzPv91fE.js +1 -0
- package/dist/assets/marker-shadow-tj6c2pB6.js +1 -0
- package/dist/assets/page-configure-1ENlHHe8.js +1 -0
- package/dist/assets/page-configure-BLho4eEA.js +1 -0
- package/dist/assets/page-configure-Bhbyv1tV.css +1 -0
- package/dist/assets/page-configure-beBdD2Qu.css +1 -0
- package/dist/assets/pages-cards.contants-B5RdaI3z.js +1 -0
- package/dist/assets/pages-tiles.constants-Day6cR-b.js +1 -0
- package/dist/assets/pagination-BN87kdDs.js +1 -0
- package/dist/assets/popover-DOg0KdzK.js +1 -0
- package/dist/assets/radio-BmI00y-5.js +1 -0
- package/dist/assets/scene-add-form-BcNSeauE.css +1 -0
- package/dist/assets/scene-add-form-DdmUnhy5.js +1 -0
- package/dist/assets/scene-edit-form-BeXK9ZM1.js +1 -0
- package/dist/assets/scene-edit-form-CDPMRZQT.css +1 -0
- package/dist/assets/select-data-source-plugin-CtXn9m8K.js +1 -0
- package/dist/assets/skeleton-DMwdgp1r.js +1 -0
- package/dist/assets/slider-YJlo4Ibo.js +1 -0
- package/dist/assets/steps-BIGbhQaO.js +1 -0
- package/dist/assets/system.exceptions-Ddzmz1RH.js +1 -0
- package/dist/assets/table-5pjI7ihN.js +1 -0
- package/dist/assets/tile-detail-COru-nDQ.js +1 -0
- package/dist/assets/tile-edit-form-jjo5FbvD.js +1 -0
- package/dist/assets/types-B8upWpl6.js +1 -0
- package/dist/assets/useBuddyChat-DREu7Tv5.js +1 -0
- package/dist/assets/useDataSources-Bx93bXrZ.js +1 -0
- package/dist/assets/useDevices-CuJhDHbf.js +1 -0
- package/dist/assets/useGeolocation-QxCQnrMH.js +2 -0
- package/dist/assets/useGeolocation-vh-t_kPv.css +1 -0
- package/dist/assets/useLocation-BM-8kEbz.js +1 -0
- package/dist/assets/usePage-DTL4RY9u.js +1 -0
- package/dist/assets/useSpaces-DnSZteHf.js +1 -0
- package/dist/assets/view-buddy-chat-DKryg2MX.js +1 -0
- package/dist/assets/view-card-add-CYZ9eXg5.js +1 -0
- package/dist/assets/view-card-edit-C5zcGDFz.js +1 -0
- package/dist/assets/view-channel-IJiMTDSG.js +1 -0
- package/dist/assets/view-channel-add-YCqERQS-.js +1 -0
- package/dist/assets/view-channel-edit-Dnct_m0O.js +1 -0
- package/dist/assets/view-channel-property-add-CoaudIGV.js +1 -0
- package/dist/assets/view-channel-property-edit-g0J-yPAY.js +1 -0
- package/dist/assets/view-channels--BS5J8Ro.js +1 -0
- package/dist/assets/view-config-module-edit-RW7YEgut.js +1 -0
- package/dist/assets/view-config-modules-Bi5Ib06n.js +1 -0
- package/dist/assets/view-config-modules-DvbJyCIK.css +1 -0
- package/dist/assets/view-config-plugin-edit-CviUNBYF.js +1 -0
- package/dist/assets/view-config-plugins-BBxIkmDq.js +1 -0
- package/dist/assets/view-config-plugins-BTCfejmZ.css +1 -0
- package/dist/assets/view-data-source-add-3vF7foLh.js +1 -0
- package/dist/assets/view-data-source-add-CNRJiOEl.js +1 -0
- package/dist/assets/view-data-source-edit-5xrflzsE.js +1 -0
- package/dist/assets/view-data-source-edit-BJeCPFQo.js +1 -0
- package/dist/assets/view-device-C6EIYm4K.js +1 -0
- package/dist/assets/view-device-DvKgjKr8.css +1 -0
- package/dist/assets/view-device-add-Dtg4hKNb.js +1 -0
- package/dist/assets/view-device-control-D14Yf_3B.js +1 -0
- package/dist/assets/view-device-edit-D3wfo1SZ.js +1 -0
- package/dist/assets/view-devices-CQyYakG6.js +1 -0
- package/dist/assets/view-display-BoDjtT_C.js +1 -0
- package/dist/assets/view-display-edit-DOBx3FR9.js +1 -0
- package/dist/assets/view-display-tokens-ylzZVdwc.js +1 -0
- package/dist/assets/view-displays-Bv-jxEGc.js +1 -0
- package/dist/assets/view-extension-detail-BAuEjk3c.js +1 -0
- package/dist/assets/view-extension-detail-BjYHp3ZH.css +1 -0
- package/dist/assets/view-extensions-xnAarDlC.js +1 -0
- package/dist/assets/view-location-BbOLMWOk.js +1 -0
- package/dist/assets/view-location-add-B3Bljsk2.js +1 -0
- package/dist/assets/view-location-edit-Csq0lDWt.js +1 -0
- package/dist/assets/view-locations-DBYp9MTj.css +1 -0
- package/dist/assets/view-locations-DF-FXbjv.js +1 -0
- package/dist/assets/view-lock-screen-ClIhVZNt.js +1 -0
- package/dist/assets/view-not-found-C0Nl0aC-.js +1 -0
- package/dist/assets/view-onboarding-vZhyo5Yl.js +1 -0
- package/dist/assets/view-page-DCmbFTnE.js +1 -0
- package/dist/assets/view-page-add-Cpzp9lXV.js +1 -0
- package/dist/assets/view-page-configure-b5zQ9PXr.js +1 -0
- package/dist/assets/view-page-configure-c8DaItoq.js +1 -0
- package/dist/assets/view-page-data-source-add-CJMzSAGm.js +1 -0
- package/dist/assets/view-page-data-source-edit-BI5AXiNz.js +1 -0
- package/dist/assets/view-page-edit-fw913SDe.js +1 -0
- package/dist/assets/view-page-plugin-BrlvGuEU.js +1 -0
- package/dist/assets/view-pages-DVvpvvkt.js +1 -0
- package/dist/assets/view-profile-general-jV0TcOZC.js +1 -0
- package/dist/assets/view-profile-security-CPgtYKl1.js +1 -0
- package/dist/assets/view-scene-add-CT1MOXtu.js +1 -0
- package/dist/assets/view-scene-edit-4B1IzMuu.js +1 -0
- package/dist/assets/view-scenes-DoDkd08z.js +1 -0
- package/dist/assets/view-sign-in-CC7zlx9Q.js +1 -0
- package/dist/assets/view-sign-up-B1l4jvOx.js +1 -0
- package/dist/assets/view-space-VnVbkvKT.js +1 -0
- package/dist/assets/view-space-add-DwONNuir.js +1 -0
- package/dist/assets/view-space-edit-44iZOBav.js +1 -0
- package/dist/assets/view-spaces-CuuMx0iT.js +1 -0
- package/dist/assets/view-spaces-onboarding-CN6qrfN6.js +1 -0
- package/dist/assets/view-stats-F8sYkha0.js +1 -0
- package/dist/assets/view-system-info-AVyQIUWe.js +1 -0
- package/dist/assets/view-system-log-detail-sgFgbNjX.js +1 -0
- package/dist/assets/view-system-logs-eIoNhI5c.js +1 -0
- package/dist/assets/view-tile-add-B7mnK_PA.js +1 -0
- package/dist/assets/view-tile-add-Yt_KOkky.js +1 -0
- package/dist/assets/view-tile-data-source-add-DxaZd4Dp.js +1 -0
- package/dist/assets/view-tile-data-source-edit-jzGg3dBQ.js +1 -0
- package/dist/assets/view-tile-edit-b2LCLrB5.js +1 -0
- package/dist/assets/view-tile-edit-hbO-vs_Y.js +1 -0
- package/dist/assets/view-tile-edit-kHjMhT9e.js +1 -0
- package/dist/assets/view-tile-t4cTwgz2.js +1 -0
- package/dist/assets/view-user-add-CdlbezB7.js +1 -0
- package/dist/assets/view-user-edit-S0Up49jC.js +1 -0
- package/dist/assets/view-users-B-m50sCU.js +1 -0
- package/dist/assets/vue-meta.esm-browser.min-3_YV25pX.js +1 -0
- package/dist/assets/weather-751GlpD1.js +2 -0
- package/dist/assets/weather-BKeryvnv.css +1 -0
- package/dist/assets/weather-forecast.transformers-CxZiOJKt.js +1 -0
- package/dist/assets/weather-icon-CkuFNv0P.js +1 -0
- package/dist/favicon.ico +0 -0
- package/dist/index.html +93 -0
- package/package.json +155 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.extension-card[data-v-f13b0a97]{transition:opacity .2s}.extension-card--disabled[data-v-f13b0a97]{opacity:.7}.extension-card__header[data-v-f13b0a97]{align-items:flex-start;gap:.75rem;display:flex}.extension-card__icon[data-v-f13b0a97]{color:var(--el-color-primary);flex-shrink:0;margin-top:.125rem;font-size:1.5rem}.extension-card__header-content[data-v-f13b0a97]{flex-direction:column;flex:1;gap:.5rem;min-width:0;display:flex}.extension-card__title[data-v-f13b0a97]{text-overflow:ellipsis;white-space:nowrap;margin:0;font-size:1rem;font-weight:600;line-height:1.25;overflow:hidden}.extension-card__tags[data-v-f13b0a97]{flex-wrap:wrap;gap:.375rem;display:flex}.extension-card__content[data-v-f13b0a97]{flex-direction:column;justify-content:space-between;height:5.5rem;display:flex}.extension-card__description[data-v-f13b0a97]{color:var(--el-text-color-regular);-webkit-line-clamp:2;-webkit-box-orient:vertical;margin:0;line-height:1.5;display:-webkit-box;overflow:hidden}.extension-card__description--empty[data-v-f13b0a97]{color:var(--el-text-color-secondary);font-style:italic}.extension-card__meta[data-v-f13b0a97]{justify-content:space-between;align-items:center;display:flex}.extension-card__meta-item[data-v-f13b0a97]{color:var(--el-text-color-secondary);align-items:center;gap:.25rem;font-size:.8125rem;display:flex}.extension-card__meta-icon[data-v-f13b0a97]{font-size:.875rem}.extension-card__author[data-v-f13b0a97]{color:var(--el-text-color-placeholder);align-items:center;gap:.25rem;font-size:.75rem;display:flex}.extension-card__author-icon[data-v-f13b0a97]{font-size:.875rem}.extension-card__footer[data-v-f13b0a97]{justify-content:space-between;align-items:center;gap:.5rem;display:flex}.extension-card__links[data-v-f13b0a97]{flex-wrap:wrap;gap:.5rem;display:flex}.el-extensions-filter__extension-kind[data-v-7de8e0d9] .el-radio-button__inner{padding-left:1rem;padding-right:1rem}.el-list-extensions-adjust__filter-item[data-v-1f502633] .el-collapse-item__header{width:auto}.el-list-extensions-adjust__filter-item[data-v-1f502633] .el-radio-button__inner{padding-left:1rem;padding-right:1rem}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./chunk-DECur_0Z.js";import{Br as e,Hr as t,Lr as n,Qr as r,Sr as i,Xr as a,_i as o,br as s,c,ci as l,d as u,gr as d,h as f,hr as p,ji as m,lr as h,or as g,sr as _,ui as v,vr as y,xr as b}from"./icon-with-child-DmQ_XhQy.js";import{$t as x,K as S,Ni as C,Pi as w,T,Ti as E,Tr as D,_ as O,_i as k,at as A,ot as j,yi as M}from"./common-DlW3qRTQ.js";import{a as N,l as P,s as F}from"./auth.constants-Dls_gTTx.js";var I=i({name:`SettingsProfileForm`,__name:`settings-profile-form`,props:{profile:{},remoteFormSubmit:{type:Boolean,default:!1},remoteFormResult:{default:N.NONE},remoteFormReset:{type:Boolean,default:!1},layout:{default:F.DEFAULT}},emits:[`update:remoteFormSubmit`,`update:remoteFormResult`,`update:remoteFormReset`],setup(n,{emit:i}){let s=n,c=i,{t:f,locale:p}=u(),m=O(),g=T().getStore(x),_=v(void 0),D=l({email:[{required:!1,message:f(`authModule.fields.email.validation.required`),trigger:`change`},{type:`email`,message:f(`authModule.fields.email.validation.email`),trigger:`change`}],firstName:[{required:!1,message:f(`authModule.fields.firstName.validation.required`),trigger:`change`}],lastName:[{required:!1,message:f(`authModule.fields.lastName.validation.required`),trigger:`change`}]}),P=j,I=e=>e?A[e]??null:null,L=e=>e?e.split(`-`)[0]:null,R=l({email:s.profile.email??`@`,firstName:s.profile.firstName,lastName:s.profile.lastName,language:I(s.profile.language??null)}),z,B=()=>{window.clearTimeout(z),c(`update:remoteFormResult`,N.NONE)};return a(()=>s.remoteFormSubmit,async e=>{e&&(c(`update:remoteFormSubmit`,!1),_.value.clearValidate(),_.value.validate(async e=>{if(!e)return;c(`update:remoteFormResult`,N.WORKING);let t=f(`authModule.messages.profileNotEdited`);try{await g.edit({id:s.profile.id,data:{firstName:R.firstName,lastName:R.lastName,email:R.email,language:L(R.language)}}),R.language&&(p.value=R.language,S(R.language)),c(`update:remoteFormResult`,N.OK),m.success(f(`authModule.messages.profileEdited`)),z=window.setTimeout(B,2e3)}catch(e){e instanceof Error&&`exception`in e&&e.exception instanceof Error?m.exception(t):m.error(t),c(`update:remoteFormResult`,N.ERROR),z=window.setTimeout(B,2e3)}}))}),a(()=>s.remoteFormReset,e=>{c(`update:remoteFormReset`,!1),e&&(R.email=s.profile.email??`@`,R.firstName=s.profile.firstName,R.lastName=s.profile.lastName,R.language=I(s.profile.language??null))}),(n,i)=>(e(),d(o(C),{ref_key:`profileFormEl`,ref:_,model:R,rules:D,"label-position":s.layout===o(F).PHONE?`top`:`right`,"label-width":180,"status-icon":``},{default:r(()=>[b(o(w),{label:o(f)(`authModule.fields.email.title`),prop:`email`},{default:r(()=>[b(o(E),{modelValue:R.email,"onUpdate:modelValue":i[0]||=e=>R.email=e,name:`email`},null,8,[`modelValue`])]),_:1},8,[`label`]),b(o(w),{label:o(f)(`authModule.fields.firstName.title`),prop:`firstName`},{default:r(()=>[b(o(E),{modelValue:R.firstName,"onUpdate:modelValue":i[1]||=e=>R.firstName=e,name:`firstName`},null,8,[`modelValue`])]),_:1},8,[`label`]),b(o(w),{label:o(f)(`authModule.fields.lastName.title`),prop:`lastName`},{default:r(()=>[b(o(E),{modelValue:R.lastName,"onUpdate:modelValue":i[2]||=e=>R.lastName=e,name:`lastName`},null,8,[`modelValue`])]),_:1},8,[`label`]),b(o(w),{label:o(f)(`authModule.fields.language.title`),prop:`language`},{default:r(()=>[b(o(M),{modelValue:R.language,"onUpdate:modelValue":i[3]||=e=>R.language=e,placeholder:o(f)(`authModule.fields.language.placeholder`),clearable:``},{default:r(()=>[(e(!0),y(h,null,t(o(P),t=>(e(),d(o(k),{key:t.value,label:`${t.flag} ${t.label}`,value:t.value},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1},8,[`model`,`rules`,`label-position`]))}}),L=i({name:`SettingsPasswordForm`,__name:`settings-password-form`,props:{profile:{},remoteFormSubmit:{type:Boolean,default:!1},remoteFormResult:{default:N.NONE},remoteFormReset:{type:Boolean,default:!1},layout:{default:F.DEFAULT}},emits:[`update:remoteFormSubmit`,`update:remoteFormResult`,`update:remoteFormReset`],setup(t,{emit:n}){let i=t,s=n,{t:c}=u(),f=O(),p=T().getStore(x),m=v(void 0),h=l({currentPassword:[{required:!0,message:c(`authModule.fields.currentPassword.validation.required`),trigger:`change`}],newPassword:[{required:!0,message:c(`authModule.fields.newPassword.validation.required`),trigger:`change`}],repeatPassword:[{validator:(e,t,n)=>{t===``?n(Error(c(`authModule.fields.repeatPassword.validation.required`))):t===g.newPassword?n():n(Error(c(`authModule.fields.repeatPassword.validation.different`)))},trigger:`change`}]}),g=l({currentPassword:``,newPassword:``,repeatPassword:``}),_,y=()=>{window.clearTimeout(_),s(`update:remoteFormResult`,N.NONE)};return a(()=>i.remoteFormSubmit,async e=>{e&&(s(`update:remoteFormSubmit`,!1),m.value.clearValidate(),m.value.validate(async e=>{if(!e)return;s(`update:remoteFormResult`,N.WORKING);let t=c(`authModule.messages.passwordNotEdited`);try{await p.edit({id:i.profile.id,data:{password:{current:g.currentPassword,new:g.newPassword}}}),s(`update:remoteFormResult`,N.OK),f.success(c(`authModule.messages.passwordEdited`)),_=window.setTimeout(y,2e3)}catch(e){e instanceof Error&&`exception`in e&&e.exception instanceof Error?f.exception(t):f.error(t),s(`update:remoteFormResult`,N.ERROR),_=window.setTimeout(y,2e3)}}))}),a(()=>i.remoteFormReset,e=>{s(`update:remoteFormReset`,!1),e&&(m.value?.resetFields(),g.currentPassword=``,g.newPassword=``,g.repeatPassword=``)}),(t,n)=>(e(),d(o(C),{ref_key:`passwordFormEl`,ref:m,model:g,rules:h,"label-position":i.layout===o(F).PHONE?`top`:`right`,"label-width":180,"status-icon":``},{default:r(()=>[b(o(w),{label:o(c)(`authModule.fields.currentPassword.title`),prop:`currentPassword`},{default:r(()=>[b(o(E),{modelValue:g.currentPassword,"onUpdate:modelValue":n[0]||=e=>g.currentPassword=e,name:`currentPassword`,type:`password`,"show-password":``},null,8,[`modelValue`])]),_:1},8,[`label`]),b(o(w),{label:o(c)(`authModule.fields.newPassword.title`),prop:`newPassword`},{default:r(()=>[b(o(E),{modelValue:g.newPassword,"onUpdate:modelValue":n[1]||=e=>g.newPassword=e,name:`newPassword`,type:`password`,"show-password":``},null,8,[`modelValue`])]),_:1},8,[`label`]),b(o(w),{label:o(c)(`authModule.fields.repeatPassword.title`),prop:`repeatPassword`},{default:r(()=>[b(o(E),{modelValue:g.repeatPassword,"onUpdate:modelValue":n[2]||=e=>g.repeatPassword=e,name:`repeatPassword`,type:`password`,"show-password":``},null,8,[`modelValue`])]),_:1},8,[`label`])]),_:1},8,[`model`,`rules`,`label-position`]))}}),R=i({name:`SignInForm`,__name:`sign-in-form`,props:{remoteFormSubmit:{type:Boolean},remoteFormResult:{default:N.NONE},remoteFormReset:{type:Boolean,default:!1}},emits:[`update:remoteFormResult`,`update:remoteFormReset`],setup(t,{emit:n}){let i=t,c=n,{t:p}=u(),h=O(),y=T().getStore(x),S=v(void 0),D=v(void 0),k=l({username:[{required:!0,message:p(`authModule.fields.username.validation.required`),trigger:`change`}],password:[{required:!0,message:p(`authModule.fields.password.validation.required`),trigger:`change`}]}),A=l({username:``,password:``}),j=async e=>{e&&await e.validate(async e=>{if(e){c(`update:remoteFormResult`,N.WORKING);try{await y.create({data:{username:A.username,password:A.password}}),c(`update:remoteFormResult`,N.OK)}catch(e){c(`update:remoteFormResult`,N.ERROR);let t=p(`authModule.messages.requestError`);e instanceof Error&&`exception`in e&&e.exception instanceof Error?h.exception(t):h.error(t)}}})},M=()=>{D.value?.focus()},P=()=>{j(S.value)};return a(()=>i.remoteFormReset,e=>{if(c(`update:remoteFormReset`,!1),e){if(!S.value)return;S.value.resetFields()}}),(t,n)=>(e(),d(o(C),{ref_key:`signFormEl`,ref:S,model:A,rules:k,"label-position":`top`,"status-icon":``,class:`px-5`,onSubmit:_(j,[`prevent`])},{default:r(()=>[b(o(w),{label:o(p)(`authModule.fields.username.title`),prop:`username`,class:`mb-5`},{default:r(()=>[b(o(E),{modelValue:A.username,"onUpdate:modelValue":n[0]||=e=>A.username=e,name:`username`,onKeyup:g(M,[`enter`])},null,8,[`modelValue`])]),_:1},8,[`label`]),b(o(w),{label:o(p)(`authModule.fields.password.title`),prop:`password`,class:`mb-5`},{default:r(()=>[b(o(E),{ref_key:`passwordInputEl`,ref:D,modelValue:A.password,"onUpdate:modelValue":n[1]||=e=>A.password=e,type:`password`,name:`password`,"show-password":``,onKeyup:g(P,[`enter`])},null,8,[`modelValue`])]),_:1},8,[`label`]),b(o(f),{type:`primary`,size:`large`,class:`block w-full`,onClick:n[2]||=e=>j(S.value)},{default:r(()=>[s(m(o(p)(`authModule.buttons.signIn.title`)),1)]),_:1})]),_:1},8,[`model`,`rules`]))}}),z={class:`flex flex-row flex-nowrap gap-5`},B={class:`mb-5`},V={class:`mb-5`},H={class:`mb-10`},U={class:`mt-5 px-5`},W=i({name:`SignUpForm`,__name:`sign-up-form`,props:{remoteFormSubmit:{type:Boolean,default:!1},remoteFormResult:{default:N.NONE},remoteFormReset:{type:Boolean,default:!1}},emits:[`update:remoteFormResult`,`update:remoteFormReset`],setup(t,{emit:n}){let i=t,d=n,{t:g}=u(),S=O(),D=c(),k=T().getStore(x),A=v(void 0),j=l({email:[{required:!0,message:g(`authModule.fields.email.validation.required`),trigger:`change`},{type:`email`,message:g(`authModule.fields.email.validation.email`),trigger:`change`}],firstName:[{required:!0,message:g(`authModule.fields.firstName.validation.required`),trigger:`change`}],lastName:[{required:!0,message:g(`authModule.fields.lastName.validation.required`),trigger:`change`}],username:[{required:!0,message:g(`authModule.fields.username.validation.required`),trigger:`change`}],password:[{required:!0,message:g(`authModule.fields.password.validation.required`),trigger:`change`}]}),M=l({username:``,password:``,email:``,firstName:``,lastName:``}),F=async e=>{e&&await e.validate(async e=>{if(e){d(`update:remoteFormResult`,N.WORKING);try{await k.register({data:{username:M.username,password:M.password,firstName:M.firstName,lastName:M.lastName,email:M.email}}),d(`update:remoteFormResult`,N.OK)}catch(e){d(`update:remoteFormResult`,N.ERROR);let t=g(`authModule.messages.requestError`);e instanceof Error&&`exception`in e&&e.exception instanceof Error?S.exception(t):S.error(t)}}})},I=()=>{D.push({name:P.SIGN_IN})};return a(()=>i.remoteFormReset,e=>{if(d(`update:remoteFormReset`,!1),e){if(!A.value)return;A.value.resetFields()}}),(t,n)=>(e(),y(h,null,[b(o(C),{ref_key:`signFormEl`,ref:A,model:M,rules:j,"label-position":`top`,"status-icon":``,class:`px-5`,onSubmit:_(F,[`prevent`])},{default:r(()=>[p(`div`,z,[b(o(w),{label:o(g)(`authModule.fields.firstName.title`),prop:`firstName`},{default:r(()=>[b(o(E),{modelValue:M.firstName,"onUpdate:modelValue":n[0]||=e=>M.firstName=e,placeholder:o(g)(`authModule.fields.firstName.placeholder`),name:`firstName`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),b(o(w),{label:o(g)(`authModule.fields.lastName.title`),prop:`lastName`},{default:r(()=>[b(o(E),{modelValue:M.lastName,"onUpdate:modelValue":n[1]||=e=>M.lastName=e,palceholder:o(g)(`authModule.fields.lastName.placeholder`),name:`lastName`},null,8,[`modelValue`,`palceholder`])]),_:1},8,[`label`])]),p(`div`,B,[b(o(w),{label:o(g)(`authModule.fields.email.title`),prop:`email`},{default:r(()=>[b(o(E),{modelValue:M.email,"onUpdate:modelValue":n[2]||=e=>M.email=e,palceholder:o(g)(`authModule.fields.email.placeholder`),name:`email`},null,8,[`modelValue`,`palceholder`])]),_:1},8,[`label`])]),p(`div`,V,[b(o(w),{label:o(g)(`authModule.fields.username.title`),prop:`username`},{default:r(()=>[b(o(E),{modelValue:M.username,"onUpdate:modelValue":n[3]||=e=>M.username=e,"show-password":``,name:`username`,type:`text`},null,8,[`modelValue`])]),_:1},8,[`label`])]),p(`div`,H,[b(o(w),{label:o(g)(`authModule.fields.password.title`),prop:`password`},{default:r(()=>[b(o(E),{modelValue:M.password,"onUpdate:modelValue":n[4]||=e=>M.password=e,"show-password":``,name:`password`,type:`password`},null,8,[`modelValue`])]),_:1},8,[`label`])]),b(o(f),{type:`primary`,size:`large`,class:`block w-full`,onClick:n[5]||=e=>F(A.value)},{default:r(()=>[s(m(o(g)(`authModule.buttons.signUp.title`)),1)]),_:1})]),_:1},8,[`model`,`rules`]),p(`div`,U,[b(o(f),{class:`block w-full`,onClick:n[6]||=e=>I()},{default:r(()=>[s(m(o(g)(`authModule.buttons.backToSignIn.title`)),1)]),_:1})])],64))}}),G={class:`flex flex-row justify-center items-center mt-4`},K=i({name:`UnlockForm`,__name:`unlock-form`,props:{remoteFormSubmit:{type:Boolean},remoteFormResult:{default:N.NONE},remoteFormReset:{type:Boolean,default:!1}},emits:[`update:remoteFormResult`,`update:remoteFormReset`,`signOut`],setup(t,{emit:i}){let c=t,h=i,{t:y}=u(),x=O(),S=D(),T=v(void 0),k=v(void 0),A=l({password:[{required:!0,message:y(`authModule.fields.password.validation.required`),trigger:`change`}]}),j=l({password:``}),M=async e=>{e&&await e.validate(async e=>{if(e){let e=S?.details.value?.username;if(!e){h(`update:remoteFormResult`,N.ERROR),x.error(y(`authModule.messages.requestError`));return}h(`update:remoteFormResult`,N.WORKING);try{await S.signIn({username:e,password:j.password})?h(`update:remoteFormResult`,N.OK):(h(`update:remoteFormResult`,N.ERROR),x.error(y(`authModule.messages.invalidPassword`)))}catch{h(`update:remoteFormResult`,N.ERROR),x.error(y(`authModule.messages.invalidPassword`))}}})},P=()=>{h(`signOut`)};return n(()=>{k.value?.focus()}),a(()=>c.remoteFormReset,e=>{if(h(`update:remoteFormReset`,!1),e){if(!T.value)return;T.value.resetFields()}}),(t,n)=>(e(),d(o(C),{ref_key:`unlockFormEl`,ref:T,model:j,rules:A,"label-position":`top`,"status-icon":``,class:`px-5`,onSubmit:_(M,[`prevent`])},{default:r(()=>[b(o(w),{label:o(y)(`authModule.fields.password.title`),prop:`password`,class:`mb-5`},{default:r(()=>[b(o(E),{ref_key:`passwordInputEl`,ref:k,modelValue:j.password,"onUpdate:modelValue":n[0]||=e=>j.password=e,type:`password`,name:`password`,"show-password":``,onKeyup:n[1]||=g(e=>M(T.value),[`enter`])},null,8,[`modelValue`])]),_:1},8,[`label`]),b(o(f),{type:`primary`,size:`large`,class:`block w-full mb-3`,onClick:n[2]||=e=>M(T.value)},{default:r(()=>[s(m(o(y)(`authModule.buttons.unlock.title`)),1)]),_:1}),p(`div`,G,[b(o(f),{type:`danger`,link:``,onClick:P},{default:r(()=>[s(m(o(y)(`authModule.buttons.signOut.title`)),1)]),_:1})])]),_:1},8,[`model`,`rules`]))}});export{I as a,L as i,W as n,R as r,K as t};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/view-displays-Bv-jxEGc.js","assets/icon-with-child-DmQ_XhQy.js","assets/chunk-DECur_0Z.js","assets/icon-with-child-1Kb-D21P.css","assets/common-DlW3qRTQ.js","assets/common-BY9Gg1EI.css","assets/composables-Da97cjje.js","assets/types-B8upWpl6.js","assets/keys-CGGnS6tq.js","assets/useDataSources-Bx93bXrZ.js","assets/usePage-DTL4RY9u.js","assets/composables-CU6q9-8B.js","assets/useLocation-BM-8kEbz.js","assets/components-D8PpAJgM.js","assets/composables-CjGTzpGj.js","assets/keys-DHSxrtbW.js","assets/useSpaces-DnSZteHf.js","assets/input-number-BF0uWlX2.js","assets/pagination-BN87kdDs.js","assets/radio-BmI00y-5.js","assets/slider-YJlo4Ibo.js","assets/table-5pjI7ihN.js","assets/components-BGiFbtPn.css","assets/composables-Cl0F9F_S.js","assets/keys-Cm97UJHM.js","assets/drawer-Db27jij8.js","assets/vue-meta.esm-browser.min-3_YV25pX.js","assets/view-display-edit-DOBx3FR9.js","assets/view-display-BoDjtT_C.js","assets/useDevices-CuJhDHbf.js","assets/view-display-tokens-ylzZVdwc.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import"./chunk-DECur_0Z.js";import{$r as e,Ai as t,Br as n,Hr as r,Lr as i,Nr as a,O as o,Oi as s,Qr as c,Sr as l,Xr as u,_i as d,_r as f,ai as p,br as m,c as h,ci as g,d as _,f as v,gr as y,h as b,hr as x,i as S,ji as C,lr as w,m as T,mr as E,n as D,p as O,pt as ee,sr as k,t as te,ui as A,vr as j,xr as M}from"./icon-with-child-DmQ_XhQy.js";import{B as ne,Bn as re,Ci as ie,F as ae,Fi as oe,Fn as N,H as se,Hr as ce,In as le,Ir as ue,Jn as de,Jr as fe,Kr as pe,Mn as P,N as me,Ni as he,Nr as ge,O as _e,Pi as F,Pn as ve,S as ye,T as be,Ti as I,Un as L,Ur as R,Wn as z,Zn as B,_a as xe,_i as Se,_n as Ce,d as we,di as Te,fi as Ee,gi as De,gn as Oe,hi as ke,hn as Ae,it as V,jr as je,mi as Me,mn as Ne,pi as Pe,qn as H,st as Fe,ui as Ie,vn as Le,wi as Re,wn as ze,y as Be,yi as Ve,yn as He,zn as Ue}from"./common-DlW3qRTQ.js";import{n as U,t as We}from"./table-5pjI7ihN.js";import{t as W}from"./input-number-BF0uWlX2.js";import{t as Ge}from"./pagination-BN87kdDs.js";import{d as Ke}from"./keys-CGGnS6tq.js";import{_ as qe,f as Je,m as Ye,p as Xe,s as Ze,x as Qe}from"./composables-Da97cjje.js";import{i as $e}from"./useDataSources-Bx93bXrZ.js";import{t as et}from"./keys-DHSxrtbW.js";import{c as G,d as K,f as tt,i as nt,m as q,o as J,s as Y,u as rt}from"./composables-CjGTzpGj.js";import{i as it,o as at,r as ot}from"./components-D8PpAJgM.js";var st={class:`flex w-full`},ct=l({name:`PagesFilter`,__name:`pages-filter`,props:{filters:{},filtersActive:{type:Boolean},selectedCount:{},bulkActions:{}},emits:[`update:filters`,`reset-filters`,`adjust-list`,`bulk-action`],setup(e,{emit:t}){let r=e,i=t,a=ee(`pages-filter`),{t:l}=_(),p=ge(r,`filters`,i),m=A(void 0);return u(()=>p.value.search,e=>{e===``&&(p.value.search=void 0)}),(e,t)=>(n(),j(`div`,st,[M(d(he),{ref_key:`filterFormEl`,ref:m,inline:!0,model:d(p),class:s([[d(a).b()],`grow-1`])},{default:c(()=>[M(d(I),{modelValue:d(p).search,"onUpdate:modelValue":t[0]||=e=>d(p).search=e,placeholder:d(l)(`dashboardModule.fields.pages.search.placeholder`),class:`max-w[280px] p-1`,clearable:``},{suffix:c(()=>[M(d(o),null,{default:c(()=>[M(d(O),{icon:`mdi:magnify`})]),_:1})]),_:1},8,[`modelValue`,`placeholder`])]),_:1},8,[`model`,`class`]),M(d(se),{"selected-count":r.selectedCount,actions:r.bulkActions,onAction:t[1]||=e=>i(`bulk-action`,e)},null,8,[`selected-count`,`actions`]),r.filtersActive?(n(),y(d(b),{key:0,plain:``,class:`px-2! mt-1 mr-1`,onClick:t[2]||=e=>i(`reset-filters`)},{default:c(()=>[M(d(O),{icon:`mdi:filter-off`})]),_:1})):f(``,!0),M(d(b),{plain:``,class:`px-2! mt-1 mr-1`,onClick:t[3]||=e=>i(`adjust-list`)},{default:c(()=>[M(d(O),{icon:`mdi:slider`})]),_:1})]))}}),lt={menu:{title:`Displeje`},title:`Displeje`,description:`Správa vašich displejových zařízení`,headings:{list:`Displeje`,adjustFilters:`Filtrovat displeje`,removeDisplay:`Odebrat displej`,removeBulkDisplays:`Odebrat displeje`,discard:`Zahodit změny`,aboutDisplayConfiguration:`Konfigurace displeje`},subHeadings:{list:`Správa připojených displejových zařízení`,adjustFilters:`Upravit nastavení filtrů`},breadcrumbs:{displays:{list:`displeje`,detail:`displej: {display}`,edit:`upravit displej`,tokens:`přístupové tokeny`}},meta:{displays:{list:{title:`Seznam displejů`},edit:{title:`Upravit displej: {display}`},detail:{title:`Displej: {display}`},tokens:{title:`Přístupové tokeny: {display}`}}},table:{columns:{name:`Název`,role:`Role`,macAddress:`MAC adresa`,version:`Verze`,resolution:`Rozlišení`,layout:`Rozložení`,audio:`Zvuk`,state:{title:`Stav`},currentIpAddress:`Aktuální IP`,local:`Lokální`,status:`Stav`},tooltips:{speakerSupported:`Reproduktor podporován`,microphoneSupported:`Mikrofon podporován`}},fields:{search:{placeholder:`Hledat displeje...`},config:{deploymentMode:{title:`Režim brány`,description:`Režim brány pro registraci displejů`,placeholder:`Vyberte režim brány`,validation:{required:`Režim brány je povinný`}},permitJoinDurationMs:{title:`Doba povolení připojení`,description:`Doba v milisekundách, po kterou zůstane povolení připojení aktivní`,placeholder:`120000`,unit:`ms`,validation:{required:`Doba povolení připojení je povinná`,min:`Doba povolení připojení musí být alespoň 1000 ms`}}},displays:{id:{title:`Interní identifikátor`,placeholder:`ID displeje`},name:{title:`Název`,placeholder:`Zadejte název displeje`,validation:{maxLength:`Název musí mít méně než 100 znaků`}},role:{title:`Role displeje`,description:`Účel tohoto displeje ve vašem systému chytré domácnosti`,options:{room:`Místnost (ovládání jedné místnosti)`,master:`Hlavní (přehled celého domu)`,entry:`Vstup (režimy domu a zabezpečení)`},comingSoon:`Brzy`},unitSize:{title:`Velikost jednotky`,unit:`px`,validation:{min:`Velikost jednotky musí být alespoň 1`}},rows:{title:`Řádky`,validation:{min:`Řádky musí být alespoň 1`}},cols:{title:`Sloupce`,validation:{min:`Sloupce musí být alespoň 1`}},brightness:{title:`Jas`,validation:{range:`Jas musí být mezi 0 a 100`}},screenLockDuration:{title:`Doba uzamčení obrazovky`,options:{"15s":`15 sekund`,"30s":`30 sekund`,"1min":`1 minuta`,"2min":`2 minuty`,"5min":`5 minut`,"10min":`10 minut`,"30min":`30 minut`,never:`Nikdy`}},darkMode:{title:`Tmavý režim`},screenSaver:{title:`Spořič obrazovky`},screenPowerOff:{title:`Vypnutí obrazovky`},audio:{speaker:{title:`Reproduktor (zvukový výstup)`},microphone:{title:`Mikrofon (zvukový vstup)`}},speaker:{title:`Reproduktor povolen`},speakerVolume:{title:`Hlasitost reproduktoru`,validation:{range:`Hlasitost musí být mezi 0 a 100`}},microphone:{title:`Mikrofon povolen`},microphoneVolume:{title:`Hlasitost mikrofonu`,validation:{range:`Hlasitost musí být mezi 0 a 100`}},homeMode:{title:`Režim domovské stránky`,description:`Jak je určena domovská stránka při spuštění displeje`,options:{autoSpace:`Automaticky`,explicit:`Explicitně`}},homePageId:{title:`Domovská stránka`,placeholder:`Vyberte domovskou stránku`,description:`Stránka zobrazená při spuštění displeje (používá se pouze v režimu Explicitní)`,validation:{required:`Domovská stránka je povinná v režimu Explicitní`}},roomId:{title:`Přiřazená místnost`,placeholder:`Vyberte místnost`,description:`Místnost, kterou tento displej ovládá. Povinné pro displeje s rolí Místnost.`,validation:{required:`Přiřazení místnosti je povinné pro displeje s rolí Místnost`}},numberFormat:{title:`Formát čísel`,placeholder:`Výchozí systémový`,values:{commaDot:`1,234.56 (čárka / tečka)`,dotComma:`1.234,56 (tečka / čárka)`,spaceComma:`1 234,56 (mezera / čárka)`,none:`1234.56 (bez seskupení)`}},temperatureUnit:{title:`Jednotka teploty`,placeholder:`Výchozí systémová`,values:{celsius:`Celsius (°C)`,fahrenheit:`Fahrenheit (°F)`}},windSpeedUnit:{title:`Jednotka rychlosti větru`,placeholder:`Výchozí systémová`,values:{ms:`Metry za sekundu (m/s)`,kmh:`Kilometry za hodinu (km/h)`,mph:`Míle za hodinu (mph)`,knots:`Uzly (kn)`}},pressureUnit:{title:`Jednotka tlaku`,placeholder:`Výchozí systémová`,values:{hpa:`Hektopascal (hPa)`,mbar:`Milibar (mbar)`,inhg:`Palce rtuti (inHg)`,mmhg:`Milimetry rtuti (mmHg)`}},precipitationUnit:{title:`Jednotka srážek`,placeholder:`Výchozí systémová`,values:{mm:`Milimetry (mm)`,inches:`Palce (in)`}},distanceUnit:{title:`Jednotka vzdálenosti`,placeholder:`Výchozí systémová`,values:{km:`Kilometry (km)`,miles:`Míle (mi)`,meters:`Metry (m)`,feet:`Stopy (ft)`}},weatherLocationId:{title:`Meteorologická lokace`,placeholder:`Výchozí systémová (primární lokace)`,description:`Přepsat meteorologickou lokaci pro tento displej. Ponechte prázdné pro použití primární lokace z konfigurace počasí.`}}},filters:{darkMode:{title:`Tmavý režim`,values:{enabled:`Povoleno`,disabled:`Zakázáno`,all:`Vše`}},screenSaver:{title:`Spořič obrazovky`,values:{enabled:`Povoleno`,disabled:`Zakázáno`,all:`Vše`}},state:{title:`Stav`},states:{title:`Stav`}},states:{connected:`Připojeno`,disconnected:`Odpojeno`,lost:`Ztraceno`,unknown:`Neznámý`},roles:{room:`Místnost`,master:`Hlavní`,entry:`Vstup`},texts:{loadingDisplays:`Načítání displejů...`,loadingDisplay:`Načítání displeje...`,noDisplays:`Zatím nejsou registrovány žádné displeje`,noFilteredDisplays:`Žádné displeje neodpovídají kritériím filtru`,confirmDiscard:`Máte neuložené změny. Opravdu je chcete zahodit?`,aboutDisplayConfiguration:`Nakonfigurujte režim nasazení a nastavení registrace displejů. Režim nasazení určuje, jak je backend a panel organizován, zatímco doba povolení připojení řídí, jak dlouho se mohou nové displeje registrovat v síti.`},buttons:{detail:{title:`Detail`},adjust:{title:`Filtr`},resetFilters:{title:`Resetovat filtry`},reset:{title:`Resetovat filtry`},yes:{title:`Ano`},no:{title:`Ne`},save:{title:`Uložit`},cancel:{title:`Zrušit`},close:{title:`Zavřít`},discard:{title:`Zahodit`},permitJoin:{title:`Povolit připojení`,disable:`Zakázat připojení ({time})`},back:{title:`Zpět`}},edit:{sections:{general:{title:`Obecné`},layout:{title:`Rozložení`,badge:`Pokročilé`,description:`Pokročilá nastavení, která řídí, kolik dlaždic je zobrazeno na obrazovce a jak jsou uspořádány v mřížce.`},appearance:{title:`Vzhled`},homePage:{title:`Domovská stránka`,autoRoomHint:`V <strong>automatickém režimu</strong> displej otevře výchozí systémové zobrazení na základě jeho role a přiřazení.`},weather:{title:`Meteorologická lokace`,description:`Přepsat meteorologickou lokaci pro tento displej. Pokud není nastaveno, bude použita primární lokace z konfigurace počasí.`},units:{title:`Přepsání jednotek`,description:`Přepsat systémové měrné jednotky pro tento displej. Ponechte prázdné pro použití systémových výchozích hodnot.`},audio:{title:`Zvuk`,badge:`Pokročilé`}}},detail:{title:`Detail displeje`,info:{title:`Informace o displeji`,role:`Role`,macAddress:`MAC adresa`,version:`Verze`,build:`Sestavení`,resolution:`Rozlišení`,pixelRatio:`Poměr pixelů`,gridSize:`Velikost mřížky`,registeredFromIp:`Registrační IP`,currentIpAddress:`Aktuální IP`,status:`Stav připojení`},settings:{title:`Nastavení displeje`,gridSize:`Velikost mřížky`,darkMode:`Tmavý režim`,brightness:`Jas`,screenLockDuration:`Doba uzamčení obrazovky`,screenSaver:`Spořič obrazovky`,screenPowerOff:`Vypnutí obrazovky`,speakerEnabled:`Reproduktor povolen`,speakerVolume:`Hlasitost reproduktoru`,microphoneEnabled:`Mikrofon povolen`,microphoneVolume:`Hlasitost mikrofonu`},peripherals:{title:`Periferie`,audioOutput:`Zvukový výstup`,audioOutputVolume:`Hlasitost zvukového výstupu`,audioInput:`Zvukový vstup`,audioInputVolume:`Hlasitost zvukového vstupu`},audio:{speaker:{title:`Reproduktor (zvukový výstup)`},microphone:{title:`Mikrofon (zvukový vstup)`}},tokens:{title:`Přístupové tokeny`,subtitle:`Správa tokenů`,description:`Správa přístupových tokenů pro tento displej. Každý displej by měl mít maximálně jeden aktivní token.`,noTokens:`Žádné aktivní tokeny`,revokeConfirm:`Opravdu chcete odvolat přístupový token? Displej se bude muset znovu zaregistrovat.`,revoked:`Token byl úspěšně odvolán`},spaceContext:{title:`Kontext prostoru`,role:`Role displeje`,homeMode:`Režim domovské stránky`,assignedRoom:`Přiřazená místnost`,notAssigned:`Nepřiřazeno`,initialView:`Počáteční zobrazení`,systemViews:`Systémová zobrazení`,selectedPage:`Vybraná stránka`,hint:`Hlavní zobrazení tohoto displeje se generují automaticky na základě jeho role a přiřazeného prostoru.`,homeModes:{auto_space:`Automaticky`,explicit:`Explicitně`},initialViews:{roomOverview:`Přehled místnosti`,houseOverview:`Přehled domu`,entryOverview:`Přehled vstupu`},views:{overview:`Přehled`,lights:`Světla`,climate:`Klima`}}},messages:{notFound:`Displej nebyl nalezen`,loadError:`Nepodařilo se načíst displeje`,confirmRemove:`Opravdu chcete odebrat displej "{name}"? Tuto akci nelze vrátit zpět.`,confirmBulkRemove:`Opravdu chcete odebrat {count} displej(ů)? Tuto akci nelze vrátit zpět.`,removed:`Displej byl úspěšně odebrán`,bulkRemoved:`{count} displej(ů) bylo odebráno`,bulkRemoveFailed:`Nepodařilo se odebrat {count} displej(ů)`,edited:`Displej {display} byl aktualizován`,notEdited:`Displej {display} nebyl aktualizován`,deletedWhileEditing:`Tento displej byl smazán a již není k dispozici.`,permitJoinActivated:`Povolení připojení bylo úspěšně aktivováno`,permitJoinDeactivated:`Povolení připojení bylo úspěšně deaktivováno`,permitJoinError:`Nepodařilo se aktivovat povolení připojení`,permitJoinDeactivateError:`Nepodařilo se deaktivovat povolení připojení`,config:{edited:`Konfigurace displejů byla úspěšně aktualizována`,notEdited:`Nepodařilo se aktualizovat konfiguraci displejů`}},actions:{revokeToken:`Odvolat token`,manageTokens:`Spravovat tokeny`}},ut={menu:{title:`Anzeigen`},title:`Displays`,description:`Verwalten Sie Ihre Display-Geräte`,headings:{list:`Displays`,adjustFilters:`Displays filtern`,removeDisplay:`Display entfernen`,removeBulkDisplays:`Displays entfernen`,discard:`Änderungen verwerfen`,aboutDisplayConfiguration:`Display-Konfiguration`},subHeadings:{list:`Verbundene Display-Geräte verwalten`,adjustFilters:`Filtereinstellungen anpassen`},breadcrumbs:{displays:{list:`Displays`,detail:`Display: {display}`,edit:`Display bearbeiten`,tokens:`Zugriffstoken`}},meta:{displays:{list:{title:`Displays auflisten`},edit:{title:`Display bearbeiten: {display}`},detail:{title:`Display: {display}`},tokens:{title:`Zugriffstoken: {display}`}}},table:{columns:{name:`Name`,role:`Rolle`,macAddress:`MAC-Adresse`,version:`Version`,resolution:`Auflösung`,layout:`Layout`,audio:`Audio`,state:{title:`Status`},currentIpAddress:`Aktuelle IP`,local:`Lokal`,status:`Status`},tooltips:{speakerSupported:`Lautsprecher unterstützt`,microphoneSupported:`Mikrofon unterstützt`}},fields:{search:{placeholder:`Displays suchen...`},config:{deploymentMode:{title:`Gateway-Modus`,description:`Gateway-Modus für Display-Registrierung`,placeholder:`Gateway-Modus auswählen`,validation:{required:`Gateway-Modus ist erforderlich`}},permitJoinDurationMs:{title:`Beitrittsdauer erlauben`,description:`Dauer in Millisekunden, die der Beitritt aktiv bleibt`,placeholder:`120000`,unit:`ms`,validation:{required:`Beitrittsdauer ist erforderlich`,min:`Beitrittsdauer muss mindestens 1000 ms sein`}}},displays:{id:{title:`Interner Bezeichner`,placeholder:`Display-ID`},name:{title:`Name`,placeholder:`Display-Namen eingeben`,validation:{maxLength:`Name muss weniger als 100 Zeichen haben`}},role:{title:`Display-Rolle`,description:`Der Zweck dieses Displays in Ihrem Smart-Home-Setup`,options:{room:`Raum (Einzelraumsteuerung)`,master:`Master (Gesamthaus-Überblick)`,entry:`Eingang (Hausmodi und Sicherheit)`},comingSoon:`Bald`},unitSize:{title:`Einheitsgröße`,unit:`px`,validation:{min:`Einheitsgröße muss mindestens 1 sein`}},rows:{title:`Zeilen`,validation:{min:`Zeilen müssen mindestens 1 sein`}},cols:{title:`Spalten`,validation:{min:`Spalten müssen mindestens 1 sein`}},brightness:{title:`Helligkeit`,validation:{range:`Helligkeit muss zwischen 0 und 100 liegen`}},screenLockDuration:{title:`Bildschirmsperrdauer`,options:{"15s":`15 Sekunden`,"30s":`30 Sekunden`,"1min":`1 Minute`,"2min":`2 Minuten`,"5min":`5 Minuten`,"10min":`10 Minuten`,"30min":`30 Minuten`,never:`Nie`}},darkMode:{title:`Dunkelmodus`},screenSaver:{title:`Bildschirmschoner`},screenPowerOff:{title:`Bildschirm ausschalten`},audio:{speaker:{title:`Lautsprecher (Audioausgang)`},microphone:{title:`Mikrofon (Audioeingang)`}},speaker:{title:`Lautsprecher aktiviert`},speakerVolume:{title:`Lautsprecherlautstärke`,validation:{range:`Lautstärke muss zwischen 0 und 100 liegen`}},microphone:{title:`Mikrofon aktiviert`},microphoneVolume:{title:`Mikrofonlautstärke`,validation:{range:`Lautstärke muss zwischen 0 und 100 liegen`}},homeMode:{title:`Startseitenmodus`,description:`Wie die Startseite bestimmt wird, wenn das Display startet`,options:{autoSpace:`Auto`,explicit:`Explizit`}},homePageId:{title:`Startseite`,placeholder:`Startseite auswählen`,description:`Die Seite, die beim Start des Displays angezeigt wird (nur wenn der Startseitenmodus auf Explizit steht)`,validation:{required:`Startseite ist erforderlich, wenn der Startseitenmodus auf Explizit steht`}},roomId:{title:`Zugewiesener Raum`,placeholder:`Raum auswählen`,description:`Der Raum, den dieses Display steuert. Erforderlich für Displays mit Raum-Rolle.`,validation:{required:`Raumzuweisung ist für Displays mit Raum-Rolle erforderlich`}},numberFormat:{title:`Zahlenformat`,placeholder:`Systemstandard`,values:{commaDot:`1,234.56 (Komma / Punkt)`,dotComma:`1.234,56 (Punkt / Komma)`,spaceComma:`1 234,56 (Leerzeichen / Komma)`,none:`1234.56 (keine Gruppierung)`}},temperatureUnit:{title:`Temperatureinheit`,placeholder:`Systemstandard`,values:{celsius:`Celsius (°C)`,fahrenheit:`Fahrenheit (°F)`}},windSpeedUnit:{title:`Windgeschwindigkeitseinheit`,placeholder:`Systemstandard`,values:{ms:`Meter pro Sekunde (m/s)`,kmh:`Kilometer pro Stunde (km/h)`,mph:`Meilen pro Stunde (mph)`,knots:`Knoten (kn)`}},pressureUnit:{title:`Druckeinheit`,placeholder:`Systemstandard`,values:{hpa:`Hektopascal (hPa)`,mbar:`Millibar (mbar)`,inhg:`Zoll Quecksilbersäule (inHg)`,mmhg:`Millimeter Quecksilbersäule (mmHg)`}},precipitationUnit:{title:`Niederschlagseinheit`,placeholder:`Systemstandard`,values:{mm:`Millimeter (mm)`,inches:`Zoll (in)`}},distanceUnit:{title:`Entfernungseinheit`,placeholder:`Systemstandard`,values:{km:`Kilometer (km)`,miles:`Meilen (mi)`,meters:`Meter (m)`,feet:`Fuß (ft)`}},weatherLocationId:{title:`Wetterstandort`,placeholder:`Systemstandard (primärer Standort)`,description:`Überschreiben Sie den Wetterstandort für dieses Display. Leer lassen, um den primären Standort aus der Wetterkonfiguration zu verwenden.`}}},filters:{darkMode:{title:`Dunkelmodus`,values:{enabled:`Aktiviert`,disabled:`Deaktiviert`,all:`Alle`}},screenSaver:{title:`Bildschirmschoner`,values:{enabled:`Aktiviert`,disabled:`Deaktiviert`,all:`Alle`}},state:{title:`Status`},states:{title:`Status`}},states:{connected:`Verbunden`,disconnected:`Getrennt`,lost:`Verloren`,unknown:`Unbekannt`},roles:{room:`Raum`,master:`Master`,entry:`Eingang`},texts:{loadingDisplays:`Displays werden geladen...`,loadingDisplay:`Display wird geladen...`,noDisplays:`Noch keine Displays registriert`,noFilteredDisplays:`Keine Displays entsprechen Ihren Filterkriterien`,confirmDiscard:`Sie haben ungespeicherte Änderungen. Möchten Sie diese wirklich verwerfen?`,aboutDisplayConfiguration:`Konfigurieren Sie den Bereitstellungsmodus und die Display-Registrierungseinstellungen. Der Bereitstellungsmodus bestimmt, wie Backend und Panel organisiert sind, während die Beitrittsdauer steuert, wie lange sich neue Displays im Netzwerk registrieren können.`},buttons:{detail:{title:`Details`},adjust:{title:`Filtern`},resetFilters:{title:`Filter zurücksetzen`},reset:{title:`Filter zurücksetzen`},yes:{title:`Ja`},no:{title:`Nein`},save:{title:`Speichern`},cancel:{title:`Abbrechen`},close:{title:`Schließen`},discard:{title:`Verwerfen`},permitJoin:{title:`Beitritt erlauben`,disable:`Beitritt deaktivieren ({time})`},back:{title:`Zurück`}},edit:{sections:{general:{title:`Allgemein`},layout:{title:`Layout`,badge:`Erweitert`,description:`Erweiterte Einstellungen, die steuern, wie viele Kacheln auf dem Bildschirm angezeigt und wie sie im Raster angeordnet werden.`},appearance:{title:`Erscheinungsbild`},homePage:{title:`Startseite`,autoRoomHint:`Im <strong>Auto-Modus</strong> öffnet das Display die Standard-Systemansicht basierend auf seiner Rolle und Zuweisung.`},weather:{title:`Wetterstandort`,description:`Überschreiben Sie den Wetterstandort für dieses Display. Wenn nicht gesetzt, wird der primäre Standort aus der Wetterkonfiguration verwendet.`},units:{title:`Einheiten-Überschreibungen`,description:`Überschreiben Sie systemweite Maßeinheiten für dieses Display. Leer lassen, um den Systemstandard zu verwenden.`},audio:{title:`Audio`,badge:`Erweitert`}}},detail:{title:`Display-Details`,info:{title:`Display-Informationen`,role:`Rolle`,macAddress:`MAC-Adresse`,version:`Version`,build:`Build`,resolution:`Auflösung`,pixelRatio:`Pixelverhältnis`,gridSize:`Rastergröße`,registeredFromIp:`Registrierte IP`,currentIpAddress:`Aktuelle IP`,status:`Verbindungsstatus`},settings:{title:`Display-Einstellungen`,gridSize:`Rastergröße`,darkMode:`Dunkelmodus`,brightness:`Helligkeit`,screenLockDuration:`Bildschirmsperrdauer`,screenSaver:`Bildschirmschoner`,screenPowerOff:`Bildschirm ausschalten`,speakerEnabled:`Lautsprecher aktiviert`,speakerVolume:`Lautsprecherlautstärke`,microphoneEnabled:`Mikrofon aktiviert`,microphoneVolume:`Mikrofonlautstärke`},peripherals:{title:`Peripheriegeräte`,audioOutput:`Audioausgang`,audioOutputVolume:`Audioausgang-Lautstärke`,audioInput:`Audioeingang`,audioInputVolume:`Audioeingang-Lautstärke`},audio:{speaker:{title:`Lautsprecher (Audioausgang)`},microphone:{title:`Mikrofon (Audioeingang)`}},tokens:{title:`Zugriffstoken`,subtitle:`Token verwalten`,description:`Verwalten Sie Zugriffstoken für dieses Display. Jedes Display sollte höchstens einen aktiven Token haben.`,noTokens:`Keine aktiven Token`,revokeConfirm:`Sind Sie sicher, dass Sie den Zugriffstoken widerrufen möchten? Das Display muss sich erneut registrieren.`,revoked:`Token erfolgreich widerrufen`},spaceContext:{title:`Raumkontext`,role:`Display-Rolle`,homeMode:`Startseitenmodus`,assignedRoom:`Zugewiesener Raum`,notAssigned:`Nicht zugewiesen`,initialView:`Anfangsansicht`,systemViews:`Systemansichten`,selectedPage:`Ausgewählte Seite`,hint:`Die Hauptansichten dieses Displays werden automatisch basierend auf seiner Rolle und dem zugewiesenen Raum generiert.`,homeModes:{auto_space:`Auto`,explicit:`Explizit`},initialViews:{roomOverview:`Raumübersicht`,houseOverview:`Hausübersicht`,entryOverview:`Eingangsübersicht`},views:{overview:`Übersicht`,lights:`Lichter`,climate:`Klima`}}},messages:{notFound:`Display nicht gefunden`,loadError:`Displays konnten nicht geladen werden`,confirmRemove:`Sind Sie sicher, dass Sie das Display "{name}" entfernen möchten? Diese Aktion kann nicht rückgängig gemacht werden.`,confirmBulkRemove:`Sind Sie sicher, dass Sie {count} Display(s) entfernen möchten? Diese Aktion kann nicht rückgängig gemacht werden.`,removed:`Display erfolgreich entfernt`,bulkRemoved:`{count} Display(s) wurden entfernt`,bulkRemoveFailed:`Entfernung von {count} Display(s) fehlgeschlagen`,edited:`Display {display} wurde aktualisiert`,notEdited:`Display {display} wurde nicht aktualisiert`,deletedWhileEditing:`Dieses Display wurde gelöscht und ist nicht mehr verfügbar.`,permitJoinActivated:`Beitrittserlaubnis erfolgreich aktiviert`,permitJoinDeactivated:`Beitrittserlaubnis erfolgreich deaktiviert`,permitJoinError:`Aktivierung der Beitrittserlaubnis fehlgeschlagen`,permitJoinDeactivateError:`Deaktivierung der Beitrittserlaubnis fehlgeschlagen`,config:{edited:`Display-Konfiguration wurde erfolgreich aktualisiert`,notEdited:`Aktualisierung der Display-Konfiguration fehlgeschlagen`}},actions:{revokeToken:`Token widerrufen`,manageTokens:`Token verwalten`}},dt={menu:{title:`Displays`},title:`Displays`,description:`Manage your display devices`,headings:{list:`Displays`,adjustFilters:`Filter displays`,removeDisplay:`Remove display`,removeBulkDisplays:`Remove displays`,discard:`Discard changes`,aboutDisplayConfiguration:`Display configuration`},subHeadings:{list:`Manage your connected display devices`,adjustFilters:`Adjust filter settings`},breadcrumbs:{displays:{list:`displays`,detail:`display: {display}`,edit:`edit display`,tokens:`access tokens`}},meta:{displays:{list:{title:`List displays`},edit:{title:`Edit display: {display}`},detail:{title:`Display: {display}`},tokens:{title:`Access tokens: {display}`}}},table:{columns:{name:`Name`,role:`Role`,macAddress:`MAC address`,version:`Version`,resolution:`Resolution`,layout:`Layout`,audio:`Audio`,state:{title:`State`},currentIpAddress:`Current IP`,local:`Local`,status:`Status`},tooltips:{speakerSupported:`Speaker supported`,microphoneSupported:`Microphone supported`}},fields:{search:{placeholder:`Search displays...`},config:{deploymentMode:{title:`Gateway mode`,description:`Gateway mode for display registration`,placeholder:`Select gateway mode`,validation:{required:`Gateway mode is required`}},permitJoinDurationMs:{title:`Permit join duration`,description:`Duration in milliseconds that permit join remains active`,placeholder:`120000`,unit:`ms`,validation:{required:`Permit join duration is required`,min:`Permit join duration must be at least 1000ms`}}},displays:{id:{title:`Internal identifier`,placeholder:`Display id`},name:{title:`Name`,placeholder:`Enter display name`,validation:{maxLength:`Name must be less than 100 characters`}},role:{title:`Display role`,description:`The purpose of this display in your smart home setup`,options:{room:`Room (Single room control)`,master:`Master (Whole-house overview)`,entry:`Entry (House modes and security)`},comingSoon:`Soon`},unitSize:{title:`Unit size`,unit:`px`,validation:{min:`Unit size must be at least 1`}},rows:{title:`Rows`,validation:{min:`Rows must be at least 1`}},cols:{title:`Columns`,validation:{min:`Columns must be at least 1`}},brightness:{title:`Brightness`,validation:{range:`Brightness must be between 0 and 100`}},screenLockDuration:{title:`Screen lock duration`,options:{"15s":`15 seconds`,"30s":`30 seconds`,"1min":`1 minute`,"2min":`2 minutes`,"5min":`5 minutes`,"10min":`10 minutes`,"30min":`30 minutes`,never:`Never`}},darkMode:{title:`Dark mode`},screenSaver:{title:`Screen saver`},screenPowerOff:{title:`Screen power off`},audio:{speaker:{title:`Speaker (audio output)`},microphone:{title:`Microphone (audio input)`}},speaker:{title:`Speaker enabled`},speakerVolume:{title:`Speaker volume`,validation:{range:`Volume must be between 0 and 100`}},microphone:{title:`Microphone enabled`},microphoneVolume:{title:`Microphone volume`,validation:{range:`Volume must be between 0 and 100`}},homeMode:{title:`Home page mode`,description:`How the home page is determined when the display starts`,options:{autoSpace:`Auto`,explicit:`Explicit`}},homePageId:{title:`Home page`,placeholder:`Select home page`,description:`The page to show when the display starts (only used when Home Page Mode is Explicit)`,validation:{required:`Home page is required when Home Page Mode is Explicit`}},roomId:{title:`Assigned room`,placeholder:`Select a room`,description:`The room this display controls. Required for displays with Room role.`,validation:{required:`Room assignment is required for displays with Room role`}},numberFormat:{title:`Number Format`,placeholder:`System default`,values:{commaDot:`1,234.56 (comma / dot)`,dotComma:`1.234,56 (dot / comma)`,spaceComma:`1 234,56 (space / comma)`,none:`1234.56 (no grouping)`}},temperatureUnit:{title:`Temperature Unit`,placeholder:`System default`,values:{celsius:`Celsius (°C)`,fahrenheit:`Fahrenheit (°F)`}},windSpeedUnit:{title:`Wind Speed Unit`,placeholder:`System default`,values:{ms:`Meters per second (m/s)`,kmh:`Kilometers per hour (km/h)`,mph:`Miles per hour (mph)`,knots:`Knots (kn)`}},pressureUnit:{title:`Pressure Unit`,placeholder:`System default`,values:{hpa:`Hectopascal (hPa)`,mbar:`Millibar (mbar)`,inhg:`Inches of mercury (inHg)`,mmhg:`Millimeters of mercury (mmHg)`}},precipitationUnit:{title:`Precipitation Unit`,placeholder:`System default`,values:{mm:`Millimeters (mm)`,inches:`Inches (in)`}},distanceUnit:{title:`Distance Unit`,placeholder:`System default`,values:{km:`Kilometers (km)`,miles:`Miles (mi)`,meters:`Meters (m)`,feet:`Feet (ft)`}},weatherLocationId:{title:`Weather location`,placeholder:`System default (primary location)`,description:`Override the weather location for this display. Leave empty to use the primary location from weather configuration.`}}},filters:{darkMode:{title:`Dark mode`,values:{enabled:`Enabled`,disabled:`Disabled`,all:`All`}},screenSaver:{title:`Screen saver`,values:{enabled:`Enabled`,disabled:`Disabled`,all:`All`}},state:{title:`State`},states:{title:`State`}},states:{connected:`Connected`,disconnected:`Disconnected`,lost:`Lost`,unknown:`Unknown`},roles:{room:`Room`,master:`Master`,entry:`Entry`},texts:{loadingDisplays:`Loading displays...`,loadingDisplay:`Loading display...`,noDisplays:`No displays registered yet`,noFilteredDisplays:`No displays match your filter criteria`,confirmDiscard:`You have unsaved changes. Are you sure you want to discard them?`,aboutDisplayConfiguration:`Configure the deployment mode and display registration settings. The deployment mode determines how the backend and panel are organized, while permit join duration controls how long new displays can register on the network.`},buttons:{detail:{title:`Detail`},adjust:{title:`Filter`},resetFilters:{title:`Reset filters`},reset:{title:`Reset filters`},yes:{title:`Yes`},no:{title:`No`},save:{title:`Save`},cancel:{title:`Cancel`},close:{title:`Close`},discard:{title:`Discard`},permitJoin:{title:`Permit join`,disable:`Disable join ({time})`},back:{title:`Go back`}},edit:{sections:{general:{title:`General`},layout:{title:`Layout`,badge:`Advanced`,description:`Advanced settings that control how many tiles are shown on the screen and how they are arranged in the grid.`},appearance:{title:`Appearance`},homePage:{title:`Home page`,autoRoomHint:`In <strong>Auto mode</strong>, the display opens the default system view based on its role and assignment.`},weather:{title:`Weather location`,description:`Override the weather location for this display. When not set, the primary location from the weather configuration will be used.`},units:{title:`Unit overrides`,description:`Override system-wide measurement units for this display. Leave empty to use the system default.`},audio:{title:`Audio`,badge:`Advanced`}}},detail:{title:`Display detail`,info:{title:`Display information`,role:`Role`,macAddress:`MAC address`,version:`Version`,build:`Build`,resolution:`Resolution`,pixelRatio:`Pixel ratio`,gridSize:`Grid size`,registeredFromIp:`Registered IP`,currentIpAddress:`Current IP`,status:`Connection state`},settings:{title:`Display settings`,gridSize:`Grid size`,darkMode:`Dark mode`,brightness:`Brightness`,screenLockDuration:`Screen lock duration`,screenSaver:`Screen saver`,screenPowerOff:`Screen power off`,speakerEnabled:`Speaker enabled`,speakerVolume:`Speaker volume`,microphoneEnabled:`Microphone enabled`,microphoneVolume:`Microphone volume`},peripherals:{title:`Peripherals`,audioOutput:`Audio output`,audioOutputVolume:`Audio output volume`,audioInput:`Audio input`,audioInputVolume:`Audio input volume`},audio:{speaker:{title:`Speaker (audio output)`},microphone:{title:`Microphone (audio input)`}},tokens:{title:`Access tokens`,subtitle:`Manage tokens`,description:`Manage access tokens for this display. Each display should have at most one active token.`,noTokens:`No active tokens`,revokeConfirm:`Are you sure you want to revoke the access token? The display will need to re-register.`,revoked:`Token revoked successfully`},spaceContext:{title:`Space context`,role:`Display role`,homeMode:`Home page mode`,assignedRoom:`Assigned room`,notAssigned:`Not assigned`,initialView:`Initial view`,systemViews:`System views`,selectedPage:`Selected page`,hint:`This display's main views are generated automatically based on its role and assigned space.`,homeModes:{auto_space:`Auto`,explicit:`Explicit`},initialViews:{roomOverview:`Room overview`,houseOverview:`House overview`,entryOverview:`Entry overview`},views:{overview:`Overview`,lights:`Lights`,climate:`Climate`}}},messages:{notFound:`Display not found`,loadError:`Failed to load displays`,confirmRemove:`Are you sure you want to remove display "{name}"? This action cannot be undone.`,confirmBulkRemove:`Are you sure you want to remove {count} display(s)? This action cannot be undone.`,removed:`Display removed successfully`,bulkRemoved:`{count} display(s) have been removed`,bulkRemoveFailed:`Failed to remove {count} display(s)`,edited:`Display {display} has been updated`,notEdited:`Display {display} was not updated`,deletedWhileEditing:`This display was deleted and is no longer available.`,permitJoinActivated:`Permit join activated successfully`,permitJoinDeactivated:`Permit join deactivated successfully`,permitJoinError:`Failed to activate permit join`,permitJoinDeactivateError:`Failed to deactivate permit join`,config:{edited:`Displays configuration has been successfully updated`,notEdited:`Failed to update displays configuration`}},actions:{revokeToken:`Revoke token`,manageTokens:`Manage tokens`}},ft={menu:{title:`Pantallas`},title:`Pantallas`,description:`Gestiona tus dispositivos de pantalla`,headings:{list:`Pantallas`,adjustFilters:`Filtrar pantallas`,removeDisplay:`Eliminar pantalla`,removeBulkDisplays:`Eliminar pantallas`,discard:`Descartar cambios`,aboutDisplayConfiguration:`Configuración de pantalla`},subHeadings:{list:`Gestiona tus dispositivos de pantalla conectados`,adjustFilters:`Ajustar configuración de filtros`},breadcrumbs:{displays:{list:`pantallas`,detail:`pantalla: {display}`,edit:`editar pantalla`,tokens:`tokens de acceso`}},meta:{displays:{list:{title:`Listar pantallas`},edit:{title:`Editar pantalla: {display}`},detail:{title:`Pantalla: {display}`},tokens:{title:`Tokens de acceso: {display}`}}},table:{columns:{name:`Nombre`,role:`Rol`,macAddress:`Dirección MAC`,version:`Versión`,resolution:`Resolución`,layout:`Diseño`,audio:`Audio`,state:{title:`Estado`},currentIpAddress:`IP actual`,local:`Local`,status:`Estado`},tooltips:{speakerSupported:`Altavoz compatible`,microphoneSupported:`Micrófono compatible`}},fields:{search:{placeholder:`Buscar pantallas...`},config:{deploymentMode:{title:`Modo de pasarela`,description:`Modo de pasarela para el registro de pantallas`,placeholder:`Seleccionar modo de pasarela`,validation:{required:`El modo de pasarela es obligatorio`}},permitJoinDurationMs:{title:`Duración de permiso de unión`,description:`Duración en milisegundos durante la cual el permiso de unión permanece activo`,placeholder:`120000`,unit:`ms`,validation:{required:`La duración del permiso de unión es obligatoria`,min:`La duración del permiso de unión debe ser de al menos 1000ms`}}},displays:{id:{title:`Identificador interno`,placeholder:`ID de pantalla`},name:{title:`Nombre`,placeholder:`Introduce el nombre de la pantalla`,validation:{maxLength:`El nombre debe tener menos de 100 caracteres`}},role:{title:`Rol de la pantalla`,description:`El propósito de esta pantalla en tu configuración de hogar inteligente`,options:{room:`Habitación (Control de una sola habitación)`,master:`Principal (Vista general de toda la casa)`,entry:`Entrada (Modos de la casa y seguridad)`},comingSoon:`Pronto`},unitSize:{title:`Tamaño de unidad`,unit:`px`,validation:{min:`El tamaño de unidad debe ser de al menos 1`}},rows:{title:`Filas`,validation:{min:`Las filas deben ser de al menos 1`}},cols:{title:`Columnas`,validation:{min:`Las columnas deben ser de al menos 1`}},brightness:{title:`Brillo`,validation:{range:`El brillo debe estar entre 0 y 100`}},screenLockDuration:{title:`Duración del bloqueo de pantalla`,options:{"15s":`15 segundos`,"30s":`30 segundos`,"1min":`1 minuto`,"2min":`2 minutos`,"5min":`5 minutos`,"10min":`10 minutos`,"30min":`30 minutos`,never:`Nunca`}},darkMode:{title:`Modo oscuro`},screenSaver:{title:`Salvapantallas`},screenPowerOff:{title:`Apagar pantalla`},audio:{speaker:{title:`Altavoz (salida de audio)`},microphone:{title:`Micrófono (entrada de audio)`}},speaker:{title:`Altavoz activado`},speakerVolume:{title:`Volumen del altavoz`,validation:{range:`El volumen debe estar entre 0 y 100`}},microphone:{title:`Micrófono activado`},microphoneVolume:{title:`Volumen del micrófono`,validation:{range:`El volumen debe estar entre 0 y 100`}},homeMode:{title:`Modo de página de inicio`,description:`Cómo se determina la página de inicio cuando se inicia la pantalla`,options:{autoSpace:`Automático`,explicit:`Explícito`}},homePageId:{title:`Página de inicio`,placeholder:`Seleccionar página de inicio`,description:`La página que se muestra cuando se inicia la pantalla (solo se usa cuando el modo de página de inicio es Explícito)`,validation:{required:`La página de inicio es obligatoria cuando el modo de página de inicio es Explícito`}},roomId:{title:`Habitación asignada`,placeholder:`Seleccionar una habitación`,description:`La habitación que controla esta pantalla. Obligatorio para pantallas con rol de Habitación.`,validation:{required:`La asignación de habitación es obligatoria para pantallas con rol de Habitación`}},numberFormat:{title:`Formato de números`,placeholder:`Predeterminado del sistema`,values:{commaDot:`1,234.56 (coma / punto)`,dotComma:`1.234,56 (punto / coma)`,spaceComma:`1 234,56 (espacio / coma)`,none:`1234.56 (sin agrupación)`}},temperatureUnit:{title:`Unidad de temperatura`,placeholder:`Predeterminado del sistema`,values:{celsius:`Celsius (°C)`,fahrenheit:`Fahrenheit (°F)`}},windSpeedUnit:{title:`Unidad de velocidad del viento`,placeholder:`Predeterminado del sistema`,values:{ms:`Metros por segundo (m/s)`,kmh:`Kilómetros por hora (km/h)`,mph:`Millas por hora (mph)`,knots:`Nudos (kn)`}},pressureUnit:{title:`Unidad de presión`,placeholder:`Predeterminado del sistema`,values:{hpa:`Hectopascal (hPa)`,mbar:`Milibar (mbar)`,inhg:`Pulgadas de mercurio (inHg)`,mmhg:`Milímetros de mercurio (mmHg)`}},precipitationUnit:{title:`Unidad de precipitación`,placeholder:`Predeterminado del sistema`,values:{mm:`Milímetros (mm)`,inches:`Pulgadas (in)`}},distanceUnit:{title:`Unidad de distancia`,placeholder:`Predeterminado del sistema`,values:{km:`Kilómetros (km)`,miles:`Millas (mi)`,meters:`Metros (m)`,feet:`Pies (ft)`}},weatherLocationId:{title:`Ubicación meteorológica`,placeholder:`Predeterminado del sistema (ubicación principal)`,description:`Anula la ubicación meteorológica para esta pantalla. Dejar vacío para usar la ubicación principal de la configuración meteorológica.`}}},filters:{darkMode:{title:`Modo oscuro`,values:{enabled:`Activado`,disabled:`Desactivado`,all:`Todos`}},screenSaver:{title:`Salvapantallas`,values:{enabled:`Activado`,disabled:`Desactivado`,all:`Todos`}},state:{title:`Estado`},states:{title:`Estado`}},states:{connected:`Conectado`,disconnected:`Desconectado`,lost:`Perdido`,unknown:`Desconocido`},roles:{room:`Habitación`,master:`Principal`,entry:`Entrada`},texts:{loadingDisplays:`Cargando pantallas...`,loadingDisplay:`Cargando pantalla...`,noDisplays:`Aún no hay pantallas registradas`,noFilteredDisplays:`Ninguna pantalla coincide con los criterios de filtro`,confirmDiscard:`Tienes cambios sin guardar. ¿Estás seguro de que deseas descartarlos?`,aboutDisplayConfiguration:`Configura el modo de despliegue y los ajustes de registro de pantallas. El modo de despliegue determina cómo se organizan el backend y el panel, mientras que la duración del permiso de unión controla cuánto tiempo las nuevas pantallas pueden registrarse en la red.`},buttons:{detail:{title:`Detalle`},adjust:{title:`Filtrar`},resetFilters:{title:`Restablecer filtros`},reset:{title:`Restablecer filtros`},yes:{title:`Sí`},no:{title:`No`},save:{title:`Guardar`},cancel:{title:`Cancelar`},close:{title:`Cerrar`},discard:{title:`Descartar`},permitJoin:{title:`Permitir unión`,disable:`Desactivar unión ({time})`},back:{title:`Volver`}},edit:{sections:{general:{title:`General`},layout:{title:`Diseño`,badge:`Avanzado`,description:`Configuraciones avanzadas que controlan cuántos mosaicos se muestran en la pantalla y cómo se organizan en la cuadrícula.`},appearance:{title:`Apariencia`},homePage:{title:`Página de inicio`,autoRoomHint:`En <strong>modo Automático</strong>, la pantalla abre la vista predeterminada del sistema según su rol y asignación.`},weather:{title:`Ubicación meteorológica`,description:`Anula la ubicación meteorológica para esta pantalla. Cuando no se establece, se usará la ubicación principal de la configuración meteorológica.`},units:{title:`Anulaciones de unidades`,description:`Anula las unidades de medida de todo el sistema para esta pantalla. Dejar vacío para usar el valor predeterminado del sistema.`},audio:{title:`Audio`,badge:`Avanzado`}}},detail:{title:`Detalle de pantalla`,info:{title:`Información de la pantalla`,role:`Rol`,macAddress:`Dirección MAC`,version:`Versión`,build:`Compilación`,resolution:`Resolución`,pixelRatio:`Proporción de píxeles`,gridSize:`Tamaño de cuadrícula`,registeredFromIp:`IP de registro`,currentIpAddress:`IP actual`,status:`Estado de conexión`},settings:{title:`Configuración de pantalla`,gridSize:`Tamaño de cuadrícula`,darkMode:`Modo oscuro`,brightness:`Brillo`,screenLockDuration:`Duración del bloqueo de pantalla`,screenSaver:`Salvapantallas`,screenPowerOff:`Apagar pantalla`,speakerEnabled:`Altavoz activado`,speakerVolume:`Volumen del altavoz`,microphoneEnabled:`Micrófono activado`,microphoneVolume:`Volumen del micrófono`},peripherals:{title:`Periféricos`,audioOutput:`Salida de audio`,audioOutputVolume:`Volumen de salida de audio`,audioInput:`Entrada de audio`,audioInputVolume:`Volumen de entrada de audio`},audio:{speaker:{title:`Altavoz (salida de audio)`},microphone:{title:`Micrófono (entrada de audio)`}},tokens:{title:`Tokens de acceso`,subtitle:`Gestionar tokens`,description:`Gestiona los tokens de acceso para esta pantalla. Cada pantalla debe tener como máximo un token activo.`,noTokens:`Sin tokens activos`,revokeConfirm:`¿Estás seguro de que deseas revocar el token de acceso? La pantalla necesitará volver a registrarse.`,revoked:`Token revocado correctamente`},spaceContext:{title:`Contexto del espacio`,role:`Rol de la pantalla`,homeMode:`Modo de página de inicio`,assignedRoom:`Habitación asignada`,notAssigned:`No asignada`,initialView:`Vista inicial`,systemViews:`Vistas del sistema`,selectedPage:`Página seleccionada`,hint:`Las vistas principales de esta pantalla se generan automáticamente según su rol y espacio asignado.`,homeModes:{auto_space:`Automático`,explicit:`Explícito`},initialViews:{roomOverview:`Vista general de habitación`,houseOverview:`Vista general de la casa`,entryOverview:`Vista general de entrada`},views:{overview:`Vista general`,lights:`Luces`,climate:`Climatización`}}},messages:{notFound:`Pantalla no encontrada`,loadError:`Error al cargar las pantallas`,confirmRemove:`¿Estás seguro de que deseas eliminar la pantalla "{name}"? Esta acción no se puede deshacer.`,confirmBulkRemove:`¿Estás seguro de que deseas eliminar {count} pantalla(s)? Esta acción no se puede deshacer.`,removed:`Pantalla eliminada correctamente`,bulkRemoved:`{count} pantalla(s) han sido eliminadas`,bulkRemoveFailed:`Error al eliminar {count} pantalla(s)`,edited:`La pantalla {display} ha sido actualizada`,notEdited:`La pantalla {display} no fue actualizada`,deletedWhileEditing:`Esta pantalla fue eliminada y ya no está disponible.`,permitJoinActivated:`Permiso de unión activado correctamente`,permitJoinDeactivated:`Permiso de unión desactivado correctamente`,permitJoinError:`Error al activar el permiso de unión`,permitJoinDeactivateError:`Error al desactivar el permiso de unión`,config:{edited:`La configuración de pantallas se ha actualizado correctamente`,notEdited:`Error al actualizar la configuración de pantallas`}},actions:{revokeToken:`Revocar token`,manageTokens:`Gestionar tokens`}},pt={menu:{title:`Wyświetlacze`},title:`Wyświetlacze`,description:`Zarządzaj urządzeniami wyświetlaczy`,headings:{list:`Wyświetlacze`,adjustFilters:`Filtruj wyświetlacze`,removeDisplay:`Usuń wyświetlacz`,removeBulkDisplays:`Usuń wyświetlacze`,discard:`Odrzuć zmiany`,aboutDisplayConfiguration:`Konfiguracja wyświetlacza`},subHeadings:{list:`Zarządzaj podłączonymi urządzeniami wyświetlaczy`,adjustFilters:`Dostosuj ustawienia filtrów`},breadcrumbs:{displays:{list:`wyświetlacze`,detail:`wyświetlacz: {display}`,edit:`edytuj wyświetlacz`,tokens:`tokeny dostępu`}},meta:{displays:{list:{title:`Lista wyświetlaczy`},edit:{title:`Edytuj wyświetlacz: {display}`},detail:{title:`Wyświetlacz: {display}`},tokens:{title:`Tokeny dostępu: {display}`}}},table:{columns:{name:`Nazwa`,role:`Rola`,macAddress:`Adres MAC`,version:`Wersja`,resolution:`Rozdzielczość`,layout:`Układ`,audio:`Audio`,state:{title:`Stan`},currentIpAddress:`Bieżący IP`,local:`Lokalny`,status:`Status`},tooltips:{speakerSupported:`Obsługa głośnika`,microphoneSupported:`Obsługa mikrofonu`}},fields:{search:{placeholder:`Szukaj wyświetlaczy...`},config:{deploymentMode:{title:`Tryb bramy`,description:`Tryb bramy rejestracji wyświetlaczy`,placeholder:`Wybierz tryb bramy`,validation:{required:`Tryb bramy jest wymagany`}},permitJoinDurationMs:{title:`Czas dołączania`,description:`Czas w milisekundach, przez który dołączanie pozostaje aktywne`,placeholder:`120000`,unit:`ms`,validation:{required:`Czas dołączania jest wymagany`,min:`Czas dołączania musi wynosić co najmniej 1000ms`}}},displays:{id:{title:`Identyfikator wewnętrzny`,placeholder:`ID wyświetlacza`},name:{title:`Nazwa`,placeholder:`Wprowadź nazwę wyświetlacza`,validation:{maxLength:`Nazwa musi mieć mniej niż 100 znaków`}},role:{title:`Rola wyświetlacza`,description:`Przeznaczenie tego wyświetlacza w konfiguracji inteligentnego domu`,options:{room:`Pokój (sterowanie jednym pokojem)`,master:`Główny (przegląd całego domu)`,entry:`Wejście (tryby domu i bezpieczeństwo)`},comingSoon:`Wkrótce`},unitSize:{title:`Rozmiar jednostki`,unit:`px`,validation:{min:`Rozmiar jednostki musi wynosić co najmniej 1`}},rows:{title:`Wiersze`,validation:{min:`Wiersze muszą wynosić co najmniej 1`}},cols:{title:`Kolumny`,validation:{min:`Kolumny muszą wynosić co najmniej 1`}},brightness:{title:`Jasność`,validation:{range:`Jasność musi wynosić od 0 do 100`}},screenLockDuration:{title:`Czas blokady ekranu`,options:{"15s":`15 sekund`,"30s":`30 sekund`,"1min":`1 minuta`,"2min":`2 minuty`,"5min":`5 minut`,"10min":`10 minut`,"30min":`30 minut`,never:`Nigdy`}},darkMode:{title:`Tryb ciemny`},screenSaver:{title:`Wygaszacz ekranu`},screenPowerOff:{title:`Wyłączenie ekranu`},audio:{speaker:{title:`Głośnik (wyjście audio)`},microphone:{title:`Mikrofon (wejście audio)`}},speaker:{title:`Głośnik włączony`},speakerVolume:{title:`Głośność głośnika`,validation:{range:`Głośność musi wynosić od 0 do 100`}},microphone:{title:`Mikrofon włączony`},microphoneVolume:{title:`Głośność mikrofonu`,validation:{range:`Głośność musi wynosić od 0 do 100`}},homeMode:{title:`Tryb strony głównej`,description:`Jak strona główna jest określana przy uruchomieniu wyświetlacza`,options:{autoSpace:`Automatyczny`,explicit:`Jawny`}},homePageId:{title:`Strona główna`,placeholder:`Wybierz stronę główną`,description:`Strona wyświetlana przy uruchomieniu wyświetlacza (używana tylko gdy tryb strony głównej jest Jawny)`,validation:{required:`Strona główna jest wymagana gdy tryb strony głównej jest Jawny`}},roomId:{title:`Przypisany pokój`,placeholder:`Wybierz pokój`,description:`Pokój, którym steruje ten wyświetlacz. Wymagany dla wyświetlaczy z rolą Pokój.`,validation:{required:`Przypisanie pokoju jest wymagane dla wyświetlaczy z rolą Pokój`}},numberFormat:{title:`Format liczb`,placeholder:`Domyślny systemowy`,values:{commaDot:`1,234.56 (przecinek / kropka)`,dotComma:`1.234,56 (kropka / przecinek)`,spaceComma:`1 234,56 (spacja / przecinek)`,none:`1234.56 (bez grupowania)`}},temperatureUnit:{title:`Jednostka temperatury`,placeholder:`Domyślna systemowa`,values:{celsius:`Celsjusz (°C)`,fahrenheit:`Fahrenheit (°F)`}},windSpeedUnit:{title:`Jednostka prędkości wiatru`,placeholder:`Domyślna systemowa`,values:{ms:`Metry na sekundę (m/s)`,kmh:`Kilometry na godzinę (km/h)`,mph:`Mile na godzinę (mph)`,knots:`Węzły (kn)`}},pressureUnit:{title:`Jednostka ciśnienia`,placeholder:`Domyślna systemowa`,values:{hpa:`Hektopaskal (hPa)`,mbar:`Milibar (mbar)`,inhg:`Cale słupa rtęci (inHg)`,mmhg:`Milimetry słupa rtęci (mmHg)`}},precipitationUnit:{title:`Jednostka opadów`,placeholder:`Domyślna systemowa`,values:{mm:`Milimetry (mm)`,inches:`Cale (in)`}},distanceUnit:{title:`Jednostka odległości`,placeholder:`Domyślna systemowa`,values:{km:`Kilometry (km)`,miles:`Mile (mi)`,meters:`Metry (m)`,feet:`Stopy (ft)`}},weatherLocationId:{title:`Lokalizacja pogody`,placeholder:`Domyślna systemowa (lokalizacja główna)`,description:`Nadpisz lokalizację pogody dla tego wyświetlacza. Pozostaw puste, aby użyć głównej lokalizacji z konfiguracji pogody.`}}},filters:{darkMode:{title:`Tryb ciemny`,values:{enabled:`Włączony`,disabled:`Wyłączony`,all:`Wszystkie`}},screenSaver:{title:`Wygaszacz ekranu`,values:{enabled:`Włączony`,disabled:`Wyłączony`,all:`Wszystkie`}},state:{title:`Stan`},states:{title:`Stan`}},states:{connected:`Połączony`,disconnected:`Rozłączony`,lost:`Utracony`,unknown:`Nieznany`},roles:{room:`Pokój`,master:`Główny`,entry:`Wejście`},texts:{loadingDisplays:`Ładowanie wyświetlaczy...`,loadingDisplay:`Ładowanie wyświetlacza...`,noDisplays:`Nie zarejestrowano jeszcze żadnych wyświetlaczy`,noFilteredDisplays:`Żadne wyświetlacze nie pasują do kryteriów filtra`,confirmDiscard:`Masz niezapisane zmiany. Czy na pewno chcesz je odrzucić?`,aboutDisplayConfiguration:`Skonfiguruj tryb wdrożenia i ustawienia rejestracji wyświetlaczy. Tryb wdrożenia określa, jak backend i panel są zorganizowane, a czas dołączania kontroluje, jak długo nowe wyświetlacze mogą się rejestrować w sieci.`},buttons:{detail:{title:`Szczegóły`},adjust:{title:`Filtruj`},resetFilters:{title:`Resetuj filtry`},reset:{title:`Resetuj filtry`},yes:{title:`Tak`},no:{title:`Nie`},save:{title:`Zapisz`},cancel:{title:`Anuluj`},close:{title:`Zamknij`},discard:{title:`Odrzuć`},permitJoin:{title:`Zezwól na dołączanie`,disable:`Wyłącz dołączanie ({time})`},back:{title:`Wróć`}},edit:{sections:{general:{title:`Ogólne`},layout:{title:`Układ`,badge:`Zaawansowane`,description:`Zaawansowane ustawienia kontrolujące ile kafelków jest wyświetlanych na ekranie i jak są ułożone w siatce.`},appearance:{title:`Wygląd`},homePage:{title:`Strona główna`,autoRoomHint:`W <strong>trybie automatycznym</strong> wyświetlacz otwiera domyślny widok systemu na podstawie swojej roli i przypisania.`},weather:{title:`Lokalizacja pogody`,description:`Nadpisz lokalizację pogody dla tego wyświetlacza. Gdy nie jest ustawiona, zostanie użyta główna lokalizacja z konfiguracji pogody.`},units:{title:`Nadpisania jednostek`,description:`Nadpisz systemowe jednostki miar dla tego wyświetlacza. Pozostaw puste, aby użyć domyślnych ustawień systemowych.`},audio:{title:`Audio`,badge:`Zaawansowane`}}},detail:{title:`Szczegóły wyświetlacza`,info:{title:`Informacje o wyświetlaczu`,role:`Rola`,macAddress:`Adres MAC`,version:`Wersja`,build:`Kompilacja`,resolution:`Rozdzielczość`,pixelRatio:`Współczynnik pikseli`,gridSize:`Rozmiar siatki`,registeredFromIp:`IP rejestracji`,currentIpAddress:`Bieżący IP`,status:`Stan połączenia`},settings:{title:`Ustawienia wyświetlacza`,gridSize:`Rozmiar siatki`,darkMode:`Tryb ciemny`,brightness:`Jasność`,screenLockDuration:`Czas blokady ekranu`,screenSaver:`Wygaszacz ekranu`,screenPowerOff:`Wyłączenie ekranu`,speakerEnabled:`Głośnik włączony`,speakerVolume:`Głośność głośnika`,microphoneEnabled:`Mikrofon włączony`,microphoneVolume:`Głośność mikrofonu`},peripherals:{title:`Urządzenia peryferyjne`,audioOutput:`Wyjście audio`,audioOutputVolume:`Głośność wyjścia audio`,audioInput:`Wejście audio`,audioInputVolume:`Głośność wejścia audio`},audio:{speaker:{title:`Głośnik (wyjście audio)`},microphone:{title:`Mikrofon (wejście audio)`}},tokens:{title:`Tokeny dostępu`,subtitle:`Zarządzaj tokenami`,description:`Zarządzaj tokenami dostępu tego wyświetlacza. Każdy wyświetlacz powinien mieć najwyżej jeden aktywny token.`,noTokens:`Brak aktywnych tokenów`,revokeConfirm:`Czy na pewno chcesz unieważnić token dostępu? Wyświetlacz będzie musiał się ponownie zarejestrować.`,revoked:`Token pomyślnie unieważniony`},spaceContext:{title:`Kontekst przestrzeni`,role:`Rola wyświetlacza`,homeMode:`Tryb strony głównej`,assignedRoom:`Przypisany pokój`,notAssigned:`Nie przypisano`,initialView:`Widok początkowy`,systemViews:`Widoki systemowe`,selectedPage:`Wybrana strona`,hint:`Główne widoki tego wyświetlacza są generowane automatycznie na podstawie jego roli i przypisanej przestrzeni.`,homeModes:{auto_space:`Automatyczny`,explicit:`Jawny`},initialViews:{roomOverview:`Przegląd pokoju`,houseOverview:`Przegląd domu`,entryOverview:`Przegląd wejścia`},views:{overview:`Przegląd`,lights:`Oświetlenie`,climate:`Klimat`}}},messages:{notFound:`Wyświetlacz nie znaleziony`,loadError:`Nie udało się wczytać wyświetlaczy`,confirmRemove:`Czy na pewno chcesz usunąć wyświetlacz "{name}"? Tej operacji nie można cofnąć.`,confirmBulkRemove:`Czy na pewno chcesz usunąć {count} wyświetlaczy? Tej operacji nie można cofnąć.`,removed:`Wyświetlacz pomyślnie usunięty`,bulkRemoved:`Usunięto {count} wyświetlaczy`,bulkRemoveFailed:`Nie udało się usunąć {count} wyświetlaczy`,edited:`Wyświetlacz {display} został zaktualizowany`,notEdited:`Wyświetlacz {display} nie został zaktualizowany`,deletedWhileEditing:`Ten wyświetlacz został usunięty i nie jest już dostępny.`,permitJoinActivated:`Dołączanie pomyślnie aktywowane`,permitJoinDeactivated:`Dołączanie pomyślnie dezaktywowane`,permitJoinError:`Nie udało się aktywować dołączania`,permitJoinDeactivateError:`Nie udało się dezaktywować dołączania`,config:{edited:`Konfiguracja wyświetlaczy została pomyślnie zaktualizowana`,notEdited:`Nie udało się zaktualizować konfiguracji wyświetlaczy`}},actions:{revokeToken:`Unieważnij token`,manageTokens:`Zarządzaj tokenami`}},mt={menu:{title:`Displeje`},title:`Displeje`,description:`Spravujte svoje displeje`,headings:{list:`Displeje`,adjustFilters:`Filtrovať displeje`,removeDisplay:`Odstrániť displej`,removeBulkDisplays:`Odstrániť displeje`,discard:`Zahodiť zmeny`,aboutDisplayConfiguration:`Konfigurácia displeja`},subHeadings:{list:`Spravujte pripojené displeje`,adjustFilters:`Upraviť nastavenia filtrov`},breadcrumbs:{displays:{list:`displeje`,detail:`displej: {display}`,edit:`upraviť displej`,tokens:`prístupové tokeny`}},meta:{displays:{list:{title:`Zoznam displejov`},edit:{title:`Upraviť displej: {display}`},detail:{title:`Displej: {display}`},tokens:{title:`Prístupové tokeny: {display}`}}},table:{columns:{name:`Názov`,role:`Rola`,macAddress:`MAC adresa`,version:`Verzia`,resolution:`Rozlíšenie`,layout:`Rozloženie`,audio:`Zvuk`,state:{title:`Stav`},currentIpAddress:`Aktuálna IP`,local:`Lokálny`,status:`Stav`},tooltips:{speakerSupported:`Reproduktor podporovaný`,microphoneSupported:`Mikrofón podporovaný`}},fields:{search:{placeholder:`Vyhľadať displeje...`},config:{deploymentMode:{title:`Režim brány`,description:`Režim brány pre registráciu displejov`,placeholder:`Vyberte režim brány`,validation:{required:`Režim brány je povinný`}},permitJoinDurationMs:{title:`Trvanie povolenia pripojenia`,description:`Trvanie v milisekundách, počas ktorého zostáva povolenie pripojenia aktívne`,placeholder:`120000`,unit:`ms`,validation:{required:`Trvanie povolenia pripojenia je povinné`,min:`Trvanie povolenia pripojenia musí byť aspoň 1000ms`}}},displays:{id:{title:`Interný identifikátor`,placeholder:`ID displeja`},name:{title:`Názov`,placeholder:`Zadajte názov displeja`,validation:{maxLength:`Názov musí mať menej ako 100 znakov`}},role:{title:`Rola displeja`,description:`Účel tohto displeja vo vašom zariadení inteligentnej domácnosti`,options:{room:`Miestnosť (Ovládanie jednej miestnosti)`,master:`Hlavný (Prehľad celého domu)`,entry:`Vstup (Režimy domu a bezpečnosť)`},comingSoon:`Čoskoro`},unitSize:{title:`Veľkosť jednotky`,unit:`px`,validation:{min:`Veľkosť jednotky musí byť aspoň 1`}},rows:{title:`Riadky`,validation:{min:`Riadky musia byť aspoň 1`}},cols:{title:`Stĺpce`,validation:{min:`Stĺpce musia byť aspoň 1`}},brightness:{title:`Jas`,validation:{range:`Jas musí byť medzi 0 a 100`}},screenLockDuration:{title:`Trvanie uzamknutia obrazovky`,options:{"15s":`15 sekúnd`,"30s":`30 sekúnd`,"1min":`1 minúta`,"2min":`2 minúty`,"5min":`5 minút`,"10min":`10 minút`,"30min":`30 minút`,never:`Nikdy`}},darkMode:{title:`Tmavý režim`},screenSaver:{title:`Šetrič obrazovky`},screenPowerOff:{title:`Vypnutie obrazovky`},audio:{speaker:{title:`Reproduktor (zvukový výstup)`},microphone:{title:`Mikrofón (zvukový vstup)`}},speaker:{title:`Reproduktor povolený`},speakerVolume:{title:`Hlasitosť reproduktora`,validation:{range:`Hlasitosť musí byť medzi 0 a 100`}},microphone:{title:`Mikrofón povolený`},microphoneVolume:{title:`Hlasitosť mikrofónu`,validation:{range:`Hlasitosť musí byť medzi 0 a 100`}},homeMode:{title:`Režim domovskej stránky`,description:`Ako sa určuje domovská stránka pri spustení displeja`,options:{autoSpace:`Automaticky`,explicit:`Explicitne`}},homePageId:{title:`Domovská stránka`,placeholder:`Vyberte domovskú stránku`,description:`Stránka zobrazená pri spustení displeja (použije sa iba keď je režim domovskej stránky Explicitný)`,validation:{required:`Domovská stránka je povinná keď je režim domovskej stránky Explicitný`}},roomId:{title:`Priradená miestnosť`,placeholder:`Vyberte miestnosť`,description:`Miestnosť, ktorú tento displej ovláda. Vyžadované pre displeje s rolou Miestnosť.`,validation:{required:`Priradenie miestnosti je povinné pre displeje s rolou Miestnosť`}},numberFormat:{title:`Formát čísiel`,placeholder:`Predvolené systémové`,values:{commaDot:`1,234.56 (čiarka / bodka)`,dotComma:`1.234,56 (bodka / čiarka)`,spaceComma:`1 234,56 (medzera / čiarka)`,none:`1234.56 (bez skupín)`}},temperatureUnit:{title:`Jednotka teploty`,placeholder:`Predvolené systémové`,values:{celsius:`Celsius (°C)`,fahrenheit:`Fahrenheit (°F)`}},windSpeedUnit:{title:`Jednotka rýchlosti vetra`,placeholder:`Predvolené systémové`,values:{ms:`Metre za sekundu (m/s)`,kmh:`Kilometre za hodinu (km/h)`,mph:`Míle za hodinu (mph)`,knots:`Uzly (kn)`}},pressureUnit:{title:`Jednotka tlaku`,placeholder:`Predvolené systémové`,values:{hpa:`Hektopascal (hPa)`,mbar:`Milibar (mbar)`,inhg:`Palce ortuťového stĺpca (inHg)`,mmhg:`Milimetre ortuťového stĺpca (mmHg)`}},precipitationUnit:{title:`Jednotka zrážok`,placeholder:`Predvolené systémové`,values:{mm:`Milimetre (mm)`,inches:`Palce (in)`}},distanceUnit:{title:`Jednotka vzdialenosti`,placeholder:`Predvolené systémové`,values:{km:`Kilometre (km)`,miles:`Míle (mi)`,meters:`Metre (m)`,feet:`Stopy (ft)`}},weatherLocationId:{title:`Poloha počasia`,placeholder:`Predvolené systémové (primárna poloha)`,description:`Prepísať polohu počasia pre tento displej. Ponechajte prázdne na použitie primárnej polohy z konfigurácie počasia.`}}},filters:{darkMode:{title:`Tmavý režim`,values:{enabled:`Povolený`,disabled:`Zakázaný`,all:`Všetky`}},screenSaver:{title:`Šetrič obrazovky`,values:{enabled:`Povolený`,disabled:`Zakázaný`,all:`Všetky`}},state:{title:`Stav`},states:{title:`Stav`}},states:{connected:`Pripojený`,disconnected:`Odpojený`,lost:`Stratený`,unknown:`Neznámy`},roles:{room:`Miestnosť`,master:`Hlavný`,entry:`Vstup`},texts:{loadingDisplays:`Načítavanie displejov...`,loadingDisplay:`Načítavanie displeja...`,noDisplays:`Zatiaľ nie sú zaregistrované žiadne displeje`,noFilteredDisplays:`Žiadne displeje nezodpovedajú vašim filtrom`,confirmDiscard:`Máte neuložené zmeny. Naozaj ich chcete zahodiť?`,aboutDisplayConfiguration:`Nakonfigurujte režim nasadenia a nastavenia registrácie displejov. Režim nasadenia určuje, ako sú organizované backend a panel, zatiaľ čo trvanie povolenia pripojenia ovláda, ako dlho sa môžu nové displeje registrovať na sieti.`},buttons:{detail:{title:`Detail`},adjust:{title:`Filter`},resetFilters:{title:`Resetovať filtre`},reset:{title:`Resetovať filtre`},yes:{title:`Áno`},no:{title:`Nie`},save:{title:`Uložiť`},cancel:{title:`Zrušiť`},close:{title:`Zavrieť`},discard:{title:`Zahodiť`},permitJoin:{title:`Povoliť pripojenie`,disable:`Zakázať pripojenie ({time})`},back:{title:`Späť`}},edit:{sections:{general:{title:`Všeobecné`},layout:{title:`Rozloženie`,badge:`Pokročilé`,description:`Pokročilé nastavenia ovládajúce, koľko dlaždíc sa zobrazí na obrazovke a ako sú usporiadané v mriežke.`},appearance:{title:`Vzhľad`},homePage:{title:`Domovská stránka`,autoRoomHint:`V <strong>automatickom režime</strong> displej otvorí predvolené systémové zobrazenie na základe svojej roly a priradenia.`},weather:{title:`Poloha počasia`,description:`Prepísať polohu počasia pre tento displej. Ak nie je nastavená, použije sa primárna poloha z konfigurácie počasia.`},units:{title:`Prepísanie jednotiek`,description:`Prepísať celosystémové merné jednotky pre tento displej. Ponechajte prázdne na použitie systémového predvoleného nastavenia.`},audio:{title:`Zvuk`,badge:`Pokročilé`}}},detail:{title:`Detail displeja`,info:{title:`Informácie o displeji`,role:`Rola`,macAddress:`MAC adresa`,version:`Verzia`,build:`Zostavenie`,resolution:`Rozlíšenie`,pixelRatio:`Pomer pixelov`,gridSize:`Veľkosť mriežky`,registeredFromIp:`Registrovaná IP`,currentIpAddress:`Aktuálna IP`,status:`Stav pripojenia`},settings:{title:`Nastavenia displeja`,gridSize:`Veľkosť mriežky`,darkMode:`Tmavý režim`,brightness:`Jas`,screenLockDuration:`Trvanie uzamknutia obrazovky`,screenSaver:`Šetrič obrazovky`,screenPowerOff:`Vypnutie obrazovky`,speakerEnabled:`Reproduktor povolený`,speakerVolume:`Hlasitosť reproduktora`,microphoneEnabled:`Mikrofón povolený`,microphoneVolume:`Hlasitosť mikrofónu`},peripherals:{title:`Periférie`,audioOutput:`Zvukový výstup`,audioOutputVolume:`Hlasitosť zvukového výstupu`,audioInput:`Zvukový vstup`,audioInputVolume:`Hlasitosť zvukového vstupu`},audio:{speaker:{title:`Reproduktor (zvukový výstup)`},microphone:{title:`Mikrofón (zvukový vstup)`}},tokens:{title:`Prístupové tokeny`,subtitle:`Spravovať tokeny`,description:`Spravujte prístupové tokeny pre tento displej. Každý displej by mal mať maximálne jeden aktívny token.`,noTokens:`Žiadne aktívne tokeny`,revokeConfirm:`Naozaj chcete odobrať prístupový token? Displej sa bude musieť znovu zaregistrovať.`,revoked:`Token bol úspešne odobratý`},spaceContext:{title:`Kontext priestoru`,role:`Rola displeja`,homeMode:`Režim domovskej stránky`,assignedRoom:`Priradená miestnosť`,notAssigned:`Nepriradená`,initialView:`Počiatočné zobrazenie`,systemViews:`Systémové zobrazenia`,selectedPage:`Vybraná stránka`,hint:`Hlavné zobrazenia tohto displeja sú generované automaticky na základe jeho roly a priradeného priestoru.`,homeModes:{auto_space:`Automaticky`,explicit:`Explicitne`},initialViews:{roomOverview:`Prehľad miestnosti`,houseOverview:`Prehľad domu`,entryOverview:`Prehľad vstupu`},views:{overview:`Prehľad`,lights:`Svetlá`,climate:`Klíma`}}},messages:{notFound:`Displej nebol nájdený`,loadError:`Nepodarilo sa načítať displeje`,confirmRemove:`Naozaj chcete odstrániť displej "{name}"? Túto akciu nie je možné vrátiť.`,confirmBulkRemove:`Naozaj chcete odstrániť {count} displejov? Túto akciu nie je možné vrátiť.`,removed:`Displej bol úspešne odstránený`,bulkRemoved:`{count} displejov bolo odstránených`,bulkRemoveFailed:`Nepodarilo sa odstrániť {count} displejov`,edited:`Displej {display} bol aktualizovaný`,notEdited:`Displej {display} nebol aktualizovaný`,deletedWhileEditing:`Tento displej bol odstránený a už nie je dostupný.`,permitJoinActivated:`Povolenie pripojenia bolo úspešne aktivované`,permitJoinDeactivated:`Povolenie pripojenia bolo úspešne deaktivované`,permitJoinError:`Nepodarilo sa aktivovať povolenie pripojenia`,permitJoinDeactivateError:`Nepodarilo sa deaktivovať povolenie pripojenia`,config:{edited:`Konfigurácia displejov bola úspešne aktualizovaná`,notEdited:`Nepodarilo sa aktualizovať konfiguráciu displejov`}},actions:{revokeToken:`Odobrať token`,manageTokens:`Spravovať tokeny`}},ht={"cs-CZ":lt,"de-DE":ut,"en-US":dt,"es-ES":ft,"pl-PL":pt,"sk-SK":mt},gt=[{path:`displays`,name:q.DISPLAYS,component:()=>V(()=>import(`./view-displays-Bv-jxEGc.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26])),props:!0,meta:{guards:{authenticated:!0,roles:[B.admin,B.owner]},title:()=>Fe.global.t(`displaysModule.menu.title`),icon:`mdi:monitor`,menu:6e3},children:[{path:`:id`,name:q.DISPLAYS_EDIT,component:()=>V(()=>import(`./view-display-edit-DOBx3FR9.js`),__vite__mapDeps([27,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,26])),props:!0,meta:{guards:{authenticated:!0,roles:[B.admin,B.owner]},title:`Edit display`,icon:`mdi:pencil-circle`}}]},{path:`display/:id`,name:q.DISPLAY,component:()=>V(()=>import(`./view-display-BoDjtT_C.js`),__vite__mapDeps([28,1,2,3,4,5,6,7,8,9,10,29,24,14,15,23,16,25,26])),props:!0,meta:{guards:{authenticated:!0,roles:[B.admin,B.owner]},title:`Display detail`,icon:`mdi:monitor`},children:[{path:`edit`,name:q.DISPLAY_EDIT,component:()=>V(()=>import(`./view-display-edit-DOBx3FR9.js`),__vite__mapDeps([27,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,26])),props:!0,meta:{guards:{authenticated:!0,roles:[B.admin,B.owner]},title:`Edit display`,icon:`mdi:pencil-circle`}},{path:`tokens`,name:q.DISPLAY_TOKENS,component:()=>V(()=>import(`./view-display-tokens-ylzZVdwc.js`),__vite__mapDeps([30,1,2,3,4,5,14,15,21,26])),props:!0,meta:{guards:{authenticated:!0,roles:[B.admin,B.owner]},title:`Display tokens`,icon:`mdi:key`}}]}],_t=Ne.extend({deploymentMode:P([`standalone`,`all-in-one`,`combined`]),permitJoinDurationMs:L().int().min(1e3)}),vt=Oe.extend({type:Ue(rt),deploymentMode:P([`standalone`,`all-in-one`,`combined`]),permitJoinDurationMs:L().int().min(1e3)}),yt=Ce.and(z({type:Ue(rt),deployment_mode:P([`standalone`,`all-in-one`,`combined`]).optional(),permit_join_duration_ms:L().int().min(1e3).optional()}));Ae.and(z({type:Ue(rt),deployment_mode:P([`standalone`,`all-in-one`,`combined`]),permit_join_duration_ms:L().int().min(1e3)}));var X=H().uuid(),bt=P([`auto_space`,`explicit`]),Z=P([`room`,`master`,`entry`]),xt=P([`comma_dot`,`dot_comma`,`space_comma`,`none`]),St=P([`celsius`,`fahrenheit`]),Ct=P([`ms`,`kmh`,`mph`,`knots`]),wt=P([`hpa`,`mbar`,`inhg`,`mmhg`]),Tt=P([`mm`,`inches`]),Et=P([`km`,`miles`,`meters`,`feet`]),Q=z({id:X,draft:N().default(!1),macAddress:H().trim().nonempty(),name:H().nullable().default(null),role:Z.default(`room`),version:H().trim().nonempty(),build:H().trim().nullable().default(null),screenWidth:L().default(0),screenHeight:L().default(0),pixelRatio:L().default(1),unitSize:L().default(8),rows:L().default(12),cols:L().default(24),darkMode:N().default(!1),brightness:L().min(0).max(100).default(100),screenLockDuration:L().default(30),screenSaver:N().default(!0),screenPowerOff:N().default(!1),audioOutputSupported:N().default(!1),audioInputSupported:N().default(!1),speaker:N().default(!1),speakerVolume:L().min(0).max(100).default(50),microphone:N().default(!1),microphoneVolume:L().min(0).max(100).default(50),homeMode:bt.default(`auto_space`),homePageId:H().uuid().nullable().default(null),resolvedHomePageId:H().uuid().nullable().optional().default(null),roomId:H().uuid().nullable().default(null),numberFormat:xt.nullable().default(null),temperatureUnit:St.nullable().default(null),windSpeedUnit:Ct.nullable().default(null),pressureUnit:wt.nullable().default(null),precipitationUnit:Tt.nullable().default(null),distanceUnit:Et.nullable().default(null),weatherLocationId:H().uuid().nullable().default(null),registeredFromIp:H().nullable().default(null),currentIpAddress:H().nullable().default(null),online:N().default(!1),status:P([`connected`,`disconnected`,`lost`,`unknown`]).default(`unknown`),createdAt:de([H().datetime({offset:!0}),le()]).transform(e=>e instanceof Date?e:new Date(e)),updatedAt:de([H().datetime({offset:!0}),le()]).transform(e=>e instanceof Date?e:new Date(e)).optional().nullable().default(null)});z({fetching:z({items:N().default(!1),item:ve(X)}),creating:ve(X),updating:ve(X),deleting:ve(X)}),z({id:X,data:re({})}),z({id:X,data:z({macAddress:H().trim().nonempty().optional(),name:H().nullable().optional(),role:Z.optional(),version:H().trim().nonempty().optional(),build:H().trim().nullable().optional(),screenWidth:L().optional(),screenHeight:L().optional(),pixelRatio:L().optional(),unitSize:L().optional(),rows:L().optional(),cols:L().optional(),darkMode:N().optional(),brightness:L().min(0).max(100).optional(),screenLockDuration:L().optional(),screenSaver:N().optional(),screenPowerOff:N().optional(),audioOutputSupported:N().optional(),audioInputSupported:N().optional(),speaker:N().optional(),speakerVolume:L().min(0).max(100).optional(),microphone:N().optional(),microphoneVolume:L().min(0).max(100).optional(),numberFormat:xt.nullable().optional(),temperatureUnit:St.nullable().optional(),windSpeedUnit:Ct.nullable().optional(),pressureUnit:wt.nullable().optional(),precipitationUnit:Tt.nullable().optional(),distanceUnit:Et.nullable().optional(),weatherLocationId:H().uuid().nullable().optional()})}),z({id:X}),z({id:X});var Dt=z({id:X.optional().default(we()),draft:N().optional().default(!1),data:z({macAddress:H().trim().nonempty(),version:H().trim().nonempty(),build:H().trim().nullable().optional().default(null),screenWidth:L().optional().default(0),screenHeight:L().optional().default(0),pixelRatio:L().optional().default(1),unitSize:L().optional().default(8),rows:L().optional().default(12),cols:L().optional().default(24)})}),Ot=z({id:X,data:z({name:H().nullable().optional(),role:Z.optional(),unitSize:L().min(1).optional(),rows:L().min(1).optional(),cols:L().min(1).optional(),darkMode:N().optional(),brightness:L().min(0).max(100).optional(),screenLockDuration:L().optional(),screenSaver:N().optional(),screenPowerOff:N().optional(),speaker:N().optional(),speakerVolume:L().min(0).max(100).optional(),microphone:N().optional(),microphoneVolume:L().min(0).max(100).optional(),homeMode:bt.optional(),homePageId:H().uuid().nullable().optional(),roomId:H().uuid().nullable().optional(),numberFormat:xt.nullable().optional(),temperatureUnit:St.nullable().optional(),windSpeedUnit:Ct.nullable().optional(),pressureUnit:wt.nullable().optional(),precipitationUnit:Tt.nullable().optional(),distanceUnit:Et.nullable().optional(),weatherLocationId:H().uuid().nullable().optional()})});z({id:X}),z({id:X}),z({id:X});var kt=z({mac_address:H().trim().nonempty(),version:H().trim().nonempty(),build:H().trim().optional(),screen_width:L().optional(),screen_height:L().optional(),pixel_ratio:L().optional(),unit_size:L().optional(),rows:L().optional(),cols:L().optional()}),At=z({name:H().nullable().optional(),role:Z.optional(),unit_size:L().min(1).optional(),rows:L().min(1).optional(),cols:L().min(1).optional(),dark_mode:N().optional(),brightness:L().min(0).max(100).optional(),screen_lock_duration:L().optional(),screen_saver:N().optional(),screen_power_off:N().optional(),speaker:N().optional(),speaker_volume:L().min(0).max(100).optional(),microphone:N().optional(),microphone_volume:L().min(0).max(100).optional(),home_mode:bt.optional(),home_page_id:H().uuid().nullable().optional(),room_id:H().uuid().nullable().optional(),number_format:xt.nullable().optional(),temperature_unit:St.nullable().optional(),wind_speed_unit:Ct.nullable().optional(),pressure_unit:wt.nullable().optional(),precipitation_unit:Tt.nullable().optional(),distance_unit:Et.nullable().optional(),weather_location_id:H().uuid().nullable().optional()});z({id:H().uuid(),mac_address:H().trim().nonempty(),name:H().nullable().optional().default(null),role:Z.optional().default(`room`),version:H().trim().nonempty(),build:H().trim().nullable().optional().default(null),screen_width:L(),screen_height:L(),pixel_ratio:L(),unit_size:L(),rows:L(),cols:L(),dark_mode:N(),brightness:L(),screen_lock_duration:L(),screen_saver:N(),screen_power_off:N(),audio_output_supported:N(),audio_input_supported:N(),speaker:N(),speaker_volume:L(),microphone:N(),microphone_volume:L(),home_mode:bt.optional().default(`auto_space`),home_page_id:H().uuid().nullable().optional().default(null),resolved_home_page_id:H().uuid().nullable().optional().default(null),room_id:H().uuid().nullable().optional().default(null),number_format:xt.nullable().optional().default(null),temperature_unit:St.nullable().optional().default(null),wind_speed_unit:Ct.nullable().optional().default(null),pressure_unit:wt.nullable().optional().default(null),precipitation_unit:Tt.nullable().optional().default(null),distance_unit:Et.nullable().optional().default(null),weather_location_id:H().uuid().nullable().optional().default(null),registered_from_ip:H().nullable().optional().default(null),current_ip_address:H().nullable().optional().default(null),online:N().optional().default(!1),status:P([`connected`,`disconnected`,`lost`,`unknown`]).optional().default(`unknown`),created_at:H(),updated_at:H().nullable().optional().default(null)}),z({id:H().uuid(),owner_type:H(),owner_id:H().uuid().nullable(),name:H(),description:H().nullable(),expires_at:H().nullable(),revoked:N(),created_at:H(),updated_at:H().nullable().optional().default(null)});var $=e=>{let t=Q.safeParse({id:e.id,macAddress:e.mac_address,name:e.name??null,role:e.role??`room`,version:e.version,build:e.build??null,screenWidth:e.screen_width??0,screenHeight:e.screen_height??0,pixelRatio:e.pixel_ratio??1,unitSize:e.unit_size??8,rows:e.rows??12,cols:e.cols??24,darkMode:e.dark_mode??!1,brightness:e.brightness??100,screenLockDuration:e.screen_lock_duration??30,screenSaver:e.screen_saver??!0,screenPowerOff:e.screen_power_off??!1,audioOutputSupported:e.audio_output_supported??!1,audioInputSupported:e.audio_input_supported??!1,speaker:e.speaker??!1,speakerVolume:e.speaker_volume??50,microphone:e.microphone??!1,microphoneVolume:e.microphone_volume??50,homeMode:e.home_mode??`auto_space`,homePageId:e.home_page_id??null,resolvedHomePageId:e.resolved_home_page_id??null,roomId:e.room_id??null,numberFormat:e.number_format??null,temperatureUnit:e.temperature_unit??null,windSpeedUnit:e.wind_speed_unit??null,pressureUnit:e.pressure_unit??null,precipitationUnit:e.precipitation_unit??null,distanceUnit:e.distance_unit??null,weatherLocationId:e.weather_location_id??null,registeredFromIp:e.registered_from_ip??null,currentIpAddress:e.current_ip_address??null,online:e.online??!1,status:e.status??`unknown`,createdAt:e.created_at,updatedAt:e.updated_at??null});if(!t.success)throw new G(`Failed to validate received display data.`);return t.data},jt=e=>{let t=kt.safeParse({mac_address:e.macAddress,version:e.version,build:e.build??void 0,screen_width:e.screenWidth,screen_height:e.screenHeight,pixel_ratio:e.pixelRatio,unit_size:e.unitSize,rows:e.rows,cols:e.cols});if(!t.success)throw new G(`Failed to validate create display request.`);return t.data},Mt=e=>{let t={name:e.name,role:e.role,unit_size:e.unitSize,rows:e.rows,cols:e.cols,dark_mode:e.darkMode,brightness:e.brightness,screen_lock_duration:e.screenLockDuration,screen_saver:e.screenSaver,screen_power_off:e.screenPowerOff};e.speaker!==void 0&&(t.speaker=e.speaker),e.speakerVolume!==void 0&&(t.speaker_volume=e.speakerVolume),e.microphone!==void 0&&(t.microphone=e.microphone),e.microphoneVolume!==void 0&&(t.microphone_volume=e.microphoneVolume),e.homeMode!==void 0&&(t.home_mode=e.homeMode),e.homePageId!==void 0&&(t.home_page_id=e.homePageId),`roomId`in e&&(t.room_id=e.roomId??null),`numberFormat`in e&&(t.number_format=e.numberFormat??null),`temperatureUnit`in e&&(t.temperature_unit=e.temperatureUnit??null),`windSpeedUnit`in e&&(t.wind_speed_unit=e.windSpeedUnit??null),`pressureUnit`in e&&(t.pressure_unit=e.pressureUnit??null),`precipitationUnit`in e&&(t.precipitation_unit=e.precipitationUnit??null),`distanceUnit`in e&&(t.distance_unit=e.distanceUnit??null),`weatherLocationId`in e&&(t.weather_location_id=e.weatherLocationId??null);let n=At.safeParse(t);if(!n.success)throw new G(`Failed to validate update display request.`);return n.data},Nt=ze(),Pt={fetching:{items:!1,item:[]},creating:[],updating:[],deleting:[]},Ft=xe(`displays_module-displays`,()=>{let e=Be(),t=ye(),n=A(Pt),r=A(!1),i=A({}),a=A({}),o={},s={},c=()=>r.value,l=e=>n.value.fetching.item.includes(e),u=()=>n.value.fetching.items,d=()=>Object.values(i.value),f=e=>i.value[e]??null,p=e=>m({id:e.id,data:$(e.data)}),m=e=>{if(e.id&&i.value&&e.id in i.value){let n=Q.safeParse({...i.value[e.id],...e.data});if(!n.success)throw t.error(`Schema validation failed with:`,n.error),new G(`Failed to insert display.`);return i.value[n.data.id]=n.data}let n=Q.safeParse({...e.data,id:e.id});if(!n.success)throw t.error(`Schema validation failed with:`,n.error),new G(`Failed to insert display.`);return i.value=i.value??{},i.value[n.data.id]=n.data},h=e=>{i.value&&delete i.value[e.id]},g=async t=>{let r=o[t.id];if(r)return r;let a=(async()=>{if(n.value.fetching.item.includes(t.id))throw new J(`Already fetching display.`);n.value.fetching.item.push(t.id);try{let{data:n,error:r,response:a}=await e.client.GET(`/${D}/${K}/displays/{id}`,{params:{path:{id:t.id}}});if(n!==void 0){let e=$(n.data);return i.value[e.id]=e,e}throw new J(`Failed to fetch display.`,a.status)}finally{n.value.fetching.item=n.value.fetching.item.filter(e=>e!==t.id)}})();o[t.id]=a;try{return await a}finally{delete o[t.id]}},_=async()=>{if(`all`in s)return s.all;let t=(async()=>{if(n.value.fetching.items)throw new J(`Already fetching displays.`);n.value.fetching.items=!0;try{let{data:t,error:n,response:a}=await e.client.GET(`/${D}/${K}/displays`);if(t!==void 0)return i.value=Object.fromEntries(t.data.map(e=>{let t=$(e);return[t.id,t]})),r.value=!0,Object.values(i.value);throw new J(`Failed to fetch displays.`,a.status)}finally{n.value.fetching.items=!1}})();s.all=t;try{return await t}finally{delete s.all}},v=async r=>{let a=Dt.safeParse(r);if(!a.success)throw t.error(`Schema validation failed with:`,a.error),new G(`Failed to add display.`);let o=Q.safeParse({...a.data.data,id:a.data.id,draft:a.data.draft,createdAt:new Date});if(!o.success)throw t.error(`Schema validation failed with:`,o.error),new G(`Failed to add display.`);if(n.value.creating.push(o.data.id),i.value[o.data.id]=o.data,o.data.draft)return n.value.creating=n.value.creating.filter(e=>e!==o.data.id),o.data;try{let{data:t,error:n,response:a}=await e.client.POST(`/${D}/${K}/register`,{params:{header:{"user-agent":`FastyBird Smart Panel Admin`}},body:{data:jt({...o.data,id:r.id})}});if(t!==void 0&&t.data.display.id===r.id){let e=$(t.data.display);return i.value[e.id]=e,e}throw delete i.value[o.data.id],new J(`Failed to create display.`,a.status)}finally{n.value.creating=n.value.creating.filter(e=>e!==o.data.id)}},y=async r=>{let a=Ot.safeParse(r);if(!a.success)throw t.error(`Schema validation failed with:`,a.error),new G(`Failed to edit display.`);if(n.value.updating.includes(r.id))throw new Y(`Display is already being updated.`);if(!(r.id in i.value))throw new Y(`Failed to get display data to update.`);let o=Q.safeParse({...i.value[r.id],...(0,Nt.omitBy)(a.data.data,Nt.isUndefined)});if(!o.success)throw t.error(`Schema validation failed with:`,o.error),new G(`Failed to edit display.`);if(n.value.updating.push(r.id),i.value[o.data.id]=o.data,o.data.draft)return n.value.updating=n.value.updating.filter(e=>e!==o.data.id),o.data;try{let{data:t,error:n,response:a}=await e.client.PATCH(`/${D}/${K}/displays/{id}`,{params:{path:{id:r.id}},body:{data:Mt(o.data)}});if(t!==void 0){let e=$(t.data);return i.value[e.id]=e,e}throw await g({id:r.id}),new J(`Failed to update display.`,a.status)}finally{n.value.updating=n.value.updating.filter(e=>e!==r.id)}},b=async r=>{if(n.value.updating.includes(r.id))throw new Y(`Display is already being saved.`);if(!(r.id in i.value))throw new Y(`Failed to get display data to save.`);let a=Q.safeParse(i.value[r.id]);if(!a.success)throw t.error(`Schema validation failed with:`,a.error),new G(`Failed to save display.`);n.value.updating.push(r.id);try{let{data:t,error:n,response:o}=await e.client.POST(`/${D}/${K}/register`,{params:{header:{"user-agent":`FastyBird Smart Panel Admin`}},body:{data:jt({...a.data,id:r.id})}});if(t!==void 0&&t.data.display.id===r.id){let e=$(t.data.display);return i.value[e.id]=e,e}throw new J(`Failed to create display.`,o.status)}finally{n.value.updating=n.value.updating.filter(e=>e!==r.id)}},x=async t=>{if(n.value.deleting.includes(t.id))throw new Y(`Display is already being removed.`);if(!Object.keys(i.value).includes(t.id))return!0;n.value.deleting.push(t.id);let r=i.value[t.id];if(delete i.value[t.id],r?.draft)n.value.deleting=n.value.deleting.filter(e=>e!==t.id);else try{let{error:n,response:r}=await e.client.DELETE(`/${D}/${K}/displays/{id}`,{params:{path:{id:t.id}}});if(r.status===204)return!0;throw await g({id:t.id}),new J(`Remove display failed.`,r.status)}finally{n.value.deleting=n.value.deleting.filter(e=>e!==t.id)}return!0},S=async t=>{try{let{data:n,error:r,response:i}=await e.client.GET(`/${D}/${K}/displays/{id}/tokens`,{params:{path:{id:t.id}}});if(n!==void 0)return n.data.map(e=>{let t=e;return{id:t.id,owner_type:t.owner_type,owner_id:t.owner_id,name:t.name,description:t.description,expires_at:t.expires_at,revoked:t.revoked,created_at:t.created_at,updated_at:t.updated_at??null}});throw new J(`Failed to fetch display tokens.`,i.status)}catch(e){throw e instanceof J?e:new J(`Failed to fetch display tokens.`)}},C=async t=>{try{let{response:n}=await e.client.POST(`/${D}/${K}/displays/{id}/revoke-token`,{params:{path:{id:t.id}}});if(n.status===204)return w({id:t.id}),!0;throw new J(`Failed to revoke display token.`,n.status)}catch(e){throw e instanceof J?e:new J(`Failed to revoke display token.`)}},w=e=>{a.value={...a.value,[e.id]:(a.value[e.id]??0)+1}};return{semaphore:n,firstLoad:r,data:i,tokenRefreshTriggers:a,firstLoadFinished:c,getting:l,fetching:u,findAll:d,findById:f,onEvent:p,set:m,unset:h,get:g,fetch:_,add:v,edit:y,save:b,remove:x,getTokens:S,revokeToken:C,refreshTokensForDisplay:w}}),It=e=>Ft(e),Lt=Symbol(`FB-Module-Displays`),Rt={install:(e,t)=>{let n=be(e),r=_e(e),i=ae(e),a=me(e);for(let[e,n]of Object.entries(ht)){let r=(0,Nt.defaultsDeep)(t.i18n.global.getLocaleMessage(e),{displaysModule:n});t.i18n.global.setLocaleMessage(e,r)}let o=It(t.store);e.provide(et,o),n.addStore(et,o),a.addModule(Lt,{type:rt,name:`Displays`,description:`Manage your display devices and their access tokens.`,elements:[{type:Le,components:{moduleConfigEditForm:it},schemas:{moduleConfigSchema:vt,moduleConfigEditFormSchema:_t,moduleConfigUpdateReqSchema:yt},modules:[He]}],modules:[He],isCore:!0}),t.router.getRoutes().find(e=>e.name===S.ROOT)&>.forEach(e=>{t.router.addRoute(S.ROOT,e)}),r.on(`event`,e=>{if(e?.event?.startsWith(`DisplaysModule.`)&&!(e.payload===null||typeof e.payload!=`object`||!(`id`in e.payload)||typeof e.payload.id!=`string`))switch(e.event){case tt.DISPLAY_CREATED:case tt.DISPLAY_UPDATED:o.onEvent({id:e.payload.id,data:e.payload}),o.refreshTokensForDisplay({id:e.payload.id});break;case tt.DISPLAY_DELETED:o.unset({id:e.payload.id});break;case tt.DISPLAY_TOKEN_REVOKED:o.refreshTokensForDisplay({id:e.payload.id});break;default:i.warn(`Unhandled displays module event:`,e.event)}})}},zt=l({name:`PagesTableColumnActions`,__name:`pages-table-column-actions`,props:{page:{}},emits:[`detail`,`edit`,`remove`],setup(e,{emit:t}){let r=e,i=t,{t:a}=_(),o=h(),{plugin:s}=Ye({type:r.page.type}),l=()=>{let e=s.value?.routes?.configure;e&&(typeof e==`function`?o.push(e(r.page.id)):o.push(e))};return(e,t)=>(n(),j(w,null,[d(s)?.routes?.configure?(n(),y(d(b),{key:0,size:`small`,plain:``,"data-test-id":`configure-page`,onClick:k(l,[`stop`])},{icon:c(()=>[M(d(O),{icon:`mdi:cogs`})]),default:c(()=>[m(` `+C(d(a)(`dashboardModule.buttons.configure.title`)),1)]),_:1})):f(``,!0),M(d(b),{size:`small`,plain:``,class:`ml-1!`,"data-test-id":`detail-page`,onClick:t[0]||=k(e=>i(`detail`,r.page.id),[`stop`])},{icon:c(()=>[M(d(O),{icon:`mdi:file-search-outline`})]),default:c(()=>[m(` `+C(d(a)(`dashboardModule.buttons.detail.title`)),1)]),_:1}),M(d(b),{size:`small`,plain:``,class:`ml-1!`,"data-test-id":`edit-page`,onClick:t[1]||=k(e=>i(`edit`,r.page.id),[`stop`])},{icon:c(()=>[M(d(O),{icon:`mdi:pencil`})]),_:1}),M(d(b),{size:`small`,type:`warning`,plain:``,class:`ml-1!`,"data-test-id":`remove-page`,onClick:t[2]||=k(e=>i(`remove`,r.page.id),[`stop`])},{icon:c(()=>[M(d(O),{icon:`mdi:trash`})]),_:1})],64))}}),Bt=l({name:`PagesTableColumnIcon`,__name:`pages-table-column-icon`,props:{page:{}},setup(e){let{icon:t}=qe({id:e.page.id});return(e,r)=>(n(),y(d(ie),{size:32},{default:c(()=>[M(d(O),{icon:d(t),class:`w[20px] h[20px]`},null,8,[`icon`])]),_:1}))}}),Vt=l({name:`PagesTableColumnPlugin`,__name:`pages-table-column-plugin`,props:{page:{},filters:{}},emits:[`filter-by`],setup(e,{emit:t}){let r=e,i=t,{plugin:a}=Ye({type:r.page.type});return(e,t)=>(n(),y(d(R),{truncated:``},{default:c(()=>[M(d(fe),{type:r.filters.types.includes(r.page.type)?`danger`:void 0,underline:`never`,class:`font-400!`,onClick:t[0]||=k(e=>i(`filter-by`,r.page.type,!r.filters.types.includes(r.page.type)),[`stop`])},{default:c(()=>[M(d(o),{class:`el-icon--left`},{default:c(()=>[r.filters.types.includes(r.page.type)?(n(),y(d(O),{key:0,icon:`mdi:filter-minus`})):(n(),y(d(O),{key:1,icon:`mdi:filter-plus`}))]),_:1}),m(` `+C(d(a)?.name||r.page.type),1)]),_:1},8,[`type`])]),_:1}))}}),Ht={key:0,class:`h-full w-full leading-normal`},Ut={key:1,class:`h-full w-full leading-normal`},Wt={key:2,class:`h-full w-full leading-normal`},Gt=l({name:`PagesTable`,__name:`pages-table`,props:{items:{},totalRows:{},sortBy:{},sortDir:{},loading:{type:Boolean},filters:{},filtersActive:{type:Boolean},tableHeight:{}},emits:[`detail`,`edit`,`remove`,`reset-filters`,`selected-changes`,`update:filters`,`update:sort-by`,`update:sort-dir`],setup(r,{emit:i}){let a=r,o=i,{t:s}=_(),{isMDDevice:l}=je(),u=E(()=>a.totalRows===0),p=ge(a,`filters`,o),h=({prop:e,order:t})=>{o(`update:sort-by`,e),o(`update:sort-dir`,t===`descending`?`desc`:t===`ascending`?`asc`:null)},g=e=>{o(`selected-changes`,e)},v=e=>{o(`detail`,e.id)},S=(e,t,n)=>{if(e===`type`){if(t===null)return;let e=p.value.types;n===!0?e.push(t):e=p.value.types.filter(e=>e!==t),p.value.types=Array.from(new Set(e))}else if(e===`display`){let e=p.value.displays;n===!0?e.push(t):e=p.value.displays.filter(e=>e!==t),p.value.displays=Array.from(new Set(e))}};return(i,_)=>e((n(),y(d(We),{"element-loading-text":d(s)(`dashboardModule.texts.pages.loadingPages`),data:a.items,"default-sort":a.sortBy!==void 0&&a.sortDir!==null?{prop:a.sortBy,order:a.sortDir===`desc`?`descending`:`ascending`}:void 0,"table-layout":`fixed`,"row-key":`id`,class:`flex-grow`,style:t({maxHeight:r.tableHeight+`px`}),"max-height":r.tableHeight,onSortChange:h,onSelectionChange:g,onRowClick:v},{empty:c(()=>[a.loading?(n(),j(`div`,Ht,[M(d(T),{class:`h-full w-full`},{icon:c(()=>[M(d(te),{size:80},{primary:c(()=>[M(d(O),{icon:`mdi:view-dashboard`})]),secondary:c(()=>[M(d(O),{icon:`mdi:database-refresh`})]),_:1})]),_:1})])):u.value&&!a.loading?(n(),j(`div`,Ut,[M(d(T),{class:`h-full w-full`},{icon:c(()=>[M(d(te),{size:80},{primary:c(()=>[M(d(O),{icon:`mdi:view-dashboard`})]),secondary:c(()=>[M(d(O),{icon:`mdi:information`})]),_:1})]),title:c(()=>[m(C(d(s)(`dashboardModule.texts.pages.noPages`)),1)]),_:1})])):a.filtersActive&&!a.loading?(n(),j(`div`,Wt,[M(d(T),{class:`h-full w-full`},{icon:c(()=>[M(d(te),{size:80},{primary:c(()=>[M(d(O),{icon:`mdi:view-dashboard`})]),secondary:c(()=>[M(d(O),{icon:`mdi:filter-multiple`})]),_:1})]),title:c(()=>[M(d(R),{class:`block`},{default:c(()=>[m(C(d(s)(`dashboardModule.texts.pages.noFilteredPages`)),1)]),_:1}),M(d(b),{type:`primary`,plain:``,class:`mt-4`,onClick:_[0]||=e=>o(`reset-filters`)},{icon:c(()=>[M(d(O),{icon:`mdi:filter-off`})]),default:c(()=>[m(` `+C(d(s)(`dashboardModule.buttons.resetFilters.title`)),1)]),_:1})]),_:1})])):f(``,!0)]),default:c(()=>[d(l)?(n(),y(d(U),{key:0,type:`selection`,width:30})):f(``,!0),M(d(U),{width:60,align:`center`},{default:c(e=>[M(Bt,{page:e.row},null,8,[`page`])]),_:1}),M(d(U),{label:d(s)(`dashboardModule.table.pages.columns.title.title`),prop:`title`,sortable:`custom`,"sort-orders":[`ascending`,`descending`],"min-width":200,"class-name":`py-0!`},{default:c(e=>[m(C(e.row.title),1)]),_:1},8,[`label`]),M(d(U),{label:d(s)(`dashboardModule.table.pages.columns.type.title`),prop:`type`,sortable:`custom`,"sort-orders":[`ascending`,`descending`],width:200},{default:c(e=>[M(Vt,{page:e.row,filters:d(p),onFilterBy:_[1]||=(e,t)=>S(`type`,e,t)},null,8,[`page`,`filters`])]),_:1},8,[`label`]),M(d(U),{label:d(s)(`dashboardModule.table.pages.columns.display.title`),prop:`display`,sortable:`custom`,"sort-orders":[`ascending`,`descending`],width:150},{default:c(e=>[M(d(ot),{row:e.row,filters:d(p),onFilterBy:_[2]||=(e,t)=>S(`display`,e,t)},null,8,[`row`,`filters`])]),_:1},8,[`label`]),M(d(U),{label:d(s)(`dashboardModule.table.pages.columns.order.title`),prop:`order`,sortable:`custom`,"sort-orders":[`ascending`,`descending`],align:`center`,width:120},{default:c(e=>[m(C(e.row.order),1)]),_:1},8,[`label`]),M(d(U),{width:300,align:`right`},{default:c(e=>[x(`div`,{onClick:_[6]||=k(()=>{},[`stop`])},[M(zt,{page:e.row,onDetail:_[3]||=e=>o(`detail`,e),onEdit:_[4]||=e=>o(`edit`,e),onRemove:_[5]||=e=>o(`remove`,e)},null,8,[`page`])])]),_:1})]),_:1},8,[`element-loading-text`,`data`,`default-sort`,`style`,`max-height`])),[[d(ce),a.loading]])}}),Kt=l({name:`ListPages`,__name:`list-pages`,props:{items:{},allItems:{},totalRows:{},filters:{},filtersActive:{type:Boolean},paginateSize:{},paginatePage:{},sortBy:{},sortDir:{},loading:{type:Boolean}},emits:[`detail`,`edit`,`remove`,`adjust-list`,`reset-filters`,`update:filters`,`update:paginate-size`,`update:paginate-page`,`update:sort-by`,`update:sort-dir`,`bulk-action`],setup(e,{emit:t}){let r=e,o=t,{t:s}=_(),{isMDDevice:l}=je(),f=null,m=A(null),h=A(null),g=ge(r,`filters`,o),v=A(r.sortBy),y=A(r.sortDir),b=A(r.paginatePage),S=A(r.paginateSize),C=A(250),T=A([]),D=E(()=>[{key:`delete`,label:s(`application.bulkActions.delete`),icon:`mdi:trash`,type:`danger`}]),O=e=>{o(`detail`,e)},ee=e=>{o(`edit`,e)},k=e=>{o(`remove`,e)},te=()=>{o(`reset-filters`)},ne=e=>{o(`update:paginate-size`,e)},re=e=>{o(`update:paginate-page`,e)},ie=e=>{T.value=e},ae=e=>{o(`bulk-action`,e,T.value)};return i(()=>{if(!m.value)return;let e=()=>{C.value=m.value.clientHeight-h.value.clientHeight};typeof window<`u`&&`ResizeObserver`in window&&(f=new ResizeObserver(e),f.observe(m.value)),e()}),a(()=>{f&&m.value&&f.unobserve(m.value)}),u(()=>v.value,e=>{o(`update:sort-by`,e)}),u(()=>y.value,e=>{o(`update:sort-dir`,e)}),u(()=>r.paginatePage,e=>{b.value=e}),u(()=>r.paginateSize,e=>{S.value=e}),u(()=>r.sortDir,e=>{y.value=e}),u(()=>r.sortBy,e=>{v.value=e}),u(()=>l.value,e=>{e||(T.value=[])}),(e,t)=>(n(),j(w,null,[M(d(De),{shadow:`never`,class:`px-1 py-2 shrink-0`,"body-class":`p-0!`},{default:c(()=>[M(ct,{filters:d(g),"onUpdate:filters":t[0]||=e=>p(g)?g.value=e:null,"filters-active":r.filtersActive,"selected-count":T.value.length,"bulk-actions":D.value,onResetFilters:t[1]||=e=>o(`reset-filters`),onAdjustList:t[2]||=e=>o(`adjust-list`),onBulkAction:ae},null,8,[`filters`,`filters-active`,`selected-count`,`bulk-actions`])]),_:1}),x(`div`,{ref_key:`wrapper`,ref:m,class:`flex-grow overflow-hidden`},[M(d(De),{shadow:`never`,class:`max-h-full flex flex-col overflow-hidden box-border`,"body-class":`p-0! max-h-full overflow-hidden flex flex-col`},{default:c(()=>[M(Gt,{filters:d(g),"onUpdate:filters":t[3]||=e=>p(g)?g.value=e:null,"sort-by":v.value,"onUpdate:sortBy":t[4]||=e=>v.value=e,"sort-dir":y.value,"onUpdate:sortDir":t[5]||=e=>y.value=e,items:r.items,"total-rows":r.totalRows,loading:r.loading,"filters-active":r.filtersActive,"table-height":C.value,onDetail:O,onEdit:ee,onRemove:k,onResetFilters:te,onSelectedChanges:ie},null,8,[`filters`,`sort-by`,`sort-dir`,`items`,`total-rows`,`loading`,`filters-active`,`table-height`]),x(`div`,{ref_key:`paginator`,ref:h,class:`flex justify-center w-full py-4`},[M(d(Ge),{"current-page":b.value,"onUpdate:currentPage":t[6]||=e=>b.value=e,"page-size":S.value,"onUpdate:pageSize":t[7]||=e=>S.value=e,layout:d(l)?`total, sizes, prev, pager, next, jumper`:`total, sizes, prev, pager, next`,total:r.allItems.length,onSizeChange:ne,onCurrentChange:re},null,8,[`current-page`,`page-size`,`layout`,`total`])],512)]),_:1})],512)],64))}}),qt={key:1,class:`px-2`},Jt={key:1,class:`px-2`},Yt={class:`px-5 py-2 text-center`},Xt=v(l({name:`ListPagesAdjust`,__name:`list-pages-adjust`,props:{filters:{},filtersActive:{type:Boolean}},emits:[`update:filters`,`reset-filters`],setup(e,{emit:t}){let i=e,a=t,o=ee(`list-pages-adjust`),{t:l}=_(),{options:u}=Qe(),{options:f}=nt(),p=A([`types`,`displays`]),h=ge(i,`filters`,a);return(e,t)=>(n(),j(w,null,[M(d(ue),{teleport:``},{icon:c(()=>[M(d(O),{icon:`mdi:filter`})]),title:c(()=>[m(C(d(l)(`dashboardModule.headings.pages.adjustFilters`)),1)]),subtitle:c(()=>[m(C(d(l)(`dashboardModule.subHeadings.pages.adjustFilters`)),1)]),_:1}),x(`div`,{class:s([[d(o).b()],`flex flex-col h-full w-full overflow-hidden`])},[M(d(Re),{class:`flex-grow`},{default:c(()=>[M(d(Ie),{modelValue:p.value,"onUpdate:modelValue":t[2]||=e=>p.value=e},{default:c(()=>[M(d(Te),{name:`types`,class:s([d(o).e(`filter-item`)])},{title:c(()=>[M(d(R),{class:`!px-2`},{default:c(()=>[m(C(d(l)(`dashboardModule.filters.pages.types.title`)),1)]),_:1})]),default:c(()=>[d(u).length?(n(),y(d(ke),{key:0,modelValue:d(h).types,"onUpdate:modelValue":t[0]||=e=>d(h).types=e,class:`flex flex-col px-4`},{default:c(()=>[(n(!0),j(w,null,r(d(u),e=>(n(),y(d(Me),{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`])):(n(),j(`div`,qt,[M(d(oe),{closable:!1},{default:c(()=>[m(C(d(l)(`dashboardModule.texts.pages.noPlugins`)),1)]),_:1})]))]),_:1},8,[`class`]),M(d(Te),{name:`displays`,class:s([d(o).e(`filter-item`)])},{title:c(()=>[M(d(R),{class:`!px-2`},{default:c(()=>[m(C(d(l)(`dashboardModule.filters.pages.displays.title`)),1)]),_:1})]),default:c(()=>[d(f).length?(n(),y(d(ke),{key:0,modelValue:d(h).displays,"onUpdate:modelValue":t[1]||=e=>d(h).displays=e,class:`flex flex-col px-4`},{default:c(()=>[(n(!0),j(w,null,r(d(f),e=>(n(),y(d(Me),{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`])):(n(),j(`div`,Jt,[M(d(oe),{closable:!1},{default:c(()=>[m(C(d(l)(`dashboardModule.texts.pages.noDisplays`)),1)]),_:1})]))]),_:1},8,[`class`])]),_:1},8,[`modelValue`])]),_:1}),x(`div`,Yt,[M(d(b),{disabled:!i.filtersActive,onClick:t[3]||=e=>a(`reset-filters`)},{icon:c(()=>[M(d(O),{icon:`mdi:filter-remove`})]),default:c(()=>[m(` `+C(d(l)(`dashboardModule.buttons.reset.title`)),1)]),_:1},8,[`disabled`])])],2)],64))}}),[[`__scopeId`,`data-v-d7f1c8f6`]]),Zt=l({name:`PageAddForm`,__name:`page-add-form`,props:{id:{},remoteFormSubmit:{type:Boolean},remoteFormResult:{default:Ke.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1},type:{}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let r=e,i=t,{t:a}=_(),{model:o,formEl:s,formChanged:l,submit:f,formResult:p}=Xe({id:r.id,type:r.type}),h=g({title:[{required:!0,message:a(`dashboardModule.fields.pages.title.validation.required`),trigger:`change`}]});return u(()=>p.value,async e=>{i(`update:remote-form-result`,e)}),u(()=>r.remoteFormSubmit,async e=>{e&&(i(`update:remote-form-submit`,!1),f().catch(()=>{}))}),u(()=>r.remoteFormReset,e=>{if(i(`update:remote-form-reset`,!1),e){if(!s.value)return;s.value.resetFields()}}),u(()=>l.value,e=>{i(`update:remote-form-changed`,e)}),(e,t)=>(n(),y(d(he),{ref_key:`formEl`,ref:s,model:d(o),rules:h,"label-position":`top`,"status-icon":``},{default:c(()=>[M(d(F),{label:d(a)(`dashboardModule.fields.pages.id.title`),prop:[`id`]},{default:c(()=>[M(d(I),{modelValue:d(o).id,"onUpdate:modelValue":t[0]||=e=>d(o).id=e,placeholder:d(a)(`dashboardModule.fields.pages.id.placeholder`),name:`id`,required:``,disabled:``},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),M(d(F),{label:d(a)(`dashboardModule.fields.pages.title.title`),prop:[`title`]},{default:c(()=>[M(d(I),{modelValue:d(o).title,"onUpdate:modelValue":t[1]||=e=>d(o).title=e,placeholder:d(a)(`dashboardModule.fields.pages.title.placeholder`),name:`title`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),M(d(F),{label:d(a)(`dashboardModule.fields.pages.icon.title`),prop:[`icon`]},{default:c(()=>[M(d(ne),{modelValue:d(o).icon,"onUpdate:modelValue":t[2]||=e=>d(o).icon=e,placeholder:d(a)(`dashboardModule.fields.pages.icon.placeholder`)},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),M(d(F),{label:d(a)(`dashboardModule.fields.pages.order.title`),prop:[`order`]},{default:c(()=>[M(d(W),{modelValue:d(o).order,"onUpdate:modelValue":t[3]||=e=>d(o).order=e,placeholder:d(a)(`dashboardModule.fields.pages.order.placeholder`),name:`order`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),M(d(F),{label:d(a)(`dashboardModule.fields.pages.showTopBar.title`),prop:[`showTopBar`]},{default:c(()=>[M(d(pe),{modelValue:d(o).showTopBar,"onUpdate:modelValue":t[4]||=e=>d(o).showTopBar=e,name:`showTopBar`},null,8,[`modelValue`])]),_:1},8,[`label`]),M(d(F),{label:d(a)(`dashboardModule.fields.pages.displays.title`),prop:[`displays`]},{default:c(()=>[M(d(at),{modelValue:d(o).displays,"onUpdate:modelValue":t[5]||=e=>d(o).displays=e,placeholder:d(a)(`dashboardModule.fields.pages.displays.placeholder`)},null,8,[`modelValue`,`placeholder`]),M(d(R),{size:`small`,class:`block mt-1 text-gray-500`},{default:c(()=>[m(C(d(a)(`dashboardModule.fields.pages.displays.description`)),1)]),_:1})]),_:1},8,[`label`])]),_:1},8,[`model`,`rules`]))}}),Qt=l({name:`PageEditForm`,__name:`page-edit-form`,props:{page:{},remoteFormSubmit:{type:Boolean},remoteFormResult:{default:Ke.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let r=e,i=t,{t:a}=_(),{model:o,formEl:s,formChanged:l,submit:f,formResult:p}=Je({page:r.page}),h=g({title:[{required:!0,message:a(`dashboardModule.fields.pages.title.validation.required`),trigger:`change`}]});return u(()=>p.value,async e=>{i(`update:remote-form-result`,e)}),u(()=>r.remoteFormSubmit,async e=>{e&&(i(`update:remote-form-submit`,!1),f().catch(()=>{}))}),u(()=>r.remoteFormReset,e=>{if(i(`update:remote-form-reset`,!1),e){if(!s.value)return;s.value.resetFields()}}),u(()=>l.value,e=>{i(`update:remote-form-changed`,e)}),(e,t)=>(n(),y(d(he),{ref_key:`formEl`,ref:s,model:d(o),rules:h,"label-position":`top`,"status-icon":``},{default:c(()=>[M(d(F),{label:d(a)(`dashboardModule.fields.pages.id.title`),prop:[`id`]},{default:c(()=>[M(d(I),{modelValue:d(o).id,"onUpdate:modelValue":t[0]||=e=>d(o).id=e,placeholder:d(a)(`dashboardModule.fields.pages.id.placeholder`),name:`id`,readonly:``,disabled:``},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),M(d(F),{label:d(a)(`dashboardModule.fields.pages.title.title`),prop:[`title`]},{default:c(()=>[M(d(I),{modelValue:d(o).title,"onUpdate:modelValue":t[1]||=e=>d(o).title=e,placeholder:d(a)(`dashboardModule.fields.pages.title.placeholder`),name:`title`,size:`large`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),M(d(F),{label:d(a)(`dashboardModule.fields.pages.icon.title`),prop:[`icon`]},{default:c(()=>[M(d(ne),{modelValue:d(o).icon,"onUpdate:modelValue":t[2]||=e=>d(o).icon=e,placeholder:d(a)(`dashboardModule.fields.pages.icon.placeholder`)},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),M(d(F),{label:d(a)(`dashboardModule.fields.pages.order.title`),prop:[`order`]},{default:c(()=>[M(d(W),{modelValue:d(o).order,"onUpdate:modelValue":t[3]||=e=>d(o).order=e,placeholder:d(a)(`dashboardModule.fields.pages.order.placeholder`),name:`order`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),M(d(F),{label:d(a)(`dashboardModule.fields.pages.showTopBar.title`),prop:[`showTopBar`]},{default:c(()=>[M(d(pe),{modelValue:d(o).showTopBar,"onUpdate:modelValue":t[4]||=e=>d(o).showTopBar=e,name:`showTopBar`},null,8,[`modelValue`])]),_:1},8,[`label`]),M(d(F),{label:d(a)(`dashboardModule.fields.pages.displays.title`),prop:[`displays`]},{default:c(()=>[M(d(at),{modelValue:d(o).displays,"onUpdate:modelValue":t[5]||=e=>d(o).displays=e,placeholder:d(a)(`dashboardModule.fields.pages.displays.placeholder`)},null,8,[`modelValue`,`placeholder`]),M(d(R),{size:`small`,class:`block mt-1 text-gray-500`},{default:c(()=>[m(C(d(a)(`dashboardModule.fields.pages.displays.description`)),1)]),_:1})]),_:1},8,[`label`])]),_:1},8,[`model`,`rules`]))}}),$t=l({name:`SelectPagePlugin`,__name:`select-page-plugin`,props:{modelValue:{}},emits:[`update:modelValue`],setup(e,{emit:t}){let i=e,a=t,{t:o}=_(),{plugins:s,options:l}=Qe(),p=A(i.modelValue),m=E(()=>s.value.find(e=>(e?.elements??[]).some(e=>e.type===p.value))),h=E(()=>(m.value?.elements??[]).find(e=>e.type===p.value));return u(()=>p.value,e=>{a(`update:modelValue`,e)}),(e,t)=>(n(),j(w,null,[M(d(F),{label:d(o)(`dashboardModule.fields.pages.plugin.title`),"label-position":`top`},{default:c(()=>[M(d(Ve),{modelValue:p.value,"onUpdate:modelValue":t[0]||=e=>p.value=e,placeholder:d(o)(`dashboardModule.fields.pages.plugin.placeholder`),name:`plugin`,filterable:``},{default:c(()=>[(n(!0),j(w,null,r(d(l),e=>(n(),y(d(Se),{key:e.value,label:e.label,value:e.value,disabled:e.disabled},null,8,[`label`,`value`,`disabled`]))),128))]),_:1},8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),h.value?(n(),y(d(oe),{key:0,description:h.value.description??m.value?.description,closable:!1,"show-icon":``,type:`info`},null,8,[`description`])):f(``,!0)],64))}}),en=l({name:`TileAddForm`,__name:`tile-add-form`,props:{id:{},parent:{},parentId:{},remoteFormSubmit:{type:Boolean},remoteFormResult:{default:Ke.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1},onlyDraft:{type:Boolean,default:!1},withPosition:{type:Boolean,default:!0},withSize:{type:Boolean,default:!0},type:{}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let r=e,i=t,{t:a}=_(),{model:o,formEl:s,formChanged:l,submit:p,formResult:m}=Ze({id:r.id,type:r.type,parent:r.parent,parentId:r.parentId,onlyDraft:r.onlyDraft}),h=g({row:[{required:!0,message:a(`dashboardModule.fields.tiles.row.validation.required`),trigger:`change`}],col:[{required:!0,message:a(`dashboardModule.fields.tiles.col.validation.required`),trigger:`change`}]});return u(()=>m.value,async e=>{i(`update:remote-form-result`,e)}),u(()=>r.remoteFormSubmit,async e=>{e&&(i(`update:remote-form-submit`,!1),p().catch(()=>{}))}),u(()=>r.remoteFormReset,e=>{if(i(`update:remote-form-reset`,!1),e){if(!s.value)return;s.value.resetFields()}}),u(()=>l.value,e=>{i(`update:remote-form-changed`,e)}),(e,t)=>(n(),y(d(he),{ref_key:`formEl`,ref:s,model:d(o),rules:h,"label-position":`top`,"status-icon":``},{default:c(()=>[M(d(F),{label:d(a)(`dashboardModule.fields.tiles.id.title`),prop:[`id`]},{default:c(()=>[M(d(I),{modelValue:d(o).id,"onUpdate:modelValue":t[0]||=e=>d(o).id=e,placeholder:d(a)(`dashboardModule.fields.tiles.id.placeholder`),name:`id`,required:``,disabled:``},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),r.withPosition?(n(),y(d(Pe),{key:0},{default:c(()=>[M(d(Ee),{span:12},{default:c(()=>[M(d(F),{label:d(a)(`dashboardModule.fields.tiles.row.title`),prop:[`row`]},{default:c(()=>[M(d(W),{modelValue:d(o).row,"onUpdate:modelValue":t[1]||=e=>d(o).row=e,placeholder:d(a)(`dashboardModule.fields.tiles.row.placeholder`),name:`row`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1}),M(d(Ee),{span:12},{default:c(()=>[M(d(F),{label:d(a)(`dashboardModule.fields.tiles.col.title`),prop:[`col`]},{default:c(()=>[M(d(W),{modelValue:d(o).col,"onUpdate:modelValue":t[2]||=e=>d(o).col=e,placeholder:d(a)(`dashboardModule.fields.tiles.col.placeholder`),name:`col`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1})]),_:1})):f(``,!0),r.withSize?(n(),y(d(Pe),{key:1},{default:c(()=>[M(d(Ee),{span:12},{default:c(()=>[M(d(F),{label:d(a)(`dashboardModule.fields.tiles.rowSpan.title`),prop:[`rowSpan`]},{default:c(()=>[M(d(W),{modelValue:d(o).rowSpan,"onUpdate:modelValue":t[3]||=e=>d(o).rowSpan=e,placeholder:d(a)(`dashboardModule.fields.tiles.rowSpan.placeholder`),name:`rowSpan`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1}),M(d(Ee),{span:12},{default:c(()=>[M(d(F),{label:d(a)(`dashboardModule.fields.tiles.colSpan.title`),prop:[`colSpan`]},{default:c(()=>[M(d(W),{modelValue:d(o).colSpan,"onUpdate:modelValue":t[4]||=e=>d(o).colSpan=e,placeholder:d(a)(`dashboardModule.fields.tiles.colSpan.placeholder`),name:`colSpan`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1})]),_:1})):f(``,!0)]),_:1},8,[`model`,`rules`]))}}),tn=l({name:`SelectTilePlugin`,__name:`select-tile-plugin`,props:{modelValue:{}},emits:[`update:modelValue`],setup(e,{emit:t}){let i=e,a=t,{t:o}=_(),{plugins:s,options:l}=$e(),p=A(i.modelValue),m=E(()=>s.value.find(e=>(e.elements??[]).some(e=>e.type===p.value))),h=E(()=>(m.value?.elements??[]).find(e=>e.type===p.value));return u(()=>p.value,e=>{a(`update:modelValue`,e)}),(e,t)=>(n(),j(w,null,[M(d(F),{label:d(o)(`dashboardModule.fields.tiles.plugin.title`),"label-position":`top`},{default:c(()=>[M(d(Ve),{modelValue:p.value,"onUpdate:modelValue":t[0]||=e=>p.value=e,placeholder:d(o)(`dashboardModule.fields.tiles.plugin.placeholder`),name:`plugin`,filterable:``},{default:c(()=>[(n(!0),j(w,null,r(d(l),e=>(n(),y(d(Se),{key:e.value,label:e.label,value:e.value,disabled:e.disabled},null,8,[`label`,`value`,`disabled`]))),128))]),_:1},8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),h.value?(n(),y(d(oe),{key:0,description:h.value.description??m.value?.description,closable:!1,"show-icon":``,type:`info`},null,8,[`description`])):f(``,!0)],64))}});export{Zt as a,Rt as c,Qt as i,en as n,Xt as o,$t as r,Kt as s,tn as t};
|
|
@@ -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,mr as a,ui as o}from"./icon-with-child-DmQ_XhQy.js";import{A as s,Fn as c,Ht as l,Jn as u,Kn as d,Mn as f,Pn as p,S as m,T as h,Un as g,Vn as _,Vr as v,Wn as y,Yn as b,_ as x,an as S,f as C,m as w,pn as T,qn as E,qt as D,va as O,wn as k,zn as A}from"./common-DlW3qRTQ.js";import{t as ee}from"./useSpaces-DnSZteHf.js";import{o as j,s as M}from"./composables-Cl0F9F_S.js";var N=`scenes`,P=`scenes-module`,F=`ScenesModule.`,I=function(e){return e.TRIGGER_SCENE=`ScenesModule.TriggerScene`,e}({}),L=function(e){return e.TRIGGER_SCENE=`ScenesModule.TriggerSceneHandler`,e}({}),R=function(e){return e.SCENE_CREATED=`ScenesModule.Scene.Created`,e.SCENE_UPDATED=`ScenesModule.Scene.Updated`,e.SCENE_DELETED=`ScenesModule.Scene.Deleted`,e.SCENE_TRIGGERED=`ScenesModule.Scene.Triggered`,e.SCENE_EXECUTION_STARTED=`ScenesModule.Scene.ExecutionStarted`,e.SCENE_EXECUTION_COMPLETED=`ScenesModule.Scene.ExecutionCompleted`,e.SCENE_EXECUTION_FAILED=`ScenesModule.Scene.ExecutionFailed`,e.SCENE_ACTION_CREATED=`ScenesModule.SceneAction.Created`,e.SCENE_ACTION_UPDATED=`ScenesModule.SceneAction.Updated`,e.SCENE_ACTION_DELETED=`ScenesModule.SceneAction.Deleted`,e}({}),z=function(e){return e.GENERIC=`generic`,e.LIGHTING=`lighting`,e.CLIMATE=`climate`,e.MEDIA=`media`,e.WORK=`work`,e.RELAX=`relax`,e.NIGHT=`night`,e.MORNING=`morning`,e.PARTY=`party`,e.MOVIE=`movie`,e.AWAY=`away`,e.HOME=`home`,e.SECURITY=`security`,e.ENERGY=`energy`,e.CUSTOM=`custom`,e}({}),B=function(e){return e.NONE=`none`,e.WORKING=`working`,e.ERROR=`error`,e.OK=`ok`,e}({}),V={SCENES:`scenes_module-scenes`,SCENES_ADD:`scenes_module-scenes_add`,SCENES_EDIT:`scenes_module-scenes_edit`,SCENE:`scenes_module-scene`,SCENE_EDIT:`scenes_module-scene_edit`,SCENE_ADD_ACTION:`scenes_module-scene_add_action`,SCENE_EDIT_ACTION:`scenes_module-scene_edit_action`},H={[z.GENERIC]:`mdi:playlist-play`,[z.LIGHTING]:`mdi:lightbulb-group`,[z.CLIMATE]:`mdi:thermostat`,[z.MEDIA]:`mdi:television-play`,[z.WORK]:`mdi:briefcase`,[z.RELAX]:`mdi:sofa`,[z.NIGHT]:`mdi:weather-night`,[z.MORNING]:`mdi:weather-sunset-up`,[z.PARTY]:`mdi:party-popper`,[z.MOVIE]:`mdi:movie-open`,[z.AWAY]:`mdi:home-export-outline`,[z.HOME]:`mdi:home-import-outline`,[z.SECURITY]:`mdi:shield-home`,[z.ENERGY]:`mdi:flash`,[z.CUSTOM]:`mdi:shape-outline`},U=y({search:E().optional(),categories:p(_(z)),primarySpaceId:u([E().uuid(),A(`whole_home`)]).optional(),enabled:f([`all`,`enabled`,`disabled`]).default(`all`)}),W=({id:e})=>{let t=h(),n=t.getStore(M),r=t.getStore(j),{data:i,semaphore:o}=O(n);return{scene:a(()=>e===null?null:i.value.get(e)??null),isLoading:a(()=>o.value.fetching.item.includes(e)?!0:i.value.get(e)===void 0?o.value.fetching.items:!1),fetchScene:async()=>{i.value.get(e)?.draft||(await n.get({id:e}),await r.fetch({sceneId:e}))}}},G=y({id:E().uuid().optional(),type:E().trim().nonempty(),configuration:d(E(),b()).default({}),order:g().int().min(0).optional(),enabled:c().default(!0)}).catchall(b());y({id:E().uuid(),type:E().trim().nonempty(),configuration:d(E(),b()).optional(),order:g().int().min(0).optional(),enabled:c().optional()}).catchall(b());var K=y({id:E().uuid().optional(),name:E().trim().nonempty(),description:E().trim().transform(e=>e===``?null:e).nullable().optional(),category:_(z).default(z.GENERIC),enabled:c().default(!0),order:g().optional(),primarySpaceId:E().uuid().nullable().optional().transform(e=>e===``?null:e),actions:p(G).default([])}),q=y({id:E().uuid(),name:E().trim().nonempty().optional(),description:E().trim().transform(e=>e===``?null:e).nullable().optional(),category:_(z).optional(),enabled:c().optional(),order:g().optional(),primarySpaceId:E().uuid().nullable().optional().transform(e=>e===``?null:e),actions:p(G).default([])}),J=class extends Error{exception;constructor(e,t=null){super(e),this.name=`ScenesException`,this.exception=t}},Y=class extends J{code;constructor(e,t=null,n=null){super(e,n),this.name=`ScenesApiException`,this.code=t}},X=class extends J{constructor(e,t=null){super(e,t),this.name=`ScenesValidationException`}},te=()=>{let e=s(),{enabled:t}=S(),n=[`sceneActionAddForm`,`sceneActionEditForm`,`sceneActionCard`],r=[`sceneActionSchema`,`sceneActionAddFormSchema`,`sceneActionEditFormSchema`,`sceneActionCreateReqSchema`,`sceneActionUpdateReqSchema`],i=a(()=>e.getPlugins().filter(e=>e.modules===void 0||e.modules.includes(`scenes-module`)?(e.elements??[]).some(e=>{if(!(e.modules===void 0||e.modules.includes(`scenes-module`)))return!1;let t=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:a(()=>T(i.value.flatMap(e=>(e.elements??[]).filter(e=>{let t=e.modules===void 0||e.modules.includes(`scenes-module`),r=!!e.components&&n.some(t=>e.components&&t in e.components);return t&&r}).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(`scenes-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(`scenes-module`)));if(n)return n}}}},Z=k(),ne=({id:e})=>{let s=h(),c=s.getStore(M),u=s.getStore(j),{t:d}=r(),f=x(),p=m(),{spaces:g,fetching:_,fetchSpaces:v}=ee(),y=o(B.NONE),b,S=a(()=>Object.values(z).map(e=>({value:e,label:d(`scenes.categories.${e}`),icon:H[e]}))),C=a(()=>{let e=g.value.filter(e=>e.type===l.ROOM).map(e=>({value:e.id,label:e.name,icon:D(e)})).sort((e,t)=>e.label.localeCompare(t.label)),t=g.value.filter(e=>e.type===l.ZONE).map(e=>({value:e.id,label:e.name,icon:D(e)})).sort((e,t)=>e.label.localeCompare(t.label)),n=[];return e.length>0&&n.push({type:l.ROOM,label:d(`scenes.form.spaceGroups.rooms`),icon:`mdi:door`,options:e}),t.length>0&&n.push({type:l.ZONE,label:d(`scenes.form.spaceGroups.zones`),icon:`mdi:map-marker-radius`,options:t}),n}),T=n({id:e,category:z.GENERIC,name:``,description:null,enabled:!0,primarySpaceId:null,actions:[]}),{options:E,getElement:O}=te(),k=e=>{let t=e.propertyId;return t&&T.actions.find(e=>e.propertyId===t)?(f.warning(d(`scenes.messages.duplicateAction`)),!1):(T.actions.push(e),!0)},A=e=>{T.actions.splice(e,1)},N=(e,t)=>{e>=0&&e<T.actions.length&&(T.actions[e]=t)},P=e=>O(e)?.components?.sceneActionCard??null,F=e=>O(e)?.components?.sceneActionAddForm??null,I=e=>O(e)?.components?.sceneActionEditForm??null,L=e=>E.value.find(t=>t.value===e)?.label??e,R=w(i(T)),V=o(void 0),U=o(!1),W=async(e,t)=>{try{for(let n=0;n<t.length;n++){let r=t[n];r&&await u.add({sceneId:e,data:{...r,order:n,enabled:r.enabled??!0}})}}catch(e){throw p.error(`Error syncing scene actions:`,e),e}},G=async()=>{if(V.value.clearValidate(),!await V.value.validate())throw new X(`Form not valid`);let t=K.safeParse(T);if(!t.success)throw p.error(`Schema validation failed with:`,t.error),new X(`Failed to validate create scene model.`);y.value=B.WORKING;let n=d(`scenes.messages.createFailed`);try{let n=await c.add({id:e,draft:!1,data:t.data});t.data.actions.length>0&&await W(n.id,t.data.actions)}catch(e){throw y.value=B.ERROR,b=window.setTimeout(q,2e3),e instanceof Y&&e.code===422?f.error(e.message):f.error(n),e}return y.value=B.OK,b=window.setTimeout(q,2e3),f.success(d(`scenes.messages.created`)),`added`},q=()=>{window.clearTimeout(b),y.value=B.NONE};return t(T,()=>{U.value=!(0,Z.isEqual)(i(T),R)}),{categoriesOptions:S,spacesOptionsGrouped:C,model:T,formEl:V,formChanged:U,submit:G,clear:q,formResult:y,loadingSpaces:_,fetchSpaces:v,actionPluginOptions:E,addAction:k,removeAction:A,updateAction:N,getActionCardComponent:P,getActionFormComponent:F,getActionEditFormComponent:I,getPluginLabel:L}},re=({scene:s,messages:c})=>{let u=h(),d=u.getStore(M),f=u.getStore(j),{t:p}=r(),g=x(),_=m(),{spaces:v,fetching:y,fetchSpaces:b}=ee(),S=o(B.NONE),C=a(()=>f.findForScene(s.id)),T=o(w(C.value)),E,O=a(()=>Object.values(z).map(e=>({value:e,label:p(`scenes.categories.${e}`),icon:H[e]}))),k=a(()=>{let e=v.value.filter(e=>e.type===l.ROOM).map(e=>({value:e.id,label:e.name,icon:D(e)})).sort((e,t)=>e.label.localeCompare(t.label)),t=v.value.filter(e=>e.type===l.ZONE).map(e=>({value:e.id,label:e.name,icon:D(e)})).sort((e,t)=>e.label.localeCompare(t.label)),n=[];return e.length>0&&n.push({type:l.ROOM,label:p(`scenes.form.spaceGroups.rooms`),icon:`mdi:door`,options:e}),t.length>0&&n.push({type:l.ZONE,label:p(`scenes.form.spaceGroups.zones`),icon:`mdi:map-marker-radius`,options:t}),n}),A=a(()=>C.value.map(e=>({...e}))),N=n({id:s.id,category:s.category,name:s.name,description:s.description,enabled:s.enabled,primarySpaceId:s.primarySpaceId,actions:A.value}),{options:P,getElement:F}=te(),I=e=>{let t=e.propertyId;return t&&N.actions.find(e=>e.propertyId===t)?(g.warning(p(`scenes.messages.duplicateAction`)),!1):(N.actions.push(e),!0)},L=e=>{N.actions.splice(e,1)},R=(e,t)=>{e>=0&&e<N.actions.length&&(N.actions[e]=t)},V=e=>F(e)?.components?.sceneActionCard??null,U=e=>F(e)?.components?.sceneActionAddForm??null,W=e=>F(e)?.components?.sceneActionEditForm??null,G=e=>P.value.find(t=>t.value===e)?.label??e,K=o(void 0),J=o(!1),ne=w(i(N)),re=async(e,t)=>{try{let n=new Set(T.value.map(e=>e.id)),r=new Set(t.filter(e=>e.id).map(e=>e.id));for(let t of T.value)r.has(t.id)||await f.remove({id:t.id,sceneId:e});let i=new Map;for(let r=0;r<t.length;r++){let a=t[r];if(!a)continue;let o=a.id;if(!o||!n.has(o)){let t=await f.add({sceneId:e,data:{...a,order:r,enabled:a.enabled??!0}});i.set(r,t.id)}else{let t=T.value.find(e=>e.id===o);if(t){let n=new Set([`id`,`draft`,`createdAt`,`updatedAt`,`scene`]),i=e=>Object.fromEntries(Object.entries(e).filter(([e])=>!n.has(e)));(0,Z.isEqual)(i(t),{...i(a),order:r})||await f.edit({id:o,sceneId:e,data:{...a,order:r}})}}}for(let[e,t]of i){let n=N.actions[e];n&&(n.id=t)}T.value=w(f.findForScene(e))}catch(e){throw _.error(`Error syncing scene actions:`,e),e}},ie=async()=>{let e=s.draft,t=c&&c.error?c.error:s.draft?p(`scenes.messages.createFailed`):p(`scenes.messages.editFailed`,{scene:s.name});if(K.value.clearValidate(),!await K.value.validate())throw new X(`Form not valid`);let n=q.safeParse(N);if(!n.success)throw _.error(`Schema validation failed with:`,n.error),new X(`Failed to validate edit scene model.`);S.value=B.WORKING;try{await d.edit({id:s.id,data:n.data});let t=s.id;if(e){let e=await d.save({id:s.id});N.id=e.id,N.category=e.category,N.name=e.name,N.description=e.description,N.enabled=e.enabled,N.primarySpaceId=e.primarySpaceId,t=e.id}await re(t,n.data.actions)}catch(e){throw S.value=B.ERROR,E=window.setTimeout(Q,2e3),e instanceof Y&&e.code===422?g.error(e.message):e instanceof X||(g.error(t),_.error(`Scene edit failed:`,e)),e}return S.value=B.OK,E=window.setTimeout(Q,2e3),e?(g.success(p(c&&c.success?c.success:`scenes.messages.created`)),`added`):(g.success(p(c&&c.success?c.success:`scenes.messages.edited`,{scene:s.name})),J.value=!1,ne=w(i(N)),`saved`)},Q=()=>{window.clearTimeout(E),S.value=B.NONE};return t(N,()=>{J.value=!(0,Z.isEqual)(i(N),ne)}),e(()=>{Q()}),{categoriesOptions:O,spacesOptionsGrouped:k,model:N,formEl:K,formChanged:J,submit:ie,clear:Q,formResult:S,loadingSpaces:y,fetchSpaces:b,actionPluginOptions:P,addAction:I,removeAction:L,updateAction:R,getActionCardComponent:V,getActionFormComponent:U,getActionEditFormComponent:W,getPluginLabel:G}},ie=({id:e})=>{let t=h().getStore(M);return{icon:a(()=>{let n=t.findById(e);return n?.category&&n.category in H?H[n.category]:H[z.GENERIC]})}},Q=()=>{let e=h().getStore(M),{data:t,semaphore:n,firstLoad:r}=O(e);return{scenes:a(()=>Array.from(t.value.values()).sort((e,t)=>e.name.localeCompare(t.name))),fetching:a(()=>n.value.fetching.items),loaded:a(()=>r.value),fetchScenes:async()=>e.fetch(),getScene:async t=>e.get({id:t}),findById:t=>e.findById(t),findBySpace:t=>e.findBySpace(t),triggerScene:async(t,n)=>{await e.trigger({id:t,source:n})},removeScene:async t=>{await e.remove({id:t})}}},ae=()=>{let{t:e}=r(),t=x(),n=h().getStore(M);return{addScene:async e=>n.add(e),editScene:async e=>n.edit(e),removeScene:async e=>{await n.remove({id:e})},bulkRemove:async r=>{if(r.length!==0)try{await v.confirm(e(`scenes.texts.confirmBulkRemove`,{count:r.length}),e(`scenes.headings.bulkRemove`),{confirmButtonText:e(`scenes.buttons.yes.title`),cancelButtonText:e(`scenes.buttons.no.title`),type:`warning`});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(`scenes.messages.bulkRemoved`,{count:i})),a>0&&t.error(e(`scenes.messages.bulkRemoveFailed`,{count:a}))}catch{}},bulkEnable:async r=>{if(r.length!==0)try{await v.confirm(e(`scenes.texts.confirmBulkEnable`,{count:r.length}),e(`scenes.headings.bulkEnable`),{confirmButtonText:e(`scenes.buttons.yes.title`),cancelButtonText:e(`scenes.buttons.no.title`),type:`info`});let i=0,a=0;for(let e of r)try{await n.edit({id:e.id,data:{enabled:!0}}),i++}catch{a++}i>0&&t.success(e(`scenes.messages.bulkEnabled`,{count:i})),a>0&&t.error(e(`scenes.messages.bulkEnableFailed`,{count:a}))}catch{t.info(e(`scenes.messages.bulkEnableCanceled`))}},bulkDisable:async r=>{if(r.length!==0)try{await v.confirm(e(`scenes.texts.confirmBulkDisable`,{count:r.length}),e(`scenes.headings.bulkDisable`),{confirmButtonText:e(`scenes.buttons.yes.title`),cancelButtonText:e(`scenes.buttons.no.title`),type:`warning`});let i=0,a=0;for(let e of r)try{await n.edit({id:e.id,data:{enabled:!1}}),i++}catch{a++}i>0&&t.success(e(`scenes.messages.bulkDisabled`,{count:i})),a>0&&t.error(e(`scenes.messages.bulkDisableFailed`,{count:a}))}catch{t.info(e(`scenes.messages.bulkDisableCanceled`))}}}},$={search:void 0,categories:[],primarySpaceId:void 0,enabled:`all`},oe={by:`name`,dir:`asc`},se=()=>{let e=h().getStore(M),{firstLoad:n,semaphore:r}=O(e),{filters:i,sort:s,pagination:c,reset:l}=C({key:`${P}:scenes:list`,filters:{schema:U,defaults:$},sort:{defaults:[oe]},pagination:{defaults:{page:1,size:10}},syncQuery:!0,version:1}),u=a(()=>i.value.search!==$.search||!(0,Z.isEqual)(i.value.categories,$.categories)||i.value.primarySpaceId!==$.primarySpaceId||i.value.enabled!==$.enabled),d=o(c.value.size||10),f=o(c.value.page||1),p=o(s.value.length>0?s.value[0]?.by:void 0),m=o(s.value.length>0?s.value[0]?.dir??null:null),g=(e,t)=>t?t===`whole_home`?!e:e===t:!0,_=a(()=>{let t=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.categories.length===0||i.value.categories.includes(e.category))&&g(e.primarySpaceId,i.value.primarySpaceId)&&(i.value.enabled===`all`||i.value.enabled===`enabled`&&e.enabled||i.value.enabled===`disabled`&&!e.enabled)),n=p.value??`order`;return T(t,[e=>e[n]??``],[m.value??`asc`])}),v=a(()=>{let e=(f.value-1)*d.value,t=e+d.value;return _.value.slice(e,t)}),y=async()=>{await e.fetch()},b=a(()=>r.value.fetching.items||!n.value),x=a(()=>n.value),S=a(()=>e.findAll().filter(e=>!e.draft).length);return t(()=>c.value,e=>{f.value=e.page??1,d.value=e.size??10},{deep:!0}),t(()=>f.value,e=>{c.value.page=e}),t(()=>d.value,e=>{c.value.size=e}),t(()=>m.value,e=>{p.value===void 0||e===null?s.value=[]:s.value=[{by:p.value,dir:e}]}),t(()=>p.value,e=>{e===void 0||m.value===null?s.value=[]:s.value=[{by:e,dir:m.value}]}),t(()=>i.value,()=>{f.value=1},{deep:!0}),{scenes:_,scenesPaginated:v,totalRows:S,areLoading:b,loaded:x,fetchScenes:y,filters:i,filtersActive:u,paginateSize:d,paginatePage:f,sortBy:p,sortDir:m,resetFilter:l}};export{P as _,re as a,z as b,J as c,L as d,I as f,F as g,V as h,ie as i,X as l,B as m,ae as n,ne as o,R as p,Q as r,Y as s,se as t,W as u,N as v,H as y};
|
|
@@ -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{$n as u,A as d,Fn as f,Jn as p,Mn as m,Nn as h,Pn as g,Qn as _,S as v,T as y,Un as b,Vn as x,Vr as S,Wn as C,_ as w,_r as T,an as E,er as D,f as O,lr as k,m as A,n as j,nr as M,pn as N,qn as P,tr as F,u as I,va as L,wn as R,wt as z,y as B}from"./common-DlW3qRTQ.js";import{a as V,i as ee,n as H,o as U,r as W}from"./keys-Cm97UJHM.js";import{t as te}from"./useDevices-CuJhDHbf.js";import{n as ne}from"./logs-entries.transformers-BRzpY2MS.js";var re=`devices`,G=`devices-module`,ie=`DevicesModule.`,ae=function(e){return e.DEVICE_CREATED=`DevicesModule.Device.Created`,e.DEVICE_UPDATED=`DevicesModule.Device.Updated`,e.DEVICE_DELETED=`DevicesModule.Device.Deleted`,e.DEVICE_CONTROL_CREATED=`DevicesModule.DeviceControl.Created`,e.DEVICE_CONTROL_DELETED=`DevicesModule.DeviceControl.Deleted`,e.CHANNEL_CREATED=`DevicesModule.Channel.Created`,e.CHANNEL_UPDATED=`DevicesModule.Channel.Updated`,e.CHANNEL_DELETED=`DevicesModule.Channel.Deleted`,e.CHANNEL_CONTROL_CREATED=`DevicesModule.ChannelControl.Created`,e.CHANNEL_CONTROL_DELETED=`DevicesModule.ChannelControl.Deleted`,e.CHANNEL_PROPERTY_CREATED=`DevicesModule.ChannelProperty.Created`,e.CHANNEL_PROPERTY_UPDATED=`DevicesModule.ChannelProperty.Updated`,e.CHANNEL_PROPERTY_DELETED=`DevicesModule.ChannelProperty.Deleted`,e.CHANNEL_PROPERTY_SET=`DevicesModule.ChannelProperty.Set`,e.CHANNEL_PROPERTY_VALUE_SET=`DevicesModule.ChannelProperty.ValueSet`,e}({}),K=function(e){return e.NONE=`none`,e.WORKING=`working`,e.ERROR=`error`,e.OK=`ok`,e}({}),oe={DEVICES:`devices_module-devices`,DEVICES_ADD:`devices_module-devices_add`,DEVICES_EDIT:`devices_module-devices_edit`,DEVICE:`devices_module-device`,DEVICE_EDIT:`devices_module-device_edit`,DEVICE_CONTROL:`devices_module-device_control`,DEVICE_ADD_CHANNEL:`devices_module-device_add_channel`,DEVICE_EDIT_CHANNEL:`devices_module-device_edit_channel`,DEVICE_CHANNEL_ADD_PROPERTY:`devices_module-device_channel_add_property`,DEVICE_CHANNEL_EDIT_PROPERTY:`devices_module-device_channel_edit_property`,CHANNELS:`devices_module-channels`,CHANNELS_ADD:`devices_module-channels_add`,CHANNELS_EDIT:`devices_module-channels_edit`,CHANNEL:`devices_module-channel`,CHANNEL_EDIT:`devices_module-channel_edit`,CHANNEL_ADD_PROPERTY:`devices_module-channel_add_property`,CHANNEL_EDIT_PROPERTY:`devices_module-channel_edit_property`},q=class extends Error{exception;constructor(e,t=null){super(e),this.name=`DevicesException`,this.exception=t}},J=class extends q{code;constructor(e,t=null,n=null){super(e,n),this.name=`DevicesApiException`,this.code=t}},Y=class extends q{constructor(e,t=null){super(e,t),this.name=`DevicesValidationException`}},se=()=>{let e=d(),{enabled:t}=E(),n=[`channelPropertyAddForm`,`channelPropertyEditForm`],r=[`channelPropertySchema`,`channelPropertyAddFormSchema`,`channelPropertyEditFormSchema`,`channelPropertyCreateReqSchema`,`channelPropertyUpdateReqSchema`],i=o(()=>e.getPlugins().filter(e=>e.modules===void 0||e.modules.includes(`devices-module`)?(e.elements??[]).some(e=>{if(!(e.modules===void 0||e.modules.includes(`devices-module`)))return!1;let t=n.length===0||!!e.components&&n.some(t=>e.components&&t in e.components),i=r.length===0||!!e.schemas&&r.some(t=>e.schemas&&t in e.schemas);return t||i}):!1));return{plugins:i,options:o(()=>N(i.value.flatMap(e=>(e.elements??[]).filter(e=>e.modules===void 0||e.modules.includes(`devices-module`)).map(n=>({value:n.type,label:n.name?.trim()?n.name:e.name,disabled:!t(e.type)}))),[e=>e.label],[`asc`])),getByName:e=>i.value.find(t=>t.type===e),getByType:e=>i.value.find(t=>(t.elements??[]).some(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`)))),getElement:e=>{for(let t of i.value){let n=(t.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`)));if(n)return n}}}},ce=()=>{let e=d(),{enabled:t}=E(),n=[`channelAddForm`,`channelEditForm`],r=[`channelSchema`,`channelAddFormSchema`,`channelEditFormSchema`,`channelCreateReqSchema`,`channelUpdateReqSchema`],i=o(()=>e.getPlugins().filter(e=>e.modules===void 0||e.modules.includes(`devices-module`)?(e.elements??[]).some(e=>{if(!(e.modules===void 0||e.modules.includes(`devices-module`)))return!1;let t=n.length===0||!!e.components&&n.some(t=>e.components&&t in e.components),i=r.length===0||!!e.schemas&&r.some(t=>e.schemas&&t in e.schemas);return t||i}):!1));return{plugins:i,options:o(()=>N(i.value.flatMap(e=>(e.elements??[]).filter(e=>e.modules===void 0||e.modules.includes(`devices-module`)).map(n=>({value:n.type,label:n.name?.trim()?n.name:e.name,disabled:!t(e.type)}))),[e=>e.label],[`asc`])),getByName:e=>i.value.find(t=>t.type===e),getByType:e=>i.value.find(t=>(t.elements??[]).some(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`)))),getElement:e=>{for(let t of i.value){let n=(t.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`)));if(n)return n}}}},le=({id:e})=>{let t=y().getStore(W),{data:n,semaphore:r}=L(t);return{channel:o(()=>e===null?null:n.value[e]??null),isLoading:o(()=>r.value.fetching.item.includes(e)?!0:(n.value[e]??null)===null?r.value.fetching.items.includes(`all`):!1),fetchChannel:async()=>{(n.value[e]??null)?.draft||await t.get({id:e})}}},ue=(e={})=>{let{deviceId:t}=e,n=y().getStore(W),{firstLoad:r,semaphore:i}=L(n),a=t===void 0?void 0:typeof t==`string`?o(()=>t):t;return{channels:o(()=>n.findAll().filter(e=>!a?.value||e.device===a.value)),areLoading:o(()=>i.value.fetching.items.includes(a?.value??`all`)?!0:r.value.includes(a?.value??`all`)?!1:i.value.fetching.items.includes(a?.value??`all`)),loaded:o(()=>r.value.includes(a?.value??`all`)),fetchChannels:async()=>{await n.fetch({deviceId:a?.value})}}},de=C({search:P().optional(),types:g(P()),state:m([`all`,`offline`,`online`]).default(`all`),states:g(x(k)),categories:g(x(_)),enabled:m([`all`,`enabled`,`disabled`]).default(`all`),validation:m([`all`,`valid`,`invalid`]).default(`all`)}),fe=C({search:P().optional(),devices:g(P()),categories:g(x(u))}),pe=C({search:P().optional(),channels:g(P()),categories:g(x(D)),permissions:g(x(M)),dataTypes:g(x(F))}),X=R(),Z={search:void 0,devices:[],categories:[]},me={by:`name`,dir:`asc`},he=(e={})=>{let{deviceId:n}=e,r=y().getStore(W),{firstLoad:i,semaphore:a}=L(r),{filters:s,sort:c,pagination:u,reset:d}=O({key:`${G}:channels:list`,filters:{schema:fe,defaults:Z},sort:{defaults:[me]},pagination:{defaults:{page:1,size:10}},syncQuery:!0,version:1}),f=o(()=>s.value.search!==Z.search||!(0,X.isEqual)(s.value.devices,Z.devices)||!(0,X.isEqual)(s.value.categories,Z.categories)),p=l(u.value.size||10),m=l(u.value.page||1),h=l(c.value.length>0?c.value[0]?.by:void 0),g=l(c.value.length>0?c.value[0]?.dir??null:null),_=o(()=>N(r.findAll().filter(e=>!n||e.device===n).filter(e=>!e.draft&&(!s.value.search||e.id.toLowerCase().includes(s.value.search.toLowerCase())||e.name.toLowerCase().includes(s.value.search.toLowerCase())||e.description?.toLowerCase().includes(s.value.search.toLowerCase())||e.identifier?.toLowerCase().includes(s.value.search.toLowerCase()))&&(s.value.categories.length===0||s.value.categories.includes(e.category))&&(s.value.devices.length===0||s.value.devices.includes(e.device))),[e=>e[h.value]??``],[g.value===`asc`?`asc`:`desc`])),v=o(()=>{let e=(m.value-1)*p.value,t=e+p.value;return _.value.slice(e,t)}),b=async()=>{await r.fetch({deviceId:n})},x=o(()=>a.value.fetching.items.includes(n??`all`)?!0:i.value.includes(n??`all`)?!1:a.value.fetching.items.includes(n??`all`)),S=o(()=>i.value.includes(n??`all`)),C=o(()=>r.findAll().filter(e=>!n||e.device===n).filter(e=>!e.draft).length);return t(()=>u.value,e=>{m.value=e.page??1,p.value=e.size??10},{deep:!0}),t(()=>m.value,e=>{u.value.page=e}),t(()=>p.value,e=>{u.value.size=e}),t(()=>g.value,e=>{h.value===void 0||e===null?c.value=[]:c.value=[{by:h.value,dir:e}]}),t(()=>h.value,e=>{e===void 0?c.value=[]:c.value=[{by:e,dir:g.value}]}),{channels:_,channelsPaginated:v,totalRows:C,areLoading:x,loaded:S,fetchChannels:b,filters:s,filtersActive:f,paginateSize:p,paginatePage:m,sortBy:h,sortDir:g,resetFilter:d}},ge=()=>{let{t:e}=r(),t=w(),n=y().getStore(W),i=e=>n.findById(e);return{remove:async r=>{let a=i(r);if(a===null)throw new q(`Something went wrong, channel can't be loaded`);S.confirm(e(`devicesModule.texts.channels.confirmRemove`,{channel:a.name}),e(`devicesModule.headings.channels.remove`),{confirmButtonText:e(`devicesModule.buttons.yes.title`),cancelButtonText:e(`devicesModule.buttons.no.title`),type:`warning`}).then(async()=>{try{await n.remove({id:a.id}),t.success(e(`devicesModule.messages.channels.removed`,{channel:a.name}))}catch(n){if(n instanceof J&&n.code===404){let n=e(`devicesModule.messages.channels.notFound`,{channel:a.name});t.error(n)}else if(n instanceof J&&n.code===422)t.error(n.message);else{let n=e(`devicesModule.messages.channels.notRemoved`,{channel:a.name});t.error(n)}}}).catch(()=>{t.info(e(`devicesModule.messages.channels.removeCanceled`,{channel:a.name}))})}}},_e=({id:e})=>{let t=y().getStore(W);return{icon:o(()=>{switch(t.findById(e)?.category){default:return`mdi:chip`}})}},ve={air_quality:{category:`air_quality`,constraints:{oneOrMoreOf:[[`aqi`,`level`]]},properties:{aqi:{category:`aqi`,required:!1,permissions:[`ro`],data_type:`ushort`,unit:null,format:[0,500]},level:{category:`level`,required:!1,permissions:[`ro`],data_type:`enum`,unit:null,format:[`excellent`,`good`,`fair`,`inferior`,`poor`,`unknown`]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},air_particulate:{category:`air_particulate`,constraints:{oneOrMoreOf:[[`detected`,`concentration`]]},properties:{detected:{category:`detected`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},concentration:{category:`concentration`,required:!1,permissions:[`ro`],data_type:`float`,unit:`µg/m³`,format:[0,1e3]},mode:{category:`mode`,required:!1,permissions:[`ro`],data_type:`enum`,unit:null,format:[`pm1`,`pm2_5`,`pm10`]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},carbon_dioxide:{category:`carbon_dioxide`,constraints:{oneOrMoreOf:[[`detected`,`concentration`]]},properties:{detected:{category:`detected`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},concentration:{category:`concentration`,required:!1,permissions:[`ro`],data_type:`float`,unit:`ppm`,format:[0,1e5]},peak_level:{category:`peak_level`,required:!1,permissions:[`ro`],data_type:`float`,unit:`ppm`,format:[0,1e5]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},carbon_monoxide:{category:`carbon_monoxide`,constraints:{oneOrMoreOf:[[`detected`,`concentration`]]},properties:{detected:{category:`detected`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},concentration:{category:`concentration`,required:!1,permissions:[`ro`],data_type:`float`,unit:`ppm`,format:[0,100]},peak_level:{category:`peak_level`,required:!1,permissions:[`ro`],data_type:`float`,unit:`ppm`,format:[0,100]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},flow:{category:`flow`,properties:{rate:{category:`rate`,required:!0,permissions:[`ro`],data_type:`float`,unit:`m³/h`,format:[0,65533]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},humidity:{category:`humidity`,properties:{humidity:{category:`humidity`,required:!0,permissions:[`ro`],data_type:`uchar`,unit:`%`,format:[0,100]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},illuminance:{category:`illuminance`,properties:{illuminance:{category:`illuminance`,required:!0,permissions:[`ro`],data_type:`float`,unit:`lx`,format:[0,1e5]},level:{category:`level`,required:!0,permissions:[`ro`],data_type:`enum`,unit:null,format:[`bright`,`moderate`,`dusky`,`dark`]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},nitrogen_dioxide:{category:`nitrogen_dioxide`,constraints:{oneOrMoreOf:[[`detected`,`concentration`]]},properties:{detected:{category:`detected`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},concentration:{category:`concentration`,required:!1,permissions:[`ro`],data_type:`float`,unit:`µg/m³`,format:[0,1e5]},mode:{category:`mode`,required:!1,permissions:[`ro`],data_type:`enum`,unit:null,format:[`annual`,`1_hour`]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},ozone:{category:`ozone`,constraints:{oneOrMoreOf:[[`detected`,`concentration`,`level`]],oneOf:[[`concentration`,`level`]]},properties:{detected:{category:`detected`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},concentration:{category:`concentration`,required:!1,permissions:[`ro`],data_type:`float`,unit:`µg/m³`,format:[0,1e5]},level:{category:`level`,required:!1,permissions:[`ro`],data_type:`enum`,unit:null,format:[`low`,`medium`,`high`]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},pressure:{category:`pressure`,properties:{pressure:{category:`pressure`,required:!0,permissions:[`ro`],data_type:`float`,unit:`kPa`,format:[0,32767]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},sulphur_dioxide:{category:`sulphur_dioxide`,properties:{detected:{category:`detected`,required:!0,permissions:[`ro`],data_type:`bool`,unit:null,format:null},concentration:{category:`concentration`,required:!0,permissions:[`ro`],data_type:`float`,unit:`µg/m³`,format:[0,1e5]},level:{category:`level`,required:!0,permissions:[`ro`],data_type:`enum`,unit:null,format:[`low`,`medium`,`high`]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},temperature:{category:`temperature`,properties:{temperature:{category:`temperature`,required:!0,permissions:[`ro`],data_type:`float`,unit:`°C`,format:[0,100]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},volatile_organic_compounds:{category:`volatile_organic_compounds`,constraints:{oneOrMoreOf:[[`detected`,`concentration`,`level`]],oneOf:[[`concentration`,`level`]]},properties:{detected:{category:`detected`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},concentration:{category:`concentration`,required:!1,permissions:[`ro`],data_type:`float`,unit:`µg/m³`,format:[0,1e3]},level:{category:`level`,required:!1,permissions:[`ro`],data_type:`enum`,unit:null,format:[`low`,`medium`,`high`]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},alarm:{category:`alarm`,properties:{state:{category:`state`,required:!0,permissions:[`rw`],data_type:`enum`,unit:null,format:[`disarmed`,`armed_home`,`armed_away`,`armed_night`]},alarm_state:{category:`alarm_state`,required:!1,permissions:[`ro`],data_type:`enum`,unit:null,format:[`idle`,`pending`,`triggered`,`silenced`]},triggered:{category:`triggered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},siren:{category:`siren`,required:!1,permissions:[`rw`],data_type:`bool`,unit:null,format:null},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},fault_description:{category:`fault_description`,required:!1,permissions:[`ro`],data_type:`string`,unit:null,format:null},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},last_event:{category:`last_event`,required:!1,permissions:[`ro`],data_type:`string`,unit:null,format:null}}},contact:{category:`contact`,properties:{detected:{category:`detected`,required:!0,permissions:[`ro`],data_type:`bool`,unit:null,format:null},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},gas:{category:`gas`,properties:{detected:{category:`detected`,required:!0,permissions:[`ro`],data_type:`bool`,unit:null,format:null},status:{category:`status`,required:!0,permissions:[`ro`],data_type:`enum`,unit:null,format:[`normal`,`warning`,`alarm`]},concentration:{category:`concentration`,required:!1,permissions:[`ro`],data_type:`uint`,unit:`ppm`,format:[0,65535]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},leak:{category:`leak`,properties:{detected:{category:`detected`,required:!0,permissions:[`ro`],data_type:`bool`,unit:null,format:null},level:{category:`level`,required:!0,permissions:[`ro`],data_type:`enum`,unit:null,format:[`low`,`medium`,`high`]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},lock:{category:`lock`,properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},status:{category:`status`,required:!0,permissions:[`rw`],data_type:`enum`,unit:null,format:[`locked`,`unlocked`]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},motion:{category:`motion`,properties:{detected:{category:`detected`,required:!0,permissions:[`ro`],data_type:`bool`,unit:null,format:null},distance:{category:`distance`,required:!1,permissions:[`ro`],data_type:`float`,unit:`m`,format:[0,100]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},occupancy:{category:`occupancy`,properties:{detected:{category:`detected`,required:!0,permissions:[`ro`],data_type:`bool`,unit:null,format:null},distance:{category:`distance`,required:!1,permissions:[`ro`],data_type:`float`,unit:`m`,format:[0,100]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},smoke:{category:`smoke`,properties:{detected:{category:`detected`,required:!0,permissions:[`ro`],data_type:`bool`,unit:null,format:null},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},cooler:{category:`cooler`,properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},temperature:{category:`temperature`,required:!0,permissions:[`rw`],data_type:`float`,unit:`°C`,format:[0,100]},status:{category:`status`,required:!0,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},dehumidifier:{category:`dehumidifier`,properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},humidity:{category:`humidity`,required:!0,permissions:[`rw`],data_type:`uchar`,unit:`%`,format:[0,100]},mode:{category:`mode`,required:!1,permissions:[`rw`],data_type:`enum`,unit:null,format:[`auto`,`manual`,`continuous`,`laundry`,`quiet`]},status:{category:`status`,required:!1,permissions:[`ro`],data_type:`enum`,unit:null,format:[`idle`,`dehumidifying`,`defrosting`]},water_tank_full:{category:`water_tank_full`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},water_tank_level:{category:`water_tank_level`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:`%`,format:[0,100]},defrost_active:{category:`defrost_active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},timer:{category:`timer`,required:!1,permissions:[`rw`],data_types:[{id:`duration`,data_type:`ushort`,unit:`s`,format:[0,86400],step:60,description:{en:`Timer duration in seconds (0-86400)`}},{id:`preset`,data_type:`enum`,format:[`off`,`30m`,`1h`,`2h`,`4h`,`8h`,`12h`],description:{en:`Preset timer intervals`}}]},locked:{category:`locked`,required:!1,permissions:[`rw`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},door:{category:`door`,properties:{obstruction:{category:`obstruction`,required:!0,permissions:[`ro`],data_type:`bool`,unit:null,format:null},status:{category:`status`,required:!0,permissions:[`ro`],data_type:`enum`,unit:null,format:[`opened`,`closed`,`opening`,`closing`,`stopped`]},position:{category:`position`,required:!0,permissions:[`rw`],data_type:`enum`,unit:null,format:[`open`,`close`,`stop`]},type:{category:`type`,required:!0,permissions:[`ro`],data_type:`enum`,unit:null,format:[`door`,`garage`]},percentage:{category:`percentage`,required:!1,permissions:[`rw`],data_type:`uchar`,unit:null,format:[0,100]},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},fan:{category:`fan`,properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},swing:{category:`swing`,required:!1,permissions:[`rw`],data_type:`bool`,unit:null,format:null},speed:{category:`speed`,required:!1,permissions:[`rw`],data_types:[{id:`percentage`,data_type:`uchar`,unit:`%`,format:[0,100],step:1,description:{en:`Speed as percentage (0-100%)`}},{id:`level`,data_type:`enum`,format:[`off`,`low`,`medium`,`high`,`turbo`,`auto`],description:{en:`Speed as discrete levels`}}]},mode:{category:`mode`,required:!1,permissions:[`rw`],data_type:`enum`,unit:null,format:[`auto`,`manual`,`eco`,`sleep`,`natural`,`turbo`]},direction:{category:`direction`,required:!1,permissions:[`rw`],data_type:`enum`,unit:null,format:[`clockwise`,`counter_clockwise`]},natural_breeze:{category:`natural_breeze`,required:!1,permissions:[`rw`],data_type:`bool`,unit:null,format:null},timer:{category:`timer`,required:!1,permissions:[`rw`],data_types:[{id:`duration`,data_type:`ushort`,unit:`s`,format:[0,86400],step:60,description:{en:`Timer duration in seconds (0-86400)`}},{id:`preset`,data_type:`enum`,format:[`off`,`30m`,`1h`,`2h`,`4h`,`8h`,`12h`],description:{en:`Preset timer intervals`}}]},locked:{category:`locked`,required:!1,permissions:[`rw`],data_type:`bool`,unit:null,format:null}}},heater:{category:`heater`,properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},temperature:{category:`temperature`,required:!0,permissions:[`rw`],data_type:`float`,unit:`°C`,format:[0,100]},status:{category:`status`,required:!0,permissions:[`ro`],data_type:`bool`,unit:null,format:null},position:{category:`position`,required:!1,permissions:[`rw`],data_types:[{id:`percentage`,data_type:`uchar`,unit:`%`,format:[0,100],step:1,description:{en:`Position as percentage (0-100%)`}},{id:`state`,data_type:`enum`,format:[`closed`,`quarter`,`half`,`three_quarter`,`open`],description:{en:`Position as discrete states`}}]}}},humidifier:{category:`humidifier`,properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},humidity:{category:`humidity`,required:!0,permissions:[`rw`],data_type:`uchar`,unit:`%`,format:[0,100]},mode:{category:`mode`,required:!1,permissions:[`rw`],data_type:`enum`,unit:null,format:[`auto`,`manual`,`sleep`,`baby`]},status:{category:`status`,required:!1,permissions:[`ro`],data_type:`enum`,unit:null,format:[`idle`,`humidifying`]},mist_level:{category:`mist_level`,required:!1,permissions:[`rw`],data_types:[{id:`percentage`,data_type:`uchar`,unit:`%`,format:[0,100],step:1,description:{en:`Mist level as percentage (0-100%)`}},{id:`level`,data_type:`enum`,format:[`off`,`low`,`medium`,`high`],description:{en:`Mist level as discrete levels`}}]},warm_mist:{category:`warm_mist`,required:!1,permissions:[`rw`],data_type:`bool`,unit:null,format:null},water_tank_empty:{category:`water_tank_empty`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},water_tank_level:{category:`water_tank_level`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:`%`,format:[0,100]},timer:{category:`timer`,required:!1,permissions:[`rw`],data_types:[{id:`duration`,data_type:`ushort`,unit:`s`,format:[0,86400],step:60,description:{en:`Timer duration in seconds (0-86400)`}},{id:`preset`,data_type:`enum`,format:[`off`,`30m`,`1h`,`2h`,`4h`,`8h`,`12h`],description:{en:`Preset timer intervals`}}]},locked:{category:`locked`,required:!1,permissions:[`rw`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},light:{category:`light`,constraints:{mutuallyExclusiveGroups:[[[`color_red`,`color_green`,`color_blue`],[`hue`,`saturation`]]]},properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},brightness:{category:`brightness`,required:!1,permissions:[`rw`],data_types:[{id:`percentage`,data_type:`uchar`,unit:`%`,format:[0,100],step:1,description:{en:`Brightness as percentage (0-100%)`}},{id:`level`,data_type:`enum`,format:[`off`,`low`,`medium`,`high`,`full`],description:{en:`Brightness as discrete levels`}}]},color_red:{category:`color_red`,required:!1,permissions:[`rw`],data_type:`uchar`,unit:null,format:[0,255]},color_green:{category:`color_green`,required:!1,permissions:[`rw`],data_type:`uchar`,unit:null,format:[0,255]},color_blue:{category:`color_blue`,required:!1,permissions:[`rw`],data_type:`uchar`,unit:null,format:[0,255]},color_white:{category:`color_white`,required:!1,permissions:[`rw`],data_type:`uchar`,unit:null,format:[0,255]},color_temperature:{category:`color_temperature`,required:!1,permissions:[`rw`],data_type:`ushort`,unit:`K`,format:[2e3,1e4]},hue:{category:`hue`,required:!1,permissions:[`rw`],data_type:`ushort`,unit:`deg`,format:[0,360]},saturation:{category:`saturation`,required:!1,permissions:[`rw`],data_type:`uchar`,unit:`%`,format:[0,100]}}},outlet:{category:`outlet`,properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},in_use:{category:`in_use`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},robot_vacuum:{category:`robot_vacuum`,properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},status:{category:`status`,required:!0,permissions:[`ro`],data_type:`enum`,unit:null,format:[`idle`,`cleaning`,`vacuuming`,`mopping`,`docking`,`charging`]},mode:{category:`mode`,required:!1,permissions:[`rw`],data_type:`enum`,unit:null,format:[`auto`,`spot`,`manual`]},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},switcher:{category:`switcher`,properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},child_lock:{category:`child_lock`,required:!1,permissions:[`rw`],data_type:`bool`,unit:null,format:null},timer:{category:`timer`,required:!1,permissions:[`rw`],data_types:[{id:`duration`,data_type:`ushort`,unit:`s`,format:[0,86400],step:60,description:{en:`Timer duration in seconds (0-86400)`}},{id:`preset`,data_type:`enum`,format:[`off`,`30m`,`1h`,`2h`,`4h`,`8h`,`12h`],description:{en:`Preset timer intervals`}}]}}},thermostat:{category:`thermostat`,properties:{locked:{category:`locked`,required:!1,permissions:[`rw`],data_type:`bool`,unit:null,format:null}}},valve:{category:`valve`,properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},type:{category:`type`,required:!0,permissions:[`rw`],data_type:`enum`,unit:null,format:[`generic`,`irrigation`,`shower_head`,`water_faucet`]},duration:{category:`duration`,required:!1,permissions:[`rw`],data_type:`ushort`,unit:`s`,format:[0,3600]},remaining:{category:`remaining`,required:!1,permissions:[`ro`],data_type:`ushort`,unit:`s`,format:[0,3600]},mode:{category:`mode`,required:!1,permissions:[`ro`],data_type:`enum`,unit:null,format:[`manual`,`scheduled`]},position:{category:`position`,required:!1,permissions:[`rw`],data_types:[{id:`percentage`,data_type:`uchar`,unit:`%`,format:[0,100],step:1,description:{en:`Position as percentage (0-100%)`}},{id:`state`,data_type:`enum`,format:[`closed`,`quarter`,`half`,`three_quarter`,`open`],description:{en:`Position as discrete states`}}]},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},window_covering:{category:`window_covering`,properties:{status:{category:`status`,required:!0,permissions:[`ro`],data_type:`enum`,unit:null,format:[`opened`,`closed`,`opening`,`closing`,`stopped`]},position:{category:`position`,required:!0,permissions:[`rw`],data_types:[{id:`percentage`,data_type:`uchar`,unit:`%`,format:[0,100],step:1,description:{en:`Position as percentage (0-100%)`}},{id:`state`,data_type:`enum`,format:[`closed`,`quarter`,`half`,`three_quarter`,`open`],description:{en:`Position as discrete states`}}]},type:{category:`type`,required:!0,permissions:[`ro`],data_type:`enum`,unit:null,format:[`curtain`,`roller`,`blind`,`venetian_blind`,`vertical_blind`,`shutter`,`outdoor_blind`,`awning`]},command:{category:`command`,required:!0,permissions:[`wo`],data_type:`enum`,unit:null,format:[`open`,`close`,`stop`]},obstruction:{category:`obstruction`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},tilt:{category:`tilt`,required:!1,permissions:[`rw`],data_type:`float`,unit:`°`,format:[-90,90]},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},battery:{category:`battery`,properties:{percentage:{category:`percentage`,required:!0,permissions:[`ro`],data_types:[{id:`percentage`,data_type:`uchar`,unit:`%`,format:[0,100],step:1,description:{en:`Battery as percentage (0-100%)`}},{id:`level`,data_type:`enum`,format:[`critical`,`low`,`medium`,`high`,`full`],description:{en:`Battery as discrete levels`}}]},status:{category:`status`,required:!0,permissions:[`ro`],data_type:`enum`,unit:null,format:[`ok`,`low`,`charging`]},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},electrical_energy:{category:`electrical_energy`,properties:{consumption:{category:`consumption`,required:!0,permissions:[`ro`],data_type:`float`,unit:`kWh`,format:[0,null],measurement_kind:`cumulative`,reset_behavior:`unknown`},average_power:{category:`average_power`,required:!1,permissions:[`ro`],data_type:`float`,unit:`W`,format:[0,1e5],measurement_kind:`interval_average`},grid_import:{category:`grid_import`,required:!1,permissions:[`ro`],data_type:`float`,unit:`kWh`,format:[0,null],measurement_kind:`cumulative`,reset_behavior:`unknown`},grid_export:{category:`grid_export`,required:!1,permissions:[`ro`],data_type:`float`,unit:`kWh`,format:[0,null],measurement_kind:`cumulative`,reset_behavior:`unknown`},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},electrical_generation:{category:`electrical_generation`,properties:{production:{category:`production`,required:!0,permissions:[`ro`],data_type:`float`,unit:`kWh`,format:[0,null],measurement_kind:`cumulative`,reset_behavior:`unknown`},power:{category:`power`,required:!1,permissions:[`ro`],data_type:`float`,unit:`W`,format:[0,1e5],measurement_kind:`instantaneous`},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},electrical_power:{category:`electrical_power`,properties:{power:{category:`power`,required:!0,permissions:[`ro`],data_type:`float`,unit:`W`,format:[0,1e4],measurement_kind:`instantaneous`},voltage:{category:`voltage`,required:!1,permissions:[`ro`],data_type:`float`,unit:`V`,format:[0,500],measurement_kind:`instantaneous`},current:{category:`current`,required:!1,permissions:[`ro`],data_type:`float`,unit:`A`,format:[0,100],measurement_kind:`instantaneous`},frequency:{category:`frequency`,required:!1,permissions:[`ro`],data_type:`float`,unit:`Hz`,format:[40,70],measurement_kind:`instantaneous`},over_current:{category:`over_current`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},over_voltage:{category:`over_voltage`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},over_power:{category:`over_power`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},camera:{category:`camera`,properties:{status:{category:`status`,required:!0,permissions:[`ro`],data_type:`enum`,unit:null,format:[`available`,`in_use`,`unavailable`,`offline`,`initializing`,`error`]},source:{category:`source`,required:!0,permissions:[`ro`],data_type:`string`,unit:null,format:null},zoom:{category:`zoom`,required:!1,permissions:[`rw`],data_type:`float`,unit:null,format:[1,10]},pan:{category:`pan`,required:!1,permissions:[`rw`],data_type:`float`,unit:`°`,format:[-180,180]},tilt:{category:`tilt`,required:!1,permissions:[`rw`],data_type:`float`,unit:`°`,format:[-90,90]},infrared:{category:`infrared`,required:!1,permissions:[`rw`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},doorbell:{category:`doorbell`,properties:{event:{category:`event`,required:!0,permissions:[`ro`],data_type:`enum`,unit:null,format:[`single_press`,`double_press`,`long_press`]},brightness:{category:`brightness`,required:!1,permissions:[`rw`],data_types:[{id:`percentage`,data_type:`uchar`,unit:`%`,format:[0,100],step:1,description:{en:`Brightness as percentage (0-100%)`}},{id:`level`,data_type:`enum`,format:[`off`,`low`,`medium`,`high`,`full`],description:{en:`Brightness as discrete levels`}}]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},media_input:{category:`media_input`,properties:{source:{category:`source`,required:!0,permissions:[`rw`],data_types:[{id:`standard`,data_type:`enum`,unit:null,format:`hdmi1.hdmi2.hdmi3.hdmi4.hdmi5.hdmi6.arc.earc.tv.cable.satellite.antenna.av1.av2.component.vga.dvi.usb.bluetooth.wifi.airplay.cast.dlna.miracast.app_netflix.app_youtube.app_spotify.app_prime_video.app_disney_plus.app_hbo_max.app_apple_tv.app_plex.app_kodi.other`.split(`.`),step:null,description:{en:`Standardized input/source identifier (recommended for UI).`}},{id:`custom`,data_type:`string`,unit:null,format:null,step:null,description:{en:`Integration-specific input/source value (fallback).`}}]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},source_label:{category:`source_label`,required:!1,permissions:[`ro`],data_type:`string`,unit:null,format:null}}},media_playback:{category:`media_playback`,properties:{status:{category:`status`,required:!0,permissions:[`rw`],data_type:`enum`,unit:null,format:[`playing`,`paused`,`stopped`]},track:{category:`track`,required:!1,permissions:[`ro`],data_type:`string`,unit:null,format:null},duration:{category:`duration`,required:!1,permissions:[`ro`],data_type:`uint`,unit:`s`,format:[0,86400]},position:{category:`position`,required:!1,permissions:[`rw`],data_type:`uint`,unit:`s`,format:[0,86400]},shuffle:{category:`shuffle`,required:!1,permissions:[`rw`],data_type:`bool`,unit:null,format:null},repeat:{category:`repeat`,required:!1,permissions:[`rw`],data_type:`enum`,unit:null,format:[`off`,`one`,`all`]},command:{category:`command`,required:!1,permissions:[`wo`],data_type:`enum`,unit:null,format:[`play`,`pause`,`stop`,`next`,`previous`,`rewind`,`fast_forward`]},artist:{category:`artist`,required:!1,permissions:[`ro`],data_type:`string`,unit:null,format:null},album:{category:`album`,required:!1,permissions:[`ro`],data_type:`string`,unit:null,format:null},artwork_url:{category:`artwork_url`,required:!1,permissions:[`ro`],data_type:`string`,unit:null,format:null},media_type:{category:`media_type`,required:!1,permissions:[`ro`],data_type:`enum`,unit:null,format:[`music`,`tvshow`,`movie`,`video`,`playlist`,`podcast`,`audiobook`,`radio`,`unknown`]}}},microphone:{category:`microphone`,properties:{active:{category:`active`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},volume:{category:`volume`,required:!1,permissions:[`ro`],data_types:[{id:`percentage`,data_type:`uchar`,unit:`%`,format:[0,100],step:1,description:{en:`Volume as percentage (0-100%)`}},{id:`level`,data_type:`enum`,format:[`mute`,`low`,`medium`,`high`,`max`],description:{en:`Volume as discrete levels`}}]}}},speaker:{category:`speaker`,properties:{active:{category:`active`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},volume:{category:`volume`,required:!1,permissions:[`rw`],data_types:[{id:`percentage`,data_type:`uchar`,unit:`%`,format:[0,100],step:1,description:{en:`Volume as percentage (0-100%)`}},{id:`level`,data_type:`enum`,format:[`mute`,`low`,`medium`,`high`,`max`],description:{en:`Volume as discrete levels`}}]},mode:{category:`mode`,required:!1,permissions:[`rw`],data_type:`enum`,unit:null,format:[`stereo`,`mono`,`surround`]},mute:{category:`mute`,required:!1,permissions:[`rw`],data_type:`bool`,unit:null,format:null},balance:{category:`balance`,required:!1,permissions:[`rw`],data_type:`float`,unit:null,format:[-1,1]},bass:{category:`bass`,required:!1,permissions:[`rw`],data_type:`float`,unit:null,format:[-10,10]},treble:{category:`treble`,required:!1,permissions:[`rw`],data_type:`float`,unit:null,format:[-10,10]}}},television:{category:`television`,properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},brightness:{category:`brightness`,required:!1,permissions:[`rw`],data_types:[{id:`percentage`,data_type:`uchar`,unit:`%`,format:[0,100],step:1,description:{en:`Brightness as percentage (0-100%)`}},{id:`level`,data_type:`enum`,format:[`off`,`low`,`medium`,`high`,`full`],description:{en:`Brightness as discrete levels`}}]},remote_key:{category:`remote_key`,required:!1,permissions:[`wo`],data_type:`enum`,unit:null,format:[`rewind`,`fast_forward`,`next`,`previous`,`arrow_up`,`arrow_down`,`arrow_left`,`arrow_right`,`select`,`back`,`exit`,`info`,`play`,`pause`]}}},projector:{category:`projector`,properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},brightness:{category:`brightness`,required:!1,permissions:[`rw`],data_types:[{id:`percentage`,data_type:`uchar`,unit:`%`,format:[0,100],step:1,description:{en:`Brightness as percentage (0-100%)`}},{id:`level`,data_type:`enum`,format:[`off`,`low`,`medium`,`high`,`full`],description:{en:`Brightness as discrete levels`}}]},remote_key:{category:`remote_key`,required:!1,permissions:[`wo`],data_type:`enum`,unit:null,format:[`rewind`,`fast_forward`,`next`,`previous`,`arrow_up`,`arrow_down`,`arrow_left`,`arrow_right`,`select`,`back`,`exit`,`info`,`play`,`pause`]}}},device_information:{category:`device_information`,properties:{manufacturer:{category:`manufacturer`,required:!0,permissions:[`ro`],data_type:`string`,unit:null,format:null},model:{category:`model`,required:!0,permissions:[`ro`],data_type:`string`,unit:null,format:null},serial_number:{category:`serial_number`,required:!0,permissions:[`ro`],data_type:`string`,unit:null,format:null},firmware_revision:{category:`firmware_revision`,required:!1,permissions:[`ro`],data_type:`string`,unit:null,format:null},hardware_revision:{category:`hardware_revision`,required:!1,permissions:[`ro`],data_type:`string`,unit:null,format:null},link_quality:{category:`link_quality`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:`%`,format:[0,100]},connection_type:{category:`connection_type`,required:!1,permissions:[`ro`],data_type:`enum`,unit:null,format:[`wired`,`wifi`,`zigbee`,`bluetooth`]},status:{category:`status`,required:!1,permissions:[`ro`],data_type:`enum`,unit:null,format:[`connected`,`disconnected`,`init`,`ready`,`running`,`sleeping`,`stopped`,`lost`,`alert`,`unknown`]},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},filter:{category:`filter`,properties:{life_remaining:{category:`life_remaining`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:`%`,format:[0,100]},status:{category:`status`,required:!1,permissions:[`ro`],data_type:`enum`,unit:null,format:[`good`,`replace_soon`,`replace_now`]},change_needed:{category:`change_needed`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},reset:{category:`reset`,required:!1,permissions:[`wo`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},button:{category:`button`,properties:{event:{category:`event`,required:!0,permissions:[`ev`],data_type:`enum`,unit:null,format:[`press`,`long_press`,`double_press`]},detected:{category:`detected`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},indicator:{category:`indicator`,properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},brightness:{category:`brightness`,required:!1,permissions:[`rw`],data_type:`uchar`,unit:null,format:[0,255]},color:{category:`color_red`,required:!1,permissions:[`rw`],data_type:`enum`,unit:null,format:[`red`,`green`,`blue`,`yellow`,`white`,`off`]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},buzzer:{category:`buzzer`,properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},frequency:{category:`frequency`,required:!1,permissions:[`rw`],data_type:`uint`,unit:`Hz`,format:[100,1e4]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},accelerometer:{category:`accelerometer`,properties:{acceleration_x:{category:`acceleration_x`,required:!0,permissions:[`ro`],data_type:`float`,unit:`g`,format:[-16,16],step:.001},acceleration_y:{category:`acceleration_y`,required:!0,permissions:[`ro`],data_type:`float`,unit:`g`,format:[-16,16],step:.001},acceleration_z:{category:`acceleration_z`,required:!0,permissions:[`ro`],data_type:`float`,unit:`g`,format:[-16,16],step:.001},orientation:{category:`orientation`,required:!1,permissions:[`ro`],data_type:`enum`,unit:null,format:[`landscape`,`portrait`,`landscape_inverted`,`portrait_inverted`,`face_up`,`face_down`]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},generic:{category:`generic`,properties:{generic:{category:`generic`,required:!1}}}},ye={generic:{category:`generic`,channels:{generic:{category:`generic`,required:!1,multiple:!0},device_information:{category:`device_information`,required:!0,multiple:!1}}},air_conditioner:{category:`air_conditioner`,channels:{cooler:{category:`cooler`,required:!0,multiple:!1},fan:{category:`fan`,required:!0,multiple:!1},temperature:{category:`temperature`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1},heater:{category:`heater`,required:!1,multiple:!1},humidity:{category:`humidity`,required:!1,multiple:!1},contact:{category:`contact`,required:!1,multiple:!1},leak:{category:`leak`,required:!1,multiple:!1},filter:{category:`filter`,required:!1,multiple:!1}}},air_dehumidifier:{category:`air_dehumidifier`,channels:{dehumidifier:{category:`dehumidifier`,required:!0,multiple:!1},humidity:{category:`humidity`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},fan:{category:`fan`,required:!1,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1},leak:{category:`leak`,required:!1,multiple:!1},temperature:{category:`temperature`,required:!1,multiple:!1}}},air_humidifier:{category:`air_humidifier`,channels:{humidifier:{category:`humidifier`,required:!0,multiple:!1},humidity:{category:`humidity`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},fan:{category:`fan`,required:!1,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1},leak:{category:`leak`,required:!1,multiple:!1},temperature:{category:`temperature`,required:!1,multiple:!1}}},air_purifier:{category:`air_purifier`,channels:{fan:{category:`fan`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},air_quality:{category:`air_quality`,required:!1,multiple:!1},filter:{category:`filter`,required:!1,multiple:!1},air_particulate:{category:`air_particulate`,required:!1,multiple:!1},carbon_dioxide:{category:`carbon_dioxide`,required:!1,multiple:!1},carbon_monoxide:{category:`carbon_monoxide`,required:!1,multiple:!1},humidity:{category:`humidity`,required:!1,multiple:!1},leak:{category:`leak`,required:!1,multiple:!1},nitrogen_dioxide:{category:`nitrogen_dioxide`,required:!1,multiple:!1},ozone:{category:`ozone`,required:!1,multiple:!1},pressure:{category:`pressure`,required:!1,multiple:!1},sulphur_dioxide:{category:`sulphur_dioxide`,required:!1,multiple:!1},temperature:{category:`temperature`,required:!1,multiple:!1},volatile_organic_compounds:{category:`volatile_organic_compounds`,required:!1,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1}}},thermostat:{category:`thermostat`,channels:{temperature:{category:`temperature`,required:!0,multiple:!1},thermostat:{category:`thermostat`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},contact:{category:`contact`,required:!1,multiple:!1},cooler:{category:`cooler`,required:!1,multiple:!1},heater:{category:`heater`,required:!1,multiple:!1},humidity:{category:`humidity`,required:!1,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1}}},alarm:{category:`alarm`,channels:{alarm:{category:`alarm`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},battery:{category:`battery`,required:!1,multiple:!1}}},camera:{category:`camera`,channels:{camera:{category:`camera`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},battery:{category:`battery`,required:!1,multiple:!1},contact:{category:`contact`,required:!1,multiple:!1},humidity:{category:`humidity`,required:!1,multiple:!1},light:{category:`light`,required:!1,multiple:!1},microphone:{category:`microphone`,required:!1,multiple:!1},motion:{category:`motion`,required:!1,multiple:!1},speaker:{category:`speaker`,required:!1,multiple:!1},temperature:{category:`temperature`,required:!1,multiple:!1}}},doorbell:{category:`doorbell`,channels:{doorbell:{category:`doorbell`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},battery:{category:`battery`,required:!1,multiple:!1},camera:{category:`camera`,required:!1,multiple:!1},contact:{category:`contact`,required:!1,multiple:!1},light:{category:`light`,required:!1,multiple:!1},lock:{category:`lock`,required:!1,multiple:!1},microphone:{category:`microphone`,required:!1,multiple:!1},motion:{category:`motion`,required:!1,multiple:!1},speaker:{category:`speaker`,required:!1,multiple:!1}}},door:{category:`door`,channels:{door:{category:`door`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},battery:{category:`battery`,required:!1,multiple:!1},contact:{category:`contact`,required:!1,multiple:!1},lock:{category:`lock`,required:!1,multiple:!1},motion:{category:`motion`,required:!1,multiple:!1}}},lock:{category:`lock`,channels:{lock:{category:`lock`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},battery:{category:`battery`,required:!1,multiple:!1},contact:{category:`contact`,required:!1,multiple:!1},motion:{category:`motion`,required:!1,multiple:!1}}},fan:{category:`fan`,channels:{fan:{category:`fan`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1}}},heating_unit:{category:`heating_unit`,channels:{heater:{category:`heater`,required:!0,multiple:!1},temperature:{category:`temperature`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1},humidity:{category:`humidity`,required:!1,multiple:!1},contact:{category:`contact`,required:!1,multiple:!1}}},water_heater:{category:`water_heater`,channels:{heater:{category:`heater`,required:!0,multiple:!1},temperature:{category:`temperature`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1},leak:{category:`leak`,required:!1,multiple:!1}}},lighting:{category:`lighting`,channels:{light:{category:`light`,required:!0,multiple:!0},device_information:{category:`device_information`,required:!0,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1},illuminance:{category:`illuminance`,required:!1,multiple:!1}}},outlet:{category:`outlet`,channels:{outlet:{category:`outlet`,required:!0,multiple:!0},device_information:{category:`device_information`,required:!0,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1}}},pump:{category:`pump`,channels:{flow:{category:`flow`,required:!1,multiple:!1},switcher:{category:`switcher`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1},leak:{category:`leak`,required:!1,multiple:!1},pressure:{category:`pressure`,required:!1,multiple:!1}}},sprinkler:{category:`sprinkler`,channels:{valve:{category:`valve`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1},flow:{category:`flow`,required:!1,multiple:!1},humidity:{category:`humidity`,required:!1,multiple:!1},leak:{category:`leak`,required:!1,multiple:!1},pressure:{category:`pressure`,required:!1,multiple:!1}}},switcher:{category:`switcher`,constraints:{oneOrMoreOf:[[`outlet`,`switcher`]],mutuallyExclusiveGroups:[[[`outlet`],[`switcher`]]]},channels:{outlet:{category:`outlet`,required:!1,multiple:!0},switcher:{category:`switcher`,required:!1,multiple:!0},device_information:{category:`device_information`,required:!0,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1}}},valve:{category:`valve`,channels:{valve:{category:`valve`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},battery:{category:`battery`,required:!1,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1},flow:{category:`flow`,required:!1,multiple:!1},leak:{category:`leak`,required:!1,multiple:!1},pressure:{category:`pressure`,required:!1,multiple:!1}}},window_covering:{category:`window_covering`,channels:{window_covering:{category:`window_covering`,required:!0,multiple:!0},device_information:{category:`device_information`,required:!0,multiple:!1},battery:{category:`battery`,required:!1,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1}}},media:{category:`media`,channels:{switcher:{category:`switcher`,required:!1,multiple:!1},media_input:{category:`media_input`,required:!1,multiple:!1},media_playback:{category:`media_playback`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},microphone:{category:`microphone`,required:!1,multiple:!1},speaker:{category:`speaker`,required:!1,multiple:!1}}},speaker:{category:`speaker`,channels:{switcher:{category:`switcher`,required:!1,multiple:!1},speaker:{category:`speaker`,required:!0,multiple:!0},device_information:{category:`device_information`,required:!0,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1},media_input:{category:`media_input`,required:!1,multiple:!1},media_playback:{category:`media_playback`,required:!1,multiple:!1}}},television:{category:`television`,channels:{speaker:{category:`speaker`,required:!0,multiple:!1},television:{category:`television`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},media_playback:{category:`media_playback`,required:!1,multiple:!1},media_input:{category:`media_input`,required:!1,multiple:!1}}},projector:{category:`projector`,channels:{projector:{category:`projector`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},speaker:{category:`speaker`,required:!1,multiple:!1},media_playback:{category:`media_playback`,required:!1,multiple:!1},media_input:{category:`media_input`,required:!1,multiple:!1}}},av_receiver:{category:`av_receiver`,channels:{switcher:{category:`switcher`,required:!1,multiple:!1},speaker:{category:`speaker`,required:!0,multiple:!0},media_input:{category:`media_input`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},media_playback:{category:`media_playback`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1}}},set_top_box:{category:`set_top_box`,channels:{switcher:{category:`switcher`,required:!1,multiple:!1},media_playback:{category:`media_playback`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},media_input:{category:`media_input`,required:!1,multiple:!1},speaker:{category:`speaker`,required:!1,multiple:!1}}},game_console:{category:`game_console`,channels:{switcher:{category:`switcher`,required:!1,multiple:!1},media_playback:{category:`media_playback`,required:!1,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1}}},streaming_service:{category:`streaming_service`,channels:{media_playback:{category:`media_playback`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1}}},robot_vacuum:{category:`robot_vacuum`,channels:{battery:{category:`battery`,required:!0,multiple:!1},robot_vacuum:{category:`robot_vacuum`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1},leak:{category:`leak`,required:!1,multiple:!1},filter:{category:`filter`,required:!1,multiple:!1}}},sensor:{category:`sensor`,channels:{device_information:{category:`device_information`,required:!0,multiple:!1},air_particulate:{category:`air_particulate`,required:!1,multiple:!1},battery:{category:`battery`,required:!1,multiple:!1},carbon_dioxide:{category:`carbon_dioxide`,required:!1,multiple:!1},carbon_monoxide:{category:`carbon_monoxide`,required:!1,multiple:!1},gas:{category:`gas`,required:!1,multiple:!1},contact:{category:`contact`,required:!1,multiple:!1},humidity:{category:`humidity`,required:!1,multiple:!1},illuminance:{category:`illuminance`,required:!1,multiple:!1},leak:{category:`leak`,required:!1,multiple:!1},motion:{category:`motion`,required:!1,multiple:!1},nitrogen_dioxide:{category:`nitrogen_dioxide`,required:!1,multiple:!1},occupancy:{category:`occupancy`,required:!1,multiple:!1},ozone:{category:`ozone`,required:!1,multiple:!1},pressure:{category:`pressure`,required:!1,multiple:!1},smoke:{category:`smoke`,required:!1,multiple:!1},sulphur_dioxide:{category:`sulphur_dioxide`,required:!1,multiple:!1},temperature:{category:`temperature`,required:!1,multiple:!1},volatile_organic_compounds:{category:`volatile_organic_compounds`,required:!1,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1}}},terminal:{category:`terminal`,channels:{device_information:{category:`device_information`,required:!0,multiple:!1},button:{category:`button`,required:!1,multiple:!0},indicator:{category:`indicator`,required:!1,multiple:!0},buzzer:{category:`buzzer`,required:!1,multiple:!1},illuminance:{category:`illuminance`,required:!1,multiple:!1},accelerometer:{category:`accelerometer`,required:!1,multiple:!1},contact:{category:`contact`,required:!1,multiple:!0},switcher:{category:`switcher`,required:!1,multiple:!0},temperature:{category:`temperature`,required:!1,multiple:!1}}}},be={[_.generic]:[],[_.air_conditioner]:[u.cooler,u.heater,u.fan,u.temperature,u.humidity,u.electrical_energy,u.electrical_power,u.leak,u.device_information],[_.air_dehumidifier]:[u.cooler,u.fan,u.temperature,u.humidity,u.electrical_energy,u.electrical_power,u.leak,u.device_information],[_.air_humidifier]:[u.humidity,u.switcher,u.temperature,u.fan,u.electrical_energy,u.electrical_power,u.leak,u.device_information],[_.air_purifier]:[u.fan,u.air_particulate,u.carbon_dioxide,u.carbon_monoxide,u.humidity,u.leak,u.nitrogen_dioxide,u.ozone,u.pressure,u.sulphur_dioxide,u.temperature,u.volatile_organic_compounds,u.electrical_energy,u.electrical_power,u.device_information],[_.alarm]:[u.alarm,u.device_information],[_.camera]:[u.camera,u.motion,u.microphone,u.speaker,u.contact,u.light,u.temperature,u.humidity,u.battery,u.device_information],[_.door]:[u.door,u.lock,u.contact,u.motion,u.battery,u.device_information],[_.doorbell]:[u.doorbell,u.camera,u.lock,u.motion,u.microphone,u.speaker,u.contact,u.light,u.battery,u.device_information],[_.fan]:[u.fan,u.electrical_energy,u.electrical_power,u.device_information],[_.heating_unit]:[u.heater,u.temperature,u.humidity,u.electrical_energy,u.electrical_power,u.device_information],[_.lighting]:[u.light,u.illuminance,u.electrical_energy,u.electrical_power,u.device_information],[_.lock]:[u.lock,u.contact,u.motion,u.battery,u.device_information],[_.media]:[u.media_input,u.media_playback,u.microphone,u.speaker,u.device_information],[_.av_receiver]:[u.media_input,u.media_playback,u.speaker,u.device_information],[_.game_console]:[u.media_playback,u.media_input,u.device_information],[_.projector]:[u.projector,u.speaker,u.media_playback,u.media_input,u.device_information],[_.set_top_box]:[u.media_input,u.media_playback,u.device_information],[_.streaming_service]:[u.media_playback,u.device_information],[_.outlet]:[u.outlet,u.electrical_energy,u.electrical_power,u.device_information],[_.pump]:[u.flow,u.switcher,u.leak,u.pressure,u.electrical_energy,u.electrical_power,u.device_information],[_.robot_vacuum]:[u.robot_vacuum,u.electrical_energy,u.electrical_power,u.leak,u.battery,u.device_information],[_.sensor]:[u.air_particulate,u.battery,u.carbon_dioxide,u.carbon_monoxide,u.contact,u.humidity,u.illuminance,u.leak,u.motion,u.nitrogen_dioxide,u.occupancy,u.ozone,u.pressure,u.smoke,u.sulphur_dioxide,u.temperature,u.volatile_organic_compounds,u.device_information],[_.speaker]:[u.speaker,u.media_input,u.media_playback,u.electrical_energy,u.electrical_power,u.device_information],[_.sprinkler]:[u.valve,u.flow,u.pressure,u.leak,u.humidity,u.electrical_energy,u.electrical_power,u.device_information],[_.switcher]:[u.switcher,u.electrical_energy,u.electrical_power,u.device_information],[_.television]:[u.television,u.speaker,u.media_playback,u.media_input,u.device_information],[_.terminal]:[u.button,u.indicator,u.buzzer,u.illuminance,u.accelerometer,u.temperature,u.contact,u.switcher,u.device_information],[_.thermostat]:[u.thermostat,u.cooler,u.heater,u.temperature,u.humidity,u.contact,u.electrical_energy,u.electrical_power,u.device_information],[_.valve]:[u.valve,u.pressure,u.flow,u.leak,u.battery,u.electrical_energy,u.electrical_power,u.device_information],[_.water_heater]:[u.heater,u.temperature,u.leak,u.electrical_energy,u.electrical_power,u.device_information],[_.window_covering]:[u.window_covering,u.battery,u.electrical_energy,u.electrical_power,u.device_information]},xe=Object.fromEntries(Object.entries(ye).map(([e,t])=>{let n=Object.values(t.channels).map(e=>e.category),r=be[e];return[e,r?[...n].sort((e,t)=>{let n=r.indexOf(e),i=r.indexOf(t);return n===-1&&i===-1?0:n===-1?1:i===-1?-1:n-i}):n]})),Se=Object.fromEntries(Object.entries(ye).map(([e,t])=>[e,{required:Object.values(t.channels).filter(e=>e.required).map(e=>e.category),optional:Object.values(t.channels).filter(e=>!e.required).map(e=>e.category),multiple:Object.values(t.channels).filter(e=>e.multiple).map(e=>e.category)}])),Ce=Object.fromEntries(Object.entries(ve).map(([e,t])=>[e,{required:Object.values(t.properties).filter(e=>e.required).map(e=>e.category),optional:Object.values(t.properties).filter(e=>!e.required).map(e=>e.category)}])),we=(e,t)=>{let n=ve[e];if(!n)return;let r=Object.values(n.properties).find(e=>e.category===t);if(!r)return;let i=r.data_types?.[0];if(i)return{category:r.category,required:r.required,description:i.description??r.description??{en:``},permissions:r.permissions,data_type:i.data_type,unit:i.unit??null,format:i.format??null,invalid:r.invalid,step:i.step??null};if(r.data_type)return{category:r.category,required:r.required,description:r.description??{en:``},permissions:r.permissions,data_type:r.data_type,unit:r.unit??null,format:r.format??null,invalid:r.invalid,step:r.step??null}},Te=({id:e})=>{let t=y(),n=t.getStore(W),r=t.getStore(H),i=e=>n.findById(e),a=e=>Ce[e.category]??null;return{canAddAnotherProperty:o(()=>{let t=i(e);if(t===null)return!0;let{required:n,optional:o}=a(t)??{required:[],optional:[]},s=[...n,...o],c=r.findForChannel(t.id).map(e=>e.category);return s.filter(e=>!c.includes(e)).length>0}),missingRequiredProperties:o(()=>{let t=i(e);if(t===null)throw new q(`Something went wrong, channel can't be loaded`);let{required:n}=a(t)??{required:[]},o=r.findForChannel(t.id).map(e=>e.category);return n.filter(e=>!o.includes(e))})}},Ee=C({id:P().uuid().optional(),type:P().trim().nonempty(),device:P().uuid().optional(),category:x(u).default(u.generic),identifier:P().trim().nonempty().nullable().optional(),name:P().trim().nonempty(),description:P().trim().transform(e=>e===``?null:e).nullable().optional()}),De=C({id:P().uuid(),type:P().trim().nonempty(),device:P().uuid(),category:x(u).default(u.generic),identifier:P().trim().nonempty().nullable().optional(),name:P().trim().nonempty().optional(),description:P().trim().transform(e=>e===``?null:e).nullable().optional()}),Oe=({type:e})=>{let{getByType:t}=ce(),n=o(()=>t(e));return{plugin:n,element:o(()=>(n.value?.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`))))}},ke=({id:e,type:a,deviceId:s})=>{let c=y(),{element:d}=Oe({type:a}),f=c.getStore(W),{devices:p,fetchDevices:m,areLoading:h}=te(),{t:g}=r(),_=w(),b=v(),x=l(K.NONE),S,C=o(()=>k.device?p.value.find(e=>e.id===k.device)??null:null),T=o(()=>C.value?f.findForDevice(C.value.id).map(e=>e.category):[]),E=o(()=>C.value?Se[C.value.category]??null:null),D=o(()=>E.value===null?[]:Object.values(u).filter(e=>E.value?.required.includes(e)||E.value?.optional.includes(e)).filter(e=>!T.value.includes(e)||E.value?.multiple?.includes(e)).map(e=>({value:e,label:g(`devicesModule.categories.channels.${e}`)}))),O=o(()=>p.value.filter(e=>e.type===a).map(e=>({value:e.id,label:e.name}))),k=n({...j(d.value?.schemas?.channelAddFormSchema||Ee),id:e,type:a,device:s,category:u.generic,name:``,description:``}),M=A(i(k)),N=l(void 0),P=l(!1),F=async()=>{if(N.value.clearValidate(),!await N.value.validate())throw new Y(`Form not valid`);let t=s??k.device;if(!t)throw new Y(`Missing device identifier`);if(!k.category)throw new Y(`Missing data type definition`);let n=(d.value?.schemas?.channelAddFormSchema||Ee).safeParse(k);if(!n.success)throw b.error(`Schema validation failed with:`,n.error),new Y(`Failed to validate create channel model.`);x.value=K.WORKING;let r=g(`devicesModule.messages.channels.notCreated`,{device:k.name});try{await f.add({id:e,deviceId:t,draft:!1,data:{...n.data,type:a}})}catch(e){throw x.value=K.ERROR,S=window.setTimeout(I,2e3),e instanceof J&&e.code===422?_.error(e.message):_.error(r),e}return x.value=K.OK,S=window.setTimeout(I,2e3),_.success(g(`devicesModule.messages.channels.created`,{device:k.name})),`added`},I=()=>{window.clearTimeout(S),x.value=K.NONE};return m().catch(()=>{}),t(k,()=>{P.value=!(0,X.isEqual)(i(k),M)}),t(()=>D.value,e=>{e.length&&e[0]&&(k.category=e[0].value,M.category=e[0].value)},{immediate:!0}),{categoriesOptions:D,devicesOptions:O,model:k,formEl:N,formChanged:P,submit:F,clear:I,formResult:x,loadingDevices:h}},Ae=({channel:e,messages:a})=>{let s=y(),{element:c}=Oe({type:e.type}),d=s.getStore(W),{devices:f,fetchDevices:p,areLoading:m}=te(),{t:h}=r(),g=w(),_=v(),b=l(K.NONE),x,S=o(()=>f.value.find(t=>t.id===e.device)??null),C=o(()=>S.value?d.findForDevice(S.value.id).filter(t=>t.id!==e.id).map(e=>e.category):[]),T=o(()=>S.value?Se[S.value.category]??null:null),E=o(()=>T.value===null?[]:Object.values(u).filter(e=>T.value?.required.includes(e)||T.value?.optional.includes(e)).filter(e=>!C.value.includes(e)||T.value?.multiple?.includes(e)).map(e=>({value:e,label:h(`devicesModule.categories.channels.${e}`)}))),D=o(()=>f.value.map(e=>({value:e.id,label:e.name}))),O=n(e),k=A(i(O)),j=l(void 0),M=l(!1),N=async()=>{let t=e.draft,n=a&&a.error?a.error:e.draft?h(`devicesModule.messages.channels.notCreated`,{channel:e.name}):h(`devicesModule.messages.channels.notEdited`,{channel:e.name});if(j.value.clearValidate(),!await j.value.validate())throw new Y(`Form not valid`);let r=(c.value?.schemas?.channelEditFormSchema||De).safeParse(O);if(!r.success)throw _.error(`Schema validation failed with:`,r.error),new Y(`Failed to validate edit channel model.`);b.value=K.WORKING;try{await d.edit({id:e.id,data:{...r.data,type:e.type}}),e.draft&&await d.save({id:e.id,deviceId:e.device})}catch(e){throw b.value=K.ERROR,x=window.setTimeout(P,2e3),e instanceof J&&e.code===422?g.error(e.message):g.error(n),e}return b.value=K.OK,x=window.setTimeout(P,2e3),t?(g.success(h(a&&a.success?a.success:`devicesModule.messages.channels.created`,{channel:e.name})),`added`):(g.success(h(a&&a.success?a.success:`devicesModule.messages.channels.edited`,{channel:e.name})),M.value=!1,k=A(i(O)),`saved`)},P=()=>{window.clearTimeout(x),b.value=K.NONE};return p().catch(()=>{}),t(O,()=>{M.value=!(0,X.isEqual)(i(O),k)}),{categoriesOptions:E,devicesOptions:D,model:O,formEl:j,formChanged:M,submit:N,clear:P,formResult:b,loadingDevices:m}},je=({channelId:e,id:t})=>{let n=y().getStore(H),{data:r,semaphore:i}=L(n);return{property:o(()=>t===null?null:r.value[t]??null),isLoading:o(()=>i.value.fetching.item.includes(t)?!0:(r.value[t]??null)===null?i.value.fetching.items.includes(e)||i.value.fetching.items.includes(`all`):!1),fetchProperty:async()=>{(r.value[t]??null)?.draft||await n.get({id:t,channelId:e})}}},Me=({channelId:e})=>{let t=y().getStore(H),{firstLoad:n,semaphore:r}=L(t),i=typeof e==`string`?o(()=>e):e;return{properties:o(()=>t.findAll().filter(e=>!i?.value||e.channel===i.value)),areLoading:o(()=>i.value?r.value.fetching.items.includes(i.value)?!0:n.value.includes(i.value)?!1:r.value.fetching.items.includes(i.value):!1),loaded:o(()=>i.value?n.value.includes(i.value):!1),fetchProperties:async()=>{i.value&&await t.fetch({channelId:i.value})}}},Q={search:void 0,channels:[],categories:[],permissions:[],dataTypes:[]},Ne={by:`category`,dir:`asc`},Pe=({channelId:e,key:n=`list`})=>{let r=y().getStore(H),{firstLoad:i,semaphore:a}=L(r),{filters:s,sort:c,pagination:u,reset:d}=O({key:`${G}:channels-properties:${n}`,filters:{schema:pe,defaults:Q},sort:{defaults:[Ne]},pagination:{defaults:{page:1,size:10}},syncQuery:!0,version:1}),f=o(()=>s.value.search!==Q.search||!(0,X.isEqual)(s.value.channels,Q.channels)||!(0,X.isEqual)(s.value.categories,Q.categories)||!(0,X.isEqual)(s.value.permissions,Q.permissions)||!(0,X.isEqual)(s.value.dataTypes,Q.dataTypes)),p=l(u.value.size||10),m=l(u.value.page||1),h=l(c.value.length>0?c.value[0]?.by:void 0),g=l(c.value.length>0?c.value[0]?.dir??null:null),_=o(()=>N(r.findAll().filter(t=>!e||t.channel===e).filter(e=>!e.draft&&(!s.value.search||e.id?.toLowerCase().includes(s.value.search.toLowerCase())||e.name?.toLowerCase().includes(s.value.search.toLowerCase())||e.identifier?.toLowerCase().includes(s.value.search.toLowerCase()))&&(s.value.categories.length===0||s.value.categories.includes(e.category))&&(s.value.dataTypes.length===0||s.value.dataTypes.includes(e.dataType))&&(s.value.permissions.length===0||e.permissions.some(e=>s.value.permissions.includes(e)))),[e=>e[h.value]??``],[g.value===`asc`?`asc`:`desc`])),v=o(()=>{let e=(m.value-1)*p.value,t=e+p.value;return _.value.slice(e,t)}),b=async()=>{await r.fetch({channelId:e})},x=o(()=>a.value.fetching.items.includes(e)?!0:i.value.includes(e)?!1:a.value.fetching.items.includes(e)),S=o(()=>i.value.includes(e)),C=o(()=>r.findAll().filter(t=>!e||t.channel===e).filter(e=>!e.draft).length);return t(()=>u.value,e=>{m.value=e.page??1,p.value=e.size??10},{deep:!0}),t(()=>m.value,e=>{u.value.page=e}),t(()=>p.value,e=>{u.value.size=e}),t(()=>g.value,e=>{h.value===void 0||e===null?c.value=[]:c.value=[{by:h.value,dir:e}]}),t(()=>h.value,e=>{e===void 0?c.value=[]:c.value=[{by:e,dir:g.value}]}),{properties:_,propertiesPaginated:v,totalRows:C,areLoading:x,loaded:S,fetchProperties:b,filters:s,filtersActive:f,paginateSize:p,paginatePage:m,sortBy:h,sortDir:g,resetFilter:d}},Fe=()=>{let{t:e}=r(),t=w(),n=y().getStore(H);return{remove:async r=>{let i=n.findById(r);if(i===null)throw new q(`Something went wrong, channel property can't be loaded`);S.confirm(e(`devicesModule.texts.channelsProperties.confirmRemove`,{property:i.name??e(`devicesModule.categories.channelsProperties.${i.category}`)}),e(`devicesModule.headings.channelsProperties.remove`),{confirmButtonText:e(`devicesModule.buttons.yes.title`),cancelButtonText:e(`devicesModule.buttons.no.title`),type:`warning`}).then(async()=>{try{await n.remove({id:i.id,channelId:i.channel}),t.success(e(`devicesModule.messages.channelsProperties.removed`,{property:i.name??e(`devicesModule.categories.channelsProperties.${i.category}`)}))}catch(n){if(n instanceof J&&n.code===404){let n=e(`devicesModule.messages.channelsProperties.notFound`,{property:i.name??e(`devicesModule.categories.channelsProperties.${i.category}`)});t.error(n)}else if(n instanceof J&&n.code===422)t.error(n.message);else{let n=e(`devicesModule.messages.channelsProperties.notRemoved`,{property:i.name??e(`devicesModule.categories.channelsProperties.${i.category}`)});t.error(n)}}}).catch(()=>{t.info(e(`devicesModule.messages.channelsProperties.removeCanceled`,{property:i.name??e(`devicesModule.categories.channelsProperties.${i.category}`)}))})}}},Ie=({id:e})=>{let t=y().getStore(H);return{icon:o(()=>{switch(t.findById(e)?.category){default:return`mdi:tune`}})}},Le=C({id:P().uuid().optional(),type:P().trim().nonempty(),channel:P().uuid().optional(),category:x(D).default(D.generic),identifier:P().trim().nonempty().nullable().optional(),name:P().trim().nonempty().nullable(),permissions:g(x(M)),dataType:x(F),format:g(p([P(),p([b(),h()])])).nullable(),invalid:p([P(),b(),f(),h()]),step:p([P(),b()]).transform(e=>e===``?null:Number(e)).nullable(),enterValue:f().default(!1),value:p([P(),b(),f(),h()]).optional(),enumValues:g(P()),minValue:p([P(),b()]).transform(e=>e===``?void 0:Number(e)).optional(),maxValue:p([P(),b()]).transform(e=>e===``?void 0:Number(e)).optional()}),Re=C({id:P().uuid(),type:P().trim().nonempty(),channel:P().uuid(),category:x(D).default(D.generic),identifier:P().trim().nonempty().nullable().optional(),name:P().trim().nonempty().nullable().optional(),permissions:g(x(M)),dataType:x(F),format:g(p([P(),p([b(),h()])])).nullable(),invalid:p([P(),b(),f(),h()]),step:p([P(),b()]).transform(e=>e===``?null:Number(e)).nullable(),enterValue:f().default(!1),value:p([P(),b(),f(),h()]).optional(),enumValues:g(P()),minValue:p([P(),b()]).transform(e=>e===``?void 0:Number(e)).optional(),maxValue:p([P(),b()]).transform(e=>e===``?void 0:Number(e)).optional()}),ze=({type:e})=>{let{getByType:t}=se(),n=o(()=>t(e));return{plugin:n,element:o(()=>(n.value?.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`))))}},Be=({id:e,type:a,channelId:s})=>{let c=y(),{element:d}=ze({type:a}),f=c.getStore(H),{channels:p,fetchChannels:m,areLoading:h}=ue(),{t:g}=r(),_=w(),b=v(),x=l(K.NONE),S,C=o(()=>I.channel?p.value.find(e=>e.id===I.channel)??null:null),T=o(()=>C.value?f.findForChannel(C.value.id).map(e=>e.category):[]),E=o(()=>C.value?Ce[C.value.category]??null:null),O=o(()=>E.value===null?[]:Object.values(D).filter(e=>E.value?.required.includes(e)||E.value?.optional.includes(e)).filter(e=>!T.value.includes(e)).map(e=>({value:e,label:g(`devicesModule.categories.channelsProperties.${e}`)}))),k=o(()=>p.value.map(e=>({value:e.id,label:e.name}))),N=Object.values(M).map(e=>({value:e,label:g(`devicesModule.permissions.${e}`)})),P=Object.values(F).map(e=>({value:e,label:g(`devicesModule.dataTypes.${e}`)})),I=n({...j(d.value?.schemas?.channelPropertyAddFormSchema||Le),id:e,type:a,channel:s,category:D.generic,name:``,permissions:[],dataType:F.unknown,format:null,invalid:null,step:null,enumValues:[],minValue:void 0,maxValue:void 0,enterValue:!1,value:void 0}),L=A(i(I)),R=l(void 0),z=l(!1),B=async()=>{if(R.value.clearValidate(),!await R.value.validate())throw new Y(`Form not valid`);let t=s??I.channel;if(!t)throw new Y(`Missing channel identifier`);if(I.name===``&&(I.name=null),!I.category)throw new Y(`Missing data type definition`);I.dataType===F.enum?I.format=I.enumValues:[F.char,F.uchar,F.short,F.ushort,F.int,F.uint,F.float].includes(I.dataType)&&(I.format=[typeof I.minValue==`string`&&I.minValue!==``?Number(I.minValue):typeof I.minValue==`number`?I.minValue:null,typeof I.maxValue==`string`&&I.maxValue!==``?Number(I.maxValue):typeof I.maxValue==`number`?I.maxValue:null]),I.enterValue||delete I.value;let n=(d.value?.schemas?.channelPropertyAddFormSchema||Le).safeParse(I);if(!n.success)throw b.error(`Schema validation failed with:`,n.error),new Y(`Failed to validate create channel property model.`);x.value=K.WORKING;let r=g(`devicesModule.messages.channelsProperties.notCreated`,{device:I.name});try{await f.add({id:e,channelId:t,draft:!1,data:{...n.data,type:a}})}catch(e){throw x.value=K.ERROR,S=window.setTimeout(V,2e3),e instanceof J&&e.code===422?_.error(e.message):_.error(r),e}return x.value=K.OK,S=window.setTimeout(V,2e3),_.success(g(`devicesModule.messages.channelsProperties.created`,{device:I.name})),`added`},V=()=>{window.clearTimeout(S),x.value=K.NONE};return m().catch(()=>{}),t(I,()=>{z.value=!(0,X.isEqual)(i(I),L)}),t(()=>I.category,e=>{let t=we(C.value?.category??u.generic,e);t&&(L.permissions=t.permissions,L.dataType=t.data_type,I.permissions=t.permissions,I.dataType=t.data_type,t.invalid!==void 0&&(L.invalid=t.invalid,I.invalid=t.invalid),t.step!==void 0&&(L.step=t.step,I.step=t.step),L.dataType===F.enum?(L.enumValues=t.format??[],L.minValue=void 0,L.maxValue=void 0,I.enumValues=t.format??[],I.minValue=void 0,I.maxValue=void 0):[F.char,F.uchar,F.short,F.ushort,F.int,F.uint,F.float].includes(I.dataType)?(L.enumValues=[],L.minValue=t.format?.[0],L.maxValue=t.format?.[1],I.enumValues=[],I.minValue=t.format?.[0],I.maxValue=t.format?.[1]):(L.enumValues=[],L.minValue=void 0,L.maxValue=void 0,I.enumValues=[],I.minValue=void 0,I.maxValue=void 0),z.value=!(0,X.isEqual)(i(I),L))},{immediate:!0}),t(()=>O.value,e=>{e.length&&e[0]&&(I.category=e[0].value,L.category=e[0].value)},{immediate:!0}),{categoriesOptions:O,channelsOptions:k,permissionsOptions:N,dataTypesOptions:P,model:I,formEl:R,formChanged:z,submit:B,clear:V,formResult:x,loadingChannels:h}},Ve=({property:e,messages:a})=>{let s=y(),{element:c}=ze({type:e.type}),u=s.getStore(H),{channels:d,fetchChannels:f,areLoading:p}=ue(),{t:m}=r(),h=w(),g=v(),_=l(K.NONE),b,x=[],S,C;e.dataType===F.enum?x=e.format?e.format.map(e=>e?.toString()||``):[]:[F.char,F.uchar,F.short,F.ushort,F.int,F.uint,F.float].includes(e.dataType)&&Array.isArray(e.format)&&e.format.length===2&&(S=e.format[0],C=e.format[1]);let T=o(()=>d.value.find(t=>t.id===e.channel)??null),E=o(()=>T.value?u.findForChannel(T.value.id).filter(t=>t.id!==e.id).map(e=>e.category):[]),O=o(()=>T.value?Ce[T.value.category]??null:null),k=o(()=>O.value===null?[]:Object.values(D).filter(e=>O.value?.required.includes(e)||O.value?.optional.includes(e)).filter(e=>!E.value.includes(e)).map(e=>({value:e,label:m(`devicesModule.categories.channelsProperties.${e}`)}))),j=o(()=>d.value.map(e=>({value:e.id,label:e.name}))),N=Object.values(M).map(e=>({value:e,label:m(`devicesModule.permissions.${e}`)})),P=Object.values(F).map(e=>({value:e,label:m(`devicesModule.dataTypes.${e}`)})),I=n({...e,format:i(e.format),value:e.value?.value??null,enumValues:x,minValue:S,maxValue:C,enterValue:!1}),L=A(i(I)),R=l(void 0),z=l(!1),B=async()=>{let t=e.draft,n=a&&a.error?a.error:e.draft?m(`devicesModule.messages.channelsProperties.notCreated`,{property:e.name??m(`devicesModule.categories.channelsProperties.${e.category}`)}):m(`devicesModule.messages.channelsProperties.notEdited`,{property:e.name??m(`devicesModule.categories.channelsProperties.${e.category}`)});if(R.value.clearValidate(),!await R.value.validate())throw new Y(`Form not valid`);I.name===``&&(I.name=null),e.dataType===F.enum?I.format=I.enumValues:[F.char,F.uchar,F.short,F.ushort,F.int,F.uint,F.float].includes(e.dataType)&&(I.format=[I.minValue??null,I.maxValue??null]),I.enterValue||delete I.value;let r=(c.value?.schemas?.channelPropertyEditFormSchema||Re).safeParse(I);if(!r.success)throw g.error(`Schema validation failed with:`,r.error),new Y(`Failed to validate edit channel property model.`);_.value=K.WORKING;try{await u.edit({id:e.id,channelId:e.channel,data:{...r.data,type:e.type}}),e.draft&&await u.save({id:e.id,channelId:e.channel})}catch(e){throw _.value=K.ERROR,b=window.setTimeout(V,2e3),e instanceof J&&e.code===422?h.error(e.message):h.error(n),e}return _.value=K.OK,b=window.setTimeout(V,2e3),t?(h.success(m(a&&a.success?a.success:`devicesModule.messages.channelsProperties.created`,{property:e.name??m(`devicesModule.categories.channelsProperties.${e.category}`)})),`added`):(h.success(m(a&&a.success?a.success:`devicesModule.messages.channelsProperties.edited`,{property:e.name??m(`devicesModule.categories.channelsProperties.${e.category}`)})),z.value=!1,L=A(i(I)),`saved`)},V=()=>{window.clearTimeout(b),_.value=K.NONE};return f().catch(()=>{}),t(I,()=>{z.value=!(0,X.isEqual)(i(I),L)}),{categoriesOptions:k,channelsOptions:j,permissionsOptions:N,dataTypesOptions:P,model:I,formEl:R,formChanged:z,submit:B,clear:V,formResult:_,loadingChannels:p}},He=({id:e})=>{let t=y().getStore(V),{data:n,semaphore:r}=L(t);return{device:o(()=>e===null?null:n.value[e]??null),isLoading:o(()=>r.value.fetching.item.includes(e)?!0:(n.value[e]??null)===null?r.value.fetching.items:!1),fetchDevice:async()=>{(n.value[e]??null)?.draft||await t.get({id:e})}}},$={search:void 0,types:[],state:`all`,states:[],categories:[],enabled:`all`,validation:`all`},Ue={by:`name`,dir:`asc`},We=()=>{let e=y(),n=e.getStore(V),r=e.getStore(U),{firstLoad:i,semaphore:a}=L(n),{filters:s,sort:c,pagination:u,reset:d}=O({key:`${G}:devices:list`,filters:{schema:de,defaults:$},sort:{defaults:[Ue]},pagination:{defaults:{page:1,size:10}},syncQuery:!0,version:1}),f=o(()=>s.value.search!==$.search||!(0,X.isEqual)(s.value.types,$.types)||s.value.state!==$.state||!(0,X.isEqual)(s.value.states,$.states)||!(0,X.isEqual)(s.value.categories,$.categories)||!(0,X.isEqual)(s.value.enabled,$.enabled)||s.value.validation!==$.validation),p=l(u.value.size||10),m=l(u.value.page||1),h=l(c.value.length>0?c.value[0]?.by:void 0),g=l(c.value.length>0?c.value[0]?.dir??null:null),_=e=>r.findById(e)?.isValid??null,v=o(()=>N(n.findAll().filter(e=>!e.draft&&(!s.value.search||e.id.toLowerCase().includes(s.value.search.toLowerCase())||e.name.toLowerCase().includes(s.value.search.toLowerCase())||e.description?.toLowerCase().includes(s.value.search.toLowerCase())||e.identifier?.toLowerCase().includes(s.value.search.toLowerCase()))&&(s.value.types.length===0||s.value.types.includes(e.type))&&(s.value.categories.length===0||s.value.categories.includes(e.category))&&(s.value.enabled===`all`||s.value.enabled===`enabled`&&e.enabled||s.value.enabled===`disabled`&&!e.enabled)&&(s.value.states.length===0||s.value.states.includes(e.status?.status??k.unknown))&&(s.value.state===`all`||s.value.state===`online`&&[k.ready,k.connected,k.running].includes(e.status.status)||s.value.state===`offline`&&[k.disconnected,k.stopped,k.lost,k.unknown].includes(e.status.status))&&(s.value.validation===`all`||s.value.validation===`valid`&&_(e.id)===!0||s.value.validation===`invalid`&&_(e.id)===!1)),[e=>h.value===`state`?e.status?.status??k.unknown:e[h.value]??``],[g.value===`asc`?`asc`:`desc`])),b=o(()=>{let e=(m.value-1)*p.value,t=e+p.value;return v.value.slice(e,t)}),x=async()=>{await n.fetch()},S=o(()=>a.value.fetching.items||!i.value),C=o(()=>i.value),w=o(()=>n.findAll().filter(e=>!e.draft).length);return t(()=>u.value,e=>{m.value=e.page??1,p.value=e.size??10},{deep:!0}),t(()=>m.value,e=>{u.value.page=e}),t(()=>p.value,e=>{u.value.size=e}),t(()=>g.value,e=>{h.value===void 0||e===null?c.value=[]:c.value=[{by:h.value,dir:e}]}),t(()=>h.value,e=>{e===void 0?c.value=[]:c.value=[{by:e,dir:g.value}]}),{devices:v,devicesPaginated:b,totalRows:w,areLoading:S,loaded:C,fetchDevices:x,filters:s,filtersActive:f,paginateSize:p,paginatePage:m,sortBy:h,sortDir:g,resetFilter:d}},Ge=()=>{let{t:e}=r(),t=w(),n=y().getStore(V);return{remove:async r=>{let i=n.findById(r);if(i===null)throw new q(`Something went wrong, device can't be loaded`);S.confirm(e(`devicesModule.texts.devices.confirmRemove`,{device:i.name}),e(`devicesModule.headings.devices.remove`),{confirmButtonText:e(`devicesModule.buttons.yes.title`),cancelButtonText:e(`devicesModule.buttons.no.title`),type:`warning`}).then(async()=>{try{await n.remove({id:i.id}),t.success(e(`devicesModule.messages.devices.removed`,{device:i.name}))}catch(n){if(n instanceof J&&n.code===404){let n=e(`devicesModule.messages.devices.notFound`,{device:i.name});t.error(n)}else if(n instanceof J&&n.code===422)t.error(n.message);else{let n=e(`devicesModule.messages.devices.notRemoved`,{device:i.name});t.error(n)}}}).catch(()=>{t.info(e(`devicesModule.messages.devices.removeCanceled`,{device:i.name}))})},bulkRemove:async r=>{if(r.length!==0)try{await S.confirm(e(`devicesModule.texts.devices.confirmBulkRemove`,{count:r.length}),e(`devicesModule.headings.devices.bulkRemove`),{confirmButtonText:e(`devicesModule.buttons.yes.title`),cancelButtonText:e(`devicesModule.buttons.no.title`),type:`warning`});let i=0,a=0;for(let e of r)try{await n.remove({id:e.id}),i++}catch{a++}i>0&&t.success(e(`devicesModule.messages.devices.bulkRemoved`,{count:i})),a>0&&t.error(e(`devicesModule.messages.devices.bulkRemoveFailed`,{count:a}))}catch{}},bulkEnable:async r=>{if(r.length!==0)try{await S.confirm(e(`devicesModule.texts.devices.confirmBulkEnable`,{count:r.length}),e(`devicesModule.headings.devices.bulkEnable`),{confirmButtonText:e(`devicesModule.buttons.yes.title`),cancelButtonText:e(`devicesModule.buttons.no.title`),type:`info`});let i=0,a=0;for(let e of r)try{await n.edit({id:e.id,data:{type:e.type,enabled:!0}}),i++}catch{a++}i>0&&t.success(e(`devicesModule.messages.devices.bulkEnabled`,{count:i})),a>0&&t.error(e(`devicesModule.messages.devices.bulkEnableFailed`,{count:a}))}catch{t.info(e(`devicesModule.messages.devices.bulkEnableCanceled`))}},bulkDisable:async r=>{if(r.length!==0)try{await S.confirm(e(`devicesModule.texts.devices.confirmBulkDisable`,{count:r.length}),e(`devicesModule.headings.devices.bulkDisable`),{confirmButtonText:e(`devicesModule.buttons.yes.title`),cancelButtonText:e(`devicesModule.buttons.no.title`),type:`warning`});let i=0,a=0;for(let e of r)try{await n.edit({id:e.id,data:{type:e.type,enabled:!1}}),i++}catch{a++}i>0&&t.success(e(`devicesModule.messages.devices.bulkDisabled`,{count:i})),a>0&&t.error(e(`devicesModule.messages.devices.bulkDisableFailed`,{count:a}))}catch{t.info(e(`devicesModule.messages.devices.bulkDisableCanceled`))}}}},Ke=({id:e})=>{let t=y().getStore(V);return{icon:o(()=>{switch(t.findById(e)?.category){default:return`mdi:devices`}})}},qe=({id:e})=>{let t=y(),n=t.getStore(V),r=t.getStore(W),i=e=>n.findById(e),a=e=>Se[e.category]??null;return{canAddAnotherChannel:o(()=>{let t=i(e);if(t===null)return!0;let{required:n,optional:o,multiple:s}=a(t)??{required:[],optional:[]},c=[...n,...o],l=r.findForDevice(t.id).map(e=>e.category);return c.filter(e=>!l.includes(e)).length>0||s!==void 0&&s.length>0}),missingRequiredChannels:o(()=>{let t=i(e);if(t===null)throw new q(`Something went wrong, device can't be loaded`);let{required:n}=a(t)??{required:[]},o=r.findForDevice(t.id).map(e=>e.category);return n.filter(e=>!o.includes(e))})}},Je=C({id:P().uuid().optional(),type:P().trim().nonempty(),category:x(_).default(_.generic),identifier:P().trim().nonempty().nullable().optional(),name:P().trim().nonempty(),description:P().trim().transform(e=>e===``?null:e).nullable().optional(),enabled:f().default(!0).optional()}),Ye=C({id:P().uuid(),type:P().trim().nonempty(),category:x(_).default(_.generic),identifier:P().trim().nonempty().nullable().optional(),name:P().trim().nonempty().optional(),description:P().trim().transform(e=>e===``?null:e).nullable().optional(),enabled:f().optional(),roomId:P().uuid().nullable().optional()}),Xe=()=>{let e=d(),{enabled:t}=E(),n=[`deviceAddForm`,`deviceEditForm`],r=[`deviceSchema`,`deviceAddFormSchema`,`deviceEditFormSchema`,`deviceCreateReqSchema`,`deviceUpdateReqSchema`],i=o(()=>e.getPlugins().filter(e=>e.modules===void 0||e.modules.includes(`devices-module`)?(e.elements??[]).some(e=>{if(!(e.modules===void 0||e.modules.includes(`devices-module`)))return!1;let t=n.length===0||!!e.components&&n.some(t=>e.components&&t in e.components),i=r.length===0||!!e.schemas&&r.some(t=>e.schemas&&t in e.schemas);return t||i}):!1));return{plugins:i,options:o(()=>N(i.value.flatMap(e=>(e.elements??[]).filter(e=>e.modules===void 0||e.modules.includes(`devices-module`)).map(n=>({value:n.type,label:n.name?.trim()?n.name:e.name,disabled:!t(e.type)}))),[e=>e.label],[`asc`])),getByName:e=>i.value.find(t=>t.type===e),getByType:e=>i.value.find(t=>(t.elements??[]).some(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`)))),getElement:e=>{for(let t of i.value){let n=(t.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`)));if(n)return n}}}},Ze=({type:e})=>{let{getByType:t}=Xe(),n=o(()=>t(e));return{plugin:n,element:o(()=>(n.value?.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`))))}},Qe=({id:e,type:a})=>{let o=y(),{element:s}=Ze({type:a}),c=o.getStore(V),{t:u}=r(),d=w(),f=v(),p=l(K.NONE),m,h=Object.values(_).map(e=>({value:e,label:u(`devicesModule.categories.devices.${e}`)})),g=n({...j(s.value?.schemas?.deviceAddFormSchema||Je),id:e,type:a,category:_.generic,name:``,description:``}),b=A(i(g)),x=l(void 0),S=l(!1),C=async()=>{if(x.value.clearValidate(),!await x.value.validate())throw new Y(`Form not valid`);let t=(s.value?.schemas?.deviceAddFormSchema||Je).safeParse(g);if(!t.success)throw f.error(`Schema validation failed with:`,t.error),new Y(`Failed to validate create device model.`);p.value=K.WORKING;let n=u(`devicesModule.messages.devices.notCreated`,{device:g.name});try{await c.add({id:e,draft:!1,data:{...t.data,type:a}})}catch(e){throw p.value=K.ERROR,m=window.setTimeout(T,2e3),e instanceof J&&e.code===422?d.error(e.message):d.error(n),e}return p.value=K.OK,m=window.setTimeout(T,2e3),d.success(u(`devicesModule.messages.devices.created`,{device:g.name})),`added`},T=()=>{window.clearTimeout(m),p.value=K.NONE};return t(g,()=>{S.value=!(0,X.isEqual)(i(g),b)}),{categoriesOptions:h,model:g,formEl:x,formChanged:S,submit:C,clear:T,formResult:p}},$e=({device:e,messages:a})=>{let o=y(),{element:s}=Ze({type:e.type}),c=o.getStore(V),{t:u}=r(),d=w(),f=v(),p=l(K.NONE),m,h=Object.values(_).map(e=>({value:e,label:u(`devicesModule.categories.devices.${e}`)})),g=n(e),b=A(i(g)),x=l(void 0),S=l(!1),C=async()=>{let t=e.draft,n=a&&a.error?a.error:e.draft?u(`devicesModule.messages.devices.notCreated`,{device:e.name}):u(`devicesModule.messages.devices.notEdited`,{device:e.name});if(x.value.clearValidate(),!await x.value.validate())throw new Y(`Form not valid`);let r=(s.value?.schemas?.deviceEditFormSchema||Ye).safeParse(g);if(!r.success)throw f.error(`Schema validation failed with:`,r.error),new Y(`Failed to validate edit device model.`);p.value=K.WORKING;try{await c.edit({id:e.id,data:{...r.data,type:e.type}}),e.draft&&await c.save({id:e.id})}catch(e){throw p.value=K.ERROR,m=window.setTimeout(T,2e3),e instanceof J&&e.code===422?d.error(e.message):d.error(n),e}return p.value=K.OK,m=window.setTimeout(T,2e3),t?(d.success(u(a&&a.success?a.success:`devicesModule.messages.devices.created`,{device:e.name})),`added`):(d.success(u(a&&a.success?a.success:`devicesModule.messages.devices.edited`,{device:e.name})),S.value=!1,b=A(i(g)),`saved`)},T=()=>{window.clearTimeout(m),p.value=K.NONE};return t(g,()=>{S.value=!(0,X.isEqual)(i(g),b)}),{categoriesOptions:h,model:g,formEl:x,formChanged:S,submit:C,clear:T,formResult:p}},et=()=>{let e=y().getStore(U),{data:t,semaphore:n,firstLoad:r}=L(e);return{validation:o(()=>t.value),summary:o(()=>t.value?.summary??null),invalidDevices:o(()=>t.value?t.value.devices.filter(e=>!e.isValid):[]),isLoading:o(()=>n.value.fetching.items),isLoaded:o(()=>r.value),fetchValidation:async()=>{await e.fetch()},findById:t=>e.findById(t),isDeviceValid:t=>{let n=e.findById(t);return n?n.isValid:null},getDeviceIssueCount:t=>{let n=e.findById(t);return n?n.issues.length:0}}},tt=({id:e})=>{let t=y().getStore(U),{semaphore:n}=L(t);return{validation:o(()=>t.findById(e)),isValid:o(()=>{let n=t.findById(e);return n?n.isValid:null}),issues:o(()=>{let n=t.findById(e);return n?n.issues:[]}),errorCount:o(()=>{let n=t.findById(e);return n?n.issues.filter(e=>e.severity===`error`).length:0}),warningCount:o(()=>{let n=t.findById(e);return n?n.issues.filter(e=>e.severity===`warning`).length:0}),isLoading:o(()=>n.value.fetching.item.includes(e)),fetchValidation:async()=>{await t.get({id:e})}}},nt=300,rt=1e4,it=({id:n})=>{let r=y(),i=r.getStore(V),a=r.getStore(W),s=r.getStore(H),{data:c,semaphore:d}=L(i),{data:f,semaphore:p,firstLoad:m}=L(a),{semaphore:h,firstLoad:g}=L(s),{sendCommand:_}=I(),v={},b={},x={},S=l({}),C=l({}),w=o(()=>n===null?null:c.value[n]??null),T=o(()=>Object.values(f.value).filter(e=>e.device===n&&e.category!==u.device_information)),E=o(()=>T.value.filter(e=>s.findForChannel(e.id).some(e=>e.permissions.includes(M.rw)||e.permissions.includes(M.wo)))),D=o(()=>E.value.length>0),O=e=>s.findForChannel(e),k=e=>e.permissions.includes(M.rw)||e.permissions.includes(M.wo),A=e=>{let t=S.value[e];return t===void 0?s.findById(e)?.value?.value??null:t},j=e=>C.value[e]??!1,N=(e,t)=>{if(t!==void 0){let n=S.value[e];if(n!==t&&String(n)!==String(t))return}delete S.value[e],x[e]&&(clearTimeout(x[e]),delete x[e])},P=(e,t)=>{x[e]&&clearTimeout(x[e]),x[e]=setTimeout(()=>{let n=S.value[e];(n===t||String(n)===String(t))&&delete S.value[e],delete x[e]},rt)},F=async(e,t,r)=>s.findById(t)?(v[t]&&(clearTimeout(v[t]),delete v[t],b[t]&&(b[t](!1),delete b[t])),S.value[t]=r,new Promise(i=>{b[t]=i;let a=setTimeout(async()=>{delete b[t],C.value[t]=!0;try{await _(ae.CHANNEL_PROPERTY_SET,{context:{origin:`admin`},properties:[{device:n,channel:e,property:t,value:r}]},`DevicesModule.Internal.SetPropertyValue`)===!0?(P(t,r),i(!0)):(N(t,r),i(!1))}catch{N(t,r),i(!1)}finally{C.value[t]=!1,v[t]===a&&delete v[t]}},nt);v[t]=a})):!1,R=async()=>{(n in c.value?c.value[n]:null)?.draft||await i.get({id:n})},z=async()=>{await a.fetch({deviceId:n})},B=async()=>{let e=Object.values(f.value).filter(e=>e.device===n);for(let t of e)await s.fetch({channelId:t.id})},ee=o(()=>{if(d.value.fetching.item.includes(n)||p.value.fetching.items.includes(n))return!0;for(let e of T.value)if(h.value.fetching.items.includes(e.id))return!0;return!1}),U=o(()=>m.value.includes(n)),te=o(()=>{if(!U.value)return!1;for(let e of T.value)if(!g.value.includes(e.id))return!1;return!0});return t(()=>{let e={};for(let t of Object.keys(S.value)){let n=s.findById(t);n&&(e[t]=n.value?.value??null)}return e},e=>{for(let[t,n]of Object.entries(S.value)){let r=e[t];(r===n||String(r)===String(n))&&N(t)}},{deep:!0}),e(()=>{for(let e of Object.keys(v))clearTimeout(v[e]),delete v[e],b[e]&&(b[e](!1),delete b[e]);for(let e of Object.keys(x))clearTimeout(x[e]),delete x[e]}),{device:w,channels:T,controllableChannels:E,hasControllableProperties:D,isLoading:ee,areChannelsLoaded:U,arePropertiesLoaded:te,fetchDevice:R,fetchChannels:z,fetchProperties:B,getPropertiesForChannel:O,isPropertyWritable:k,getPropertyValue:A,isPropertyLoading:j,setPropertyValue:F}},at=({deviceId:e})=>{let t=y().getStore(ee),{firstLoad:n,semaphore:r}=L(t);return{controls:o(()=>t.findForDevice(e)),areLoading:o(()=>r.value.fetching.items.includes(e)),loaded:o(()=>n.value.includes(e)),fetchControls:async()=>t.fetch({deviceId:e})}},ot=e=>{let n=B(),r=v(),i=l({}),u=l(!1),d=l(!1),f=l(!1),p=l(void 0),m=l(!1),h=null,g=0,_=o(()=>Object.values(i.value).sort((e,t)=>new Date(t.ts).getTime()-new Date(e.ts).getTime())),y=o(()=>{let e=[T.warn,T.error,T.fatal,T.fail];return _.value.filter(t=>e.includes(t.type))}),b=o(()=>y.value.length),x=o(()=>b.value>0),S=async()=>{let t=a(e.deviceId);h=t,g++;let o=g;d.value=!0;try{let{data:e,error:a}=await n.client.GET(`/${s}/${z}/logs`,{params:{query:{resource:t,limit:50}}});if(h!==t||g!==o)return;e===void 0?a&&r.error(`Failed to fetch device logs:`,a):(i.value=Object.fromEntries(e.data.map(e=>{let t=ne(e);return[t.id,t]})),f.value=!0,u.value=e.metadata.has_more,p.value=e.metadata.next_cursor)}catch(e){h===t&&g===o&&r.error(`Error fetching device logs:`,e)}finally{h===t&&g===o&&(d.value=!1)}},C=async()=>{if(d.value||!u.value||!p.value)return;let t=a(e.deviceId),o=p.value,c=g;d.value=!0;try{let{data:e,error:a}=await n.client.GET(`/${s}/${z}/logs`,{params:{query:{resource:t,after_id:o,limit:50}}});if(h!==t||g!==c)return;if(e!==void 0){let t=Object.fromEntries(e.data.map(e=>{let t=ne(e);return[t.id,t]}));i.value={...i.value,...t},u.value=e.metadata.has_more,p.value=e.metadata.next_cursor}else a&&r.error(`Failed to load more device logs:`,a)}catch(e){h===t&&g===c&&r.error(`Error loading more device logs:`,e)}finally{h===t&&g===c&&(d.value=!1)}},w=async()=>{i.value={},p.value=void 0,u.value=!1,f.value=!1,await S()},E=null;return t(()=>m.value,e=>{E&&=(clearInterval(E),null),e&&(E=setInterval(()=>{d.value||S()},3e3))}),c(()=>{E&&=(clearInterval(E),null)}),t(()=>a(e.deviceId),()=>{w()}),{logs:_,alertLogs:y,alertCount:b,hasAlerts:x,hasMore:u,isLoading:d,loaded:f,live:m,fetchLogs:S,loadMoreLogs:C,refreshLogs:w}};export{we as A,Y as B,Pe as C,ke as D,Ae as E,le as F,K as G,G as H,ce as I,oe as K,se as L,ge as M,he as N,Te as O,ue as P,J as R,Fe as S,je as T,re as U,ie as V,ae as W,Ve as _,et as a,Re as b,Ze as c,Ye as d,qe as f,He as g,We as h,tt as i,_e as j,xe as k,Xe as l,Ge as m,at as n,$e as o,Ke as p,it as r,Qe as s,ot as t,Je as u,Be as v,Me as w,Ie as x,Le as y,q as z};
|