diff --git a/ChangeLog b/ChangeLog
index dab6e6bb..9476b058 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,26 +1,19 @@
# ChangeLog
-0.8.0alpha5
+0.8.0 (2024-06-27)
+ * Rpi5 first boot fix
* Fix power panic stuck at Resend
* Fix startup issues on RPi 5
* Wait a bit for printer to finish moves after waking up from power panic
* Sync files upon Upload finish
-
-0.8.0alpha4
* Support newer "//action" without the space
* Fix the new image missing the libcamera dependency
-
-0.8.0alpha3
* Improve message shown when preparing a power panic recovery
* Fix print stats not ignoring the skipped part of gcode after PP
* Ensure power panic info is written to persistent storage
-
-0.8.0alpha2
* Fix active tool not re-setting to None when told to
* Use printer mid-movement power panic recovery trick
* Fix the multi-instance proxy. Again
-
-0.8.0alpha1
* Stop showing the tune menu after connecting to the printer
* Use the 2023-10-10 Raspberry Pi OS base image for the image builder
* Decrease the severity of web server access log messages
diff --git a/prusa/link/__init__.py b/prusa/link/__init__.py
index f15b82fc..bbea1173 100644
--- a/prusa/link/__init__.py
+++ b/prusa/link/__init__.py
@@ -5,8 +5,8 @@
__application__ = "PrusaLink"
__vendor__ = "Prusa Research"
-__version__ = "0.8.0alpha5"
-__date__ = "14 May 2024"
+__version__ = "0.8.0"
+__date__ = "27 Jun 2024"
__copyright__ = "(c) 2024 Prusa 3D"
__author_name__ = "PrusaLink Developers"
__author_email__ = "link@prusa3d.cz"
diff --git a/prusa/link/static/index.html b/prusa/link/static/index.html
index b4ef2af9..2775bf9f 100644
--- a/prusa/link/static/index.html
+++ b/prusa/link/static/index.html
@@ -1 +1 @@
-
PrusaLink
PRUSA CONNECT connection status
NA
PRINTER connection status
NA
Printer status
NA
Nozzle Temperature
NANA
Heatbed
NANA
Printing Speed
NA
Z - Height
NA
Nozzle Diameter
NA
Dropdown
Welcome to the web interface of your Original Prusa i3
Please note that values are shown only when the printer is printing.
Welcome to the PrusaLink web interface.
Please insert the API key. You can find it in Settings -> Network -> Login credentials.
+PrusaLink
PRUSA CONNECT connection status
NA
PRINTER connection status
NA
Printer status
NA
Nozzle Temperature
NANA
Heatbed
NANA
Printing Speed
NA
Z - Height
NA
Nozzle Diameter
NA
Dropdown
Welcome to the web interface of your Original Prusa i3
Please note that values are shown only when the printer is printing.
Welcome to the PrusaLink web interface.
Please insert the API key. You can find it in Settings -> Network -> Login credentials.
`}const v=()=>{(0,s.LK)("/api/logs").then((e=>{const t=e.data.files;if(d){const e=t.find((e=>e.name===d));e&&(!c||e.date>c)&&(c=e.date,null===e.size?p((0,i.Iu)("logs.file-size-unknown")):e.size>u?p((0,i.Iu)("logs.file-too-large",{size:(0,l.Z)("size",u)})):(a=d,(0,s.iT)(`/api/logs/${a}`).then((e=>{const t=document.querySelector("ul.logs");t&&(e.data?t.innerHTML=e.data.split("\n").map((e=>m(e))).join(""):t.innerHTML=m((0,i.Iu)("logs.empty-file")))}))))}var a})).catch((e=>(0,r.S)(e)))},g={load:()=>{(0,s.LK)("/api/logs").then((e=>{const t=e.data.files,a=o.L.init("settings","log-list"),s=t.map((e=>e.name)),r=(0,i.Iu)("logs.select-file-placeholder");a.setOptions(s),a.select(r),a.onselect=e=>{!function(e){d=e,c=null,document.getElementById("download-log").onclick=()=>{(0,n.Z)(`/api/logs/${e}`,e)},v()}(e)}})).catch((e=>(0,r.S)(e)))},update:v}},3707:(e,t,a)=>{"use strict";a.d(t,{Kp:()=>o,Vp:()=>r,vU:()=>l});const i=document.getElementById("prusa-toast"),s={info:10500,success:10500,warning:10500,error:10500};function n({title:e,message:t,type:a,onClose:n}){const o=((e,t,a)=>{const i=document.getElementById("toast"),s=document.importNode(i.content,!0),n=s.querySelector("article");return n.className=a,s.querySelector("p").innerHTML=e,s.querySelector(".toast-body").innerHTML=t,n})(e,t,a),r=()=>{i.removeChild(o),n?.()};o.querySelector("span").addEventListener("click",(e=>{e.preventDefault(),r()}));const l=s[a];l&&setTimeout(r,l),i.appendChild(o)}function o(e,t,a){n({type:"warning",title:e,message:t,onClose:a})}function r(e,t,a){n({type:"success",title:e,message:t,onClose:a})}function l(e,t,a){n({type:"error",title:e,message:t,onClose:a})}},5489:(e,t,a)=>{"use strict";a.d(t,{NA:()=>n,ZP:()=>r,zR:()=>o});var i=a(646),s=a(5502);const n=(e,t)=>{try{const a=e.split(".");let i=t;for(;a.length;)i=i[a.shift()];return i}catch(e){return}},o=(e,t)=>{document.querySelectorAll(`[data-type="${e}"]`).forEach((e=>{const a=e.dataset.where,o=e.dataset.zeroes,r=a?n(a,t):t;e.innerHTML=(0,s.Z)(e.dataset.format,r),(0,i.QH)(e,"hide"===o&&!r)}))},r=o},2038:(e,t,a)=>{"use strict";a.d(t,{$:()=>r,i:()=>l});var i=a(8236),s=a(646),n=a(4800),o=a(7780);const r=(e,t,a)=>{const i=document.getElementById("modal-question"),n=document.importNode(i.content,!0),r=n.getElementById("modal-question-label"),l=document.createElement("p"),d=document.createElement("p");l.className="txt-sm my-md txt-bold",l.innerText=t,r.innerText=(0,o.Iu)("msg.file-exists.title"),d.innerText=(0,o.Iu)("msg.file-exists.overwrite-it"),r.parentNode.append(l),r.parentNode.append(d);const c=n.getElementById("yes"),u=n.getElementById("no");return u.addEventListener("click",e),c.addEventListener("click",(t=>{t.preventDefault(),(0,s.H)(c,!0),(0,s.H)(u,!0),a(),e()})),n},l=e=>{e.addEventListener("change",(t=>{e.checked&&e.getAttribute("data-link-state")!==n.PT.READY&&(0,i.o)((t=>((e,t)=>{const a=document.getElementById("modal-confirm"),i=document.importNode(a.content,!0),n=i.getElementById("yes"),o=i.getElementById("no");return n.addEventListener("click",(a=>{a.preventDefault(),(0,s.H)(n,!0),(0,s.H)(o,!0),t.checked=!0,e()})),o.addEventListener("click",(()=>{t.checked=!1,e()})),i})(t,e)),{timeout:0,closeOutside:!1})}))}},7049:(e,t,a)=>{"use strict";a.d(t,{Z:()=>k});var i=a(6648),s=a(1351),n=a(646),o=a(3707),r=a(7780),l=a(5951),d=a(2038),c=a(5489),u=a(4800),p=a(8495);let m=!1,v=null;function g(e){const t=p.Z.getContext(),a=u.cG.includes(e),i=document.querySelector("#upld-remote-start-pt");if(i&&(i.setAttribute("data-link-state",e),a||(i.checked=!1),(0,n.H)(i,!a)),t.transfer?.id){y("uploading"),(0,c.ZP)("download",t.transfer);const e=document.querySelector("#upld-remote .progress-bar");(0,l.g)(e,t.transfer.progress||0)}else y("choose")}function h(e){const t=e.data;if(![200,201,204].includes(e.code))return(0,s.S)(e),void f();if(t){if("FROM_WEB"===t.type){y("uploading"),(0,c.ZP)("download",{...t,time_start:t.time_transferring?Math.round((new Date).getTime()/1e3)-t.time_transferring:null});const e=document.querySelector("#upld-remote .progress-bar");(0,l.g)(e,t.progress||0)}}else{if(m)return function(){const e=(0,r.Iu)("ntf.success"),t=(0,r.Iu)("ntf.upld-suc",{file_name:""});(0,o.Vp)(e,t)}(),void f();y("choose")}}const b=(e,t,a,s)=>{if("local"===t)return e=e.split("?")[0].split("&")[0].split("#")[0],(0,i.LK)(`/api/download/${t}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({url:e,destination:a,...s})}).then((e=>function(e){y("uploading");const t=document.querySelector("#upld-remote .progress-bar");(0,l.g)(t,0);const a=(0,r.Iu)("ntf.success"),i=(0,r.Iu)("ntf.upld-start");(0,o.Vp)(a,i)}())).catch((e=>h(e)));(0,o.vU)("Can't upload to "+t,"You can upload only to local storage via remote upload!")};function f(){y("choose"),function(e){const t=document.querySelector("#upld-remote .progress-bar");t&&(0,l.g)(t,e||0)}(0),(0,c.ZP)("download",{}),v=null}function y(e){m="uploading"==e;const t=document.getElementById("upld-remote");t&&t.setAttribute("data-state",e)}const k={init:function(e,t){const a=document.getElementById("upld-remote");if(a){const i=a.querySelector("#remote-url"),s=a.querySelector("#remote-file-name"),o=a.querySelector("#upld-file"),r=a.querySelector("#upld-remote-start-pt");r&&(0,d.i)(r),o.onclick=()=>b(i.value,e,t,{to_print:r.checked,rename:s.value});const l=()=>{(0,n.H)(o,""===i.value)};l(),i.oninput=l}g()},update:g,get isUploading(){return m}}},7838:(e,t,a)=>{"use strict";a.r(t),a.d(t,{context:()=>Ve,default:()=>Xe});var i=a(7780);const s=500;let n=100,o=new Map;const r=(e,t)=>{o=e,n=t};function l(){const e=document.getElementById("graph");e&&(0==e.childElementCount&&function(){const e=document.getElementById("graph-template"),t=document.importNode(e.content,!0);document.getElementById("graph").appendChild(t),(0,i.ot)("graph")}(),o.forEach(((e,t)=>{!function(e,t){const a=(new Date).getTime();let i=[];if(e.length>1){let t=e[0],o=s-2.66*(a-t[0]-1e4)/1e3;for(let e=1;e1&&e[1][0]{var n=new XMLHttpRequest;const o=()=>{s(void 0)};!function(e,t){if(t){const a=e=>{if(!e.lengthComputable)return;let a=Math.round(e.loaded/e.total*100);t({loaded:e.loaded,total:e.total,percentage:a})};e.upload.addEventListener("progress",a,!1)}}(n,a.onProgress),n.addEventListener("load",(e=>{const t=function(e){function t(e){try{return JSON.parse(e)}catch{return}}return{status:e.status,statusText:e.statusText,ok:e.status>=200&&e.status<=299,data:t(e.response)}}(e.target);t.ok?i(t):s(t)}),!1),n.addEventListener("error",o,!1),n.addEventListener("abort",o,!1),n.open("PUT",`${m.O2}${e}`),a.print&&n.setRequestHeader("Print-After-Upload","?1"),n.setRequestHeader("Overwrite","?1"),n.setRequestHeader("Content-Type",e.endsWith(".bgcode")?"application/gcode+binary":"text/x.gcode");for(const[e,t]of Object.entries((0,m.wU)()))n.setRequestHeader(e,t);n.send(t)}))};var g=a(2038),h=a(4800),b=a(8236);let f=!1,y=0;function k(e,t,a,i,s){const n=document.querySelector(e);n&&(n.setAttribute("accept",i.join(", ")),n.onchange=()=>{if(n.files.length>0&&!f){let e=n.files[0];S(e,t,a,s?.checked||!1)}})}function w(){[document.querySelector('#upld-direct input[type="file"]'),document.querySelector('#drop-zone input[type="file"]')].filter((e=>!!e)).forEach((e=>e.value="")),z(0),x("choose")}function x(e){f="uploading"===e;const t=document.getElementById("upld-direct");t&&t.setAttribute("data-state",e)}function z(e){y=e;const t=document.getElementById("upld-progress");t&&(t.innerHTML=`${e} %`)}const S=(e,t,a,s)=>{const n=["/api/v1/files",t,a,e.name].filter((e=>!!e)).join("/"),o=e.display_name||e.name,r=()=>e.arrayBuffer().then((e=>{x("uploading"),z(0),v(n,e,{onProgress:e=>{return t=e.percentage,x("uploading"),void z(t);var t},print:s}).then((()=>function(e){const t=(0,i.Iu)("ntf.success"),a=(0,i.Iu)("ntf.upld-suc",{file_name:e});(0,c.Vp)(t,a)}(o))).catch((e=>function(e,t){if(t)(0,u.S)(t);else{const t=(0,i.Iu)("ntf.error"),a=(0,i.Iu)("ntf.upld-unsuc",{file_name:e});(0,c.vU)(t,a)}}(o,e))).finally((()=>w()))}));(0,m.LK)(n,{method:"HEAD"}).then((()=>{try{(0,b.o)((e=>(0,g.$)((()=>{e(),w()}),o,r)),{timeout:0,closeOutside:!1})}catch(e){console.error("Modal error",e)}})).catch((()=>r()))};const E={init:function(e,t,a){(0,i.Iu)("upld.direct.choose",{query:"#upld-direct p",file:a.join(", ")}),function(e,t,a){const i=document.getElementById("upld-direct-start-pt");i&&(0,g.i)(i);const s=document.getElementById("drop-zone");s&&(document.ondragenter=e=>(0,p.yx)(s,!0),s.ondragleave=e=>(0,p.yx)(s,!1),document.ondrop=e=>(0,p.yx)(s,!1),k('#drop-zone input[type="file"]',e,t,a,i));k('#upld-direct input[type="file"]',e,t,a,i)}(e,t,a),f&&(x("uploading"),z(y))},update:function(e){const t=h.cG.includes(e),a=document.querySelector("#upld-direct-start-pt");a&&(a.setAttribute("data-link-state",e),t||(a.checked=!1),(0,p.H)(a,!t))},get isUploading(){return f},initInputByQuery:k};const P=class{get selected(){return this._selected}get isLocked(){return this._isLocked}lock(){this._isLocked=!0,this._root&&this._root.querySelectorAll("[data-tab-btn]").forEach((e=>{e.getAttribute("data-tab-btn")!==this.selected&&e.setAttribute("locked",!0)}))}unlock(){this._isLocked=!1,this._root&&this._root.querySelectorAll("[data-tab-btn]").forEach((e=>{e.hasAttribute("locked")&&e.removeAttribute("locked")}))}constructor(){this._root=null,this._selected=null,this._isLocked=!1}init(e){this._root=e,this._root&&(e.querySelectorAll("[data-tab-btn]").forEach((e=>{e.onclick=()=>{if(!this._isLocked){const t=e.getAttribute("data-tab-btn");t===this._selected||(this.closeTab(),this.openTab(t))}}})),this.openTab(this._selected,!0))}openTab(e){if(this._root&&e){const t=this._root.querySelector(`[data-tab="${e}"]`);t&&t.setAttribute("opened",!0);const a=this._root.querySelector(`[data-tab-btn="${e}"]`);a&&a.setAttribute("selected",!0),this._selected=e}}closeTab(){if(this._root&&this._selected){const e=this._root.querySelector(`[data-tab="${this._selected}"]`);e&&e.setAttribute("opened",!1);const t=this._root.querySelector(`[data-tab-btn="${this._selected}"]`);t&&t.setAttribute("selected",!1),this._selected=null}}},L=a(7049).Z,N=new P;function I(){E.isUploading?(N.openTab("direct"),N.lock()):L?.isUploading?(N.openTab("remote"),N.lock()):(N.unlock(),N.selected||N.openTab("direct"))}const T={init:function(e,t="",a){E.init(e,t,a),L?.init(e,t),N.init(document.getElementById("upld")),I()},update:function(e){E?.update(e),L?.update(e),I()},hide:function(e){(0,p.QH)(document.getElementById("upld"),e)}};var _=a(2451),j=a(5489),C=a(8751);const A=e=>(0,m.LK)(e,{method:"POST",headers:{"Content-Type":"application/json"}}),D=e=>(0,m.LK)(`/api/v1/job/${e}/resume`,{method:"PUT"}).catch((e=>(0,u.S)(e))),B=(e,t)=>{(0,b.o)((a=>((e,t,a)=>{const s=document.getElementById("modal-question"),n=document.importNode(s.content,!0);n.getElementById("modal-question-label").innerText=(0,i.Iu)("msg.cancel");const o=n.getElementById("yes"),r=n.getElementById("no");return o.addEventListener("click",(i=>{i.preventDefault(),t.onConfirm(),(0,p.H)(o,!0),(0,p.H)(r,!0),(0,m.LK)(`/api/v1/job/${a}`,{method:"DELETE",headers:{"Content-Type":"application/json"}}).catch((e=>{t.onError(),(0,u.S)(e)})),e()})),r.addEventListener("click",e),n})(a,t,e)),{timeout:0,closeOutside:!1})},O=(e,t)=>{e?(0,b.o)((e=>((e,t)=>{const a=document.getElementById("modal-confirm"),i=document.importNode(a.content,!0),s=i.getElementById("yes"),n=i.getElementById("no");return s.addEventListener("click",(a=>{a.preventDefault(),(0,p.H)(s,!0),(0,p.H)(n,!0),A(t).then((()=>(0,C.c4)("#dashboard"))).catch((e=>(0,u.S)(e))).finally((()=>e()))})),n.addEventListener("click",e),i})(e,t)),{timeout:0,closeOutside:!1}):A(t).then((()=>(0,C.c4)("#dashboard"))).catch((e=>(0,u.S)(e)))},q=()=>(0,m.LK)("/api/job",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({command:"cancel"})}).catch((e=>(0,u.S)(e)));var M=a(1972);const R=(e,t,a)=>{(0,M.Z)(e,t),a()},H=(e,t,a,s,n=!1)=>{const o=document.getElementById("modal-question"),r=document.importNode(o.content,!0);r.getElementById("modal-question-label").innerText=n?(0,i.Iu)("msg.del-folder",{folder_name:a}):(0,i.Iu)("msg.del-proj",{file_name:a});const l=r.getElementById("yes"),d=r.getElementById("no");return d.addEventListener("click",e),l.addEventListener("click",(a=>{a.preventDefault(),(0,p.H)(l,!0),(0,p.H)(d,!0),(0,m.LK)(t,{method:"DELETE",headers:{force:"?1"}}).then((()=>s&&s())).catch((e=>(0,u.S)(e))).finally((t=>e()))})),r},U=(e,t,a)=>{(0,b.o)((i=>H(i,e,t,a)),{timeout:0,closeOutside:!1})},K=(e,t)=>{(0,b.o)((a=>((e,t,a)=>{const i=document.getElementById("modal-file-name"),s=document.importNode(i.content,!0),n=s.getElementById("modal-file-name__input"),o=s.getElementById("yes"),r=s.getElementById("no");return r.addEventListener("click",e),o.addEventListener("click",(i=>{i.preventDefault();const s=n.value;if(s){const i=t(s);(0,p.H)(o,!0),(0,p.H)(r,!0),(0,m.LK)(i,{method:"PUT",headers:{"create-folder":"?1"}}).then((()=>a&&a())).catch((e=>(0,u.S)(e))).finally((t=>e()))}})),s})(a,e,t)),{timeout:0,closeOutside:!1})};function Z(e){return`inset(${100-e}% 0% 0% 0%)`}var V=a(5951);const F={},$=()=>{F.title=null,F.questionChildren=null,F.yes=null,F.no=null,(0,C.g9)(F.next)},G={load:()=>{F.title||(0,C.c4)("#dashboard"),document.getElementById("title-status-label").innerHTML=F.title;const e=document.getElementById("question"),t=F.questionChildren;Array.isArray(t)?t.forEach((t=>e.appendChild(t))):e.innerHTML=t;for(let e of["yes","no"]){const t=document.getElementById(e),a=F[e];t.querySelector("p").innerHTML=F[e+"Text"],t.addEventListener("click",(e=>{e.stopPropagation(),a($)}))}}};(0,i.Iu)("exp-times.exp-time"),(0,i.Iu)("exp-times.inc"),(0,i.Iu)("exp-times.layer-1st"),(0,i.Iu)("exp-times.profile");const W=e=>{const t=e.querySelector("img");(0,p.gL)(e,!1),t&&(t.setAttribute("data-src",t.src),t.src=document.querySelector(".loading-overlay img").src)},Y=e=>{const t=e.querySelector("img");if((0,p.gL)(e,!0),t){const e=t.getAttribute("data-src");e&&(t.src=e,t.setAttribute("data-src",""))}};var J=a(8495);let Q=null,X=null;function ee(e,t=!1){const a=te(e,t);Q&&Q.state!==e.state&&(Q=null),a&&ae(e,t)}function te(e,t){const a=document.getElementById("job");if(!a)return!1;const i=t?!!e.files.selected:!!e.job?.id;return(0,p.yx)(a,i),i}function ae(e,t){const a=t?e.files.selected:e.job,s=a?.file?.resource;e.state;var n;if(a.file?(0,p.Zk)():(0,p.QP)(),function(e,t){const a=document.querySelector(".progress-bar"),i=document.querySelector(".progress-pct"),s=document.querySelector(".preview-img-wrapper"),n=void 0!==t;(function(e,t,a){if(!e)return;const i=t?.url&&t.ready?t.url:document.querySelector(".thumbnail-fallback")?.src;if(e.getAttribute("data-src")!==i){for(;e.firstChild;)e.removeChild(e.firstChild);e.setAttribute("data-src",i);const t=document.createElement("div");t.className="progress-img";const s=document.createElement("img");s.src=i,s.className="background",t.appendChild(s);const n=document.createElement("img");n.src=i,n.className="foreground",n.style.clipPath=Z(a??100),t.appendChild(n),e.appendChild(t)}else{const t=e.querySelector(".foreground");t&&(t.style.clipPath=Z(a))}})(s,e,t),(0,V.g)(a,t,"top"),(0,p.yx)(a,n),(0,p.yx)(i,n)}(a.thumbnail,a.progress),n=t,(0,p.QH)(document.querySelector("#job #pnt-time"),n),(0,p.QH)(document.querySelector("#job #rem-time"),n),(0,j.ZP)("job",a),s&&a.file){const s=t?null:a.id;!function(e,t,a){const i=t.file;(function(e,t){const a=document.querySelector("#job #stop"),i=document.querySelector("#job-close"),s=h.PT.fromApi(e),n=h.cG.includes(s),o=!Q&&h.Dt.includes(e),r=J.Z.getContext();if((0,p.gL)(a,o),a&&t){const i=t||!1;(0,p.yx)(a,i),a.onclick=()=>{B(t,{onConfirm:()=>{Q={code:"stop",state:e},(0,p.gL)(a,!1)},onError:()=>Q=null})}}i&&((0,p.yx)(i,n||!t),i.onclick=t?q:()=>r.selectFile(null))})(e,a),function(e,t,a){const i=document.querySelector("#job #start"),s=h.cG.includes(e);i&&((0,p.yx)(i,s),(0,p.gL)(i,s),i.onclick=()=>O(e!==h.PT.READY,t.resource))}(e,i),ie(e,i,a),function(e,t,a){const i=document.querySelector("#job #download");if(i){const e=!a&&t.refs?.download&&(!X||X===t.refs.download),s=t.display_name||t.name;(0,p.yx)(i,e),e&&(i.onclick=()=>{X=t.refs.download,W(i),R(t.refs.download,s,(()=>{X=null,Y(i)}))})}}(0,i,a),!a||(function(e,t,a){const i=document.querySelector(a),s=e===h.PT.PRINTING;(0,p.yx)(i,s),(0,p.gL)(i,!Q&&s),i&&(i.onclick=()=>{(0,p.gL)(i,!1),Q={code:"pause",state:e},(e=>(0,m.LK)(`/api/v1/job/${e}/pause`,{method:"PUT"}).catch((e=>(0,u.S)(e))))(t).catch((()=>Q=null))})}(e,a,"#job #pause"),function(e,t){const a=document.querySelector("#job #resume"),i=e===h.PT.PAUSED;(0,p.yx)(a,i),(0,p.gL)(a,!Q&&i),a&&(a.onclick=()=>{(0,p.gL)(a,!1),Q={code:"resume",state:e},D(t).catch((()=>Q=null))})}(e,a))}(e.state,a,s),(0,j.ZP)("file",a.file),function(e,t){const a=(0,i.Iu)("prop.na");document.getElementById("job").querySelectorAll(".job-details .job-prop").forEach((e=>{const t=e.querySelector(".job-prop-grid").children;let i=!0;for(const e of t){var s=e.querySelector("[data-type]")?.innerHTML.trim()===a;(0,p.QH)(e,s),s||(i=!1)}(0,p.QH)(e,i)}))}()}}function ie(e,t,a){const i=document.querySelector("#job #delete");if(i){const s=t.display_name||t.name;(0,p.gL)(i,!t.readOnly&&t.resource),(0,p.yx)(i,!a||e===h.cG.includes(e)),i.onclick=()=>{U(t.resource,s,(()=>{a||Ve.selectFile(null)}))}}}p.QP,p.Zk;const se=e=>[...e].filter((e=>!!e)).map((e=>e.trim())).join(" - "),ne=e=>{if(!e.printer)return;const t=e.state;ee(e),T.update(t),_.Z.update(e,null)},oe={load:e=>{(0,i.Iu)("home.link",{query:"#title-status-label"}),l(),ne(e),_.Z.update(e,null),_.Z.updateCurrentCamera(),(0,m.LK)("/api/v1/storage").then((t=>{const a=t.data.storage_list.find((e=>e.available&&!e.read_only));if(a){const t=a.path.replace("/","");T.init(t,"",e.fileExtensions)}}))},update:ne};var re=a(5502);const le=function(e,t="smooth"){if(!e)return;const a=e.getBoundingClientRect(),i=document.body.getBoundingClientRect(),s=a.top-(i.top+function(){const e=document.querySelector(".header");return e&&"sticky"===getComputedStyle(e).position?e.getBoundingClientRect().height:0}());(a.bottom>window.innerHeight||a.top<0)&&window.scroll({top:s,behavior:t})};var de=a(5537);const ce=e=>{const t=(0,de.Z)(e).querySelector(".kebab"),a=t.querySelector(".kebab-menu"),i=t.querySelector("ul");a.addEventListener("click",(e=>{e.stopPropagation(),function(e){return e&&e.classList.contains("open")}(i)?ue(i):function(e,t){e.classList.add("open"),(0,p.Ti)((()=>ue(e)),e,t)}(i,a)})),i.querySelectorAll("li").forEach((e=>{e.addEventListener("click",(()=>ue(i)))}))};function ue(e){e.classList.remove("open")}const pe=e=>{const t=document.querySelectorAll(".storage-select-content li");t&&t.forEach((t=>t.setAttribute("selected",t.getAttribute("data-storage")===e)))},me=e=>{const t=document.querySelector("#node-storage .storage-select-btn-inner");t&&(t.innerHTML=e)},ve=(e,t)=>{e&&t&&(t.classList.toggle("open"),(0,p.Ti)((()=>{t?.classList.remove("open")}),e,t))},ge=e=>{const t=document.querySelector(".node-storage-space");if(!t)return;const a=e.available&&!!e.totalSpace;if((0,p.yx)(t,a),a){const a=e.freeSpace,s=e.totalSpace,n=s-a,o=Math.round(100*(s?n/s:0)),r=(0,i.Iu)("prop.storage-used-space",{used:(0,re.Z)("size",n),free:(0,re.Z)("size",a),total:(0,re.Z)("size",s)});(0,V.g)(t,o),document.getElementById("storage-pct").innerHTML=(0,re.Z)("percent",o),document.getElementById("storage-space").innerHTML=r}},he=()=>{const e=document.querySelector("#node-storage .storage-select-btn");e&&(e.onclick=t=>{t.stopPropagation(),ve(e,dropdownContent)})},be=(e,t,a,i=!1)=>{const s=document.querySelector(".storage-select-content");document.querySelectorAll(".storage-select-content li").forEach((i=>{const n=i.getAttribute("data-storage");let o=!1;if(n in e){const r=e[n],l=i.querySelector("p");o=!0,r.name&&(l.innerText=r.name),i.setAttribute("selected",n===t),i.onclick=e=>{e.stopPropagation(),me(i.innerHTML),pe(n),s.classList.remove("open"),ge(r),a(n)}}(0,p.yx)(i,o)})),i&&ge(e[t])},fe="FOLDER",ye="PRINT_FILE",ke="FIRMWARE",we=["name","date","size"];let xe=null;const ze={origin:null,current_path:[],storages:{},files:[],eTag:null,sort:{field:"date",order:"desc"}};function Se(){const e=ze.origin;return ze.storages[e]}function Ee(){return ze.current_path.map((e=>e.path)).join("/")}function Pe(e){const t=Se(),a=Ee();return Le(t.path,a,e)}function Le(e,t,a){const i=["/api/v1/files",e,t,a].filter((e=>!!e)).join("/");return a?i:`${i}/`}const Ne=(e={})=>{(0,m.LK)("/api/v1/storage",{}).then((t=>{const a=t.data?.storage_list;let i=!!e.redraw,s=!!e.redraw;if(a&&a.forEach((e=>{const t=e.type,a={name:e.name,path:e.path.replaceAll("/",""),available:e.available,readOnly:e.read_only,freeSpace:e.free_space,totalSpace:e.total_space};if(t in ze.storages){const e=ze.storages[t];e.available!==a.available&&(i=!0),e.freeSpace!==a.freeSpace&&ze.origin===t&&(s=!0)}else i=!0,s=!0;ze.storages[t]=a})),!ze.origin){let e=Object.keys(ze.storages).find((e=>ze.storages[e].available));e||(e=Object.keys(ze.storages).find((()=>!0))),e&&Oe(e)}i&&be(ze.storages,ze.origin,Oe,s)}))},Ie=(e={})=>{if(!Se())return;const t=Pe();let a=ze.eTag;e.force&&(ze.eTag=null,a=null,function(e){const t=Se(),a=Ee();T.init(t.path,a,e?.fileExtensions),T.hide(!1!==t?.readOnly)}(J.Z.getContext()));const i=e=>{ze.files=e,Te(),_e()};(0,m.LK)(t,{headers:{"If-None-Match":a}}).then((s=>{if(t!==Pe())return;const n=s.eTag;if(!n||n!==a){ze.eTag=n;const t=s.data.children||[];if(!n&&!e.force){const e=(e,t)=>e.display_name.localeCompare(t.display_name);if(JSON.stringify([...ze.files].sort(e))===JSON.stringify(t.sort(e)))return}i(t)}})).catch((()=>{ze.eTag=null,i([]),J.Z.getContext().selectFile(null)}))},Te=()=>{const e=document.getElementById("files");if(e){for(;e?.firstChild;)e.removeChild(e.firstChild);e.appendChild(function(){const e=Se(),t=[e.name,...ze.current_path.map((e=>e.name))],a=je("node-current",t.pop()||"Root");a.getElementById("path").innerHTML=`${t.join("/")}/`;const s=a.getElementById("create");s&&(s.onclick=e=>{e.stopPropagation(),K(Pe)});(0,p.H)(s,!1!==e.readOnly),a.querySelector("#sort-by-name p").innerText=(0,i.Iu)("sort.by-name"),a.querySelector("#sort-by-date p").innerText=(0,i.Iu)("sort.by-date"),a.querySelector("#sort-by-size p").innerText=(0,i.Iu)("sort.by-size");return a.querySelector(`#sort-by-${ze.sort.field}`).classList.add(ze.sort.order),we.forEach((e=>{a.getElementById(`sort-by-${e}`).addEventListener("click",(t=>{const a=document.getElementById(`sort-by-${e}`);document.getElementById(`sort-by-${ze.sort.field}`).classList.remove(ze.sort.order);const i=ze.sort.field===e&&"asc"===ze.sort.order?"desc":"asc";a.classList.add(i),ze.sort.field=e,ze.sort.order=i,Te(),_e()}),!1)})),a}()),ze.current_path.length&&e.appendChild(function(){const e=je("node-up","",(()=>{ze.current_path.pop(),Te(),Ie({force:!0})}));return(0,i.ot)(e),e}())}},_e=()=>{const e=document.getElementById("files");let t;if(e)for(let a of(e=>(e.sort(((e,t)=>{if(e.type===fe&&t.type!==fe)return-1;if(e.type!==fe&&t.type===fe)return 1;const a="desc"===ze.sort.order?-1:1;switch(ze.sort.field){case"date":return a*((e.m_timestamp||0)-(t.m_timestamp||0));case"size":return a*((e.size||0)-(t.size||0));default:return a*e.display_name.localeCompare(t.display_name)}})),e))(ze.files)){switch(a.type.toUpperCase()){case fe:t=Ce(a,{files:void 0,folders:void 0});break;case ye:t=De(a);break;case ke:t=Be(a,"firmware");break;default:t=Be(a,"file")}e.appendChild(t)}};function je(e,t,a){const i=document.getElementById(e).content,s=document.importNode(i,!0);return a&&s.querySelector(".node").addEventListener("click",(e=>{a(e),e.preventDefault()})),s.querySelector("#name")?.appendChild(document.createTextNode(t)),s}function Ce(e,t){const a=e.display_name||e.name,i=e.name,s=Pe(i),n=je("node-folder",a,(()=>{ze.current_path.push({path:i.replace("/",""),name:a}),Te(),Ie({force:!0})})),o=[t?.files?`${t.files} files`:null,t?.folders?`${t.folders} folders`:null].filter((e=>null!=e)).join(" | ");n.getElementById("details").innerHTML=o;const r=n.getElementById("delete");(0,p.gL)(r,!(e.read_only||e.ro)),r&&(r.onclick=e=>{var t,i,n;e.stopPropagation(),t=s,i=a,n=()=>{},(0,b.o)((e=>H(e,t,i,n,!0)),{timeout:0,closeOutside:!1})});const l=n.getElementById("rename");return l&&(l.onclick=e=>{e.stopPropagation(),console.log("renameFolder")}),n}const Ae=e=>{!function(e){const t=J.Z.getContext(),a=t.files.selected,i=Ee(),s=Pe(e.name);if(a===i)return;t.selectFile({...e,path:i,resource:s});const n=document.getElementById("job");n&&le(n)}(e)};function De(e){const t=je("node-file",e.display_name||e.name,(t=>Ae(e))),a=t.querySelector(".node-details");a.querySelectorAll(".details").forEach((t=>{(0,i.ot)(t);const s=(0,j.NA)(t.dataset.where,e);if(s){const e=(0,re.Z)(t.dataset.format,s);t.querySelector("p[data-value]").innerHTML=e}else a.removeChild(t)}));const s=e?.refs?.thumbnail;if(s){const a=t.querySelector("img.node-img");a.setAttribute("data-src",e.date?`${s}?ct=${e.date}`:s),xe.observe(a)}return ce(t),function(e,t){const a=Pe(e.name),i=e.display_name||e.name,s=t.getElementById("details");s&&(s.onclick=t=>{Ae(e)});const n=t.getElementById("start");n&&(n.onclick=e=>{e.stopPropagation(),console.log("startPrint")});const o=t.getElementById("rename");o&&(o.onclick=e=>{e.stopPropagation(),console.log("renameFile")});const r=t.getElementById("delete");r&&((0,p.gL)(r,!(e.read_only||e.ro)),r.onclick=e=>{U(a,i),e.stopPropagation()});const l=t.getElementById("download");l&&((0,p.gL)(l,!!e.refs?.download),l.onclick=t=>{W(l),R(e.refs?.download,i,(()=>Y(l))),t.stopPropagation()})}(e,t),(0,i.ot)(t),t}function Be(e,t){const a=je("node-file",e.display_name||e.name,(e=>{})),s=a.querySelector(".node-details");s.querySelectorAll(".details").forEach((t=>{(0,i.ot)(t);const a=(0,j.NA)(t.dataset.where,e);if(a){const e=(0,re.Z)(t.dataset.format,a);t.querySelector("p[data-value]").innerHTML=e}else s.removeChild(t)}));const n=a.querySelector("img.node-img");if(t){const e=n.getAttribute(`data-${t}`);e&&(n.src=e),xe.observe(n)}else(0,p.yx)(n,!1);return function(e){["details","start","rename","delete","download"].forEach((t=>{const a=e.getElementById(t);a&&(0,p.yx)(a,!1)}))}(a),a}function Oe(e){if(e in ze.storages){const t=ze.storages[e];ze.origin=e,ze.current_path=[],Te(),t.available&&Ie({force:!0}),T.hide(!1!==t.readOnly)}}const qe={load:function(e){if(ze.eTag=null,(0,i.Iu)("proj.link",{query:"#title-status-label"}),!xe){xe=new IntersectionObserver(((e,t)=>{e.forEach((e=>{if(e.isIntersecting){const t=e.target.getAttribute("data-src");(0,m.gJ)(t).then((({url:t})=>{e.target.src=t})).catch((()=>{}))}}))}),{rootMargin:"0px 0px 50px 0px",threshold:0})}e||(e=J.Z.getContext());const t=e.files.selected;if(t){(function(e,t){if(!e||!t)return null;let a=ze.files.find((t=>t.origin===e));const i=t.split("/").filter((e=>e)).slice(1);for(const e of i){if(!a)break;a=a.children.find((t=>t.name===e))}return"machinecode"===a?.type?a:null})(t.origin,t.path)||e.selectFile(null)}ee(e,!0),he(),Ne({redraw:!0}),Ie({force:!0})},update:e=>{const t=e.state;Ne(),Ie(),ee(e,!0),T.update(t)},getApiPath:Le},Me=e=>{e.getAttribute("tooltip")||(e.addEventListener("click",(t=>{e.classList.toggle("tooltip-handle--active");const a=e.querySelector("span");(0,p.Ti)((()=>e.classList.remove("tooltip-handle--active")),a,e),t.preventDefault()}),!1),e.setAttribute("tooltip",!0))};let Re=0,He=null;const Ue=()=>{const e=e=>{const t=document.getElementById("offline-screen"),a=document.importNode(t.content,!0);return["not-responsing","please-wait"].forEach((e=>{const t=a.getElementById(`offline-screen.${e}`);t&&(t.innerHTML=(e=>{switch(e){case"not-responsing":return(0,i.Iu)("msg.offline.not-responsing");case"please-wait":return(0,i.Iu)("msg.offline.please-wait");default:return""}})(e))})),He={node:a,close:()=>{e(),He=null}},a};(0,b.o)((t=>e(t)),{timeout:0,closeOutside:!1,className:"offline-screen"})},Ke=({link:e,isConnected:t})=>{const a=["connect"];for(const t in e){const{ok:s,message:n}=e[t],o=document.getElementById(`conn-status-${t}-msg`),r="ok"===n.toLowerCase();o&&(o.innerHTML="connect"===t?r?(0,i.Iu)("conn.connect.linked"):(0,i.Iu)("conn.connect.not-linked"):(0,i.Iu)("conn.error_status"));const l=document.getElementById(`conn-status-${t}`),d=l.querySelector(".icon-success"),c=l.querySelector(".icon-warning"),u=l.querySelector(".info-message-tooltip"),m=u.querySelector("span"),v=void 0===s||s&&!a.includes(t);u&&m&&(r||(m.innerText=n,Me(u)),(0,p.QH)(u,r)),(0,p.QH)(l,v),v||((0,p.QH)(d,!s),(0,p.QH)(c,s))}const s=e=>{Re<3?Re+=1:(e?Ue():He.close(),Re=0)};t?He&&s(!1):!He&&s(!0)};const Ze=e=>{return{resource:e.resource??(t=e.path,a=e.name,`${t}${t.endsWith("/")?"":"/"}${a}`),name:e.name,displayName:e.display_name??e.name,path:e.path,displayPath:e.display_path??e.path,size:e.size,refs:{download:e.refs?.download,icon:e.refs?.icon,thumbnail:e.refs?.thumbnail},lastModified:e.m_timestamp||0,meta:{filamentType:e.meta?.filament_type,layerHeight:e.meta?.layer_height,estimatedPrintTime:e.meta?.estimated_print_time},readOnly:e.read_only||e.ro};var t,a},Ve=new class{constructor(){this.state=void 0,this.printer=void 0,this.job=void 0,this.transfer=void 0,this.version=void 0,this.storage=[],this.currentStorage=void 0,this.telemetry={temperature:{nozzle:{current:0,target:0},bed:{current:0,target:0}}},this.flow=0,this.speed=0,this.fan={hotend:0,print:0},this.link={connect:{ok:!0,message:"OK",settings:{hostname:"connect.prusa3d.com",tls:!0,port:0}},printer:{ok:!0,message:"OK",settings:{port:"",baudrate:115200}}},this.files={location:"/",selected:{file:void 0,thumbnail:void 0}},this.fileExtensions=[".gcode"],this.updateConnection()}updateConnection(){return(0,m.LK)("/api/connection",{method:"GET"}).then((e=>{this.link.connect.settings={hostname:e.data.connect.hostname,port:e.data.connect.port,tls:e.data.connect.tls},this.link.connect.registration=e.data.connect.registration,this.link.printer.settings={port:e.data.current.port,baudrate:e.data.current.baudrate}}))}update({status:e,printer:t}){e?.ok&&e.payload&&this.updateStatus(e.payload.data),t&&this.updatePrinter(t)}updateStatus(e){this.updateTelemetry(e.printer),this.updateJob(e.job),this.updateStorage(e.storage),this.updateTransfer(e.transfer),this.updateCamera(e.camera)}updatePrinter(e){this.printer={name:e.name,location:e.location,farmMode:e.farm_mode,nozzleDiameter:e.nozzle_diameter,minExtrusionTemp:e.min_extrusion_temp,serial:e.serial,hostname:e.hostname,port:e.port}}updateTelemetry(e){this.state=h.PT.fromApi(e.state.toUpperCase()),this.telemetry={temperature:{nozzle:{current:e.temp_nozzle,target:e.target_nozzle},bed:{current:e.temp_bed,target:e.target_bed}},axis:{x:e.axis_x,y:e.axis_y,z:e.axis_z},flow:e.flow,speed:e.speed,fan:{hotend:e.fan_hotend,print:e.fan_print}},this.link.connect.message=e.status_connect?.message??"",this.link.connect.ok=e.status_connect?.ok,this.link.printer.message=e.status_printer?.message??"ok",this.link.printer.ok=e.status_printer?.ok??!0}updateJob(e){const t=this.job?.id||null,a=e?.id||null;if(t!==a){if(!a)return void(this.job=void 0);(0,m.LK)("/api/v1/job").then((e=>{const t=e.data;t.id===this.job.id&&(this.job={...this.job,file:Ze(t.file),thumbnail:{source:!t.file.refs?.thumbnail,ready:!t.file.refs?.thumbnail,url:void 0}},this.job.thumbnail.ready||(0,m.gJ)(this.job.file.refs.thumbnail).then((({url:e})=>{this.job.id===a&&(this.job.thumbnail.url=e)})).catch((e=>console.error("Failed to fetch thumbnail",e))).finally((()=>this.job.thumbnail.ready=!0)))})).catch((e=>(0,u.S)(e)))}if(a){const t=this.job?.timeRemaining,s=e.time_remaining,n=t!=s?(i=s,Math.round(Date.now()/1e3)+i):this.job?.estimatedEnd;this.job={file:void 0,...this.job,timePrinting:e.time_printing,id:a,progress:e.progress,timeRemaining:e.time_remaining,estimatedEnd:n}}var i}updateStorage(e){Object.keys(e).forEach((e=>{const t={path:e.path,name:e.name,readOnly:e.readOnly,freeSpace:e.freeSpace},a=this.storage.findIndex((e=>e.path===t.path));-1!==a?this.storage[a]=t:this.storage.push(t)}))}updateTransfer(e){const t=this.transfer?.id||null,a=e?.id||null;if(t!==a){if(!a)return void(this.transfer=void 0);(0,m.LK)("/api/v1/transfer").then((e=>{const t=e.data;this.transfer={...this.transfer,file:{displayName:t.display_name??t.name,path:t.path,size:t.size,toPrint:t.to_print}}})).catch((e=>(0,u.S)(e)))}if(a){const t=Math.round(Date.now()/1e3),i=this.transfer?.file?.size||0,s=e.time_transferring,n=void 0!==s?t-s:void 0,o=e.data_transferred,r=i-o,l=s>0&&r>=0?r/(o/s):void 0;this.transfer={...this.transfer,timeTransferring:s,timeStarted:n,timeRemaining:l,id:a,progress:e.progress,dataTransferred:o}}}updateCamera(e){this.camera={id:e?.id}}selectFile(e){if(!e)return void(this.files.selected=null);const t=e.refs?.thumbnail;if(this.files.selected={file:Ze(e),thumbnail:{source:t,ready:!t,url:void 0},timeRemaining:e.meta?.estimated_print_time},!e.meta){const e=this.files.selected.file.resource;(0,m.LK)(e).then((t=>{const a=Ze({...t.data,resource:e});this.files.selected.file.resource===e&&(this.files.selected.file.meta=a.meta,this.files.selected.timeRemaining=a.meta?.estimatedPrintTime)}))}t&&(0,m.gJ)(t).then((({url:e})=>{t===this.files.selected.thumbnail.source&&(this.files.selected.thumbnail.url=e)})).catch((()=>{})).finally((()=>{t===this.files.selected.thumbnail.source&&(this.files.selected.thumbnail.ready=!0)}))}},Fe=e=>{const t=e.load;return e.load=()=>{(()=>{const e=document.getElementById("title-printer");e&&(e.innerHTML=$e())})(),t(Ve)},e},$e=()=>(e=>se([e.printer?.location,e.printer?.name]))(Ve);let Ge=oe;const We={routes:[{path:"dashboard",html:a(2373),module:Fe(oe),getTitle:()=>(0,i.Iu)("home.link")},{path:"question",html:a(5198),module:Fe(G)},{path:"files",html:a(7189),module:Fe(qe),getTitle:()=>(0,i.Iu)("proj.storage")},{path:"settings",html:a(2936),module:Fe(a(2957).Z),getTitle:()=>(0,i.Iu)("settings.title")},{path:"control",html:a(3478),module:Fe(a(732).Z),getTitle:()=>(0,i.Iu)("control.link")},{path:"cameras",html:a(5464),module:Fe(a(2451).Z),getTitle:()=>(0,i.Iu)("cameras.link")}].filter((e=>null!=e)),init:e=>{Ve.update(e),Ye()},update:e=>{Ve.update(e);const t=(0,C.nC)(),a=(e=>{const t=e.state;let a=(0,h.ny)(t);switch(t){case"IDLE":return"";case"PRINTING":return`${a} ${Math.round(e?.job?.progress||0)}%`;default:return a}})(Ve);var i;document.title=(i=[a,We.routes.find((e=>e.path===t)).getTitle()],se([...i,$e(),"PrusaLink"])),(0,j.zR)("telemetry",Ve),(e=>{const t=e,a=document.getElementById("printer-status");a&&(a.innerHTML=(0,h.ny)(t))})(Ve.state),Je(Ve.telemetry),Qe()},setConnected:e=>{Ke({link:Ve.link,isConnected:e})},setModule:e=>{Ge=e},getContext:()=>Ve},Ye=()=>{let e=new Map([["temp-line-blue",[]],["temp-line-orange",[]]]);r(e,300),l()},Je=e=>{const t=(new Date).getTime();d("temp-line-blue",[t,e.temperature.bed.current]),d("temp-line-orange",[t,e.temperature.nozzle.current]),l()},Qe=()=>{Ge&&Ge.update&&Ge.update(Ve)},Xe=We},8495:(e,t,a)=>{"use strict";a.d(t,{Z:()=>i});const i=a(7838).default},8751:(e,t,a)=>{"use strict";a.d(t,{c4:()=>l,g9:()=>d,nC:()=>o});var i=a(7780),s=a(8495);const n=e=>{const[t,a]=e.split("#");return a||"dashboard"},o=()=>n(window.location.hash);function r(e,t){const a=n(e),o=s.Z.routes.find((e=>e.path===a));if(!o)return!1;t&&function(e){window.location.hash!=e&&history.pushState(null,"",e)}("#"+a);const r=document.getElementById("root");var l;return function(e,t){t.innerHTML="",(new DOMParser).parseFromString(e,"text/html").body.childNodes.forEach((e=>t.appendChild(e)))}(o.html,r),(0,i.ot)(r),function(e){const t=document.querySelector(`a[href="#${e}"]`);t&&(document.getElementById("navbar").childNodes.forEach((e=>{"li"===e.nodeName.toLowerCase()&&e.classList.remove(["active"])})),t.parentNode.className="active")}(a),(l=o.getTitle)&&(document.title=l()),window.scrollTo({top:0}),o.module.load(),s.Z.setModule(o.module),!0}const l=e=>r(e,!0),d=e=>r(e,!1)},4800:(e,t,a)=>{"use strict";a.d(t,{Dt:()=>o,PT:()=>s,cG:()=>n,ny:()=>r});var i=a(7780);const s={UNKNOWN:"UNKNOWN",IDLE:"IDLE",READY:"READY",BUSY:"BUSY",PRINTING:"PRINTING",PAUSED:"PAUSED",FINISHED:"FINISHED",STOPPED:"STOPPED",ERROR:"ERROR",ATTENTION:"ATTENTION",fromApi:e=>{switch(e){case"IDLE":return s.IDLE;case"READY":return s.READY;case"BUSY":return s.BUSY;case"PRINTING":return s.PRINTING;case"PAUSED":return s.PAUSED;case"FINISHED":return s.FINISHED;case"STOPPED":return s.STOPPED;case"ERROR":return s.ERROR;case"ATTENTION":return s.ATTENTION;default:return console.error(`Unsupported state: ${e}`),s.UNKNOWN}}},n=[s.IDLE,s.READY,s.FINISHED],o=[s.PRINTING,s.PAUSED],r=e=>{switch(e){case s.IDLE:return(0,i.Iu)("prop.st-idle");case s.READY:return(0,i.Iu)("prop.st-ready");case s.BUSY:return(0,i.Iu)("prop.st-busy");case s.PRINTING:return(0,i.Iu)("prop.st-printing");case s.PAUSED:return(0,i.Iu)("prop.st-paused");case s.FINISHED:return(0,i.Iu)("prop.st-finished");case s.STOPPED:return(0,i.Iu)("prop.st-stopped");case s.ERROR:return(0,i.Iu)("prop.st-error");case s.ATTENTION:return(0,i.Iu)("prop.st-attention");default:return console.error(`Unsupported state: ${e}`),(0,i.Iu)("prop.st-unknown")}}},4977:e=>{"use strict";e.exports=JSON.parse('{"langs":["cs","de","en","es","fr","it","kr","lt","nl","pl","sk"],"texts":{"home":{"link":["Přehled","Dashboard","Dashboard","Panel principal","Tableau de bord","Dashboard","대쉬보드","Darbastalis","Dashboard","Panel kontrolny","Prehľad"],"title":["Stav tiskárny","Druckerstatus","Printer Status","Estado de la impresora","État de l\'imprimante","Stato della stampante","프린터 상태","Spausdintojo būsena","Printerstatus","Stan drukarki","Stav tlačiarne"]},"proj":{"link":["Úložiště","Projekte","Storage","Proyectos","Projets","Progetti","저장장치","Saugykla","Opslag","Projekty","Úložisko"],"storage":["Úložiště","Speicher","Storage","Almacenamiento","Stockage","Archivio","저장장치","Saugykla","Opslag","Projekty","Úložisko"],"add-from":{"title":["Nahrát soubor z","Datei hinzufügen von","Add file from","Añadir archivo desde","Ajouter un fichier à partir de","Aggiungi file da","에서 파일 추가하기","Pridėti failą iš","Bestanden toevoegen van","Dodaj plik z","Nahrať súbor z"],"local":["Lokálního úložiště","Lokaler Speicher","Local storage","Almacenamiento local","Stockage local","Archivio locale","로컬 저장장치","Vietinis saugykla","Lokale opslag","Magazyn lokalny","Lokálneho úložiska"],"remote":["Vzdálené url","Remote-URL","Remote url","Eliminar url","URL distante","Url remoto","원격 URL","Nuotolinis URL","Externe URL","Zdalny URL","Vzdialenej URL"]},"details":["Detaily souboru","Datei-Details","File details","Detalles del archivo","Détails du fichier","Dettagli file","파일 상세정보","Failo informacija","Bestandseigenschappen","Szczegóły pliku","Detaily súboru"],"del":["Smazat","Datei löschen","Delete","Borrar archivo","Supprimer le Fichier","Elimina File","삭제","Ištrinti","Verwijderen","Usuń plik","Zmazať"],"download":["Stáhnout","Herunterladen","Download","Descargar","Télécharger","Download","다운로드","Atsisiųsti","Downloaden","Pobierz","Stiahnuť"],"up-folder":["nadřazená složka","übergeordneter Ordner","parent folder","carpeta contenedora","dossier parent","cartella superiore","상위폴더","tėvinis aplankas","Bovenliggende map","folder nadrzędny","nadradený priečinok"]},"control":{"link":["Ovládání","Kontrolle","Control","Control","Contrôle","Controllo","제어","Valdymas","Bediening","Sterowanie","Ovládanie"],"coordinates":["Souřadnice tiskárny","Drucker-Koordinaten","Printer Coordinates","Coordenadas de la Impresora","Coordonnées de l\'imprimante","Coordinate Stampante","프린터 좌표","Spausdintojo koordinatės","Printercoördinaten","Współrzędne drukarki","Súradnice tlačiarne"],"axis":{"x":["Osa X","X-Achse","X axis","Eje X","axe X","Asse X","X축","X ašis","X-as","Oś X","Os X"],"y":["Osa Y","Y-Achse","Y axis","Eje Y","axe Y","Asse Y","Y축","Y ašis","Y-as","Oś Y","Os Y"],"z":["Osa Z","Z-Achse","Z axis","Eje Z","axe Z","Asse Z","Z축","Z ašis","Z-as","Oś Z","Os Z"]},"stepper-motors":["Krokové motory","Schrittmotoren","Stepper Motors","Motores Paso-a-paso","moteurs","Motori Passo-Passo","스텝 모터","Sustojimo varikliai","Stappenmotors","Silniki krokowe","Krokové motory"],"heated-bed-move":["Pohyb podložky v ose X a Y","Heizbett X und Y bewegen","Heated Bed X and Y Move","Base Calefactable Mover X e Y","Mouvement en x/y","Spostamento X e Y Piano Riscaldato","히트베드 X 및 Y 이동","Šildomojo patalo X ir Y poslinkis","Beweeg verwarmd bed in X en Y","Ruch stołu grzewczego X i Y","Pohyb podložky v osi X a Y"],"move-step":["Krok pohybu [mm]","Schrittweite [mm]","Move Step [mm]","Mover Paso [mm]","déplacement [mm]","Sposta Passo [mm]","[mm]mm 스텝 이동","Poslinkis [mm]","Beweegafstand [mm]","Krok ruchu [mm]","Krok pohybu [mm]"],"nozzle-z-move":["Pohyb extrudéru v ose Z","Düse Z Bewegung","Nozzle Z Move","Boquilla Mover Z","déplacement en z","Spostamento Z Ugello","노즐 Z 이동","Antgalio Z poslinkis","Beweeg omhoog/omlaag","Ruch dyszy w osi Z","Pohyb extruderu v osi Z"],"extruder":["Extrudér","Extruder","Extruder","Extrusor","extrudeur","Estrusore","익스트루더","Ištraukiklis","Extruder","Ekstruder","Extruder"],"extrude-retract-step":["Krok vytlačení/vtažení [mm]","Extrudieren/Zurückziehen Schritt [mm]","Extrude/Retract Step [mm]","Distancia Extruir/Retraer [mm]","longueur d\'extrusion ou de rétractation [mm]","Passo Estrusione/Retrazione [mm]","[mm]mm 스텝 압출/철회","Ištrauka/atgalinimas [mm]","Extrude/retract-afstand [mm]","Krok ekstruzji/retrakcji [mm]","Krok vysunutia/zasunutia [mm]"],"nozzle-temp":["Teplota trysky","Düsentemperatur","Nozzle Temperature","Temperatura Boquilla","température de la buse","Temperatura Ugello","노즐 온도","Antgalio temperatūra","Temperatuur nozzle","Temperatura dyszy","Teplota trysky"],"speed":["Rychlost","Geschwindigkeit","Speed","Velocidad","vitesse","Velocità","속도","Greitis","Snelheid","Prędkość","Rýchlosť"],"heated-bed-temp":["Teplota vyhřívané podložky","Temperatur des Heizbettes","Heated Bed Temperature","Temperatura de la Base Calefactable","Température du lit","Temperatura piano riscaldato","히트베드 온도","Šildomojo patalo temperatūra","Temperatuur verwarmd bed","Temperatura stołu","Teplota vyhrievanej podložky"],"flow":["Průtok","Flow","Flow","Flujo","flux","Flusso","흐름","Srautas","Extrusiefactor","Przepływ","Prietok"],"title":["Ovládání tiskárny","Druckersteuerung","Printer Control","Control de la Impresora","Contrôle de l\'imprimante","Controllo Stampante","프린터 제어","Spausdintojo valdymas","Printerbediening","Sterowanie drukarką","Ovládanie tlačiarne"]},"cameras":{"link":["Kamery","Kameras","Cameras","Cámaras","Caméras","Fotocamere","카메라","Kameros","Camera\'s","Kamery",""],"trigger-scheme":{"ten-sec":["Každých 10 sekund","Alle 10 Sekunden","Every 10 seconds","Cada 10 segundos","Toutes les 10 secondes","Ogni 10 secondi","매 10초","Kas 10 sekundžių","Elke 10 seconden","Co 10 sekund",""],"thirty-sec":["Každých 30 sekund","Alle 30 Sekunden","Every 30 seconds","Cada 30 segundos","Toutes les 30 secondes","Ogni 30 secondi","매 30초","Kas 30 sekundžių","Elke 30 seconden","Co 30 sekund",""],"sixty-sec":["Každých 60 sekund","Alle 60 Sekunden","Every 60 seconds","Cada 60 segundos","Toutes les 60 secondes","Ogni 60 secondi","매 60초","Kas 60 sekundžių","Elke minuut","Co 60 sekund",""],"each-layer":["Při změně vrstvy","Beim Schichtwechsel","On layer change","Al cambiar de capa","Au changement de couche","Al cambio layer","매 레이어","Pakeitus sluoksnį","Bij laagwissel","Przy zmianie warstwy",""],"fifth-layer":["Každou pátou vrstvu","Alle 5 Schichten","Every fifth layer","Cada cinco capas","Toutes les cinq couches","Ogni cinque layer","매 5레이어","Kas penktas sluoksnis","Elke 5 lagen","Co piąta warstwa",""],"manual":["Ručně","Manuell","Manual","Manual","Manuel","Manuale","수동","Rankinis","Handmatig","Ręcznie",""]}},"settings":{"title":["Nastavení","Einstellungen","Settings","Ajustes","Réglages","Impostazioni","세팅","Nustatymai","Instellingen","Ustawienia","Nastavenie"]},"conn":{"prusa-connect-status":["Stav připojení PrusaConnect","PrusaConnect Status","PrusaConnect Status","Estado de PrusaConnect","Informations de connexion à PrusaConnect","Stato PrusaConnect","프루사커넥트 상태","PrusaConnect būsena","Status van PrusaConnect","Stan PrusaConnect","Stav pripojenia PrusaConnect"],"printer-status":["Stav připojení 3D tiskárny","3D-Drucker Verbindungsstatus","3D Printer Connection Status","Estado Conexión Impresora 3D","Informations de connexion à l\'imprimante 3D","Stato Connessione Stampante 3D","3D 프린터 연결 상태","3D spausdintojo prisijungimo būsena","Verbindingsstatus van 3D-printer","Status połączenia z drukarką 3D","Stav pripojenia 3D tlačiarne"],"title":["připojení","Verbindung","Connection",null,"connexion",null,"연결","Prisijungimas","Verbinding",null,"pripojenie"],"prusa-connect-url":["Adresa PRUSA CONNECT","PRUSA CONNECT Adresse","PRUSA CONNECT Address",null,null,null,"프루사커넥트 주소","PRUSA CONNECT adresas","Adres van PRUSA CONNECT",null,"Adresa PrusaConnect"],"suc":["Úspěšně připojeno","Erfolgreich verbunden","Successfully connected","Correctamente conectado","Connecté avec succès","Connessione riuscita","연결 성공","Prisijungta sėkmingai","Succesvol verbonden","Połączono pomyślnie","Úspešne pripojené"],"connect":{"linked":["","Verbunden","Linked","Enlazado","Associée","Collegato","연결됨","Susieta","Verbonden","Połączono",""],"not-linked":[null,"Nicht verbunden","Not Linked","No enlazado","Non Associée","Non collegato","연결안됨","Nesusieta","Niet verbonden","Nie połączono",""]},"error_status":["Chyba","Fehler","Error","Error","Erreur","Errore","에러","","","Błąd",""]},"prop":{"temp-nozzle":["Teplota trysky","Düsentemperatur","Nozzle Temperature","Temperatura del nozzle","Température de la buse","Temperatura ugello","노즐 온도","Nozzle Temperature","Nozzletemperatuur","Temperatura dyszy","Teplota trysky"],"temp-bed":["Vyhřívaná podložka","Heizbett","Heatbed","Base calefactable","Plateau chauffant","Piano riscaldato","히트베드","Dėklo temperatūra","Verwarmd bed","Stół","Vyhrievaná podložka"],"speed":["Rychlost tisku","Druckgeschwindigkeit","Printing Speed","Velocidad de impresión","Vitesse d\'impression","Velocità di stampa","출력속도","Spausdinimo greitis","Printsnelheid","Prędkość drukowania","Rýchlosť tlače"],"z-height":["Výška Z","Z-Höhe","Z-Height","Altura-Z","Hauteur en z","Altezza-Z","Z높이","Z-Height","Z-Hoogte","Wysokość Z","Výška Z"],"nozzle-diameter":["Velikost trysky","Düsendurchmesser","Nozzle Diameter","Diámetro de Boquilla","Diamètre de la Buse","Diametro ugello","노즐지름","Galvutės skersmuo","Nozzlediameter","Średnica dyszy","Veľkosť trysky"],"rem-time":["Zbývající čas","Restzeit","Remaining time","Tiempo restante","Temps restant","Tempo residuo","남은시간","Likęs laikas","Resterende tijd","Pozostały czas","Zostávajúci čas"],"time-est":["Odhad doby tisku","Druckzeit Schätzen","Print Time Estimate","Tiempo Estimado de Impresión","Estimation du temps d\'impression","Stima del Tempo di Stampa","예상 출력 시간","Print Time Estimate","Geschatte printtijd","Szacowany Czas Druku","Odhad času tlače"],"est-end":["Odhadovaný konec","Erwartetes Ende","Estimated end","Fin estimado","Fin d\'impression estimée","Fine prevista","예상완료","Numatomas pabaiga","geschatte eindtijd","Szacowane zakończenie","Odhadovaný koniec"],"pnt-time":["Doba tisku","Druckzeit","Printing time","Tiempo de impresión","Temps d\'impression","Tempo di stampa","출력시간","Spausdinimo laikas","Printtijd","Czas druku","Čas tlače"],"last-mod":["Naposledy upraveno","Zuletzt Geändert","Last Modified","Ultima Modificación","Dernière Modification","Ultima Modifica","최종 수정됨","Paskutinis modifikavimas","Laatst gewijzigd","Ostatnio Zmodyfikowany","Posledná úprava"],"material":["Materiál","Material","Material","Material","Matériau","Materiale","재료","Medžiaga","Materiaal","Materiał","Materiál"],"layer-ht":["Výška vrstvy","Schichthöhe","Layer Height","Altura de Capa","Hauteur de Couche","Altezza Layer","레이어 높이","Sluoksnio storis","Laagdikte","Wysokość Warstwy","Výška vrstvy"],"size":["Velikost souboru","Größe der Datei","File size","Tamaño de archivo","Taille du fichier","Dimensione file","파일크기","Failo dydis","Bestandsgrootte","Rozmiar pliku","Veľkosť súboru"],"progress":["Postup","Fortschritt","Progress","Progreso","Progression","Progresso","진행","Eiga","Voortgang","Postęp","Progres"],"st-idle":["Nečinná","Leerlauf","Idle","En espera","Repos","Inattivo","대기","Pramoginė veikla","Inactief","Oczekuje","Nečinná"],"st-ready":["Připravena","Bereit","Ready","Lista","Prête","Pronto","준비","Pasirengęs","Gereed voor gebruik","Gotowe","Pripravené"],"st-busy":["Zaneprázdeněná","Beschäftigt","Busy","Ocupada","Occupée","Occupato","작업중","Užsiėmęs","Bezig","Zajęty","Zaneprázdnená"],"st-printing":["Probíhá tisk","Druckt","Printing","Imprimiendo","Impression","Stampa","출력중","Spausdinama","Printen","Drukowanie","Prebieha tlač"],"st-paused":["Pozastavena","Pausiert","Paused","Pausado","En pause","In pausa","일시정지","Pristabdyta","Gepauzeeerd","Pauza","Pozastavená"],"st-finished":["Dokončeno","Beendet","Finished","Terminado","Terminé","Completato","완료됨","Užbaigta","Klaar","Zakonczono","Dokončené"],"st-stopped":["Zastaveno","Gestoppt","Stopped","Parada","Arrêtée","Arrestato","정지됨","Sustabdytas","Gestopt","Zatrzymano","Zastavené"],"st-error":["Chyba","Fehler","Error","Error","Erreur","Errore","에러","Klaida","Fout","Błąd","Chyba"],"st-attention":["Vyžaduje pozornost","Achtung","Attention","Atención","Attention","Attenzione","주의","Dėmesio","Attentie","Uwaga","Pozor"],"st-unknown":["Neznámý","Unbekannt","Unknown","Desconocido","Inconnu","Sconosciuto","알수없음","Nežinoma","Onbekend","Nieznane","Neznáme"],"at":["v","um","at","a las","à","alle","에서","iš","op","o","v"],"less-than":["Méně než minuta","Weniger als eine Minute","Less than a minute","Menos de un minuto","Moins d\'une minute","Meno di un minuto","1분 미만","Mažiau nei minutė","Minder dan een minuut","Mniej niż minuta","Menej ako minúta"],"today-at":["Dnes v","Heute um","Today at","Hoy a las","Aujourd\'hui à","Oggi alle","오늘","Šiandien","Vandaag om","Dzisiaj o","Dnes o"],"tmw-at":["Zítra v","Morgen um","Tomorrow at","Mañana a las","Demain à","Domani alle","내일","Rytoj","Morgen om","Jutro o","Zajtra o"],"true":["Ano","Ja","Yes","Si","Oui","Si","예","Taip","Ja","Tak","Áno"],"false":["Ne","Nein","No","No","Non","No","아니오","Ne","Nee","Nie","Nie"],"na":["N/A","NV","NA","NA","NA","ND","없음","NA","N.v.t.","N/D","N/A"],"cover-closed":["Uzavřené","Geschlossen","Closed","Cerrada","Fermé","Chiuso","닫힘","Uždarytas","Gesloten","Zamknięta","Zavreté"],"cover-opened":["Otevřené","Geöffnet","Opened","Abierta","Ouvert","Aperto","열림","Atidarytas","Open","Otwarta","Otvorené"],"storage-used-space":["Použito {{used}} z {{total}} ({{free}} volných)","{{used}} benutzt von {{total}} ({{free}} frei)","Used {{used}} of {{total}} ({{free}} free)","Usados {{used}} de {{total}} ({{free}} libres)","{{used}} utilisés sur {{total}} ({{free}} libre)","Usato {{used}} di {{total}} ({{free}} liberi)","{{total}} 중 {{used}} 사용중({{free}} 남음)","","","Zajęte {{used}} z {{total}} ({{free}} wolne)",""]},"msg":{"modal-p1":["Vítejte na webovém rozhraní vaší","Willkommen zur Weboberfläche Ihres","Welcome to the web interface of your","Bienvenido a la interfaz web de tu","Bienvenue dans l\'interface web de votre","Benvenuto nell\'interfaccia web del tuo","당신의 웹 인터페이스에 오신 것을 환영합니다.","Sveiki atvykę į savo","Welkom bij de webinterface van uw","Witaj w interfejsie Twojej","Vitajte vo webovom rozhraní vašej"],"modal-p2":["Upozornění: některé hodnoty jsou zobrazeny pouze v průběhu tisku.","Bitte beachten Sie, dass die Werte nur angezeigt werden, wenn der Drucker gerade druckt.","Please note that values are shown only when the printer is printing.","Tenga en cuenta que los valores se muestran solo cuando la impresora está imprimiendo.","Veuillez noter que les valeurs sont affichées uniquement lorsque l\'imprimante imprime.","Si noti che i valori vengono visualizzati solo durante la stampa.","프린터가 출력중일 경우에만 값이 표시됩니다.","Prašome atkreipti dėmesį, kad reikšmės rodomos tik tada, kai spausdintuvas spausdina.","De waarden worden alleen getoond tijdens het printen.","Wartości będą wyświetlane tylko podczas drukowania.","Upozornenie: niektoré hodnoty sú zobrazené len počas tlače."],"api-key-1":["Vítejte ve webovém rozhraní PrusaLink Web!","Willkommen auf der Web-Oberfläche von PrusaLink Web.","Welcome to the PrusaLink Web web interface.","Bienvenido a la interfaz web de PrusaLink Web.","Bienvenue sur l\'interface web locale de PrusaLink Web.","Benvenuti nell\'interfaccia web di PrusaLink Web.","프루사 커넥트 웹 웹인터페이스에 오신 것을 환영합니다.","Sveiki atvykę į PrusaLink Web interneto sąsają.","Welkom bij de PrusaLink Web webinterface.","Witaj w interfejsie sieciowym PrusaLink Web.","Vitajte vo webovom rozhraní PrusaLink Web!"],"api-key-2":["Vložte API klíč.","Bitte geben Sie den API-Schlüssel ein.","Please insert the API key.","Por favor introduce la clave API.","Veuillez insérer la clé API.","Si prega di inserire la chiave API.","API키를 입력하십시오.","Prašome įvesti API raktą.","Voer de API-sleutel in","Wpisz klucz API.","Vložte API kľúč."],"api-key-3":["Otevřete menu Nastavení -> Síť -> PrusaLink.","Sie finden ihn in Einstellungen -> Netzwerk -> PrusaLink.","You can find it in Settings -> Network -> PrusaLink.","Puedes encontrarla en Ajustes -> Red -> PrusaLink.","Vous pouvez la trouver dans Réglages -> Réseau -> Informations de connexion.","È possibile trovarla in Impostazioni -> Rete -> PrusaLink","설정 -> 네트워크 -> 프루사링크에서 찾을 수 있습니다.","Jį galite rasti Nustatymai -> Tinklas -> PrusaLink.","Deze kan gevonden worden bij Settings -> -> Network -> PrusaLink.","Możesz znaleźć go w sekcji Ustawienia -> Sieć -> PrusaLink.","Nájdete ho v Nastavenia -> Sieť -> PrusaLink."],"offline":{"not-responsing":["Tiskárna nereaguje.","Der Drucker antwortet nicht.","Printer is not responding.","La impresora no responde.","L\'imprimante ne répond pas.","La stampante non risponde.","프린터가 응답하지 않습니다.","Spausdintuvas neatsako.","Printer reageert niet.","Drukarka nie odpowiada.","Tlačiareň nereaguje."],"please-wait":["Prosím, čekejte...","Bitte warten...","Please wait...","Espera, por favor...","Veuillez patienter...","Attendere...","기다려주십시오...","Prašome palaukti...","Even geduld...","Proszę czekać...","Prosím, čakajte..."]},"drop-zone":{"label":["Přetažením souboru zahájíte nahrávání","Datei hier ablegen, um den Upload zu starten","Drop file here to start the uploading","Arrastra archivo aquí para subirlo","Déposez le fichier ici pour commencer le téléchargement","Trascina il file qui per iniziare il caricamento","파일을 여기로 끌어놓으면 업로드가 시작됩니다.","Tempti failą čia, kad predėti įkrovimą","Sleep het bestand hierheen om het te uploaden","Upuść plik tutaj, aby rozpocząć przesyłanie.",""]},"create-folder":["Nová složka","Neuer Ordner","New Folder","Nueva Carpeta","Nouveau Dossier","Nuova Cartella","새 폴더","","","Nowy folder",""],"create-folder-name":["Název složky","Ordnername","Folder Name","Nombre de la Carpeta","Nom de Dossier","Nome cartella","폴더 이름","","","Nazwa folderu",""],"sysupgrade":{"title":["Aktualizovat systémový balíček?","Systempaket aktualisieren?","Upgrade System Package?","¿Actualizar el Paquete del Sistema?","Mettre à niveau le package système ?","Aggiornare il pacchetto di sistema?","시스템 패키지를 업그레이드하겠습니까?","","","Zaktualizować paczkę systemową?",""],"remark":["Aktualizace může trvat několik desítek vteřin.","Das Upgrade kann einige Sekunden dauern.","The upgrade may take several tens of seconds.","La actualización puede tardar varias decenas de segundos.","La mise à jour peut prendre plusieurs dizaines de secondes.","L\'aggiornamento può richiedere qualche minuto.","업그레이드에는 수십초가 걸릴 수 있습니다.","","","Aktualizacja może trwać kilkadziesiąt sekund.",""],"pending":["Probíhá aktualizace... Nevypínejte tiskárnu.","Upgraden... Schalten Sie den Drucker nicht aus.","Upgrading... Do not switch the printer off.","Actualizando... No apagues la impresora.","Mise à niveau... N\'éteignez pas l\'imprimante.","Aggiornamento... Non spegnere la stampante.","업그레이드중... 프린터를 끄지 마십시오.","","","Aktualizacja... Nie wyłączaj drukarki.",""],"wait-for-printer":["Čeká se na tiskárnu...","Warten auf den Drucker...","Waiting for the printer...","Esperando a la impresora...","Attente de l\'imprimante...","In attesa della stampante...","프린터를 기다리는 중...","","","Oczekiwanie na drukarkę...",""]},"del-folder":["Opravdu chcete smazat {{folder_name}} a její obsah?","Möchten Sie wirklich {{folder_name}} und seinen Inhalt löschen?","Do you really want to delete {{folder_name}} and its contents?","¿Realmente deseas borrar {{folder_name}} y su contenido?","Voulez-vous vraiment supprimer {{folder_name}} et son contenu ?","Vuoi davvero cancellare la cartella {{folder_name}} e il suo contenuto?","정말 {{folder_name}} 폴더 및 내용을 지우시겠습니까?","","","Czy naprawdę chcesz usunąć {{folder_name}} i jego zawartość?",""],"del-proj":["Opravdu chcete smazat {{file_name}}?","Wollen Sie wirklich {{file_name}} löschen?","Do you really want to delete {{file_name}}?","¿Realmente deseas borrar {{file_name}}?","Voulez-vous vraiment supprimer le fichier {{file_name}} ?","Vuoi davvero eliminare il file {{file_name}}?","{{file_name}}을 정말로 삭제하겠습니까?","Ar tikrai norite ištrinti {{file_name}}?","Weet u zeker dat u {{file_name}} wilt verwijderen?","Czy na pewno chcesz usunąć plik {{file_name}}?","Naozaj chcete zmazať {{file_name}}?"],"sla-pour-resin":["Nalijte do vaničky dostatečné množství resinu pro vybraný soubor a zavřete víko. Minimální objem resinu je zobrazen na dotykovém displeji tiskárny.","Füllen Sie genügend Harz für die ausgewählte Datei in den Tank und schließen Sie den Deckel. Die minimale Menge des Harzes wird auf dem Touchscreen angezeigt.","Pour enough resin for selected file into the tank and close the lid. Minimal amount of the resin is displayed on the touchscreen.","Vierte suficiente resina para el archivo seleccionado y cierra la tapa.\\nLa mínima cantidad necesaria se muestra en la pantalla táctil.","Versez suffisamment de résine dans le réservoir pour le projet sélectionné et fermez le capot.","Versare nel serbatoio la quantità di resina sufficiente per il file selezionato e chiudere il coperchio. La quantità minima di resina viene visualizzata sul touchscreen.","선택한 파일을 위한 레진을 탱크에 붓고 뚜껑을 닫습니다. 터치스크린에 최소량의 레진이 표시됩니다.","Įpilkite pakankamai dervos pasirinktam failui ir uždarykite dangtį. Mažiausias dervos kiekis yra rodomas ant ekrano.","Doe genoeg resin voor het geselcteerde bestand in het vat en sluit de kap. De minimale hoeveelheid resin wordt aangegeven op het touchscreen.","Wlej do zbiornika wystarczającą ilość żywicy dla wybranego pliku i zamknij pokrywę. Minimalna ilość żywicy jest wyświetlana na ekranie dotykowym.","Do nádržky nalejte dostatočné množstvo resinu pre vybraný súbor a zatvorte veko. Minimálne množstvo resinu sa zobrazí na dotykovom displeji."],"cancel":["Chcete opravdu zrušit tisk?","Wollen Sie den Druck wirklich abbrechen?","Do you really want to cancel print?","¿Realmente quieres cancelar la impresión?","Voulez-vous vraiment annuler l\'impression ?","Vuoi davvero annullare la stampa?","출력을 취소하겠습니까?","Ar tikrai norite atšaukti spausdinimą?","Weet u zeker dat u de print wilt stoppen?","Czy na pewno chcesz anulować wydruk?","Chcete naozaj zrušiť tlač?"],"file-exists":{"title":["Soubor již existuje","Datei existiert bereits","File already exists","El archivo ya existe","Le fichier existe déjà","File già esistente","파일이 이미 존재합니다.","","","Plik już istnieje",""],"overwrite-it":["Chcete ho přepsat?","Möchten Sie sie überschreiben?","Do you want to overwrite it?","¿Quieres sobrescribirlo?","Voulez-vous l\'écraser ?","Vuoi sovrascriverlo?","덮어쓰시겠습니까?","","","Czy chcesz go nadpisać?",""]}},"btn":{"login":["Přihlášení","Login","Login","Iniciar sesión","Connexion","Accedi","로그인","Prisijungti","Login","Zaloguj","Prihlásenie"],"confirm":["Potvrdit","Bestätigen","Confirm","Confirmar","Confirmer","Conferma","결정","Patvirtinti","Bevestigen","Potwierdzam","Potvrdiť"],"cancel":["Zrušit","Abbrechen","Cancel","Cancelar","Annuler","Annulla","취소","Atšaukti","Annuleren","Anuluj","Zrušiť"],"del":["Smazat","löschen","Delete","borrar","supprimer","elimina","삭제","Ištrinti","Verwijderen","usuń","Zmazať"],"download":["Stáhnout","Herunterladen","Download","Descargar","télécharger","Download","다운로드","Atsisiųsti","Download","Pobierz","Stiahnuť"],"pause-pt":["Pozastavit tisk","Druck pausieren","Pause Print","Pausar Impresión","Mettre l\'impression en pause","Pausa Stampa","출력 일시 정지","Pristabdyti spausdinimą","Pauzeer print","Wstrzymaj drukowanie","Pozastaviť tlač"],"resume-pt":["Pokračovat v tisku","Druck fortsetzen","Resume Print","Continuar Impresión","Redémarrer l\'impression","Riprendi stampa","출력 복귀","Tęsti spausdinimą","Hervat print","Wznów drukowanie","Pokračovať v tlači"],"start-pt":["Start tisku","Druck starten","Start Print","Empezar impresión","Lancer l\'impression","Inizia stampa","출력 시작","Pradėti spausdinimą","Start print","Start druku","Štart tlače"],"stop-print":["Zrušit tisk","Druck abbrechen","Stop Print","Cancelar impresión","Annuler l\'impression","Annulla stampa","출력 정지","Sustabdyti spausdinimą","Stop print","Anuluj wydruk","Zrušiť tlač"],"upld-file":["Nahrát soubor","Datei hochladen","Upload File","Cargar Archivo","Télécharger un Fichier","Carica file","파일 업로드","Įkelti failą","Upload bestand","Prześlij plik","Nahrať súbor"],"check-updates":["Kontrola aktualizací","Updates suchen","Check Updates","Comprobar actualizaciones","Vérifier les Mises à Jour","Controlla aggiornamenti","업데이트 체크","Tikrinti atnaujinimus","","Sprawdź aktualizacje",""],"connect":{"link":[null,"Verbinden","Link","Enlace","Associer","Collegamento","연결","Susieti","Verbinden","Link",""],"unlink":["Odpojit","Trennen","Unlink","Desenlazar","Dissocier","Scollegato","연결끊기","Atsieti","Verbinding verbreken","Odłącz",""]},"chg":["Změnit","Ändern","Change","Cambia","Mettre à jour","Cambia","변경","Pakeisti","Wijzig","Zmień","Zmeniť"],"reset":["","Reset","Reset","Reset","Réinitialiser","Reset","리셋","Perkrauti","Reset","Reset",""],"disable-steppers":["Vypnout motory","Schrittmotoren deaktivieren","Disable Steppers","Desactivar motores","Desactiver les moteurs","Disabilita motori","모터 정지","Išjungti stoperius","Stappenmotors uitschakelen","Wyłącz silniki krokowe","Vypnúť motory"],"extrude":["Vytlačit","Extrudieren","Extrude","Extruye","extruder","Estrudi","압출","Ištraukti","Extrudeer","Ekstruzja","Vysunúť"],"retract":["Vtáhnout","Zurückziehen","Retract","Retraer","Retracter","Retrai","리트렉트","Atitraukti","Retract","Retrakcja","Zasunúť"],"set":["Nastavit","Setzen","Set","Ajuste","Régler","Imposta","설정","Nustatyti","Instellen","Ustaw","Nastaviť"],"yes":["Ano","Ja","Yes","Sí","Oui","Sì","예","Taip","Ja","Tak","Áno"],"no":["Ne","Nein","No","No","Non","No","아니오","Ne","Nee","Nie","Nie"],"upgrade":["Aktualizovat","Aktualisieren","Upgrade","Actualización","Mise à niveau","Aggiorna","업그레이드","Atnaujinti","","Aktualizacja",""],"chg-print-set":["Tisková nastavení","Druckeinstellungen","Print Settings","Ajustes de la Impresora","Réglages d\'Impression","Impostazioni di stampa","프린트 설정","Spausdinimo nustatymai","Printinstellingen","Ustawienia druku",""],"save-chgs":["Uložit změny","Änderungen speichern","Save changes","Guardar cambios","Enregistrer les modifications","Salva le modifiche","변경내용 저장","Išsaugoti pakeitimus","Wijzigingen opslaan","Zapisz zmiany","Uložiť zmeny"]},"camera":{"settings":["Nastavení kamery","Kamera-Einstellungen","Camera Settings","Ajustes de la Cámara","Paramètres de la Caméra","Impostazioni Fotocamera","카메라 세팅","Kameros nustatymai","Camera-instellingen","Ustawienia kamery",""],"name":["Název kamery","Kameraname","Camera Name","Nombre de la Cámara","Nom de la Caméra","Nome Fotocamera","카메라 명칭","Kameros pavadinimas","Cameranaam","Nazwa kamery",""],"resolution":["Rozlišení","Auflösung","Resolution","Resolución","Résolution","Risoluzione","해상도","Raiška","Resolutie","Rozdzielczość",""],"trigger-scheme":["","Auslöse-Schema","Trigger Scheme","Modo de Disparo","Mode de Déclenchement","Schema di attivazione","트리거 계획","Paleisti schemą","Triggerschema","Schemat wyzwalania",""],"focus":["Zaostření","Fokus","Focus","Enfocar","Focus","Messa a fuoco","포커스","","","Ostrość",""],"title":["Kamery","Kameras","Cameras","Cámaras","Caméras","Fotocamere","카메라","Kameros","Camera\'s","Kamery",""],"time":["Čas snímku","Zeit der Momentaufnahme","Snapshot Time","Hora de la Foto","Heure de la Capture","Tempo Istantanea","스냅샷 시간","Momentinis vaizdas","Snapshot-tijd","Czas migawki",""],"cloud":{"linked":["Připojeno","Verbunden","Linked","Enlazado","Associée","Collegato","연결됨","Susieta","Verbonden","Połączono",""],"not-linked":["Nepřipojeno","Unverbunden","Not Linked","No Enlazado","Non Associée","Non collegato","연결되지 않음","Nesusieta","Niet verbonden","Nie połączono",""],"label":["","CONNECT","CONNECT","CONNECT","CONNECT","CONNECT","CONNECT","CONNECT","CONNECT","CONNECT",""]},"btn":{"connect":["Zkusit povolit kameru","Versuche Kamera zu aktivieren","Try to enable camera","Intenta habilitar la cámara","Essayer d\'activer la caméra","Prova ad abilitare la fotocamera","카메라 활성화 시도중","Pabandykite įjungti kamerą","Probeer de camera in te schakelen","Spróbuj aktywować kamerę",""],"settings":["Otevřít nastavení kamery","Öffne Kamera-Einstellungen","Open camera settings","Abrir los ajustes de la cámara","Ouvrir les paramètres de la caméra","Apri impostazioni fotocamera","카메라 설정 열기","Atidaryti kameros nustatymus","Open camera-instellingen","Otwórz ustawienia kamery",""],"link":["Připojit kameru do Connectu","Kamera mit CONNECT verbinden","Link camera to CONNECT","Asocia cámara a CONNECT","Associer la caméra à CONNECT","Collega fotocamera a CONNECT","카메라를 CONNECT에 연결하기","Susieti kamerą su CONNECT","Verbind camera met CONNECT","Połącz kamerę z CONNECT",""],"unlink":["Odpojit kameru z Connectu","Kamera von CONNECT trennen","Unlink camera from CONNECT","Desvincular la cámara de CONNECT","Dissocier la caméra de CONNECT","Scollega fotocamera da CONNECT","카메라를 CONNECT에서 연결 해제하기","Atsieti kamerą nuo CONNECT","Verbreek verbinding van camera met CONNECT","Odłącz kamerę od CONNECT",""]},"path":["Cesta","Pfad","Path","Ruta","Chemin","Percorso","경로","Kelias","Pad","Ścieżka",""],"driver":["Ovladač","Treiber","Driver","Controlador","Driver","Driver","드라이버","Draiveris","Driver","Sterownik",""]},"printer":{"title":["Tiskárna","Drucker","Printer","Impresora","imprimante","Stampante","프린터","Spausdintuvas","Printer","Drukarka","Tlačiareň"],"name":["Název tiskárny","Name des Druckers","Printer name","Nombre de la impresora","nom de l\'imprimante","Nome stampante","프린터 이름","Spausdintuvo pavadinimas","Naam van de printer","Nazwa drukarki","Názov tlačiarne"],"location":["Umístění tiskárny","Standort des Druckers","Printer location","Ubicación de la impresora","localisation de l\'imprimante","Posizione stampante","프린터 위치","Spausdintuvo vieta","Locatie van de printer","Lokalizacja drukarki","Umiestnenie tlačiarne"],"network_error_chime":["Zvukové upozornění při síťové chybě","Netzwerk-Fehlerton","Network Error Chime","Tono Error Red","Carillon d\'erreur réseau","Suono di errore di rete","네트워크 에러 차임벨","","","Dźwięk błędu sieci",""]},"print":{"fdm":{"1":["Je tiskárna připravena?","Ist der Drucker bereit?","Is the printer ready?","¿Está lista la impresora?","L\'imprimante est-elle prête ?","La stampante è pronta?","프린터가 준비되었습니까?","Ar spausdintuvas pasirengęs?","Is de printer klaar voor gebruik?","Czy drukarka jest gotowa?","Je tlačiareň pripravená?"],"2":["Je tisková podložka prázdná a čistá?","Ist der Druckbogen leer und sauber?","Is printing sheet empty and clean?","¿Está vacía y limpia la lámina de impresión?","Le surface d\'impression est-elle vide et propre ?","La piastra di stampa è vuota e pulita?","프린트 시트가 비어있고 깨끗합니까?","Ar spausdinimo lapas tuščias ir švarus?","Is het printplatform leeg en schoon?","Czy arkusz druku jest pusty i czysty?","Je tlačová podložka prázdna a čistá?"]}},"upld":{"title":["Nahrát soubor","Projekt hochladen","Upload file","envía proyecto","Téléversement de projet","Carica file","파일업로드","Įkelti failą","Bestand uploaden","prześlij projekt","Nahrať súbor"],"start-pt":["po přenosu zahájit tisk","Druck nach der Übertragung starten","Start print after transfer","Iniciar la impresión tras la transferencia","Démarrer l\'impression après le transfert","Avvia stampa dopo il trasferimento","전송 후 출력 시작","Pradėti spausdinimą po perdavimo","Start print na het omzetten","Rozpocznij drukowanie po przesłaniu","po prenose spustiť tlač"],"remote":{"source":["URL zdroje","Quell-URL","Source URL","URL Fuente","URL de la source","URL fonte","원본 URL","Šaltinio URL","Bron van URL","Źródłowy URL","URL zdroja"],"hint-fdm":["Zadejte URL souboru G-CODE","URL der G-CODE-Datei eingeben","Type URL of G-CODE file","Escribe URL de archivo G-CODE","Entrez l\'URL du fichier G-CODE du projet","Digitare URL del file G-CODE","G코드 파일의 주소를 입력하십시오","Įveskite G-CODE failo URL","Type de URL van het gcode-bestand","Wpisz adres URL pliku G-Code","Zadajte URL súboru G-code"],"file":["Název souboru","Dateiname","File name","Nombre del archivo","Nom de fichier","Nome file","파일명","Failo pavadinimas","Bestandsnaam","Nazwa pliku","Názov súboru"],"file-hint":["Zadejte název souboru","Dateiname eingeben","Type file name","Escribe nombre de archivo","Tapez le nom du fichier","Digitare nome file","파일명을 입력하십시오","Įveskite failo pavadinimą","Type de bestandsnaam","Wpisz nazwę pliku","Zadajte názov súboru"]},"direct":{"choose":["Vyberte {{file}} nebo jej přetáhněte sem.","Klicke um eine {{file}} Datei auszuwählen oder ziehe sie hier hin","Click to choose a {{file}} file or drag it here","Haz clic para elegir un archivo {{file}} o arrástralo hasta aquí","Cliquer pour choisir un fichier {{file}} ou déposez le ici","Fare clic per scegliere un file {{file}} o trascinarlo qui","선택한 {{file}} 파일을 클릭하거나 여기로 드래그하십시오","Pasirinkite {{file}} failą arba vilkite jį čia","Klik om een {{file}}-bestand te kiezen of sleep het hierheen","Kliknij, aby wybrać plik {{file}} lub przeciągnij go tutaj","Kliknutím vyberte súbor {{file}} alebo ho sem potiahnite."]}},"download":{"dl-started":["Začátek stahování","Herunterladen Gestartet","Download Started","Se inició la descarga","téléchargement démarré","Scaricamento Avviato","다운로드가 시작됨","Atsisiuntimas pradėtas","Downloaden gestart","Pobieranie rozpoczęte","Sťahovanie začalo"],"start-pt":["Spustit tisk","Autostart","Autostart","Inicio automático","Démarrage automatique","Avvio automatico","자동시작","Automatinis paleidimas","Autostart","Autostart","Spustiť tlač"]},"temps":{"title":["Teploty","Temperaturen","Temperatures","Temperaturas","Températures","Temperature","온도","Temperatūros","Temperatuur","Temperatury","Teploty"]},"":[null,null,null,null,null,null,null,null,null,null,null],"version":{"title":["Verze","Version","Version",null,"version",null,"버전","Versija","Versie",null,"Verzia"],"api":["API","API","API",null,"api",null,"API","API","API",null,"API"],"hostname":["Hostname","Hostname","Hostname",null,"nom d\'hôte",null,"호스트명","Hostname","Hostnaam",null,"Hostname"],"firmware":["Firmware","Firmware","Firmware",null,"micrologiciel",null,"펌웨어","Firmware","Firmware",null,"Firmware"],"server":["Server","Server","Server",null,"serveur",null,"서버","Serveris","Server",null,"Server"],"text":["Text","Text","Text",null,"texte",null,"텍스트","Tekstas","Tekst",null,"Text"],"sdk":["SDK","SDK","SDK",null,"sdk",null,"SDK","SDK","SDK",null,"SDK"],"fe":["Frontend","Frontend","Frontend",null,"frontend",null,"프론트엔드","Frontendas","Frontend",null,"Frontend"]},"sys-version":{"title":["Verze systému","Systemversion","System Version",null,"version du système",null,"시스템버전","Sistemos versija","Systeenversie",null,"Verzia systému"],"python":["Python","Python","Python","Python","python","Python","파이썬","Python","Python","Python","Python"],"description":["Popis","Beschreibung","Description","Descripción","description","Descrizione","설명","Aprašymas","Beschrijving","Opis","Popis"],"id":["ID","ID","ID","ID","ID","ID","ID","ID","ID","ID","ID"],"os":["OS","OS","OS","OS","Système d\'exploitation","S.O.","OS","OS","OS","OS","OS"]},"updates":{"title":[null,null,"System Updates",null,null,null,null,"Sistemos atnaujinimai",null,null,null]},"user":{"title":["Uživatel","Benutzer","User",null,"utilisateur",null,"유저","Vartotojas","Gebruiker",null,"Používateľ"],"username":["Uživatelské jméno","Benutzername","User Name","Nombre de usuario","nom d\'utilisateur","Nome Utente","유저명","Vartotojo vardas","Gebruikersnaam","Nazwa użytkownika","Používateľské meno"],"format":{"name":["Uživatelské jméno musí obsahovat alespoň 3 znaky.","Der Benutzername muss mindestens 3 Zeichen lang sein.","Username length must be at least 3 characters long.","El nombre de usuario debe tener al menos 3 caracteres.","La longueur du nom d\'utilisateur doit être d\'au moins 3 caractères.","La lunghezza del nome utente deve essere di almeno 3 caratteri.","유저명은 최소 3자리 이상 입력하십시오.","Vartotojo vardo ilgis turi būti mažiausiai 3 simboliai.","De gebruikersnaam moet minimaal 3 karakters lang zijn.","Długość nazwy użytkownika musi mieć co najmniej 3 znaki.","Používateľské meno musí obsahovať aspoň 3 znaky."],"password-1":["Heslo nesmí začínat či končit mezerami, a zároveň musí splňovat jednu z následujících podmínek:","Das Passwort darf weder am Anfang noch am Ende Leerzeichen enthalten und muss mindestens eine der folgenden Optionen erfüllen:","Password can\'t contain spaces on the beggining nor the end and must meet at least one of these options:","La Contraseña no puede empezar o terminar con espacios y debe cumplir al menos una de estas opciones:","Le mot de passe ne peut pas contenir d\'espaces au début ni à la fin et doit répondre à au moins l\'une de ces options :","La password non può contenere spazi né all\'inizio né alla fine e deve soddisfare almeno una di queste opzioni:","암호는 시작부분에 공백을 둘 수 없으며 다음옵션 중 하나이상을 충족해야 합니다.","Slaptažodis negali turėti tarpų pradžioje arba pabaigoje ir turi atitikti bent vieną iš šių variantų:","Het wachtwoord mag geen spaties aan het begin of het einde bevatten en moet aan minstens één van deze opties voldoen:","Hasło nie może zawierać spacji na początku ani na końcu i musi spełniać przynajmniej jeden z poniższych warunków:","Heslo nesmie začínať ani končiť medzerami a musí spĺňať aspoň jednu z týchto podmienok:"],"password-2":["- Heslo musí obsahovat minimálně 8 znaků, zahrnujících alespoň 1 malé písmeno, 1 velké písmeno a 1 číslo","- Minimale Länge 8 Zeichen, davon ein Kleinbuchstabe, ein Großbuchstabe und eine Zahl","- Minimal length 8 characters, including one lowercase letter, one uppercase letter and one number","- Longitud mínima 8 caracteres, incluyendo una minúscula, una mayúscula y un número","- Longueur minimale de 8 caractères, dont une lettre minuscule, une lettre majuscule et un chiffre","- Lunghezza minima 8 caratteri, di cui una lettera minuscola, una lettera maiuscola e un numero","- 최소 길이 8자(소문자 1개, 대문자 1개, 숫자 1개 포함)","- 8 simbolių ilgio minimalus, įskaitant vieną mažąją raidę, vieną didžiąją raidę ir vieną skaičių","- Minimaal 8 karakters lang, met tenminste een kleine letter, een hoofdletter en een nummber","- Minimalna długość 8 znaków, w tym jedna mała litera, jedna duża litera i jedna cyfra","- Heslo musí obsahovať minimálne 8 znakov, vrátane aspoň 1 malého písmena, 1 veľkého písmena a 1 číslice"],"password-3":["- Heslo musí obsahovat minimálně 8 znaků, zahrnujících alespoň 1 speciální symbol (např. @)","- Mindestlänge 8 Zeichen, einschließlich eines nicht alphanumerischen Zeichens (z. B. @)","- Minimal length 8 characters, including one non-alphanumeric character (e.g. @)","- Longitud mínima 8 caracteres, incluyendo los no alfanuméricos (como @)","- Longueur minimale de 8 caractères, dont un caractère non alphanumérique (par exemple @)","- Lunghezza minima 8 caratteri, compreso un carattere non alfanumerico (es. @)","- 영숫자가 아닌 문자(예: @) 1개를 포함한 최소 길이 8자","- 8 simbolių ilgio minimalus, įskaitant vieną neteisingą simbolį (pvz., @)","- Minimaal 8 karakters lang, met tenminste één niet-alfanumeriek karakter (bijv. @)","- Minimalna długość 8 znaków, w tym jeden znak niealfanumeryczny (np. @)","- Heslo musí obsahovať minimálne 8 znakov, vrátane aspoň 1 špeciálneho symbolu (napr. @)"],"password-4":["- Heslo musí obsahovat minimálně 15 znaků","- Minimale Länge 15 Zeichen","- Minimal length 15 characters","- Longitud mínima 15 caracteres","- Longueur minimale 15 caractères","- Lunghezza minima 15 caratteri","- 최소 길이 15자","- 15 simbolių ilgio minimalus","- Minimaal 15 karakters lang","- Minimalna długość 15 znaków","- Heslo musí obsahovať minimálne 15 znakov"]},"new-password":["Nové heslo","Neues Passwort","New Password","Nueva Contraseña","nouveau mot de passe","Nuova Password","신규 암호","Naujas slaptažodis","Nieuw wachtwoord","Nowe hasło","Nové heslo"],"re-password":["Zopakujte heslo","Passwort wiederholen","Repeat Password","Repetir Contraseña","répéter le mot de passe","Ripeti Password","암호 재입력","Pakartokite slaptažodį","Herhaal wachtwoord","Powtórz hasło","Zopakujte heslo"],"password":["Heslo","Passwort","Password","Contraseña","mot de passe","Password","암호","Slaptažodis","Wachtwoord","Hasło","Heslo"]},"serial":{"label":["Sériové číslo","Seriennummer","Serial Number","Número de serie","numéro de série","Numero Seriale","시리얼넘버","Serijinis numeris","Serienummer","Numer seryjny","Sériové číslo"]},"api_key":{"label":["","API Key","API Key","Clave API","Clé API","Chiave API","API KEY","API raktas","API-sleutel","Klucz API",""]},"logs":{"title":["Logy","Protokolle","Logs",null,"logs",null,"로그","Žurnalai","Logbestanden",null,"Logy"],"select-file":["Vyberte soubor","Datei auswählen","Select File",null,"Sélectionnez une fichier",null,"파일 선택","Pasirinkti failą","Selecteer bestand",null,"Vyberte súbor"],"not-selected":["Není vybrán soubor logů!","Es ist keine Protokolldatei ausgewählt!","No log file is selected!","¡No se ha seleccionado archivo de registro!","Pas de fichier de log sélectionné!","Nessun file di registro selezionato!","로그 파일이 선택되지 않았습니다!","Nepasirinktas joks žurnalų failas!","Geen logbestand geselecteerd!","Nie wybrano żadnego pliku logu!","Nie je vybraný žiadny logovací súbor!"],"select-file-placeholder":["Vyberte soubor logů","Protokolldatei auswählen","Select log file","Selecciona archivo de registro","selectionnez un fichier de log","Selezionare un file di registro","로그 파일 선택","Pasirinkti žurnalų failą","Selecteer logbestand","Wybierz plik logu","Vyberte logovací súbor"],"empty-file":["Soubor je prázdný!","Die Protokolldatei ist leer!","Log file is empty!","¡El archivo de registro está vacío!","Le fichier de log est vide!","Il file di registro è vuoto!","로그파일이 비어있음!","Žurnalų failas yra tuščias!","Logbestand is leeg!","Plik logu jest pusty!","Logovací súbor je prázdny!"],"file-size-unknown":["","Die Protokolldatei hat eine unbekannte Größe und ist daher nur zum Herunterladen verfügbar","The log file is of an unknown size and therefore is available only for downloading","El archivo de registro es de tamaño desconocido y, por lo tanto, solo está disponible para su descarga.","Le fichier de journal est d\'une taille inconnue et n\'est donc disponible que pour le téléchargement","Il file di log è di dimensioni sconosciute e quindi è disponibile solo per il download.","","","","Plik logu ma nieznany rozmiar i dlatego jest dostępny tylko do pobrania",""],"file-too-large":["Soubory logů o velikosti větší než {{size}} jsou k dispozici pouze ke stažení!","Protokolldateien, die größer als {{size}} sind, stehen nur zum Herunterladen zur Verfügung.","Log files of size larger than {{size}} are available only for downloading.","Los archivos de registro mayores de {{size}} sólo se pueden descargar.","Les fichiers de log d\'une taille supérieure à {{size}} ne sont disponibles que pour le téléchargement.","I file di registro di dimensioni superiori a {{size}} sono disponibili solo per il download.","로그 파일을 다운로드 하기 위해서는 최소 {{size}} 이상의 용량이 필요합니다.","Žurnalų failai, didesni nei {{size}}, yra prieinami tik atsiunčiant.","Logbestanden groter dan {{size}} kunnen alleen gedownload worden.","Pliki logów o rozmiarze większym niż {{size}} są dostępne tylko do pobrania.","Logovacie súbory s veľkosťou väčšou ako {{size}} sú k dispozícii len na stiahnutie.!"]},"ntf":{"success":["Požadavek byl úspěšný","Erfolg","The request was successful","Éxito","la demande a été traitée avec succès","Successo","요청이 성공했습니다.","Užklausa buvo sėkminga","De aanvraag was succesvol","Sukces","Žiadosť bola úspešná"],"settings-suc":["Nastavení bylo úspěšně změněno.","Die Einstellungen wurden erfolgreich geändert.","Settings was changed successfully.","Los ajustes se han cambiado correctamente.","Paramètres modifiés avec succès.","Impostazioni modificate correttamente","설정이 성공적으로 변경되었습니다.","Nustatymai sėkmingai pakeisti.","Instelling succesvol gewijzigd.","Ustawienia zostały zmienione pomyślnie","Nastavenia boli úspešne zmenené."],"camera-suc":["","Kamera Steuerungsanfrage wurde gesendet","Camera control request has been sent","La petición de control de cámara se ha enviado","La demande de contrôle de la caméra a été envoyée","È stata inviata una richiesta di controllo della fotocamera","카메라 조작 요청이 전송되었습니다.","Kameros valdymo užklausa buvo išsiųsta","Aanvraag voor camerabesturing is verzonden","Wysłano żądanie sterowania kamerą",""],"camera-config-success":["Konfigurace kamery byla aktualizovaná","Kamerakonfiguration wurde aktualisiert","Camera configuration has been updated","La configuración de la cámara se ha actualizado","La configuration de la caméra a été mise à jour","La configurazione della fotocamera è stata aggiornata","카메라 구성이 업데이트되었습니다.","Kameros konfigūracija buvo atnaujinta","Cameraconfiguration is geüpdatet","Konfiguracja kamery została zaktualizowana",""],"upld-start":["Požadavek na nahrání souboru byl přijat","Upload-Anfrage wurde angenommen","Upload request has been accepted","Se acepto la petición de subida","La demande de téléchargement a été acceptée","Richiesta di caricamento accettata","업로드 요청이 수락되었습니다.","Įkėlimo užklausa priimta","Uploadverzoek is geaccepteerd","Żądanie przesłania zostało zaakceptowane","Žiadosť o odoslanie bola prijatá"],"upld-suc":["Soubor {{file_name}} byl úspěšně nahrán.","Das Hochladen des Projekts {{file_name}} war erfolgreich.","The file {{file_name}} was uploaded successfully.","El envío del proyecto {{file_name}} se completó.","Le projet {{file_name}} a été téléversé correctement.","Caricamento del progetto {{file_name}} riuscito.","{{file_name}}파일이 성공적으로 업로드되었습니다.","Failas {{file_name}} sėkmingai įkeltas.","Het bestand {{file_name}} is succesvol geüpload.","Przesyłanie projektu {{file_name}} powiodło się.","Súbor {{file_name}} bol úspešne nahraný."],"error":["Chyba","Fehler","Error","Error","Erreur","Errore","에러","Klaida","Fout","Błąd","Chyba"],"upld-unsuc":["Nahrání souboru {{file_name}} selhalo.","Das Hochladen des Projekts {{file_name}} war nicht erfolgreich.","The file {{file_name}} upload was unsuccessful.","El envío del proyecto {{file_name}} ha fallado.","Le téléversement du projet {{file_name}} a échoué.","Caricamento del progetto {{file_name}} non riuscito.","{{file_name}}파일의 업로드가 실패하였습니다.","Failo {{file_name}} įkėlimas nepavyko.","Het bestand {{file_name}} is niet succesvol geüpload.","Przesyłanie projektu {{file_name}} nie powiodło się.","Nahrávanie súboru {{file_name}} zlyhalo."]},"sort":{"by-name":["Název","Name","Name","Nombre","Nom","Nome","이름으로 정렬하기","Pavadinimas","Naam","Nazwa",""],"by-date":["Datum","Datum","Date","Fecha","Date","Data","날짜로 정렬하기","Data","Datum","Data",""],"by-size":["Velikost","Größe","Size","Tamaño","Taille","Dimensioni","크기로 정렬하기","Dydis","Grootte","Rozmiar",""]},"unit":{"h":["h","h","h","h","h","h","h","h","u","g","h"],"min":["min","min","min","min","min","min","min","min","min","min","min"],"ml":["ml","ml","ml","ml","mL","ml","ml","ml","ml","ml","ml"],"rpm":["RPM","UPM","RPM","RPM","TPM","RPM","RPM","RPM","RPM","Obr./min","RPM"],"b":["B","B","B","B","B","B","B","B","B","B","B"],"kb":["KB","KB","KB","KB","KB","KB","KB","KB","kB","KB","KB"],"mb":["MB","MB","MB","MB","MB","MB","MB","MB","MB","MB","MB"],"gb":["GB","GB","GB","GB","GB","GB","GB","GB","GB","GB","GB"]},"exp-times":{"exp-time":["Doba osvitu [s]","Belichtung [s]","Exposure [s]","Exposición [s]","Exposition [s]","Esposizione [s]","[s]초 노출","Ekspozicija [s]","Belichting [s]","Czas naświetlania [s]","Osvit [s]"],"inc":["Navýšení expozice (s)","Belichtungszeit inkr. [s]","Exposure time incr. [s]","Incremento tiempo exp. [s]","Incr. du temps d\'exposition [s]","Incremento tempo di esposizione [s]","[s]초 노출 시간 증가","Ekspozicijos laiko padidėjimas [s]","Belichtingstijd verhogen [s]","Przyrost czasu naświetl. [s]","Prírastok osvitu (s)"],"layer-1st":["Osvit první vrstvy [s]","Erste Schicht Bel. [s]","First Layer Expo. [s]","Primera Capa Expo. [s]","Première couche Expo. [s]","Esposizione Primo layer [s]","첫번째 레이어 노출시간 [s]초","Pirmojo sluoksnio ekspozicija [s]","Belichtingstijd eerste laag [s]","Naśw. 1. warstwy [s]","Osvit prvej vrstvy [s]"],"profile":["Tiskový profil","Druckprofil","Print profile","Perfil de Impresión","Profil d\'Impression","Profilo di stampa","출력 프로필","Spausdinimo profilis","Printprofielen","Profil druku","Tlačový profil"],"faster":["Rychlejší","Schneller","Faster","Rápido","Plus rapide","Più veloce","빠르게","Greičiau","Sneller","Szybciej","Rýchlejšie"],"slower":["Pomalejší","Langsamer","Slower","Lento","Plus lent","Più lento","느리게","Lėčiau","Langzamer","Wolniej","Pomalšie"],"high-viscosity":["Velmi Viskózní","Hohe Viskosität","High Viscosity","Alta Viscosidad","Haute viscosité","Alta Viscosità","고점도","Aukštas klampumas","Hoge viscositeit","Wysoka lepkość","Vysoká viskozita"]}}}')}},t={};function a(i){var s=t[i];if(void 0!==s)return s.exports;var n=t[i]={exports:{}};return e[i](n,n.exports,a),n.exports}a.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return a.d(t,{a:t}),t},a.d=(e,t)=>{for(var i in t)a.o(t,i)&&!a.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},a.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),a.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.p="",(()=>{"use strict";var e=a(8751),t=a(8495),i=a(6648);const s=()=>{document.getElementById("menu").addEventListener("click",(()=>{document.getElementById("menu").classList.contains("burger-open")?n():(document.getElementById("menu").classList.add("burger-open"),document.getElementById("navbar").classList.remove("burger-menu"))})),document.getElementById("navbar").querySelectorAll("a[href]").forEach((e=>{e.addEventListener("click",n)}))};function n(){document.getElementById("menu").classList.remove("burger-open"),document.getElementById("navbar").classList.add("burger-menu")}var o=a(7780),r=a(1351),l=a(5412);const d=(e,t)=>{const a=l.L.init(e,t);a&&(a.setOptions((0,o.Vb)()),a.value=(0,o.G3)(),a.onselect=e=>{(0,o.m0)(e),window.location.reload()})};let c=!1;const u={status:{get:()=>(0,i.LK)("/api/v1/status"),init:!0,update:!0}};async function p(e){const t=(new Date).getTime(),a=Object.fromEntries(Object.entries(u).map((([a,i])=>[a,(()=>{if(!e)return i.init;if(i.update){if(!i.updateInterval)return!0;if(i.timestamp||(i.timestamp=t+i.updateInterval),t>=i.timestamp)return i.timestamp=t+i.updateInterval,!0}})()?i.get():void 0])).filter((([,e])=>void 0!==e))),i=Object.values(a),s=await Promise.all(i.map((e=>e.then((e=>({ok:!0,payload:e}))).catch((e=>({ok:!e.code&&null,error:e}))))));return Object.fromEntries(Object.entries(a).map((([e],t)=>[e,s[t]])))}async function m(e){let a=!1;for(;;){let i=!1;try{const t=await p(a);t.status&&(c=null===t.status.ok),Object.values(t).forEach((({ok:e,error:t})=>{var a;e||(i=!0,null!==e&&(a=t,(0,r.S)(a,{fallbackMessage:{title:"API error",message:"Cannot connect to printer"}})))})),a?g(t):i||(v({...t,printer:e}),a=!0)}catch(e){h(e)}t.Z.setConnected(!c),await new Promise((e=>setTimeout(e,1e3)))}}function v(a){try{t.Z.init(a),window.onpopstate=t=>t&&(0,e.g9)(t.currentTarget.location.hash||"#dashboard"),(0,e.g9)(window.location.hash||"#dashboard")}catch(e){h(e)}}function g(e){try{t.Z.update(e)}catch(e){h(e)}}function h(e){(0,r.S)(e,{fallbackMessage:{title:"Application error",message:"Something bad happened on application side"}}),console.error(e)}window.onload=()=>{console.log("PrusaLink v.3.12.0 #b'816361c'"),s(),d("lang-dropdown","lang-dropdown"),(0,o.ot)(),document.querySelectorAll("a[href]").forEach((t=>{t.addEventListener("click",(a=>{(0,e.c4)(t.href)&&a.preventDefault()}))})),(0,i.Z5)().then((e=>{e&&m(e)}))}})()})();
diff --git a/prusa/link/static/main.9b8dc0068f6e6508dfd4.js b/prusa/link/static/main.9b8dc0068f6e6508dfd4.js
new file mode 100644
index 00000000..ac4141d2
--- /dev/null
+++ b/prusa/link/static/main.9b8dc0068f6e6508dfd4.js
@@ -0,0 +1 @@
+(()=>{var e={5862:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"f844a0a85dde310826fce450c3e149d3.svg"},340:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"d0ce7d704590cb0b868ae92249ee86e8.svg"},3246:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"e6e0734bc2dad609a3e92f1873412f11.svg"},6730:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"557f3616d5a1b407b59795b8328bb51f.svg"},8065:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"2e842fcb7b83af8e1e0d26afd80f8fd9.svg"},8920:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"24c2502c54c43441d0bb4bbc17e10a83.svg"},2456:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"f6a7f34a841f532dd1e3e4d610d164f6.svg"},9819:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"53df9c11e268c2390b147239f9ee8796.svg"},7038:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"9332c323b291ba7226ddcdabb0c8e7c4.svg"},1656:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"79e90794ba3b36a64a12414decda0932.svg"},9594:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"a443dadfc7e114c74dae6cd64a74db9d.svg"},931:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"926f52aea63cfd597b30096bfe4077c6.svg"},7336:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"44b654f4ca724e154a9bc60335e98847.svg"},9387:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"8657650f85be23655543d28f58941616.svg"},5300:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"ea93bcffb8771234f8c641f3b7e9f848.svg"},3482:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"ccd215a92d0427a21339a8c38e2a40f3.svg"},5515:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"997c391425907810b4a6e42663d11fd4.svg"},4578:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"24e2e49c87df140cf16aa18b4e261f12.svg"},2e3:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"58151992d28dfb34ee417e0ebf6a66b6.svg"},2290:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"c8a0ca767f73685bbe06863f81e9d3cb.svg"},3174:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"39e93870e6b8fd4ef2d9ed668f8c1545.svg"},8796:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"1218694688ee15ee97bcded9e1a75cc8.svg"},1373:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"dfb811cc28f8e3d7c14bcedbe7ef35b8.svg"},4622:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>i});const i=a.p+"b891ace1622f34bac5a2b4edb7adc733.svg"},5464:(e,t,a)=>{var i=a(7091),s=a(8065),n=a(4622),r=a(6730),o='
`}const v=()=>{(0,s.LK)("/api/logs").then((e=>{const t=e.data.files;if(d){const e=t.find((e=>e.name===d));e&&(!c||e.date>c)&&(c=e.date,null===e.size?p((0,i.Iu)("logs.file-size-unknown")):e.size>u?p((0,i.Iu)("logs.file-too-large",{size:(0,l.Z)("size",u)})):(a=d,(0,s.iT)(`/api/logs/${a}`).then((e=>{const t=document.querySelector("ul.logs");t&&(e.data?t.innerHTML=e.data.split("\n").map((e=>m(e))).join(""):t.innerHTML=m((0,i.Iu)("logs.empty-file")))}))))}var a})).catch((e=>(0,o.S)(e)))},g={load:()=>{(0,s.LK)("/api/logs").then((e=>{const t=e.data.files,a=r.L.init("settings","log-list"),s=t.map((e=>e.name)),o=(0,i.Iu)("logs.select-file-placeholder");a.setOptions(s),a.select(o),a.onselect=e=>{!function(e){d=e,c=null,document.getElementById("download-log").onclick=()=>{(0,n.Z)(`/api/logs/${e}`,e)},v()}(e)}})).catch((e=>(0,o.S)(e)))},update:v}},3707:(e,t,a)=>{"use strict";a.d(t,{Kp:()=>r,Vp:()=>o,vU:()=>l});const i=document.getElementById("prusa-toast"),s={info:10500,success:10500,warning:10500,error:10500};function n({title:e,message:t,type:a,onClose:n,autoClose:r=!0}){const o=((e,t,a)=>{const i=document.getElementById("toast"),s=document.importNode(i.content,!0),n=s.querySelector("article");return n.className=a,s.querySelector("p").innerHTML=e,s.querySelector(".toast-body").innerHTML=t,n})(e,t,a),l=()=>{i.contains(o)&&i.removeChild(o),n?.()};o.querySelector("span").addEventListener("click",(e=>{e.preventDefault(),l()}));const d=s[a];d&&r&&setTimeout(l,d),i.appendChild(o)}function r(e,t,a,i=!0){n({type:"warning",title:e,message:t,onClose:a,autoClose:i})}function o(e,t,a,i=!0){n({type:"success",title:e,message:t,onClose:a,autoClose:i})}function l(e,t,a,i=!0){n({type:"error",title:e,message:t,onClose:a,autoClose:i})}},5489:(e,t,a)=>{"use strict";a.d(t,{NA:()=>n,ZP:()=>o,zR:()=>r});var i=a(646),s=a(5502);const n=(e,t)=>{try{const a=e.split(".");let i=t;for(;a.length;)i=i[a.shift()];return i}catch(e){return}},r=(e,t)=>{document.querySelectorAll(`[data-type="${e}"]`).forEach((e=>{const a=e.dataset.where,r=e.dataset.zeroes,o=a?n(a,t):t;e.innerHTML=(0,s.Z)(e.dataset.format,o),(0,i.QH)(e,"hide"===r&&!o)}))},o=r},2038:(e,t,a)=>{"use strict";a.d(t,{$:()=>o,i:()=>l});var i=a(8236),s=a(646),n=a(4800),r=a(7780);const o=(e,t,a)=>{const i=document.getElementById("modal-question"),n=document.importNode(i.content,!0),o=n.getElementById("modal-question-label"),l=document.createElement("p"),d=document.createElement("p");l.className="txt-sm my-md txt-bold",l.innerText=t,o.innerText=(0,r.Iu)("msg.file-exists.title"),d.innerText=(0,r.Iu)("msg.file-exists.overwrite-it"),o.parentNode.append(l),o.parentNode.append(d);const c=n.getElementById("yes"),u=n.getElementById("no");return u.addEventListener("click",e),c.addEventListener("click",(t=>{t.preventDefault(),(0,s.H)(c,!0),(0,s.H)(u,!0),a(),e()})),n},l=e=>{e.addEventListener("change",(t=>{e.checked&&e.getAttribute("data-link-state")!==n.PT.READY&&(0,i.o)((t=>((e,t)=>{const a=document.getElementById("modal-confirm"),i=document.importNode(a.content,!0),n=i.getElementById("yes"),r=i.getElementById("no");return n.addEventListener("click",(a=>{a.preventDefault(),(0,s.H)(n,!0),(0,s.H)(r,!0),t.checked=!0,e()})),r.addEventListener("click",(()=>{t.checked=!1,e()})),i})(t,e)),{timeout:0,closeOutside:!1})}))}},7049:(e,t,a)=>{"use strict";a.d(t,{Z:()=>k});var i=a(6648),s=a(1351),n=a(646),r=a(3707),o=a(7780),l=a(5951),d=a(2038),c=a(5489),u=a(4800),p=a(3532);let m=!1,v=null;function g(e){const t=p.Z.getContext(),a=u.cG.includes(e),i=document.querySelector("#upld-remote-start-pt");if(i&&(i.setAttribute("data-link-state",e),a||(i.checked=!1),(0,n.H)(i,!a)),t.transfer?.id){y("uploading"),(0,c.ZP)("download",t.transfer);const e=document.querySelector("#upld-remote .progress-bar");(0,l.g)(e,t.transfer.progress||0)}else y("choose")}function h(e){const t=e.data;if(![200,201,204].includes(e.code))return(0,s.S)(e),void f();if(t){if("FROM_WEB"===t.type){y("uploading"),(0,c.ZP)("download",{...t,time_start:t.time_transferring?Math.round((new Date).getTime()/1e3)-t.time_transferring:null});const e=document.querySelector("#upld-remote .progress-bar");(0,l.g)(e,t.progress||0)}}else{if(m)return function(){const e=(0,o.Iu)("ntf.success"),t=(0,o.Iu)("ntf.upld-suc",{file_name:""});(0,r.Vp)(e,t)}(),void f();y("choose")}}const b=(e,t,a,s)=>{if("local"===t)return e=e.split("?")[0].split("&")[0].split("#")[0],(0,i.LK)(`/api/download/${t}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({url:e,destination:a,...s})}).then((e=>function(e){y("uploading");const t=document.querySelector("#upld-remote .progress-bar");(0,l.g)(t,0);const a=(0,o.Iu)("ntf.success"),i=(0,o.Iu)("ntf.upld-start");(0,r.Vp)(a,i)}())).catch((e=>h(e)));(0,r.vU)("Can't upload to "+t,"You can upload only to local storage via remote upload!")};function f(){y("choose"),function(e){const t=document.querySelector("#upld-remote .progress-bar");t&&(0,l.g)(t,e||0)}(0),(0,c.ZP)("download",{}),v=null}function y(e){m="uploading"==e;const t=document.getElementById("upld-remote");t&&t.setAttribute("data-state",e)}const k={init:function(e,t){const a=document.getElementById("upld-remote");if(a){const i=a.querySelector("#remote-url"),s=a.querySelector("#remote-file-name"),r=a.querySelector("#upld-file"),o=a.querySelector("#upld-remote-start-pt");o&&(0,d.i)(o),r.onclick=()=>b(i.value,e,t,{to_print:o.checked,rename:s.value});const l=()=>{(0,n.H)(r,""===i.value)};l(),i.oninput=l}g()},update:g,get isUploading(){return m}}},3532:(e,t,a)=>{"use strict";a.d(t,{Z:()=>Je});var i=a(7780);const s=500;let n=100,r=new Map;const o=(e,t)=>{r=e,n=t};function l(){const e=document.getElementById("graph");e&&(0==e.childElementCount&&function(){const e=document.getElementById("graph-template"),t=document.importNode(e.content,!0);document.getElementById("graph").appendChild(t),(0,i.ot)("graph")}(),r.forEach(((e,t)=>{!function(e,t){const a=(new Date).getTime();let i=[];if(e.length>1){let t=e[0],r=s-2.66*(a-t[0]-1e4)/1e3;for(let e=1;e1&&e[1][0]{var n=new XMLHttpRequest;const r=()=>{s(void 0)};!function(e,t){if(t){const a=e=>{if(!e.lengthComputable)return;let a=Math.round(e.loaded/e.total*100);t({loaded:e.loaded,total:e.total,percentage:a})};e.upload.addEventListener("progress",a,!1)}}(n,a.onProgress),n.addEventListener("load",(e=>{const t=function(e){function t(e){try{return JSON.parse(e)}catch{return}}return{status:e.status,statusText:e.statusText,ok:e.status>=200&&e.status<=299,data:t(e.response)}}(e.target);t.ok?i(t):s(t)}),!1),n.addEventListener("error",r,!1),n.addEventListener("abort",r,!1),n.open("PUT",`${m.O2}${e}`),a.print&&n.setRequestHeader("Print-After-Upload","?1"),n.setRequestHeader("Overwrite","?1"),n.setRequestHeader("Content-Type",e.endsWith(".bgcode")?"application/gcode+binary":"text/x.gcode");for(const[e,t]of Object.entries((0,m.wU)()))n.setRequestHeader(e,t);n.send(t)}))};var g=a(2038),h=a(4800),b=a(8236);let f=!1,y=0;function k(e,t,a,i,s){const n=document.querySelector(e);n&&(n.setAttribute("accept",i.join(", ")),n.onchange=()=>{if(n.files.length>0&&!f){let e=n.files[0];S(e,t,a,s?.checked||!1)}})}function w(){[document.querySelector('#upld-direct input[type="file"]'),document.querySelector('#drop-zone input[type="file"]')].filter((e=>!!e)).forEach((e=>e.value="")),z(0),x("choose")}function x(e){f="uploading"===e;const t=document.getElementById("upld-direct");t&&t.setAttribute("data-state",e)}function z(e){y=e;const t=document.getElementById("upld-progress");t&&(t.innerHTML=`${e} %`)}const S=(e,t,a,s)=>{const n=["/api/v1/files",t,a,e.name].filter((e=>!!e)).join("/"),r=e.display_name||e.name,o=()=>e.arrayBuffer().then((e=>{x("uploading"),z(0),v(n,e,{onProgress:e=>{return t=e.percentage,x("uploading"),void z(t);var t},print:s}).then((()=>function(e){const t=(0,i.Iu)("ntf.success"),a=(0,i.Iu)("ntf.upld-suc",{file_name:e});(0,c.Vp)(t,a)}(r))).catch((e=>function(e,t){if(t)(0,u.S)(t);else{const t=(0,i.Iu)("ntf.error"),a=(0,i.Iu)("ntf.upld-unsuc",{file_name:e});(0,c.vU)(t,a)}}(r,e))).finally((()=>w()))}));(0,m.LK)(n,{method:"HEAD"}).then((()=>{try{(0,b.o)((e=>(0,g.$)((()=>{e(),w()}),r,o)),{timeout:0,closeOutside:!1})}catch(e){console.error("Modal error",e)}})).catch((()=>o()))};const E={init:function(e,t,a){(0,i.Iu)("upld.direct.choose",{query:"#upld-direct p",file:a.join(", ")}),function(e,t,a){const i=document.getElementById("upld-direct-start-pt");i&&(0,g.i)(i);const s=document.getElementById("drop-zone");s&&(document.ondragenter=e=>(0,p.yx)(s,!0),s.ondragleave=e=>(0,p.yx)(s,!1),document.ondrop=e=>(0,p.yx)(s,!1),k('#drop-zone input[type="file"]',e,t,a,i));k('#upld-direct input[type="file"]',e,t,a,i)}(e,t,a),f&&(x("uploading"),z(y))},update:function(e){const t=h.cG.includes(e),a=document.querySelector("#upld-direct-start-pt");a&&(a.setAttribute("data-link-state",e),t||(a.checked=!1),(0,p.H)(a,!t))},get isUploading(){return f},initInputByQuery:k};const P=class{get selected(){return this._selected}get isLocked(){return this._isLocked}lock(){this._isLocked=!0,this._root&&this._root.querySelectorAll("[data-tab-btn]").forEach((e=>{e.getAttribute("data-tab-btn")!==this.selected&&e.setAttribute("locked",!0)}))}unlock(){this._isLocked=!1,this._root&&this._root.querySelectorAll("[data-tab-btn]").forEach((e=>{e.hasAttribute("locked")&&e.removeAttribute("locked")}))}constructor(){this._root=null,this._selected=null,this._isLocked=!1}init(e){this._root=e,this._root&&(e.querySelectorAll("[data-tab-btn]").forEach((e=>{e.onclick=()=>{if(!this._isLocked){const t=e.getAttribute("data-tab-btn");t===this._selected||(this.closeTab(),this.openTab(t))}}})),this.openTab(this._selected,!0))}openTab(e){if(this._root&&e){const t=this._root.querySelector(`[data-tab="${e}"]`);t&&t.setAttribute("opened",!0);const a=this._root.querySelector(`[data-tab-btn="${e}"]`);a&&a.setAttribute("selected",!0),this._selected=e}}closeTab(){if(this._root&&this._selected){const e=this._root.querySelector(`[data-tab="${this._selected}"]`);e&&e.setAttribute("opened",!1);const t=this._root.querySelector(`[data-tab-btn="${this._selected}"]`);t&&t.setAttribute("selected",!1),this._selected=null}}},L=a(7049).Z,I=new P;function N(){E.isUploading?(I.openTab("direct"),I.lock()):L?.isUploading?(I.openTab("remote"),I.lock()):(I.unlock(),I.selected||I.openTab("direct"))}const _={init:function(e,t="",a){E.init(e,t,a),L?.init(e,t),I.init(document.getElementById("upld")),N()},update:function(e){E?.update(e),L?.update(e),N()},hide:function(e){(0,p.QH)(document.getElementById("upld"),e)}};var T=a(2451),j=a(5489),C=a(8751);const A=e=>(0,m.LK)(e,{method:"POST",headers:{"Content-Type":"application/json"}}),D=e=>(0,m.LK)(`/api/v1/job/${e}/resume`,{method:"PUT"}).catch((e=>(0,u.S)(e))),B=(e,t)=>{(0,b.o)((a=>((e,t,a)=>{const s=document.getElementById("modal-question"),n=document.importNode(s.content,!0);n.getElementById("modal-question-label").innerText=(0,i.Iu)("msg.cancel");const r=n.getElementById("yes"),o=n.getElementById("no");return r.addEventListener("click",(i=>{i.preventDefault(),t.onConfirm(),(0,p.H)(r,!0),(0,p.H)(o,!0),(0,m.LK)(`/api/v1/job/${a}`,{method:"DELETE",headers:{"Content-Type":"application/json"}}).catch((e=>{t.onError(),(0,u.S)(e)})),e()})),o.addEventListener("click",e),n})(a,t,e)),{timeout:0,closeOutside:!1})},O=(e,t)=>{e?(0,b.o)((e=>((e,t)=>{const a=document.getElementById("modal-confirm"),i=document.importNode(a.content,!0),s=i.getElementById("yes"),n=i.getElementById("no");return s.addEventListener("click",(a=>{a.preventDefault(),(0,p.H)(s,!0),(0,p.H)(n,!0),A(t).then((()=>(0,C.c4)("#dashboard"))).catch((e=>(0,u.S)(e))).finally((()=>e()))})),n.addEventListener("click",e),i})(e,t)),{timeout:0,closeOutside:!1}):A(t).then((()=>(0,C.c4)("#dashboard"))).catch((e=>(0,u.S)(e)))},R=()=>(0,m.LK)("/api/job",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({command:"cancel"})}).catch((e=>(0,u.S)(e)));var q=a(1972);const M=(e,t,a)=>{(0,q.Z)(e,t),a()},H=(e,t,a,s,n=!1)=>{const r=document.getElementById("modal-question"),o=document.importNode(r.content,!0);o.getElementById("modal-question-label").innerText=n?(0,i.Iu)("msg.del-folder",{folder_name:a}):(0,i.Iu)("msg.del-proj",{file_name:a});const l=o.getElementById("yes"),d=o.getElementById("no");return d.addEventListener("click",e),l.addEventListener("click",(a=>{a.preventDefault(),(0,p.H)(l,!0),(0,p.H)(d,!0),(0,m.LK)(t,{method:"DELETE",headers:{force:"?1"}}).then((()=>s&&s())).catch((e=>(0,u.S)(e))).finally((t=>e()))})),o},U=(e,t,a)=>{(0,b.o)((i=>H(i,e,t,a)),{timeout:0,closeOutside:!1})},K=(e,t)=>{(0,b.o)((a=>((e,t,a)=>{const i=document.getElementById("modal-file-name"),s=document.importNode(i.content,!0),n=s.getElementById("modal-file-name__input"),r=s.getElementById("yes"),o=s.getElementById("no");return o.addEventListener("click",e),r.addEventListener("click",(i=>{i.preventDefault();const s=n.value;if(s){const i=t(s);(0,p.H)(r,!0),(0,p.H)(o,!0),(0,m.LK)(i,{method:"PUT",headers:{"create-folder":"?1"}}).then((()=>a&&a())).catch((e=>(0,u.S)(e))).finally((t=>e()))}})),s})(a,e,t)),{timeout:0,closeOutside:!1})};function V(e){return`inset(${100-e}% 0% 0% 0%)`}var Z=a(5951);const F={},$=()=>{F.title=null,F.questionChildren=null,F.yes=null,F.no=null,(0,C.g9)(F.next)},G={load:()=>{F.title||(0,C.c4)("#dashboard"),document.getElementById("title-status-label").innerHTML=F.title;const e=document.getElementById("question"),t=F.questionChildren;Array.isArray(t)?t.forEach((t=>e.appendChild(t))):e.innerHTML=t;for(let e of["yes","no"]){const t=document.getElementById(e),a=F[e];t.querySelector("p").innerHTML=F[e+"Text"],t.addEventListener("click",(e=>{e.stopPropagation(),a($)}))}}};(0,i.Iu)("exp-times.exp-time"),(0,i.Iu)("exp-times.inc"),(0,i.Iu)("exp-times.layer-1st"),(0,i.Iu)("exp-times.profile");const W=e=>{const t=e.querySelector("img");(0,p.gL)(e,!1),t&&(t.setAttribute("data-src",t.src),t.src=document.querySelector(".loading-overlay img").src)},Y=e=>{const t=e.querySelector("img");if((0,p.gL)(e,!0),t){const e=t.getAttribute("data-src");e&&(t.src=e,t.setAttribute("data-src",""))}};var J=a(5502);const Q=function(e,t="smooth"){if(!e)return;const a=e.getBoundingClientRect(),i=document.body.getBoundingClientRect(),s=a.top-(i.top+function(){const e=document.querySelector(".header");return e&&"sticky"===getComputedStyle(e).position?e.getBoundingClientRect().height:0}());(a.bottom>window.innerHeight||a.top<0)&&window.scroll({top:s,behavior:t})};var X=a(5537);const ee=e=>{const t=(0,X.Z)(e).querySelector(".kebab"),a=t.querySelector(".kebab-menu"),i=t.querySelector("ul");a.addEventListener("click",(e=>{e.stopPropagation(),function(e){return e&&e.classList.contains("open")}(i)?te(i):function(e,t){e.classList.add("open"),(0,p.Ti)((()=>te(e)),e,t)}(i,a)})),i.querySelectorAll("li").forEach((e=>{e.addEventListener("click",(()=>te(i)))}))};function te(e){e.classList.remove("open")}const ae=e=>{const t=document.querySelectorAll(".storage-select-content li");t&&t.forEach((t=>t.setAttribute("selected",t.getAttribute("data-storage")===e)))},ie=e=>{const t=document.querySelector("#node-storage .storage-select-btn-inner");t&&(t.innerHTML=e)},se=(e,t)=>{e&&t&&(t.classList.toggle("open"),(0,p.Ti)((()=>{t?.classList.remove("open")}),e,t))},ne=e=>{const t=document.querySelector(".node-storage-space");if(!t)return;const a=e.available&&!!e.totalSpace;if((0,p.yx)(t,a),a){const a=e.freeSpace,s=e.totalSpace,n=s-a,r=Math.round(100*(s?n/s:0)),o=(0,i.Iu)("prop.storage-used-space",{used:(0,J.Z)("size",n),free:(0,J.Z)("size",a),total:(0,J.Z)("size",s)});(0,Z.g)(t,r),document.getElementById("storage-pct").innerHTML=(0,J.Z)("percent",r),document.getElementById("storage-space").innerHTML=o}},re=()=>{const e=document.querySelector("#node-storage .storage-select-btn");e&&(e.onclick=t=>{t.stopPropagation(),se(e,dropdownContent)})},oe=(e,t,a,i=!1)=>{const s=document.querySelector(".storage-select-content");document.querySelectorAll(".storage-select-content li").forEach((i=>{const n=i.getAttribute("data-storage");let r=!1;if(n in e){const o=e[n],l=i.querySelector("p");r=e[n].available,o.name&&(l.innerText=o.name),i.setAttribute("selected",n===t),i.onclick=e=>{e.stopPropagation(),ie(i.innerHTML),ae(n),s.classList.remove("open"),ne(o),a(n)}}(0,p.yx)(i,r)})),i&&ne(e[t])},le="FOLDER",de="PRINT_FILE",ce="FIRMWARE",ue=["name","date","size"];let pe=null;const me={origin:null,current_path:[],storages:{},files:[],eTag:null,sort:{field:"date",order:"desc"}};function ve(){const e=me.origin;return me.storages[e]}function ge(){return me.current_path.map((e=>e.path)).join("/")}function he(e){const t=ve(),a=ge();return be(t.path,a,e)}function be(e,t,a){const i=["/api/v1/files",e,t,a].filter((e=>!!e)).join("/");return a?i:`${i}/`}const fe=(e={})=>{(0,m.LK)("/api/v1/storage",{}).then((t=>{const a=t.data?.storage_list;let i=!!e.redraw,s=!!e.redraw;if(a&&a.forEach((e=>{const t=e.type,a={name:e.name,path:e.path.replaceAll("/",""),available:e.available,readOnly:e.read_only,freeSpace:e.free_space,totalSpace:e.total_space};if(t in me.storages){const e=me.storages[t];e.available!==a.available&&(i=!0),e.freeSpace!==a.freeSpace&&me.origin===t&&(s=!0)}else i=!0,s=!0;me.storages[t]=a})),!me.origin){let e=Object.keys(me.storages).find((e=>me.storages[e].available));e||(e=Object.keys(me.storages).find((()=>!0))),e&&Le(e)}i&&oe(me.storages,me.origin,Le,s)}))},ye=(e={})=>{if(!ve())return;const t=he();let a=me.eTag;e.force&&(me.eTag=null,a=null,function(e){const t=ve(),a=ge();_.init(t.path,a,e?.fileExtensions),_.hide(!1!==t?.readOnly)}(Je.getContext()));const i=e=>{me.files=e,ke(),we()};(0,m.LK)(t,{headers:{"If-None-Match":a}}).then((s=>{if(304===s.code)return;if(t!==he())return;const n=s.eTag;if(!n||n!==a){me.eTag=n;const t=s.data.children||[];if(!n&&!e.force){const e=(e,t)=>e.display_name.localeCompare(t.display_name);if(JSON.stringify([...me.files].sort(e))===JSON.stringify(t.sort(e)))return}i(t)}})).catch((()=>{me.eTag=null,i([]),Je.getContext().selectFile(null)}))},ke=()=>{const e=document.getElementById("files");if(e){for(;e?.firstChild;)e.removeChild(e.firstChild);e.appendChild(function(){const e=ve(),t=[e.name,...me.current_path.map((e=>e.name))],a=xe("node-current",t.pop()||"Root");a.getElementById("path").innerHTML=`${t.join("/")}/`;const s=a.getElementById("create");s&&(s.onclick=e=>{e.stopPropagation(),K(he)});(0,p.H)(s,!1!==e.readOnly),a.querySelector("#sort-by-name p").innerText=(0,i.Iu)("sort.by-name"),a.querySelector("#sort-by-date p").innerText=(0,i.Iu)("sort.by-date"),a.querySelector("#sort-by-size p").innerText=(0,i.Iu)("sort.by-size");return a.querySelector(`#sort-by-${me.sort.field}`).classList.add(me.sort.order),ue.forEach((e=>{a.getElementById(`sort-by-${e}`).addEventListener("click",(t=>{const a=document.getElementById(`sort-by-${e}`);document.getElementById(`sort-by-${me.sort.field}`).classList.remove(me.sort.order);const i=me.sort.field===e&&"asc"===me.sort.order?"desc":"asc";a.classList.add(i),me.sort.field=e,me.sort.order=i,ke(),we()}),!1)})),a}()),me.current_path.length&&e.appendChild(function(){const e=xe("node-up","",(()=>{me.current_path.pop(),ke(),ye({force:!0})}));return(0,i.ot)(e),e}())}},we=()=>{const e=document.getElementById("files");let t;if(e)for(let a of(e=>(e.sort(((e,t)=>{if(e.type===le&&t.type!==le)return-1;if(e.type!==le&&t.type===le)return 1;const a="desc"===me.sort.order?-1:1;switch(me.sort.field){case"date":return a*((e.m_timestamp||0)-(t.m_timestamp||0));case"size":return a*((e.size||0)-(t.size||0));default:return a*e.display_name.localeCompare(t.display_name)}})),e))(me.files)){switch(a.type.toUpperCase()){case le:t=ze(a,{files:void 0,folders:void 0});break;case de:t=Ee(a);break;case ce:t=Pe(a,"firmware");break;default:t=Pe(a,"file")}e.appendChild(t)}};function xe(e,t,a){const i=document.getElementById(e).content,s=document.importNode(i,!0);return a&&s.querySelector(".node").addEventListener("click",(e=>{a(e),e.preventDefault()})),s.querySelector("#name")?.appendChild(document.createTextNode(t)),s}function ze(e,t){const a=e.display_name||e.name,i=e.name,s=he(i),n=xe("node-folder",a,(()=>{me.current_path.push({path:i.replace("/",""),name:a}),ke(),ye({force:!0})})),r=[t?.files?`${t.files} files`:null,t?.folders?`${t.folders} folders`:null].filter((e=>null!=e)).join(" | ");n.getElementById("details").innerHTML=r;const o=n.getElementById("delete");(0,p.gL)(o,!(e.read_only||e.ro)),o&&(o.onclick=e=>{var t,i,n;e.stopPropagation(),t=s,i=a,n=()=>{},(0,b.o)((e=>H(e,t,i,n,!0)),{timeout:0,closeOutside:!1})});const l=n.getElementById("rename");return l&&(l.onclick=e=>{e.stopPropagation(),console.log("renameFolder")}),n}const Se=e=>{!function(e){const t=Je.getContext(),a=t.files.selected,i=ge(),s=he(e.name);if(a===i)return;t.selectFile({...e,path:i,resource:s});const n=document.getElementById("job");n&&Q(n)}(e)};function Ee(e){const t=xe("node-file",e.display_name||e.name,(t=>Se(e))),a=t.querySelector(".node-details");a.querySelectorAll(".details").forEach((t=>{(0,i.ot)(t);const s=(0,j.NA)(t.dataset.where,e);if(s){const e=(0,J.Z)(t.dataset.format,s);t.querySelector("p[data-value]").innerHTML=e}else a.removeChild(t)}));const s=e?.refs?.thumbnail;if(s){const a=t.querySelector("img.node-img");a.setAttribute("data-src",e.date?`${s}?ct=${e.date}`:s),pe.observe(a)}return ee(t),function(e,t){const a=he(e.name),i=e.display_name||e.name,s=t.getElementById("details");s&&(s.onclick=t=>{Se(e)});const n=t.getElementById("start");n&&(n.onclick=e=>{e.stopPropagation(),console.log("startPrint")});const r=t.getElementById("rename");r&&(r.onclick=e=>{e.stopPropagation(),console.log("renameFile")});const o=t.getElementById("delete");o&&((0,p.gL)(o,!(e.read_only||e.ro)),o.onclick=e=>{U(a,i),e.stopPropagation()});const l=t.getElementById("download");l&&((0,p.gL)(l,!!e.refs?.download),l.onclick=t=>{W(l),M(e.refs?.download,i,(()=>Y(l))),t.stopPropagation()})}(e,t),(0,i.ot)(t),t}function Pe(e,t){const a=xe("node-file",e.display_name||e.name,(e=>{})),s=a.querySelector(".node-details");s.querySelectorAll(".details").forEach((t=>{(0,i.ot)(t);const a=(0,j.NA)(t.dataset.where,e);if(a){const e=(0,J.Z)(t.dataset.format,a);t.querySelector("p[data-value]").innerHTML=e}else s.removeChild(t)}));const n=a.querySelector("img.node-img");if(t){const e=n.getAttribute(`data-${t}`);e&&(n.src=e),pe.observe(n)}else(0,p.yx)(n,!1);return function(e){["details","start","rename","delete","download"].forEach((t=>{const a=e.getElementById(t);a&&(0,p.yx)(a,!1)}))}(a),a}function Le(e){if(e in me.storages){const t=me.storages[e];me.origin=e,me.current_path=[],ke(),t.available&&ye({force:!0}),_.hide(!1!==t.readOnly)}}const Ie={load:function(e){if(me.eTag=null,(0,i.Iu)("proj.link",{query:"#title-status-label"}),!pe){pe=new IntersectionObserver(((e,t)=>{e.forEach((e=>{if(e.isIntersecting){const t=e.target.getAttribute("data-src");(0,m.gJ)(t).then((({url:t})=>{e.target.src=t})).catch((()=>{}))}}))}),{rootMargin:"0px 0px 50px 0px",threshold:0})}e||(e=Je.getContext());const t=e.files.selected;if(t){(function(e,t){if(!e||!t)return null;let a=me.files.find((t=>t.origin===e));const i=t.split("/").filter((e=>e)).slice(1);for(const e of i){if(!a)break;a=a.children.find((t=>t.name===e))}return"machinecode"===a?.type?a:null})(t.origin,t.path)||e.selectFile(null)}Te(e,!0),re(),fe({redraw:!0}),ye({force:!0})},update:e=>{const t=e.state;fe(),ye(),Te(e,!0),_.update(t)},getApiPath:be};let Ne=null,_e=null;function Te(e,t=!1){const a=je(e,t);Ne&&Ne.state!==e.state&&(Ne=null),a&&Ce(e,t)}function je(e,t){const a=document.getElementById("job");if(!a)return!1;const i=t?!!e.files.selected:!!e.job?.id;return(0,p.yx)(a,i),i}function Ce(e,t){const a=t?e.files.selected:e.job,s=a?.file?.resource;e.state;var n;if(a.file?(0,p.Zk)():(0,p.QP)(),function(e,t){const a=document.querySelector(".progress-bar"),i=document.querySelector(".progress-pct"),s=document.querySelector(".preview-img-wrapper"),n=void 0!==t;(function(e,t,a){if(!e)return;const i=t?.url&&t.ready?t.url:document.querySelector(".thumbnail-fallback")?.src;if(e.getAttribute("data-src")!==i){for(;e.firstChild;)e.removeChild(e.firstChild);e.setAttribute("data-src",i);const t=document.createElement("div");t.className="progress-img";const s=document.createElement("img");s.src=i,s.className="background",t.appendChild(s);const n=document.createElement("img");n.src=i,n.className="foreground",n.style.clipPath=V(a??100),t.appendChild(n),e.appendChild(t)}else{const t=e.querySelector(".foreground");t&&(t.style.clipPath=V(a))}})(s,e,t),(0,Z.g)(a,t,"top"),(0,p.yx)(a,n),(0,p.yx)(i,n)}(a.thumbnail,a.progress),n=t,(0,p.QH)(document.querySelector("#job #pnt-time"),n),(0,p.QH)(document.querySelector("#job #rem-time"),n),(0,j.ZP)("job",a),s&&a.file){const s=t?null:a.id;!function(e,t,a){const i=t.file;(function(e,t){const a=document.querySelector("#job #stop"),i=document.querySelector("#job-close"),s=h.PT.fromApi(e),n=[h.PT.IDLE,h.PT.READY,h.PT.FINISHED].includes(s),r=!Ne&&h.Dt.includes(e),o=Je.getContext();if((0,p.gL)(a,r),a&&t){const i=t&&![h.PT.REFILL].includes(e);(0,p.yx)(a,i),a.onclick=()=>{B(t,{onConfirm:()=>{Ne={code:"stop",state:e},(0,p.gL)(a,!1)},onError:()=>Ne=null})}}i&&((0,p.yx)(i,n||!t),i.onclick=t?R:()=>o.selectFile(null))})(e,a),function(e,t,a){const i=document.querySelector("#job #start"),s=h.cG.includes(e);i&&((0,p.yx)(i,s),(0,p.gL)(i,s),i.onclick=()=>O(e!==h.PT.READY,t.resource))}(e,i),function(e,t,a){const i=document.querySelector("#job #delete");if(i){const s=t.display_name||t.name;(0,p.gL)(i,!t.readOnly&&t.resource),(0,p.yx)(i,!a||e===h.cG.includes(e)),i.onclick=()=>{U(t.resource,s,(()=>{if(!a){Je.getContext().selectFile(null)}}))}}}(e,i,a),function(e,t,a){const i=document.querySelector("#job #download");if(i){const e=!a&&t.refs?.download&&(!_e||_e===t.refs.download),s=t.display_name||t.name;(0,p.yx)(i,e),e&&(i.onclick=()=>{_e=t.refs.download,W(i),M(t.refs.download,s,(()=>{_e=null,Y(i)}))})}}(0,i,a),!a||(function(e,t,a){const i=document.querySelector(a),s=e===h.PT.PRINTING;(0,p.yx)(i,s),(0,p.gL)(i,!Ne&&s),i&&(i.onclick=()=>{(0,p.gL)(i,!1),Ne={code:"pause",state:e},(e=>(0,m.LK)(`/api/v1/job/${e}/pause`,{method:"PUT"}).catch((e=>(0,u.S)(e))))(t).catch((()=>Ne=null))})}(e,a,"#job #pause"),function(e,t){const a=document.querySelector("#job #resume"),i=[h.PT.PAUSED].includes(e);(0,p.yx)(a,i),(0,p.gL)(a,!Ne&&i),a&&(a.onclick=()=>{(0,p.gL)(a,!1),Ne={code:"resume",state:e},D(t).catch((()=>Ne=null))})}(e,a))}(e.state,a,s),(0,j.ZP)("file",a.file),function(e,t){const a=(0,i.Iu)("prop.na");document.getElementById("job").querySelectorAll(".job-details .job-prop").forEach((e=>{const t=e.querySelector(".job-prop-grid").children;let i=!0;for(const e of t){var s=e.querySelector("[data-type]")?.innerHTML.trim()===a;(0,p.QH)(e,s),s||(i=!1)}(0,p.QH)(e,i)}))}()}}p.QP,p.Zk;const Ae=e=>{if(!e.printer)return;const t=e.state;Te(e),_.update(t),T.Z.update(e,null)},De={load:e=>{(0,i.Iu)("home.link",{query:"#title-status-label"}),l(),Ae(e),T.Z.update(e,null),T.Z.updateCurrentCamera(),(0,m.LK)("/api/v1/storage").then((t=>{const a=t.data.storage_list.find((e=>e.available&&!e.read_only));if(a){const t=a.path.replace("/","");_.init(t,"",e.fileExtensions)}}))},update:Ae},Be=e=>[...e].filter((e=>!!e)).map((e=>e.trim())).join(" - "),Oe=e=>{e.getAttribute("tooltip")||(e.addEventListener("click",(t=>{e.classList.toggle("tooltip-handle--active");const a=e.querySelector("span");(0,p.Ti)((()=>e.classList.remove("tooltip-handle--active")),a,e),t.preventDefault()}),!1),e.setAttribute("tooltip",!0))};let Re=0,qe=null;const Me=()=>{const e=e=>{const t=document.getElementById("offline-screen"),a=document.importNode(t.content,!0);return["not-responsing","please-wait"].forEach((e=>{const t=a.getElementById(`offline-screen.${e}`);t&&(t.innerHTML=(e=>{switch(e){case"not-responsing":return(0,i.Iu)("msg.offline.not-responsing");case"please-wait":return(0,i.Iu)("msg.offline.please-wait");default:return""}})(e))})),qe={node:a,close:()=>{e(),qe=null}},a};(0,b.o)((t=>e(t)),{timeout:0,closeOutside:!1,className:"offline-screen"})},He=({link:e,isConnected:t})=>{const a=["connect"];for(const t in e){const{ok:s,message:n}=e[t],r=document.getElementById(`conn-status-${t}-msg`),o="ok"===n.toLowerCase();r&&(r.innerHTML="connect"===t?o?(0,i.Iu)("conn.connect.linked"):(0,i.Iu)("conn.connect.not-linked"):(0,i.Iu)("conn.error_status"));const l=document.getElementById(`conn-status-${t}`),d=l.querySelector(".icon-success"),c=l.querySelector(".icon-warning"),u=l.querySelector(".info-message-tooltip"),m=u.querySelector("span"),v=void 0===s||s&&!a.includes(t);u&&m&&(o||(m.innerText=n,Oe(u)),(0,p.QH)(u,o)),(0,p.QH)(l,v),v||((0,p.QH)(d,!s),(0,p.QH)(c,s))}const s=e=>{Re<3?Re+=1:(e?Me():qe.close(),Re=0)};t?qe&&s(!1):!qe&&s(!0)};const Ue=e=>{return{resource:e.resource??(t=e.path,a=e.name,`/api/v1/files${t}${t.endsWith("/")?"":"/"}${a}`),name:e.name,displayName:e.display_name??e.name,path:e.path,displayPath:e.display_path??e.path,size:e.size,refs:{download:e.refs?.download,icon:e.refs?.icon,thumbnail:e.refs?.thumbnail},lastModified:e.m_timestamp||0,meta:{filamentType:e.meta?.filament_type,layerHeight:e.meta?.layer_height,estimatedPrintTime:e.meta?.estimated_print_time,exposureTime:e.meta?.exposure_time,exposureTimeCalibration:e.meta?.exposure_time_calibration,exposureTimeFirst:e.meta?.exposure_time_first,exposureUserProfile:e.meta?.exposure_user_profile},readOnly:e.read_only||e.ro};var t,a},Ke=new class{constructor(){this.state=void 0,this.printer=void 0,this.job=void 0,this.transfer=void 0,this.version=void 0,this.storage=[],this.currentStorage=void 0,this.telemetry={temperature:{nozzle:{current:0,target:0},bed:{current:0,target:0}}},this.flow=0,this.speed=0,this.fan={hotend:0,print:0},this.link={connect:{ok:!0,message:"OK",settings:{hostname:"connect.prusa3d.com",tls:!0,port:0}},printer:{ok:!0,message:"OK",settings:{port:"",baudrate:115200}}},this.files={location:"/",selected:{file:void 0,thumbnail:void 0}},this.fileExtensions=[".gcode"],this.updateConnection()}updateConnection(){return(0,m.LK)("/api/connection",{method:"GET"}).then((e=>{this.link.connect.settings={hostname:e.data.connect?.hostname,port:e.data.connect?.port,tls:e.data.connect?.tls},this.link.connect.registration=e.data.connect?.registration,this.link.printer.settings={port:e.data.current?.port,baudrate:e.data.current?.baudrate}}))}update({status:e,printer:t}){e?.ok&&e.payload&&this.updateStatus(e.payload.data),t&&this.updatePrinter(t)}updateStatus(e){this.updateTelemetry(e.printer),this.updateJob(e.job),this.updateStorage(e.storage),this.updateTransfer(e.transfer),this.updateCamera(e.camera)}updatePrinter(e){this.printer={name:e.name,location:e.location,farmMode:e.farm_mode,nozzleDiameter:e.nozzle_diameter,minExtrusionTemp:e.min_extrusion_temp,serial:e.serial,hostname:e.hostname,port:e.port},this.fileExtensions=e.project_extensions??[".gcode"]}updateTelemetry(e){this.state=h.PT.fromApi(e.state.toUpperCase()),this.telemetry={temperature:{nozzle:{current:e.temp_nozzle,target:e.target_nozzle},bed:{current:e.temp_bed,target:e.target_bed},ambient:{current:e.temp_ambient},cpu:{current:e.temp_cpu},uvLED:{current:e.temp_uv_led}},axis:{x:e.axis_x,y:e.axis_y,z:e.axis_z},flow:e.flow,speed:e.speed,fan:{hotend:e.fan_hotend,print:e.fan_print,blower:e.fan_blower,rear:e.fan_rear,uvLED:e.fan_uv_led},coverClosed:e.cover_closed,isCalibrated:e.is_calibrated},this.link.connect.message=e.status_connect?.message??"",this.link.connect.ok=e.status_connect?.ok,this.link.printer.message=e.status_printer?.message??"ok",this.link.printer.ok=e.status_printer?.ok??!0}updateJob(e){const t=this.job?.id||null,a=e?.id||null;if(t!==a||this.job?.dirty){if(!a)return void(this.job=void 0);this.updateJobDetails()}if(e&&a){const t=this.job?.timeRemaining,s=e.time_remaining,n=t!=s?(i=s,Math.round(Date.now()/1e3)+i):this.job?.estimatedEnd;0,this.job={dirty:!1,file:void 0,...this.job,timePrinting:e.time_printing,id:a,progress:e.progress,timeRemaining:e.time_remaining,estimatedEnd:n}}var i}updateJobDetails(){return(0,m.LK)("/api/v1/job").then((e=>{const t=e.data;if(t.id===this.job.id&&(this.job={...this.job,dirty:!1,file:Ue(t.file),thumbnail:{source:!t.file.refs?.thumbnail,ready:!t.file.refs?.thumbnail,url:void 0}},!this.job.thumbnail.ready)){const e=this.job.id;(0,m.gJ)(this.job.file.refs.thumbnail).then((({url:t})=>{this.job.id===e&&(this.job.thumbnail.url=t)})).catch((e=>console.error("Failed to fetch thumbnail",e))).finally((()=>this.job.thumbnail.ready=!0))}})).catch((e=>{this.job.dirty=!0,(0,u.S)(e)}))}updateStorage(e){Object.keys(e).forEach((e=>{const t={path:e.path,name:e.name,readOnly:e.readOnly,freeSpace:e.freeSpace},a=this.storage.findIndex((e=>e.path===t.path));-1!==a?this.storage[a]=t:this.storage.push(t)}))}updateTransfer(e){const t=this.transfer?.id||null,a=e?.id||null;if(t!==a){if(!a)return void(this.transfer=void 0);(0,m.LK)("/api/v1/transfer").then((e=>{const t=e.data;this.transfer={...this.transfer,file:{displayName:t.display_name??t.name,path:t.path,size:t.size,toPrint:t.to_print}}})).catch((e=>(0,u.S)(e)))}if(a){const t=Math.round(Date.now()/1e3),i=this.transfer?.file?.size||0,s=e.time_transferring,n=void 0!==s?t-s:void 0,r=e.data_transferred,o=i-r,l=s>0&&o>=0?o/(r/s):void 0;this.transfer={...this.transfer,timeTransferring:s,timeStarted:n,timeRemaining:l,id:a,progress:e.progress,dataTransferred:r}}}updateCamera(e){this.camera={id:e?.id}}selectFile(e){if(!e)return void(this.files.selected=null);const t=e.refs?.thumbnail;if(this.files.selected={file:Ue(e),thumbnail:{source:t,ready:!t,url:void 0},timeRemaining:e.meta?.estimated_print_time},!e.meta){const e=this.files.selected.file.resource;(0,m.LK)(e).then((t=>{const a=Ue({...t.data,resource:e});this.files.selected.file.resource===e&&(this.files.selected.file.meta=a.meta,this.files.selected.timeRemaining=a.meta?.estimatedPrintTime)}))}t&&(0,m.gJ)(t).then((({url:e})=>{t===this.files.selected.thumbnail.source&&(this.files.selected.thumbnail.url=e)})).catch((()=>{})).finally((()=>{t===this.files.selected.thumbnail.source&&(this.files.selected.thumbnail.ready=!0)}))}},Ve=e=>{const t=e.load;return e.load=()=>{(()=>{const e=document.getElementById("title-printer");e&&(e.innerHTML=Ze())})(),t(Ke)},e},Ze=()=>(e=>Be([e.printer?.location||e.printer?.hostname,e.printer?.name]))(Ke);let Fe=De;const $e={routes:[{path:"dashboard",html:a(2373),module:Ve(De),getTitle:()=>(0,i.Iu)("home.link")},{path:"question",html:a(5198),module:Ve(G)},null,{path:"files",html:a(7189),module:Ve(Ie),getTitle:()=>(0,i.Iu)("proj.storage")},{path:"settings",html:a(2936),module:Ve(a(2957).Z),getTitle:()=>(0,i.Iu)("settings.title")},{path:"control",html:a(3478),module:Ve(a(732).Z),getTitle:()=>(0,i.Iu)("control.link")},{path:"cameras",html:a(5464),module:Ve(a(2451).Z),getTitle:()=>(0,i.Iu)("cameras.link")}].filter((e=>null!=e)),init:e=>{Ke.update(e),Ge()},update:e=>{Ke.update(e);const t=(0,C.nC)(),a=(e=>{const t=e.state;let a=(0,h.ny)(t);switch(t){case"IDLE":return"";case"PRINTING":return`${a} ${Math.round(e?.job?.progress||0)}%`;default:return a}})(Ke);var i;document.title=(i=[a,$e.routes.find((e=>e.path===t)).getTitle()],Be([...i,Ze(),"PrusaLink"])),(0,j.zR)("telemetry",Ke),(e=>{const t=e,a=document.getElementById("printer-status");a&&(a.innerHTML=(0,h.ny)(t))})(Ke.state),We(Ke.telemetry),Ye()},setConnected:e=>{He({link:Ke.link,isConnected:e})},setModule:e=>{Fe=e},getContext:()=>Ke},Ge=()=>{const e=new Map([["temp-line-blue",[]],["temp-line-orange",[]]]);o(e,300),l()},We=e=>{const t=(new Date).getTime();d("temp-line-blue",[t,e.temperature.bed.current]),d("temp-line-orange",[t,e.temperature.nozzle.current]),l()},Ye=()=>{Fe&&Fe.update&&Fe.update(Ke)},Je=$e},8751:(e,t,a)=>{"use strict";a.d(t,{c4:()=>l,g9:()=>d,nC:()=>r});var i=a(7780),s=a(3532);const n=e=>{const[t,a]=e.split("#");return a||"dashboard"},r=()=>n(window.location.hash);function o(e,t){const a=n(e),r=s.Z.routes.find((e=>e.path===a));if(!r)return!1;t&&function(e){window.location.hash!=e&&history.pushState(null,"",e)}("#"+a);const o=document.getElementById("root");var l;return function(e,t){t.innerHTML="",(new DOMParser).parseFromString(e,"text/html").body.childNodes.forEach((e=>t.appendChild(e)))}(r.html,o),(0,i.ot)(o),function(e){const t=document.querySelector(`a[href="#${e}"]`);t&&(document.getElementById("navbar").childNodes.forEach((e=>{"li"===e.nodeName.toLowerCase()&&e.classList.remove(["active"])})),t.parentNode.className="active")}(a),(l=r.getTitle)&&(document.title=l()),window.scrollTo({top:0}),r.module.load(),s.Z.setModule(r.module),!0}const l=e=>o(e,!0),d=e=>o(e,!1)},4800:(e,t,a)=>{"use strict";a.d(t,{Dt:()=>r,PT:()=>s,cG:()=>n,ny:()=>o});var i=a(7780);const s={UNKNOWN:"UNKNOWN",IDLE:"IDLE",READY:"READY",BUSY:"BUSY",POUR_IN_RESIN:"POUR IN RESIN",REFILL:"FEED ME",PRINTING:"PRINTING",PAUSED:"PAUSED",FINISHED:"FINISHED",STOPPED:"STOPPED",SELECTED:"SELECTED",ERROR:"ERROR",ATTENTION:"ATTENTION",fromApi:e=>{switch(e.toUpperCase()){case"IDLE":return s.IDLE;case"READY":return s.READY;case"BUSY":return s.BUSY;case"PRINTING":return s.PRINTING;case"PAUSED":return s.PAUSED;case"FINISHED":return s.FINISHED;case"STOPPED":return s.STOPPED;case"ERROR":return s.ERROR;case"ATTENTION":return s.ATTENTION;case"POUR IN RESIN":return s.POUR_IN_RESIN;case"FEED ME":return s.REFILL;case"SELECTED":return s.SELECTED;case"UNKNOWN":return s.UNKNOWN;default:return console.error(`Unsupported state: ${e}`),s.UNKNOWN}}},n=[s.IDLE,s.READY,s.FINISHED,s.SELECTED],r=[s.PRINTING,s.PAUSED,s.POUR_IN_RESIN,s.SELECTED],o=e=>{switch(e){case s.IDLE:return(0,i.Iu)("prop.st-idle");case s.READY:return(0,i.Iu)("prop.st-ready");case s.BUSY:return(0,i.Iu)("prop.st-busy");case s.PRINTING:return(0,i.Iu)("prop.st-printing");case s.PAUSED:return(0,i.Iu)("prop.st-paused");case s.FINISHED:return(0,i.Iu)("prop.st-finished");case s.STOPPED:return(0,i.Iu)("prop.st-stopped");case s.ERROR:return(0,i.Iu)("prop.st-error");case s.ATTENTION:return(0,i.Iu)("prop.st-attention");case s.POUR_IN_RESIN:return(0,i.Iu)("prop.st-pour-resin");case s.SELECTED:return(0,i.Iu)("prop.st-ready");case s.REFILL:return(0,i.Iu)("prop.st-feedme");default:return console.error(`Unsupported state: ${e}`),(0,i.Iu)("prop.st-unknown")}}},4977:e=>{"use strict";e.exports=JSON.parse('{"langs":["cs","de","en","es","fr","it","kr","lt","nl","pl","sk"],"texts":{"home":{"link":["Přehled","Dashboard","Dashboard","Panel principal","Tableau de bord","Dashboard","대쉬보드","Darbastalis","Dashboard","Panel kontrolny","Prehľad"],"title":["Stav tiskárny","Druckerstatus","Printer Status","Estado de la impresora","État de l\'imprimante","Stato della stampante","프린터 상태","Spausdintojo būsena","Printerstatus","Stan drukarki","Stav tlačiarne"]},"proj":{"link":["Úložiště","Projekte","Storage","Proyectos","Projets","Progetti","저장장치","Saugykla","Opslag","Projekty","Úložisko"],"storage":["Úložiště","Speicher","Storage","Almacenamiento","Stockage","Archivio","저장장치","Saugykla","Opslag","Projekty","Úložisko"],"add-from":{"title":["Nahrát soubor z","Datei hinzufügen von","Add file from","Añadir archivo desde","Ajouter un fichier à partir de","Aggiungi file da","에서 파일 추가하기","Pridėti failą iš","Bestanden toevoegen van","Dodaj plik z","Nahrať súbor z"],"local":["Lokálního úložiště","Lokaler Speicher","Local storage","Almacenamiento local","Stockage local","Archivio locale","로컬 저장장치","Vietinis saugykla","Lokale opslag","Magazyn lokalny","Lokálneho úložiska"],"remote":["Vzdálené url","Remote-URL","Remote url","Eliminar url","URL distante","Url remoto","원격 URL","Nuotolinis URL","Externe URL","Zdalny URL","Vzdialenej URL"]},"details":["Detaily souboru","Datei-Details","File details","Detalles del archivo","Détails du fichier","Dettagli file","파일 상세정보","Failo informacija","Bestandseigenschappen","Szczegóły pliku","Detaily súboru"],"del":["Smazat","Datei löschen","Delete","Borrar archivo","Supprimer le Fichier","Elimina File","삭제","Ištrinti","Verwijderen","Usuń plik","Zmazať"],"download":["Stáhnout","Herunterladen","Download","Descargar","Télécharger","Download","다운로드","Atsisiųsti","Downloaden","Pobierz","Stiahnuť"],"up-folder":["nadřazená složka","übergeordneter Ordner","parent folder","carpeta contenedora","dossier parent","cartella superiore","상위폴더","tėvinis aplankas","Bovenliggende map","folder nadrzędny","nadradený priečinok"]},"control":{"link":["Ovládání","Kontrolle","Control","Control","Contrôle","Controllo","제어","Valdymas","Bediening","Sterowanie","Ovládanie"],"coordinates":["Souřadnice tiskárny","Drucker-Koordinaten","Printer Coordinates","Coordenadas de la Impresora","Coordonnées de l\'imprimante","Coordinate Stampante","프린터 좌표","Spausdintojo koordinatės","Printercoördinaten","Współrzędne drukarki","Súradnice tlačiarne"],"axis":{"x":["Osa X","X-Achse","X axis","Eje X","axe X","Asse X","X축","X ašis","X-as","Oś X","Os X"],"y":["Osa Y","Y-Achse","Y axis","Eje Y","axe Y","Asse Y","Y축","Y ašis","Y-as","Oś Y","Os Y"],"z":["Osa Z","Z-Achse","Z axis","Eje Z","axe Z","Asse Z","Z축","Z ašis","Z-as","Oś Z","Os Z"]},"stepper-motors":["Krokové motory","Schrittmotoren","Stepper Motors","Motores Paso-a-paso","moteurs","Motori Passo-Passo","스텝 모터","Sustojimo varikliai","Stappenmotors","Silniki krokowe","Krokové motory"],"heated-bed-move":["Pohyb podložky v ose X a Y","Heizbett X und Y bewegen","Heated Bed X and Y Move","Base Calefactable Mover X e Y","Mouvement en x/y","Spostamento X e Y Piano Riscaldato","히트베드 X 및 Y 이동","Šildomojo patalo X ir Y poslinkis","Beweeg verwarmd bed in X en Y","Ruch stołu grzewczego X i Y","Pohyb podložky v osi X a Y"],"move-step":["Krok pohybu [mm]","Schrittweite [mm]","Move Step [mm]","Mover Paso [mm]","déplacement [mm]","Sposta Passo [mm]","[mm]mm 스텝 이동","Poslinkis [mm]","Beweegafstand [mm]","Krok ruchu [mm]","Krok pohybu [mm]"],"nozzle-z-move":["Pohyb extrudéru v ose Z","Düse Z Bewegung","Nozzle Z Move","Boquilla Mover Z","déplacement en z","Spostamento Z Ugello","노즐 Z 이동","Antgalio Z poslinkis","Beweeg omhoog/omlaag","Ruch dyszy w osi Z","Pohyb extruderu v osi Z"],"extruder":["Extrudér","Extruder","Extruder","Extrusor","extrudeur","Estrusore","익스트루더","Ištraukiklis","Extruder","Ekstruder","Extruder"],"extrude-retract-step":["Krok vytlačení/vtažení [mm]","Extrudieren/Zurückziehen Schritt [mm]","Extrude/Retract Step [mm]","Distancia Extruir/Retraer [mm]","longueur d\'extrusion ou de rétractation [mm]","Passo Estrusione/Retrazione [mm]","[mm]mm 스텝 압출/철회","Ištrauka/atgalinimas [mm]","Extrude/retract-afstand [mm]","Krok ekstruzji/retrakcji [mm]","Krok vysunutia/zasunutia [mm]"],"nozzle-temp":["Teplota trysky","Düsentemperatur","Nozzle Temperature","Temperatura Boquilla","température de la buse","Temperatura Ugello","노즐 온도","Antgalio temperatūra","Temperatuur nozzle","Temperatura dyszy","Teplota trysky"],"speed":["Rychlost","Geschwindigkeit","Speed","Velocidad","vitesse","Velocità","속도","Greitis","Snelheid","Prędkość","Rýchlosť"],"heated-bed-temp":["Teplota vyhřívané podložky","Temperatur des Heizbettes","Heated Bed Temperature","Temperatura de la Base Calefactable","Température du lit","Temperatura piano riscaldato","히트베드 온도","Šildomojo patalo temperatūra","Temperatuur verwarmd bed","Temperatura stołu","Teplota vyhrievanej podložky"],"flow":["Průtok","Flow","Flow","Flujo","flux","Flusso","흐름","Srautas","Extrusiefactor","Przepływ","Prietok"],"title":["Ovládání tiskárny","Druckersteuerung","Printer Control","Control de la Impresora","Contrôle de l\'imprimante","Controllo Stampante","프린터 제어","Spausdintojo valdymas","Printerbediening","Sterowanie drukarką","Ovládanie tlačiarne"]},"cameras":{"link":["Kamery","Kameras","Cameras","Cámaras","Caméras","Fotocamere","카메라","Kameros","Camera\'s","Kamery",""],"trigger-scheme":{"ten-sec":["Každých 10 sekund","Alle 10 Sekunden","Every 10 seconds","Cada 10 segundos","Toutes les 10 secondes","Ogni 10 secondi","매 10초","Kas 10 sekundžių","Elke 10 seconden","Co 10 sekund",""],"thirty-sec":["Každých 30 sekund","Alle 30 Sekunden","Every 30 seconds","Cada 30 segundos","Toutes les 30 secondes","Ogni 30 secondi","매 30초","Kas 30 sekundžių","Elke 30 seconden","Co 30 sekund",""],"sixty-sec":["Každých 60 sekund","Alle 60 Sekunden","Every 60 seconds","Cada 60 segundos","Toutes les 60 secondes","Ogni 60 secondi","매 60초","Kas 60 sekundžių","Elke minuut","Co 60 sekund",""],"each-layer":["Při změně vrstvy","Beim Schichtwechsel","On layer change","Al cambiar de capa","Au changement de couche","Al cambio layer","매 레이어","Pakeitus sluoksnį","Bij laagwissel","Przy zmianie warstwy",""],"fifth-layer":["Každou pátou vrstvu","Alle 5 Schichten","Every fifth layer","Cada cinco capas","Toutes les cinq couches","Ogni cinque layer","매 5레이어","Kas penktas sluoksnis","Elke 5 lagen","Co piąta warstwa",""],"manual":["Ručně","Manuell","Manual","Manual","Manuel","Manuale","수동","Rankinis","Handmatig","Ręcznie",""]}},"settings":{"title":["Nastavení","Einstellungen","Settings","Ajustes","Réglages","Impostazioni","세팅","Nustatymai","Instellingen","Ustawienia","Nastavenie"]},"conn":{"prusa-connect-status":["Stav připojení PrusaConnect","PrusaConnect Status","PrusaConnect Status","Estado de PrusaConnect","Informations de connexion à PrusaConnect","Stato PrusaConnect","프루사커넥트 상태","PrusaConnect būsena","Status van PrusaConnect","Stan PrusaConnect","Stav pripojenia PrusaConnect"],"printer-status":["Stav připojení 3D tiskárny","3D-Drucker Verbindungsstatus","3D Printer Connection Status","Estado Conexión Impresora 3D","Informations de connexion à l\'imprimante 3D","Stato Connessione Stampante 3D","3D 프린터 연결 상태","3D spausdintojo prisijungimo būsena","Verbindingsstatus van 3D-printer","Status połączenia z drukarką 3D","Stav pripojenia 3D tlačiarne"],"title":["připojení","Verbindung","Connection",null,"connexion",null,"연결","Prisijungimas","Verbinding",null,"pripojenie"],"prusa-connect-url":["Adresa PRUSA CONNECT","PRUSA CONNECT Adresse","PRUSA CONNECT Address",null,null,null,"프루사커넥트 주소","PRUSA CONNECT adresas","Adres van PRUSA CONNECT",null,"Adresa PrusaConnect"],"suc":["Úspěšně připojeno","Erfolgreich verbunden","Successfully connected","Correctamente conectado","Connecté avec succès","Connessione riuscita","연결 성공","Prisijungta sėkmingai","Succesvol verbonden","Połączono pomyślnie","Úspešne pripojené"],"connect":{"linked":["","Verbunden","Linked","Enlazado","Associée","Collegato","연결됨","Susieta","Verbonden","Połączono",""],"not-linked":[null,"Nicht verbunden","Not Linked","No enlazado","Non Associée","Non collegato","연결안됨","Nesusieta","Niet verbonden","Nie połączono",""]},"error_status":["Chyba","Fehler","Error","Error","Erreur","Errore","에러","","","Błąd",""]},"prop":{"temp-nozzle":["Teplota trysky","Düsentemperatur","Nozzle Temperature","Temperatura del nozzle","Température de la buse","Temperatura ugello","노즐 온도","Nozzle Temperature","Nozzletemperatuur","Temperatura dyszy","Teplota trysky"],"temp-bed":["Vyhřívaná podložka","Heizbett","Heatbed","Base calefactable","Plateau chauffant","Piano riscaldato","히트베드","Dėklo temperatūra","Verwarmd bed","Stół","Vyhrievaná podložka"],"speed":["Rychlost tisku","Druckgeschwindigkeit","Printing Speed","Velocidad de impresión","Vitesse d\'impression","Velocità di stampa","출력속도","Spausdinimo greitis","Printsnelheid","Prędkość drukowania","Rýchlosť tlače"],"z-height":["Výška Z","Z-Höhe","Z-Height","Altura-Z","Hauteur en z","Altezza-Z","Z높이","Z-Height","Z-Hoogte","Wysokość Z","Výška Z"],"nozzle-diameter":["Velikost trysky","Düsendurchmesser","Nozzle Diameter","Diámetro de Boquilla","Diamètre de la Buse","Diametro ugello","노즐지름","Galvutės skersmuo","Nozzlediameter","Średnica dyszy","Veľkosť trysky"],"rem-time":["Zbývající čas","Restzeit","Remaining time","Tiempo restante","Temps restant","Tempo residuo","남은시간","Likęs laikas","Resterende tijd","Pozostały czas","Zostávajúci čas"],"time-est":["Odhad doby tisku","Druckzeit Schätzen","Print Time Estimate","Tiempo Estimado de Impresión","Estimation du temps d\'impression","Stima del Tempo di Stampa","예상 출력 시간","Print Time Estimate","Geschatte printtijd","Szacowany Czas Druku","Odhad času tlače"],"est-end":["Odhadovaný konec","Erwartetes Ende","Estimated end","Fin estimado","Fin d\'impression estimée","Fine prevista","예상완료","Numatomas pabaiga","geschatte eindtijd","Szacowane zakończenie","Odhadovaný koniec"],"pnt-time":["Doba tisku","Druckzeit","Printing time","Tiempo de impresión","Temps d\'impression","Tempo di stampa","출력시간","Spausdinimo laikas","Printtijd","Czas druku","Čas tlače"],"last-mod":["Naposledy upraveno","Zuletzt Geändert","Last Modified","Ultima Modificación","Dernière Modification","Ultima Modifica","최종 수정됨","Paskutinis modifikavimas","Laatst gewijzigd","Ostatnio Zmodyfikowany","Posledná úprava"],"material":["Materiál","Material","Material","Material","Matériau","Materiale","재료","Medžiaga","Materiaal","Materiał","Materiál"],"layer-ht":["Výška vrstvy","Schichthöhe","Layer Height","Altura de Capa","Hauteur de Couche","Altezza Layer","레이어 높이","Sluoksnio storis","Laagdikte","Wysokość Warstwy","Výška vrstvy"],"size":["Velikost souboru","Größe der Datei","File size","Tamaño de archivo","Taille du fichier","Dimensione file","파일크기","Failo dydis","Bestandsgrootte","Rozmiar pliku","Veľkosť súboru"],"progress":["Postup","Fortschritt","Progress","Progreso","Progression","Progresso","진행","Eiga","Voortgang","Postęp","Progres"],"st-idle":["Nečinná","Leerlauf","Idle","En espera","Repos","Inattivo","대기","Pramoginė veikla","Inactief","Oczekuje","Nečinná"],"st-ready":["Připravena","Bereit","Ready","Lista","Prête","Pronto","준비","Pasirengęs","Gereed voor gebruik","Gotowe","Pripravené"],"st-busy":["Zaneprázdeněná","Beschäftigt","Busy","Ocupada","Occupée","Occupato","작업중","Užsiėmęs","Bezig","Zajęty","Zaneprázdnená"],"st-printing":["Probíhá tisk","Druckt","Printing","Imprimiendo","Impression","Stampa","출력중","Spausdinama","Printen","Drukowanie","Prebieha tlač"],"st-paused":["Pozastavena","Pausiert","Paused","Pausado","En pause","In pausa","일시정지","Pristabdyta","Gepauzeeerd","Pauza","Pozastavená"],"st-finished":["Dokončeno","Beendet","Finished","Terminado","Terminé","Completato","완료됨","Užbaigta","Klaar","Zakonczono","Dokončené"],"st-stopped":["Zastaveno","Gestoppt","Stopped","Parada","Arrêtée","Arrestato","정지됨","Sustabdytas","Gestopt","Zatrzymano","Zastavené"],"st-error":["Chyba","Fehler","Error","Error","Erreur","Errore","에러","Klaida","Fout","Błąd","Chyba"],"st-attention":["Vyžaduje pozornost","Achtung","Attention","Atención","Attention","Attenzione","주의","Dėmesio","Attentie","Uwaga","Pozor"],"st-pour-resin":["Nalití resinu","Gieße Harz ein","Pour in resin","Vierte resina","Faire affluer la résine","Versa la resina","레진 붓기","Įpilkite dervą","Giet hars in vat","Wlej żywicę","Nalejte resin"],"st-feedme":["Doplnění resinu","Harz nachfüllen","Refill resin","Añadir resina","remplir le réservoir de résine","Ricarica la resina","레진 리필","Papildykite dervą","Hervul resin","Uzupełnij żywicę","Doplnenie resinu"],"st-unknown":["Neznámý","Unbekannt","Unknown","Desconocido","Inconnu","Sconosciuto","알수없음","Nežinoma","Onbekend","Nieznane","Neznáme"],"at":["v","um","at","a las","à","alle","에서","iš","op","o","v"],"less-than":["Méně než minuta","Weniger als eine Minute","Less than a minute","Menos de un minuto","Moins d\'une minute","Meno di un minuto","1분 미만","Mažiau nei minutė","Minder dan een minuut","Mniej niż minuta","Menej ako minúta"],"today-at":["Dnes v","Heute um","Today at","Hoy a las","Aujourd\'hui à","Oggi alle","오늘","Šiandien","Vandaag om","Dzisiaj o","Dnes o"],"tmw-at":["Zítra v","Morgen um","Tomorrow at","Mañana a las","Demain à","Domani alle","내일","Rytoj","Morgen om","Jutro o","Zajtra o"],"true":["Ano","Ja","Yes","Si","Oui","Si","예","Taip","Ja","Tak","Áno"],"false":["Ne","Nein","No","No","Non","No","아니오","Ne","Nee","Nie","Nie"],"na":["N/A","NV","NA","NA","NA","ND","없음","NA","N.v.t.","N/D","N/A"],"cover-closed":["Uzavřené","Geschlossen","Closed","Cerrada","Fermé","Chiuso","닫힘","Uždarytas","Gesloten","Zamknięta","Zavreté"],"cover-opened":["Otevřené","Geöffnet","Opened","Abierta","Ouvert","Aperto","열림","Atidarytas","Open","Otwarta","Otvorené"],"storage-used-space":["Použito {{used}} z {{total}} ({{free}} volných)","{{used}} benutzt von {{total}} ({{free}} frei)","Used {{used}} of {{total}} ({{free}} free)","Usados {{used}} de {{total}} ({{free}} libres)","{{used}} utilisés sur {{total}} ({{free}} libre)","Usato {{used}} di {{total}} ({{free}} liberi)","{{total}} 중 {{used}} 사용중({{free}} 남음)","","","Zajęte {{used}} z {{total}} ({{free}} wolne)",""]},"msg":{"modal-p1":["Vítejte na webovém rozhraní vaší","Willkommen zur Weboberfläche Ihres","Welcome to the web interface of your","Bienvenido a la interfaz web de tu","Bienvenue dans l\'interface web de votre","Benvenuto nell\'interfaccia web del tuo","당신의 웹 인터페이스에 오신 것을 환영합니다.","Sveiki atvykę į savo","Welkom bij de webinterface van uw","Witaj w interfejsie Twojej","Vitajte vo webovom rozhraní vašej"],"modal-p2":["Upozornění: některé hodnoty jsou zobrazeny pouze v průběhu tisku.","Bitte beachten Sie, dass die Werte nur angezeigt werden, wenn der Drucker gerade druckt.","Please note that values are shown only when the printer is printing.","Tenga en cuenta que los valores se muestran solo cuando la impresora está imprimiendo.","Veuillez noter que les valeurs sont affichées uniquement lorsque l\'imprimante imprime.","Si noti che i valori vengono visualizzati solo durante la stampa.","프린터가 출력중일 경우에만 값이 표시됩니다.","Prašome atkreipti dėmesį, kad reikšmės rodomos tik tada, kai spausdintuvas spausdina.","De waarden worden alleen getoond tijdens het printen.","Wartości będą wyświetlane tylko podczas drukowania.","Upozornenie: niektoré hodnoty sú zobrazené len počas tlače."],"api-key-1":["Vítejte ve webovém rozhraní PrusaLink Web!","Willkommen auf der Web-Oberfläche von PrusaLink Web.","Welcome to the PrusaLink Web web interface.","Bienvenido a la interfaz web de PrusaLink Web.","Bienvenue sur l\'interface web locale de PrusaLink Web.","Benvenuti nell\'interfaccia web di PrusaLink Web.","프루사 커넥트 웹 웹인터페이스에 오신 것을 환영합니다.","Sveiki atvykę į PrusaLink Web interneto sąsają.","Welkom bij de PrusaLink Web webinterface.","Witaj w interfejsie sieciowym PrusaLink Web.","Vitajte vo webovom rozhraní PrusaLink Web!"],"api-key-2":["Vložte API klíč.","Bitte geben Sie den API-Schlüssel ein.","Please insert the API key.","Por favor introduce la clave API.","Veuillez insérer la clé API.","Si prega di inserire la chiave API.","API키를 입력하십시오.","Prašome įvesti API raktą.","Voer de API-sleutel in","Wpisz klucz API.","Vložte API kľúč."],"api-key-3":["Otevřete menu Nastavení -> Síť -> PrusaLink.","Sie finden ihn in Einstellungen -> Netzwerk -> PrusaLink.","You can find it in Settings -> Network -> PrusaLink.","Puedes encontrarla en Ajustes -> Red -> PrusaLink.","Vous pouvez la trouver dans Réglages -> Réseau -> Informations de connexion.","È possibile trovarla in Impostazioni -> Rete -> PrusaLink","설정 -> 네트워크 -> 프루사링크에서 찾을 수 있습니다.","Jį galite rasti Nustatymai -> Tinklas -> PrusaLink.","Deze kan gevonden worden bij Settings -> -> Network -> PrusaLink.","Możesz znaleźć go w sekcji Ustawienia -> Sieć -> PrusaLink.","Nájdete ho v Nastavenia -> Sieť -> PrusaLink."],"offline":{"not-responsing":["Tiskárna nereaguje.","Der Drucker antwortet nicht.","Printer is not responding.","La impresora no responde.","L\'imprimante ne répond pas.","La stampante non risponde.","프린터가 응답하지 않습니다.","Spausdintuvas neatsako.","Printer reageert niet.","Drukarka nie odpowiada.","Tlačiareň nereaguje."],"please-wait":["Prosím, čekejte...","Bitte warten...","Please wait...","Espera, por favor...","Veuillez patienter...","Attendere...","기다려주십시오...","Prašome palaukti...","Even geduld...","Proszę czekać...","Prosím, čakajte..."]},"drop-zone":{"label":["Přetažením souboru zahájíte nahrávání","Datei hier ablegen, um den Upload zu starten","Drop file here to start the uploading","Arrastra archivo aquí para subirlo","Déposez le fichier ici pour commencer le téléchargement","Trascina il file qui per iniziare il caricamento","파일을 여기로 끌어놓으면 업로드가 시작됩니다.","Tempti failą čia, kad predėti įkrovimą","Sleep het bestand hierheen om het te uploaden","Upuść plik tutaj, aby rozpocząć przesyłanie.",""]},"create-folder":["Nová složka","Neuer Ordner","New Folder","Nueva Carpeta","Nouveau Dossier","Nuova Cartella","새 폴더","","","Nowy folder",""],"create-folder-name":["Název složky","Ordnername","Folder Name","Nombre de la Carpeta","Nom de Dossier","Nome cartella","폴더 이름","","","Nazwa folderu",""],"sysupgrade":{"title":["Aktualizovat systémový balíček?","Systempaket aktualisieren?","Upgrade System Package?","¿Actualizar el Paquete del Sistema?","Mettre à niveau le package système ?","Aggiornare il pacchetto di sistema?","시스템 패키지를 업그레이드하겠습니까?","","","Zaktualizować paczkę systemową?",""],"remark":["Aktualizace může trvat několik desítek vteřin.","Das Upgrade kann einige Sekunden dauern.","The upgrade may take several tens of seconds.","La actualización puede tardar varias decenas de segundos.","La mise à jour peut prendre plusieurs dizaines de secondes.","L\'aggiornamento può richiedere qualche minuto.","업그레이드에는 수십초가 걸릴 수 있습니다.","","","Aktualizacja może trwać kilkadziesiąt sekund.",""],"pending":["Probíhá aktualizace... Nevypínejte tiskárnu.","Upgraden... Schalten Sie den Drucker nicht aus.","Upgrading... Do not switch the printer off.","Actualizando... No apagues la impresora.","Mise à niveau... N\'éteignez pas l\'imprimante.","Aggiornamento... Non spegnere la stampante.","업그레이드중... 프린터를 끄지 마십시오.","","","Aktualizacja... Nie wyłączaj drukarki.",""],"wait-for-printer":["Čeká se na tiskárnu...","Warten auf den Drucker...","Waiting for the printer...","Esperando a la impresora...","Attente de l\'imprimante...","In attesa della stampante...","프린터를 기다리는 중...","","","Oczekiwanie na drukarkę...",""]},"outdated-os":{"message":["PrusaLink běží na zastaralém obrazu systému. Nahrajte ho prosím znovu podle tohoto návodu. Bohužel bude nutné PrusaLink znovu nastavit","Ihr PrusaLink läuft mit einem veralteten Raspberry Pi Betriebssystem. Folgen Sie dieser Anleitung, um die neueste Version zu flashen. Dies wird PrusaLink zurücksetzen","Your PrusaLink is running on an outdated Raspberry Pi OS. Follow this guide to flash the latest version. This will reset PrusaLink","Tu PrusaLink está funcionando con un Raspberry Pi OS obsoleto. Sigue esta guía para flashear la última versión. Esto reiniciará PrusaLink","Votre PrusaLink fonctionne sur un système un Raspberry Pi OS obsolète. Suivez ce guide pour flasher la dernière version. Cela réinitialisera PrusaLink","Il sistema PrusaLink è in esecuzione su un sistema operativo Raspberry Pi non aggiornato. Seguire questa guida per flashare l\'ultima versione. Questo ripristinerà PrusaLink","PrusaLink가 오래된 Raspberry Pi OS에서 실행되고 있습니다.이 가이드를 따라 최신 버전을 업데이트하세요. PrusaLink가 재설정됩니다.","","","Twój PrusaLink działa na nieaktualnej wersji systemu operacyjnego Raspberry Pi. Postępuj zgodnie z tym przewodnikiem, aby wgrać najnowszą wersję. Spowoduje to zresetowanie PrusaLink",""],"title":["Raspberry Pi OS je zastaralý","Raspberry Pi OS ist veraltet","Raspberry Pi OS is out-of-date","El SO de la Raspberry Pi está desactualizado","Raspberry Pi OS est obsolète","Il sistema operativo di Raspberry Pi è obsoleto","Raspberry Pi OS가 최신 버전이 아닙니다.","","","System operacyjny Raspberry Pi jest nieaktualny",""]},"del-folder":["Opravdu chcete smazat {{folder_name}} a její obsah?","Möchten Sie wirklich {{folder_name}} und seinen Inhalt löschen?","Do you really want to delete {{folder_name}} and its contents?","¿Realmente deseas borrar {{folder_name}} y su contenido?","Voulez-vous vraiment supprimer {{folder_name}} et son contenu ?","Vuoi davvero cancellare la cartella {{folder_name}} e il suo contenuto?","정말 {{folder_name}} 폴더 및 내용을 지우시겠습니까?","","","Czy naprawdę chcesz usunąć {{folder_name}} i jego zawartość?",""],"del-proj":["Opravdu chcete smazat {{file_name}}?","Wollen Sie wirklich {{file_name}} löschen?","Do you really want to delete {{file_name}}?","¿Realmente deseas borrar {{file_name}}?","Voulez-vous vraiment supprimer le fichier {{file_name}} ?","Vuoi davvero eliminare il file {{file_name}}?","{{file_name}}을 정말로 삭제하겠습니까?","Ar tikrai norite ištrinti {{file_name}}?","Weet u zeker dat u {{file_name}} wilt verwijderen?","Czy na pewno chcesz usunąć plik {{file_name}}?","Naozaj chcete zmazať {{file_name}}?"],"sla-pour-resin":["Nalijte do vaničky dostatečné množství resinu pro vybraný soubor a zavřete víko. Minimální objem resinu je zobrazen na dotykovém displeji tiskárny.","Füllen Sie genügend Harz für die ausgewählte Datei in den Tank und schließen Sie den Deckel. Die minimale Menge des Harzes wird auf dem Touchscreen angezeigt.","Pour enough resin for selected file into the tank and close the lid. Minimal amount of the resin is displayed on the touchscreen.","Vierte suficiente resina para el archivo seleccionado y cierra la tapa.\\nLa mínima cantidad necesaria se muestra en la pantalla táctil.","Versez suffisamment de résine dans le réservoir pour le projet sélectionné et fermez le capot.","Versare nel serbatoio la quantità di resina sufficiente per il file selezionato e chiudere il coperchio. La quantità minima di resina viene visualizzata sul touchscreen.","선택한 파일을 위한 레진을 탱크에 붓고 뚜껑을 닫습니다. 터치스크린에 최소량의 레진이 표시됩니다.","Įpilkite pakankamai dervos pasirinktam failui ir uždarykite dangtį. Mažiausias dervos kiekis yra rodomas ant ekrano.","Doe genoeg resin voor het geselcteerde bestand in het vat en sluit de kap. De minimale hoeveelheid resin wordt aangegeven op het touchscreen.","Wlej do zbiornika wystarczającą ilość żywicy dla wybranego pliku i zamknij pokrywę. Minimalna ilość żywicy jest wyświetlana na ekranie dotykowym.","Do nádržky nalejte dostatočné množstvo resinu pre vybraný súbor a zatvorte veko. Minimálne množstvo resinu sa zobrazí na dotykovom displeji."],"cancel":["Chcete opravdu zrušit tisk?","Wollen Sie den Druck wirklich abbrechen?","Do you really want to cancel print?","¿Realmente quieres cancelar la impresión?","Voulez-vous vraiment annuler l\'impression ?","Vuoi davvero annullare la stampa?","출력을 취소하겠습니까?","Ar tikrai norite atšaukti spausdinimą?","Weet u zeker dat u de print wilt stoppen?","Czy na pewno chcesz anulować wydruk?","Chcete naozaj zrušiť tlač?"],"file-exists":{"title":["Soubor již existuje","Datei existiert bereits","File already exists","El archivo ya existe","Le fichier existe déjà","File già esistente","파일이 이미 존재합니다.","","","Plik już istnieje",""],"overwrite-it":["Chcete ho přepsat?","Möchten Sie sie überschreiben?","Do you want to overwrite it?","¿Quieres sobrescribirlo?","Voulez-vous l\'écraser ?","Vuoi sovrascriverlo?","덮어쓰시겠습니까?","","","Czy chcesz go nadpisać?",""]}},"btn":{"login":["Přihlášení","Login","Login","Iniciar sesión","Connexion","Accedi","로그인","Prisijungti","Login","Zaloguj","Prihlásenie"],"confirm":["Potvrdit","Bestätigen","Confirm","Confirmar","Confirmer","Conferma","결정","Patvirtinti","Bevestigen","Potwierdzam","Potvrdiť"],"cancel":["Zrušit","Abbrechen","Cancel","Cancelar","Annuler","Annulla","취소","Atšaukti","Annuleren","Anuluj","Zrušiť"],"del":["Smazat","löschen","Delete","borrar","supprimer","elimina","삭제","Ištrinti","Verwijderen","usuń","Zmazať"],"download":["Stáhnout","Herunterladen","Download","Descargar","télécharger","Download","다운로드","Atsisiųsti","Download","Pobierz","Stiahnuť"],"pause-pt":["Pozastavit tisk","Druck pausieren","Pause Print","Pausar Impresión","Mettre l\'impression en pause","Pausa Stampa","출력 일시 정지","Pristabdyti spausdinimą","Pauzeer print","Wstrzymaj drukowanie","Pozastaviť tlač"],"resume-pt":["Pokračovat v tisku","Druck fortsetzen","Resume Print","Continuar Impresión","Redémarrer l\'impression","Riprendi stampa","출력 복귀","Tęsti spausdinimą","Hervat print","Wznów drukowanie","Pokračovať v tlači"],"start-pt":["Start tisku","Druck starten","Start Print","Empezar impresión","Lancer l\'impression","Inizia stampa","출력 시작","Pradėti spausdinimą","Start print","Start druku","Štart tlače"],"stop-print":["Zrušit tisk","Druck abbrechen","Stop Print","Cancelar impresión","Annuler l\'impression","Annulla stampa","출력 정지","Sustabdyti spausdinimą","Stop print","Anuluj wydruk","Zrušiť tlač"],"upld-file":["Nahrát soubor","Datei hochladen","Upload File","Cargar Archivo","Télécharger un Fichier","Carica file","파일 업로드","Įkelti failą","Upload bestand","Prześlij plik","Nahrať súbor"],"disable-steppers":["Vypnout motory","Schrittmotoren deaktivieren","Disable Steppers","Desactivar motores","Desactiver les moteurs","Disabilita motori","모터 정지","Išjungti stoperius","Stappenmotors uitschakelen","Wyłącz silniki krokowe","Vypnúť motory"],"extrude":["Vytlačit","Extrudieren","Extrude","Extruye","extruder","Estrudi","압출","Ištraukti","Extrudeer","Ekstruzja","Vysunúť"],"retract":["Vtáhnout","Zurückziehen","Retract","Retraer","Retracter","Retrai","리트렉트","Atitraukti","Retract","Retrakcja","Zasunúť"],"set":["Nastavit","Setzen","Set","Ajuste","Régler","Imposta","설정","Nustatyti","Instellen","Ustaw","Nastaviť"],"check-updates":["Kontrola aktualizací","Updates suchen","Check Updates","Comprobar Actualizaciones","Vérifier les Mises à Jour","Controlla aggiornamenti","업데이트 체크","Tikrinti atnaujinimus","","Sprawdź aktualizacje",""],"connect":{"link":[null,"Verbinden","Link","Enlace","Associer","Collegamento","연결","Susieti","Verbinden","Link",""],"unlink":["Odpojit","Trennen","Unlink","Desenlazar","Dissocier","Scollegato","연결끊기","Atsieti","Verbinding verbreken","Odłącz",""]},"chg":["Změnit","Ändern","Change","Cambia","Mettre à jour","Cambia","변경","Pakeisti","Wijzig","Zmień","Zmeniť"],"reset":["","Reset","Reset","Reset","Réinitialiser","Reset","리셋","Perkrauti","Reset","Reset",""],"yes":["Ano","Ja","Yes","Sí","Oui","Sì","예","Taip","Ja","Tak","Áno"],"no":["Ne","Nein","No","No","Non","No","아니오","Ne","Nee","Nie","Nie"],"upgrade":["Aktualizovat","Aktualisieren","Upgrade","Actualización","Mise à niveau","Aggiorna","업그레이드","Atnaujinti","","Aktualizacja",""],"chg-print-set":["Tisková nastavení","Druckeinstellungen","Print Settings","Ajustes de la Impresora","Réglages d\'Impression","Impostazioni di stampa","프린트 설정","Spausdinimo nustatymai","Printinstellingen","Ustawienia druku",""],"save-chgs":["Uložit změny","Änderungen speichern","Save changes","Guardar cambios","Enregistrer les modifications","Salva le modifiche","변경내용 저장","Išsaugoti pakeitimus","Wijzigingen opslaan","Zapisz zmiany","Uložiť zmeny"]},"camera":{"settings":["Nastavení kamery","Kamera-Einstellungen","Camera Settings","Ajustes de la Cámara","Paramètres de la Caméra","Impostazioni Fotocamera","카메라 세팅","Kameros nustatymai","Camera-instellingen","Ustawienia kamery",""],"name":["Název kamery","Kameraname","Camera Name","Nombre de la Cámara","Nom de la Caméra","Nome Fotocamera","카메라 명칭","Kameros pavadinimas","Cameranaam","Nazwa kamery",""],"resolution":["Rozlišení","Auflösung","Resolution","Resolución","Résolution","Risoluzione","해상도","Raiška","Resolutie","Rozdzielczość",""],"trigger-scheme":["","Auslöse-Schema","Trigger Scheme","Modo de Disparo","Mode de Déclenchement","Schema di attivazione","트리거 계획","Paleisti schemą","Triggerschema","Schemat wyzwalania",""],"focus":["Zaostření","Fokus","Focus","Enfocar","Focus","Messa a fuoco","포커스","","","Ostrość",""],"title":["Kamery","Kameras","Cameras","Cámaras","Caméras","Fotocamere","카메라","Kameros","Camera\'s","Kamery",""],"time":["Čas snímku","Zeit der Momentaufnahme","Snapshot Time","Hora de la Foto","Heure de la Capture","Tempo Istantanea","스냅샷 시간","Momentinis vaizdas","Snapshot-tijd","Czas migawki",""],"cloud":{"linked":["Připojeno","Verbunden","Linked","Enlazado","Associée","Collegato","연결됨","Susieta","Verbonden","Połączono",""],"not-linked":["Nepřipojeno","Unverbunden","Not Linked","No Enlazado","Non Associée","Non collegato","연결되지 않음","Nesusieta","Niet verbonden","Nie połączono",""],"label":["","CONNECT","CONNECT","CONNECT","CONNECT","CONNECT","CONNECT","CONNECT","CONNECT","CONNECT",""]},"btn":{"connect":["Zkusit povolit kameru","Versuche Kamera zu aktivieren","Try to enable camera","Intenta habilitar la cámara","Essayer d\'activer la caméra","Prova ad abilitare la fotocamera","카메라 활성화 시도중","Pabandykite įjungti kamerą","Probeer de camera in te schakelen","Spróbuj aktywować kamerę",""],"settings":["Otevřít nastavení kamery","Öffne Kamera-Einstellungen","Open camera settings","Abrir los ajustes de la cámara","Ouvrir les paramètres de la caméra","Apri impostazioni fotocamera","카메라 설정 열기","Atidaryti kameros nustatymus","Open camera-instellingen","Otwórz ustawienia kamery",""],"link":["Připojit kameru do Connectu","Kamera mit CONNECT verbinden","Link camera to CONNECT","Asocia cámara a CONNECT","Associer la caméra à CONNECT","Collega fotocamera a CONNECT","카메라를 CONNECT에 연결하기","Susieti kamerą su CONNECT","Verbind camera met CONNECT","Połącz kamerę z CONNECT",""],"unlink":["Odpojit kameru z Connectu","Kamera von CONNECT trennen","Unlink camera from CONNECT","Desvincular la cámara de CONNECT","Dissocier la caméra de CONNECT","Scollega fotocamera da CONNECT","카메라를 CONNECT에서 연결 해제하기","Atsieti kamerą nuo CONNECT","Verbreek verbinding van camera met CONNECT","Odłącz kamerę od CONNECT",""]},"path":["Cesta","Pfad","Path","Ruta","Chemin","Percorso","경로","Kelias","Pad","Ścieżka",""],"driver":["Ovladač","Treiber","Driver","Controlador","Driver","Driver","드라이버","Draiveris","Driver","Sterownik",""]},"printer":{"title":["Tiskárna","Drucker","Printer","Impresora","imprimante","Stampante","프린터","Spausdintuvas","Printer","Drukarka","Tlačiareň"],"name":["Název tiskárny","Name des Druckers","Printer name","Nombre de la impresora","nom de l\'imprimante","Nome stampante","프린터 이름","Spausdintuvo pavadinimas","Naam van de printer","Nazwa drukarki","Názov tlačiarne"],"location":["Umístění tiskárny","Standort des Druckers","Printer location","Ubicación de la impresora","localisation de l\'imprimante","Posizione stampante","프린터 위치","Spausdintuvo vieta","Locatie van de printer","Lokalizacja drukarki","Umiestnenie tlačiarne"],"network_error_chime":["Zvukové upozornění při síťové chybě","Netzwerk-Fehlerton","Network Error Chime","Tono Error Red","Carillon d\'erreur réseau","Suono di errore di rete","네트워크 에러 차임벨","","","Dźwięk błędu sieci",""]},"print":{"fdm":{"1":["Je tiskárna připravena?","Ist der Drucker bereit?","Is the printer ready?","¿Está lista la impresora?","L\'imprimante est-elle prête ?","La stampante è pronta?","프린터가 준비되었습니까?","Ar spausdintuvas pasirengęs?","Is de printer klaar voor gebruik?","Czy drukarka jest gotowa?","Je tlačiareň pripravená?"],"2":["Je tisková podložka prázdná a čistá?","Ist der Druckbogen leer und sauber?","Is printing sheet empty and clean?","¿Está vacía y limpia la lámina de impresión?","Le surface d\'impression est-elle vide et propre ?","La piastra di stampa è vuota e pulita?","프린트 시트가 비어있고 깨끗합니까?","Ar spausdinimo lapas tuščias ir švarus?","Is het printplatform leeg en schoon?","Czy arkusz druku jest pusty i czysty?","Je tlačová podložka prázdna a čistá?"]}},"upld":{"title":["Nahrát soubor","Projekt hochladen","Upload file","envía proyecto","Téléversement de projet","Carica file","파일업로드","Įkelti failą","Bestand uploaden","prześlij projekt","Nahrať súbor"],"start-pt":["po přenosu zahájit tisk","Druck nach der Übertragung starten","Start print after transfer","Iniciar la impresión tras la transferencia","Démarrer l\'impression après le transfert","Avvia stampa dopo il trasferimento","전송 후 출력 시작","Pradėti spausdinimą po perdavimo","Start print na het omzetten","Rozpocznij drukowanie po przesłaniu","po prenose spustiť tlač"],"remote":{"source":["URL zdroje","Quell-URL","Source URL","URL Fuente","URL de la source","URL fonte","원본 URL","Šaltinio URL","Bron van URL","Źródłowy URL","URL zdroja"],"hint-fdm":["Zadejte URL souboru G-CODE","URL der G-CODE-Datei eingeben","Type URL of G-CODE file","Escribe URL de archivo G-CODE","Entrez l\'URL du fichier G-CODE du projet","Digitare URL del file G-CODE","G코드 파일의 주소를 입력하십시오","Įveskite G-CODE failo URL","Type de URL van het gcode-bestand","Wpisz adres URL pliku G-Code","Zadajte URL súboru G-code"],"file":["Název souboru","Dateiname","File name","Nombre del archivo","Nom de fichier","Nome file","파일명","Failo pavadinimas","Bestandsnaam","Nazwa pliku","Názov súboru"],"file-hint":["Zadejte název souboru","Dateiname eingeben","Type file name","Escribe nombre de archivo","Tapez le nom du fichier","Digitare nome file","파일명을 입력하십시오","Įveskite failo pavadinimą","Type de bestandsnaam","Wpisz nazwę pliku","Zadajte názov súboru"]},"direct":{"choose":["Vyberte {{file}} nebo jej přetáhněte sem.","Klicke um eine {{file}} Datei auszuwählen oder ziehe sie hier hin","Click to choose a {{file}} file or drag it here","Haz clic para elegir un archivo {{file}} o arrástralo hasta aquí","Cliquer pour choisir un fichier {{file}} ou déposez le ici","Fare clic per scegliere un file {{file}} o trascinarlo qui","선택한 {{file}} 파일을 클릭하거나 여기로 드래그하십시오","Pasirinkite {{file}} failą arba vilkite jį čia","Klik om een {{file}}-bestand te kiezen of sleep het hierheen","Kliknij, aby wybrać plik {{file}} lub przeciągnij go tutaj","Kliknutím vyberte súbor {{file}} alebo ho sem potiahnite."]}},"download":{"dl-started":["Začátek stahování","Herunterladen Gestartet","Download Started","Se inició la descarga","téléchargement démarré","Scaricamento Avviato","다운로드가 시작됨","Atsisiuntimas pradėtas","Downloaden gestart","Pobieranie rozpoczęte","Sťahovanie začalo"],"start-pt":["Spustit tisk","Autostart","Autostart","Inicio automático","Démarrage automatique","Avvio automatico","자동시작","Automatinis paleidimas","Autostart","Autostart","Spustiť tlač"]},"temps":{"title":["Teploty","Temperaturen","Temperatures","Temperaturas","Températures","Temperature","온도","Temperatūros","Temperatuur","Temperatury","Teploty"]},"":[null,null,null,null,null,null,null,null,null,null,null],"version":{"title":["Verze","Version","Version",null,"version",null,"버전","Versija","Versie",null,"Verzia"],"api":["API","API","API",null,"api",null,"API","API","API",null,"API"],"hostname":["Hostname","Hostname","Hostname",null,"nom d\'hôte",null,"호스트명","Hostname","Hostnaam",null,"Hostname"],"firmware":["Firmware","Firmware","Firmware",null,"micrologiciel",null,"펌웨어","Firmware","Firmware",null,"Firmware"],"server":["Server","Server","Server",null,"serveur",null,"서버","Serveris","Server",null,"Server"],"text":["Text","Text","Text",null,"texte",null,"텍스트","Tekstas","Tekst",null,"Text"],"sdk":["SDK","SDK","SDK",null,"sdk",null,"SDK","SDK","SDK",null,"SDK"],"fe":["Frontend","Frontend","Frontend",null,"frontend",null,"프론트엔드","Frontendas","Frontend",null,"Frontend"]},"sys-version":{"title":["Verze systému","Systemversion","System Version",null,"version du système",null,"시스템버전","Sistemos versija","Systeenversie",null,"Verzia systému"],"python":["Python","Python","Python","Python","python","Python","파이썬","Python","Python","Python","Python"],"description":["Popis","Beschreibung","Description","Descripción","description","Descrizione","설명","Aprašymas","Beschrijving","Opis","Popis"],"id":["ID","ID","ID","ID","ID","ID","ID","ID","ID","ID","ID"],"os":["OS","OS","OS","OS","Système d\'exploitation","S.O.","OS","OS","OS","OS","OS"]},"updates":{"title":[null,null,"System Updates",null,null,null,null,"Sistemos atnaujinimai",null,null,null]},"user":{"title":["Uživatel","Benutzer","User",null,"utilisateur",null,"유저","Vartotojas","Gebruiker",null,"Používateľ"],"username":["Uživatelské jméno","Benutzername","User Name","Nombre de usuario","nom d\'utilisateur","Nome Utente","유저명","Vartotojo vardas","Gebruikersnaam","Nazwa użytkownika","Používateľské meno"],"format":{"name":["Uživatelské jméno musí obsahovat alespoň 3 znaky.","Der Benutzername muss mindestens 3 Zeichen lang sein.","Username length must be at least 3 characters long.","El nombre de usuario debe tener al menos 3 caracteres.","La longueur du nom d\'utilisateur doit être d\'au moins 3 caractères.","La lunghezza del nome utente deve essere di almeno 3 caratteri.","유저명은 최소 3자리 이상 입력하십시오.","Vartotojo vardo ilgis turi būti mažiausiai 3 simboliai.","De gebruikersnaam moet minimaal 3 karakters lang zijn.","Długość nazwy użytkownika musi mieć co najmniej 3 znaki.","Používateľské meno musí obsahovať aspoň 3 znaky."],"password-1":["Heslo nesmí začínat či končit mezerami, a zároveň musí splňovat jednu z následujících podmínek:","Das Passwort darf weder am Anfang noch am Ende Leerzeichen enthalten und muss mindestens eine der folgenden Optionen erfüllen:","Password can\'t contain spaces on the beggining nor the end and must meet at least one of these options:","La Contraseña no puede empezar o terminar con espacios y debe cumplir al menos una de estas opciones:","Le mot de passe ne peut pas contenir d\'espaces au début ni à la fin et doit répondre à au moins l\'une de ces options :","La password non può contenere spazi né all\'inizio né alla fine e deve soddisfare almeno una di queste opzioni:","암호는 시작부분에 공백을 둘 수 없으며 다음옵션 중 하나이상을 충족해야 합니다.","Slaptažodis negali turėti tarpų pradžioje arba pabaigoje ir turi atitikti bent vieną iš šių variantų:","Het wachtwoord mag geen spaties aan het begin of het einde bevatten en moet aan minstens één van deze opties voldoen:","Hasło nie może zawierać spacji na początku ani na końcu i musi spełniać przynajmniej jeden z poniższych warunków:","Heslo nesmie začínať ani končiť medzerami a musí spĺňať aspoň jednu z týchto podmienok:"],"password-2":["- Heslo musí obsahovat minimálně 8 znaků, zahrnujících alespoň 1 malé písmeno, 1 velké písmeno a 1 číslo","- Minimale Länge 8 Zeichen, davon ein Kleinbuchstabe, ein Großbuchstabe und eine Zahl","- Minimal length 8 characters, including one lowercase letter, one uppercase letter and one number","- Longitud mínima 8 caracteres, incluyendo una minúscula, una mayúscula y un número","- Longueur minimale de 8 caractères, dont une lettre minuscule, une lettre majuscule et un chiffre","- Lunghezza minima 8 caratteri, di cui una lettera minuscola, una lettera maiuscola e un numero","- 최소 길이 8자(소문자 1개, 대문자 1개, 숫자 1개 포함)","- 8 simbolių ilgio minimalus, įskaitant vieną mažąją raidę, vieną didžiąją raidę ir vieną skaičių","- Minimaal 8 karakters lang, met tenminste een kleine letter, een hoofdletter en een nummber","- Minimalna długość 8 znaków, w tym jedna mała litera, jedna duża litera i jedna cyfra","- Heslo musí obsahovať minimálne 8 znakov, vrátane aspoň 1 malého písmena, 1 veľkého písmena a 1 číslice"],"password-3":["- Heslo musí obsahovat minimálně 8 znaků, zahrnujících alespoň 1 speciální symbol (např. @)","- Mindestlänge 8 Zeichen, einschließlich eines nicht alphanumerischen Zeichens (z. B. @)","- Minimal length 8 characters, including one non-alphanumeric character (e.g. @)","- Longitud mínima 8 caracteres, incluyendo los no alfanuméricos (como @)","- Longueur minimale de 8 caractères, dont un caractère non alphanumérique (par exemple @)","- Lunghezza minima 8 caratteri, compreso un carattere non alfanumerico (es. @)","- 영숫자가 아닌 문자(예: @) 1개를 포함한 최소 길이 8자","- 8 simbolių ilgio minimalus, įskaitant vieną neteisingą simbolį (pvz., @)","- Minimaal 8 karakters lang, met tenminste één niet-alfanumeriek karakter (bijv. @)","- Minimalna długość 8 znaków, w tym jeden znak niealfanumeryczny (np. @)","- Heslo musí obsahovať minimálne 8 znakov, vrátane aspoň 1 špeciálneho symbolu (napr. @)"],"password-4":["- Heslo musí obsahovat minimálně 15 znaků","- Minimale Länge 15 Zeichen","- Minimal length 15 characters","- Longitud mínima 15 caracteres","- Longueur minimale 15 caractères","- Lunghezza minima 15 caratteri","- 최소 길이 15자","- 15 simbolių ilgio minimalus","- Minimaal 15 karakters lang","- Minimalna długość 15 znaków","- Heslo musí obsahovať minimálne 15 znakov"]},"new-password":["Nové heslo","Neues Passwort","New Password","Nueva Contraseña","nouveau mot de passe","Nuova Password","신규 암호","Naujas slaptažodis","Nieuw wachtwoord","Nowe hasło","Nové heslo"],"re-password":["Zopakujte heslo","Passwort wiederholen","Repeat Password","Repetir Contraseña","répéter le mot de passe","Ripeti Password","암호 재입력","Pakartokite slaptažodį","Herhaal wachtwoord","Powtórz hasło","Zopakujte heslo"],"password":["Heslo","Passwort","Password","Contraseña","mot de passe","Password","암호","Slaptažodis","Wachtwoord","Hasło","Heslo"]},"serial":{"label":["Sériové číslo","Seriennummer","Serial Number","Número de serie","numéro de série","Numero Seriale","시리얼넘버","Serijinis numeris","Serienummer","Numer seryjny","Sériové číslo"]},"api_key":{"label":["","API Key","API Key","Clave API","Clé API","Chiave API","API KEY","API raktas","API-sleutel","Klucz API",""]},"logs":{"title":["Logy","Protokolle","Logs",null,"logs",null,"로그","Žurnalai","Logbestanden",null,"Logy"],"select-file":["Vyberte soubor","Datei auswählen","Select File",null,"Sélectionnez une fichier",null,"파일 선택","Pasirinkti failą","Selecteer bestand",null,"Vyberte súbor"],"not-selected":["Není vybrán soubor logů!","Es ist keine Protokolldatei ausgewählt!","No log file is selected!","¡No se ha seleccionado archivo de registro!","Pas de fichier de log sélectionné!","Nessun file di registro selezionato!","로그 파일이 선택되지 않았습니다!","Nepasirinktas joks žurnalų failas!","Geen logbestand geselecteerd!","Nie wybrano żadnego pliku logu!","Nie je vybraný žiadny logovací súbor!"],"select-file-placeholder":["Vyberte soubor logů","Protokolldatei auswählen","Select log file","Selecciona archivo de registro","selectionnez un fichier de log","Selezionare un file di registro","로그 파일 선택","Pasirinkti žurnalų failą","Selecteer logbestand","Wybierz plik logu","Vyberte logovací súbor"],"empty-file":["Soubor je prázdný!","Die Protokolldatei ist leer!","Log file is empty!","¡El archivo de registro está vacío!","Le fichier de log est vide!","Il file di registro è vuoto!","로그파일이 비어있음!","Žurnalų failas yra tuščias!","Logbestand is leeg!","Plik logu jest pusty!","Logovací súbor je prázdny!"],"file-size-unknown":["","Die Protokolldatei hat eine unbekannte Größe und ist daher nur zum Herunterladen verfügbar","The log file is of an unknown size and therefore is available only for downloading","El archivo de registro es de tamaño desconocido y, por lo tanto, solo está disponible para su descarga.","Le fichier de journal est d\'une taille inconnue et n\'est donc disponible que pour le téléchargement","Il file di log è di dimensioni sconosciute e quindi è disponibile solo per il download.","로그파일의 크기를 알 수 없으므로 다운로드만 가능합니다.","","","Plik logu ma nieznany rozmiar i dlatego jest dostępny tylko do pobrania",""],"file-too-large":["Soubory logů o velikosti větší než {{size}} jsou k dispozici pouze ke stažení!","Protokolldateien, die größer als {{size}} sind, stehen nur zum Herunterladen zur Verfügung.","Log files of size larger than {{size}} are available only for downloading.","Los archivos de registro mayores de {{size}} sólo se pueden descargar.","Les fichiers de log d\'une taille supérieure à {{size}} ne sont disponibles que pour le téléchargement.","I file di registro di dimensioni superiori a {{size}} sono disponibili solo per il download.","로그 파일을 다운로드 하기 위해서는 최소 {{size}} 이상의 용량이 필요합니다.","Žurnalų failai, didesni nei {{size}}, yra prieinami tik atsiunčiant.","Logbestanden groter dan {{size}} kunnen alleen gedownload worden.","Pliki logów o rozmiarze większym niż {{size}} są dostępne tylko do pobrania.","Logovacie súbory s veľkosťou väčšou ako {{size}} sú k dispozícii len na stiahnutie.!"]},"ntf":{"success":["Požadavek byl úspěšný","Erfolg","The request was successful","Éxito","la demande a été traitée avec succès","Successo","요청이 성공했습니다.","Užklausa buvo sėkminga","De aanvraag was succesvol","Sukces","Žiadosť bola úspešná"],"settings-suc":["Nastavení bylo úspěšně změněno.","Die Einstellungen wurden erfolgreich geändert.","Settings was changed successfully.","Los ajustes se han cambiado correctamente.","Paramètres modifiés avec succès.","Impostazioni modificate correttamente","설정이 성공적으로 변경되었습니다.","Nustatymai sėkmingai pakeisti.","Instelling succesvol gewijzigd.","Ustawienia zostały zmienione pomyślnie","Nastavenia boli úspešne zmenené."],"camera-suc":["","Kamera Steuerungsanfrage wurde gesendet","Camera control request has been sent","La petición de control de cámara se ha enviado","La demande de contrôle de la caméra a été envoyée","È stata inviata una richiesta di controllo della fotocamera","카메라 조작 요청이 전송되었습니다.","Kameros valdymo užklausa buvo išsiųsta","Aanvraag voor camerabesturing is verzonden","Wysłano żądanie sterowania kamerą",""],"camera-config-success":["Konfigurace kamery byla aktualizovaná","Kamerakonfiguration wurde aktualisiert","Camera configuration has been updated","La configuración de la cámara se ha actualizado","La configuration de la caméra a été mise à jour","La configurazione della fotocamera è stata aggiornata","카메라 구성이 업데이트되었습니다.","Kameros konfigūracija buvo atnaujinta","Cameraconfiguration is geüpdatet","Konfiguracja kamery została zaktualizowana",""],"calibration-error":["","Kalibrierungsfehler","Calibration Error","Error de calibración","Erreur de Calibration","Errore di calibrazione","캘리브레이션 에러","","","Błąd kalibracji",""],"n-calibrated":["Tiskárna není zkalibrovaná!","Der Drucker ist nicht kalibriert!","Printer is not calibrated!","¡Impresora no calibrada!","L\'imprimante n\'est pas calibrée !","La stampante non è calibrata!","프린터가 보정되지 않았습니다!","Spausdintuvas nėra sukalibruotas!","Printer niet gekalibreerd!","Drukarka nie jest skalibrowana!","Tlačiareň nie je kalibrovaná!"],"low-resin":{"title":["","Harz niedrig","Resin low","Poca resina","Niveau de résine bas","Resina bassa","레진 부족함","","","Niski poziom żywicy",""],"message":["","Die gemessene Harzmenge ist zu gering. Der Druck kann fortgesetzt werden, es kann jedoch ein Nachfüllen erforderlich sein.","Measured resin volume is too low. The print can continue, however, a refill might be required.","El volumen de resina medido es demasiado bajo. La impresión puede continuar, sin embargo, es posible que se requiera una recarga.","Le volume de résine mesuré est trop bas. L\'impression peut continuer, mais un remplissage pourra être nécessaire.","Il volume di resina misurato è troppo basso. La stampa può continuare, ma potrebbe essere necessaria una ricarica.","측정된 레진양이 적습니다. 인쇄는 계속할 수 있지만 리필이 필요할 수는 있습니다.","","","Zmierzona ilość żywicy jest zbyt niska. Drukowanie można kontynuować, jednak konieczne może być uzupełnienie w trakcie.",""]},"upld-suc":["Soubor {{file_name}} byl úspěšně nahrán.","Das Hochladen des Projekts {{file_name}} war erfolgreich.","The file {{file_name}} was uploaded successfully.","El envío del proyecto {{file_name}} se completó.","Le projet {{file_name}} a été téléversé correctement.","Caricamento del progetto {{file_name}} riuscito.","{{file_name}}파일이 성공적으로 업로드되었습니다.","Failas {{file_name}} sėkmingai įkeltas.","Het bestand {{file_name}} is succesvol geüpload.","Przesyłanie projektu {{file_name}} powiodło się.","Súbor {{file_name}} bol úspešne nahraný."],"error":["Chyba","Fehler","Error","Error","Erreur","Errore","에러","Klaida","Fout","Błąd","Chyba"],"upld-unsuc":["Nahrání souboru {{file_name}} selhalo.","Das Hochladen des Projekts {{file_name}} war nicht erfolgreich.","The file {{file_name}} upload was unsuccessful.","El envío del proyecto {{file_name}} ha fallado.","Le téléversement du projet {{file_name}} a échoué.","Caricamento del progetto {{file_name}} non riuscito.","{{file_name}}파일의 업로드가 실패하였습니다.","Failo {{file_name}} įkėlimas nepavyko.","Het bestand {{file_name}} is niet succesvol geüpload.","Przesyłanie projektu {{file_name}} nie powiodło się.","Nahrávanie súboru {{file_name}} zlyhalo."],"upld-start":["Požadavek na nahrání souboru byl přijat","Upload-Anfrage wurde angenommen","Upload request has been accepted","Se acepto la petición de subida","La demande de téléchargement a été acceptée","Richiesta di caricamento accettata","업로드 요청이 수락되었습니다.","Įkėlimo užklausa priimta","Uploadverzoek is geaccepteerd","Żądanie przesłania zostało zaakceptowane","Žiadosť o odoslanie bola prijatá"]},"sort":{"by-name":["Název","Name","Name","Nombre","Nom","Nome","이름으로 정렬하기","Pavadinimas","Naam","Nazwa",""],"by-date":["Datum","Datum","Date","Fecha","Date","Data","날짜로 정렬하기","Data","Datum","Data",""],"by-size":["Velikost","Größe","Size","Tamaño","Taille","Dimensioni","크기로 정렬하기","Dydis","Grootte","Rozmiar",""]},"unit":{"h":["h","h","h","h","h","h","h","h","u","g","h"],"min":["min","min","min","min","min","min","min","min","min","min","min"],"ml":["ml","ml","ml","ml","mL","ml","ml","ml","ml","ml","ml"],"rpm":["RPM","UPM","RPM","RPM","TPM","RPM","RPM","RPM","RPM","Obr./min","RPM"],"b":["B","B","B","B","B","B","B","B","B","B","B"],"kb":["KB","KB","KB","KB","KB","KB","KB","KB","kB","KB","KB"],"mb":["MB","MB","MB","MB","MB","MB","MB","MB","MB","MB","MB"],"gb":["GB","GB","GB","GB","GB","GB","GB","GB","GB","GB","GB"]},"exp-times":{"exp-time":["Doba osvitu [s]","Belichtung [s]","Exposure [s]","Exposición [s]","Exposition [s]","Esposizione [s]","[s]초 노출","Ekspozicija [s]","Belichting [s]","Czas naświetlania [s]","Osvit [s]"],"inc":["Navýšení expozice (s)","Belichtungszeit inkr. [s]","Exposure time incr. [s]","Incremento tiempo exp. [s]","Incr. du temps d\'exposition [s]","Incremento tempo di esposizione [s]","[s]초 노출 시간 증가","Ekspozicijos laiko padidėjimas [s]","Belichtingstijd verhogen [s]","Przyrost czasu naświetl. [s]","Prírastok osvitu (s)"],"layer-1st":["Osvit první vrstvy [s]","Erste Schicht Bel. [s]","First Layer Expo. [s]","Primera Capa Expo. [s]","Première couche Expo. [s]","Esposizione Primo layer [s]","첫번째 레이어 노출시간 [s]초","Pirmojo sluoksnio ekspozicija [s]","Belichtingstijd eerste laag [s]","Naśw. 1. warstwy [s]","Osvit prvej vrstvy [s]"],"profile":["Tiskový profil","Druckprofil","Print profile","Perfil de Impresión","Profil d\'Impression","Profilo di stampa","출력 프로필","Spausdinimo profilis","Printprofielen","Profil druku","Tlačový profil"],"faster":["Rychlejší","Schneller","Faster","Rápido","Plus rapide","Più veloce","빠르게","Greičiau","Sneller","Szybciej","Rýchlejšie"],"slower":["Pomalejší","Langsamer","Slower","Lento","Plus lent","Più lento","느리게","Lėčiau","Langzamer","Wolniej","Pomalšie"],"high-viscosity":["Velmi Viskózní","Hohe Viskosität","High Viscosity","Alta Viscosidad","Haute viscosité","Alta Viscosità","고점도","Aukštas klampumas","Hoge viscositeit","Wysoka lepkość","Vysoká viskozita"]}}}')}},t={};function a(i){var s=t[i];if(void 0!==s)return s.exports;var n=t[i]={exports:{}};return e[i](n,n.exports,a),n.exports}a.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return a.d(t,{a:t}),t},a.d=(e,t)=>{for(var i in t)a.o(t,i)&&!a.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},a.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),a.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.p="",(()=>{"use strict";var e=a(8751),t=a(3532),i=a(6648);const s=()=>{document.getElementById("menu").addEventListener("click",(()=>{document.getElementById("menu").classList.contains("burger-open")?n():(document.getElementById("menu").classList.add("burger-open"),document.getElementById("navbar").classList.remove("burger-menu"))})),document.getElementById("navbar").querySelectorAll("a[href]").forEach((e=>{e.addEventListener("click",n)}))};function n(){document.getElementById("menu").classList.remove("burger-open"),document.getElementById("navbar").classList.add("burger-menu")}var r=a(7780),o=a(1351),l=a(5412);const d=(e,t)=>{const a=l.L.init(e,t);a&&(a.setOptions((0,r.Vb)()),a.value=(0,r.G3)(),a.onselect=e=>{(0,r.m0)(e),window.location.reload()})};let c=!1;const u={status:{get:()=>(0,i.LK)("/api/v1/status"),init:!0,update:!0}};async function p(e){const t=(new Date).getTime(),a=Object.fromEntries(Object.entries(u).map((([a,i])=>[a,(()=>{if(!e)return i.init;if(i.update){if(!i.updateInterval)return!0;if(i.timestamp||(i.timestamp=t+i.updateInterval),t>=i.timestamp)return i.timestamp=t+i.updateInterval,!0}})()?i.get():void 0])).filter((([,e])=>void 0!==e))),i=Object.values(a),s=await Promise.all(i.map((e=>e.then((e=>({ok:!0,payload:e}))).catch((e=>({ok:!e.code&&null,error:e}))))));return Object.fromEntries(Object.entries(a).map((([e],t)=>[e,s[t]])))}async function m(e){let a=!1;for(;;){let i=!1;try{const t=await p(a);t.status&&(c=null===t.status.ok),Object.values(t).forEach((({ok:e,error:t})=>{var a;e||(i=!0,null!==e&&(a=t,(0,o.S)(a,{fallbackMessage:{title:"API error",message:"Cannot connect to printer"}})))})),a?g(t):i||(v({...t,printer:e}),a=!0)}catch(e){h(e)}t.Z.setConnected(!c),await new Promise((e=>setTimeout(e,1e3)))}}function v(a){try{t.Z.init(a),window.onpopstate=t=>t&&(0,e.g9)(t.currentTarget.location.hash||"#dashboard"),(0,e.g9)(window.location.hash||"#dashboard")}catch(e){h(e)}}function g(e){try{t.Z.update(e)}catch(e){h(e)}}function h(e){(0,o.S)(e,{fallbackMessage:{title:"Application error",message:"Something bad happened on application side"}}),console.error(e)}window.onload=()=>{console.log("PrusaLink v.3.12.0 #b'b2c9fe5'"),s(),d("lang-dropdown","lang-dropdown"),(0,r.ot)(),document.querySelectorAll("a[href]").forEach((t=>{t.addEventListener("click",(a=>{(0,e.c4)(t.href)&&a.preventDefault()}))})),(0,i.Z5)().then((e=>{e&&m(e)}))}})()})();
diff --git a/requirements.txt b/requirements.txt
index 5298c794..4ccf6237 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,4 +1,4 @@
-prusa.connect.sdk.printer>=0.7.1
+prusa.connect.sdk.printer>=0.8.1
py-gcode-metadata
pip>=22.2.0
bidict~=0.22.1