diff --git a/public/main.js b/public/main.js index 0e1ccf476..38e658ca1 100644 --- a/public/main.js +++ b/public/main.js @@ -502,7 +502,7 @@ Error: {error}`,values:{name:S.title,error:_.message}}),n("notification.delete.e Svelte.`,o=Z(),l=P("p"),l.innerHTML='For documentation about how to install and set it up, see https://theyosh.github.io/TerrariumPI.',u=Z(),d=P("p"),d.innerHTML=`For bugs and feature requests please open a Github issue. GitHub issues / GitHub closed issues`,c=Z(),h=P("p"),h.innerHTML='And there is a Matrix channel where you can try to ask questions and see if somebody can help you there: https://matrix.to/#/#terrariumpi:theyosh.nl.',f=Z(),m=P("p"),m.innerHTML=`Finally it would be nice when you use this software, to post some pictures of your setup at this Github issue: 'Pictures of running TerrariumPI system #210'`,g=Z(),v=P("p"),v.innerHTML=`API Documentation: ReDoc / - Swagger`,b=Z(),k=P("p"),k.innerHTML='
\xA9 Copyright 2015 - 2023
TheYOSH',ps(e.src,t="/img/terrariumpi.jpg")||x(e,"src",t),x(e,"class","img-thumbnail float-right"),x(e,"alt","TerariumPI Logo version "+i[1].version)},m(w,y){U(w,e,y),U(w,n,y),U(w,a,y),U(w,r,y),U(w,s,y),U(w,o,y),U(w,l,y),U(w,u,y),U(w,d,y),U(w,c,y),U(w,h,y),U(w,f,y),U(w,m,y),U(w,g,y),U(w,v,y),U(w,b,y),U(w,k,y)},p:$t,d(w){w&&(j(e),j(n),j(a),j(r),j(s),j(o),j(l),j(u),j(d),j(c),j(h),j(f),j(m),j(g),j(v),j(b),j(k))}}}function bre(i){let e,t,n=i[1].version+"",a;return{c(){e=P("i"),t=Te("TerrariumPI v "),a=Te(n),x(e,"class","fas fa-info mr-2")},m(r,s){U(r,e,s),U(r,t,s),U(r,a,s)},p:$t,d(r){r&&(j(e),j(t),j(a))}}}function _re(i){let e,t,n,a,r,s,o;return e=new Rr({props:{$$slots:{default:[gre]},$$scope:{ctx:i}}}),s=new Xa({props:{loading:!1,noPadding:!1,$$slots:{header:[bre],default:[vre]},$$scope:{ctx:i}}}),{c(){ke(e.$$.fragment),t=Z(),n=P("div"),a=P("div"),r=P("div"),ke(s.$$.fragment),x(r,"class","col"),x(a,"class","row"),x(n,"class","container-fluid")},m(l,u){ye(e,l,u),U(l,t,u),U(l,n,u),A(n,a),A(a,r),ye(s,r,null),o=!0},p(l,[u]){const d={};u&5&&(d.$$scope={dirty:u,ctx:l}),e.$set(d);const c={};u&4&&(c.$$scope={dirty:u,ctx:l}),s.$set(c)},i(l){o||(V(e.$$.fragment,l),V(s.$$.fragment,l),o=!0)},o(l){X(e.$$.fragment,l),X(s.$$.fragment,l),o=!1},d(l){l&&(j(t),j(n)),we(e,l),we(s)}}}function yre(i,e,t){let n;dt(i,Fi,r=>t(0,n=r));let a=Er();return Wi(()=>{Fr(n("about.title",{default:"About"}))}),da(()=>{ur.set(!1)}),[n,a]}class wre extends zt{constructor(e){super(),Nt(this,e,yre,_re,Ft,{})}}function kre(i){let e,t=i[0]("not-found.title",{default:"Page not found"})+"",n;return{c(){e=Te("404 "),n=Te(t)},m(a,r){U(a,e,r),U(a,n,r)},p(a,r){r&1&&t!==(t=a[0]("not-found.title",{default:"Page not found"})+"")&&Me(n,t)},d(a){a&&(j(e),j(n))}}}function Ere(i){let e,t,n,a,r,s,o,l,u,d,c,h,f,m,g,v,b,k,w,y,T,S,_,D;return e=new Rr({props:{$$slots:{default:[kre]},$$scope:{ctx:i}}}),{c(){ke(e.$$.fragment),t=Z(),n=P("div"),a=P("div"),r=P("div"),s=P("div"),o=P("h2"),o.textContent="404",l=Z(),u=P("div"),d=P("h3"),d.innerHTML=' Oops! Page not found.',c=Z(),h=P("img"),m=Z(),g=P("p"),v=Te("We could not find the page you were looking for at location"),b=P("br"),k=Z(),w=P("strong"),w.textContent=`${document.location.hash.substring(1)}`,y=P("br"),T=Te(` + Swagger`,b=Z(),k=P("p"),k.innerHTML='
\xA9 Copyright 2015 - 2024
TheYOSH',ps(e.src,t="/img/terrariumpi.jpg")||x(e,"src",t),x(e,"class","img-thumbnail float-right"),x(e,"alt","TerariumPI Logo version "+i[1].version)},m(w,y){U(w,e,y),U(w,n,y),U(w,a,y),U(w,r,y),U(w,s,y),U(w,o,y),U(w,l,y),U(w,u,y),U(w,d,y),U(w,c,y),U(w,h,y),U(w,f,y),U(w,m,y),U(w,g,y),U(w,v,y),U(w,b,y),U(w,k,y)},p:$t,d(w){w&&(j(e),j(n),j(a),j(r),j(s),j(o),j(l),j(u),j(d),j(c),j(h),j(f),j(m),j(g),j(v),j(b),j(k))}}}function bre(i){let e,t,n=i[1].version+"",a;return{c(){e=P("i"),t=Te("TerrariumPI v "),a=Te(n),x(e,"class","fas fa-info mr-2")},m(r,s){U(r,e,s),U(r,t,s),U(r,a,s)},p:$t,d(r){r&&(j(e),j(t),j(a))}}}function _re(i){let e,t,n,a,r,s,o;return e=new Rr({props:{$$slots:{default:[gre]},$$scope:{ctx:i}}}),s=new Xa({props:{loading:!1,noPadding:!1,$$slots:{header:[bre],default:[vre]},$$scope:{ctx:i}}}),{c(){ke(e.$$.fragment),t=Z(),n=P("div"),a=P("div"),r=P("div"),ke(s.$$.fragment),x(r,"class","col"),x(a,"class","row"),x(n,"class","container-fluid")},m(l,u){ye(e,l,u),U(l,t,u),U(l,n,u),A(n,a),A(a,r),ye(s,r,null),o=!0},p(l,[u]){const d={};u&5&&(d.$$scope={dirty:u,ctx:l}),e.$set(d);const c={};u&4&&(c.$$scope={dirty:u,ctx:l}),s.$set(c)},i(l){o||(V(e.$$.fragment,l),V(s.$$.fragment,l),o=!0)},o(l){X(e.$$.fragment,l),X(s.$$.fragment,l),o=!1},d(l){l&&(j(t),j(n)),we(e,l),we(s)}}}function yre(i,e,t){let n;dt(i,Fi,r=>t(0,n=r));let a=Er();return Wi(()=>{Fr(n("about.title",{default:"About"}))}),da(()=>{ur.set(!1)}),[n,a]}class wre extends zt{constructor(e){super(),Nt(this,e,yre,_re,Ft,{})}}function kre(i){let e,t=i[0]("not-found.title",{default:"Page not found"})+"",n;return{c(){e=Te("404 "),n=Te(t)},m(a,r){U(a,e,r),U(a,n,r)},p(a,r){r&1&&t!==(t=a[0]("not-found.title",{default:"Page not found"})+"")&&Me(n,t)},d(a){a&&(j(e),j(n))}}}function Ere(i){let e,t,n,a,r,s,o,l,u,d,c,h,f,m,g,v,b,k,w,y,T,S,_,D;return e=new Rr({props:{$$slots:{default:[kre]},$$scope:{ctx:i}}}),{c(){ke(e.$$.fragment),t=Z(),n=P("div"),a=P("div"),r=P("div"),s=P("div"),o=P("h2"),o.textContent="404",l=Z(),u=P("div"),d=P("h3"),d.innerHTML=' Oops! Page not found.',c=Z(),h=P("img"),m=Z(),g=P("p"),v=Te("We could not find the page you were looking for at location"),b=P("br"),k=Z(),w=P("strong"),w.textContent=`${document.location.hash.substring(1)}`,y=P("br"),T=Te(` Meanwhile, you may `),S=P("a"),S.textContent="return to dashboard",_=Te("."),x(o,"class","headline text-warning"),ps(h.src,f="/img/koek_koek.webp")||x(h,"src",f),x(h,"alt","Gecko is lost..."),x(S,"href","/"),x(u,"class","error-content"),x(s,"class","error-page"),x(r,"class","col-12 text-center pt-5"),x(a,"class","row"),x(n,"class","container-fluid")},m(I,M){ye(e,I,M),U(I,t,M),U(I,n,M),A(n,a),A(a,r),A(r,s),A(s,o),A(s,l),A(s,u),A(u,d),A(u,c),A(u,h),A(u,m),A(u,g),A(g,v),A(g,b),A(g,k),A(g,w),A(g,y),A(g,T),A(g,S),A(g,_),D=!0},p(I,[M]){const R={};M&3&&(R.$$scope={dirty:M,ctx:I}),e.$set(R)},i(I){D||(V(e.$$.fragment,I),D=!0)},o(I){X(e.$$.fragment,I),D=!1},d(I){I&&(j(t),j(n)),we(e,I)}}}function Sre(i,e,t){let n;return dt(i,Fi,a=>t(0,n=a)),Wi(()=>{Fr("404 "+n("not-found.title",{default:"Page not found"})),console.log("Location href",document.location)}),da(()=>{ur.set(!1)}),[n]}class Tre extends zt{constructor(e){super(),Nt(this,e,Sre,Ere,Ft,{})}}function xre(i){let e;return{c(){e=Te("Error")},m(t,n){U(t,e,n)},p:$t,i:$t,o:$t,d(t){t&&j(e)}}}let Are=class extends zt{constructor(e){super(),Nt(this,e,null,xre,Ft,{})}};var Lre=(i,e,t)=>new Promise((n,a)=>{var r=l=>{try{o(t.next(l))}catch(u){a(u)}},s=l=>{try{o(t.throw(l))}catch(u){a(u)}},o=l=>l.done?n(l.value):Promise.resolve(l.value).then(r,s);o((t=t.apply(i,e)).next())});const BI=Er(),tf=[{name:"Error",title:"error.title",url:"/error",breadcrumb:["Error"],hide:!0},{name:"Home",title:"home.menu.title",url:"/",breadcrumb:["Route 1"],icon:"fas fa-home",hide:!1,nesting:!0,subroutes:[{name:"Dashboard",title:"dashboard.menu.title",url:"/dashboard/",breadcrumb:["Home"],icon:"fas fa-th-list",hide:!1},{name:"Weather",title:"weather.menu.title",url:"/weather/",breadcrumb:["Home"],icon:"fas fa-cloud-sun",hide:!1},{name:"Calendar",title:"calendar.menu.title",url:"/calendar/",breadcrumb:["Home"],icon:"fas fa-calendar-alt",hide:!1},{name:"allSensors",title:"sensors.all.menu.title",url:"/sensors/all/",breadcrumb:["Home"],icon:"fas fa-tint",hide:BI.show_gauge_overview!==!0}]},{name:"Sensors",title:"sensors.menu.title",url:"/sensors/",breadcrumb:[],icon:"fas fa-tint",hide:!1,nesting:!0,subroutes:[...BI.available_sensor_types.map(i=>({name:`sensors_${i}`,title:`sensors.${i}.menu.title`,url:`/sensors/${i}/`,breadcrumb:["Home","Sensors"],icon:"fas "+Nr(i),hide:!1})),{name:"new_sensor",title:"sensors.menu.new.title",url:"new_sensor",breadcrumb:["Home","Sensors"],icon:"fas fa-plus disabled",hide:!1},{name:"scan_sensors",title:"sensors.menu.scan.title",url:"scan_sensors",breadcrumb:["Home","Sensors"],icon:"fas fa-sync-alt disabled",hide:!1}]},{name:"Relays",title:"relays.menu.title",url:"/relays/",breadcrumb:[],icon:"fas fa-bolt",hide:!1,nesting:!0,subroutes:[{name:"relay_status",title:"relays.menu.status.title",url:"/relays/",breadcrumb:["Home","Sensors"],icon:"fas fa-power-off",hide:!1},{name:"new_relay",title:"relays.menu.new.title",url:"new_relay",breadcrumb:["Home","Sensors"],icon:"fas fa-plus disabled",hide:!1},{name:"scan_relays",title:"relays.menu.scan.title",url:"scan_relays",breadcrumb:["Home","Sensors"],icon:"fas fa-sync-alt disabled",hide:!1}]},{name:"Buttons",title:"buttons.menu.title",url:"/buttons/",breadcrumb:[],icon:"fas fa-thumbtack",hide:!1,nesting:!0,subroutes:[{name:"button_status",title:"buttons.menu.status.title",url:"/buttons/",breadcrumb:["Home","Buttons"],icon:"fas fa-list",hide:!1},{name:"new_button",title:"buttons.menu.new.title",url:"new_button",breadcrumb:["Home","Buttons"],icon:"fas fa-plus disabled",hide:!1}]},{name:"Webcams",title:"webcams.menu.title",url:"/webcams/",breadcrumb:[],icon:"fas fa-video",hide:!1,nesting:!0,subroutes:[{name:"webcam_status",title:"webcams.menu.status.title",url:"/webcams/",breadcrumb:["Home","Webcams"],icon:"fas fa-tv",hide:!1},{name:"new_webcam",title:"webcams.menu.new.title",url:"new_webcam",breadcrumb:["Home","Webcams"],icon:"fas fa-plus disabled",hide:!1}]},{name:"Audio",title:"audio.menu.title",url:"/audio/",breadcrumb:[],icon:"fas fa-music",hide:!1,nesting:!0,subroutes:[{name:"audio_files",title:"audio.menu.files.title",url:"/audio/files/",breadcrumb:["Home","Audio"],icon:"fas fa-file-audio",hide:!1},{name:"playlists",title:"audio.menu.playlists.title",url:"/audio/playlists/",breadcrumb:["Home","Audio"],icon:"fas fa-play",hide:!1},{name:"new_playlist",title:"audio.menu.new_playlist.title",url:"new_playlist",breadcrumb:["Home","Audio"],icon:"fas fa-plus disabled",hide:!1}]},{name:"Enclosures",title:"enclosures.menu.title",url:"/enclosures/",breadcrumb:[],icon:"fas fa-globe",hide:!1,nesting:!0,subroutes:[{name:"enclosures_list",title:"enclosures.menu.list.title",url:"/enclosures/",breadcrumb:["Home","Enclosures"],icon:"fas fa-building",hide:!1},{name:"new_enclosure",title:"enclosures.menu.new_enclosure.title",url:"new_enclosure",breadcrumb:["Home","Enclosures"],icon:"fas fa-plus disabled",hide:!1},{name:"new_area",title:"enclosures.menu.new_area.title",url:"new_area",breadcrumb:["Home","Enclosures"],icon:"fas fa-plus disabled",hide:!1}]},{name:"System",title:"system.menu.title",url:"/system/",breadcrumb:[],icon:"fas fa-cog",hide:!1,nesting:!0,subroutes:[{name:"system_status",title:"system.menu.status.title",url:"/system/status/",breadcrumb:["Home","System"],icon:"fas fa-exclamation-triangle",hide:!1},{name:"system_notifications",title:"system.menu.notifications.title",url:"/system/notifications/",breadcrumb:["Home","System"],icon:"fas fa-bell disabled",hide:!1},{name:"system_settings",title:"system.menu.settings.title",url:"/system/settings/",breadcrumb:["Home","System"],icon:"fas fa-cogs disabled",hide:!1},{name:"system_log",title:"system.menu.log.title",url:"/system/log/",breadcrumb:["Home","System"],icon:"fas fa-file-alt disabled",hide:!1},{name:"system_restart",title:"system.menu.restart.title",url:"system_restart",breadcrumb:["Home","System"],icon:"fas fa-sync-alt disabled",hide:!1},{name:"system_reboot",title:"system.menu.reboot.title",url:"system_reboot",breadcrumb:["Home","System"],icon:"fas fa-sync-alt disabled",hide:!1},{name:"system_shutdown",title:"system.menu.shutdown.title",url:"system_shutdown",breadcrumb:["Home","System"],icon:"fas fa-power-off disabled",hide:!1}]}],Hr=tf.reduce((i,e)=>(i[e.name]=e.url,e.subroutes&&(i=e.subroutes.reduce((t,n)=>(t[n.name]=n.url,t),i)),i),{}),Cre=i=>Lre(void 0,null,function*(){const e=tf.find(t=>t.url===i.route);!e||va(ur)||cb.set(typeof e.title=="function"?yield e.title():e.title)});var Dre={[Hr.Home]:HW,[Hr.Dashboard]:CK,[Hr.Weather]:UZ,[Hr.Calendar]:HX,"/sensors/all/":oL,"/sensors/:type/":oL,[Hr.Relays]:sQ,[Hr.Buttons]:yQ,[Hr.Webcams]:zne,[Hr.audio_files]:qne,[Hr.playlists]:Qne,[Hr.Enclosures]:bae,[Hr.system_status]:xae,[Hr.system_settings]:Xae,[Hr.system_log]:nre,[Hr.system_notifications]:pre,"/about/":wre,[Hr.Error]:Are,"*":Tre};const Ire=i=>({}),HI=i=>({});function jI(i){let e,t;return{c(){e=P("i"),x(e,"class",t="nav-icon "+i[1])},m(n,a){U(n,e,a)},p(n,a){a&2&&t!==(t="nav-icon "+n[1])&&x(e,"class",t)},d(n){n&&j(e)}}}function Mre(i){let e,t,n,a,r,s,o,l,u,d=i[1]&&jI(i);const c=i[3].default,h=Ki(c,i,i[2],null),f=i[3].children,m=Ki(f,i,i[2],HI);return{c(){e=P("li"),t=P("a"),d&&d.c(),n=Z(),a=P("p"),h&&h.c(),r=Z(),s=P("i"),o=Z(),l=P("ul"),m&&m.c(),x(s,"class","right fas fa-angle-left icon"),x(t,"href",i[0]),x(t,"class","nav-link"),x(l,"class","nav nav-treeview margin"),x(e,"class","nav-item")},m(g,v){U(g,e,v),A(e,t),d&&d.m(t,null),A(t,n),A(t,a),h&&h.m(a,null),A(a,r),A(a,s),A(e,o),A(e,l),m&&m.m(l,null),u=!0},p(g,[v]){g[1]?d?d.p(g,v):(d=jI(g),d.c(),d.m(t,n)):d&&(d.d(1),d=null),h&&h.p&&(!u||v&4)&&Xi(h,c,g,g[2],u?Zi(c,g[2],v,null):Qi(g[2]),null),(!u||v&1)&&x(t,"href",g[0]),m&&m.p&&(!u||v&4)&&Xi(m,f,g,g[2],u?Zi(f,g[2],v,Ire):Qi(g[2]),HI)},i(g){u||(V(h,g),V(m,g),u=!0)},o(g){X(h,g),X(m,g),u=!1},d(g){g&&j(e),d&&d.d(),h&&h.d(g),m&&m.d(g)}}}function Pre(i,e,t){let{$$slots:n={},$$scope:a}=e,{href:r="#"}=e,{icon:s}=e;return i.$$set=o=>{"href"in o&&t(0,r=o.href),"icon"in o&&t(1,s=o.icon),"$$scope"in o&&t(2,a=o.$$scope)},[r,s,a,n]}class UI extends zt{constructor(e){super(),Nt(this,e,Pre,Mre,Ft,{href:0,icon:1})}}const Ore=()=>{const i=window.location.hash+(window.location.hash.slice(-1)!=="/"?"/":""),e=jQuery("ul.nav-sidebar"),t=e.find('a[href="'+i+'"]');e.find("ul.nav.nav-treeview").hide(),e.find("*").removeClass("active menu-is-opening menu-open"),t.toggleClass("active",!0).parents("ul").show().parents("li").toggleClass("menu-is-opening menu-open",!0).find("a:first").toggleClass("active",!0)},WI=i=>{const e=document.querySelectorAll("div.sidebar nav.mt-2 ul.nav-sidebar .disabled"+(i?"":"-tmp"));for(let t of e)t.classList.remove("disabled"+(i?"":"-tmp")),t.classList.add("disabled"+(i?"-tmp":""))};function Rre(i){let e,t;return e=new np({props:{$$slots:{default:[Nre]},$$scope:{ctx:i}}}),{c(){ke(e.$$.fragment)},m(n,a){ye(e,n,a),t=!0},p(n,a){const r={};a&66&&(r.$$scope={dirty:a,ctx:n}),e.$set(r)},i(n){t||(V(e.$$.fragment,n),t=!0)},o(n){X(e.$$.fragment,n),t=!1},d(n){we(e,n)}}}function Fre(i){let e,t=i[1]("userpanel.logout.text1",{values:{name:i[2]}})+"",n,a,r,s,o=i[1]("userpanel.logout.text2")+"",l,u,d,c;return{c(){e=P("a"),n=Te(t),a=Z(),r=P("br"),s=Z(),l=Te(o),x(e,"href","/logout/"),x(e,"title",u=i[1]("general.logout.title"))},m(h,f){U(h,e,f),A(e,n),A(e,a),A(e,r),A(e,s),A(e,l),d||(c=Gt(e,"click",Ko(i[5])),d=!0)},p(h,f){f&6&&t!==(t=h[1]("userpanel.logout.text1",{values:{name:h[2]}})+"")&&Me(n,t),f&2&&o!==(o=h[1]("userpanel.logout.text2")+"")&&Me(l,o),f&2&&u!==(u=h[1]("general.logout.title"))&&x(e,"title",u)},i:$t,o:$t,d(h){h&&j(e),d=!1,c()}}}function Nre(i){let e=i[1]("userpanel.login.text1")+"",t,n,a,r,s=i[1]("userpanel.login.text2")+"",o;return{c(){t=Te(e),n=Z(),a=P("br"),r=Z(),o=Te(s)},m(l,u){U(l,t,u),U(l,n,u),U(l,a,u),U(l,r,u),U(l,o,u)},p(l,u){u&2&&e!==(e=l[1]("userpanel.login.text1")+"")&&Me(t,e),u&2&&s!==(s=l[1]("userpanel.login.text2")+"")&&Me(o,s)},d(l){l&&(j(t),j(n),j(a),j(r),j(o))}}}function zre(i){let e,t,n,a,r,s,o,l,u,d,c,h,f,m,g,v,b,k;const w=[Fre,Rre],y=[];function T(S,_){return S[0]?0:1}return v=T(i),b=y[v]=w[v](i),{c(){e=P("a"),t=P("img"),a=Z(),r=P("span"),r.textContent=`${i[3].name}`,s=Z(),o=P("div"),l=P("div"),u=P("img"),c=Z(),h=P("img"),m=Z(),g=P("div"),b.c(),ps(t.src,n="img/AdminLTELogo.png")||x(t,"src",n),x(t,"alt","AdminLTE Logo"),x(t,"class","brand-image img-circle elevation-3"),Ei(t,"opacity",".8"),x(r,"class","brand-text font-weight-light"),x(e,"href","/"),x(e,"class","brand-link"),ps(u.src,d="img/christmas_hat.png")||x(u,"src",d),x(u,"class","christmashat d-none svelte-dvs8z9"),x(u,"title","!! Merry Christmas !!"),x(u,"alt","!! Merry Christmas !!"),ps(h.src,f=Fa+"/"+i[3].profile)||x(h,"src",f),x(h,"class","img-circle elevation-2 img-thumbnail svelte-dvs8z9"),x(h,"alt","Profile"),x(l,"class","image pt-2 pl-1 svelte-dvs8z9"),x(g,"class","info"),x(o,"class","user-panel mt-3 pb-3 mb-3 d-flex svelte-dvs8z9")},m(S,_){U(S,e,_),A(e,t),A(e,a),A(e,r),U(S,s,_),U(S,o,_),A(o,l),A(l,u),A(l,c),A(l,h),A(o,m),A(o,g),y[v].m(g,null),k=!0},p(S,[_]){let D=v;v=T(S),v===D?y[v].p(S,_):(Pt(),X(y[D],1,1,()=>{y[D]=null}),Ot(),b=y[v],b?b.p(S,_):(b=y[v]=w[v](S),b.c()),V(b,1),b.m(g,null))},i(S){k||(V(b),k=!0)},o(S){X(b),k=!1},d(S){S&&(j(e),j(s),j(o)),y[v].d()}}}function $re(i,e,t){let n,a,r;dt(i,Jr,u=>t(0,n=u)),dt(i,Fi,u=>t(1,a=u)),dt(i,_m,u=>t(2,r=u));let s=Er();const{confirmModal:o}=Hn("confirm");return[n,a,r,s,o,()=>o(a("modal.confirm.system.logout"),()=>A4())]}class Bre extends zt{constructor(e){super(),Nt(this,e,$re,zre,Ft,{})}}function Hre(i){let e;return{c(){e=P("p"),x(e,"class","text-center")},m(t,n){U(t,e,n),e.innerHTML=i[1]},p(t,n){n&2&&(e.innerHTML=t[1])},d(t){t&&j(e)}}}function jre(i){let e,t,n,a;return{c(){e=P("i"),n=Z(),a=Te(i[0]),x(e,"class",t="fas "+i[2])},m(r,s){U(r,e,s),U(r,n,s),U(r,a,s)},p(r,s){s&4&&t!==(t="fas "+r[2])&&x(e,"class",t),s&1&&Me(a,r[0])},d(r){r&&(j(e),j(n),j(a))}}}function Ure(i){let e=i[6]("modal.general.close",{default:"Close"})+"",t;return{c(){t=Te(e)},m(n,a){U(n,t,a)},p(n,a){a&64&&e!==(e=n[6]("modal.general.close",{default:"Close"})+"")&&Me(t,e)},d(n){n&&j(t)}}}function Wre(i){let e,t,n,a,r,s,o=i[6]("modal.confirm.submit.title",{default:"Confirm"})+"",l,u,d,c;return t=new Af({props:{$$slots:{default:[Ure]},$$scope:{ctx:i}}}),{c(){e=P("div"),ke(t.$$.fragment),n=Z(),a=P("button"),r=P("span"),s=Z(),l=Te(o),x(r,"class","spinner-border spinner-border-sm"),x(r,"role","status"),x(r,"aria-hidden","true"),_e(r,"d-none",!i[3]),x(a,"type","button"),x(a,"class","btn btn-danger"),a.disabled=i[3],x(e,"class","d-flex justify-content-between w-100")},m(h,f){U(h,e,f),ye(t,e,null),A(e,n),A(e,a),A(a,r),A(a,s),A(a,l),u=!0,d||(c=Gt(a,"click",i[7]),d=!0)},p(h,f){const m={};f&8256&&(m.$$scope={dirty:f,ctx:h}),t.$set(m),(!u||f&8)&&_e(r,"d-none",!h[3]),(!u||f&64)&&o!==(o=h[6]("modal.confirm.submit.title",{default:"Confirm"})+"")&&Me(l,o),(!u||f&8)&&(a.disabled=h[3])},i(h){u||(V(t.$$.fragment,h),u=!0)},o(h){X(t.$$.fragment,h),u=!1},d(h){h&&j(e),we(t),d=!1,c()}}}function Vre(i){let e,t,n,a;function r(l){i[10](l)}function s(l){i[11](l)}let o={$$slots:{actions:[Wre],header:[jre],default:[Hre]},$$scope:{ctx:i}};return i[4]!==void 0&&(o.show=i[4]),i[5]!==void 0&&(o.hide=i[5]),e=new Rc({props:o}),Kt.push(()=>bn(e,"show",r)),Kt.push(()=>bn(e,"hide",s)),{c(){ke(e.$$.fragment)},m(l,u){ye(e,l,u),a=!0},p(l,[u]){const d={};u&8271&&(d.$$scope={dirty:u,ctx:l}),!t&&u&16&&(t=!0,d.show=l[4],vn(()=>t=!1)),!n&&u&32&&(n=!0,d.hide=l[5],vn(()=>n=!1)),e.$set(d)},i(l){a||(V(e.$$.fragment,l),a=!0)},o(l){X(e.$$.fragment,l),a=!1},d(l){we(e,l)}}}function Gre(i,e,t){let n;dt(i,Fi,v=>t(6,n=v));let{confirmTitle:a=n("modal.confirm.title",{default:"Are you sure?"})}=e,{confirmMessage:r=""}=e,{icon:s="fa-exclamation"}=e,o=!1,l,u;const d=Ka(),c=()=>{t(3,o=!0),d("confirm")},h=()=>jt(this,null,function*(){t(3,o=!1),l()}),f=()=>{u(),t(3,o=!1)};function m(v){l=v,t(4,l)}function g(v){u=v,t(5,u)}return i.$$set=v=>{"confirmTitle"in v&&t(0,a=v.confirmTitle),"confirmMessage"in v&&t(1,r=v.confirmMessage),"icon"in v&&t(2,s=v.icon)},[a,r,s,o,l,u,n,c,h,f,m,g]}class qre extends zt{constructor(e){super(),Nt(this,e,Gre,Vre,Ft,{confirmTitle:0,confirmMessage:1,icon:2,show:8,hide:9})}get show(){return this.$$.ctx[8]}get hide(){return this.$$.ctx[9]}}function Yre(i){let e,t,n=i[5]("modal.login.error",{default:"Invalid login"})+"",a,r,s,o,l,u,d,c,h,f;return s=new Mt({props:{type:"text",name:"username",class:"col-8",required:!0,horizontal:!0,label:i[5]("modal.login.form.username.label",{default:"Username"}),help:i[5]("modal.login.form.username.help",{default:"Enter the username"}),invalid:i[5]("modal.login.form.username.invalid",{default:"Username cannot be empty"})}}),l=new Mt({props:{type:"password",name:"password",class:"col-8",required:!0,horizontal:!0,label:i[5]("modal.login.form.password.label",{default:"Password"}),help:i[5]("modal.login.form.password.help",{default:"Enter the password"}),invalid:i[5]("modal.login.form.password.invalid",{default:"Password cannot be empty"})}}),{c(){e=P("form"),t=P("h3"),a=Te(n),r=Z(),ke(s.$$.fragment),o=Z(),ke(l.$$.fragment),u=Z(),d=P("button"),d.innerHTML="",x(t,"class","text-danger text-center mb-3"),_e(t,"d-none",!i[3]),x(d,"type","submit"),Ei(d,"display","none"),x(e,"id","loginForm"),x(e,"class","form-horizontal needs-validation"),_e(e,"was-validated",i[2])},m(m,g){U(m,e,g),A(e,t),A(t,a),A(e,r),ye(s,e,null),A(e,o),ye(l,e,null),A(e,u),A(e,d),i[12](e),c=!0,h||(f=gs(i[7].call(null,e)),h=!0)},p(m,g){(!c||g&32)&&n!==(n=m[5]("modal.login.error",{default:"Invalid login"})+"")&&Me(a,n),(!c||g&8)&&_e(t,"d-none",!m[3]);const v={};g&32&&(v.label=m[5]("modal.login.form.username.label",{default:"Username"})),g&32&&(v.help=m[5]("modal.login.form.username.help",{default:"Enter the username"})),g&32&&(v.invalid=m[5]("modal.login.form.username.invalid",{default:"Username cannot be empty"})),s.$set(v);const b={};g&32&&(b.label=m[5]("modal.login.form.password.label",{default:"Password"})),g&32&&(b.help=m[5]("modal.login.form.password.help",{default:"Enter the password"})),g&32&&(b.invalid=m[5]("modal.login.form.password.invalid",{default:"Password cannot be empty"})),l.$set(b),(!c||g&4)&&_e(e,"was-validated",m[2])},i(m){c||(V(s.$$.fragment,m),V(l.$$.fragment,m),c=!0)},o(m){X(s.$$.fragment,m),X(l.$$.fragment,m),c=!1},d(m){m&&j(e),we(s),we(l),i[12](null),h=!1,f()}}}function Kre(i){let e,t,n=i[5]("modal.login.title",{default:"Login"})+"",a,r,s,o;return s=new Ns({}),{c(){e=P("i"),t=Z(),a=Te(n),r=Z(),ke(s.$$.fragment),x(e,"class","fas fa-key mr-2")},m(l,u){U(l,e,u),U(l,t,u),U(l,a,u),U(l,r,u),ye(s,l,u),o=!0},p(l,u){(!o||u&32)&&n!==(n=l[5]("modal.login.title",{default:"Login"})+"")&&Me(a,n)},i(l){o||(V(s.$$.fragment,l),o=!0)},o(l){X(s.$$.fragment,l),o=!1},d(l){l&&(j(e),j(t),j(a),j(r)),we(s,l)}}}function Zre(i){let e=i[5]("modal.general.close",{default:"Close"})+"",t;return{c(){t=Te(e)},m(n,a){U(n,t,a)},p(n,a){a&32&&e!==(e=n[5]("modal.general.close",{default:"Close"})+"")&&Me(t,e)},d(n){n&&j(t)}}}function Xre(i){let e,t,n,a,r,s,o=i[5]("modal.login.form.submit",{default:"Login"})+"",l,u,d,c;return t=new Af({props:{$$slots:{default:[Zre]},$$scope:{ctx:i}}}),{c(){e=P("div"),ke(t.$$.fragment),n=Z(),a=P("button"),r=P("span"),s=Z(),l=Te(o),x(r,"class","spinner-border spinner-border-sm"),x(r,"role","status"),x(r,"aria-hidden","true"),_e(r,"d-none",!i[6]),x(a,"type","button"),x(a,"class","btn btn-primary"),a.disabled=i[6],x(e,"class","d-flex justify-content-between w-100")},m(h,f){U(h,e,f),ye(t,e,null),A(e,n),A(e,a),A(a,r),A(a,s),A(a,l),u=!0,d||(c=Gt(a,"click",i[9]),d=!0)},p(h,f){const m={};f&262176&&(m.$$scope={dirty:f,ctx:h}),t.$set(m),(!u||f&64)&&_e(r,"d-none",!h[6]),(!u||f&32)&&o!==(o=h[5]("modal.login.form.submit",{default:"Login"})+"")&&Me(l,o),(!u||f&64)&&(a.disabled=h[6])},i(h){u||(V(t.$$.fragment,h),u=!0)},o(h){X(t.$$.fragment,h),u=!1},d(h){h&&j(e),we(t),d=!1,c()}}}function Qre(i){let e,t,n,a;function r(l){i[13](l)}function s(l){i[14](l)}let o={center:!0,$$slots:{actions:[Xre],header:[Kre],default:[Yre]},$$scope:{ctx:i}};return i[0]!==void 0&&(o.show=i[0]),i[1]!==void 0&&(o.hide=i[1]),e=new Rc({props:o}),Kt.push(()=>bn(e,"show",r)),Kt.push(()=>bn(e,"hide",s)),{c(){ke(e.$$.fragment)},m(l,u){ye(e,l,u),a=!0},p(l,[u]){const d={};u&262268&&(d.$$scope={dirty:u,ctx:l}),!t&&u&1&&(t=!0,d.show=l[0],vn(()=>t=!1)),!n&&u&2&&(n=!0,d.hide=l[1],vn(()=>n=!1)),e.$set(d)},i(l){a||(V(e.$$.fragment,l),a=!0)},o(l){X(e.$$.fragment,l),a=!1},d(l){we(e,l)}}}function Jre(i,e,t){let n,a;dt(i,Fi,T=>t(5,n=T));let r,s,o=!1,l=!1,u;const d=(T,S)=>jt(this,null,function*(){t(2,o=!0),t(3,l=!1),S.form.checkValidity()&&((yield x4(T.username,T.password))?(gn(n("notification.login.message.ok",{default:"You are successfully logged in."}),n("notification.login.title",{default:"Login"})),b()):(Ti(n("notification.login.message.error",{derfault:"Sorry, but login is invalid"}),n("notification.login.title",{default:"Login"})),t(3,l=!0)),t(2,o=!1))}),{form:c,isSubmitting:h,createSubmitHandler:f,reset:m}=Fs({onSubmit:d});dt(i,h,T=>t(6,a=T));const g=f({onSubmit:d}),v=()=>{m(),t(2,o=!1),r(),setTimeout(()=>{document.querySelector('form input[name="username"]').focus()},650)},b=()=>{s()};Wi(()=>{u.setAttribute("novalidate","novalidate")});function k(T){Kt[T?"unshift":"push"](()=>{u=T,t(4,u)})}function w(T){r=T,t(0,r)}function y(T){s=T,t(1,s)}return[r,s,o,l,u,n,a,c,h,g,v,b,k,w,y]}class ese extends zt{constructor(e){super(),Nt(this,e,Jre,Qre,Ft,{show:10,hide:11})}get show(){return this.$$.ctx[10]}get hide(){return this.$$.ctx[11]}}function tse(i){var ie;let e,t,n,a,r,s,o,l,u,d,c,h,f,m,g,v,b,k,w,y,T,S,_,D,I,M,R,F,N,B,G,K,ne,ee,Y,Q,ue,oe;return o=new Ai({props:{name:"hardware",value:i[7].hardware,readonly:i[7].id&&i[7].id!=="",required:!0,options:i[4],label:i[8]("buttons.settings.hardware.label",{default:"Hardware"}),placeholder:i[8]("buttons.settings.hardware.placeholder",{default:"Select hardware"}),help:i[8]("buttons.settings.hardware.help",{default:"Select the hardware type for this button."}),invalid:i[8]("buttons.settings.hardware.invalid",{default:"Please select a hardware type."})}}),o.$on("change",i[17]),d=new Mt({props:{type:"text",name:"address",required:!0,label:i[8]("buttons.settings.address.label",{default:"Address"}),placeholder:i[8]("buttons.settings.address.placeholder",{default:"Enter an address"}),help:i[8]("buttons.settings.address.help",{default:"Enter the phisycal GPIO pin number."}),invalid:i[8]("buttons.settings.address.invalid",{default:"The entered address is not valid. Enter a valid number between {min} and {max}.",values:{min:1,max:40}})}}),f=new Mt({props:{type:"text",name:"name",required:!0,label:i[8]("buttons.settings.name.label",{default:"Name"}),placeholder:i[8]("buttons.settings.name.placeholder",{default:"Enter a name"}),help:i[8]("buttons.settings.name.help",{default:"Enter an easy to remember name."}),invalid:i[8]("buttons.settings.name.invalid",{default:"The entered name is not valid. It cannot be empty."})}}),v=new rs({props:{name:"notification",value:i[7].notification,label:i[8]("buttons.settings.notification.label",{default:"Notification"}),help:i[8]("buttons.settings.notification.help",{default:"Toggle to enable notification messages."})}}),w=new Mt({props:{type:"text",name:"value",readonly:!0,label:i[8]("buttons.settings.current.label",{default:"Current"}),placeholder:i[8]("buttons.settings.current.placeholder",{default:"Current value"}),help:i[8]("buttons.settings.current.help",{default:"The current state of the button."})}}),R=new rs({props:{name:"calibration.inverse",value:(ie=i[7].calibration)==null?void 0:ie.inverse,label:i[8]("buttons.settings.calibration.inverse.label",{default:"Inverse value"}),help:i[8]("buttons.settings.calibration.inverse.help",{default:"Toggle to inverse the remote value."})}}),B=new Mt({props:{type:"number",name:"calibration.ldr_capacitor",min:"1",max:"100",required:i[5]==="ldr",disabled:i[5]!=="ldr",label:i[8]("buttons.settings.calibration.ldr_capacitor.label",{default:"Capacitor value in \xB5F"}),placeholder:i[8]("buttons.settings.calibration.ldr_capacitor.placeholder",{default:"Enter the capacitor value in \xB5F"}),help:i[8]("buttons.settings.calibration.ldr_capacitor.help",{default:"Enter the capacitor value in \xB5F as this will influence the light calculation."}),invalid:i[8]("buttons.settings.calibration.ldr_capacitor.invalid",{default:"The entered capacitor value is not valid. Enter a valid number between {min} and {max}.",values:{min:1,max:100}})}}),ne=new Mt({props:{type:"number",name:"calibration.timeout",min:"1",max:"100",disabled:i[5]!=="remote",label:i[8]("buttons.settings.calibration.timeout.label",{default:"Time out in seconds"}),placeholder:i[8]("buttons.settings.calibration.timeout.placeholder",{default:"Enter the time out in seconds"}),help:i[8]("buttons.settings.calibration.timeout.help",{default:"Enter the timeout in seconds between remote checks."}),invalid:i[8]("buttons.settings.calibration.timeout.invalid",{default:"The entered timeout value is not valid. Enter a valid number between {min} and {max}.",values:{min:1,max:100}})}}),{c(){e=P("form"),t=P("input"),a=Z(),r=P("div"),s=P("div"),ke(o.$$.fragment),l=Z(),u=P("div"),ke(d.$$.fragment),c=Z(),h=P("div"),ke(f.$$.fragment),m=Z(),g=P("div"),ke(v.$$.fragment),b=Z(),k=P("div"),ke(w.$$.fragment),y=Z(),T=P("div"),S=P("a"),S.innerHTML='
',_=Z(),D=P("div"),I=P("div"),M=P("div"),ke(R.$$.fragment),F=Z(),N=P("div"),ke(B.$$.fragment),G=Z(),K=P("div"),ke(ne.$$.fragment),ee=Z(),Y=P("button"),Y.innerHTML="",x(t,"type","hidden"),x(t,"name","id"),t.disabled=n=i[7].id&&i[7].id!==""?null:!0,x(s,"class","col-12 col-sm-12 col-md-6 col-lg-3"),x(u,"class","col-12 col-sm-12 col-md-6 col-lg-4"),x(h,"class","col-12 col-sm-12 col-md-12 col-lg-3"),x(g,"class","col-6 col-sm-6 col-md-6 col-lg-1"),x(k,"class","col-6 col-sm-6 col-md-6 col-lg-1"),x(r,"class","row"),x(S,"data-toggle","collapse"),x(S,"href","#button_callibration"),x(S,"role","button"),x(S,"aria-expanded","false"),x(S,"aria-controls","button_callibration"),_e(S,"d-none",!I_),x(M,"class","col-6 col-sm-6 col-md-6 col-lg-3"),x(N,"class","col-6 col-sm-6 col-md-6 col-lg-4"),_e(N,"d-none",i[5]!=="ldr"),x(K,"class","col-6 col-sm-6 col-md-6 col-lg-4"),_e(K,"d-none",i[5]!=="remote"),x(I,"class","collapse row pt-3"),x(I,"id","button_callibration"),x(D,"class","col"),x(T,"class","row button_callibration"),_e(T,"d-block",I_),_e(T,"d-none",!I_),x(Y,"type","submit"),Ei(Y,"display","none"),x(e,"class","needs-validation"),_e(e,"was-validated",i[3])},m(ce,pe){U(ce,e,pe),A(e,t),A(e,a),A(e,r),A(r,s),ye(o,s,null),A(r,l),A(r,u),ye(d,u,null),A(r,c),A(r,h),ye(f,h,null),A(r,m),A(r,g),ye(v,g,null),A(r,b),A(r,k),ye(w,k,null),A(e,y),A(e,T),A(T,S),A(T,_),A(T,D),A(D,I),A(I,M),ye(R,M,null),A(I,F),A(I,N),ye(B,N,null),A(I,G),A(I,K),ye(ne,K,null),A(e,ee),A(e,Y),i[18](e),Q=!0,ue||(oe=gs(i[12].call(null,e)),ue=!0)},p(ce,pe){var fe;(!Q||pe&128&&n!==(n=ce[7].id&&ce[7].id!==""?null:!0))&&(t.disabled=n);const Le={};pe&128&&(Le.value=ce[7].hardware),pe&128&&(Le.readonly=ce[7].id&&ce[7].id!==""),pe&16&&(Le.options=ce[4]),pe&256&&(Le.label=ce[8]("buttons.settings.hardware.label",{default:"Hardware"})),pe&256&&(Le.placeholder=ce[8]("buttons.settings.hardware.placeholder",{default:"Select hardware"})),pe&256&&(Le.help=ce[8]("buttons.settings.hardware.help",{default:"Select the hardware type for this button."})),pe&256&&(Le.invalid=ce[8]("buttons.settings.hardware.invalid",{default:"Please select a hardware type."})),o.$set(Le);const Pe={};pe&256&&(Pe.label=ce[8]("buttons.settings.address.label",{default:"Address"})),pe&256&&(Pe.placeholder=ce[8]("buttons.settings.address.placeholder",{default:"Enter an address"})),pe&256&&(Pe.help=ce[8]("buttons.settings.address.help",{default:"Enter the phisycal GPIO pin number."})),pe&256&&(Pe.invalid=ce[8]("buttons.settings.address.invalid",{default:"The entered address is not valid. Enter a valid number between {min} and {max}.",values:{min:1,max:40}})),d.$set(Pe);const $e={};pe&256&&($e.label=ce[8]("buttons.settings.name.label",{default:"Name"})),pe&256&&($e.placeholder=ce[8]("buttons.settings.name.placeholder",{default:"Enter a name"})),pe&256&&($e.help=ce[8]("buttons.settings.name.help",{default:"Enter an easy to remember name."})),pe&256&&($e.invalid=ce[8]("buttons.settings.name.invalid",{default:"The entered name is not valid. It cannot be empty."})),f.$set($e);const Qe={};pe&128&&(Qe.value=ce[7].notification),pe&256&&(Qe.label=ce[8]("buttons.settings.notification.label",{default:"Notification"})),pe&256&&(Qe.help=ce[8]("buttons.settings.notification.help",{default:"Toggle to enable notification messages."})),v.$set(Qe);const Xe={};pe&256&&(Xe.label=ce[8]("buttons.settings.current.label",{default:"Current"})),pe&256&&(Xe.placeholder=ce[8]("buttons.settings.current.placeholder",{default:"Current value"})),pe&256&&(Xe.help=ce[8]("buttons.settings.current.help",{default:"The current state of the button."})),w.$set(Xe);const Be={};pe&128&&(Be.value=(fe=ce[7].calibration)==null?void 0:fe.inverse),pe&256&&(Be.label=ce[8]("buttons.settings.calibration.inverse.label",{default:"Inverse value"})),pe&256&&(Be.help=ce[8]("buttons.settings.calibration.inverse.help",{default:"Toggle to inverse the remote value."})),R.$set(Be);const tt={};pe&32&&(tt.required=ce[5]==="ldr"),pe&32&&(tt.disabled=ce[5]!=="ldr"),pe&256&&(tt.label=ce[8]("buttons.settings.calibration.ldr_capacitor.label",{default:"Capacitor value in \xB5F"})),pe&256&&(tt.placeholder=ce[8]("buttons.settings.calibration.ldr_capacitor.placeholder",{default:"Enter the capacitor value in \xB5F"})),pe&256&&(tt.help=ce[8]("buttons.settings.calibration.ldr_capacitor.help",{default:"Enter the capacitor value in \xB5F as this will influence the light calculation."})),pe&256&&(tt.invalid=ce[8]("buttons.settings.calibration.ldr_capacitor.invalid",{default:"The entered capacitor value is not valid. Enter a valid number between {min} and {max}.",values:{min:1,max:100}})),B.$set(tt),(!Q||pe&32)&&_e(N,"d-none",ce[5]!=="ldr");const me={};pe&32&&(me.disabled=ce[5]!=="remote"),pe&256&&(me.label=ce[8]("buttons.settings.calibration.timeout.label",{default:"Time out in seconds"})),pe&256&&(me.placeholder=ce[8]("buttons.settings.calibration.timeout.placeholder",{default:"Enter the time out in seconds"})),pe&256&&(me.help=ce[8]("buttons.settings.calibration.timeout.help",{default:"Enter the timeout in seconds between remote checks."})),pe&256&&(me.invalid=ce[8]("buttons.settings.calibration.timeout.invalid",{default:"The entered timeout value is not valid. Enter a valid number between {min} and {max}.",values:{min:1,max:100}})),ne.$set(me),(!Q||pe&32)&&_e(K,"d-none",ce[5]!=="remote"),(!Q||pe&8)&&_e(e,"was-validated",ce[3])},i(ce){Q||(V(o.$$.fragment,ce),V(d.$$.fragment,ce),V(f.$$.fragment,ce),V(v.$$.fragment,ce),V(w.$$.fragment,ce),V(R.$$.fragment,ce),V(B.$$.fragment,ce),V(ne.$$.fragment,ce),Q=!0)},o(ce){X(o.$$.fragment,ce),X(d.$$.fragment,ce),X(f.$$.fragment,ce),X(v.$$.fragment,ce),X(w.$$.fragment,ce),X(R.$$.fragment,ce),X(B.$$.fragment,ce),X(ne.$$.fragment,ce),Q=!1},d(ce){ce&&j(e),we(o),we(d),we(f),we(v),we(w),we(R),we(B),we(ne),i[18](null),ue=!1,oe()}}}function ise(i){let e,t,n=i[8]("buttons.settings.title",{default:"Button settings"})+"",a,r,s,o;return s=new Ns({props:{moreInfo:"https://theyosh.github.io/TerrariumPI/setup/#buttons"}}),{c(){e=P("i"),t=Z(),a=Te(n),r=Z(),ke(s.$$.fragment),x(e,"class","fas fa-thumbtack mr-2")},m(l,u){U(l,e,u),U(l,t,u),U(l,a,u),U(l,r,u),ye(s,l,u),o=!0},p(l,u){(!o||u&256)&&n!==(n=l[8]("buttons.settings.title",{default:"Button settings"})+"")&&Me(a,n)},i(l){o||(V(s.$$.fragment,l),o=!0)},o(l){X(s.$$.fragment,l),o=!1},d(l){l&&(j(e),j(t),j(a),j(r)),we(s,l)}}}function nse(i){let e,t,n,a=i[8]("modal.general.save",{default:"Save"})+"",r,s,o,l;return{c(){e=P("button"),t=P("span"),n=Z(),r=Te(a),x(t,"class","spinner-border spinner-border-sm"),x(t,"role","status"),x(t,"aria-hidden","true"),_e(t,"d-none",!i[9]),x(e,"type","button"),x(e,"class","btn btn-primary"),e.disabled=s=i[2]||i[9]},m(u,d){U(u,e,d),A(e,t),A(e,n),A(e,r),o||(l=Gt(e,"click",i[14]),o=!0)},p(u,d){d&512&&_e(t,"d-none",!u[9]),d&256&&a!==(a=u[8]("modal.general.save",{default:"Save"})+"")&&Me(r,a),d&516&&s!==(s=u[2]||u[9])&&(e.disabled=s)},d(u){u&&j(e),o=!1,l()}}}function ase(i){let e,t,n,a;function r(l){i[19](l)}function s(l){i[20](l)}let o={loading:i[2],$$slots:{actions:[nse],header:[ise],default:[tse]},$$scope:{ctx:i}};return i[0]!==void 0&&(o.show=i[0]),i[1]!==void 0&&(o.hide=i[1]),e=new Ho({props:o}),Kt.push(()=>bn(e,"show",r)),Kt.push(()=>bn(e,"hide",s)),{c(){ke(e.$$.fragment)},m(l,u){ye(e,l,u),a=!0},p(l,[u]){const d={};u&4&&(d.loading=l[2]),u&134218748&&(d.$$scope={dirty:u,ctx:l}),!t&&u&1&&(t=!0,d.show=l[0],vn(()=>t=!1)),!n&&u&2&&(n=!0,d.hide=l[1],vn(()=>n=!1)),e.$set(d)},i(l){a||(V(e.$$.fragment,l),a=!0)},o(l){X(e.$$.fragment,l),a=!1},d(l){we(e,l)}}}let I_=!0;function rse(i,e,t){let n,a,r;dt(i,Fi,B=>t(8,a=B));let s,o,l=null,u=!1,d=[],c=null,h=Si({});dt(i,h,B=>t(7,n=B));let f;const m=Ka(),g=()=>{m("save")},v=B=>{t(5,c=B)},b=(B,G)=>jt(this,null,function*(){if(t(3,u=!0),G.form.checkValidity()){t(2,l=!0),B=ha(f),B.address+="",delete B.value;try{yield F6(B,K=>B=K),gn(a("buttons.settings.save.ok.message",{default:"Button ''{name}'' is updated",values:{name:B.name}}),a("notification.form.save.ok.title",{default:"Save OK"})),I(),g()}catch(K){t(2,l=!1),Ti(K.message,a("notification.form.save.error.title",{default:"Save Error"}))}finally{t(3,u=!1)}}else{let K=a("buttons.settings.save.error.required_fields",{default:"Not all required fields are entered correctly."});K+=` '`+vo(f).join(`' '`)+"'",Ti(K,a("notification.form.save.error.title",{default:"Save Error"}))}}),{form:k,setFields:w,isSubmitting:y,createSubmitHandler:T,reset:S}=Fs({onSubmit:b});dt(i,y,B=>t(9,r=B));const _=T({onSubmit:b}),D=(B,G)=>jt(this,null,function*(){jt(this,null,function*(){yield O6(K=>t(4,d=K.map(ne=>({value:ne.hardware,text:ne.name})))),B&&(yield mm(B,K=>yi(h,n=K,n)),w(n)),t(2,l=!1)}),S(),yi(h,n=ha(f),n),t(3,u=!1),t(2,l=!0),s()}),I=()=>{setTimeout(()=>{t(2,l=!1)},1e3),o()};Wi(()=>{f.setAttribute("novalidate","novalidate")});const M=B=>v(B.detail);function R(B){Kt[B?"unshift":"push"](()=>{f=B,t(6,f)})}function F(B){s=B,t(0,s)}function N(B){o=B,t(1,o)}return[s,o,l,u,d,c,f,n,a,r,h,v,k,y,_,D,I,M,R,F,N]}class sse extends zt{constructor(e){super(),Nt(this,e,rse,ase,Ft,{show:15,hide:16})}get show(){return this.$$.ctx[15]}get hide(){return this.$$.ctx[16]}}function VI(i){let e,t,n;return t=new Mt({props:{type:"number",name:"calibration.dimmer_max_dim",step:"1",min:"0",label:i[9]("relays.settings.calibration.dimmer_max_dim.label",{default:"Maximum dimmer value"}),help:i[9]("relays.settings.calibration.dimmer_max_dim.help",{default:"Maximum dimmer value (Legacy)."}),invalid:i[9]("relays.settings.calibration.dimmer_max_dim.invalid",{default:"Please enter a minimum value of {value}.",values:{value:0}})}}),{c(){e=P("div"),ke(t.$$.fragment),x(e,"class","col-6 col-sm-6 col-md-6 col-lg-3")},m(a,r){U(a,e,r),ye(t,e,null),n=!0},p(a,r){const s={};r&512&&(s.label=a[9]("relays.settings.calibration.dimmer_max_dim.label",{default:"Maximum dimmer value"})),r&512&&(s.help=a[9]("relays.settings.calibration.dimmer_max_dim.help",{default:"Maximum dimmer value (Legacy)."})),r&512&&(s.invalid=a[9]("relays.settings.calibration.dimmer_max_dim.invalid",{default:"Please enter a minimum value of {value}.",values:{value:0}})),t.$set(s)},i(a){n||(V(t.$$.fragment,a),n=!0)},o(a){X(t.$$.fragment,a),n=!1},d(a){a&&j(e),we(t)}}}function ose(i){let e,t,n,a,r,s,o,l,u,d,c,h,f,m,g,v,b,k,w,y,T,S,_,D,I,M,R,F,N,B,G,K,ne,ee,Y,Q,ue,oe,ie,ce,pe,Le,Pe=["brightpi-dimmer","PCA9685-dimmer","remote-dimmer","script-dimmer","sonoff_d1-dimmer"].indexOf(i[6])===-1,$e,Qe,Xe,Be,tt;o=new Ai({props:{name:"hardware",value:i[8].hardware,readonly:i[8].id&&i[8].id!=="",required:!0,options:i[4],label:i[9]("relays.settings.hardware.label",{default:"Hardware"}),placeholder:i[9]("relays.settings.hardware.placeholder",{default:"Select hardware"}),help:i[9]("relays.settings.hardware.help",{default:"Select the hardware type for this relay."}),invalid:i[9]("relays.settings.hardware.invalid",{default:"Please select a hardware type."})}}),o.$on("change",i[18]),d=new Mt({props:{type:"text",name:"address",min:"1",max:"40",required:!0,readonly:i[6]==="brightpi-dimmer",label:i[9]("relays.settings.address.label",{default:"Address"}),placeholder:i[9]("relays.settings.address.placeholder",{default:"Enter an address"}),help:i[9]("relays.settings.address.help",{default:"For more information see online."}),invalid:i[9]("relays.settings.address.invalid",{default:"The entered address is not valid. It cannot be empty."})}}),f=new Mt({props:{type:"text",name:"name",required:!0,label:i[9]("relays.settings.name.label",{default:"Name"}),placeholder:i[9]("relays.settings.name.placeholder",{default:"Enter a name"}),help:i[9]("relays.settings.name.help",{default:"Enter an easy to remember name."}),invalid:i[9]("relays.settings.name.invalid",{default:"The entered name is not valid. It cannot be empty."})}}),k=new Mt({props:{type:"number",min:"0",step:"0.001",name:"wattage",required:!0,label:i[9]("relays.settings.wattage.label",{default:"Wattage"}),help:i[9]("relays.settings.wattage.help",{default:"Enter the (max) wattage when switched on."}),invalid:i[9]("relays.settings.wattage.invalid",{default:"Please enter a minimum value of {value}.",values:{value:0}})}}),T=new Mt({props:{type:"number",min:"0",step:"0.001",name:"flow",required:!0,label:i[9]("relays.settings.flow.label",{default:"Water flow"}),help:i[9]("relays.settings.flow.help",{default:"Enter the (max) water flow when switched on."}),invalid:i[9]("relays.settings.flow.invalid",{default:"Please enter a minimum value of {value}.",values:{value:0}})}}),D=new rs({props:{name:"notification",value:i[8].notification,label:i[9]("relays.settings.notification.label",{default:"Notification"}),help:i[9]("relays.settings.notification.help",{default:"Toggle to enable notification messages."})}}),R=new Mt({props:{type:"text",name:"value",readonly:!0,label:i[9]("relays.settings.current.label",{default:"Current"}),placeholder:i[9]("relays.settings.current.placeholder",{default:"Current value"}),help:i[9]("relays.settings.current.help",{default:"The current state of the relay."})}}),Y=new Mt({props:{type:"number",name:"calibration.dimmer_frequency",step:"1",min:"1",label:i[9]("relays.settings.calibration.dimmer_frequency.label",{default:"Dimmer frequency in Hz"}),help:i[9]("relays.settings.calibration.dimmer_frequency.help",{default:"The frequency on which the dimmer operates."}),invalid:i[9]("relays.settings.calibration.dimmer_frequency.invalid",{default:"Please enter a minimum value of {value}.",values:{value:0}})}}),oe=new Mt({props:{type:"number",name:"calibration.dimmer_max_power",step:"1",min:"1",max:"100",label:i[9]("relays.settings.calibration.dimmer_max_power.label",{default:"Max power in %"}),help:i[9]("relays.settings.calibration.dimmer_max_power.help",{default:"The maximum power for this dimmer."}),invalid:i[9]("relays.settings.calibration.dimmer_max_power.invalid",{default:"The entered value is not valid. Enter a valid number between {min} and {max}.",values:{min:1,max:40}})}}),pe=new Mt({props:{type:"number",name:"calibration.dimmer_offset",step:"0.1",min:"0",max:"100",label:i[9]("relays.settings.calibration.dimmer_offset.label",{default:"Dimmer offset in %"}),help:i[9]("relays.settings.calibration.dimmer_offset.help",{default:"The dimmer offset."}),invalid:i[9]("relays.settings.calibration.dimmer_offset.invalid",{default:"Please enter a minimum value of {value}.",values:{value:0}})}});let me=Pe&&VI(i);return{c(){e=P("form"),t=P("input"),a=Z(),r=P("div"),s=P("div"),ke(o.$$.fragment),l=Z(),u=P("div"),ke(d.$$.fragment),c=Z(),h=P("div"),ke(f.$$.fragment),m=Z(),g=P("div"),v=P("div"),b=P("div"),ke(k.$$.fragment),w=Z(),y=P("div"),ke(T.$$.fragment),S=Z(),_=P("div"),ke(D.$$.fragment),I=Z(),M=P("div"),ke(R.$$.fragment),F=Z(),N=P("div"),B=P("a"),B.innerHTML='
',G=Z(),K=P("div"),ne=P("div"),ee=P("div"),ke(Y.$$.fragment),Q=Z(),ue=P("div"),ke(oe.$$.fragment),ie=Z(),ce=P("div"),ke(pe.$$.fragment),Le=Z(),me&&me.c(),$e=Z(),Qe=P("button"),Qe.innerHTML="",x(t,"type","hidden"),x(t,"name","id"),t.disabled=n=i[8].id&&i[8].id!==""?null:!0,x(s,"class","col-12 col-sm-12 col-md-6 col-lg-2"),x(u,"class","col-12 col-sm-12 col-md-6 col-lg-2"),x(h,"class","col-12 col-sm-12 col-md-12 col-lg-3"),x(b,"class","col-6"),x(y,"class","col-6"),x(v,"class","row"),x(g,"class","col-12 col-sm-12 col-md-12 col-lg-3"),x(_,"class","col-6 col-sm-6 col-md-6 col-lg-1"),x(M,"class","col-6 col-sm-6 col-md-6 col-lg-1"),x(r,"class","row"),x(B,"data-toggle","collapse"),x(B,"href","#callibration"),x(B,"role","button"),x(B,"aria-expanded","false"),x(B,"aria-controls","callibration"),_e(B,"d-none",!i[5]),x(ee,"class","col-6 col-sm-6 col-md-6 col-lg-3"),_e(ee,"d-none",["brightpi-dimmer","remote-dimmer","script-dimmer","sonoff_d1-dimmer"].indexOf(i[6])!==-1),x(ue,"class","col-6 col-sm-6 col-md-6 col-lg-3"),x(ce,"class","col-6 col-sm-6 col-md-6 col-lg-3"),x(ne,"class","collapse row pt-3"),x(ne,"id","callibration"),x(K,"class","col"),x(N,"class","row button_callibration"),_e(N,"d-block",i[5]),_e(N,"d-none",!i[5]),x(Qe,"type","submit"),Ei(Qe,"display","none"),x(e,"class","needs-validation"),_e(e,"was-validated",i[3])},m(fe,Se){U(fe,e,Se),A(e,t),A(e,a),A(e,r),A(r,s),ye(o,s,null),A(r,l),A(r,u),ye(d,u,null),A(r,c),A(r,h),ye(f,h,null),A(r,m),A(r,g),A(g,v),A(v,b),ye(k,b,null),A(v,w),A(v,y),ye(T,y,null),A(r,S),A(r,_),ye(D,_,null),A(r,I),A(r,M),ye(R,M,null),A(e,F),A(e,N),A(N,B),A(N,G),A(N,K),A(K,ne),A(ne,ee),ye(Y,ee,null),A(ne,Q),A(ne,ue),ye(oe,ue,null),A(ne,ie),A(ne,ce),ye(pe,ce,null),A(ne,Le),me&&me.m(ne,null),A(e,$e),A(e,Qe),i[19](e),Xe=!0,Be||(tt=gs(i[13].call(null,e)),Be=!0)},p(fe,Se){(!Xe||Se&256&&n!==(n=fe[8].id&&fe[8].id!==""?null:!0))&&(t.disabled=n);const Re={};Se&256&&(Re.value=fe[8].hardware),Se&256&&(Re.readonly=fe[8].id&&fe[8].id!==""),Se&16&&(Re.options=fe[4]),Se&512&&(Re.label=fe[9]("relays.settings.hardware.label",{default:"Hardware"})),Se&512&&(Re.placeholder=fe[9]("relays.settings.hardware.placeholder",{default:"Select hardware"})),Se&512&&(Re.help=fe[9]("relays.settings.hardware.help",{default:"Select the hardware type for this relay."})),Se&512&&(Re.invalid=fe[9]("relays.settings.hardware.invalid",{default:"Please select a hardware type."})),o.$set(Re);const je={};Se&64&&(je.readonly=fe[6]==="brightpi-dimmer"),Se&512&&(je.label=fe[9]("relays.settings.address.label",{default:"Address"})),Se&512&&(je.placeholder=fe[9]("relays.settings.address.placeholder",{default:"Enter an address"})),Se&512&&(je.help=fe[9]("relays.settings.address.help",{default:"For more information see online."})),Se&512&&(je.invalid=fe[9]("relays.settings.address.invalid",{default:"The entered address is not valid. It cannot be empty."})),d.$set(je);const Ge={};Se&512&&(Ge.label=fe[9]("relays.settings.name.label",{default:"Name"})),Se&512&&(Ge.placeholder=fe[9]("relays.settings.name.placeholder",{default:"Enter a name"})),Se&512&&(Ge.help=fe[9]("relays.settings.name.help",{default:"Enter an easy to remember name."})),Se&512&&(Ge.invalid=fe[9]("relays.settings.name.invalid",{default:"The entered name is not valid. It cannot be empty."})),f.$set(Ge);const qe={};Se&512&&(qe.label=fe[9]("relays.settings.wattage.label",{default:"Wattage"})),Se&512&&(qe.help=fe[9]("relays.settings.wattage.help",{default:"Enter the (max) wattage when switched on."})),Se&512&&(qe.invalid=fe[9]("relays.settings.wattage.invalid",{default:"Please enter a minimum value of {value}.",values:{value:0}})),k.$set(qe);const We={};Se&512&&(We.label=fe[9]("relays.settings.flow.label",{default:"Water flow"})),Se&512&&(We.help=fe[9]("relays.settings.flow.help",{default:"Enter the (max) water flow when switched on."})),Se&512&&(We.invalid=fe[9]("relays.settings.flow.invalid",{default:"Please enter a minimum value of {value}.",values:{value:0}})),T.$set(We);const Ue={};Se&256&&(Ue.value=fe[8].notification),Se&512&&(Ue.label=fe[9]("relays.settings.notification.label",{default:"Notification"})),Se&512&&(Ue.help=fe[9]("relays.settings.notification.help",{default:"Toggle to enable notification messages."})),D.$set(Ue);const nt={};Se&512&&(nt.label=fe[9]("relays.settings.current.label",{default:"Current"})),Se&512&&(nt.placeholder=fe[9]("relays.settings.current.placeholder",{default:"Current value"})),Se&512&&(nt.help=fe[9]("relays.settings.current.help",{default:"The current state of the relay."})),R.$set(nt),(!Xe||Se&32)&&_e(B,"d-none",!fe[5]);const ct={};Se&512&&(ct.label=fe[9]("relays.settings.calibration.dimmer_frequency.label",{default:"Dimmer frequency in Hz"})),Se&512&&(ct.help=fe[9]("relays.settings.calibration.dimmer_frequency.help",{default:"The frequency on which the dimmer operates."})),Se&512&&(ct.invalid=fe[9]("relays.settings.calibration.dimmer_frequency.invalid",{default:"Please enter a minimum value of {value}.",values:{value:0}})),Y.$set(ct),(!Xe||Se&64)&&_e(ee,"d-none",["brightpi-dimmer","remote-dimmer","script-dimmer","sonoff_d1-dimmer"].indexOf(fe[6])!==-1);const mt={};Se&512&&(mt.label=fe[9]("relays.settings.calibration.dimmer_max_power.label",{default:"Max power in %"})),Se&512&&(mt.help=fe[9]("relays.settings.calibration.dimmer_max_power.help",{default:"The maximum power for this dimmer."})),Se&512&&(mt.invalid=fe[9]("relays.settings.calibration.dimmer_max_power.invalid",{default:"The entered value is not valid. Enter a valid number between {min} and {max}.",values:{min:1,max:40}})),oe.$set(mt);const Je={};Se&512&&(Je.label=fe[9]("relays.settings.calibration.dimmer_offset.label",{default:"Dimmer offset in %"})),Se&512&&(Je.help=fe[9]("relays.settings.calibration.dimmer_offset.help",{default:"The dimmer offset."})),Se&512&&(Je.invalid=fe[9]("relays.settings.calibration.dimmer_offset.invalid",{default:"Please enter a minimum value of {value}.",values:{value:0}})),pe.$set(Je),Se&64&&(Pe=["brightpi-dimmer","PCA9685-dimmer","remote-dimmer","script-dimmer","sonoff_d1-dimmer"].indexOf(fe[6])===-1),Pe?me?(me.p(fe,Se),Se&64&&V(me,1)):(me=VI(fe),me.c(),V(me,1),me.m(ne,null)):me&&(Pt(),X(me,1,1,()=>{me=null}),Ot()),(!Xe||Se&32)&&_e(N,"d-block",fe[5]),(!Xe||Se&32)&&_e(N,"d-none",!fe[5]),(!Xe||Se&8)&&_e(e,"was-validated",fe[3])},i(fe){Xe||(V(o.$$.fragment,fe),V(d.$$.fragment,fe),V(f.$$.fragment,fe),V(k.$$.fragment,fe),V(T.$$.fragment,fe),V(D.$$.fragment,fe),V(R.$$.fragment,fe),V(Y.$$.fragment,fe),V(oe.$$.fragment,fe),V(pe.$$.fragment,fe),V(me),Xe=!0)},o(fe){X(o.$$.fragment,fe),X(d.$$.fragment,fe),X(f.$$.fragment,fe),X(k.$$.fragment,fe),X(T.$$.fragment,fe),X(D.$$.fragment,fe),X(R.$$.fragment,fe),X(Y.$$.fragment,fe),X(oe.$$.fragment,fe),X(pe.$$.fragment,fe),X(me),Xe=!1},d(fe){fe&&j(e),we(o),we(d),we(f),we(k),we(T),we(D),we(R),we(Y),we(oe),we(pe),me&&me.d(),i[19](null),Be=!1,tt()}}}function lse(i){let e,t,n=i[9]("relays.settings.title",{default:"Relay settings"})+"",a,r,s,o;return s=new Ns({props:{moreInfo:"https://theyosh.github.io/TerrariumPI/setup/#relays"}}),{c(){e=P("i"),t=Z(),a=Te(n),r=Z(),ke(s.$$.fragment),x(e,"class","fas fa-thumbtack mr-2")},m(l,u){U(l,e,u),U(l,t,u),U(l,a,u),U(l,r,u),ye(s,l,u),o=!0},p(l,u){(!o||u&512)&&n!==(n=l[9]("relays.settings.title",{default:"Relay settings"})+"")&&Me(a,n)},i(l){o||(V(s.$$.fragment,l),o=!0)},o(l){X(s.$$.fragment,l),o=!1},d(l){l&&(j(e),j(t),j(a),j(r)),we(s,l)}}}function use(i){let e,t,n,a=i[9]("modal.general.save",{default:"Save"})+"",r,s,o,l;return{c(){e=P("button"),t=P("span"),n=Z(),r=Te(a),x(t,"class","spinner-border spinner-border-sm"),x(t,"role","status"),x(t,"aria-hidden","true"),_e(t,"d-none",!i[10]),x(e,"type","button"),x(e,"class","btn btn-primary"),e.disabled=s=i[2]||i[10]},m(u,d){U(u,e,d),A(e,t),A(e,n),A(e,r),o||(l=Gt(e,"click",i[15]),o=!0)},p(u,d){d&1024&&_e(t,"d-none",!u[10]),d&512&&a!==(a=u[9]("modal.general.save",{default:"Save"})+"")&&Me(r,a),d&1028&&s!==(s=u[2]||u[10])&&(e.disabled=s)},d(u){u&&j(e),o=!1,l()}}}function dse(i){let e,t,n,a;function r(l){i[20](l)}function s(l){i[21](l)}let o={loading:i[2],$$slots:{actions:[use],header:[lse],default:[ose]},$$scope:{ctx:i}};return i[0]!==void 0&&(o.show=i[0]),i[1]!==void 0&&(o.hide=i[1]),e=new Ho({props:o}),Kt.push(()=>bn(e,"show",r)),Kt.push(()=>bn(e,"hide",s)),{c(){ke(e.$$.fragment)},m(l,u){ye(e,l,u),a=!0},p(l,[u]){const d={};u&4&&(d.loading=l[2]),u&268437500&&(d.$$scope={dirty:u,ctx:l}),!t&&u&1&&(t=!0,d.show=l[0],vn(()=>t=!1)),!n&&u&2&&(n=!0,d.hide=l[1],vn(()=>n=!1)),e.$set(d)},i(l){a||(V(e.$$.fragment,l),a=!0)},o(l){X(e.$$.fragment,l),a=!1},d(l){we(e,l)}}}function cse(i,e,t){let n,a,r;dt(i,Fi,G=>t(9,a=G));let s,o,l=!1,u=!1,d=[],c=!1,h=null,f=Si({});dt(i,f,G=>t(8,n=G));let m;const g=Ka(),v=()=>{g("save")},b=G=>{t(6,h=G),h==="brightpi-dimmer"&&t(7,m.elements.address.value="fixed",m),t(5,c=h.endsWith("-dimmer"))},k=(G,K)=>jt(this,null,function*(){if(t(3,u=!0),K.form.checkValidity()){t(2,l=!0),G=ha(m),G.address+="",delete G.value,delete G.dimmer,Object.values(G.calibration).some(Boolean)||(G.calibration={});try{yield M6(G,ne=>G=ne),gn(a("relays.settings.save.ok.message",{default:"Relay ''{name}'' is updated",values:{name:G.name}}),a("notification.form.save.ok.title",{default:"Save OK"})),M(),v()}catch(ne){t(2,l=!1),Ti(ne.message,a("notification.form.save.error.title",{default:"Save Error"}))}finally{t(3,u=!1)}}else{let ne=a("relays.settings.save.error.required_fields",{default:"Not all required fields are entered correctly."});ne+=` diff --git a/public/main.js.gz b/public/main.js.gz index bd6a2be81..ae5881af6 100644 Binary files a/public/main.js.gz and b/public/main.js.gz differ