(()=>{var W=Object.defineProperty;var A=Object.getOwnPropertySymbols;var G=Object.prototype.hasOwnProperty,K=Object.prototype.propertyIsEnumerable;var D=(r,e,t)=>e in r?W(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,g=(r,e)=>{for(var t in e||(e={}))G.call(e,t)&&D(r,t,e[t]);if(A)for(var t of A(e))K.call(e,t)&&D(r,t,e[t]);return r};var N=(r,e,t)=>new Promise((i,s)=>{var a=o=>{try{c(t.next(o))}catch(d){s(d)}},n=o=>{try{c(t.throw(o))}catch(d){s(d)}},c=o=>o.done?i(o.value):Promise.resolve(o.value).then(a,n);c((t=t.apply(r,e)).next())});var v,S,q;function Q(){v.dataset.navState="displayed",v.classList.remove("state-off"),v.classList.add("state-on"),S.classList.add("a-show")}function R(){v.dataset.navState="hidden",v.classList.remove("state-on"),v.classList.add("state-off"),S.classList.add("a-hide"),S.classList.remove("a-show"),setTimeout(()=>{S.classList.remove("a-hide")},300)}function M(){console.log("HUD init"),v=document.querySelector(".hud .nav-toggle"),S=document.querySelector(".hud .navigation"),q=document.querySelector(".hud .reload-screen"),v.addEventListener("click",r=>{r.currentTarget.dataset.navState!="displayed"?Q():R()}),q.addEventListener("click",r=>{Screens.reload()})}var w=class{constructor(e,t,i){this.screens={},this.routesMap={},this.currentScreen=null,this.eventsHandlers={switch:[],reload:[]},this.screensContainer=document.querySelector(e),this.loader=document.querySelector(t),this.errorScreen=document.querySelector(i),console.log("Screens Init")}add(e,t){if(typeof t!="object")return console.error("Screens: screens must be object");if(typeof(t==null?void 0:t.alias)=="undefined")return console.error("Screens: undefined alias");if(typeof(t==null?void 0:t.renderer)!="function")return console.error("Screens: renderer must be function");this.screens[t.alias]=g({route:e},t),this.routesMap[e]=t.alias}switch(e){var i;if(this.runSwitchHandlers(e),this.hideErrorScreen(),this.showLoader(),(i=this.currentScreen)==null||i.DOMObject.remove(),typeof this.screens[e]=="undefined"){console.error(`Screens: "${e}" not found`);return}this.currentScreen=this.screens[e];let t=document.createElement("div");t.classList.add("screen"),t.id=e,t.dataset.alias=e,t.innerHTML=this.currentScreen.renderer(),this.currentScreen.DOMObject=t,this.screensContainer.append(this.currentScreen.DOMObject),this.currentScreen.initer(this)}reload(){this.currentScreen&&(this.runReloadHandlers(this.currentScreen.alias),this.switch(this.currentScreen.alias))}routing(){setInterval(()=>{let e=document.location.hash.split("#!")[1];if(typeof e=="undefined"||e=="")return;let t=typeof this.routesMap[e]=="undefined"?"not-found-screen":this.routesMap[e];(!this.currentScreen||this.currentScreen.alias!=t)&&this.switch(t)},50)}ready(){this.currentScreen!=null&&(this.currentScreen.DOMObject||(this.currentScreen.DOMObject=document.getElementsById(this.currentScreen.alias)),this.hideLoader(),this.currentScreen.DOMObject.classList.add("a-show"))}error(e,t){var i;(i=this.currentScreen)==null||i.DOMObject.remove(),this.errorScreen.querySelector(".error-title").innerHTML=e,this.errorScreen.querySelector(".error-text").innerHTML=t,this.showErrorScreen()}hideLoader(){this.loader.classList.remove("a-show")}showLoader(){this.loader.classList.add("a-show")}showErrorScreen(){this.errorScreen.classList.add("a-show")}hideErrorScreen(){this.errorScreen.classList.remove("a-show")}getScreens(){return this.screens}getRoutesMap(){return this.routesMap}onSwitch(e){this.eventsHandlers.switch.push(e)}onReaload(e){this.eventsHandlers.reload.push(e)}runSwitchHandlers(e){for(let t of this.eventsHandlers.switch)t(this,e)}runReloadHandlers(e){for(let t of this.eventsHandlers.reload)t(this,e)}};function V(r,e,t,i){return`
<div class="toast toast-${r}" role="alert">
<div class="toast-content">
<h4 class="toast-title">${e} ${t}</h4>
<p class="toast-text">${i}</p>
</div>
<button class="btn-icon toast-close" type="button" aria-label="Close">\u2715</button>
</div>
`}function X(r,e){if(e!=null&&e.alone&&document.querySelectorAll(".toast").forEach(t=>t.close()),r.close=function(){this.classList.add("a-hide"),setTimeout(()=>{this.remove()},300)},r.querySelector(".toast-close").addEventListener("click",t=>{r.close()}),r.show=function(){document.querySelector("body").append(r),setTimeout(()=>{r.classList.add("a-show")},10)},Screens.onSwitch((t,i)=>{setTimeout(()=>{r==null||r.close()},1e4)}),r.addEventListener("mouseover",t=>r.ishovered=!0),r.addEventListener("mouseout",t=>r.ishovered=!1),e!=null&&e.lifetime){console.log(e);let t=setInterval(()=>{r.ishovered||(r.close(),clearInterval(t))},e==null?void 0:e.lifetime)}return r}function y(r,e,t,i,s){let a=document.createElement("div");return a.innerHTML=V(r,e,t,i),X(a.childNodes[1],s)}function Z(r,e,t){return typeof t=="undefined"&&(t={}),typeof t.lifetime=="undefined"&&(t.lifetime=4e3),typeof t.alone=="undefined"&&(t.alone=!0),y("success",'<i class="ph ph-check-circle"></i>',r,e,t)}function ee(r,e,t){return y("info",'<i class="ph ph-info"></i>',r,e,t)}function te(r,e,t){return y("warning",'<i class="ph ph-warning"></i>',r,e,t)}function C(r,e,t){return y("danger",'<i class="ph ph-warning-octagon"></i>',r,e,t)}var x={create:y,createInfo:ee,createSuccess:Z,createWarning:te,createError:C,createDanger:C};function re(r){let e="";for(let t of r){let i="",s="";t.route&&(i=`<a class="list-action" href="${t.route}">`,s="</a>"),e+=`
<li class="list-item ${t.is_active?"list-item-active":""}">
${i}${t.content}${s}
</li>
`}return`
<div class="sidebar block">
<ul class="list list-nav">
${e}
</ul>
</div>
`}function ie(r,e,t,i){let s='<tr class="table-row">',a=0;for(let o in e)s+=`<th scope="col">${e[o]}</th>`,a++;s+="</tr>";let n="";for(let o of t){n+='<tr class="table-row">';for(let d in e)n+=`<td>${o[d]}</td>`;n+="</tr>"}let c="";return typeof i!="undefined"&&(c=`
<tfoot class="table-foot">
<tr class="table-row">
<td colspan="${a}">
${i}
</td>
</tr>
</tfoot>
`),`
<table class="table devices-lists">
<caption class="table-caption">${r}</caption>
<thead class="table-head">${s}</thead>
<tbody class="table-body">${n}</tbody>
${c}
</table>
`}function U(r,e,t){let i=document.createElement(r);for(let[s,a]of Object.entries(e))s==="class"?i.className=a:s==="dataset"?Object.assign(i.dataset,a):i.setAttribute(s,a);return i.innerHTML=typeof t!="undefined"?t:"",i}function se(r,e){return["primary","success","secondary","info","warning","error","danger"].indexOf(r)<0?console.error("createAlert()","Error of type: "+r):U("div",{class:`alert alert-${r}`},e)}function ne(r){let e={device_name:"name",device_hard_id:"device_id",device_ip:"ip",device_type:"type",ip_address:"ip",mac_address:"mac",device_mac:"mac",core_version:"firmware_core_version"},t={};for(let i in r){if(typeof e[i]!="undefined"){t[e[i]]=r[i];continue}t[i]=r[i]}return t}var j={template:{sidebarNav:re,table:ie,createElement:U,createAlert:se},unification:{deviceFieldsUnification:ne}};var $=class{constructor(e){this.core=e}actions_list(e){return this.core.api_get("/api/v1/scripts/actions/list",e)}scopes_list(e){return this.core.api_get("/api/v1/scripts/scopes/list",e)}regular_list(e){return this.core.api_get("/api/v1/scripts/regular/list",e)}scope_get_by_filename(e,t){let i=encodeURIComponent(String(e||""));return this.core.api_get(`/api/v1/scripts/scopes/name/${i}`,t,{})}scope_create(e,t){return this.core.api_post("/api/v1/scripts/scopes/new",e,t)}scope_update(e,t){return this.core.api_post("/api/v1/scripts/scopes/update",e,t)}action_enable(e,t){let i=encodeURIComponent(String(e||""));return this.core.api_get(`/api/v1/scripts/actions/alias/${i}/enable`,t)}action_disable(e,t){let i=encodeURIComponent(String(e||""));return this.core.api_get(`/api/v1/scripts/actions/alias/${i}/disable`,t)}regular_enable(e,t){let i=encodeURIComponent(String(e||""));return this.core.api_get(`/api/v1/scripts/actions/regular/${i}/enable`,t)}regular_disable(e,t){let i=encodeURIComponent(String(e||""));return this.core.api_get(`/api/v1/scripts/actions/regular/${i}/disable`,t)}scope_enable(e,t){let i=encodeURIComponent(String(e||""));return this.core.api_get(`/api/v1/scripts/actions/scope/${i}/enable`,t)}scope_disable(e,t){let i=encodeURIComponent(String(e||""));return this.core.api_get(`/api/v1/scripts/actions/scope/${i}/disable`,t)}scope_remove(e,t){let i=encodeURIComponent(String(e||""));return this.core.api_get(`/api/v1/scripts/scopes/name/${i}/remove`,t)}run(e,t){return this.core.api_post("/api/v1/scripts/actions/run",e,t)}};var E=class{constructor(e){this.core=e}list(e){return this.core.api_get("/api/v1/devices/list",e)}scanning_setup(e){return this.core.api_get("/api/v1/devices/scanning/setup",e)}scanning_all(e){return this.core.api_get("/api/v1/devices/scanning/all",e)}setup_new_device(e,t){return this.core.api_post("/api/v1/devices/setup/new-device",e,t)}info(e,t){let i=encodeURIComponent(String(e));return this.core.api_get(`/api/v1/devices/id/${i}/info`,t)}get(e,t){let i=encodeURIComponent(String(e));return this.core.api_get(`/api/v1/devices/id/${i}`,t)}status(e,t){let i=encodeURIComponent(String(e));return this.core.api_get(`/api/v1/devices/id/${i}/status`,t)}action(e,t){return this.core.api_post("/api/v1/devices/action",e,t)}remove(e,t){let i=encodeURIComponent(String(e));return this.core.api_get(`/api/v1/devices/id/${i}/remove`,t)}reboot(e,t){let i=encodeURIComponent(String(e));return this.core.api_get(`/api/v1/devices/id/${i}/reboot`,t)}};var T=class{constructor(e){this.core=e}list(e){return this.core.api_get("/api/v1/areas/list",e)}inner_list(e,t){let i=encodeURIComponent(String(e));return this.core.api_get(`/api/v1/areas/id/${i}/list`,t)}new_area(e,t){return this.core.api_post("/api/v1/areas/new-area",e,t)}remove(e,t){let i=encodeURIComponent(String(e));return this.core.api_get(`/api/v1/areas/id/${i}/remove`,t)}place_in_area(e,t){return this.core.api_post("/api/v1/areas/place-in-area",e,t)}update_display_name(e,t){return this.core.api_post("/api/v1/areas/update-display-name",e,t)}update_alias(e,t){return this.core.api_post("/api/v1/areas/update-alias",e,t)}devices(e,t){let i=encodeURIComponent(String(e));return this.core.api_get(`/api/v1/areas/id/${i}/devices`,t)}unassign_from_area(e,t){let i=encodeURIComponent(String(e));return this.core.api_get(`/api/v1/areas/id/${i}/unassign-from-area`,t)}types_list(e){return this.core.api_get("/api/v1/areas/types/list",e)}reboot_devices(e,t){if(e==null)return this.core.api_get("/api/v1/areas/reboot_devices",t);let i=encodeURIComponent(String(e));return this.core.api_get(`/api/v1/areas/id/${i}/reboot_devices`,t)}};function P(r){if(!r||typeof r!="object")return"";let e=new URLSearchParams;Object.entries(r).forEach(([i,s])=>{s!=null&&e.append(i,String(s))});let t=e.toString();return t?`?${t}`:""}function ae(r,e){let t=String(r||"").replace(/\/+$/,""),i=String(e||"").replace(/^\/+/,"");return`${t}/${i}`}function oe(r){try{return{ok:!0,data:JSON.parse(r)}}catch(e){return{ok:!1,error:e}}}var L=class{constructor(e){this.base_url=(e==null?void 0:e.base_url)||"",this.token=(e==null?void 0:e.token)||"",this.timeout_ms=Number.isFinite(e==null?void 0:e.timeout_ms)?e.timeout_ms:15e3,this.default_headers=(e==null?void 0:e.default_headers)||{},this.on_unauthorized=typeof(e==null?void 0:e.on_unauthorized)=="function"?e.on_unauthorized:null,this.proxy_path=(e==null?void 0:e.proxy_path)||"",this.scripts=new $(this),this.devices=new E(this),this.areas=new T(this)}set_base_url(e){this.base_url=e||""}set_token(e){this.token=e||""}set_proxy_path(e){this.proxy_path=e||""}_wrap_path(e,t){if(!this.proxy_path)return t?`${e}${P(t)}`:e;let i=g({path:e},t||{});return`${this.proxy_path}${P(i)}`}request(e,t,i,s,a){let n=typeof s=="function"?s:()=>{},c=ae(this.base_url,t),o=new AbortController,d=Number.isFinite(a==null?void 0:a.timeout_ms)?a.timeout_ms:this.timeout_ms,u=setTimeout(()=>o.abort(),d),m=g(g({},this.default_headers),(a==null?void 0:a.headers)||{});this.token&&(m.Authorization=`Bearer ${this.token}`);let b;i!=null&&(m["Content-Type"]="application/json",b=JSON.stringify(i)),fetch(c,{method:e,headers:m,body:b,signal:o.signal}).then(l=>N(this,null,function*(){clearTimeout(u);let f={url:c,method:e,status_code:l.status,headers:l.headers},p=yield l.text(),O=oe(p),h=O.ok?O.data:p;if(!l.ok){let _={type:"http_error",message:`HTTP ${l.status}`,status_code:l.status,raw:h};if((l.status===401||l.status===403)&&this.on_unauthorized)try{this.on_unauthorized({error:_,meta:f})}catch(H){}return n(_,null,f)}if(O.ok&&h&&typeof h=="object"){let _=h.status;if(_===!1||_==="error"){let H={type:"api_error",message:h.message||"API error",status_code:l.status,raw:h,field:h.field};return n(H,null,f)}}return n(null,h,f)})).catch(l=>{clearTimeout(u);let p=l&&(l.name==="AbortError"||String(l).includes("AbortError"))?{type:"timeout",message:`Timeout after ${d}ms`}:{type:"network_error",message:(l==null?void 0:l.message)||"Network error",details:l};return n(p,null,{url:c,method:e,status_code:0,headers:null})})}get(e,t,i){return this.request("GET",e,null,t,i)}post(e,t,i,s){return this.request("POST",e,t,i,s)}api_get(e,t,i,s){return this.get(this._wrap_path(e,i),t,s)}api_post(e,t,i,s,a){return this.post(this._wrap_path(e,s),t,i,a)}};function F(r,e){return console.log(r),Modals.create("device-popup",{title:`Device ${r.name}`,body:t=>{let i="";for(let s in r)i+=`
<tr class="table-row">
<th>${s}: </th>
<td>${r[s]}</td>
</tr>
`;return`
<div class="block">
<table class="table" style="border: 0">
<tbody class="table-body">
${i}
</tbody>
</table>
</div>
`},actions:t=>{let i=Helper.template.createElement("button",{class:"btn btn-primary"},"Close"),s=Helper.template.createElement("button",{class:"btn btn-warning with-icon"},'<i class="ph ph-arrow-clockwise"></i> Reboot'),a=Helper.template.createElement("button",{class:"btn btn-danger with-icon"},'<i class="ph ph-trash"></i> Remove');return i.addEventListener("click",n=>{t.close()}),s.addEventListener("click",n=>{e.devices.reboot(r.id,(c,o,d)=>{console.log("Reboot done"),t.close(),setTimeout(()=>{o?Toasts.createSuccess("Reboot successful",`Device: ${r.name}<br>
Alias: <b>${r.alias}</b>`).show():Toasts.createError("Reboot failed",`Device: ${r.name}<br>
Alias: <b>${r.alias}</b>`).show()},300)})}),a.addEventListener("click",n=>{confirmPopup("Are you sure you want to remove this device?",()=>{e.devices.remove(r.id,(c,o,d)=>{console.log("Was removed"),t.close(),setTimeout(()=>{Toasts.createSuccess("Removed",`
Device: ${r.name}<br>
Alias: <b>${r.alias}</b><br>
IP: <b>${r.ip}</b>
`).show()},300)})},()=>{console.log("CANCELED")})}),[i,s,a]}})}function z(r,e){return r=Helper.unification.deviceFieldsUnification(r),Modals.create("device-setup",{title:`Setup new device ${r.ip}`,body:t=>{let i="";for(let a in r)a[0]!="_"&&(i+=`
<tr class="table-row">
<th>${a}: </th>
<td>${r[a]}</td>
</tr>
`);return`
<div class="row g-6">
<div class="col device-info">
${`
<div class="block">
<table class="table" style="border: 0">
<tbody class="table-body">
${i}
</tbody>
</table>
</div>
`}
</div>
<div class="col setup-form w-100">
<div class="block form-group">
<label class="label">
Device alias
<i class="ph ph-asterisk"></i>
<input type="text" name="alias" class="input" placeholder="Input alias">
</label>
</div>
<div class="block form-group">
<label class="label">
Device name
<i class="ph ph-asterisk"></i>
<input type="text" name="name" class="input" placeholder="Input name">
</label>
</div>
<div class="block form-group">
<label class="label">
About device
<i class="ph ph-note-pencil"></i>
<textarea class="input" name="description" placeholder="Input description"></textarea>
</label>
</div>
<div class="alert-container"></div>
</div>
</div>
`},actions:t=>{let i=Helper.template.createElement("button",{class:"btn btn-primary"},"Cancel");i.addEventListener("click",a=>{t.close()});let s=Helper.template.createElement("button",{class:"btn btn-success with-icon"},'<i class="ph ph-gear"></i> Setup');return s.addEventListener("click",a=>{if(a.currentTarget.getAttribute("disabled"))return!1;let n={device_ip:r.ip},c=document.querySelector("#device-setup .setup-form");if(c.querySelectorAll("input[type='text']").forEach(u=>{u.dispatchEvent(new Event("input",{bubbles:!0}))}),c.querySelectorAll(".label.error").length)return!1;let o=c.querySelectorAll("input"),d=c.querySelector("textarea");for(let u of o)n[u.getAttribute("name")]=u.value;n[d.getAttribute("name")]=d.value,s.setAttribute("disabled","disabled"),s.classList.add("loading"),e.devices.setup_new_device(n,(u,m,b)=>{var l,f;if(s.removeAttribute("disabled"),s.classList.remove("loading"),(u==null?void 0:u.type)=="api_error"){if(console.error("ERR! sh_api.devices.setup_new_device",u.raw),(l=u.raw)!=null&&l.failed_fields)for(let p of u.raw.failed_fields)t.querySelector(`[name="${p}"]`).parentNode.classList.add("error");if((f=u.raw)!=null&&f.msg){let p=t.querySelector(".setup-form .alert-container");p.innerHTML="",p==null||p.append(Helper.template.createAlert("error",u.raw.msg))}return!1}if(!m)return!1;o.forEach(p=>p.value=""),d.value="",t.close(),setTimeout(()=>{Toasts.createSuccess("Setup successful",`Added new device <b>ID ${r.device_id}</b>`).show()},300)})}),[i,s]},onready:t=>{t.querySelector(".setup-form").querySelectorAll("input").forEach(s=>{s.addEventListener("input",a=>{var n;a.currentTarget.value.length?(a.currentTarget.parentNode.classList.remove("error"),(n=a.currentTarget.parentNode.parentNode.querySelector(".input-info.error"))==null||n.remove()):(a.currentTarget.parentNode.classList.add("error"),a.currentTarget.parentNode.parentNode.querySelector(".input-info.error")||a.currentTarget.parentNode.parentNode.append(Helper.template.createElement("div",{class:"input-info error"},'<i class="ph ph-warning-circle"></i> Field cannot be empty')))})})}})}function J(r){return Helper.template.sidebarNav([{content:'<span class="list-label"><i class="ph ph-cpu"></i> Devices</span>',route:"/#!/devices",is_active:r=="devices"},{content:'<span class="list-label"><i class="ph ph-magnifying-glass"></i> Scanning</span>',route:"/#!/devices/scanning",is_active:r=="scanning"}])}function ce(r){return{alias:"devices",renderer:()=>`
<div class="container">
<div class="row g-6">
<div class="col sidebar-container">
${J("devices")}
</div>
<div class="col devices-container"></div>
</div>
</div>
`,initer:e=>{r.devices.list((t,i,s)=>{if(console.log("sh_api.devices.list",t,i,s),s.status_code!=200)return e.error("Server API ERROR","");let a=[];for(let n of i.data.devices){n=Helper.unification.deviceFieldsUnification(n);let c=n.connection_state=="active"?'<span class="badge badge-success">Online</span>':'<span class="badge badge-warning">Offline</span>';a.push({deviceName:n.name,alias:n.alias,status:c,ip:`<code class="code">${n.ip}</code>`,actions:`
<button
class="btn btn-secondary btn-small details-btn"
data-device='${JSON.stringify(n)}'
type="button"
>Details</button>
<button
class="btn btn-warning btn-small reboot-btn"
data-device-id="${n.id}"
data-device-name="${n.name}"
data-device-alias="${n.alias}"
type="button"
>Reboot</button>
`})}e.currentScreen.DOMObject.querySelector(".devices-container").innerHTML=Helper.template.table("Devices list",{deviceName:"Device name",alias:"Device alias",status:"Status",ip:"IP",actions:"Actions"},a,`<span class="table-meta">Total: <span class="total">${i.data.total}</span> devices</span>`),e.currentScreen.DOMObject.querySelectorAll(".reboot-btn").forEach(n=>{n.addEventListener("click",c=>{let o=c.currentTarget.dataset.deviceId,d=c.currentTarget.dataset.deviceName,u=c.currentTarget.dataset.deviceAlias;r.devices.reboot(o,(m,b,l)=>{console.log("Reboot done",m,b,l),b?Toasts.createSuccess("Reboot successful",`Device: ${d}<br>
Alias: <b>${u}</b>`).show():Toasts.createError("Reboot failed",`Device: ${d}<br>
Alias: <b>${u}</b>`).show()})})}),e.currentScreen.DOMObject.querySelectorAll(".details-btn").forEach(n=>{n.addEventListener("click",c=>{let o=JSON.parse(c.currentTarget.dataset.device);F(o,r).show()})}),e.ready()})}}}function le(r){return{alias:"devices-scanning",renderer:()=>`
<div class="container">
<div class="row g-6">
<div class="col sidebar-container">
${J("scanning")}
</div>
<div class="col devices-container"></div>
</div>
</div>
`,initer:e=>{r.devices.scanning_all((t,i,s)=>{if(console.log("sh_api.devices.scanning_all",t,i),s.status_code!=200)return e.error("Server API ERROR","");let a=[];for(let n of i.data.devices)n=Helper.unification.deviceFieldsUnification(n),a.push({deviceId:n.device_id,deviceName:n.name,deviceType:n.type,status:`<span class="badge badge-primary">${n.status}</span>`,ip:`<code class="code">${n.ip}</code>`,mac:`<code class="code">${n.mac}</code>`,wifiSignal:n.wifi_signal,actions:n.status=="setup"?`
<button
class="btn btn-secondary btn-small setup-btn"
data-device='${JSON.stringify(n)}'
type="button"
>Setup</button>
`:""});e.currentScreen.DOMObject.querySelector(".devices-container").innerHTML=Helper.template.table("Found devices",{deviceId:"Device ID",deviceName:"Device name",deviceType:"Type",status:"Status",ip:"IP",mac:"Mac",wifiSignal:"Signal",actions:"Actions"},a,`<span class="table-meta">Total: <span class="total">${i.data.devices.length}</span> devices</span>`),e.currentScreen.DOMObject.querySelectorAll(".setup-btn").forEach(n=>{n.addEventListener("click",c=>{let o=JSON.parse(c.currentTarget.dataset.device);z(o,r).show()})}),e.ready()})}}}var I={list:ce,scanning:le};function B(r,e){r.add("/",{alias:"home",renderer:()=>'<h2 class="mt-4">Hello world</h2>',initer:t=>{setTimeout(()=>t.ready(),1e3),setTimeout(()=>t.error("Error","Just testing"),2e3)}}),r.add("-",{alias:"not-found-screen",renderer:()=>'<h2 class="mt-4">404 NOT FOUND</h2>',initer:t=>{t.ready()}}),r.add("/devices",I.list(e)),r.add("/devices/scanning",I.scanning(e))}function de(r,e,t){return`
<div class="modal" aria-hidden="true" id="${r}">
<div class="modal-backdrop"></div>
<div class="modal-panel" role="dialog" aria-modal="true" aria-labelledby="modal-title-basic">
<header class="modal-header">
<h4 class="modal-title" id="modal-title-basic">${e}</h4>
<button class="btn-icon modal-close" type="button" aria-label="Close">\u2715</button>
</header>
<div class="modal-body"></div>
<footer class="modal-footer">${t}</footer>
</div>
</div>
`}function ue(r,e){return r.show=function(){document.querySelector("body").append(r),setTimeout(()=>{this.classList.add("a-show")},10)},r.close=function(){this.classList.add("a-hide"),setTimeout(()=>{this.remove()},300)},r.querySelector(".modal-close").addEventListener("click",t=>{r.close()}),typeof e=="function"&&e(r),r}function pe(r,e){let t=e.title||"",i=e.footer||"",s=document.createElement("div");s.innerHTML=de(r,t,i);let a=s.childNodes[1],n=a.querySelector(".modal-body"),c=a.querySelector(".modal-footer");if(typeof e.actions=="function"){let o=e.actions(a);if(typeof o[0]=="object"){let d=document.createElement("div");d.classList.add("actions");for(let u of o)d.append(u);c.append(d)}}if(typeof e.body=="function"){let o=e.body(a);typeof o=="object"?n.append(o):typeof o=="string"&&(n.innerHTML=o)}return ue(a,e==null?void 0:e.onready)}var Y={create:pe};function k(r,e,t){Modals.create("confirm-popup",{title:"Requires confirmation",body:i=>`
<p>${r}</p>
`,actions:i=>{let s=Helper.template.createElement("button",{class:"btn btn-primary"},"NO"),a=Helper.template.createElement("button",{class:"btn btn-warning"},"YES");return s.addEventListener("click",n=>{i.close(),t()}),a.addEventListener("click",n=>{i.close(),e()}),[s,a]}}).show()}document.addEventListener("DOMContentLoaded",r=>{console.log("App init"),window.Toasts=x,window.Helper=j,window.Modals=Y,window.confirmPopup=k,M();let e=new L({base_url:"http://shswebclient.local",token:"YOUR_TOKEN",timeout_ms:3e3,on_unauthorized:({error:i})=>console.log("auth problem:",i),proxy_path:"/proxy.php"}),t=new w(".screens",".load-screen",".error-screen");B(t,e),console.log(t.getScreens()),t.onSwitch((i,s)=>{R()}),t.routing(),window.Screens=t});})();
//# sourceMappingURL=main.js.map